Blimp MCP服务器
基于FastAPI构建的人工智能自动化平台MCP服务器,集成了Gemini 2.5 Flash、Supabase和n8n工作流。
特性
- 🤖 AI驱动的分析:使用Gemini 2.5 Flash分析用户提示并确定所需的应用程序
- 🔗 应用程序连接验证:检查Supabase数据库中用户连接的应用程序
- ⚡ 工作流程自动化:根据用户请求触发n8n工作流
- 🔐 承载令牌身份验证:使用承载令牌安全访问API
- 📊 工作流跟踪:在Supabase中保存和跟踪工作流执行
- 🔌 代理API:使用用户特定的OAuth令牌将n8n请求路由到第三方API
- 🐳 Docker就绪:包括Dockerfile,便于部署
建筑
\\\ 用户请求→ FastAPI服务器→ 双子座分析→ Supabase检查→ n8n工作流 ↓ n8n工作流→ MCP代理→ 用户OAuth令牌→ 第三方API(Gmail、Slack等) \\\
API终点
POST /prompt
处理用户提示并分析所需的应用程序。
请求正文: \\\json { “prompt”:“收到电子邮件时发送Slack消息”, “user_id”:“user_123”, “bear_token”:“your_bear_token” } \\\
答复: \\\json { “状态”:“就绪”, “消息”:“所有必需的应用程序都已连接。准备执行工作流。”, “required_apps”:\[ { “app_name”:“Gmail”, “is_connected”:true }, { “app_name”:“Slack”, “is_connected”:true } \], “workflow_id”:“workflow_1234”, “二元分析”:{ “workflow_type”:“email_to_lack”, “工作流描述”:“…”, “建议行动”:\[…\] } } \\\
POST /execute-workflow
收到批准后执行n8n工作流。
请求正文: \\\json { “workflow_id”:“workflow_1234”, “user_id”:“user_123”, “bear_token”:“your_bear_token”, “参数”:{ “频道”:“#通用”, “筛选器”:“重要” } } \\\
答复: \\\json { “状态”:“成功”, “消息”:“工作流执行已成功启动”, “execution_id”:“exec_5678”, “工作流结果”:{ “成功”:没错, “数据”:{…} } } \\\
GET /workflow/{workflow_id}/status
获取工作流执行的状态。
查询参数:
user_id:用户的唯一标识符
答复: \\\json { “状态”:“成功”, “workflow_id”:“workflow_1234”, “n8n_status”:{ “状态”:“正在运行”, “数据”:{…} }, “数据库记录”:{…} } \\\
POST /api/mcp/connect-app
使用OAuth凭据连接用户的应用程序。
请求正文: \\\json { “user_id”:“user_123”, “app_name”:“Gmail”, “app_type”:“gmail”, “凭据”:{ “访问令牌”:“ya29.xxx”, “refresh_token”:“1//xxx”, “token_type”:“承载者”, “到期日”:1234567890, “范围”:https://www.googleapis.com/auth/gmail.readonly" }, “元数据”:{ “电子邮件”:user@example.com", “connected_at”:“2025-01-14T10:00:00Z”, “范围”:\[“gmail.readonly”\] } } \\\
答复: \\\json { “成功”:没错, “消息”:“应用程序连接成功”, “credential_id”:“crede_uuid”, “app_name”:“Gmail” } \\\
POST /proxy/{app_name}/{action}
使用用户特定的OAuth令牌向第三方API发出代理请求。
支持的应用程序:
gmail:获取电子邮件,发送电子邮件slack:postMessage,listChannelsnotion:createPage,searchPagescalendar:createEvent,listEventsgdrive:listFiles,uploadFile
请求正文: \\\json { “user_id”:“user_123”, “有效载荷”:{ //动作特定参数 } } \\\
示例-获取Gmail电子邮件: \\\bash curl-X POSThttp://localhost:8000/proxy/gmail/fetchEmails \ -H“内容类型:应用程序/json” \ d “user_id”:“user_123”, “有效载荷”:{ 查询“:”为:未读 } }' \\\
答复: \\\json { “成功”:没错, “数据”:{ “电子邮件”:\[…\], “计数”:5 } } \\\
看 PROXY_API_GUIDE.md程序 以获取完整的代理API文档。
设置
地方发展
- 克隆仓库
\\\bash 克隆 cd blimp mcp服务器 \\\
- 创建虚拟环境
\\\bash python-m venv-venv 源venv/bin/activate#在Windows上:venv\\Scripts\\activate \\\
- 安装依赖项
\\\bash pip安装-r要求.txt \\\
- 配置环境变量
\\\`bash cp.env.example.env
使用您的实际凭据编辑.env
\\\`
- 运行服务器
\\\bash uvicorn主:应用程序--重新加载--端口8000 \\\
服务器将在以下时间可用 http://localhost:8000
Docker部署
- 构建Docker镜像
\\\bash docker构建-t blimp-mcp服务器。 \\\
- 运行容器
\\\bash docker run-d \ --名称飞艇mcp \ -第8000:8000页 \ -e GEMINI_API_KEY=您的密钥 \ -e suabase url=您的url \ -e SUPABASE_SERVICE_ROLE_KEY=your_KEY \ -e N8N_BASE_URL=您的_N8N_URL \ -e N8N_API_KEY=您的_N8N_KEY \ blimp mcp服务器 \\\
或者使用docker compose:
\\\yaml 版本:“3.8” 服务: mcp服务器: 构建:。 端口: \- "8000:8000" env_file: -.env 重新启动:除非停止 \\\
数据库模式
必需的辅助数据库表
用户连接应用程序 \\\`sql 创建表user_connected_apps( id UUID主键默认值UUID_generate_v4(), user_id文本不为空, app_name文本不为空, app_type文本不为空, is_active BOOLEAN DEFAULT为真, created_at带有时区默认编号的时间戳(), updated_at带有时区默认编号的时间戳(), 唯一(用户id,应用类型) );
在user_connected_apps(user_id)上创建索引idx_user_connected_adps_user_id; 在user_connected_apps上创建索引idx_user_connected_adps_active(user_id,is_active); \\\`
用户凭证 \\\`sql 创建表user_credentials( id UUID主键默认值UUID_generate_v4(), user_id文本不为空, app_name文本不为空, app_type文本不为空, 凭证JSONB非空, 元数据JSONB, is_active BOOLEAN DEFAULT为真, created_at带有时区默认编号的时间戳(), updated_at带有时区默认编号的时间戳(), 唯一(用户id,应用类型) );
在user_credentials(user_id)上创建索引idx_user_credentials_user_id; 创建索引idx_user_credentials_active ON用户凭证(user_id,is_active);
--启用行级安全 ALTER TABLE user_credentials启用行级安全;
--策略:用户只能访问自己的凭据 创建用户凭证政策 虽然 正在使用(auth.uid()::text=user_id); \\\`
工作流执行 \\\`sql 创建表工作流执行程序( id UUID主键默认值UUID_generate_v4(), user_id文本不为空, workflow_id文本不为空, execution_id文本不为空, 状态文本非空, 参数JSONB, 结果JSONB, created_at带有时区默认编号的时间戳(), updated_at带有时区默认编号的时间戳() );
在工作流执行器(user_id)上创建索引idx_workflow_executions_user_id; 在工作流执行器(execution_id)上创建索引idx_workflow_executions_execution_id; \\\`
环境变量
| 变量 | 描述 | 必填 |
|---|---|---|
GEMINI_API_KEY | Google Gemini API密钥 | 是 |
SUPABASE_URL | Supabase项目URL | 是 |
SUPABASE_SERVICE_ROLE_KEY | Supabase服务角色键 | 是 |
N8N_BASE_URL | n8n实例URL | 是 |
N8N_API_KEY | n8n API密钥 | 是 |
PORT | 服务器端口(默认值:8000) | 否 |
API文档
服务器运行后,请访问:
- Swagger用户界面:
http://localhost:8000/docs - 重新记录:
http://localhost:8000/redoc
文档
- 代理API指南 -使用n8n工作流的代理API的完整指南
- n8n工作流设置指南 -如何为基于令牌的身份验证配置n8n工作流
- 仪表板提示 -构建前端仪表板的规范
测试
\\\`bash
测试健康终点
卷曲http://localhost:8000/health
测试提示端点
curl-X POSThttp://localhost:8000/prompt \ -H“内容类型:应用程序/json” \ d “prompt”:“收到电子邮件时发送Slack消息”, “user_id”:“user_123”, “bear_token”:“test_token” }'
测试代理端点
curl-X POSThttp://localhost:8000/proxy/gmail/fetchEmails \ -H“内容类型:应用程序/json” \ d “user_id”:“user_123”, “有效载荷”:{ 查询“:”为:未读 } }' \\\`
许可证
麻省理工学院
