moneybird-mcp
This server lets an MCP client read and search a Moneybird administration: contacts, invoices, banking, time and more, with optional write/delete toolsets when enabled.
Connect & manage access: authenticate via
connect_moneybird, check status (moneybird_connection_status), list and select administrations.Core data: list/get contacts, products, tax rates, ledger accounts, identities/profiles, custom fields, document styles, and users.
Invoicing: list/get sales invoices, estimates, recurring sales invoices, external sales invoices, subscriptions, and templates; download PDFs; look up invoices by number or reference.
Purchases & documents: list/get purchase invoices, receipts, general documents, general journal documents, and typeless documents; download attachments.
Banking: list financial accounts and mutations, retrieve mutations and payments by id, list/get purchase transactions (payment instructions).
Time & projects: list/get time entries and projects, with filters for period, state, contact/project/user.
Safety & configuration: read-only by default; write tools require
MONEYBIRD_ALLOW_WRITE, delete/send requireMONEYBIRD_ALLOW_DELETE; toolsets and HTTP/stdio transport can be configured via env/flags.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@moneybird-mcpshow me my latest unpaid invoices"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
moneybird-mcp
A Model Context Protocol server for the Moneybird accounting API.
It exposes Moneybird as a set of MCP tools, so an assistant such as Claude can look up contacts, read invoices, check bank mutations, log time and pull reports from your administration. Access is read-only until you turn writing on, tools are grouped into toolsets you can enable individually, and the client paces its own requests to stay inside Moneybird's rate limit. It speaks stdio for local clients and Streamable HTTP for remote ones.
Quick start
Register the server with your client. For Claude Code:
claude mcp add moneybird -- npx -y moneybird-mcp serveThen ask your assistant to connect. The server starts without credentials and exposes a
connect_moneybird tool: it opens Moneybird's token page in your browser, asks for the token you
create there, verifies it, picks your administration and stores it — without leaving the
conversation.
That needs a client that supports MCP elicitation. Where it is unavailable the same setup runs in a terminal:
npx moneybird-mcp loginwhich walks you through the same steps and stores the result in
~/.config/moneybird-mcp/credentials.json.
Check that everything resolves before you rely on it:
npx moneybird-mcp statusstatus prints the enabled toolsets, the write and delete settings, where the credentials came
from, and the administrations the token can reach. It exits non-zero when it cannot reach
Moneybird.
Related MCP server: kalender.digital MCP Server
Authentication
Moneybird offers two ways to get a token, and this server supports both. Neither is fully
hands-off: Moneybird implements neither Dynamic Client Registration nor PKCE, so no flow exists
that skips creating a token or registering an application. That is a limitation of the Moneybird
API, not of this server. What the connect_moneybird tool does is remove every step around that
one — it opens the right page and captures the result for you.
Personal API token. You create it yourself at
https://moneybird.com/user/applications/new, tick the scopes you want, and paste it into
moneybird-mcp login. Simplest route. The scopes are fixed at creation, and Moneybird does not
currently expire these tokens — which also means one cannot be rotated automatically. Treat it like
a password.
OAuth application. You register an application in the same place, then:
export MONEYBIRD_CLIENT_ID=...
export MONEYBIRD_CLIENT_SECRET=...
npx moneybird-mcp login --oauthThe server opens Moneybird's authorization page, catches the redirect on
http://127.0.0.1:51739/callback, and exchanges the code. Moneybird matches redirect URIs exactly,
so that URI has to be registered with your application verbatim. Use --port to pick a different
one, or --oob to have Moneybird show the code in the browser instead of redirecting — useful
where no loopback listener can be opened. OAuth tokens can be revoked from Moneybird and refreshed
automatically when they carry an expiry.
To store a token without any prompting, for example in a provisioning script:
npx moneybird-mcp login --token "$MONEYBIRD_TOKEN"moneybird-mcp logout removes the stored file. For an OAuth credential it does not revoke the
authorization itself — do that in Moneybird.
See docs/authentication.md for scopes, refresh behaviour and the exact flows.
Configuration
Configuration comes from the environment; CLI flags override it.
Environment variables
Variable | Default | Purpose |
| — | Token to use, bypassing the stored credentials entirely. |
| from stored credentials | Administration used when a tool does not name one. |
|
| Toolsets to enable. Accepts |
|
|
|
|
|
|
|
|
|
|
| Bind address for the HTTP transport. |
|
| Port for the HTTP transport. |
|
|
|
| — | Shared secret callers must present in |
| — | OAuth application client id. Must be set together with the secret. |
| — | OAuth application client secret. |
| — | Public origin the |
| — | Postgres holding the |
| — | 32 bytes of hex encrypting Moneybird tokens at rest. |
| all six scopes | Comma-separated scopes to request during |
|
| Redirect URI for the OAuth flow. Must match the one registered with your application. |
| — | IANA time zone sent with date-sensitive requests, e.g. |
|
| API base URL. For testing against a stub. |
|
| Per-request timeout. |
|
| Retries after the first attempt, for 429 and 5xx responses. |
|
| Directory holding |
Commands
Command | What it does |
| Start the MCP server. This is the default when no command is given. |
| Authenticate and store credentials. |
| Remove the stored credentials. |
| Print the configuration and verify the connection. |
| List the tools the current settings expose. |
Flags
Flag | Command | Meaning |
|
| Serve over Streamable HTTP instead of stdio. |
|
| Bind address for |
|
| Port for |
|
| Path the MCP endpoint is served on. Default |
|
| Comma-separated toolsets; |
|
| Enable tools that create or modify data. |
|
| Enable tools that delete data. Implies |
|
| Default administration id. |
|
| Use the OAuth application flow. |
|
| Show the authorization code in the browser instead of redirecting. |
|
| Loopback port for the OAuth redirect. Default |
|
| Store a token without prompting. |
|
| Emit the tool list as JSON. |
| any | Print usage. |
| any | Print the version. |
Toolsets
Tools are grouped by Moneybird's own domains. Five are enabled by default; the other four are opt-in.
Toolset | Default | Covers |
| on | Administrations, contacts, products, projects, ledger accounts, tax rates, users. |
| on | Sales invoices, recurring invoices, estimates, workflows. |
| on | Purchase invoices, receipts, documents, general journal documents. |
| on | Financial accounts, financial mutations, payment linking. |
| on | Time entries. |
| off | Profit and loss, balance sheet and other |
| off | Fixed assets and depreciation. |
| off | Notes, tasks, events, custom fields. |
| off | Webhook subscriptions. |
Set them explicitly, add to the defaults, or subtract from them:
moneybird-mcp serve --toolsets core,invoicing # exactly these two
moneybird-mcp serve --toolsets all # everything
moneybird-mcp serve --toolsets reports # exactly reports
moneybird-mcp serve --toolsets -banking,-time # the defaults minus twoA -name entry anywhere in the list means the list starts from the defaults rather than from
nothing. all wins over everything else. An unknown name is an error, not a silent no-op.
The full per-tool listing is in docs/tools.md, or run moneybird-mcp tools.
Safety model
Every tool declares one of three access tiers, and the server only registers the ones the current settings permit. A tool that is not registered is invisible to the model — it cannot be called by mistake or talked into existence.
read — always registered.
write — creates or modifies data. Needs
--allow-writeorMONEYBIRD_ALLOW_WRITE=true.destroy — needs
--allow-deleteand--allow-write.--allow-deleteon its own does nothing.
Deleting is gated separately from writing because the two failure modes are not comparable. A
wrong write leaves a record you can correct; a delete, or an invoice sent to a customer, is not
something the API can take back. Enabling writes so an assistant can draft an invoice should not
also let it remove your bookkeeping. The destroy tier therefore covers both deletions and calls
that are irreversible in practice, such as sending a document to a contact.
Read-only is the default. Turn on the least you need:
claude mcp add moneybird --env MONEYBIRD_ALLOW_WRITE=true -- npx -y moneybird-mcp serveClient setup
Claude Code
claude mcp add moneybird -- npx -y moneybird-mcp serveWith write access and a wider tool selection:
claude mcp add moneybird \
--env MONEYBIRD_ALLOW_WRITE=true \
--env MONEYBIRD_TOOLSETS=all \
-- npx -y moneybird-mcp serveClaude Desktop
Add the server to claude_desktop_config.json:
{
"mcpServers": {
"moneybird": {
"command": "npx",
"args": ["-y", "moneybird-mcp", "serve"],
"env": {
"MONEYBIRD_ALLOW_WRITE": "true"
}
}
}
}The file lives at ~/Library/Application Support/Claude/claude_desktop_config.json on macOS and
%APPDATA%\Claude\claude_desktop_config.json on Windows. Restart the app after editing it.
Any stdio client
The server is a plain stdio MCP server. Run moneybird-mcp serve and speak JSON-RPC over stdin and
stdout. Diagnostics go to stderr, never stdout.
{
"command": "npx",
"args": ["-y", "moneybird-mcp", "serve"],
"env": {
"MONEYBIRD_API_TOKEN": "..."
}
}If you would rather not store credentials on disk, set MONEYBIRD_API_TOKEN in the client's env
block. It takes precedence over anything in credentials.json.
Docker and self-hosting
docker build -t moneybird-mcp .
docker run --rm -p 3000:3000 -e MONEYBIRD_API_TOKEN=... moneybird-mcpThe image defaults to the HTTP transport on 0.0.0.0:3000 and exposes /mcp, plus an unauthenticated
/healthz. Do not put it on a public address without authentication.
docs/hosting.md covers the three HTTP authentication modes, multi-tenant
passthrough deployments, reverse-proxy notes and connecting a remote client.
Rate limits
Moneybird allows 150 requests per 5 minutes per IP, and 50 per 5 minutes for /reports
endpoints. The client keeps its own sliding-window counters for both budgets and delays a request
that would exceed one, so ordinary use does not produce 429s. When Moneybird returns a 429 anyway,
the client honours Retry-After and otherwise backs off exponentially with full jitter, up to
MONEYBIRD_MAX_RETRIES attempts.
The budget is per IP, not per token. Several instances behind one egress address share it, and the local counters cannot see each other. Size deployments accordingly.
Development
npm install
npm run build # before typecheck: the docs generator imports the built output
npm run typecheck
npm test
npm run formatdocs/tools.md is generated from the tool definitions. Regenerate it after adding or changing a
tool:
npm run docs:toolsspec/endpoints.json pins Moneybird's published operation list, and a test checks every path a
tool calls against it. Refresh it when Moneybird ships API changes:
npm run spec:refresh
npm testA failing endpoint test after a refresh means a route a tool depends on moved or was withdrawn.
Contributing
Issues and pull requests are welcome at
https://github.com/HalloSouf/moneybird-mcp. Please run npm run typecheck, npm test and
npm run format:check before opening a pull request; CI runs the same checks on Node 20 and 22.
Licence
MIT. See LICENSE.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityAmaintenanceMCP server for the bexio API, enabling interaction with contacts, sales, accounting, projects, and more through 35 tools. Supports both PAT and OAuth authentication with read-only mode and tool group filtering.35213MIT
- AlicenseAqualityCmaintenanceEnables managing events and subcalendars from kalender.digital through MCP tools for listing, creating, updating, and deleting events and subcalendars.8MIT
- AlicenseNot gradedqualityBmaintenanceHosted MCP server for Exact Online. Ask questions, pull reports, and prepare bookings you approve first.MIT
- AlicenseAqualityCmaintenanceEnables MCP clients to read and write Bokio accounting data for one company through 85 tools covering invoices, customers, suppliers, journal entries, chart of accounts, fiscal years, items, tags, uploads, SIE export, and bank payments.40MIT
Related MCP Connectors
Log, query, and edit expenses, budgets, and accounts in Manilo from any MCP-compatible AI assistant.
Search, document and execute authenticated API calls across 700+ apps via one MCP server
Conta Azul ERP MCP — sales, customers, finance and NF-e via OAuth 2.0. Read + write, 35 tools.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/HalloSouf/moneybird-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server