13 · MCP 集成
让 Trae 通过 Model Context Protocol 连接数据库、API 和文件系统,把 AI 的能力延伸到外部世界。
01 什么是 MCP
MCP(Model Context Protocol)是 Anthropic 提出的一种开放协议,定义了 AI 应用如何安全地与外部工具和数据源交互。可以把它理解为 AI 世界的 USB 协议——就像 USB 让你统一标准地连接鼠标、键盘和硬盘,MCP 让你统一标准地连接数据库、API 和文件系统。
在 Trae 中,MCP 扮演一个关键角色:它是 AI 从”读代码写代码”到”操作真实系统”的桥梁。
为什么需要 MCP
没有 MCP 之前,AI 编程工具的边界很明确:
- 它能读你项目里的文件
- 它能在你的编辑器里改代码
- 但它碰不到你的数据库、你的 API、你的服务器
MCP 打破了这个边界。通过配置 MCP Server,Trae 可以:
Trae (AI) ←→ MCP Server ←→ 数据库 / API / 文件系统AI 不再只是”脑补”数据库里有什么表——它可以直接连接你的 PostgreSQL,查询表结构,甚至执行迁移脚本。
MCP 的核心组件
| 组件 | 角色 | 类比 |
|---|---|---|
| MCP Client | 集成在 Trae 内部,负责发现和调用工具 | USB 接口(电脑端) |
| MCP Server | 你配置的外部工具适配器,暴露具体能力 | USB 设备(键盘/硬盘) |
| Tool | MCP Server 暴露的一个具体操作(如 query_database) | 设备的一个功能按钮 |
| Prompt | MCP Server 暴露的预设对话模板 | 设备附带的说明书模板 |
心智模型:你配置的每一个 MCP Server,相当于给 Trae 装了一个”外挂器官”。装数据库 MCP,AI 就长了”能看到数据库的眼睛”;装文件系统 MCP,AI 就长了”能操作文件系统的手”。
02 Trae 中的 MCP 架构
Trae 的 MCP 实现和 VS Code 生态深度集成。正因为 Trae 基于 VS Code 内核,它可以直接沿用 VS Code 的 MCP 配置规范,同时加入了 Trae 特有的增强能力。
架构层次
┌──────────────────────────────────────┐
│ Trae AI 引擎 │
│ (Chat / Builder / SOLO) │
├──────────────────────────────────────┤
│ MCP Client 层 │
│ 负责发现、路由、安全隔离 │
├──────────────────────────────────────┤
│ ┌────────┐ ┌────────┐ ┌────────┐ │
│ │ MCP │ │ MCP │ │ MCP │ │
│ │ Server │ │ Server │ │ Server │ │
│ │ (DB) │ │ (API) │ │ (File) │ │
│ └────────┘ └────────┘ └────────┘ │
│ ┌────────┐ ┌────────┐ │
│ │ MCP │ │ MCP │ │
│ │ Server │ │ Server │ │
│ │ (Git) │ │ (云服务)│ │
│ └────────┘ └────────┘ │
├──────────────────────────────────────┤
│ 外部系统(你的基础设施) │
│ PostgreSQL Supabase GitHub 文件系统│
└──────────────────────────────────────┘配置位置
MCP 配置写在项目的 .vscode/mcp.json 文件中。这个文件和 VS Code 的 MCP 规范完全兼容,所以如果你之前用过 VS Code 的 MCP,可以直接迁移。
一个典型的 MCP 配置:
{
"servers": {
"my-database": {
"type": "stdio",
"command": "node",
"args": ["path/to/mcp-server.js"],
"env": {
"DATABASE_URL": "postgresql://user:pass@localhost:5432/mydb"
}
}
}
}Trae 的特殊处理
和 VS Code 相比,Trae 的 MCP 有几个增强点:
| 特性 | VS Code | Trae |
|---|---|---|
| MCP 配置格式 | .vscode/mcp.json | 兼容,路径一致 |
| SOLO 自动调用 | 不支持 | ✅ SOLO 能自动选择和调用 MCP 工具 |
| 安全确认机制 | 基础 | ✅ 分层权限:按模式区分 |
| 多 Server 编排 | 手动管理 | ✅ SOLO 可编排多个 Server 联动 |
| GUI 管理面板 | 需要插件 | ✅ 内置 MCP 状态面板 |
03 配置你的第一个 MCP Server
配置文件结构
所有 MCP 配置存放在项目根目录的 .vscode/mcp.json。如果文件不存在,手动创建即可。
完整配置结构:
{
"servers": {
"<server-name>": {
"type": "stdio",
"command": "<可执行文件>",
"args": ["<参数>"],
"env": {
"<环境变量名>": "<环境变量值>"
}
}
}
}| 字段 | 说明 |
|---|---|
type | 目前支持 stdio(本地进程通信) |
command | 启动 MCP Server 的可执行文件路径或命令 |
args | 传给可执行文件的参数数组 |
env | 注入的环境变量,通常用来传递密钥和连接信息 |
实战:连接 PostgreSQL
我们来配置一个 PostgreSQL MCP Server。
第一步:安装 MCP Server 包。推荐使用社区最成熟的 @anthropic/mcp-postgres:
npm install -g @anthropic/mcp-postgres
# 或者用 npx 临时运行
npx @anthropic/mcp-postgres --help第二步:在 .vscode/mcp.json 中添加配置:
{
"servers": {
"postgres": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@anthropic/mcp-postgres"],
"env": {
"DATABASE_URL": "postgresql://username:password@localhost:5432/myapp"
}
}
}
}第三步:重启 Trae(或重载窗口,Cmd+Shift+P → Developer: Reload Window)。
第四步:打开 MCP 面板(底部状态栏有 MCP 图标),确认 Server 状态变成绿色:
┌─ MCP Servers ──────────────────┐
│ ● postgres 已连接 │
│ Tools: query, schema, migrate│
└────────────────────────────────┘验证连接
在 Chat 模式下输入:
连接一下 PostgreSQL,列出 myapp 数据库的所有表。如果配置正确,Trae 会自动调用 MCP Server 的 query 工具执行 SELECT table_name FROM information_schema.tables,并返回结果。
注意:第一次使用 MCP 工具时,Trae 会弹出确认对话框,询问你是否允许 AI 调用这个工具。这是安全机制的一部分——后面会详细讲。
04 可用 MCP Server 一览
MCP 生态正在快速成长。以下是 Trae 场景下最常用的几类 MCP Server:
数据库类
| MCP Server | 连接目标 | 暴露的工具 |
|---|---|---|
@anthropic/mcp-postgres | PostgreSQL | query, schema, migrate, backup |
@anthropic/mcp-sqlite | SQLite 文件 | query, schema, analyze |
@anthropic/mcp-mysql | MySQL/MariaDB | query, schema, dump |
@anthropic/mcp-mongodb | MongoDB | find, aggregate, collection_info |
@anthropic/mcp-redis | Redis | get, set, keys, info |
API 和云服务类
| MCP Server | 连接目标 | 暴露的工具 |
|---|---|---|
@anthropic/mcp-supabase | Supabase 项目 | query_table, manage_bucket, invoke_edge_function |
@anthropic/mcp-github | GitHub API | list_issues, create_pr, read_file, search_code |
@anthropic/mcp-slack | Slack | send_message, list_channels, search_history |
@anthropic/mcp-vercel | Vercel | deploy, list_projects, inspect_deployment |
@anthropic/mcp-aws | AWS 服务 | s3_list, lambda_invoke, ec2_describe |
文件和工具类
| MCP Server | 连接目标 | 暴露的工具 |
|---|---|---|
@anthropic/mcp-filesystem | 本地文件系统 | read_file, write_file, list_directory |
@anthropic/mcp-git | Git 仓库 | commit, branch, diff, log |
@anthropic/mcp-docker | Docker 引擎 | ps, exec, logs, compose_up |
@anthropic/mcp-browser | 无头浏览器 | screenshot, evaluate, get_html |
Trae 内置 MCP Server
Trae 在 2.1 版本之后,内置了几个常用的 MCP Server,开箱即用:
- Trae File System:增强版文件操作(比标准文件系统多了项目感知)
- Trae Terminal:安全的终端命令执行(受权限系统控制)
- Trae Search:代码搜索和语义索引
重点提示:上表中的
@anthropic/mcp-*前缀是社区命名惯例。MCP 生态是开放的,你也可以用任何语言(Node.js、Python、Go、Rust)自己写 MCP Server。
05 SOLO 模式下的 MCP:真正的自主
如果说 Chat 模式下 MCP 是”你让 AI 帮忙查一下数据库”,那 SOLO 模式下 MCP 就是 AI 自己规划任务并自主调用工具。
SOLO + MCP 的工作流
假设你告诉 SOLO:
“帮我分析数据库性能瓶颈,给意见。”
在 SOLO 模式下,AI 会自动:
- 规划:拆解任务 → “需要查询慢查询日志” → “检查表大小和索引” → “分析连接数”
- 调用:依次调用 MCP 工具
postgres.query("SHOW SLOW QUERIES")postgres.query("SELECT table_name, pg_size_pretty(...) FROM ...")postgres.query("SELECT count(*) FROM pg_stat_activity")
- 分析:根据返回数据给出结论
- 执行:如果权限允许,可能需要创建索引 → 自动调用
postgres.query("CREATE INDEX ...") - 验证:再次查询确认性能提升
- 汇报:汇总结果给你阅读
整个过程,SOLO 自主完成了 拆解 → 执行 → 分析 → 行动 → 验证 的闭环。
对比:Chat 模式 vs SOLO 模式调用 MCP
| 维度 | Chat 模式 + MCP | SOLO 模式 + MCP |
|---|---|---|
| 谁决定调用顺序 | 你来指导 | AI 自主规划 |
| 调用前确认 | 每次调工具都问你 | 可以批量授权 |
| 多次工具编排 | 你一步步给指令 | AI 自动串联 |
| 适合场景 | 单次查询、调试 | 复杂分析、自动运维 |
| 安全级别 | 高(全程确认) | 中(基于信任层级) |
心智模型:Chat + MCP 像你拿着遥控器指挥一个机器人——你说”左转”,它左转,你说”停”,它停。SOLO + MCP 像给了机器人一张地图和一个目的地——它自己规划路线,你只需要在关键路口说”行”或”不行”。
06 安全:MCP 的”守门”机制
MCP 的强大也带来了安全挑战——让 AI 直接操作数据库和 API 是一件需要谨慎对待的事情。Trae 设计了多层安全机制:
第一层:按 Server 授权
当你第一次启动一个 MCP Server 时,Trae 会询问:
MCP Server “postgres” 请求权限: ┌─────────────────────────────────────┐ │ ☑ 允许执行 SQL 查询 │ │ ☐ 允许修改数据(INSERT/UPDATE/DELETE)│ │ ☐ 允许修改表结构(CREATE/ALTER/DROP) │ │ │ │ [允许本次] [始终允许] [拒绝] │ └─────────────────────────────────────┘
你可以按操作粒度授权——只允许读取,不允许写入。
第二层:按模式区分权限
Trae 根据你当前所处的模式,默认有不同的安全策略:
| 模式 | 默认安全策略 | 行为 |
|---|---|---|
| Chat | 严格 | 每次调用工具都弹确认框 |
| Builder | 中等 | 允许自动调用只读工具,修改操作弹确认 |
| SOLO | 信任层级 | 在一个”信任任务”内,允许批量的工具调用 |
第三层:环境变量隔离
MCP 配置中的 env 字段是仅对 MCP Server 进程可见的。你的 .vscode/mcp.json 不要提交到 Git(或者用 .env 变量注入)。最佳实践:
{
"servers": {
"postgres": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@anthropic/mcp-postgres"],
"env": {
"DATABASE_URL": "${DATABASE_URL}"
}
}
}
}然后在 .env 文件中定义真实的数据库连接字符串,并把 .env 加入 .gitignore。
第四层:手动断开
任何时候,你都可以在 MCP 面板中点 Disconnect 断开某个 Server。断开后 AI 无法再调用这个 Server 的任何工具,直到你重新连接。
安全黄金法则
给 MCP Server 的最小必要权限。不要用 root / superuser 连接。如果 AI 只需要读数据,就不要给写入权限。如果只需要查业务库,就连接只读副本而不是主库。
一个安全的示例配置:
{
"servers": {
"postgres-readonly": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@anthropic/mcp-postgres"],
"env": {
"DATABASE_URL": "postgresql://readonly_user:password@read-replica:5432/myapp"
}
}
}
}注意:MCP Server 本身的访问控制(谁可以执行什么 SQL)是由你连接的用户决定的。Trae 的 MCP 客户端层面只做调用确认,不做 SQL 拦截——所以正确配置数据库用户权限仍然是你的责任。
07 实战:PostgreSQL schema 管理 + SOLO
让我们做一个完整的实战案例:连接 PostgreSQL,让 SOLO 分析现有 schema、诊断问题、生成迁移计划。
场景设定
你有一个电商应用数据库,包含 users、orders、products 三张表。你想让 SOLO 分析数据库设计,找出潜在的优化点,并生成迁移脚本。
步骤 1:配置 MCP Server
确保 .vscode/mcp.json 已经配置好 PostgreSQL MCP Server:
{
"servers": {
"pg": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@anthropic/mcp-postgres"],
"env": {
"DATABASE_URL": "postgresql://analyzer:password@localhost:5432/ecommerce"
}
}
}
}这里的 analyzer 用户只有 SELECT 权限——安全第一。
步骤 2:切换到 SOLO 模式
点击左上角模式切换器 → SOLO。在任务输入框中输入:
连接我们的电商数据库,分析所有表的 schema,找出索引缺失、外键漏配、或数据类型不合理的地方。生成一份优化报告。步骤 3:SOLO 自主分析
SOLO 会做什么?
- 调用
pg.schema获取所有表结构 - 调用
pg.query检查索引状态
它在内部看到的数据类似这样:
Table: orders
├─ id (UUID, PK)
├─ user_id (UUID, NO INDEX → 发现问题)
├─ total (DECIMAL(10,2))
└─ status (VARCHAR(20), NO INDEX → 发现问题)
Table: order_items
├─ id (UUID, PK)
├─ order_id (UUID, FK → 但 orders 表未定义外键约束)
├─ product_id (UUID, FK → 但 products 表未定义外键约束)
└─ quantity (INTEGER)- 生成报告:
┌─────────── ecommerce 数据库优化报告 ──────────────────┐
│ │
│ 🔴 发现问题 3 个: │
│ │
│ 1. orders.user_id 缺少索引 │
│ 影响:按用户查询订单时全表扫描 │
│ 建议:CREATE INDEX idx_orders_user_id ON ... │
│ │
│ 2. orders.status 缺少索引 │
│ 影响:按状态过滤订单时全表扫描 │
│ 建议:CREATE INDEX idx_orders_status ON ... │
│ │
│ 3. order_items 缺少外键约束 │
│ 影响:可能产生孤儿数据 │
│ 建议:ALTER TABLE order_items ADD FOREIGN KEY ... │
│ │
│ 🟢 设计合理的地方: │
│ - users 表有 created_at 索引 │
│ - 金额字段使用 DECIMAL 而非 FLOAT(正确) │
│ ───────────────────────────────────────────────────── │
│ 优化后预期: │
│ - 用户订单查询:从 ~300ms 降至 ~5ms │
│ - 状态过滤查询:从 ~200ms 降至 ~2ms │
│ └─────────────────────────────────────────────────────┘- 如果你确认,可以追加指令:
接受所有建议,生成迁移 SQL 脚本,写入到 migrations/optimize_001.sql 文件。SOLO 会生成包含 CREATE INDEX 和 ALTER TABLE 的迁移脚本。
步骤 4:审核并执行
SOLO 完成迁移脚本后,仔细检查每一行 SQL。确认无误后,你可以手动连接到数据库执行,或者如果权限允许,让 SOLO 调用 MCP 的 migrate 工具直接执行。
整个过程,你只说了两句话——SOLO 做了:连接数据库 → 分析 schema → 诊断问题 → 生成报告 → 编写迁移脚本。
08 MCP 生态与社区资源
MCP 的优势在于它的开放生态。除了官方工具,社区贡献了大量高质量的 MCP Server。
发现 MCP Server
- GitHub:搜索
mcp-server或modelcontextprotocol标签 - mcp.so :社区维护的 MCP Server 目录站
- github.com/modelcontextprotocol/servers :Anthropic 官方维护的 Server 列表
值得关注的社区项目
| 项目 | 功能 | 语言 |
|---|---|---|
anthropic/mcp-servers | 官方维护的参考实现合集 | Python/TS |
anthropic/mcp-filesystem | 安全文件系统操作 | Python |
anthropic/mcp-github | GitHub API 集成 | Python |
tursodatabase/mcp-server-turso | Turso/LibSQL 数据库 | TS |
supabase/mcp-server-supabase | Supabase 项目管理和数据操作 | TS |
n8n-io/n8n-mcp-server | n8n 工作流自动化 | TS |
block/goose | Block(Square)开源的 MCP 框架 | Go |
pocketbase/pocketbase-mcp | PocketBase 集成 | Go |
写一个自己的 MCP Server
MCP 协议非常简单。一个最小的 MCP Server 只需要几十行代码。这里展示一个 Node.js 版本的 Hello World:
import { Server } from "@modelcontextprotocol/sdk/server/index.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
const server = new Server(
{ name: "hello-world", version: "1.0.0" },
{ capabilities: { tools: {} } }
);
server.setRequestHandler("tools/list", async () => ({
tools: [{
name: "greet",
description: "向用户打招呼",
inputSchema: {
type: "object",
properties: {
name: { type: "string" }
}
}
}]
}));
server.setRequestHandler("tools/call", async (request) => {
if (request.params.name === "greet") {
const name = request.params.arguments?.name || "World";
return {
content: [{ type: "text", text: `Hello, ${name}!` }]
};
}
throw new Error("Unknown tool");
});
const transport = new StdioServerTransport();
await server.connect(transport);编译并运行后,在 .vscode/mcp.json 中配置即可被 Trae 发现和使用。
09 常见问题与调试
MCP Server 启动失败
检查 Trae 底部的 MCP 面板(状态栏右侧的 MCP 图标)。红色状态表示启动失败,点击可以看到错误日志。
常见原因:
command指向的可执行文件不存在(试试全路径)env中的连接字符串格式错误- 环境变量中包含特殊字符没有正确转义
工具调用被拒绝
如果你在 Chat 模式下,每次调用工具都会弹确认框,这是正常行为。如果你希望在某个会话中减少提示,可以勾选”记住此次授权”。
如果确认框一直没有出现但工具也没返回,检查 SOLO/Build 模式下的权限层级是否有足够的工具访问权限。
连接超时
MCP Server 启动后默认有 60 秒的超时。如果数据库连接慢,可以在 env 中增加特定 Server 的 timeout 配置(视具体 MCP Server 的实现而定)。
重新加载配置
修改 .vscode/mcp.json 后,执行 Cmd+Shift+P → Trae: Reload MCP Servers,不需要重启整个 IDE。
10 小结
| 关键问题 | 答案 |
|---|---|
| MCP 是什么 | AI 连接外部工具的标准协议,类似”USB 但给 AI 用” |
| 配置文件在哪 | 项目根目录 .vscode/mcp.json |
| 最主要的用途 | 连数据库、连 API、连文件系统 |
| Trae 的 MCP 独特之处 | 与 SOLO 模式深度集成,AI 可自主编排多个工具 |
| 安全怎么做 | 最小权限原则、环境变量隔离、按模式分层确认 |
| 一个能直接上手的方向 | 配置 PostgreSQL MCP Server → 让 SOLO 分析你的数据库 schema |
| 哪里找更多 MCP Server | GitHub、mcp.so、官方 Server 仓库 |
MCP 将 Trae 从”一个会写代码的编辑器”变成了”一个能操作你整个基础设施的 AI 工程师”。它的能力上限取决于你接入了多少 MCP Server——连接一个数据库,AI 多一只眼睛;连接一个部署平台,AI 多一双手。
但记住:连接越多,责任越大。始终遵循最小权限原则,只给 AI 完成任务所需的最低访问权限。技术越强大,审慎越重要。
下一篇: 14 远程开发配置 —— 通过 SSH 连接远程服务器,在远程环境中使用 Trae 的全部 AI 能力。