深入理解MCP模型协议:构建全能AI服务端
深入理解MCP模型协议:构建全能AI服务端
1 为什么MCP改变了AI集成游戏规则?
当ChatGPT推出基于OpenAPI的自定义GPT时,LLM工具集成迈出了重要一步。但Claude的模型上下文协议(MCP) 彻底改变了游戏规则。与传统仅定义API端点的OpenAPI不同,MCP为LLM交互提供了更丰富的框架,包含三大核心能力:
特性 | OpenAPI | MCP |
---|---|---|
数据交互 | 仅API调用 | 资源+工具+提示 |
平台依赖性 | 高 | 低 |
功能覆盖 | 单一 | 全面 |
MCP三大革命性优势:
- 标准化交互协议:统一LLM与外部系统的通信语言
- 能力解耦设计:不绑定特定模型或平台
- 三位一体架构:同时支持数据获取、动作执行和内容生成
2 认识模型上下文协议(MCP)
2.1 什么是MCP?
MCP是让Claude等LLM以安全结构化方式连接外部世界的协议,核心解决三大问题:
2.2 MCP三大核心能力
能力类型 | 功能描述 | 应用场景 | 交互方向 |
---|---|---|---|
资源(Resources) | 提供可读取的静态/动态内容 | 文档/数据库/文件 | LLM ← 外部系统 |
工具(Tools) | 执行特定操作的函数 | 计算/API调用/系统命令 | LLM → 外部系统 |
提示(Prompts) | 参数化内容生成模板 | 邮件模板/代码生成 | LLM ↔ 用户 |
3 实战:构建全能MCP服务端
3.1 环境准备
# 创建项目目录
mkdir hello-mcp && cd hello-mcp# 初始化Node项目
npm init -y# 安装核心依赖
npm install @modelcontextprotocol/sdk zod express# 安装开发依赖
npm install -D typescript @types/node @types/express
关键配置文件:
// tsconfig.json
{"compilerOptions": {"target": "ES2022","module": "Node16","outDir": "./build","rootDir": "./src","strict": true}
}
3.2 基础服务框架
// src/index.ts
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio";
import { z } from "zod";const server = new McpServer({name: "hello-mcp",version: "1.0.0"
});// 核心能力实现区域 ↓// 启动服务
const transport = new StdioServerTransport();
await server.connect(transport);
console.info('Server running...');
3.3 实现三大核心能力
3.3.1 资源能力 - 提供数据
// 定义Hello World资源
server.resource("hello-world", // 资源ID"hello://world", // 资源URIasync (uri) => ({contents: [{uri: uri.href,text: "你好世界!这是我的第一个MCP资源" }]})
);
URI设计规范:
<scheme>://<path>
格式(如weather://london
)
3.3.2 工具能力 - 执行动作
// 创建计算器工具
server.tool("calculator",{operation: z.enum(["add", "subtract", "multiply", "divide"]),a: z.number(),b: z.number()},async ({ operation, a, b }) => {let result: number;switch(operation) {case "add": result = a + b; break;case "subtract": result = a - b; break;case "multiply": result = a * b; break;case "divide": if(b === 0) throw new Error("除零错误");result = a / b;break;}return {content: [{type: "text",text: `${a} ${operation} ${b} = ${result}`}]};}
);
3.3.3 提示能力 - 结构化生成
// 定义问候语提示模板
server.prompt("greeting",{name: z.string(),time_of_day: z.enum(["morning","afternoon","evening"])},({ name, time_of_day }) => ({messages: [{role: "user",content: {type: "text",text: `你好${name}!${time_of_day}好,今天过得怎么样?`}}]})
);
4 测试与部署
4.1 使用MCP检测器测试
npx @modelcontextprotocol/inspector node build/index.js
测试指南:
-
资源测试:
- 进入Resources标签页
- 点击"List Resources"查看资源
- 点击资源URI查看内容
-
工具测试:
- 进入Tools标签页
- 选择计算器工具
- 输入参数:{ “operation”: “add”, “a”: 5, “b”: 3 }
- 查看执行结果
-
提示测试:
- 进入Prompts标签页
- 选择问候模板
- 输入:{ “name”: “开发者”, “time_of_day”: “afternoon” }
- 查看生成内容
4.2 生产级部署(SSE传输)
// 添加SSE支持
import express from "express";
import { SSEServerTransport } from "@modelcontextprotocol/sdk/server/sse";const app = express();
app.get("/sse", async (req, res) => {const transport = new SSEServerTransport("/messages", res);await server.connect(transport);
});app.post("/messages", express.json(), (req, res) => {// 此处添加会话路由逻辑res.json({ success: true });
});app.listen(3000, () => {console.log("MCP服务运行在:http://localhost:3000/sse");
});
双传输模式对比:
传输方式 | 适用场景 | 启动命令 | 测试命令 |
---|---|---|---|
stdio | 本地开发/桌面应用 | node build/index.js | npx inspector node build/index.js |
SSE | 网络服务 | node build/index.js --sse | npx inspector http://localhost:3000/sse |
5 生产环境进阶建议
- 会话路由机制:
// 会话映射表
const sessionTransports = new Map<string, SSEServerTransport>();app.post("/messages/:sessionId", (req, res) => {const transport = sessionTransports.get(req.params.sessionId);if (transport) {transport.handleMessage(req.body);res.status(200).end();} else {res.status(404).send("Session not found");}
});
- 能力组合实战案例:
6 总结与展望
通过本教程,您已掌握:
✅ MCP三大核心能力实现
✅ 双传输模式部署方案
✅ 生产级优化策略
MCP核心价值矩阵:
随着Anthropic、Cursor等平台全面接入MCP,该协议正成为LLM生态的连接器标准。未来可探索:
- 跨模型MCP网关
- 自动能力发现机制
- 协议安全加固方案