使用说明
野杏MCP服务器
一种MCP(模型上下文协议)服务器,提供对Wild Apricot API的访问。使用此功能将Wild Apricot数据与Claude和其他MCP兼容的AI助手集成。
⚠️ 重要警告
使用风险自负
此软件按原样提供。 并非所有功能都经过彻底测试尤其是 写/更新/删除操作.
在使用写操作之前:
- 考虑跑步 只读模式 首先安全地探索您的数据
- 如果可能的话,使用非关键数据或沙盒Wild Apricot帐户进行测试
- 小心你的提示——人工智能助手可能会误解请求
- 在确认任何写入操作之前,请先查看预览数据
- 删除操作需要 双重确认 具有精确的文本匹配
作者不对您的Wild Apricot帐户的任何数据丢失、损坏或意外修改负责。
特性
- 读取操作:查询联系人、事件、注册、会员级别、发票和帐户信息
- 写入操作:创建和更新联系人、事件、注册和发票(可以禁用)
- 删除操作:通过双重确认删除联系人和事件(额外安全)
- 需要确认:所有写入操作在执行前都需要明确确认
- 输入验证:暂存操作前的电子邮件、日期和字段验证
- CSV导出:将联系人、事件和注册导出为CSV格式
- 快捷操作:用于常见任务的简化工具(按姓名搜索、通过电子邮件登记等)
- 只读模式:禁用所有突变以进行安全的数据探索
- 速率限制:遵守Wild Apricot API限制的内置延迟
目录
设置
1.获取您的API证书
- 登录您的Wild Apricot管理面板
- 首选 设置 > 安全 > 授权申请
- 点击 授权申请
- 选择 服务器应用程序 (API密钥)
- 选择适当的访问级别:
- 只读访问 -建议用于初始测试
- 完全访问 -写入操作所需
- 复制 API密钥 生成
- 注意你的 帐户ID (在URL中可见:
https://app.wildapricot.org/admin/XXXXXX/...)
2.安装
git clone https://github.com/yourusername/wildapricot-mcp.git
cd wildapricot-mcp
npm install
npm run build
3.配置
cp .env.example .env
# Edit .env with your credentials
4.添加到克劳德桌面
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"wildapricot": {
"command": "node",
"args": ["/full/path/to/wildapricot-mcp/dist/index.js"],
"env": {
"WILDAPRICOT_API_KEY": "your_api_key_here",
"WILDAPRICOT_ACCOUNT_ID": "your_account_id_here",
"WILDAPRICOT_READ_ONLY": "true"
}
}
}
}
可用工具
读取操作(18个工具-始终可用)
帐户和联系人
| 工具 | 说明 |
|---|---|
get_account |
获取账户详细信息(姓名、时区、货币、联系人数量) |
list_contacts |
使用OData筛选器列出/搜索联系人 |
get_contact |
通过ID获取联系方式 |
get_contact_by_email |
通过确切的电子邮件地址查找联系人 |
search_contacts_by_name |
按名字/姓氏搜索(比过滤器更简单) |
export_contacts_csv |
将联系人导出为CSV格式 |
事件
| 工具 | 说明 |
|---|---|
list_events |
使用日期过滤器列出事件 |
get_event |
按ID获取事件 |
get_upcoming_events |
获取未来N天内的事件(默认值:30) |
get_event_attendees |
在一次通话中获取活动+所有注册 |
export_events_csv |
将事件导出为CSV格式 |
注册
| 工具 | 说明 |
|---|---|
list_event_registrations |
列出活动的注册信息 |
get_registration |
按ID注册 |
find_registration_by_email |
通过与会者电子邮件查找注册信息 |
export_registrations_csv |
将注册导出为CSV格式 |
其他
| 工具 | 说明 |
|---|---|
list_membership_levels |
列出所有会员级别 |
list_invoices |
列出带有过滤器的发票 |
get_invoice |
按ID获取发票 |
写入操作(9个工具-READ_ONLY=true时禁用)
⚠️ 所有写入操作都需要确认。删除操作需要 双重确认.
| 工具 | 说明 | 确认 |
|---|---|---|
create_contact |
创建新联系人 | confirm_operation |
update_contact |
更新联系人字段 | confirm_operation |
delete_contact |
永久删除联系人 | confirm_delete +“删除” |
create_event |
创建新事件 | confirm_operation |
update_event |
更新事件详细信息 | confirm_operation |
delete_event |
删除事件和所有注册 | confirm_delete +“删除” |
update_registration |
更新注册(登记、备忘录) | confirm_operation |
check_in_by_email |
通过电子邮件查找和登记 | confirm_operation |
create_invoice |
创建新发票 | confirm_operation |
确认工具(4个工具-READ_ONLY=true时禁用)
| 工具 | 说明 |
|---|---|
confirm_operation |
执行待定的创建/更新操作 |
confirm_delete |
执行挂起的删除操作(需要“delete”文本) |
cancel_operation |
取消挂起的操作 |
list_pending_operations |
列出所有待处理的操作 |
确认工作流程
标准写入操作(创建/更新)
1. Call write tool (e.g., create_contact)
→ Returns: operationId + preview
2. Review the preview
3. Call confirm_operation(operationId)
→ Executes the operation
删除操作(双重确认)
删除操作具有额外的安全性:
1. Call delete tool with matching IDs
delete_contact(contactId: 123, confirmContactId: 123)
→ Returns: operationId + preview
2. Review what will be deleted
3. Call confirm_delete(operationId, confirmText: "DELETE")
→ Must type "DELETE" exactly to proceed
示例:删除联系人
User: "Delete contact 12345"
AI calls: delete_contact(contactId: 12345, confirmContactId: 12345)
Response:
{
"status": "PENDING_DOUBLE_CONFIRMATION",
"operationId": "op_xxx",
"warning": "THIS CANNOT BE UNDONE",
"preview": {
"action": "DELETE CONTACT",
"contactId": 12345,
"contactName": "John Smith",
"contactEmail": "john@example.com"
}
}
User: "Yes, delete it"
AI calls: confirm_delete(operationId: "op_xxx", confirmText: "DELETE")
Response:
{
"success": true,
"message": "⚠️ DELETED: DELETE contact: John Smith..."
}
示例提示
安全只读提示
"Show me account information"
"List all active members"
"Find John Smith"
"Get contact with email john@example.com"
"Show upcoming events for the next 2 weeks"
"Get all registrations for event 12345"
"Export all contacts to CSV"
"Export registrations for event 12345 to CSV"
写提示(需要确认)
"Create a contact for Jane Doe with email jane@example.com"
→ Review preview → "Confirm"
"Check in john@example.com for event 12345"
→ Review preview → "Yes, check them in"
"Update event 12345 location to 'Main Hall'"
→ Review preview → "Confirm the update"
删除提示(需要双重确认)
"Delete contact 12345"
→ Review what will be deleted
→ "Yes, permanently delete it"
→ AI must call confirm_delete with "DELETE"
提示避免
❌ "Update all contacts..." - Could stage many operations
❌ "Delete all old events..." - Very dangerous
❌ "Confirm all pending operations" - Review each one!
❌ "Clean up the database..." - Ambiguous and dangerous
配置选项
| 环境变量 | 必填 | 默认 | 描述 |
|---|---|---|---|
WILDAPRICOT_API_KEY |
是 | - | 您的Wild Apricot API密钥 |
WILDAPRICOT_ACCOUNT_ID |
是 | - | 您的野生杏账户ID |
WILDAPRICOT_READ_ONLY |
没有 | false |
设置为 true 禁用所有写入操作 |
发展
npm run dev # Development mode with tsx
npm run build # Build for production
npm start # Start production server
项目结构
src/
├── index.ts # MCP server entry point
├── config.ts # Configuration loading
├── auth.ts # OAuth token management
├── client.ts # API client with rate limiting
├── validation.ts # Input validation utilities
├── csv-export.ts # CSV export utilities
├── pending-operations.ts # Confirmation system
└── tools/
├── index.ts # Tool registration
├── account.ts # Account tools
├── contacts.ts # Contact tools (CRUD + search + export)
├── events.ts # Event tools (CRUD + search + export)
├── registrations.ts # Registration tools (RU + search + export)
├── memberships.ts # Membership level tools
└── invoices.ts # Invoice tools (CR)
故障排除
常见错误
| 错误 | 解决方案 |
|---|---|
| “WILDAPRICOT_API_KEY必需” | 在配置中设置环境变量 |
| “身份验证失败:401” | 在WA管理中重新生成API密钥 |
| “API错误:403” | 检查API密钥权限 |
| “API错误:429” | 速率受限-等待并重试 |
| “找不到操作” | 已过期(5分钟限制)-再次执行阶段 |
| “验证错误” | 检查输入格式(电子邮件、日期、ID) |
删除确认失败
- 确保
confirmText正是"DELETE"(全部大写) - 确保
contactId/eventId匹配确认参数 - 检查操作未过期(5分钟限制)
API 参考
许可证
麻省理工学院
免责声明
本项目不隶属于野杏或Personify。野杏是Personify的商标。
本软件按“原样”提供,不提供任何形式的保修。 使用风险自负。