关于 fonzip
fonzip 是开源 MCP 服务,供协会和基金会通过 AI Agent 访问 Fonzip API v2 数据。其工具按主题分组,涵盖捐赠、成员、会费、活动和筹款,定义由 OpenAPI 规范生成。
主要功能
- 01将 113 个 API 操作分组为 13 个工具
- 02访问捐赠和捐赠者记录
- 03管理会费和活动数据
- 04使用 OAuth2 客户端凭据并缓存令牌
- 05选择完整或紧凑的工具架构
- 06重试限流和服务器错误
适用场景
- 01按日期范围查询捐赠情况
- 02查看成员和会费记录
- 03获取活动及票务销售数据
- 04让 AI Agent 访问 Fonzip 机构数据
MCP 相关
该 MCP 服务通过 13 个按主题分类的工具,向 MCP 客户端提供 Fonzip API v2 操作。它负责 OAuth2 身份验证和令牌缓存;API 同时包含读写操作。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
npx -y @ubaranzorlu/fonzip-mcpFONZIP_CLIENT_ID密钥Fonzip API client id. Fonzip > Ayarlar > Gelismis > Fonzip API menusunden olusturulur.FONZIP_CLIENT_SECRET密钥Fonzip API client secret.FONZIP_SCHEMA_MODETool semasi ayrintisi: full (varsayilan) veya compact.FONZIP_BASE_URLFonzip API adresi.本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
工具
13收录的工具列表 · 更新于 3 周前
| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| action | enum | 是 | Yapilacak islem. Her action'in kendi zorunlu alanlari vardir; asagidaki aciklamalarda hangi alanin hangi action'a ait oldugu koseli parantez icinde belirtilir.list_bank_accounts | list_marketing_channel_filter_values | list_marketing_channels | list_payment_systems | me |
| how_many | integer | 否 | [list_bank_accounts, list_marketing_channels, list_payment_systems] 要列出的记录数 |
| start_page | integer | 否 | [list_bank_accounts, list_marketing_channels, list_payment_systems] 记录的起始页 |
详细介绍
这是一个独立的开源项目,由 Fonzip Yazılım A.Ş. 之外的团队开发,不受其支持或认可。
让 Claude Code、Claude Desktop、Cursor、VS Code、Codex 和其他支持 MCP 的客户端直接访问您的 Fonzip 数据。
Sen: Bu ay kaç düzenli bağışçı kaydolmuş, toplam ne kadar?
Ajan: [fonzip_donations / list çağrılır]
Ağustos'ta 34 yeni düzenli bağışçı, aylık toplam 41.250 TL.
- 13 个工具,涵盖 Fonzip API v2 的 113 项操作
- 工具定义由 OpenAPI spec 自动生成 — 无需手动保持同步
- OAuth2
client_credentials,包括跨进程保存 token - 土耳其语错误消息;调用出错时会将预期的架构返回给模型
安装
需要 Node.js 20 或更高版本。首先在 Fonzip 中打开 设置 > 高级 > Fonzip API,然后创建 API 密钥;您将获得一个 client_id 和一个 client_secret。
重要
Fonzip 密钥以
$2b$12$...开头。在 shell 中请使用单引号 — 如果使用双引号或不加引号,shell 会将$2b和$12部分视为变量并删除,导致收到HTTP 403。JSON 文件不受此问题影响。
Claude Code
claude mcp add fonzip \
-e FONZIP_CLIENT_ID='...' \
-e FONZIP_CLIENT_SECRET='...' \
-- npx -y @ubaranzorlu/fonzip-mcp
这只会将其添加到当前项目。要在所有项目中使用,请添加 -s user;要与团队共享,请添加 -s project。
Claude Desktop
通过设置 > Developer > Edit Config 打开 claude_desktop_config.json 文件:
{
"mcpServers": {
"fonzip": {
"command": "npx",
"args": ["-y", "@ubaranzorlu/fonzip-mcp"],
"env": {
"FONZIP_CLIENT_ID": "...",
"FONZIP_CLIENT_SECRET": "..."
}
}
}
}
重启 Claude Desktop。
Cursor
~/.cursor/mcp.json(全局)或项目根目录中的 .cursor/mcp.json:
{
"mcpServers": {
"fonzip": {
"command": "npx",
"args": ["-y", "@ubaranzorlu/fonzip-mcp"],
"env": {
"FONZIP_CLIENT_ID": "...",
"FONZIP_CLIENT_SECRET": "..."
}
}
}
}
VS Code / GitHub Copilot
code --add-mcp '{"name":"fonzip","command":"npx","args":["-y","@ubaranzorlu/fonzip-mcp"],"env":{"FONZIP_CLIENT_ID":"...","FONZIP_CLIENT_SECRET":"..."}}'
或者写入 .vscode/mcp.json 文件,并在提示时输入密钥:
{
"inputs": [
{ "type": "promptString", "id": "fonzip-id", "description": "Fonzip client id", "password": true },
{ "type": "promptString", "id": "fonzip-secret", "description": "Fonzip client secret", "password": true }
],
"servers": {
"fonzip": {
"command": "npx",
"args": ["-y", "@ubaranzorlu/fonzip-mcp"],
"env": {
"FONZIP_CLIENT_ID": "${input:fonzip-id}",
"FONZIP_CLIENT_SECRET": "${input:fonzip-secret}"
}
}
}
}
Codex CLI
~/.codex/config.toml:
[mcp_servers.fonzip]
command = "npx"
args = ["-y", "@ubaranzorlu/fonzip-mcp"]
env = { FONZIP_CLIENT_ID = "...", FONZIP_CLIENT_SECRET = "..." }
Zed、Windsurf、Continue 等
这是一个标准的 stdio MCP 服务。请在客户端配置中添加以下内容:
komut: npx
argüman: -y @ubaranzorlu/fonzip-mcp
ortam: FONZIP_CLIENT_ID, FONZIP_CLIENT_SECRET
该服务已在 MCP Registry 中注册,名称为 io.github.ubaranzorlu/fonzip;支持从 registry 安装的客户端可以直接找到它。
验证
向客户端提问:“显示我的 Fonzip 账户信息” — 服务应通过调用 fonzip_system / me 返回您的机构名称。
环境变量
| 变量 | 必需 | 默认值 | 说明 |
|---|---|---|---|
FONZIP_CLIENT_ID | 是¹ | — | Fonzip API client id |
FONZIP_CLIENT_SECRET | 是¹ | — | Fonzip API client secret |
FONZIP_ACCESS_TOKEN | 否 | — | 现成的 token。提供后会跳过 client_credentials 流程 |
FONZIP_BASE_URL | 否 | https://fonzip.com/api/v2 | API 地址 |
FONZIP_SCHEMA_MODE | 否 | full | full 或 compact — 架构模式 |
FONZIP_TOKEN_CACHE | 否 | ~/.cache/fonzip-mcp/tokens.json | Token 缓存路径。使用 off 可关闭 |
FONZIP_TIMEOUT_MS | 否 | 30000 | 请求超时时间 |
FONZIP_MAX_RETRIES | 否 | 3 | 429 和 5xx 的重试次数 |
FONZIP_USER_AGENT | 否 | fonzip-mcp/<sürüm> | 请勿留空 — 原因 |
¹ 未提供 FONZIP_ACCESS_TOKEN 时为必需。
工具
Fonzip API v2 有 115 个操作。如果每个操作都是一个独立工具,客户端的工具列表就会变得臃肿;因此,我们按主题将操作分组到 13 个工具中。每个工具都需要一个 action 参数。
| 工具 | Action | 范围 |
|---|---|---|
fonzip_system | 5 | 机构信息(me)、支付系统、银行账户、营销渠道 |
fonzip_users | 18 | 会员/捐赠者记录、时间线、标签、与个人关联的列表 |
fonzip_donations | 14 | 捐赠、捐赠类别、微额捐赠、捐赠页面和表单 |
fonzip_monthly_donations | 5 | 定期捐赠金额/银行卡变更和取消 |
fonzip_membership_dues | 9 | 会费订阅和欠款 |
fonzip_events | 12 | 活动、门票、门票销售 |
fonzip_fundraising | 19 | 筹款活动、活动赛事、团队 |
fonzip_forms | 4 | 表单和表单回答 |
fonzip_ecards | 9 | 电子贺卡、类别、销售交易 |
fonzip_tags | 4 | 标签管理 |
fonzip_templates | 5 | 消息模板 |
fonzip_webhooks | 6 | Webhook 管理和测试通知 |
fonzip_communication_permissions | 3 | 电子邮件/SMS/电话权限 |
/token 和 /authorize 端点不会作为工具提供;身份验证由服务器自行处理。
调用示例:
{
"name": "fonzip_donations",
"arguments": {
"action": "list",
"status": "paid",
"start_date": "2026-01-01T00:00:00+03:00",
"end_date": "2026-01-31T23:59:59+03:00"
}
}
架构模式
在 full(默认)模式下,每个工具的所有参数都会以 JSON Schema 的形式发送给客户端。13 个工具的架构总计约 70 KB(约 1.9 万个 token);模型可以在单轮中构造正确的调用。
如果上下文预算有限,请使用 FONZIP_SCHEMA_MODE=compact:架构会精简为 action 和一个自由格式的 params 对象,字段名称则在工具说明中概述。总计约 22 KB(约 6 千个 token),即 full 模式的三分之一。如果发送了缺失字段,错误消息会返回该 action 的完整架构,以便模型自行修正。
两种模式都接受普通格式({"action": "get", "user_id": 1})和包装格式({"action": "get", "params": {"user_id": 1}})。
须知事项
Fonzip 同一时间只发放一个 token。 有效 token 存在时,调用 /token 会返回 HTTP 409 "Token already created"。由于 MCP 服务经常重启,token 默认会保存到 ~/.cache/fonzip-mcp/tokens.json 文件中(权限为 0600,且不写入 client id),并在重启时重复使用。如果关闭此缓存,服务器重启后可能长达一小时都无法获取 token。
必须提供 User-Agent。 Fonzip 前面的 Cloudflare 会以 HTTP 403 (error code 1010) 拒绝没有 User-Agent 请求头的请求。请勿将 FONZIP_USER_AGENT 留空。
速率限制为每分钟 240 个请求。 收到 HTTP 429 时,会遵循 Retry-After 请求头进行重试。
交易列表需要日期范围。 以下 action 必须提供 start_date 和 end_date;如果缺少,请求会在发送到 Fonzip 之前被拒绝:
fonzip_donations → list、list_micro、report · fonzip_membership_dues → list · fonzip_events → list_ticket_sales · fonzip_forms → list_answers · fonzip_ecards → list_transactions
如果未提供分页参数(start_page,默认值为 1)和页面大小(how_many,默认值为 10,最大值为 100),系统会自动添加默认值。同样,fonzip_donations / list 的 status 默认值为 paid。
写入操作已启用。 服务器提供所有 CRUD 操作;删除操作无法撤销。包含删除操作的工具会标记 MCP destructiveHint,客户端可能会要求确认。如果您只需要读取权限,请在 Fonzip 中创建具有只读权限的 API 密钥。
个人数据会发送给模型。 Fonzip 响应可能包含姓名、电子邮件、电话号码、土耳其身份证号码和 IBAN;这些数据会传输到您的 MCP 客户端和所使用的模型。请根据您的 KVKK 义务进行评估。详情请参阅 SECURITY.md。
较大的响应会被截断。 超过 100,000 个字符的响应会被截断,建议使用分页。
开发
git clone https://github.com/ubaranzorlu/fonzip-mcp.git
cd fonzip-mcp
npm install
npm test # 97 test
npm run build
仓库中包含 .mcp.json;运行 npm run build 后,Claude Code 会通过本项目本地的 dist/ 运行服务。您必须在 shell 中设置 FONZIP_CLIENT_ID 和 FONZIP_CLIENT_SECRET。
工具定义不会手动编写——scripts/generate.ts 会根据 openapi/fonzip-v2.yaml 生成 src/generated/operations.ts。详情和版本发布步骤请参阅 CONTRIBUTING.md。
贡献
欢迎贡献。开始之前,请阅读 CONTRIBUTING.md 和 CODE_OF_CONDUCT.md。如需报告安全漏洞,请参阅 SECURITY.md。
许可证
本仓库中的代码采用 MIT 许可证 © Umut Baran Zorlu。
openapi/fonzip-v2.yaml 是 Fonzip Yazılım A.Ş. 自有的 API 文档,不受 MIT 许可证约束;它仅作为生成工具定义的参考资料存放在仓库中。同样的例外也适用于从该规范派生的 src/generated/operations.ts 和已发布的 dist/ 内容。“Fonzip”名称仅用于说明该服务连接到哪个服务。详情请参阅:NOTICE。
如有 API 相关问题,请联系:[email protected]
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。