原因连接MCP服务器
一个模型上下文协议(MCP)服务器,促进捐赠者与非政府组织与Every.org非营利组织数据访问的集成交互。此服务器提供用于非营利组织发现、捐赠管理、合规性跟踪、赞助商匹配和分析的工具。
特性
- 非营利数据集成:实时访问Every.org的100多万非营利组织数据库
- 基于角色的访问控制:捐助者、非政府组织、合规官员、赞助商和管理员的不同权限
- 捐赠管理:认捐创建和跟踪系统
- 合规性监测:非政府组织核查和文件跟踪
- 赞助商匹配:非营利组织与适当赞助商的自动匹配
- 支付模拟:模拟支付处理,计算赞助商费用
- 分析仪表板:行业分析和资金见解
建筑
服务器使用混合架构:
- 主服务器 (FastAPI):处理MCP协议和核心业务逻辑
- Every.org子进程:用于非营利数据API调用的专用MCP服务器
- 沟通:进程之间通过stdin/stdout的JSON-RPC
可用工具
核心工具
- ngo_info -重定向到适当Every.org工具的传统工具
- 保证 -创建和管理捐赠承诺
- 合规 -查看非政府组织合规状态和文件
- 赞助商匹配 -将非政府组织与符合条件的赞助商配对
- 支付 -通过费用计算模拟付款处理
- 非政府组织分析 -获取行业分析和资金见解
Every.org集成工具
- search_nonprofits -按名称或关键字搜索非营利组织
- 获取_无利润_详细信息 -获取特定非营利组织的详细信息
- 浏览_无利润_因 -按事业类别(教育、健康、环境等)浏览非营利组织
快速开始
先决条件
- Python 3.11+
- Docker(推荐)
- Every.org API密钥
Docker安装程序(推荐)
- 构建容器:
docker build -t donor-ngo-mcp-server .- 使用环境变量运行:
docker run -p 8003:8003 \
-e EVERY_ORG_API_KEY=your_api_key_here \
-e AUTH_MODE=AUTO \
donor-ngo-mcp-server地方发展
- 安装依赖项:
pip install -r requirements.txt- 设置环境变量:
export EVERY_ORG_API_KEY=your_api_key_here
export AUTH_MODE=AUTO- 运行服务器:
python main.py --host 127.0.0.1 --port 8003身份验证和授权
身份验证模式
- 自动 (默认):自动为测试分配管理员角色
- 严格:需要有效的授权令牌
令牌格式
- 捐助者:
donor_123 - 非政府组织:
ngo_org123_user456 - 合规:
compliance_123 - 赞助商:
sponsor_123 - 管理员:
admin_123
访问控制
不同的代理类型可以访问不同的工具:
| 工具 | 捐助者 | 非政府组织 | 合规性 | 赞助商 | 管理员 |
|---|---|---|---|---|---|
| ngo_info | ✓ | ✓ | ✓ | ✓ | ✓ |
| search_nonprofits | ✓ | ✓ | ✓ | ✓ | ✓ |
| get_nonprofit_details | ✓ | ✓ | ✓ | ✓ | ✓ |
| 浏览_无利可图_原因 | ✓ | ✓ | ✓ | ✓ | ✓ |
| 承诺 | ✓ | ✓ | ✓ | ||
| 合规性 | ✓ | ✓ | ✓ | ✓ | ✓ |
| 赞助商匹配 | ✓ | ✓ | ✓ | ✓ | ✓ |
| 付款 | ✓ | ✓ | ✓ | ||
| 非政府组织分析 | ✓ | ✓ |
API示例
搜索教育非营利组织
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "browse_nonprofits_by_cause",
"arguments": {
"cause": "education",
"limit": 5
}
},
"id": 1
}创建捐赠承诺
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "pledge",
"arguments": {
"action": "create",
"ngo_id": "some-nonprofit-id",
"amount": 1000.0,
"message": "Supporting education initiatives"
}
},
"id": 2
}获取非营利组织详细信息
{
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"name": "get_nonprofit_details",
"arguments": {
"nonprofit_id": "givedirectly"
}
},
"id": 3
}健康终点
- GET/健康 -总体服务器运行状况
- GET/ping -简单连接测试
- GET/everyorg/状态 -Every.org集成状态
- GET/测试每个组织 -测试Every.org API连接
环境变量
| 变量 | 描述 | 默认值 |
|---|---|---|
EVERY_ORG_API_KEY | Every.org API密钥 | 必需 |
AUTH_MODE | 身份验证模式(自动/严格) | 自动 |
LOG_LEVEL | 日志级别 | 信息 |
支持的非营利事业
Every.org集成支持以下原因类别:
education-教育机构和项目health-医疗保健和医学研究environment-环境保护poverty-扶贫和社会服务animals-动物福利和保护arts-艺术、文化和人文community-社区发展disaster-relief-应急响应和救灾human-services-社会和人类服务international-国际发展research-科学和学术研究religion-宗教组织
错误处理
服务器为常见场景提供详细的错误响应:
- 403禁止:请求的工具权限不足
- 404未找到:未找到资源(认捐、非政府组织等)
- 503服务不可用:Every.org集成不可用
- 400错误请求:参数无效或请求格式错误
发展
项目结构
├── main.py # Main server implementation
├── requirements.txt # Python dependencies
├── Dockerfile # Container configuration
├── everyorg_mcp_server.py # Auto-generated Every.org subprocess
└── README.md # This file添加新工具
- 在工具处理程序部分创建处理程序函数
- 将工具定义添加到
tools/list响应 - 在中添加路由逻辑
tools/call处理器 - 更新中的访问控制规则
AuthService.check_tool_access()
调试
服务器包括全面的日志记录。为了调试Every.org集成问题:
- 检查
/everyorg/status子流程状态的端点 - 使用
/test-everyorg测试API连接 - 使用启用调试日志记录
--log-level debug
许可证
本项目按原样提供,用于演示目的。
支持
关于以下问题:
- Every.org API:联系Every.org支持
- MCP协议:请参阅模型上下文协议文档
- 服务器问题:检查运行状况端点和日志
