Crunch Accounting (crunch-mcp)
Work with your Crunch Accounting books: expenses, receipts, invoices, clients, suppliers and banking
Que pouvez-vous faire avec Crunch Accounting (crunch-mcp) ?
- 🐳 Docker-first and tiny. One image (
ghcr.io/mattoddie/crunch-mcp) forlinux/amd64andlinux/arm64, about 21 MB. It's a single static Go binary on a distroless base, with no shell or package manager, running as a non-root user. It serves Streamabl... - 🛡️ Safe by default. The server is read-only unless you turn on writes. Deleting needs a second switch, and emailing invoices or payment reminders to customers needs a third. The switches also hold inside request bodies and the raw API tool, and the HTTP...
- 🔑 Least-privilege login. It logs in with Crunch's own OAuth 2.0 flow (with PKCE) and asks only for the scopes your settings need. Tokens never appear in tool output.
- 🔄 Stays logged in. Crunch rotates refresh tokens, and reusing an old one revokes your login. crunch-mcp saves each new token before using it and never refreshes twice at once, so it keeps working across restarts.
- ✏️ Careful updates. Changing an expense or invoice fetches the current record and changes only what you asked, so payments and attachments are never dropped by accident.
- 🔍 Preview and audit. Every tool that changes something takes
dry_run: trueto show the request it would send, with a field-by-field diff for updates, without changing anything.CRUNCH_AUDIT_LOGrecords each change in a JSON Lines audit log. - 🖥️ One-click Claude Desktop install. Each release has an extension bundle (
.mcpb) for macOS, Windows and Linux, with a settings form and no Docker needed. - 📎 Receipts and PDFs. Attach receipts and timesheets, download receipts as images the assistant can read, and fetch invoice PDFs.
Installation
Ajoutez ceci à la configuration MCP de votre client (Claude Desktop : claude_desktop_config.json ; Cursor : .cursor/mcp.json ; VS Code et les autres utilisent la même forme « mcpServers »).
ghcr.io/mattoddie/crunch-mcp:0.4.1claude mcp add crunch-accounting-crunch-mcp -e 'MCP_TRANSPORT=<MCP_TRANSPORT>' -e 'CRUNCH_CLIENT_ID=<CRUNCH_CLIENT_ID>' -e 'CRUNCH_CLIENT_SECRET=<your crunch_client_secret>' -e 'CRUNCH_REDIRECT_URI=<CRUNCH_REDIRECT_URI>' -e 'CRUNCH_REFRESH_TOKEN=<your crunch_refresh_token>' -e 'CRUNCH_ALLOW_WRITES=false' -e 'CRUNCH_ALLOW_DELETES=false' -e 'CRUNCH_ALLOW_EMAIL=false' -e 'CRUNCH_TOOLSETS=<CRUNCH_TOOLSETS>' -e 'CRUNCH_FILES_DIR=<CRUNCH_FILES_DIR>' -e 'CRUNCH_AUDIT_LOG=<CRUNCH_AUDIT_LOG>' -- docker run -i --rm ghcr.io/mattoddie/crunch-mcp:0.4.1
{
"mcpServers": {
"crunch-accounting-crunch-mcp": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"ghcr.io/mattoddie/crunch-mcp:0.4.1"
],
"env": {
"MCP_TRANSPORT": "<MCP_TRANSPORT>",
"CRUNCH_CLIENT_ID": "<CRUNCH_CLIENT_ID>",
"CRUNCH_CLIENT_SECRET": "<your crunch_client_secret>",
"CRUNCH_REDIRECT_URI": "<CRUNCH_REDIRECT_URI>",
"CRUNCH_REFRESH_TOKEN": "<your crunch_refresh_token>",
"CRUNCH_ALLOW_WRITES": "false",
"CRUNCH_ALLOW_DELETES": "false",
"CRUNCH_ALLOW_EMAIL": "false",
"CRUNCH_TOOLSETS": "<CRUNCH_TOOLSETS>",
"CRUNCH_FILES_DIR": "<CRUNCH_FILES_DIR>",
"CRUNCH_AUDIT_LOG": "<CRUNCH_AUDIT_LOG>"
}
}
}
}
Variables d'environnement
MCP_TRANSPORTServe MCP over stdio. The image serves HTTP by default.CRUNCH_CLIENT_IDobligatoire The client ID Crunch gave you when it approved your API application.CRUNCH_CLIENT_SECRETsecret Only for confidential clients, which Crunch issues a secret. Leave empty for a public client.CRUNCH_REDIRECT_URIOnly if your API account has a redirect URI registered with Crunch. Empty means http://127.0.0.1:8976/callback.CRUNCH_REFRESH_TOKENsecret Optional refresh token to start from instead of logging in. Don't use it anywhere else afterwards.CRUNCH_ALLOW_WRITESAllow creating and changing records, including issuing invoices. Off means read-only.CRUNCH_ALLOW_DELETESAlso allow deleting records and removing payments. Needs CRUNCH_ALLOW_WRITES.CRUNCH_ALLOW_EMAILAlso allow emailing invoices and turning on payment reminders. Needs CRUNCH_ALLOW_WRITES.CRUNCH_TOOLSETSOptional comma-separated toolsets to expose fewer tools, e.g. account,reference,expenses. Empty means all.CRUNCH_FILES_DIROptional folder, inside the container, for receipts to attach and files to save. Mount it too. Empty turns it off.CRUNCH_AUDIT_LOGOptional audit log of every change: stderr, or a file path inside the container. Empty turns it off.
https://github.com/mattoddie/crunch-mcp/releases/download/v0.4.1/crunch-mcp-0.4.1-darwin-arm64.mcpbhttps://github.com/mattoddie/crunch-mcp/releases/download/v0.4.1/crunch-mcp-0.4.1-darwin-amd64.mcpbhttps://github.com/mattoddie/crunch-mcp/releases/download/v0.4.1/crunch-mcp-0.4.1-windows-amd64.mcpbhttps://github.com/mattoddie/crunch-mcp/releases/download/v0.4.1/crunch-mcp-0.4.1-windows-arm64.mcpbhttps://github.com/mattoddie/crunch-mcp/releases/download/v0.4.1/crunch-mcp-0.4.1-linux-amd64.mcpbhttps://github.com/mattoddie/crunch-mcp/releases/download/v0.4.1/crunch-mcp-0.4.1-linux-arm64.mcpbDocumentation
Tirée du README du projet sur GitHub, actualisée chaque semaine. Les liens ouvrent GitHub.
Sommaire
crunch-mcp
Talk to your books.
An open-source Model Context Protocol server for Crunch Accounting, the UK online accounting service. It lets Claude and other AI assistants read and, if you allow it, update your expenses, receipts, invoices, clients, suppliers and bank accounts, all from one small Docker container.
Quick start · Documentation · Tool reference · Contributing
"How's the business looking this month?" You have £18,240 across your two bank accounts and £312 on the company credit card. Three sales invoices are unpaid, £7,800 in total. INV-0042 to Example Client Ltd (£2,400) is 12 days overdue; the other two aren't due yet. On the spending side, four September expenses have no receipt attached and one bill from Example Hosting Ltd (£96) is still unpaid. Want me to draft a polite chaser for INV-0042, or list the expenses that are missing receipts?
Ask about your business in plain English. The assistant picks from 70 tools to look things up and, if you allow it, make changes. Some examples:
- 🩺 "Give me a health check of the business."
- 🧾 "Here's a receipt for a train ticket to Leeds. Record it as an expense paid from the business account."
- 📬 "Which invoices are overdue? Draft a chasing email for each customer."
- 📊 "Summarise income and spending for the last quarter, with an estimate of the VAT."
- 🔍 "Which expenses this year have no receipt attached?"
- 📝 "Invoice Example Client Ltd for 5 days of consulting at £450 a day, on 30-day terms."
Highlights
- 🐳 Docker-first and tiny. One image (
ghcr.io/mattoddie/crunch-mcp) forlinux/amd64andlinux/arm64, about 21 MB. It's a single static Go binary on a distroless base, with no shell or package manager, running as a non-root user. It serves Streamable HTTP for a long-running service, or stdio fordocker run -i. You can also run the binary on its own. - 🛡️ Safe by default. The server is read-only unless you turn on writes. Deleting needs a second switch, and emailing invoices or payment reminders to customers needs a third. The switches also hold inside request bodies and the raw API tool, and the HTTP server requires a bearer token. Tools that aren't allowed aren't registered at all, and destructive tools, such as deletes and issuing an invoice, are labelled so your MCP client asks before running them.
- 🔑 Least-privilege login. It logs in with Crunch's own OAuth 2.0 flow (with PKCE) and asks only for the scopes your settings need. Tokens never appear in tool output.
- 🔄 Stays logged in. Crunch rotates refresh tokens, and reusing an old one revokes your login. crunch-mcp saves each new token before using it and never refreshes twice at once, so it keeps working across restarts.
- ✏️ Careful updates. Changing an expense or invoice fetches the current record and changes only what you asked, so payments and attachments are never dropped by accident.
- 🔍 Preview and audit. Every tool that changes something takes
dry_run: trueto show the request it would send, with a field-by-field diff for updates, without changing anything.CRUNCH_AUDIT_LOGrecords each change in a JSON Lines audit log. - 🖥️ One-click Claude Desktop install. Each release has an extension bundle (
.mcpb) for macOS, Windows and Linux, with a settings form and no Docker needed. - 📎 Receipts and PDFs. Attach receipts and timesheets, download receipts as images the assistant can read, and fetch invoice PDFs.
- 🎛️ Tunable. Expose only the toolsets you need, which keeps the model's context small and focused. List tools take
search,fieldsandlimitto fetch only what's needed. - 🧪 Tested. The test suite runs against a mock Crunch API and OAuth server on every build.
Quick start
Using Claude Desktop? Download the extension bundle for your computer from the latest release, open it, enter your Crunch client ID and ask Claude to "log in to Crunch". See Claude Desktop. The steps below set up the Docker server for every other client.
You need Docker, a Crunch account, Crunch API access and an MCP client such as Claude Code.
1. Get API access. Apply for access to Crunch's public API through the application form linked from Crunch's developer documentation. Crunch sends you a client ID, and a client secret if you're set up as a confidential client. There's no sandbox, so a free Crunch account is a good place to try things. Getting started has the details.
2. Set up the server.
mkdir crunch-mcp && cd crunch-mcp
curl -fsSLO https://raw.githubusercontent.com/mattoddie/crunch-mcp/main/compose.yaml
curl -fsSL https://raw.githubusercontent.com/mattoddie/crunch-mcp/main/example.env -o .env
# Edit .env: set CRUNCH_CLIENT_ID (and CRUNCH_CLIENT_SECRET if you have one)
# and a random MCP_AUTH_TOKEN, which the HTTP server requires (e.g. `openssl rand -hex 32`)
3. Log in to Crunch and start the server.
docker compose run --rm -p 127.0.0.1:8976:8976 crunch-mcp login # open the URL it prints and click Allow
docker compose up -d
If your browser isn't on the Docker host, the page after Allow won't load. That's fine: copy the URL from the address bar and paste it into the terminal.
4. Connect your assistant.
claude mcp add --transport http crunch http://<docker-host>:8080/mcp \
--header "Authorization: Bearer <MCP_AUTH_TOKEN>"
Now ask "How's my business doing?" in Claude Code.
Using Claude Desktop, VS Code, Cursor or Codex? See Connecting MCP clients. Prefer not to run a service? Use stdio mode with docker run -i or the local binary.
crunch-mcp is listed in the official MCP Registry as io.github.mattoddie/crunch-mcp, so clients that install servers from the registry can set it up for you, with the Docker image in stdio mode or an extension bundle.
Turning on changes
Out of the box the assistant can look but not touch. To let it make changes, add these to .env:
CRUNCH_ALLOW_WRITES=true # create and update expenses, invoices, clients, suppliers, payments, attachments…
CRUNCH_ALLOW_DELETES=true # also allow deleting records and removing payments (needs writes)
CRUNCH_ALLOW_EMAIL=true # also allow emailing invoices and payment reminders to customers (needs writes)
CRUNCH_TOOLSETS=account,reference,expenses,invoices,clients,suppliers # optional: expose fewer tools
CRUNCH_AUDIT_LOG=stderr # optional: log every change (or an absolute file path; see docs/configuration.md)
The login needs matching scopes, so log in again after turning on writes or deletes:
docker compose stop
docker compose run --rm -p 127.0.0.1:8976:8976 crunch-mcp login
docker compose up -d
Ask for a dry run first when it matters: "Record that receipt, but show me a dry run first."
Read Security before turning on writes for your real books.
What it can do
| Toolset | What's covered |
|---|---|
account | Login status and the OAuth login flow, the logged-in user, company details (VAT number and scheme, addresses) and a one-call business overview |
reference | The values Crunch expects: expense types, VAT types, payment methods, countries, open accounting periods, directors and employees |
banking | Bank accounts and credit cards: balances, details, payments recorded against them, opening balances, default accounts, archiving |
clients | Clients (the customers you invoice): list, look up, create, update and delete |
suppliers | Suppliers: list, look up, create, update, archive and delete |
expenses | Expenses: list and filter, totals, create with lines, payments and receipts, update, record and remove payments, attach and download receipts, delete |
recurring | Recurring expenses that Crunch creates on a schedule: list, create, pause or change, delete |
invoices | Sales invoices: list and filter, totals, create drafts, update, issue, email to the customer, record and remove payments, attachments, PDF download, delete |
raw | An escape hatch that calls any Crunch public API endpoint |
See the tool reference for every tool and argument. Ready-made prompts like business_health_check, record_receipt and chase_overdue_invoices chain the tools together for common jobs.
Documentation
The docs are also published at crunch-mcp.mattoddie.dev/docs, with search.
| 🚀 Getting started | Step-by-step setup, from API access to first question |
| 🔌 Connecting MCP clients | Claude Code, Claude Desktop, VS Code, Cursor, Codex, stdio mode |
| ⚙️ Configuration | Every environment variable, how login and tokens work, Docker secrets, toolsets |
| 🐳 Deployment | Compose, image tags, upgrades, TLS reverse proxy, hardening, running without Docker |
| 💬 Using crunch-mcp | Example conversations, prompts, how changes, receipts and PDFs work |
| 🧰 Tool reference | Every tool and prompt, generated from the code |
| 🛡️ Security | Threat model, least privilege, token storage, safe write setups |
| 📡 Compatibility | The Crunch API, its limits, and known gaps |
| 🩹 Troubleshooting | Common errors and how to fix them |
| 🛠️ Development | Architecture, adding a tool, testing |
Contributing
Contributions are very welcome, whether that's bug reports, docs or new tools. Read the contributing guide to get started, and please follow the code of conduct. To report a vulnerability, see the security policy. Please don't open a public issue for one.
License
MIT © Matt Oddie
crunch-mcp is an independent community project. It is not affiliated with, endorsed by or sponsored by Crunch (E-Crunch Ltd). "Crunch" is a trademark of E-Crunch Ltd.
Questions fréquentes
Qu'est-ce que Crunch Accounting (crunch-mcp) ?
Work with your Crunch Accounting books: expenses, receipts, invoices, clients, suppliers and banking
Comment installer Crunch Accounting (crunch-mcp) ?
Il s'exécute sur votre machine. Dans Claude Code : claude mcp add crunch-accounting-crunch-mcp -e 'MCP_TRANSPORT=<MCP_TRANSPORT>' -e 'CRUNCH_CLIENT_ID=<CRUNCH_CLIENT_ID>' -e 'CRUNCH_CLIENT_SECRET=<your crunch_client_secret>' -e 'CRUNCH_REDIRECT_URI=<CRUNCH_REDIRECT_URI>' -e 'CRUNCH_REFRESH_TOKEN=<your crunch_refresh_token>' -e 'CRUNCH_ALLOW_WRITES=false' -e 'CRUNCH_ALLOW_DELETES=false' -e 'CRUNCH_ALLOW_EMAIL=false' -e 'CRUNCH_TOOLSETS=<CRUNCH_TOOLSETS>' -e 'CRUNCH_FILES_DIR=<CRUNCH_FILES_DIR>' -e 'CRUNCH_AUDIT_LOG=<CRUNCH_AUDIT_LOG>' -- docker run -i --rm ghcr.io/mattoddie/crunch-mcp:0.4.1. Pour les autres clients, collez la configuration JSON de cette page dans leurs réglages MCP.
Faut-il une clé API pour Crunch Accounting (crunch-mcp) ?
Oui. Il attend CRUNCH_CLIENT_ID, CRUNCH_CLIENT_SECRET, CRUNCH_REFRESH_TOKEN, à renseigner dans sa configuration.
Crunch Accounting (crunch-mcp) est-il open source ?
Oui. Son code est sur GitHub sous licence MIT.
Qui maintient Crunch Accounting (crunch-mcp) ?
Il est publié par mattoddie. AI.tn le référence sans le maintenir ni le recommander.
Issu du registre MCP officiel. Être listé n'est pas une recommandation : vérifiez le code et les permissions d'un serveur avant de lui donner accès à vos données.