# Crunch Accounting (crunch-mcp) (oci · ghcr.io/mattoddie/crunch-mcp)

Work with your Crunch Accounting books: expenses, receipts, invoices, clients, suppliers and banking

- Trust score: 53/100 (low)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-10-23

## Components

- mcpb · `osx-x64`: 20/100, [markdown](https://verifymcp.io/servers/mattoddie-crunch-mcp/crunch-mcp-darwin-amd64.md), [page](https://verifymcp.io/servers/mattoddie-crunch-mcp/crunch-mcp-darwin-amd64)
- mcpb · `osx-arm64`: 20/100, [markdown](https://verifymcp.io/servers/mattoddie-crunch-mcp/crunch-mcp-darwin-arm64.md), [page](https://verifymcp.io/servers/mattoddie-crunch-mcp/crunch-mcp-darwin-arm64)
- mcpb · `linux-x64`: 53/100, [markdown](https://verifymcp.io/servers/mattoddie-crunch-mcp/crunch-mcp-linux-amd64.md), [page](https://verifymcp.io/servers/mattoddie-crunch-mcp/crunch-mcp-linux-amd64)
- mcpb · `linux-arm64`: 20/100, [markdown](https://verifymcp.io/servers/mattoddie-crunch-mcp/crunch-mcp-linux-arm64.md), [page](https://verifymcp.io/servers/mattoddie-crunch-mcp/crunch-mcp-linux-arm64)
- mcpb · `win-x64`: 20/100, [markdown](https://verifymcp.io/servers/mattoddie-crunch-mcp/crunch-mcp-windows-amd64.md), [page](https://verifymcp.io/servers/mattoddie-crunch-mcp/crunch-mcp-windows-amd64)
- mcpb · `win-arm64`: 20/100, [markdown](https://verifymcp.io/servers/mattoddie-crunch-mcp/crunch-mcp-windows-arm64.md), [page](https://verifymcp.io/servers/mattoddie-crunch-mcp/crunch-mcp-windows-arm64)
- oci · `ghcr.io/mattoddie/crunch-mcp`: 53/100 (this document), [markdown](https://verifymcp.io/servers/mattoddie-crunch-mcp/ghcr-io-mattoddie-crunch-mcp.md), [page](https://verifymcp.io/servers/mattoddie-crunch-mcp/ghcr-io-mattoddie-crunch-mcp)

## Channel facts

- Registry: `oci`
- Package: `ghcr.io/mattoddie/crunch-mcp`
- Version: `0.4.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-10-23.

- **Supply Chain Security**: 0/100
  - No malware scan is available for this kind of package: the supply-chain vendors we use do not cover it. This is a permanent gap in our coverage, not a finding about the package.
  - Known CVEs could not be checked: this image's dependency list comes from an SBOM its publisher attached, which nothing verifies, so we will not report it as a clean result.
  - Install-script risk not yet assessed.
  - Dependency health could not be checked: this image's dependency list comes from an SBOM its publisher attached. It names packages and versions but not whether each is deprecated, still maintained or linked to its source, so there is nothing we can fairly grade.
- **Provenance & Transparency**: 100/100
  - Source repository is publicly reachable at the declared URL.
  - Cryptographically verified build provenance (signed, bound to mattoddie/crunch-mcp).
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 0 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 82/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (good).
  - Context-footprint check failed: tool/resource definitions use about 4590 tokens (~127/item across 36 items; 36 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 3/100
  - Stability observed for 1 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 100/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 100% of tool parameters carry a description.
- **Tool Safety**: 100/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - We read all 36 captured tool definition(s), and no name or description among them implies an irreversible operation.
  - An AI judge read all 37 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### How do I install the Crunch Accounting (crunch-mcp) server?

Crunch Accounting (crunch-mcp) runs locally as a container image, launched with docker run --rm -i -e MCP_TRANSPORT -e CRUNCH_CLIENT_ID -e CRUNCH_CLIENT_SECRET -e CRUNCH_REDIRECT_URI -e CRUNCH_REFRESH_TOKEN -e CRUNCH_ALLOW_WRITES -e CRUNCH_ALLOW_DELETES -e CRUNCH_ALLOW_EMAIL -e CRUNCH_TOOLSETS -e CRUNCH_FILES_DIR -e CRUNCH_AUDIT_LOG ghcr.io/mattoddie/crunch-mcp:0.4.1. Ready-made configuration for Claude, Cursor, VS Code, Codex and 3 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add mattoddie-crunch-mcp -- docker run --rm -i -e MCP_TRANSPORT -e CRUNCH_CLIENT_ID -e CRUNCH_CLIENT_SECRET -e CRUNCH_REDIRECT_URI -e CRUNCH_REFRESH_TOKEN -e CRUNCH_ALLOW_WRITES -e CRUNCH_ALLOW_DELETES -e CRUNCH_ALLOW_EMAIL -e CRUNCH_TOOLSETS -e CRUNCH_FILES_DIR -e CRUNCH_AUDIT_LOG ghcr.io/mattoddie/crunch-mcp:0.4.1
```

This image reads MCP_TRANSPORT, CRUNCH_CLIENT_ID, CRUNCH_CLIENT_SECRET, CRUNCH_REDIRECT_URI, CRUNCH_REFRESH_TOKEN, CRUNCH_ALLOW_WRITES, CRUNCH_ALLOW_DELETES, CRUNCH_ALLOW_EMAIL, CRUNCH_TOOLSETS, CRUNCH_FILES_DIR and CRUNCH_AUDIT_LOG. Set them in your client's env block for this server; docker run -e passes each one through to the container.

### Cursor

```json
{
  "mcpServers": {
    "mattoddie-crunch-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        "MCP_TRANSPORT",
        "-e",
        "CRUNCH_CLIENT_ID",
        "-e",
        "CRUNCH_CLIENT_SECRET",
        "-e",
        "CRUNCH_REDIRECT_URI",
        "-e",
        "CRUNCH_REFRESH_TOKEN",
        "-e",
        "CRUNCH_ALLOW_WRITES",
        "-e",
        "CRUNCH_ALLOW_DELETES",
        "-e",
        "CRUNCH_ALLOW_EMAIL",
        "-e",
        "CRUNCH_TOOLSETS",
        "-e",
        "CRUNCH_FILES_DIR",
        "-e",
        "CRUNCH_AUDIT_LOG",
        "ghcr.io/mattoddie/crunch-mcp:0.4.1"
      ]
    }
  }
}
```

This image reads MCP_TRANSPORT, CRUNCH_CLIENT_ID, CRUNCH_CLIENT_SECRET, CRUNCH_REDIRECT_URI, CRUNCH_REFRESH_TOKEN, CRUNCH_ALLOW_WRITES, CRUNCH_ALLOW_DELETES, CRUNCH_ALLOW_EMAIL, CRUNCH_TOOLSETS, CRUNCH_FILES_DIR and CRUNCH_AUDIT_LOG. Set them in your client's env block for this server; docker run -e passes each one through to the container.

### VS Code

```json
{
  "servers": {
    "mattoddie-crunch-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        "MCP_TRANSPORT",
        "-e",
        "CRUNCH_CLIENT_ID",
        "-e",
        "CRUNCH_CLIENT_SECRET",
        "-e",
        "CRUNCH_REDIRECT_URI",
        "-e",
        "CRUNCH_REFRESH_TOKEN",
        "-e",
        "CRUNCH_ALLOW_WRITES",
        "-e",
        "CRUNCH_ALLOW_DELETES",
        "-e",
        "CRUNCH_ALLOW_EMAIL",
        "-e",
        "CRUNCH_TOOLSETS",
        "-e",
        "CRUNCH_FILES_DIR",
        "-e",
        "CRUNCH_AUDIT_LOG",
        "ghcr.io/mattoddie/crunch-mcp:0.4.1"
      ]
    }
  }
}
```

This image reads MCP_TRANSPORT, CRUNCH_CLIENT_ID, CRUNCH_CLIENT_SECRET, CRUNCH_REDIRECT_URI, CRUNCH_REFRESH_TOKEN, CRUNCH_ALLOW_WRITES, CRUNCH_ALLOW_DELETES, CRUNCH_ALLOW_EMAIL, CRUNCH_TOOLSETS, CRUNCH_FILES_DIR and CRUNCH_AUDIT_LOG. Set them in your client's env block for this server; docker run -e passes each one through to the container.

### Codex

```bash
codex mcp add mattoddie-crunch-mcp -- docker run --rm -i -e MCP_TRANSPORT -e CRUNCH_CLIENT_ID -e CRUNCH_CLIENT_SECRET -e CRUNCH_REDIRECT_URI -e CRUNCH_REFRESH_TOKEN -e CRUNCH_ALLOW_WRITES -e CRUNCH_ALLOW_DELETES -e CRUNCH_ALLOW_EMAIL -e CRUNCH_TOOLSETS -e CRUNCH_FILES_DIR -e CRUNCH_AUDIT_LOG ghcr.io/mattoddie/crunch-mcp:0.4.1
```

This image reads MCP_TRANSPORT, CRUNCH_CLIENT_ID, CRUNCH_CLIENT_SECRET, CRUNCH_REDIRECT_URI, CRUNCH_REFRESH_TOKEN, CRUNCH_ALLOW_WRITES, CRUNCH_ALLOW_DELETES, CRUNCH_ALLOW_EMAIL, CRUNCH_TOOLSETS, CRUNCH_FILES_DIR and CRUNCH_AUDIT_LOG. Set them in your client's env block for this server; docker run -e passes each one through to the container.

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "mattoddie-crunch-mcp": {
      "type": "local",
      "command": [
        "docker",
        "run",
        "--rm",
        "-i",
        "-e",
        "MCP_TRANSPORT",
        "-e",
        "CRUNCH_CLIENT_ID",
        "-e",
        "CRUNCH_CLIENT_SECRET",
        "-e",
        "CRUNCH_REDIRECT_URI",
        "-e",
        "CRUNCH_REFRESH_TOKEN",
        "-e",
        "CRUNCH_ALLOW_WRITES",
        "-e",
        "CRUNCH_ALLOW_DELETES",
        "-e",
        "CRUNCH_ALLOW_EMAIL",
        "-e",
        "CRUNCH_TOOLSETS",
        "-e",
        "CRUNCH_FILES_DIR",
        "-e",
        "CRUNCH_AUDIT_LOG",
        "ghcr.io/mattoddie/crunch-mcp:0.4.1"
      ],
      "enabled": true
    }
  }
}
```

This image reads MCP_TRANSPORT, CRUNCH_CLIENT_ID, CRUNCH_CLIENT_SECRET, CRUNCH_REDIRECT_URI, CRUNCH_REFRESH_TOKEN, CRUNCH_ALLOW_WRITES, CRUNCH_ALLOW_DELETES, CRUNCH_ALLOW_EMAIL, CRUNCH_TOOLSETS, CRUNCH_FILES_DIR and CRUNCH_AUDIT_LOG. Set them in your client's env block for this server; docker run -e passes each one through to the container.

### Hermes

```yaml
mcp_servers:
  mattoddie-crunch-mcp:
    command: "docker"
    args: ["run", "--rm", "-i", "-e", "MCP_TRANSPORT", "-e", "CRUNCH_CLIENT_ID", "-e", "CRUNCH_CLIENT_SECRET", "-e", "CRUNCH_REDIRECT_URI", "-e", "CRUNCH_REFRESH_TOKEN", "-e", "CRUNCH_ALLOW_WRITES", "-e", "CRUNCH_ALLOW_DELETES", "-e", "CRUNCH_ALLOW_EMAIL", "-e", "CRUNCH_TOOLSETS", "-e", "CRUNCH_FILES_DIR", "-e", "CRUNCH_AUDIT_LOG", "ghcr.io/mattoddie/crunch-mcp:0.4.1"]
```

This image reads MCP_TRANSPORT, CRUNCH_CLIENT_ID, CRUNCH_CLIENT_SECRET, CRUNCH_REDIRECT_URI, CRUNCH_REFRESH_TOKEN, CRUNCH_ALLOW_WRITES, CRUNCH_ALLOW_DELETES, CRUNCH_ALLOW_EMAIL, CRUNCH_TOOLSETS, CRUNCH_FILES_DIR and CRUNCH_AUDIT_LOG. Set them in your client's env block for this server; docker run -e passes each one through to the container.

### Netclaw

```json
{
  "McpServers": {
    "mattoddie-crunch-mcp": {
      "Transport": "stdio",
      "Command": "docker",
      "Arguments": [
        "run",
        "--rm",
        "-i",
        "-e",
        "MCP_TRANSPORT",
        "-e",
        "CRUNCH_CLIENT_ID",
        "-e",
        "CRUNCH_CLIENT_SECRET",
        "-e",
        "CRUNCH_REDIRECT_URI",
        "-e",
        "CRUNCH_REFRESH_TOKEN",
        "-e",
        "CRUNCH_ALLOW_WRITES",
        "-e",
        "CRUNCH_ALLOW_DELETES",
        "-e",
        "CRUNCH_ALLOW_EMAIL",
        "-e",
        "CRUNCH_TOOLSETS",
        "-e",
        "CRUNCH_FILES_DIR",
        "-e",
        "CRUNCH_AUDIT_LOG",
        "ghcr.io/mattoddie/crunch-mcp:0.4.1"
      ]
    }
  }
}
```

This image reads MCP_TRANSPORT, CRUNCH_CLIENT_ID, CRUNCH_CLIENT_SECRET, CRUNCH_REDIRECT_URI, CRUNCH_REFRESH_TOKEN, CRUNCH_ALLOW_WRITES, CRUNCH_ALLOW_DELETES, CRUNCH_ALLOW_EMAIL, CRUNCH_TOOLSETS, CRUNCH_FILES_DIR and CRUNCH_AUDIT_LOG. Set them in your client's env block for this server; docker run -e passes each one through to the container.

### Other

```json
{
  "mcpServers": {
    "mattoddie-crunch-mcp": {
      "command": "docker",
      "args": [
        "run",
        "--rm",
        "-i",
        "-e",
        "MCP_TRANSPORT",
        "-e",
        "CRUNCH_CLIENT_ID",
        "-e",
        "CRUNCH_CLIENT_SECRET",
        "-e",
        "CRUNCH_REDIRECT_URI",
        "-e",
        "CRUNCH_REFRESH_TOKEN",
        "-e",
        "CRUNCH_ALLOW_WRITES",
        "-e",
        "CRUNCH_ALLOW_DELETES",
        "-e",
        "CRUNCH_ALLOW_EMAIL",
        "-e",
        "CRUNCH_TOOLSETS",
        "-e",
        "CRUNCH_FILES_DIR",
        "-e",
        "CRUNCH_AUDIT_LOG",
        "ghcr.io/mattoddie/crunch-mcp:0.4.1"
      ]
    }
  }
}
```

This image reads MCP_TRANSPORT, CRUNCH_CLIENT_ID, CRUNCH_CLIENT_SECRET, CRUNCH_REDIRECT_URI, CRUNCH_REFRESH_TOKEN, CRUNCH_ALLOW_WRITES, CRUNCH_ALLOW_DELETES, CRUNCH_ALLOW_EMAIL, CRUNCH_TOOLSETS, CRUNCH_FILES_DIR and CRUNCH_AUDIT_LOG. Set them in your client's env block for this server; docker run -e passes each one through to the container.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-10-22 (score 53)

First indexed and scored.

## MCP tools (36)

### `crunch_api_request` (~185 tokens)

Raw Crunch API request

Call any Crunch public API endpoint directly, for anything the other tools don't cover. `path` is relative to the API root and starts with the service: /banking, /clients, /company-details, /expenses, /immutable-data, /invoices or /user-details. Only GET is allowed because write access is disabled (CRUNCH_ALLOW_WRITES=false). Emailing invoices and turning on payment reminders are blocked (CRUNCH_ALLOW_EMAIL=false), including query parameters and body flags that might send email.

Input parameters:

- `body`: JSON request body for POST and PUT
- `method` (string): HTTP method: GET (default), POST, PUT or DELETE
- `path` (string, required): Path relative to https://public-api.crunch.co.uk/v1, starting with the service, for example /expenses/vat-types
- `query` (object): Query string parameters

### `crunch_auth_complete` (~113 tokens)

Finish Crunch login

Finish a login started with crunch_auth_start by exchanging the authorisation code for tokens, which are saved to the token file. Pass the full URL the browser was redirected to, or just the code together with the state crunch_auth_start returned.

Input parameters:

- `redirected_url` (string, required): The full URL from the browser's address bar after clicking Allow (it contains code= and state=), or just the code
- `state` (string): The state crunch_auth_start returned; only needed when redirected_url is just the code

### `crunch_auth_start` (~102 tokens)

Start Crunch login

Start logging this server in to a Crunch account (OAuth 2.0 with PKCE). Returns a URL for the user to open and approve. After they click Allow, the browser is sent to the redirect URI; if nothing is listening there the page fails to load, which is fine: ask the user to copy the full URL from the address bar and pass it to crunch_auth_complete. Logging in replaces the current tokens, possibly with a different Crunch account.

### `crunch_auth_status` (~48 tokens)

Crunch login status

Show whether this server is logged in to Crunch: where the tokens come from, the granted scopes, when the access token expires and whether a refresh token is available. Never shows the tokens themselves.

### `crunch_download_expense_attachment` (~173 tokens)

Download expense attachment

Download a receipt or other file attached to an expense. Images are returned so you can read them; other files (PDFs) come back as an embedded resource. Attachment IDs and names come from crunch_get_expense.

Input parameters:

- `attachment_id` (integer, required): Attachment ID within the expense (0, 1, 2...; see crunch_get_expense)
- `expense_id` (integer, required): Expense ID (see crunch_list_expenses)
- `file_name` (string): Attachment file name (looked up when omitted)
- `save_to` (string): Also save the file in the server's CRUNCH_FILES_DIR: a directory (the file keeps its name) or a file path, absolute or relative to it. Existing files are never overwritten. Only works when the server…

### `crunch_download_invoice_attachment` (~137 tokens)

Download invoice attachment

Download a file attached to a sales invoice. Attachment IDs and names come from crunch_get_invoice.

Input parameters:

- `attachment_id` (integer, required): Attachment ID within the invoice (see crunch_get_invoice)
- `file_name` (string): Attachment file name (looked up when omitted)
- `invoice_id` (integer, required): Invoice ID (see crunch_list_invoices)
- `save_to` (string): Also save the file in the server's CRUNCH_FILES_DIR: a directory (the file keeps its name) or a file path, absolute or relative to it. Existing files are never overwritten. Only works when the server…

### `crunch_download_invoice_pdf` (~124 tokens)

Download invoice PDF

Download a sales invoice as a PDF, as Crunch renders it for the customer. Returned as an embedded resource; use save_to to also write it to disk (when the server sets CRUNCH_FILES_DIR).

Input parameters:

- `invoice_id` (integer, required): Invoice ID (see crunch_list_invoices)
- `save_to` (string): Also save the file in the server's CRUNCH_FILES_DIR: a directory (the file keeps its name) or a file path, absolute or relative to it. Existing files are never overwritten. Only works when the server…

### `crunch_get_bank_account` (~57 tokens)

Get bank account

Get one bank account in full: balance, account details, bank feed, unmatched statement entries and whether it can be edited, archived or deleted.

Input parameters:

- `bank_account_id` (integer, required): Bank account ID (see crunch_list_bank_accounts)

### `crunch_get_client` (~47 tokens)

Get client

Get a client (customer) in full: contact details, billing address, payment terms and note.

Input parameters:

- `client_id` (integer, required): Client (customer) ID (see crunch_list_clients)

### `crunch_get_company_details` (~71 tokens)

Get company details

Get the business's details from Crunch: company name and number, VAT registration number, current VAT scheme (for example flat rate, with industry and limited cost trader status), and business and registered addresses.

Input parameters:

- `raw` (boolean): Return the full objects from the API instead of compact summaries (larger)

### `crunch_get_credit_card` (~40 tokens)

Get credit card

Get one credit card in full, including its opening balance.

Input parameters:

- `credit_card_id` (integer, required): Credit card ID (see crunch_list_credit_cards)

### `crunch_get_default_invoice_note` (~26 tokens)

Get default invoice note

Get the default note Crunch prints on new sales invoices (often payment instructions).

### `crunch_get_expense` (~82 tokens)

Get expense

Get one expense: its lines (types, VAT, amounts), payments, attachments, credit notes, and whether it can still be edited or deleted. raw=true returns the API object.

Input parameters:

- `expense_id` (integer, required): Expense ID (see crunch_list_expenses)
- `raw` (boolean): Return the API object unchanged (the base for hand-made updates)

### `crunch_get_expenses_total` (~217 tokens)

Get expenses total

Total the expenses matching the filters (gross amount, plus under- and over-paid amounts) without listing them. Handy for "how much did I spend on travel this year?".

Input parameters:

- `end_date` (string): Expenses dated on or before (YYYY-MM-DD)
- `expense_type` (string): Only this expense type, for example TRAVEL_AND_SUBSISTENCE
- `has_attachment` (boolean): Only expenses with (true) or without (false) a receipt attached
- `payment_end_date` (string): Paid on or before (YYYY-MM-DD)
- `payment_method` (string): Only expenses paid this way, for example EFT
- `payment_start_date` (string): Paid on or after (YYYY-MM-DD)
- `start_date` (string): Expenses dated on or after (YYYY-MM-DD)
- `status` (string, required): Expense status to total, as Crunch names it in the status field of expenses (see crunch_list_expenses)
- `supplier_id` (integer): Only this supplier's expenses

### `crunch_get_invoice` (~72 tokens)

Get invoice

Get one sales invoice: customer, dates, lines, VAT, payments received, credit notes, attachments and status. raw=true returns the API object.

Input parameters:

- `invoice_id` (integer, required): Invoice ID (see crunch_list_invoices); not the invoice number
- `raw` (boolean): Return the API object unchanged

### `crunch_get_invoice_status` (~58 tokens)

Get invoice status

Get an invoice's current state (status, number, amounts, outstanding balance, due date), which is lighter than crunch_get_invoice.

Input parameters:

- `invoice_id` (integer, required): Invoice ID (see crunch_list_invoices); not the invoice number

### `crunch_get_invoice_totals` (~191 tokens)

Get invoice totals

Get sales invoice totals: with no filters, everything invoiced and still outstanding; with filters (client, status, issue or due dates, invoice number, recurring), the amount invoiced, owed to you and owed by you for the matching invoices.

Input parameters:

- `client_id` (integer): Only this client's invoices
- `due_from_date` (string): Due on or after (YYYY-MM-DD)
- `due_to_date` (string): Due on or before (YYYY-MM-DD)
- `invoice_number` (string): Only this invoice number
- `issued_from_date` (string): Issued on or after (YYYY-MM-DD)
- `issued_to_date` (string): Issued on or before (YYYY-MM-DD)
- `recurring` (boolean): Only recurring (true) or one-off (false) invoices
- `status` (string): Only invoices with this status, as Crunch names it

### `crunch_get_opening_balances` (~63 tokens)

Get opening balances

Get the opening balances of bank accounts or credit cards, and whether each can still be edited.

Input parameters:

- `account_ids` (array, required): Bank account or credit card IDs
- `type` (string): Account type: bank_accounts (default) or credit_cards

### `crunch_get_overview` (~60 tokens)

Business overview

A one-call snapshot of the business: company and VAT details, bank account and credit card balances, sales invoice totals (invoiced and outstanding) and open accounting periods. A good first call for questions like "how is my business doing?".

### `crunch_get_recurring_expense` (~59 tokens)

Get recurring expense

Get a recurring expense in full: the template expense (supplier, lines, payment) and its schedule (recurringEvent).

Input parameters:

- `recurring_expense_id` (integer, required): Recurring expense ID (see crunch_list_recurring_expenses)

### `crunch_get_supplier` (~31 tokens)

Get supplier

Get a supplier in full.

Input parameters:

- `supplier_id` (integer, required): Supplier ID (see crunch_list_suppliers)

### `crunch_get_user_details` (~27 tokens)

Get user details

Get the logged-in Crunch user: ID, email address, first and last name.

### `crunch_list_accounting_periods` (~94 tokens)

List open accounting periods

List the open accounting periods (financial years) with their start and end dates and status. Expenses can only be created or changed in an open period; closed years can't be edited.

Input parameters:

- `fields` (array): Keep only these fields (dot paths, such as supplier.companyName)
- `limit` (integer): Maximum number of items
- `search` (string): Case-insensitive substring match on any value

### `crunch_list_bank_account_payments` (~280 tokens)

List bank account payments

List payments recorded in Crunch against a bank account (supplier payments, customer payments, transfers, salaries, dividends, tax payments...), either reconciled with the bank statement or still unreconciled. Paged; newest first by default.

Input parameters:

- `all` (boolean): Fetch every page (up to max_items) instead of a single page
- `bank_account_id` (integer, required): Bank account ID (see crunch_list_bank_accounts)
- `fields` (array): Keep only these fields (dot paths, such as supplier.companyName)
- `limit` (integer): Maximum number of items
- `max_items` (integer): With all=true, stop after this many results (default 1000, at most 10000)
- `page` (integer): Page to fetch, starting at 0 (default 0)
- `raw` (boolean): Return the full objects from the API instead of compact summaries (larger)
- `reconciled` (boolean, required): true for payments matched to bank statement entries, false for those still waiting to be reconciled
- `search` (string): Case-insensitive substring match on any value
- `size` (integer): Results per page, up to 200 (default 50)
- `sort` (string): Sort order as field,asc or field,desc, for example postingDate,desc

### `crunch_list_bank_accounts` (~134 tokens)

List bank accounts

List the business's bank accounts with their current balance, sort code and account number, default flag, bank feed state and how many statement entries still need matching. Use the IDs when recording payments.

Input parameters:

- `fields` (array): Keep only these fields (dot paths, such as supplier.companyName)
- `limit` (integer): Maximum number of items
- `raw` (boolean): Return the full objects from the API instead of compact summaries (larger)
- `search` (string): Case-insensitive substring match on any value
- `status` (string): Which to list: active (default), archived or all

### `crunch_list_clients` (~105 tokens)

List clients

List the business's clients (the customers you invoice) with email, payment terms and billing address. Use the IDs as the customer on invoices.

Input parameters:

- `fields` (array): Keep only these fields (dot paths, such as supplier.companyName)
- `limit` (integer): Maximum number of items
- `raw` (boolean): Return the full objects from the API instead of compact summaries (larger)
- `search` (string): Case-insensitive substring match on any value

### `crunch_list_countries` (~82 tokens)

List countries

List the countries Crunch knows, with the country codes to use in addresses and supplier records, and whether each is an EU member.

Input parameters:

- `fields` (array): Keep only these fields (dot paths, such as supplier.companyName)
- `limit` (integer): Maximum number of items
- `search` (string): Case-insensitive substring match on any value

### `crunch_list_credit_cards` (~112 tokens)

List credit cards

List the business's credit cards with their balances, default flag and unmatched statement entries.

Input parameters:

- `fields` (array): Keep only these fields (dot paths, such as supplier.companyName)
- `limit` (integer): Maximum number of items
- `raw` (boolean): Return the full objects from the API instead of compact summaries (larger)
- `search` (string): Case-insensitive substring match on any value
- `status` (string): Which to list: active (default), archived or all

### `crunch_list_expense_types` (~159 tokens)

List expense types

List the expense types (categories) Crunch accepts in expenseType fields, for example ACCOUNTANCY, TELEPHONE or TRAVEL_AND_SUBSISTENCE, grouped as in Crunch, with each type's default VAT type. Use the `name` values when creating expenses and suppliers.

Input parameters:

- `date` (string): Types valid on this date (YYYY-MM-DD; default today)
- `fields` (array): Keep only these fields (dot paths, such as supplier.companyName)
- `include_deprecated` (boolean): Include deprecated types (default false)
- `limit` (integer): Maximum number of items
- `raw` (boolean): Return the API response unchanged
- `search` (string): Case-insensitive substring match on any value

### `crunch_list_expenses` (~397 tokens)

List expenses

List expenses (purchases, receipts and bills), newest first, filtered by supplier, expense type, date, payment date, payment method or whether a receipt is attached. Each result shows supplier, amounts, status, outstanding balance and payment method. Paged (up to 200 per page); use all=true to fetch every page.

Input parameters:

- `all` (boolean): Fetch every page (up to max_items) instead of a single page
- `end_date` (string): Expenses dated on or before (YYYY-MM-DD)
- `expense_type` (string): Only this expense type, for example TRAVEL_AND_SUBSISTENCE
- `fields` (array): Keep only these fields (dot paths, such as supplier.companyName)
- `has_attachment` (boolean): Only expenses with (true) or without (false) a receipt attached
- `limit` (integer): Maximum number of items
- `max_items` (integer): With all=true, stop after this many results (default 1000, at most 10000)
- `page` (integer): Page to fetch, starting at 0 (default 0)
- `payment_end_date` (string): Paid on or before (YYYY-MM-DD)
- `payment_method` (string): Only expenses paid this way, for example EFT
- `payment_start_date` (string): Paid on or after (YYYY-MM-DD)
- `raw` (boolean): Return the full objects from the API instead of compact summaries (larger)
- `search` (string): Case-insensitive substring match on any value
- `size` (integer): Results per page, up to 200 (default 50)
- `sort` (string): Sort order as field,asc or field,desc, for example postingDate,desc
- `start_date` (string): Expenses dated on or after (YYYY-MM-DD)
- `supplier_id` (integer): Only this supplier's expenses

### `crunch_list_invoices` (~293 tokens)

List invoices

List sales invoices, newest first: number, customer, dates, status, amounts and outstanding balance. Filter by client, or by status (which fetches every page and filters here). Paged (up to 200 per page); use all=true to fetch every page.

Input parameters:

- `all` (boolean): Fetch every page (up to max_items) instead of a single page
- `client_id` (integer): Only this client's invoices (see crunch_list_clients)
- `fields` (array): Keep only these fields (dot paths, such as supplier.companyName)
- `limit` (integer): Maximum number of items
- `max_items` (integer): With all=true, stop after this many results (default 1000, at most 10000)
- `page` (integer): Page to fetch, starting at 0 (default 0)
- `raw` (boolean): Return the full objects from the API instead of compact summaries (larger)
- `search` (string): Case-insensitive substring match on any value
- `size` (integer): Results per page, up to 200 (default 50)
- `sort` (string): Sort order as field,asc or field,desc, for example postingDate,desc
- `status` (string): Only invoices with this status, as shown in the status field (for example DRAFT); fetches all pages and filters them here

### `crunch_list_payment_methods` (~133 tokens)

List payment methods

List payment methods (for example EFT, CASH, DIRECTORS_EXPENSES) for recording expense payments or invoice payments. Use `name` as the payment method.

Input parameters:

- `direction` (string): For invoices: the payment direction as Crunch names it (default INCOMING, money received from customers)
- `fields` (array): Keep only these fields (dot paths, such as supplier.companyName)
- `for` (string): Expense payments (default) or invoice (customer) payments
- `limit` (integer): Maximum number of items
- `search` (string): Case-insensitive substring match on any value

### `crunch_list_persons` (~136 tokens)

List directors and employees

List the people (directors and employees) linked to the business on a date. Use their IDs as the person for DIRECTORS_EXPENSES payments and as the employee on expense lines.

Input parameters:

- `date` (string): Date the people were in post (YYYY-MM-DD; default today)
- `fields` (array): Keep only these fields (dot paths, such as supplier.companyName)
- `limit` (integer): Maximum number of items
- `role` (string): Only people with this role, as Crunch names it (for example DIRECTOR)
- `search` (string): Case-insensitive substring match on any value

### `crunch_list_recurring_expenses` (~219 tokens)

List recurring expenses

List recurring expenses (regular bills such as rent, phone or software subscriptions that Crunch creates automatically) with supplier, amount, status and next date.

Input parameters:

- `all` (boolean): Fetch every page (up to max_items) instead of a single page
- `fields` (array): Keep only these fields (dot paths, such as supplier.companyName)
- `limit` (integer): Maximum number of items
- `max_items` (integer): With all=true, stop after this many results (default 1000, at most 10000)
- `page` (integer): Page to fetch, starting at 0 (default 0)
- `raw` (boolean): Return the full objects from the API instead of compact summaries (larger)
- `search` (string): Case-insensitive substring match on any value
- `size` (integer): Results per page, up to 200 (default 50)
- `sort` (string): Sort order as field,asc or field,desc, for example postingDate,desc

### `crunch_list_suppliers` (~142 tokens)

List suppliers

List suppliers (who you buy from), with their default expense type, country and VAT number. `name` asks Crunch for an exact company name. Use the IDs when creating expenses.

Input parameters:

- `fields` (array): Keep only these fields (dot paths, such as supplier.companyName)
- `include_archived` (boolean): Include archived suppliers (default false)
- `limit` (integer): Maximum number of items
- `name` (string): Exact company name to look up
- `raw` (boolean): Return the full objects from the API instead of compact summaries (larger)
- `search` (string): Case-insensitive substring match on any value

### `crunch_list_vat_types` (~76 tokens)

List VAT types

List the VAT types (rates) Crunch accepts, with their percentages. Expenses and invoices have separate lists; use the names exactly as shown (for example "Standard", "Exempt", "Outside the Scope"), not code-style values.

Input parameters:

- `for` (string): Which list: expenses, invoices or both (default both)

## Diagnostics

Captured diagnostic sections: Provenance. The full working is on the page: https://verifymcp.io/servers/mattoddie-crunch-mcp/ghcr-io-mattoddie-crunch-mcp#diagnostics

## Score history

- 2026-10-23: 53
- 2026-10-22: 53

## Common questions

### What is the Crunch Accounting (crunch-mcp) server?

Crunch Accounting (crunch-mcp) is listed in the public MCP registry as io.github.mattoddie/crunch-mcp. Work with your Crunch Accounting books: expenses, receipts, invoices, clients, suppliers and banking. This page covers its container image (ghcr.io/mattoddie/crunch-mcp).

### Is the Crunch Accounting (crunch-mcp) server safe to use?

Crunch Accounting (crunch-mcp) scores 53 out of 100 on VerifyMCP. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Crunch Accounting (crunch-mcp) server expose?

Crunch Accounting (crunch-mcp) exposes 36 tools: crunch_api_request, crunch_auth_complete, crunch_auth_start, crunch_auth_status, crunch_download_expense_attachment, and 31 more. Their descriptions and schemas cost roughly 4,345 tokens of context every time the server is loaded.

### Is the Crunch Accounting (crunch-mcp) server still maintained?

Crunch Accounting (crunch-mcp) is still listed as active in the MCP registry. We last reached this channel on 23 October 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the Crunch Accounting (crunch-mcp) server under?

Crunch Accounting (crunch-mcp) declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- GitHub Container Registry: https://ghcr.io/mattoddie/crunch-mcp
- Repository: https://github.com/mattoddie/crunch-mcp
- Website: https://crunch-mcp.mattoddie.dev/
- Changelog RSS feed: https://verifymcp.io/servers/mattoddie-crunch-mcp/ghcr-io-mattoddie-crunch-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/mattoddie-crunch-mcp/ghcr-io-mattoddie-crunch-mcp.json
- HTML version of this page: https://verifymcp.io/servers/mattoddie-crunch-mcp/ghcr-io-mattoddie-crunch-mcp
