Please check the build logs for more information.
See Builds for ideas on how to fix a failed build, or Metadata for how to configure docs.rs builds.
If you believe this is docs.rs' fault, open an issue.
Formanator 🤖
[!NOTE] 🦀 Formanator is now built with Rust and distributed through Homebrew and Crates.io! v2.x, built in TypeScript and distributed through npm, is still available.
Formanator allows you to:
- Submit benefit claims to Forma and track progress from the command line, either one-by-one or in bulk
- Understand your Forma benefits and track and submit claims from any Model Context Protocol (MCP) client, for example Copilot CLI, Visual Studio Code or Claude Code
With the power of large language models 🧠👀 - free of charge thanks to GitHub Models - it can even analyse your receipts and generate your claims automatically.
Installation
macOS or Linux via Homebrew
&&
macOS, Linux, or Windows via Cargo, Rust's package manager
- Install Rust on your machine, if it isn't already installed.
- Install the
formanatorcrate by runningcargo install formanator. - Run
formanator --helpto check that everything is working and see the available commands.
macOS, Linux, or Windows via direct binary download
- Download the latest release for your platform. macOS, Linux, and Windows devices are supported.
- Add the binary to your
PATH(or$PATHon Unix-like systems), so you can execute it from your shell/terminal. For the best experience, call itformanator(orformanator.exeon Windows). - Run
formanator --helpto check that everything is working.
From source
Optional: PDF receipt support
To infer claim details for PDF receipts, you need to have GraphicsMagick and Ghostscript installed.
# macOS
Usage
Connecting to your Forma account
To get started, you'll need to connect Formanator to your Forma account:
- Run
formanator login. - Press Enter to open your browser to the Forma login page.
- Enter your email address and request a magic link.
- Copy the magic link from your email and paste it into the terminal.
- You're logged in 🥳
The access token is securely stored in the system Keychain on macOS. On other platforms, it's stored in ~/.formanator.toml.
Automatic update checks
Once a day, Formanator checks GitHub for a newer release. When one is available, it prints a yellow notice to stderr before running your command. The check is throttled by recording the last check timestamp in ~/.formanator.toml, only considers releases that are at least 72 hours old, and times out after 2 seconds so it can't slow the CLI down. To disable the check entirely, set the FORMANATOR_DISABLE_UPDATE_CHECK environment variable to any value.
Configuring an LLM provider (optional, but recommended)
When submitting a claim you can either provide every detail manually or let an LLM infer them. Three providers are supported:
- GitHub Copilot CLI — the default. If you don't configure OpenAI or GitHub Models, Formanator uses the GitHub Copilot CLI for inference. Formanator detects the
copilotbinary on yourPATHautomatically; if it lives elsewhere, set theCOPILOT_CLI_PATHenvironment variable or pass--copilot-cli-pathwith the path to the binary. - OpenAI — billed to your OpenAI account. Set the
OPENAI_API_KEYenvironment variable, or pass--openai-api-key. - GitHub Models — deprecated; may be removed in a future release. Free, with a generous quota. Set the
GITHUB_MODELS_TOKENenvironment variable to a GitHub Personal Access Token with read access to GitHub Models, or pass--github-models-token. When this provider is used, Formanator prints a deprecation warning to stderr.
If multiple are configured, Formanator prefers OpenAI, then GitHub Models, and otherwise falls back to the GitHub Copilot CLI.
Submitting claims in bulk
Automatically submitting all receipts in a directory (recommended)
All .jpg, .jpeg, .png, .pdf and .heic receipts in the directory will be analysed by the LLM. You'll be asked to confirm the inferred claim details for each receipt before it's submitted, and successfully-submitted receipts are moved into a processed/ subdirectory.
Manually submitting receipts using a CSV template
- Generate a template:
formanator generate-template-csv(writesclaims.csv). - Fill in one row per claim. If you've configured an LLM, you can leave
benefitandcategoryblank to have them inferred from the other fields, or leave every column exceptreceiptPathblank to have all claim details inferred from the receipt. Comma-separate paths in thereceiptPathcolumn to attach multiple receipts. - Optionally validate up-front:
formanator validate-csv --input-path claims.csv. - Submit:
formanator submit-claims-from-csv --input-path claims.csv.
Submitting a single claim
Option 1: Infer all claim details from the receipt (recommended)
Formanator will ask the LLM to extract the amount, merchant, purchase date, description, benefit and category, show you the result and ask you to confirm before submitting.
Option 2: Provide details manually, infer benefit and category
Option 3: Provide every detail manually
Use formanator benefits and formanator categories --benefit <benefit> to discover the valid values.
Listing claims
Model Context Protocol (MCP) usage
Formanator can run as an MCP server over stdio so AI assistants can interact with your Forma account programmatically.
{
"mcpServers": {
"formanator": {
"command": "/path/to/formanator",
"args": ["mcp"]
}
}
}
The server exposes six tools:
auth_status— check whether Formanator is logged in to Forma.login_start— request a Forma magic link by email.login_complete— complete login by pasting the emailed magic link.list_benefits_with_categories— list all benefits with their categories and remaining balances.list_claims— list claims, with optional filtering (currently onlyin_progress).create_claim— create a new claim.
If you are not already logged in, use login_start and login_complete from your MCP client. You can still log in ahead of time with formanator login.
To build a binary without MCP support (smaller binary, fewer dependencies):
Development