MCP server for Manager.io bookkeeping: read-first with opt-in scoped task and write tools
io.github.flumpiey/manager-mcp — MCP Server for Manager.io
This MCP server provides integration for Manager.io bookkeeping. It is described as a “read-first” server with an option for “scoped task” execution, and it also exposes write tools when explicitly opted into. The server focuses on bookkeeping workflows tied to Manager.io.
🛠️ Key Features
MCP server for Manager.io bookkeeping
Read-first behavior
Opt-in scoped task support
Write tools available
🚀 Use Cases
Retrieving bookkeeping information from Manager.io
Running bounded/scoped operations as a selected task
Performing bookkeeping updates via write tools
⚡ Developer Benefits
Clear separation between read-first access and opt-in write operations
Support for scoped task execution alongside reading
MCP server for self-hosted Manager.io: ask your AI about invoices, balances, and books.
What is Manager.io?
Manager.io is free, self-hosted accounting software for Windows, macOS, and Linux (also available as Cloud Edition). It covers sales, purchases, banking, payroll, and the full ledger, with an HTTP API (/api2) for automation.
This project wires that API into the Model Context Protocol so Cursor, Claude, VS Code Copilot, and other MCP hosts can query your live books in natural language.
Task tools (opt-in) - intent-shaped writes such as record_customer_payment, issue_sales_invoice, record_customer_deposit (register when matching write scopes are set)
Deprecated CRUD tools - per-resource create_* / update_* / delete_* still register under scopes until 0.3.0; prefer task tools
raw escape hatch - restores the full CRUD set for advanced use
Hard denylist - access tokens, chart of accounts forms, tax/currency, email templates, and similar high-risk paths stay blocked even when writes are on
Transport is stdio. No HTTP server. No global install required if you use uv / uvx.
Branding / icons
stdio hosts (Cursor, Claude Desktop via mcp.json): the server advertises Manager branding in MCP serverInfo.icons (embedded PNG data URI, plus a GitHub raw HTTPS fallback).
Claude Desktop Extension: pack mcpb/ (includes icon.png). See Installation → Claude Desktop below.
Claude.ai remote connectors: Claude.ai ignores serverInfo.icons and uses the root-domain favicon of the connector URL. If you host a remote MCP later, serve docs/favicon.ico at the registrable domain root (e.g. https://acme.com/favicon.ico for https://mcp.acme.com/...).
Symlink or copy the clone to ~/.cursor/plugins/local/manager-mcp (Windows: %USERPROFILE%\.cursor\plugins\local\manager-mcp).
Reload the window.
Open Plugins → Configure on manager-mcp. Set Manager API URL and Manager API key. Leave Write scopes / Delete scopes empty for read-only, or paste a CSV such as quotes or quotes,orders.
Confirm the manager MCP server is enabled under Customize / MCP.
Restart Cursor after saving. Confirm manager under MCP settings.
Claude Desktop
Desktop Extension (.mcpb, shows branded icon): from a clone:
bash
npx @anthropic-ai/mcpb pack mcpb
Install the resulting .mcpb (double-click, drag onto Claude Desktop, or Settings → Extensions → Install Extension). Enter API URL and key when prompted; leave write/delete scopes empty for read-only. Requires uv on PATH (mcp_config runs uvx).
Manual mcp.json config: edit the Claude Desktop config, then restart the app.
Default with no scopes: 10 tools. All nine domain scopes plus every CRUD verb: up to 82 tools. Use raw only when you need the full CRUD escape hatch.
Legacy MANAGER_MCP_ALLOW_WRITES / ALLOW_WRITES / MANAGER_MCP_WRITES hard-fail if set. Use the scoped vars instead.
See .env.example. Prefer a secret manager for the API key in production configs.
Write scopes and task tools
When a scope is listed in MANAGER_MCP_WRITE_SCOPES, the server registers task tools for that domain plus deprecated CRUD twins. MANAGER_MCP_DELETE_SCOPES enables void_document and delete_* per domain.
Task tools (preferred)
Tool
Scopes
Purpose
create_customer, create_supplier
parties
Single-resource party setup
issue_sales_invoice
sales
Issue invoice with inline lines
issue_purchase_invoice
purchases
Issue purchase invoice
issue_quote
quotes
Issue sales or purchase quote
convert_quote_to_invoice
quotes + sales
Convert quote to invoice
record_customer_payment
banking
Receipt + invoice allocation
record_supplier_payment
banking
Payment + invoice allocation
record_expense
payroll and/or purchases
Expense claim or purchase invoice
transfer_between_accounts
banking
Inter-account transfer
post_journal_entry
ledger
Generic journal entry
void_document
matching delete scope
Void by resource name + key
record_customer_deposit
banking
Deposit before invoice exists
issue_deposit_invoice
quotes
Deposit document (quote)
apply_deposit_to_invoice
ledger
Apply deposit via journal
Bodies for composite tools use Manager-native JSON where noted. Clone get_record templates; do not invent field names.
Deprecated CRUD (0.2.0, removed 0.3.0)
Per-resource create_* / update_* / delete_* still register when their domain scope is enabled. Descriptions are prefixed [DEPRECATED in 0.2.0; use task tools] except create_customer / create_supplier. Set raw in MANAGER_MCP_WRITE_SCOPES to register CRUD without deprecation prefixes.
A deposit is not revenue. Money received before delivery must not be booked to an income account. Confirm tax/VAT treatment with your accountant.
Ensure a Customer deposits bank/cash account exists in Manager (Settings → Bank and Cash Accounts).
record_customer_deposit - posts cash to that account. If the account is missing, the tool returns precondition_failed with exact setup steps (Option A: guide only, no auto-create).
issue_deposit_invoice (optional) - quote styled as a deposit document for the customer.
issue_sales_invoice when the real invoice is raised.
apply_deposit_to_invoice - journal entry moving deposit balance to the invoice (clone an existing journal via get_record).
chart_of_accounts is list/search only (no single-form GET).
Bank dual path (intentional):bank_balances answers “what are my balances?”; list_records / get_record on bank_accounts answers “find account X and show detail.”
Write tools (deprecated)
Registered only for resources in enabled scopes. Prefer task tools above.
The Cursor plugin discovers this skill from skills/. Without the plugin, copy or symlink that folder into your agent skills path. It tells the model to call list_resources first, verify after writes, and which report tools to prefer.
Development
bash
uv sync --extra dev
uv run manager-mcp
Offline tests only (respx). No live Manager required:
bash
uv run ruff check src tests
uv run pytest
GitHub Actions matrix: Python 3.10 and 3.12.
Caveats
One process ↔ one MANAGER_API_URL. Multi-instance routing is out of scope.
Multi-business disambiguation on a shared host is unverified. Do not claim multi-business support until validated against a live multi-business setup.
Vendored src/manager_mcp/spec/api2.json is provenance only; runtime always hits the live URL.
ChatGPT Apps need a hosted HTTP MCP endpoint. This package is stdio-only.