关于 HelloAsso
HelloAsso 是一个 Rust MCP 服务,将 HelloAsso v5 API 提供给社团使用,涵盖会员、活动、捐赠、支付、退款和结账。它面向社团及运营人员,支持自然语言式的日期和表单输入、收款汇总,并为资金操作设置确认要求。
主要功能
- 01访问 HelloAsso v5 API 路由
- 02搜索和管理表单、会员及销售
- 03按表单、方式和月份汇总收款
- 04退款与取消操作要求确认
- 05只读模式和可配置工具集
适用场景
- 01核实会员的付款状态
- 02查看活动参加者和票务销售
- 03汇总指定期间的收款
- 04经明确确认后办理退款
MCP 相关
该服务向 MCP 客户端提供六个工具集中的 38 种工具,以及资源和提示词。默认支持 STDIO,也支持 HTTP 传输。
配置
本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。
docker run -i --rm -e HELLOASSO_CLIENT_ID -e HELLOASSO_CLIENT_SECRET -e HELLOASSO_ORGANIZATION -e HELLOASSO_READ_ONLY -e HELLOASSO_ENVIRONMENT ghcr.io/edouard-claude/helloasso-mcp:0.1.1HELLOASSO_CLIENT_IDAPI client id (back office: My account, Integrations and API)HELLOASSO_CLIENT_SECRET密钥API client secretHELLOASSO_ORGANIZATIONOrganization slug tools default to (found automatically for an association client)HELLOASSO_READ_ONLY1 to withhold every write tool (refunds, cancellations, checkouts)HELLOASSO_ENVIRONMENTproduction or sandbox本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。
ghcr.io/edouard-claude/helloasso-mcp:0.1.1stdio工具
本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。
详细介绍
mcp-helloasso
只需询问,即可获取协会的 HelloAsso 信息。
一个 Rust 二进制程序,可将完整的 HelloAsso v5 API—— 会员、票务、捐赠、付款、退款、结账——提供给任何 MCP 客户端。
🇫🇷 HelloAsso MCP 服务:会员、票务、捐赠、付款和退款, 可通过 Claude、Cursor 或任何 MCP 客户端以自然语言查询。
向助手询问 “我们上个月收了多少钱?”、“Camille Martin 的会员费付了吗?”、“给我晚宴的参会者名单”——就能从财务主管用于对账的同一个 HelloAsso 中获得答案。
> how much did we collect in September, and on what?
summarize_payments 2026-09 · 214 payments read
collected 8 342,00 € (196 authorized)
Membership/adhesion-2026 5 160,00 € 61.9%
Event/gala-2026 2 730,00 € 32.7%
Donation/dons 452,00 € 5.4%
by means: Card 7 912,00 € · Sepa 430,00 €
refunded 60,00 € · 3 refused · 1 contested
> who registered for the gala, with their dietary answers?
list_form_items form_url = helloasso.com/associations/les-amis-du-velo/evenements/gala-2026
item_states = Processed, Registered · with_details = true
87 participants, 3 tiers, custom field "Régime alimentaire"
粘贴 HelloAsso URL,说“上个月”,再提供一个姓名。服务会解析组织、表单、时间段和分页。
为什么选择它
HelloAsso API 提供了简洁的 REST 接口,但直接把它交给大模型,常常会出现一些意料之中的问题:金额单位是分,表单由没人记得的 (type, slug) 组合标识,日期范围采用左闭右开,令牌每 30 分钟过期,而最重要的调用——退款——会直接退回真实款项,且无法撤销。
- 完整 API,不作隐藏。 公共 v5 规范中的全部 36 个路由,各对应一个工具;另有
whoami和summarize_payments,因为 API 没有供客户端使用的“我是谁”接口,也没有汇总功能。如果数量减少,测试就会失败。 - 用 URL、词语和时间段,而不是标识符。 每个表单工具都接受表单的公开 URL。表单类型可用英语、法语或 URL 拼写(
evenements、adhésions)识别。时间段可用last month、2026-09、last 30 days表示。可通过search查找人员。 - 金额汇总准确无误。
summarize_payments会遍历所有分页,并按表单、付款方式和月份拆分实际收款额(Authorized),同时提供分和欧元金额——不会让模型把第一页的金额加起来就当作总额。 - 涉及资金操作时默认拒绝。
refund_payment和cancel_order必须提供confirm: true才会运行;拒绝提示会说明金额和付款人,以便用户在充分知情后确认。设置HELLOASSO_READ_ONLY=1后,所有写入工具都会被禁用。 - 按 HelloAsso 的要求处理 OAuth。 先使用一次
client_credentials,之后使用refresh_token——只要刷新可用,就绝不申请新的授权,这是 API 的要求。服务端撤销令牌后,服务会自动续期。 - 内容适合模型读取。 全部 38 个工具都有带架构的结构化输出和注释;提供四个提示词,在操作资金前暂停并询问;服务说明则会提前强调:金额单位是分。
安装
预构建二进制文件(macOS、Linux、Windows)
从最新版本下载适用于你平台的压缩包,
对照其 .sha256 文件进行校验,并将 mcp-helloasso 放入 PATH:
# macOS on Apple silicon; swap the target for x86_64-apple-darwin,
# x86_64-unknown-linux-gnu or aarch64-unknown-linux-gnu
V=v0.1.1 T=aarch64-apple-darwin
curl -LO https://github.com/edouard-claude/helloasso-mcp/releases/download/$V/mcp-helloasso-$V-$T.tar.gz
tar xzf mcp-helloasso-$V-$T.tar.gz
sudo mv mcp-helloasso-$V-$T/mcp-helloasso /usr/local/bin/
Windows:使用 x86_64-pc-windows-msvc.zip 压缩包。
从源代码构建(适用于 Rust 1.88+ 的任何平台)
git clone https://github.com/edouard-claude/helloasso-mcp
cd helloasso-mcp
cargo build --release
# the binary is at target/release/mcp-helloasso
使用 cargo install 安装
cargo install --git https://github.com/edouard-claude/helloasso-mcp
使用 Docker
docker run --rm -i \
-e HELLOASSO_CLIENT_ID=… -e HELLOASSO_CLIENT_SECRET=… \
ghcr.io/edouard-claude/helloasso-mcp:latest
或者使用 docker build -t mcp-helloasso . 自行构建。
该服务已列入官方 MCP 注册表,名称为
io.github.edouard-claude/helloasso-mcp,因此支持注册表的客户端会直接提供该服务,
并显示需要填写的变量。
该镜像以非特权方式运行,默认使用 stdio 通信;添加 --http 可使用 HTTP
传输方式。请参阅改用 HTTP 运行。
获取 API 凭据
在你所在协会的 HelloAsso 管理后台中,依次选择:我的账户 → 集成与 API
(Mon compte → Intégrations et API)。你会获得一个客户端 ID和一个客户端密钥,
并拥有适用于你所在组织的 AccessPublicData、AccessTransactions 和 Checkout 权限。
合作伙伴可向 HelloAsso 合作团队获取这些凭据。
然后,在将客户端连接到服务之前,先检查配置:
HELLOASSO_CLIENT_ID=… HELLOASSO_CLIENT_SECRET=… mcp-helloasso --check
environment production
base url https://api.helloasso.com/v5
toolsets organization, forms, sales, checkout, directory, partner
read only false
tools 38
token ok
reachable 1 organization(s)
Les Amis du Vélo (les-amis-du-velo) as OrganizationAdmin
organization Les Amis du Vélo (les-amis-du-velo)
ready.
配置
| 变量 | 必需 | 默认值 | 说明 |
|---|---|---|---|
HELLOASSO_CLIENT_ID | 是 | API 客户端 ID | |
HELLOASSO_CLIENT_SECRET | 是 | 客户端密钥 | |
HELLOASSO_CLIENT_SECRET_FILE | 改为从文件读取密钥,适用于 Docker secrets | ||
HELLOASSO_ACCESS_TOKEN | 不使用客户端凭据:直接使用现成的 bearer token | ||
HELLOASSO_ENVIRONMENT | production | sandbox 指向 api.helloasso-sandbox.com | |
HELLOASSO_ORGANIZATION | 工具默认使用的组织标识 | ||
HELLOASSO_TOOLSETS | all | organization,forms,sales,checkout,directory,partner | |
HELLOASSO_READ_ONLY | 0 | 设为 1 时禁用所有写入工具 | |
HELLOASSO_TIMEOUT_SECS | 30 | 每个请求的超时时间 | |
HELLOASSO_MAX_RETRIES | 3 | 遇到 429 和暂时性 5xx 错误时的重试次数 | |
HELLOASSO_BASE_URL | 按环境而定 | 覆盖 API 根地址 | |
HELLOASSO_TOKEN_URL | 按环境而定 | 覆盖令牌端点 | |
HELLOASSO_HTTP_BIND | HTTP 传输的监听地址 | ||
HELLOASSO_HTTP_TOKEN | HTTP 传输所需的 bearer token | ||
HELLOASSO_LOG | info | warn、debug、mcp_helloasso=debug…… |
使用哪个组织。 协会的客户端只能访问一个组织,服务会自动查找该组织。合作伙伴的客户端若可访问多个组织,则会收到候选组织列表;请设置 HELLOASSO_ORGANIZATION,或在每次调用时传入 organization。如果变量格式错误,二进制文件会拒绝启动,并指出有问题的变量。
连接客户端
Claude Code
claude mcp add helloasso --scope user \
--env HELLOASSO_CLIENT_ID=… \
--env HELLOASSO_CLIENT_SECRET=… \
-- /absolute/path/to/mcp-helloasso
Claude Desktop
claude_desktop_config.json:
{
"mcpServers": {
"helloasso": {
"command": "/absolute/path/to/mcp-helloasso",
"env": {
"HELLOASSO_CLIENT_ID": "…",
"HELLOASSO_CLIENT_SECRET": "…",
"HELLOASSO_READ_ONLY": "1"
}
}
}
}
先以只读模式启动;确认配置可靠后再启用写入功能。
Cursor、Windsurf、Zed 和其他 stdio 客户端
配置格式相同:用 command 指向二进制文件,并在 env 中填写凭据。服务使用 stdio
传输,标准输出中只会输出协议内容,日志则写入标准错误。
任何客户端,使用 HTTP
使用 --http 127.0.0.1:8080 启动服务后,将客户端指向
http://127.0.0.1:8080/mcp。请参阅下文。
然后询问 “你连接的是哪个 HelloAsso 组织?”。whoami 应会返回你所在协会的名称。
工具
38 个工具,分为六个工具集,涵盖公共 v5 规范中的 36 个路由。
HELLOASSO_TOOLSETS 用于选择要注册的工具;HELLOASSO_READ_ONLY=1 则仅保留声明为只读的工具。
sales — 订单、项目、付款及财务主管视图
| 工具 | 路由 | |
|---|---|---|
summarize_payments | composite | 统计一段时间内的金额:已收款、按表单统计、方式、月份、退款 |
list_orders | GET /organizations/{org}/orders | 按时间段、人员或表单类型筛选订单 |
list_form_orders | GET …/forms/{type}/{slug}/orders | 某个表单的订单 |
get_order | GET /orders/{id} | 单笔订单:付款人、项目、付款、退款资格 |
cancel_order | POST /orders/{id}/cancel | 停止后续分期付款 — confirm: true |
list_items | GET /organizations/{org}/items | 门票、会员资格、捐赠:相关人员 |
list_form_items | GET …/forms/{type}/{slug}/items | 活动参与者、活动的会员 |
get_item | GET /items/{id} | 单个项目,包含自定义字段和门票 URL |
list_payments | GET /organizations/{org}/payments | 按时间段、人员或状态筛选付款 |
list_form_payments | GET …/forms/{type}/{slug}/payments | 某个表单的付款 |
get_payment | GET /payments/{id} | 单笔付款,包含退款操作和收据 |
refund_payment | POST /payments/{id}/refund | 全额或部分退款,支持 MFA — confirm: true |
export_cash_out | GET /organizations/{org}/cash-out/{id}/export | 支出的明细,可导出为 JSON、CSV 或 Excel |
forms — 活动
| 工具 | 路由 | |
|---|---|---|
list_forms | GET /organizations/{org}/forms | 按状态和类型列出所有表单 |
list_form_types | GET /organizations/{org}/formTypes | 正在使用的类型 |
get_form | GET …/forms/{type}/{slug}/public | 完整的表单:等级、价格、自定义字段 |
get_form_stats | GET …/forms/{type}/{slug}/stats | 各等级的参与者和销售情况 |
quick_create_event | POST …/forms/Event/action/quick-create | 一次调用即可创建包含多个等级的活动 |
update_form_state | PUT …/forms/{type}/{slug}/state | 发布、隐藏、停用 — 删除需要 confirm: true |
list_activity_types | GET /values/form/{type}/types | 表单类型的子类型 |
checkout — 付款链接
| 工具 | 路由 | |
|---|---|---|
create_checkout_intent | POST /organizations/{org}/checkout-intents | 一次性付款或分期付款的付款链接 |
get_checkout_intent | GET /organizations/{org}/checkout-intents/{id} | 付款结果,以及付款后的订单 |
organization — 组织及相关信息
| 工具 | 路由 | |
|---|---|---|
whoami | composite | 环境、客户端、默认组织及其资料 |
get_organization | GET /organizations/{org} | 组织的公开资料 |
list_my_organizations | GET /users/me/organizations | 此客户端拥有某种角色的组织 |
list_organization_categories | GET /values/organization/categories | 参考列表 |
list_company_legal_statuses | GET /values/company-legal-status | 参考列表 |
directory — HelloAsso 公共目录
| 工具 | 路由 | |
|---|---|---|
search_organizations | POST /directory/organizations | 按名称、地点、类别、标签搜索 |
search_forms | POST /directory/forms | 按文本、地点、日期、类型、价格、标签搜索 |
get_tag | GET /tags/{name} | 单个标签及其使用次数和金额 |
list_public_tags | GET /values/tags | 所有公开标签 |
partner — 面向 HelloAsso 合作伙伴
| 工具 | 路由 | |
|---|---|---|
get_partner | GET /partners/me | 合作伙伴账户 |
list_partner_organizations | GET /partners/me/organizations | 已授权该合作伙伴的组织 |
update_partner_domain | PUT /partners/me/api-clients | OAuth 重定向域名 |
set_notification_url | PUT /partners/me/api-notifications | Webhook URL,可设为主 URL 或按事件类型设置 |
delete_notification_url | DELETE /partners/me/api-notifications | 移除 — confirm: true |
set_organization_notification_url | PUT /partners/me/api-notifications/organizations/{org} | 按组织设置 Webhook |
delete_organization_notification_url | DELETE /partners/me/api-notifications/organizations/{org} | 移除 — confirm: true |
资源和提示词
三个资源和两个模板,供更倾向于在调用函数时附加上下文的客户端使用:
| URI | |
|---|---|
helloasso://organization | 默认组织的资料 |
helloasso://forms | 该组织的表单 |
helloasso://my-organizations | 客户端可访问的所有组织 |
helloasso://forms/{form_type}/{form_slug} | 某个表单的完整信息 |
helloasso://orders/{order_id} | 某个订单的完整信息 |
四个提示词可驱动协会实际使用的工作流:
treasury_report— 总额、各活动的细分、平均值、退款以及值得关注之处,使用法语数字格式。不写入任何内容。find_person— 某个人进行的所有操作:会员资格、门票、付款以及待处理事项。不写入任何内容。attendee_list— 某个表单的所有参与者及其回答,逐页查看到最后一页,并与表单统计数据核对。不写入任何内容。refund_request— 查找付款、检查资格、提出建议、停止并等待,然后退款并重新读取记录。
HelloAsso 的实际运行方式
以下内容均经过实时 API 验证,已由你处理,并记录在此,因为下一个集成 HelloAsso 的人也会遇到同样的问题。
| 实际情况 | 此服务的处理方式 |
|---|---|
访问令牌有效期为 30 分钟,HelloAsso 要求使用 refresh_token 刷新令牌,而不是重新授权 | 提前一分钟刷新;优先刷新令牌,只有刷新被拒绝时才重新授权 |
| 令牌可能会在过期前被撤销 | 收到 401 时丢弃令牌,并使用新令牌重试一次 |
| 所有金额均为以分为单位的整数 | 在服务说明和每个工具描述中注明;summarize_payments 会额外提供欧元金额 |
表单通过 (organization, type, slug) 定位 | 每个表单工具也接受公开 URL 和法语类型名称 |
日期筛选采用左闭右开区间:to 为排他 | 将周期(2026-09、last month)转换为正确的 [from, to) 区间 |
查询字符串中的数组使用重复键(states=A&states=B) | 按此方式构造,绝不合并为逗号分隔的字符串 |
错误有三种格式:HelloAsso 的 errors[]、ASP.NET 的验证映射、OAuth 的 error | 三种格式都会解析为一条消息,并在其 data 中包含错误代码 |
403 只显示 insufficient Privileges | 指明该路由所需的权限,以及权限的授予方 |
协会自己的客户端无法调用目录、标签、活动类型或合作伙伴路由(FormOpenDirectory、OrganizationOpenDirectory、FormAdministration、合作伙伴客户端) | 这些工具仍会为合作伙伴注册;使用协会客户端时,会说明缺少哪项权限 |
大多数列表(订单、项目、付款、目录)的总数和页数都显示为 -1,并通过续传令牌分页 | 不显示 -1,而是直接省略;显示续传令牌,且 summarize_payments 会遍历所有页面 |
| 退款需要强身份验证 | 将 MFA 请求头作为可选参数提供;错误会说明需要哪个请求头 |
quick-create 仅支持活动 | 将其公开为 quick_create_event,并明确说明这一点 |
提现导出会根据 Accept 请求头选择 JSON、CSV 或 Excel 格式,且其 CSV 以字节顺序标记开头 | export_cash_out 接受 format,并移除字节顺序标记 |
其 CDN 会拒绝不带 User-Agent 的请求 | 每个请求都会携带 mcp-helloasso/<version> |
| 429 和临时性 5xx 错误 | 使用退避策略重试,并遵循 Retry-After |
安全性
读取资金账目属于敏感操作;修改账目则更为敏感。默认设置倾向于谨慎处理。
- 资金操作默认拒绝。
refund_payment、cancel_order、删除表单和移除 webhook 均会在缺少confirm: true时拒绝操作。拒绝退款时,会先读取付款信息,并提示 "付款 67890(Camille Martin 支付的 25.00 €,状态为 Authorized)将被全额退款",让操作者确认实际看到的信息。这四个工具均标注了destructiveHint。 - 只读限制是结构性实现的。
HELLOASSO_READ_ONLY=1会移除所有未标注readOnlyHint的路由,无需维护一份需保持同步的保留名称列表,因此新写入工具也会自然排除在外。测试对此有断言。 - 发送 HTTP 请求前会检查输入。 slug 不能越出其路径片段,结账各项金额之和必须等于总额,URL 必须以
https://开头,ID 必须为正数。 - 绝不泄露密钥。 密钥在
Debug中会被遮蔽,只会发送到令牌端点,绝不会序列化到工具回答或日志行中;whoami只显示客户端 ID 的前八个字符,不显示密钥。 - 不会通过 HTTP 写入磁盘。 通过 HTTP 访问服务时,
export_cash_out的save_to会被拒绝。 - 提示词会先征求同意。 唯一可能转移资金的提示词会暂停操作,等待明确批准,并要求提供 MFA 验证码,而不是自行猜测。
改为通过 HTTP 运行
mcp-helloasso --http 127.0.0.1:8080
# MCP at http://127.0.0.1:8080/mcp, health at /healthz
在回环地址之外,如果未设置 HELLOASSO_HTTP_TOKEN,服务将拒绝启动:一个 API
客户端就代表一个身份,而开放的端点就等于为某个协会的款项敞开大门。设置令牌后,
每个发往 /mcp 的请求都需要携带
Authorization: Bearer <token>;/healthz 则保持开放,供探测使用。所有会话共享一个
OAuth 令牌。
docker run -d --name mcp-helloasso -p 8080:8080 \
-e HELLOASSO_CLIENT_ID=… \
-e HELLOASSO_CLIENT_SECRET=… \
-e HELLOASSO_HTTP_BIND=0.0.0.0:8080 \
-e HELLOASSO_HTTP_TOKEN="$(openssl rand -hex 32)" \
mcp-helloasso
在前面配置 TLS。该进程使用纯 HTTP 通信,并不会假装使用其他协议。
验证
cargo test # 79 tests
cargo clippy --all-targets -- -D warnings
cargo fmt --all --check
mcp-helloasso --list-tools # the surface, as registered
mcp-helloasso --check # the configuration, against the live API
测试套件包含对协议本身的测试:tests/mcp_stdio.rs 会启动实际二进制文件,
通过其 stdin 发送 JSON-RPC,并断言返回内容——包括握手、全部 38 个工具及其架构、
通过 URL 指定的表单、转换为日期的周期、仅统计已收款项的摘要、未经确认时拒绝退款、
携带 MFA 标头发送退款,以及只读模式。tests/api_contract.rs 使用模拟的 HelloAsso
测试令牌生命周期、重试和错误封装;tests/mcp_http.rs 则检查 HTTP 传输和 Bearer
令牌校验。
src/
├── client.rs REST over HTTP: OAuth2 lifecycle, retries, the three error envelopes
├── config.rs the environment, validated once, with the secret redacted
├── resolve.rs URLs, slugs and form types, and the refusal to guess
├── dates.rs today, last month, 2026-09, last 30 days
├── tools/ one module per toolset, one function per route
├── resources.rs three URIs and two templates
├── prompts.rs four workflows that ask before touching money
└── server.rs capabilities, instructions, and the glue
发布
在 Cargo.toml 中更新 version,在 CHANGELOG.md 中添加对应版本章节,然后
推送一个标签:
git tag v0.1.1 && git push origin v0.1.1
发布工作流会检查标签是否与 Cargo.toml 和变更日志一致,构建五个二进制文件及其校验和,
推送 ghcr.io/edouard-claude/helloasso-mcp,并使用变更日志中的对应章节作为说明发布
GitHub 版本。
贡献
欢迎提交问题和拉取请求。当 cargo test、
cargo clippy --all-targets -- -D warnings 和 cargo fmt --all --check 均通过,并且
新工具包含描述、注解和输出架构时,这项变更就可以提交——否则,三个测试会告诉你问题所在。
许可证
MIT——详见 LICENSE。与 HelloAsso 无关联;HelloAsso 是其所有者的商标。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。