
为什么需要MCP协议
在MCP出现之前,每个AI应用想连接外部工具都得自己实现一套方案。浏览器自动化要写Playwright脚本、数据库查询要写专门的连接器、API调用要重复造轮子。这种碎片化的生态让开发者疲于适配,而MCP(Model Context Protocol)试图解决这个问题——它定义了一套标准化的通信规范,让AI模型能够以统一的方式“看到”和“使用”外部工具。
MCP的核心架构由三部分组成:Host(AI应用)、Client(MCP客户端)和Server(MCP服务器)。Host是用户直接交互的AI产品,比如OpenClaw;Client负责与Server建立连接;Server则是连接外部资源的桥梁,比如文件系统、数据库、API服务等。这种分层设计让扩展变得简单——只需开发新的Server,无需改动AI应用本身。
MCP支持两种传输协议:stdio(标准输入输出)和SSE(Server-Sent Events)。stdio模式适合本地运行的Server,启动快、资源占用低;SSE模式则支持网络通信,适合需要远程部署或微服务架构的场景。OpenClaw对两种模式都有良好支持。
OpenClaw MCP集成:5分钟接入外部工具
OpenClaw的MCP集成入口在设置页面的“工具”选项卡。这里可以管理所有已配置的MCP Server,包括添加、编辑、删除和启用/禁用操作。配置完成后,AI助手就能自动识别可用的工具并在对话中调用。
添加官方MCP Server
OpenClaw提供了一批预配置的官方Server,涵盖文件系统、Git操作、网页搜索等常见场景。以添加文件系统Server为例,只需三步:
# 在OpenClaw设置中添加MCP Server配置
{
"mcpServers": {
"filesystem": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/workspace"],
"env": {}
}
}
}
其中command指定运行命令,args是传递给命令的参数,filesystem Server需要指定一个工作目录作为其操作范围。上例中AI被限制在/path/to/workspace内,无法访问目录外的文件,这是出于安全考虑的设计。
配置GitHub集成Server
另一个实用的官方Server是GitHub集成,它能让AI直接操作代码仓库、创建Issue、提交PR。配置时需要先生成Personal Access Token:
# GitHub Server配置示例
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "@modelcontextprotocol/server-github"],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_xxxxxxxxxxxx"
}
}
}
}
配置完成后,AI就能理解“查看这个仓库最近5个Issue”这样的自然语言请求,并直接调用GitHub API获取数据。这比让用户自己去网页端翻找要高效得多。
自建MCP Server:连接任意外部资源
当官方Server无法满足需求时,可以自己开发一个。MCP Server本质上是一个遵循规范的HTTP服务(或stdio进程),接收来自Client的请求、返回结果。下面用一个实际案例演示:构建一个连接内部系统API的Server。
项目初始化
使用TypeScript和官方SDK来创建Server,开发效率最高:
# 创建项目目录并初始化 mkdir my-mcp-server && cd my-mcp-server npm init -y # 安装MCP SDK和类型定义 npm install @modelcontextprotocol/sdk zod npm install -D typescript @types/node # 初始化TypeScript配置 npx tsc --init
实现Server核心逻辑
创建一个src/index.ts文件,定义我们要暴露的工具。MCP的核心概念是Tool(工具),每个Tool有名称、描述和输入Schema:
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
// 创建Server实例
const server = new McpServer({
name: "internal-api-server",
version: "1.0.0"
});
// 定义一个查询内部数据的工具
server.tool(
"query-orders",
"查询用户订单列表",
{
userId: z.string().describe("用户ID"),
status: z.enum(["pending", "paid", "shipped", "completed"]).optional(),
limit: z.number().min(1).max(100).default(20)
},
async ({ userId, status, limit }) => {
// 这里调用内部API
const response = await fetch(
`https://internal-api.example.com/orders?userId=${userId}&status=${status || ""}&limit=${limit}`
);
const data = await response.json();
return {
content: [{
type: "text",
text: JSON.stringify(data, null, 2)
}]
};
}
);
// 定义另一个工具:创建订单
server.tool(
"create-order",
"创建新订单",
{
userId: z.string(),
items: z.array(z.object({
productId: z.string(),
quantity: z.number().min(1)
})),
shippingAddress: z.string()
},
async ({ userId, items, shippingAddress }) => {
const response = await fetch("https://internal-api.example.com/orders", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ userId, items, shippingAddress })
});
const result = await response.json();
return {
content: [{
type: "text",
text: `订单创建成功,订单号:${result.orderId}`
}]
};
}
);
// 启动Server
const transport = new StdioServerTransport();
server.run(transport);
编译并注册到OpenClaw
修改package.json添加启动脚本:
{
"scripts": {
"build": "tsc",
"start": "node dist/index.js"
}
}
然后编译并注册到OpenClaw:
# 编译TypeScript
npm run build
# 在OpenClaw中添加配置
{
"mcpServers": {
"internal-api": {
"command": "node",
"args": ["/path/to/my-mcp-server/dist/index.js"]
}
}
}
现在可以在OpenClaw中直接用自然语言操作内部系统了——“帮我查一下user_123最近有哪些待发货的订单”,AI会自动调用query-orders工具并返回结果。
MCP生态现状与实践建议
截至目前,GitHub上已有数百个社区贡献的MCP Server,涵盖数据库(PostgreSQL、MySQL、MongoDB)、云服务(AWS、Cloudflare)、通讯工具(Slack、Discord)等多个领域。这些Server遵循统一的规范,理论上可以接入任何支持MCP的AI应用。
对于想尝试MCP的开发者,我有几点实践建议。首先,安全优先——MCP Server拥有访问本地资源的能力,配置时要仔细设置权限范围,像filesystem Server限制在特定目录内就是很好的实践。其次,按需引入——不要一股脑添加十几个Server,OpenClaw会维护与所有Server的长连接,过多Server会影响性能。最后,优先使用官方或社区活跃的Server,自建Server虽然灵活,但维护成本不低。
MCP正在成为AI应用连接外部世界的事实标准。随着越来越多的工具支持这一协议,AI助手的能力边界将被大幅扩展。掌握MCP的开发和使用,意味着能在AI时代占据主动。
整理自 OpenClaw 官方文档 | 2026年06月28日