lunchmoney-readonly-mcp
面向 ChatGPT 的只读 Lunch Money MCP
一个为 Lunch Money 设计的单用户远程 MCP 服务器,专为 ChatGPT Business 打造,部署在 Cloudflare Workers 上。它仅使用 Google OAuth 来识别已列入白名单的用户;Lunch Money API 令牌作为 Cloudflare 加密密钥存储,绝不会返回给 ChatGPT 或 MCP 工具。
该项目最初基于 bm1549/lunchmoney-mcp-cloudflare 项目,并已改编为面向 Cloudflare Workers 和 ChatGPT 的只读 Lunch Money MCP 模板。 上游实现以 vendor-lunchmoney-mcp 的形式保留,包含其原始 MIT 许可证和署名。感谢 Brian Marks 的原始工作。
此仓库是一个模板。它不包含任何在线部署 URL、API 令牌、Google OAuth 密钥、电子邮件地址或 Cloudflare 资源 ID。
只读特性
服务器通过两个独立层强制实施只读访问:
createReadonlyServer()公开了 25 个检索工具的正向白名单。创建、更新、删除、上传、同步、刷新、拆分、分组和预算变更工具均未注册。runWithReadonlyConfig()在发起网络请求前拒绝任何对 Lunch Money API 的非GET请求。
所有公开的工具均声明 readOnlyHint: true、destructiveHint: false 和 openWorldHint: false。
需求
一个 Lunch Money API 令牌
一个已启用 Workers 和 KV 的 Cloudflare 账户
一个 Google Cloud OAuth 2.0 Web 客户端
一个 ChatGPT Business 工作空间,你需为该空间的管理员或所有者
部署你自己的副本
克隆此仓库,然后安装并验证依赖项:
npm install npm run typecheck npm run lint npm run test:readonly在
wrangler.jsonc中,选择一个唯一的 Workername并创建 OAuth KV 命名空间:npx wrangler kv namespace create OAUTH_KV将返回的命名空间 ID 复制到
wrangler.jsonc中的REPLACE_WITH_OAUTH_KV_NAMESPACE_ID处。首次部署以获取你的 Worker URL:
npx wrangler deploy创建一个 Google OAuth 2.0 Web 应用程序。添加此重定向 URI,并将主机替换为你的 Worker URL:
https://YOUR-WORKER.YOUR-SUBDOMAIN.workers.dev/authorize/callback以交互方式设置生产密钥。切勿将其值放入 Git:
npx wrangler secret put GOOGLE_CLIENT_ID npx wrangler secret put GOOGLE_CLIENT_SECRET npx wrangler secret put ALLOWED_EMAILS npx wrangler secret put STATE_SECRET npx wrangler secret put LUNCHMONEY_API_TOKENALLOWED_EMAILS是一个逗号分隔的 Google 账户列表,这些账户被允许连接。当此列表为空时,服务器将默认拒绝连接。再次部署。你的 MCP 端点为:
https://YOUR-WORKER.YOUR-SUBDOMAIN.workers.dev/mcp
连接 ChatGPT Business
在 ChatGPT 中,打开 Workspace settings → Apps → Create。
输入上述
/mcp端点,然后选择 OAuth 身份验证。查看自定义应用警告,创建草稿,然后发布并启用它。
每个用户从 Settings → Plugins → [你的应用] → Connect 连接,并使用已列入白名单的 Google 账户登录。
启动一个新的 Work 对话,选择该应用,并在要求其检查 Lunch Money 数据前验证工具列表。
在公开仓库前
运行:
npm run check:public-release同时检查 git status,确认 .dev.vars 未被跟踪,并确保 Worker 名称、端点、Cloudflare 资源 ID 以及示例文档不会泄露你的个人部署信息。
如果你正在整理现有部署,请将其配置保留在仓库外部,或放在已加入 gitignore 的 wrangler.personal.jsonc 文件中。使用 npx wrangler deploy --config wrangler.personal.jsonc 部署该私有配置。
验证
重点安全测试验证精确的白名单、其注解、代表性变更工具的缺失,以及对外发 POST 请求的拒绝:
npm run test:readonly详见 THIRD_PARTY_NOTICES.md 了解归属信息。
This server cannot be installed
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 Connectors
Read-only MCP server for ClassQuill, a tutoring-business-management platform.
Hosted remote MCP server for YNAB on Cloudflare Workers with OAuth
Multi-tenant FastMCP server for Charles Schwab brokerage data, monetized via DPYC Tollbooth
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/bhonick/lunchmoney-readonly-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server