MCP协议解析:让AI助手连接一切

科技3小时前发布 muybien
0 0 0

MCP协议解析:让AI助手连接一切

为什么需要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日

© 版权声明

相关文章

暂无评论

none
暂无评论...