Files
ailine/backend/docs/MCP_INTEGRATION.md
root 9c53f58165
All checks were successful
构建并部署 AI Agent 服务 / deploy (push) Successful in 5m38s
feat: 集成MCP统一外部接口管理系统
- 添加MCP Manager统一入口管理
- 实现Contact/Dictionary/News三个适配器
- 三层降级策略:MCP -> Database -> Mock
- 保持原有api_client向后兼容
- 添加完整文档和测试
2026-05-03 12:36:12 +08:00

180 lines
5.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# MCP 集成系统
## 概述
这是一个统一的外部接口管理层,集成了 MCP (Model Context Protocol),同时支持数据库缓存和降级到模拟数据。
## 架构设计
```
┌─────────────────────────────────────────────────────────┐
│ 子图 (Subgraphs) │
│ contact_api │ dictionary_api │ news_api │
└─────────────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────────────┐
│ MCP Manager (统一入口) │
│ ┌─────────────────────────────────────────────────┐ │
│ │ Adapters (适配器层) │ │
│ │ ContactAdapter │ DictionaryAdapter │ NewsAdapter│ │
│ └─────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────┘
┌─────────────────┼─────────────────┐
▼ ▼ ▼
┌──────────────┐ ┌──────────────┐ ┌──────────────┐
│ MCP Client │ │ Database │ │ Mock Data │
│ (真实服务) │ │ (缓存层) │ │ (降级层) │
└──────────────┘ └──────────────┘ └──────────────┘
```
## 目录结构
```
backend/app/mcp/
├── __init__.py # 模块初始化
├── mcp_manager.py # MCP管理器统一入口
├── mcp_client.py # MCP客户端
├── base_adapter.py # 适配器基类
├── mcp_config.example.yaml # 配置示例
├── mcp_example.py # 使用示例
└── adapters/
├── __init__.py
├── contact_adapter.py # 通讯录适配器
├── dictionary_adapter.py# 词典适配器
└── news_adapter.py # 新闻适配器
```
## 快速开始
### 1. 基本使用(自动降级)
现有的子图API已经无缝迁移无需修改代码
```python
# 通讯录 - 和之前一样使用
from backend.app.subgraphs.contact.api_client import contact_api
contacts = await contact_api.list_contacts(user_id="default")
# 词典 - 和之前一样使用
from backend.app.subgraphs.dictionary.api_client import dictionary_api
word_data = await dictionary_api.query_word(word="ephemeral")
# 新闻 - 和之前一样使用
from backend.app.subgraphs.news_analysis.api_client import news_api
news_list = await news_api.query_news(query="AI")
```
### 2. 直接使用MCP管理器
```python
from backend.app.mcp import mcp_manager, ContactAdapter, DictionaryAdapter, NewsAdapter
# 注册适配器
mcp_manager.register_adapter(ContactAdapter())
mcp_manager.register_adapter(DictionaryAdapter())
mcp_manager.register_adapter(NewsAdapter())
# 初始化
await mcp_manager.initialize()
# 统一调用接口
result = await mcp_manager.execute(
"dictionary",
"query_word",
word="serendipity",
user_id="default"
)
print(f"来源: {result.source}") # mcp_dictionary / database / mock
print(f"数据: {result.data}")
```
### 3. 配置MCP服务器
复制配置示例:
```bash
cp backend/app/mcp/mcp_config.example.yaml backend/app/mcp/mcp_config.yaml
```
编辑 `mcp_config.yaml`启用需要的MCP服务器
```yaml
mcp_servers:
# Gmail 邮件服务
gmail:
type: stdio
command: npx
args:
- "-y"
- "@modelcontextprotocol/server-gmail"
enabled: true
# GitHub
github:
type: stdio
command: npx
args:
- "-y"
- "@modelcontextprotocol/server-github"
env:
GITHUB_PERSONAL_ACCESS_TOKEN: "ghp_your_token_here"
enabled: true
```
## 特性
### 1. 三层降级策略
- **MCP层**: 优先使用真实的MCP服务
- **数据库层**: 其次使用数据库缓存
- **模拟层**: 最后降级到模拟数据,确保系统始终可用
### 2. 统一接口
所有外部服务都通过 `mcp_manager.execute()` 统一调用,返回标准化的 `AdapterResult`
### 3. 向后兼容
保留了原有的 `api_client` 接口,现有代码无需修改即可使用新系统。
### 4. 可扩展
通过继承 `BaseAdapter` 可以轻松添加新的适配器。
## 创建自定义适配器
```python
from backend.app.mcp import BaseAdapter, AdapterResult
class MyAdapter(BaseAdapter):
name = "my_service"
description = "我的自定义服务"
async def execute(self, action: str, **kwargs) -> AdapterResult:
# 1. 尝试MCP
# 2. 尝试数据库
# 3. 降级到模拟
pass
# 注册
mcp_manager.register_adapter(MyAdapter())
```
## 可用的MCP服务器
- **@modelcontextprotocol/server-filesystem** - 文件系统访问
- **@modelcontextprotocol/server-github** - GitHub 集成
- **@modelcontextprotocol/server-gmail** - Gmail 邮件
- **@modelcontextprotocol/server-brave-search** - 网页搜索
- 更多社区服务器...
## 完整示例
参见 `backend/app/mcp/mcp_example.py` 获取完整的使用示例。