manager-mcp
This MCP server connects AI assistants to Manager.io accounting software, enabling natural language interactions with your financial data.
Read-only by default: 10 read tools provide discovery (list_resources), search and fetch for records (customers, suppliers, invoices, chart of accounts, bank accounts) via list_records/get_record, and financial reports/snapshots: aged_receivables, aged_payables, bank_balances, trial_balance, profit_and_loss, balance_sheet, tax_summary, with optional date filters.
Optional write operations: When write scopes (e.g., sales, banking) are explicitly enabled via environment variables, task tools like issue_sales_invoice, record_customer_payment, create_customer, transfer_between_accounts, and void_document become available, along with advanced raw CRUD access.
Safety controls: A hard denylist blocks high-risk operations (API tokens, tax settings, email templates). Write/delete scopes allow granular permission control.
Transport & integration: Uses stdio transport, compatible with any MCP host (Claude Desktop, Cursor, VS Code, etc.) and requires a Manager.io API key.
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., "@manager-mcpShow me the aged receivables."
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.
manager-mcp
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.
Useful Manager.io links:
Related MCP server: fiken-mcp
What this server does
Default is read-only. You get:
10 read tools - discovery, six searchable collections, seven report shortcuts
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 toolsrawescape hatch - restores the full CRUD set for advanced useHard 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 MCPserverInfo.icons(embedded PNG data URI, plus a GitHub raw HTTPS fallback).Cursor plugin:
.cursor-plugin/plugin.jsonusesdocs/manager-icon.svg.Claude Desktop Extension: pack
mcpb/(includesicon.png). See Installation → Claude Desktop below.Claude.ai remote connectors: Claude.ai ignores
serverInfo.iconsand uses the root-domain favicon of the connector URL. If you host a remote MCP later, servedocs/favicon.icoat the registrable domain root (e.g.https://acme.com/favicon.icoforhttps://mcp.acme.com/...).
Requirements
Python ≥ 3.10 (pulled in automatically by
uvx)uv (provides
uvx)A reachable Manager.io API:
MANAGER_API_URL+MANAGER_API_KEY
Access token
In Manager, open Settings → Access Tokens.
Create a token and copy the value into
MANAGER_API_KEY.Set
MANAGER_API_URLto your API base (desktop oftenhttp://127.0.0.1:55667/api2).
manager-mcp sends the token as the X-API-KEY header. Full walkthrough: Access Tokens.
Quick start
Run the PyPI package with uvx:
uvx manager-mcpPaste a client config below, set MANAGER_API_URL / MANAGER_API_KEY, restart the host, then ask: “Who owes me money?” or “Show bank balances.”
From a git clone (dev): uvx --from git+https://github.com/flumpiey/manager-mcp manager-mcp or uv run --directory /path/to/manager-mcp manager-mcp.
Installation
Configs below pull manager-mcp from PyPI. Leave write-scope env vars unset for read-only.
Plugin (Configure UI for URL, key, and scopes): this repo is a Cursor plugin via .cursor-plugin/plugin.json + root mcp.json.
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 asquotesorquotes,orders.Confirm the
managerMCP server is enabled under Customize / MCP.
Marketplace listing is a separate submit at cursor.com/marketplace/publish.
Manual mcp.json: project .cursor/mcp.json or user-wide ~/.cursor/mcp.json.
From PyPI:
{
"mcpServers": {
"manager": {
"type": "stdio",
"command": "uvx",
"args": ["manager-mcp"],
"env": {
"MANAGER_API_URL": "http://127.0.0.1:55667/api2",
"MANAGER_API_KEY": "your-token"
}
}
}
}Local editable (dev):
{
"mcpServers": {
"manager": {
"type": "stdio",
"command": "uv",
"args": ["run", "--directory", "/path/to/manager-mcp", "manager-mcp"],
"env": {
"MANAGER_API_URL": "http://127.0.0.1:55667/api2",
"MANAGER_API_KEY": "your-token"
}
}
}
}Optional scoped writes in the env block:
"MANAGER_MCP_WRITE_SCOPES": "quotes",
"MANAGER_MCP_DELETE_SCOPES": "quotes"Restart Cursor after saving. Confirm manager under MCP settings.
Desktop Extension (.mcpb, shows branded icon): from a clone:
npx @anthropic-ai/mcpb pack mcpbInstall 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.
OS | Path |
macOS |
|
Windows |
|
{
"mcpServers": {
"manager": {
"command": "uvx",
"args": ["manager-mcp"],
"env": {
"MANAGER_API_URL": "http://127.0.0.1:55667/api2",
"MANAGER_API_KEY": "your-token"
}
}
}
}Local clone:
{
"mcpServers": {
"manager": {
"command": "uv",
"args": ["run", "--directory", "/path/to/manager-mcp", "manager-mcp"],
"env": {
"MANAGER_API_URL": "http://127.0.0.1:55667/api2",
"MANAGER_API_KEY": "your-token"
}
}
}
}Add via CLI:
claude mcp add manager --env MANAGER_API_URL=http://127.0.0.1:55667/api2 --env MANAGER_API_KEY=your-token -- uvx manager-mcpOr edit ~/.claude.json / project MCP config:
{
"mcpServers": {
"manager": {
"command": "uvx",
"args": ["manager-mcp"],
"env": {
"MANAGER_API_URL": "http://127.0.0.1:55667/api2",
"MANAGER_API_KEY": "your-token"
}
}
}
}Create .vscode/mcp.json in the project root:
{
"servers": {
"manager": {
"type": "stdio",
"command": "uvx",
"args": ["manager-mcp"],
"env": {
"MANAGER_API_URL": "http://127.0.0.1:55667/api2",
"MANAGER_API_KEY": "your-token"
}
}
}
}Local editable:
{
"servers": {
"manager": {
"type": "stdio",
"command": "uv",
"args": ["run", "--directory", "/path/to/manager-mcp", "manager-mcp"],
"env": {
"MANAGER_API_URL": "http://127.0.0.1:55667/api2",
"MANAGER_API_KEY": "your-token"
}
}
}
}Reload the window. Open Copilot Chat and confirm the manager tools are available.
Edit ~/.codeium/windsurf/mcp_config.json (macOS/Linux) or the Windsurf MCP settings UI:
{
"mcpServers": {
"manager": {
"command": "uvx",
"args": ["manager-mcp"],
"env": {
"MANAGER_API_URL": "http://127.0.0.1:55667/api2",
"MANAGER_API_KEY": "your-token"
}
}
}
}Restart Windsurf after saving.
Add under context_servers in Zed settings.json (Agent Panel → settings also works):
{
"context_servers": {
"manager": {
"command": "uvx",
"args": ["manager-mcp"],
"env": {
"MANAGER_API_URL": "http://127.0.0.1:55667/api2",
"MANAGER_API_KEY": "your-token"
}
}
}
}Edit the Cline MCP settings file (cline_mcp_settings.json via the Cline MCP UI):
{
"mcpServers": {
"manager": {
"command": "uvx",
"args": ["manager-mcp"],
"env": {
"MANAGER_API_URL": "http://127.0.0.1:55667/api2",
"MANAGER_API_KEY": "your-token"
}
}
}
}In .continue/config.yaml:
mcpServers:
- name: manager
command: uvx
args:
- manager-mcp
env:
MANAGER_API_URL: http://127.0.0.1:55667/api2
MANAGER_API_KEY: your-tokenAny host that can spawn a stdio MCP server:
Field | Value |
Command |
|
Args |
|
Env |
|
uvx manager-mcpDev from a clone: uv run --directory /path/to/manager-mcp manager-mcp.
npx only runs npm packages. This is a Python package; use uvx.
Environment
Variable | Required | Notes |
| yes | Opaque base URL (include |
| yes | Sent as |
| no | Comma-separated domains for create/update. Empty = no writes. |
| no | Comma-separated domains for delete only. Never implied by WRITE_SCOPES. |
Valid scopes: quotes, orders, parties, items, sales, purchases, banking, payroll, ledger, raw. No wildcards (*, all).
Recommended (covers most bookkeeping without 82 tools):
"MANAGER_MCP_WRITE_SCOPES": "banking,sales,parties",
"MANAGER_MCP_DELETE_SCOPES": "sales,banking"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 |
| parties | Single-resource party setup |
| sales | Issue invoice with inline lines |
| purchases | Issue purchase invoice |
| quotes | Issue sales or purchase quote |
| quotes + sales | Convert quote to invoice |
| banking | Receipt + invoice allocation |
| banking | Payment + invoice allocation |
| payroll and/or purchases | Expense claim or purchase invoice |
| banking | Inter-account transfer |
| ledger | Generic journal entry |
| matching delete scope | Void by resource name + key |
| banking | Deposit before invoice exists |
| quotes | Deposit document (quote) |
| 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.
Scope | Resources (CRUD when enabled) |
| sales_quotes, purchase_quotes |
| sales_orders, purchase_orders |
| customers, suppliers |
| inventory_items, non_inventory_items |
| sales_invoices, credit_notes, delivery_notes |
| purchase_invoices, debit_notes, goods_receipts |
| receipts, payments, inter_account_transfers, bank_accounts |
| employees, payslips, expense_claims |
| journal_entries, depreciation_entries, amortization_entries |
Example with recommended scopes only:
"MANAGER_MCP_WRITE_SCOPES": "banking,sales,parties",
"MANAGER_MCP_DELETE_SCOPES": "sales"Denylist (always blocked): access-token forms, chart-of-accounts / *-account-form (except bank-or-cash), bank reconciliation, customer portal, starting balances, tax codes, exchange rates, currencies, custom fields/buttons, themes, email templates/settings.
Customer deposit workflow
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 returnsprecondition_failedwith 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_invoicewhen the real invoice is raised.apply_deposit_to_invoice- journal entry moving deposit balance to the invoice (clone an existing journal viaget_record).
Required scopes: banking, quotes (deposit doc), ledger (apply), sales (final invoice via MCP).
Migration from 0.1.x
0.2.0: Task tools added; CRUD tools deprecated but still present under scopes.
0.3.0: CRUD tools removed (except
create_customer/create_supplier). Use task tools orrawscope.Update
MANAGER_MCP_WRITE_SCOPESto the recommended narrow set above instead of enabling all domains.
Tools
Read tools
Tool | Purpose | Period ( |
| Discovery; reports | n/a |
| Search/page a curated collection | n/a |
| Fetch one record via | n/a |
| Outstanding / aging customers | Accepted; may be unsupported on this view |
| Aging suppliers | Accepted; may be unsupported on this view |
| Bank/cash balances snapshot | Accepted; may be unsupported on this view |
| Trial balance | Forwarded as |
| P&L | Forwarded as |
| Balance sheet | Forwarded as |
| Tax summary | Accepted; may be unsupported on this view |
Collections for list_records / get_record: customers, suppliers, sales_invoices, purchase_invoices, chart_of_accounts, bank_accounts.
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.
Pattern | Requires | Notes |
| write scope | Deprecated in 0.2.0 |
| write scope | Deprecated in 0.2.0 |
| delete scope | Deprecated in 0.2.0; use |
Agent Skill
Companion skill: skills/manager-accounting/SKILL.md.
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
uv sync --extra dev
uv run manager-mcpOffline tests only (respx). No live Manager required:
uv run ruff check src tests
uv run pytestGitHub 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.jsonis provenance only; runtime always hits the live URL.ChatGPT Apps need a hosted HTTP MCP endpoint. This package is stdio-only.
License
MIT. See LICENSE.
Maintenance
Related MCP Servers
- AlicenseAqualityCmaintenanceRead-only MCP server for reconciling SimpleFIN bank data against Firefly III ledger, enabling audit and review workflows without mutation.Last updated19311MIT
- AlicenseBqualityDmaintenanceA read-only MCP server that exposes Fiken accounting API's 61 GET endpoints as tools for AI assistants to query accounting data.Last updated61313MIT
- Flicense-qualityDmaintenanceRead-only MCP server for accessing personal finance data from Ogarni.AI, including receipts, categories, summaries, notifications, and more.Last updated

RiseUp MCP Serverofficial
AlicenseAqualityCmaintenanceMCP server for programmatic read-only access to RiseUp cashflow data, allowing AI assistants to retrieve budget information via natural language.Last updated231014MIT
Related MCP Connectors
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
Read-only NuMetric.work accounting & ERP data: statements, KPIs, reports, invoices, documents.
Read-only MCP server for Muovi, Argentina's trust-first local services marketplace (6 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/flumpiey/manager-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server