Manager.io MCP

io.github.flumpiey由 GitHub 账号 flumpiey 发布v0.2.6更新于 Oct 24, 2026

MCP server for Manager.io bookkeeping: read-first with opt-in scoped task and write tools

概览

AI 生成的概览

让 AI 助手读取自托管 Manager.io 会计数据,并在开启作用域后写入记账内容。

可以做什么
把 MCP 主机连接到 Manager.io 的 HTTP API,提供发现、记录搜索以及账龄应收、银行余额、试算平衡表、损益表、资产负债表和税务汇总等报表读取工具。可选的按作用域任务工具支持意图明确的写入,例如开具发票或报价、登记客户与供应商付款、账户间转账、日记账分录和定金。另有已弃用的 CRUD 工具集和 raw 逃生通道,高风险路径由硬性拒绝清单拦截。
适用场景
适合把账目放在自托管 Manager.io 实例中,希望用自然语言查询发票、余额和报表的用户。也适合希望助手登记日常交易、但只开启所需写入作用域的团队。
运行要求
以 stdio 方式在本地运行,是通过 uvx 启动的 Python 包,需要 Python 3.10 或更高版本以及 uv。需要可访问的 Manager.io API,通过 MANAGER_API_URL 和访问令牌 MANAGER_API_KEY 配置,令牌以 X-API-KEY 请求头发送。可选的 MANAGER_MCP_WRITE_SCOPES 和 MANAGER_MCP_DELETE_SCOPES 控制写入与删除。
安装前请注意
MANAGER_API_KEY 是会计系统的秘密访问令牌,不要写入共享配置,生产环境建议使用密钥管理服务。写入默认关闭,但启用 MANAGER_MCP_WRITE_SCOPES 或 MANAGER_MCP_DELETE_SCOPES 后,助手可以创建、更新、作废或删除真实财务记录,应从小范围开始并核对结果。删除作用域不会由写入作用域自动推导。一个进程只对应一个 MANAGER_API_URL,多业务区分尚未验证。

安装

在 SourceWeft 中

  1. 打开 控制台中的 Manager.io MCP,将其添加到工作区。
  2. 为需要使用其工具的对话启用该服务。

Desktop only,通过 STDIO。 STDIO 服务会启动本地进程,因此需要 SourceWeft 桌面宿主。

其他 MCP 客户端

参照 仓库 中的启动说明。

README

[Manager.io]

manager-mcp

MCP server for self-hosted Manager.io: ask your AI about invoices, balances, and books.

[License: MIT] [Python] [MCP] [CI] [PyPI]

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:

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 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).
  • Cursor plugin: .cursor-plugin/plugin.json uses docs/manager-icon.svg.
  • 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/...).

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

  1. In Manager, open Settings → Access Tokens.
  2. Create a token and copy the value into MANAGER_API_KEY.
  3. Set MANAGER_API_URL to your API base (desktop often http://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:

bash
uvx manager-mcp

Paste 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.

Cursor

Plugin (Configure UI for URL, key, and scopes): this repo is a Cursor plugin via .cursor-plugin/plugin.json + root mcp.json.

  1. Symlink or copy the clone to ~/.cursor/plugins/local/manager-mcp (Windows: %USERPROFILE%\.cursor\plugins\local\manager-mcp).
  2. Reload the window.
  3. 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.
  4. Confirm the manager MCP 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:

json
{  "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):

json
{  "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:

json
"MANAGER_MCP_WRITE_SCOPES": "quotes","MANAGER_MCP_DELETE_SCOPES": "quotes"

Restart Cursor after saving. Confirm manager under MCP settings.

Claude Desktop

Desktop Extension (.mcpb): download mcpb.mcpb from GitHub Releases. Use v0.2.6 or later.

  1. Open Claude Desktop → Settings → Extensions.
  2. Open Advanced settings → Install Extension…
  3. Select mcpb.mcpb. Review permissions, enter Manager API URL and Manager API key, then click Install.
  4. Leave Write scopes and Delete scopes empty for read-only.
  5. Restart Claude Desktop if tools do not appear.

Build your own bundle from a clone:

bash
npx @anthropic-ai/mcpb pack mcpb

On Windows, double-click often does nothing and dragging the file into chat attaches it to the conversation instead of installing it. Use Install Extension… in Settings.

Manual mcp.json config: edit the Claude Desktop config, then restart the app.

OSPath
macOS~/Library/Application Support/Claude/claude_desktop_config.json
Windows%APPDATA%\Claude\claude_desktop_config.json
json
{  "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:

json
{  "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"      }    }  }}
Claude Code

Add via CLI:

bash
claude mcp add manager --env MANAGER_API_URL=http://127.0.0.1:55667/api2 --env MANAGER_API_KEY=your-token -- uvx manager-mcp

Or edit ~/.claude.json / project MCP config:

json
{  "mcpServers": {    "manager": {      "command": "uvx",      "args": ["manager-mcp"],      "env": {        "MANAGER_API_URL": "http://127.0.0.1:55667/api2",        "MANAGER_API_KEY": "your-token"      }    }  }}
VS Code / GitHub Copilot

Create .vscode/mcp.json in the project root:

json
{  "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:

json
{  "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.

Windsurf

Edit ~/.codeium/windsurf/mcp_config.json (macOS/Linux) or the Windsurf MCP settings UI:

json
{  "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.

Zed

Add under context_servers in Zed settings.json (Agent Panel → settings also works):

json
{  "context_servers": {    "manager": {      "command": "uvx",      "args": ["manager-mcp"],      "env": {        "MANAGER_API_URL": "http://127.0.0.1:55667/api2",        "MANAGER_API_KEY": "your-token"      }    }  }}
Cline

Edit the Cline MCP settings file (cline_mcp_settings.json via the Cline MCP UI):

json
{  "mcpServers": {    "manager": {      "command": "uvx",      "args": ["manager-mcp"],      "env": {        "MANAGER_API_URL": "http://127.0.0.1:55667/api2",        "MANAGER_API_KEY": "your-token"      }    }  }}
Continue

In .continue/config.yaml:

yaml
mcpServers:  - name: manager    command: uvx    args:      - manager-mcp    env:      MANAGER_API_URL: http://127.0.0.1:55667/api2      MANAGER_API_KEY: your-token
Generic / any stdio MCP host

Any host that can spawn a stdio MCP server:

FieldValue
Commanduvx
Argsmanager-mcp
EnvMANAGER_API_URL, MANAGER_API_KEY (+ optional write scopes)
bash
uvx manager-mcp

Dev 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

VariableRequiredNotes
MANAGER_API_URLyesOpaque base URL (include /api2 when needed)
MANAGER_API_KEYyesSent as X-API-KEY; never logged
MANAGER_MCP_WRITE_SCOPESnoComma-separated domains for create/update. Empty = no writes.
MANAGER_MCP_DELETE_SCOPESnoComma-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):

json
"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)

ToolScopesPurpose
create_customer, create_supplierpartiesSingle-resource party setup
issue_sales_invoicesalesIssue invoice with inline lines
issue_purchase_invoicepurchasesIssue purchase invoice
issue_quotequotesIssue sales or purchase quote
convert_quote_to_invoicequotes + salesConvert quote to invoice
record_customer_paymentbankingReceipt + invoice allocation
record_supplier_paymentbankingPayment + invoice allocation
record_expensepayroll and/or purchasesExpense claim or purchase invoice
transfer_between_accountsbankingInter-account transfer
post_journal_entryledgerGeneric journal entry
void_documentmatching delete scopeVoid by resource name + key
record_customer_depositbankingDeposit before invoice exists
issue_deposit_invoicequotesDeposit document (quote)
apply_deposit_to_invoiceledgerApply 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.

ScopeResources (CRUD when enabled)
quotessales_quotes, purchase_quotes
orderssales_orders, purchase_orders
partiescustomers, suppliers
itemsinventory_items, non_inventory_items
salessales_invoices, credit_notes, delivery_notes
purchasespurchase_invoices, debit_notes, goods_receipts
bankingreceipts, payments, inter_account_transfers, bank_accounts
payrollemployees, payslips, expense_claims
ledgerjournal_entries, depreciation_entries, amortization_entries

Example with recommended scopes only:

json
"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.

  1. Ensure a Customer deposits bank/cash account exists in Manager (Settings → Bank and Cash Accounts).
  2. 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).
  3. issue_deposit_invoice (optional) - quote styled as a deposit document for the customer.
  4. issue_sales_invoice when the real invoice is raised.
  5. apply_deposit_to_invoice - journal entry moving deposit balance to the invoice (clone an existing journal via get_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 or raw scope.
  • Update MANAGER_MCP_WRITE_SCOPES to the recommended narrow set above instead of enabling all domains.

Tools

Read tools

ToolPurposePeriod (from_date / to_date)
list_resourcesDiscovery; reports read_only + live write/delete scopesn/a
list_recordsSearch/page a curated collectionn/a
get_recordFetch one record via {path}-form/{key}n/a
aged_receivablesOutstanding / aging customersAccepted; may be unsupported on this view
aged_payablesAging suppliersAccepted; may be unsupported on this view
bank_balancesBank/cash balances snapshotAccepted; may be unsupported on this view
trial_balanceTrial balanceForwarded as fromDate / toDate
profit_and_lossP&LForwarded as fromDate / toDate
balance_sheetBalance sheetForwarded as fromDate / toDate
tax_summaryTax summaryAccepted; 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.

PatternRequiresNotes
create_{stem}write scopeDeprecated in 0.2.0
update_{stem}write scopeDeprecated in 0.2.0
delete_{stem}delete scopeDeprecated in 0.2.0; use void_document

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

bash
uv sync --extra devuv run manager-mcp

Offline tests only (respx). No live Manager required:

bash
uv run ruff check src testsuv 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.

License

MIT. See LICENSE.

来源:README.md,提交 c50c4d7

工具

0
SourceWeft 尚未在沙箱中启动过该软件包,因此其工具未知。

版本历史

1
  1. v0.2.6最新Sep 16, 2026

评分

已满足适用检查项的 50%

该评分衡量此收录条目的完整程度,依据注册中心条目、端点与公开来源计算得出。它不是对服务器本身的评价,也不表示服务器安全或当前可用:可连通性是带日期的检查结果,评分也不包含安装量或用户评价。

  • 近 30 天内可连通25 分

    请保持端点能够响应 MCP 握手;SourceWeft 每 30 天探测一次。

  • 已声明认证方式10 分

    请在注册中心条目中声明凭据请求头,或保持端点能够响应探测,以便判定其认证方式。

  • 已列出工具15 分

    请让服务器在无凭据时响应 tools/list,或发布可在沙箱中无凭据启动的软件包。

  • 描述必需15 分
  • 图标10 分
  • 文档15 分
  • 许可证10 分