consent mcp:人工智能代理的公众同意握手
“测量两次,切割一次。”
同意mcp 是一个开源的模型上下文协议(MCP)服务器,充当主动人工智能代理的道德网关。它确保在没有明确、经过验证的同意握手的情况下,任何自主代理都不会主动与人类目标(邻居、患者或社区成员)联系。
🚀 为什么存在
我们正在从“聊天机器人”(被动)转向“代理”(主动)。
- 问题: 如果缺乏社会意识,主动检查邻居的代理很快就会成为一种滋扰或侵犯隐私的行为。
- 解决方案: 此工具提供 闭锁机构代理人必须致电
check_consent在执行任何任务之前。如果不同意GRANTED,代理在工具级别被硬阻塞。
✨ 特性
- 双重选择加入工作流程: 向目标发送短信(通过Twilio)或电子邮件(通过SendGrid)请求权限
- 封锁工具:
check_consent回报False除非同意有效且未到期 - 请求者跟踪: 多个用户可以独立请求同一目标的同意
- 同意书到期: 所有同意书都有安全有效期
- 审核日志记录: 每个请求、授权和撤销都会记录到PostgreSQL中
- 可插拔身份验证: API密钥或现成的OAuth身份验证
- 领域驱动设计: 具有可交换基础设施的干净架构
- Docker就绪: 使用单个
docker-compose up
📦 快速开始
使用Docker(推荐)
# Clone the repository
git clone https://github.com/sairajm/consent-mcp.git
cd consent-mcp
# Copy environment template
cp .env.example .env
# Edit .env with your configuration
# At minimum, set API_KEYS for authentication
# Start the server
docker-compose up --build本地开发
地方发展(推荐)
此工作流在Docker中运行PostgreSQL,但在您的机器上本地执行Python服务器以实现快速迭代。
- 视窗:
.\scripts\start_local.ps1- Linux/Mac:
chmod +x scripts/start_local.sh
./scripts/start_local.sh此脚本将:
- 检查
.env(复制自.env.example如果需要)。 - 启动特定的本地Postgres容器(
consent-mcp-postgres-dev). - 等待数据库准备就绪。
- 运行数据库迁移。
- 使用本地环境配置启动MCP服务器。
备注:有关手动设置,请参阅 .github/workflows/ci.yml.🔧 配置
所有配置都是通过环境变量进行的:
| 变量 | 必填 | 描述 |
|---|---|---|
ENV | 否 | 环境: test, development, production (默认值: development) |
DATABASE_URL | 是 | PostgreSQL连接URL |
AUTH_PROVIDER | 否 | 身份验证方法: api_key, oauth, none (默认值: api_key) |
API_KEYS | 对于api_key身份验证 | 逗号分隔 key:client_id 成对 |
TWILIO_ACCOUNT_SID | 用于短信 | Twilio帐户SID |
TWILIO_AUTH_TOKEN | 用于短信 | Twilio认证令牌 |
TWILIO_PHONE_NUMBER | 用于短信 | Twilio电话号码(E.164格式) |
SENDGRID_API_KEY | 对于电子邮件 | SendGrid API密钥 |
SENDGRID_FROM_EMAIL | 用于电子邮件 | 发件人电子邮件地址 |
🛠️ MCP工具
短信工具
request_consent_sms
通过短信请求目标同意。
{
"requester_phone": "+15551234567",
"requester_name": "Alice",
"target_phone": "+15559876543",
"target_name": "Bob",
"scope": "wellness_check",
"expires_in_days": 30
}check_consent_sms
舞台调度: 检查请求者是否主动同意联系目标。
{
"requester_phone": "+15551234567",
"target_phone": "+15559876543"
}退货 true 只有当同意 GRANTED 并且未过期。
电子邮件工具
request_consent_email
通过电子邮件请求目标的同意。
{
"requester_email": "alice@example.com",
"requester_name": "Alice",
"target_email": "bob@example.com",
"target_name": "Bob",
"scope": "appointment_reminder",
"expires_in_days": 365
}check_consent_email
舞台调度: 检查请求者是否已主动同意通过电子邮件联系目标。
管理工具(仅限测试环境)
admin_simulate_response
在没有真实短信/电子邮件的情况下模拟同意响应进行测试。
{
"target_contact_type": "phone",
"target_contact_value": "+15559876543",
"requester_contact_value": "+15551234567",
"response": "YES"
}⚠️ 此工具仅在以下情况下可用 ENV=test🏗️ 建筑
该项目遵循领域驱动设计:
src/consent_mcp/
├── domain/ # Business logic (entities, services, interfaces)
├── infrastructure/ # External integrations (database, providers, auth)
└── mcp/v1/ # MCP layer (tools, request/response schemas)扩展系统
添加新的消息传递提供程序:
- 创建一个类来实现
IMessageProvider在infrastructure/providers/ - 在中注册
infrastructure/providers/factory.py
添加新的身份验证提供程序:
- 创建一个类来实现
IAuthProvider在infrastructure/auth/ - 在中注册
infrastructure/auth/factory.py
切换数据库:
- 创建一个新类来实现
IConsentRepository - 无需更改域或MCP层
🧪 测试
# Start test database
docker-compose -f docker-compose.test.yml up -d
# Run all tests
pytest tests/ -v
# Run with coverage
pytest tests/ --cov=consent_mcp --cov-report=html
# Run specific test file
pytest tests/domain/test_services.py -v📝 数据库迁移
# Create a new migration
alembic revision --autogenerate -m "description"
# Apply migrations
alembic upgrade head
# Rollback one migration
alembic downgrade -1🔒 安全
- 所有MCP请求都需要身份验证(API密钥或OAuth)
- 生产环境中禁用了管理工具
- 秘密永远不会被记录
- Docker以非root用户身份运行
- 预提交钩子在提交前检测秘密
🤝 贡献
- 分叉存储库
- 创建要素分支
- 安装预提交挂钩:
pre-commit install - 进行更改
- 运行测试:
pytest - 提交拉取请求
📄 许可证
MIT许可证-请参阅 许可证 了解详情。
