moneybird-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PORT | No | Port for the HTTP transport. Takes precedence over `MONEYBIRD_PORT` if both are set. | 3000 |
| MONEYBIRD_HOST | No | Bind address for the HTTP transport. | 127.0.0.1 |
| MONEYBIRD_PORT | No | Port for the HTTP transport. Used if `PORT` is not set. | 3000 |
| MONEYBIRD_BASE_URL | No | API base URL. For testing against a stub. | https://moneybird.com/api/v2 |
| MONEYBIRD_TOOLSETS | No | Toolsets to enable. Accepts `all`, `none`, or a comma-separated list with `-name` to drop one from the defaults. | core,invoicing,purchases,banking,time |
| MONEYBIRD_API_TOKEN | No | Token to use, bypassing the stored credentials entirely. | |
| MONEYBIRD_CLIENT_ID | No | OAuth application client id. Must be set together with the secret. | |
| MONEYBIRD_HTTP_AUTH | No | HTTP authentication mode: `none`, `shared-token`, `passthrough`, or `oauth`. | shared-token if MONEYBIRD_MCP_AUTH_TOKEN is set, else none |
| MONEYBIRD_TIME_ZONE | No | IANA time zone sent with date-sensitive requests, e.g. `Europe/Amsterdam`. | |
| MONEYBIRD_TRANSPORT | No | Transport for the MCP server: `stdio` or `http`. | stdio |
| MONEYBIRD_PUBLIC_URL | No | Public origin the `oauth` mode advertises and builds its redirect URI from. | |
| MONEYBIRD_ALLOW_WRITE | No | Set to `true` to enable tools that create or modify data. | false |
| MONEYBIRD_MAX_RETRIES | No | Number of retries after the first attempt, for 429 and 5xx responses. | 3 |
| MONEYBIRD_ALLOW_DELETE | No | Set to `true` to enable tools that delete data. Has no effect without `MONEYBIRD_ALLOW_WRITE=true`. | false |
| MONEYBIRD_DATABASE_URL | No | Postgres holding the `oauth` mode's authorization state. | |
| MONEYBIRD_OAUTH_SCOPES | No | Comma-separated scopes to request during `login --oauth`. | all six scopes |
| MONEYBIRD_REDIRECT_URI | No | Redirect URI for the OAuth flow. Must match the one registered with your application. | http://127.0.0.1:51739/callback |
| MONEYBIRD_CLIENT_SECRET | No | OAuth application client secret. Must be set together with the client id. | |
| MONEYBIRD_MCP_AUTH_TOKEN | No | Shared secret callers must present in `shared-token` mode. | |
| MONEYBIRD_MCP_CONFIG_DIR | No | Directory holding `credentials.json`. | $XDG_CONFIG_HOME/moneybird-mcp, else ~/.config/moneybird-mcp |
| MONEYBIRD_ADMINISTRATION_ID | No | Administration used when a tool does not name one. Defaults to the administration from stored credentials. | |
| MONEYBIRD_REQUEST_TIMEOUT_MS | No | Per-request timeout in milliseconds. | 30000 |
| MONEYBIRD_TOKEN_ENCRYPTION_KEY | No | 32 bytes of hex encrypting Moneybird tokens at rest. Generate with `openssl rand -hex 32`. |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| connect_moneybirdA | Authenticate this server against a Moneybird account. Call it when other tools report missing or rejected credentials. It opens the Moneybird token page and stores the token you create. |
| moneybird_connection_statusA | Report whether this server has working Moneybird credentials, which administration is selected, and which administrations the token can reach. |
| select_administrationA | Change the administration that tools use when they are not given an explicit administration_id. Applies for the rest of this session. |
| list_administrationsA | List every Moneybird administration this token can access, with id, name, language, currency and country. Use this first to discover the administration id other tools need. |
| list_contactsA | List or search contacts (customers and suppliers). Supply |
| get_contactA | Retrieve a single contact by its Moneybird id, or by your own |
| list_productsA | List the product catalogue, optionally narrowed by free-text query or currency. |
| get_productA | Retrieve a product by Moneybird id or by its |
| list_tax_ratesA | List the VAT rates configured for the administration. Invoice lines reference these by |
| list_ledger_accountsA | List the chart of accounts. Bookings and invoice lines reference these by |
| get_ledger_accountB | Retrieve a single ledger account. |
| list_identitiesA | List the identities (sender profiles) an administration can invoice under, including the default one. |
| get_identityA | Retrieve one identity, or the administration default when no id is given. |
| list_custom_fieldsA | List the custom fields defined for contacts, sales invoices and identities, with the ids needed to set them. |
| list_document_stylesA | List the document styles (invoice and estimate layouts) of the administration. |
| list_usersA | List the users with access to the administration, with their ids and permissions. |
| list_sales_invoicesA | List sales invoices. Defaults to the current financial year, so pass an explicit |
| get_sales_invoiceA | Retrieve one sales invoice by its Moneybird id, including its lines, payments and notes. |
| find_sales_invoice_by_invoice_idA | Look up a sales invoice by its printed invoice number, e.g. "2025-0001". Drafts have no invoice number and are never found this way. |
| find_sales_invoice_by_referenceA | Look up a sales invoice by the |
| download_sales_invoice_pdfA | Return a download URL for the invoice PDF. The link is signed and expires after 30 seconds, so use it immediately. |
| list_estimatesA | List estimates (quotes). Defaults to the current financial year, so pass an explicit |
| get_estimateA | Retrieve one estimate by its Moneybird id, or by the estimate number printed on the document ( |
| download_estimate_pdfA | Return a download URL for the estimate PDF. The link is signed and expires after 30 seconds, so use it immediately. |
| list_recurring_sales_invoicesA | List the recurring invoice schedules. Only active schedules are returned unless the filter says otherwise. |
| get_recurring_sales_invoiceA | Retrieve one recurring invoice schedule, including its lines and next invoice date. |
| list_external_sales_invoicesA | List revenue invoiced outside Moneybird, e.g. by a webshop or POS. Defaults to the current financial year, so pass an explicit |
| get_external_sales_invoiceA | Retrieve one external sales invoice, including its lines and payments. |
| list_subscriptionsA | List the subscriptions of one contact. Moneybird has no administration-wide subscription list, so |
| get_subscriptionA | Retrieve one subscription, including its product, billing cycle and recurring invoice. |
| list_subscription_templatesA | List the subscription templates of the administration. Requires the |
| list_purchase_invoicesA | List purchase invoices (bills received from suppliers), newest first. Narrow with |
| get_purchase_invoiceA | Retrieve one purchase invoice by id, with its lines, payments, attachments and notes. |
| list_receiptsA | List receipts (expenses paid on the spot, without a supplier invoice). Narrow with |
| get_receiptA | Retrieve one receipt by id, with its lines, payments, attachments and notes. |
| list_general_documentsA | List general documents: filed paperwork such as contracts and correspondence that carries a date and reference but no amounts. Narrow with |
| get_general_documentA | Retrieve one general document by id, with its attachments and notes. |
| list_general_journal_documentsA | List general journal documents (manual journal entries). Narrow with |
| get_general_journal_documentA | Retrieve one general journal document by id, with its debit and credit entries. |
| list_typeless_documentsA | List typeless documents: uploads parked in Moneybird that have not been classified as an invoice, receipt or anything else yet. Narrow with |
| get_typeless_documentA | Retrieve one typeless document by id, with its attachments. |
| download_document_attachmentA | Return a temporary download URL for one attachment of a document. Get the attachment ids from the document itself with get_purchase_invoice, get_receipt or the matching get tool. |
| list_financial_accountsA | List the bank and payment provider accounts of the administration, with the ids that financial mutations and statements reference as |
| list_financial_mutationsA | List bank transactions. Without a filter Moneybird returns the current financial year only, so pass an explicit |
| get_financial_mutationA | Retrieve one bank transaction by id, including the payments and ledger bookings currently linked to it. |
| get_paymentA | Retrieve a payment by id, whichever document it belongs to. Payment ids appear on invoices, receipts and on the bookings of a financial mutation. |
| list_purchase_transactionsA | List outgoing payment instructions (purchase transactions). Moneybird defaults to |
| get_purchase_transactionA | Retrieve one purchase transaction by id, with its amount, state and the document it pays. |
| list_time_entriesA | List tracked time. Without a filter Moneybird returns the current financial year, so pass an explicit |
| get_time_entryA | Retrieve a single time entry by id, with its contact, project, user and billable state. |
| list_projectsA | List projects. Moneybird returns only active projects unless the filter says otherwise. Time entries reference these by |
| get_projectA | Retrieve a single project by id, with its name, state and budget. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 52 tools
Each resource has a clear list/get pair, and document types are explicitly named, so most tools are easy to tell apart. The main ambiguity is between get_sales_invoice and the two find_sales_invoice_by_* lookup tools, plus a few similarly filtered list_* document tools, but descriptions resolve these.
The dominant verb_noun pattern is consistent: list_*, get_*, find_*_by_*, download_*_pdf. A few deviations exist, most notably moneybird_connection_status which is a noun phrase rather than a verb-led action, but the naming is generally predictable.
52 tools is well beyond the 25+ threshold and feels heavy for an MCP surface, even for a broad domain like Moneybird. Many tools are mechanical list/get pairs that could be consolidated without losing clarity.
The server is almost entirely read-only: it lists and retrieves many entities but offers no way to create, update, delete, send, or pay invoices, contacts, purchases, or time entries. This leaves common Moneybird workflows dead-ended despite the wide read coverage.