关于 QuickBooks Online MCP Server
这款 Python MCP 服务用于管理 QuickBooks Online 的发票、客户和付款,并提供公司及应收款只读资源。它采用 OAuth 2.1 与 PKCE,并包含限流和重试处理。
主要功能
- 01创建、读取、更新、删除、列出和搜索记录
- 02发票、客户和付款操作
- 03公司及应收款只读资源
- 04OAuth 2.1 与 PKCE 及令牌刷新
- 05遵循限流规则并支持重试
适用场景
- 01通过 MCP 客户端管理客户记录
- 02创建和跟踪发票及付款
- 03查看公司和应收款汇总
MCP 相关
向 MCP 客户端提供 18 个工具和只读 JSON 资源。支持 stdio 和 Streamable HTTP。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
uvx mcp-quickbooksQBO_CLIENT_ID密钥Intuit app client id.QBO_CLIENT_SECRET密钥Intuit app client secret.QBO_ENVIRONMENTsandbox or production.QBO_REALM_IDQuickBooks company (realm) id.QBO_SCOPESSpace-separated OAuth scopes; defaults to accounting only.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
18收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| customer | any | 是 | 要写入的 Customer 字段。display_name 为必填项,且必须唯一。 |
详细介绍
QuickBooks Online MCP 服务
适用于 Claude Desktop 和任意 MCP 客户端的 QuickBooks Online MCP 服务,使用 Python 和官方 MCP SDK(FastMCP)编写。它提供 18 个用于发票、客户和付款的工具(创建、读取、更新、删除、列出、搜索),以及只读的公司和应收款资源;通过真正的 OAuth 2.1 授权码 + PKCE 流程实现,并支持自动刷新令牌、遵循 QuickBooks 限流规则的客户端限流,以及能告知 Agent 下一步操作的结构化错误。支持通过 stdio 和 Streamable HTTP 运行。
相关项目:HubSpot CRM MCP 服务 · MCP 审计网关 · 生产级 MCP 实际所需
架构
flowchart LR
Agent["MCP client<br/>(Claude Desktop / HTTP)"]
subgraph Server["mcp-quickbooks (FastMCP)"]
Tools["18 tools<br/>invoices · customers · payments"]
Resources["resources<br/>company · receivables · customers"]
Client["QBOClient<br/>retry · backoff · error mapping"]
RL["RateLimiter<br/>per-second + per-minute buckets"]
Auth["AuthManager<br/>OAuth 2.1 + PKCE · token refresh"]
Store[("token store<br/>.qbo_tokens.json")]
end
QBO["Intuit QuickBooks Online API<br/>/v3/company/{realmId}"]
Agent <-->|stdio / streamable-http| Tools
Agent <-->|resources/read| Resources
Tools --> Client
Resources --> Client
Client --> RL
Client --> Auth
Auth <--> Store
Auth <-->|token + refresh| QBO
Client -->|REST + query| QBO
该服务不保留状态,也不存储客户数据:它是 QuickBooks REST API 的无状态代理。令牌保存在由你控制的本地文件中;客户端使用自己的 Intuit 凭据部署。
工具
每个工具都会返回结构化的 { "ok": true, ... } 结果,或包含 suggestion 的 { "ok": false, "error": {...} }。每个工具都带有 MCP 注释(readOnlyHint、destructiveHint、idempotentHint、openWorldHint)和声明的输出架构。
create_customer:创建客户。显示名称必须唯一;QuickBooks 会以错误 6240 拒绝重复名称。get_customer:按 Id 读取单个客户,包括余额、联系方式和当前 SyncToken。update_customer:对现有客户进行稀疏更新。需要 Id 和最新的 SyncToken。delete_customer:停用客户(QuickBooks 不支持彻底删除客户),并保留历史记录。list_customers:列出客户,按最近更新时间降序排列,并由调用方控制分页。search_customers:按显示名称前缀、精确邮箱地址或启用状态查找客户。create_invoice:为现有客户创建发票,包含一个或多个明细行。get_invoice:按 Id 读取单张发票,包括明细行、总额、余额和当前 SyncToken。update_invoice:替换发票。明细行会整体替换,因此请发送最终要保留的所有明细行。delete_invoice:永久删除发票。需要 Id 和最新的 SyncToken。list_invoices:列出发票,按最近交易日期降序排列,并由调用方控制分页。search_invoices:按客户 Id、交易日期范围或单据编号查找发票。create_payment:记录收到的付款,可选择将其应用于特定发票。get_payment:按 Id 读取单笔付款,包括关联交易和当前 SyncToken。update_payment:替换付款。移除发票关联会重新打开该发票的未结余额。delete_payment:永久删除付款。任何已结清的发票都将恢复为未付款状态。list_payments:列出付款,按最近交易日期降序排列,并由调用方控制分页。search_payments:按客户 Id 或交易日期范围查找付款。
资源
只读 JSON:
qbo://company:公司资料和法定地址qbo://summary/receivables:未结/逾期发票数量及未结余额qbo://summary/customers:按未结余额排序的活跃客户
最小权限范围
默认范围仅为 com.intuit.quickbooks.accounting。只有在连接支付处理功能时,才通过 QBO_SCOPES 添加 com.intuit.quickbooks.payment。启动时会根据 Intuit 已知范围集合验证范围字符串,因此拼写错误会立即报错,而不会悄悄导致授权不足。除非选择启用,否则绝不会请求身份范围(openid、profile、email)。
速率限制与重试
双令牌桶限流器会同时根据 QuickBooks 每秒和每分钟的上限限制出站流量(可通过 QBO_REQUESTS_PER_SECOND / QBO_REQUESTS_PER_MINUTE 配置)。遇到 429 时,客户端会遵循 Retry-After 标头;遇到没有该标头的 429 / 5xx 时,则会使用带抖动的指数退避,最多重试 QBO_MAX_RETRIES 次。遇到一次 401 时,会触发令牌刷新并自动重试一次。
快速入门
uv venv --python 3.12 .venv
uv pip install -e ".[dev]"
cp .env.example .env # fill in QBO_CLIENT_ID / QBO_CLIENT_SECRET
mcp-quickbooks auth # opens Intuit, captures the redirect, stores tokens
mcp-quickbooks status # verify the token refreshes
mcp-quickbooks stdio # run over stdio (Claude Desktop)
mcp-quickbooks http --port 8000 # run over Streamable HTTP
凭据会按需读取。即使完全未设置任何 QBO_* 变量,服务也能启动、响应 initialize,并提供 tools/list;没有凭据时调用工具会返回结构化的 401 错误,告知调用方需要配置哪些内容。这样一来,注册表信息查询和容器冒烟测试无需密钥也能正常运行。
Claude Desktop
{
"mcpServers": {
"quickbooks": {
"command": "mcp-quickbooks",
"args": ["stdio"],
"env": { "QBO_ENVIRONMENT": "sandbox" }
}
}
}
Docker
docker build -t mcp-quickbooks .
docker run --rm -i --env-file .env mcp-quickbooks
连接真实的 Intuit 沙盒
- 在 Intuit 开发者门户创建应用,然后打开 Keys & OAuth 部分。复制 Development 客户端 ID 和密钥。
- 添加一个与
.env中QBO_REDIRECT_URI相符的重定向 URI(默认为http://localhost:8765/callback)。 - 在开发者控制面板中创建一家沙盒公司;其公司 ID 即为
QBO_REALM_ID。 - 设置
QBO_ENVIRONMENT=sandbox,填写QBO_CLIENT_ID/QBO_CLIENT_SECRET,然后运行mcp-quickbooks auth。浏览器授权流程会自动返回realmId,并将其与令牌一同保存。 - 运行
mcp-quickbooks status,确认令牌可以刷新。现在即可操作实时沙盒。
将 QBO_ENVIRONMENT=production(使用生产环境密钥并连接公司)即可连接真实账簿。凭据和令牌归你所有;不会提交任何内容:.env 和 .qbo_tokens.json 已列入 gitignore。
测试
测试套件完全离线运行。所有 QuickBooks 和 OAuth 调用均由内存中的模拟服务(tests/fake_qbo.py)提供,该模拟服务使用 tests/fixtures/ 中仿照录制数据的固定数据,并通过 httpx 模拟传输接入:无需网络,也无需真实凭据。
uv run pytest
注册表元数据
server.json 用于描述 MCP 注册表中的服务,.mcp.json 是目录爬虫会查找的客户端配置片段目录。**发布特意留作手动步骤。**请参阅 PUBLISHING.md。此处不会向任何注册表提交内容。
聘请我
我能让 AI 时代和资金关键型集成达到生产级安全标准:真实的身份验证、真实的速率限制、完善的错误处理和真实的测试。承接 MCP 服务构建和 API 集成加固项目。作品集和联系方式:https://amin-ale.github.io/portfolio-site · [email protected]
许可证
MIT:请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。