最近想用Trae 2.0做一个服务于自己的智能体, 在编排工具的过程中深入理解了一下什么是MCP servers以及AI agent的系统架构, 故总结此记录方便自己以后有遗忘了回头复习, 后续有新理解也会补充于此.
🎯 什么是 MCP?
MCP (Model Context Protocol) 是一个让 AI 模型通过agent能够安全、标准化地访问外部数据和工具的协议。
MCP协议的职责范围:
- ✅ 管什么 :Agent ↔ 工具/外部资源的标准化通信
- ✅ 管什么 :连接建立、数据传输、协议规范
- ❌ 不管什么 :LLM ↔ Agent 的交互格式
LLM ↔ Agent ↔ MCP Server ↔ 外部资源
↑ ↑
不归MCP管 MCP协议管辖
简单类比
想象LLM是一个很聪明的大脑,无法直接接触外面的世界。Agent就是给这个大脑安装了一双"手",让它能够使用Tools, 这些工具就是MCP Servers, MCP这个协议让手可以以一个固定动作使用这些工具, 比如:
- 📊 查询数据库
- 📁 读写文件
- 🌐 访问网络API
- 🔧 使用各种工具
🏗️ MCP 的核心架构
用户 ↔ Trae (AI Agent) ↔ LLM (AI模型)
(MCP协议)↕
MCP Server ↔ 外部资源
(数据库/文件/API)
🔄 MCP 工作流程详解
1. 配置阶段(使用之前需配置)
// Trae 配置文件
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": ["@modelcontextprotocol/server-postgres"],
"env": {
"POSTGRES_URL": "postgresql://user:pass@localhost/db"
}
}
}
}
command:启动MCP Server的命令, 这个命令第一次执行时会下载包到本地并启动, 之后扫描到发现本地有就直接启动了.args:启动MCP Server的参数, 这个就是MCP server的包名.env:告诉MCP Server 连接哪个数据库.
2. 运行阶段(每次对话)
- 用户提问:"帮我查询销售数据"
- Trae启动MCP Server:在本地启动数据库连接进程
- Trae发送给LLM:用户问题 + 可用工具列表
- LLM返回工具调用:
{"tool": "query_database", "sql": "SELECT * FROM sales"} - Trae执行工具:通过MCP Server查询数据库
- 返回结果:数据库结果 → MCP Server → Trae → LLM → 最终回答
🚀 MCP Server 的三种部署模式
1. 本地进程模式 ⭐(推荐)
特点:
- MCP Server 运行在你的电脑上
- Trae 通过进程间通信控制
- 需要安装相应的运行时环境
配置示例:
{
"command": "npx",
"args": ["@modelcontextprotocol/server-postgres"]
}
优势:
- ✅ 数据安全(不离开本地)
- ✅ 低延迟
- ✅ 完全控制
- ✅ 官方支持最好
2. 远程服务器模式
特点:
- MCP Server 运行在云端
- 通过网络协议通信
- 本地无需安装环境
配置示例:
{
"transport": {
"type": "sse",
"url": "https://api.example.com/mcp"
}
}
优势:
- ✅ 无需本地环境
- ✅ 易于维护
- ❌ 数据需要传输
- ❌ 依赖网络
3. Docker 容器模式
特点:
- 运行在 Docker 容器中
- 环境完全隔离
- 需要安装 Docker
配置示例:
{
"command": "docker",
"args": ["run", "my-mcp-server"]
}
🛠️ 环境安装要求
为什么需要安装 Node.js?
核心原因:大部分官方 MCP Server 都是用 JavaScript/TypeScript 编写的。
类比理解:
- 安装 Node.js = 为了运行 JavaScript 程序
- 安装 JDK = 为了运行 Java 程序
- 安装 Python = 为了运行 Python 程序
安装清单
| MCP Server 类型 | 需要安装 | 示例 |
|---|---|---|
| JavaScript/TypeScript | Node.js (LTS版本) | @modelcontextprotocol/server-postgres |
| Python | Python 3.8+ | 自定义 Python MCP Server |
| Go | Go 运行时 | 自定义 Go MCP Server |
| Docker | Docker Desktop | 任何容器化的 MCP Server |
🔧 实际配置示例
PostgreSQL 数据库连接
{
"mcpServers": {
"postgres": {
"command": "npx",
"args": ["@modelcontextprotocol/server-postgres"],
"env": {
"POSTGRES_URL": "postgresql://username:password@localhost:5432/database_name"
}
}
}
}
文件系统访问
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["@modelcontextprotocol/server-filesystem", "/path/to/allowed/directory"]
}
}
}
🎭 Trae 的角色:一个 AI Agent 类似一个中台服务
客户端功能
- 🖥️ 用户界面:提供聊天界面
- 💬 交互体验:处理用户输入输出
- 📝 会话管理:维护对话历史
- ⚙️ 配置管理:管理 MCP 配置
中台调度服务
- 🚦 请求路由:决定调用哪个工具
- 🔧 工具编排:协调多个工具协作
- 🔄 协议转换:在不同协议间转换
- 📊 资源管理:管理 MCP Server 生命周期
- 🔒 安全控制:权限和访问控制
📚 总结
MCP 是连接 AI 模型与外部世界的桥梁,通过标准化的协议让 AI 能够安全、高效地访问各种资源。理解 MCP 的关键在于:
- 架构理解:AI Agent 作为中台调度服务
- 部署选择:根据需求选择合适的部署模式
- 环境准备:安装必要的运行时环境