官方SDK
非业务代码,一般就会封装出来。
使用@modelcontextprotocol/sdk可以更方便的开发MCP Server
npm install @modelcontextprotocol/sdk
server.js
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
import { z } from "zod";
import fs from "fs";
const server = new McpServer({
name: "my mcp server",
version: "0.1.0",
});
// 注册一个工具
server.registerTool(
"sum", // 工具名称
{
title: "两数求和",
description: "得到两个数的和",
inputSchema: {
a: z.number().describe("第一个数"),
b: z.number().describe("第二个数"),
},
},
({ a, b }) => {
// 正常的工具(函数)的逻辑
return {
content: [
{
type: "text",
text: `两个数的和为${a + b}`,
},
],
};
}
);
server.registerTool(
"createFile",
{
title: "创建文件",
description: "在指定目录下创建一个文件",
inputSchema: {
filename: z.string().describe("文件名"),
content: z.string().describe("文件内容"),
},
},
({ filename, content }) => {
try {
fs.writeFileSync(filename, content);
return {
content: [
{
type: "text",
text: `文件创建成功!`,
},
],
};
} catch (err) {
return {
content: [
{
type: "text",
text: err.message || "文件创建失败!",
},
],
};
}
}
);
const transport = new StdioServerTransport(); // 创建一个 stdio 的传输通道
server.connect(transport); // 进行连接
对接AI应用程序
常见的AI应用程序:
- ChatGPT
- DeepSeek Chat Page
- Claude Desktop
- VSCode
- Cursor
- …
凡是支持 MCP 协议的 AI 应用,就可以充当客户端,连接 MCP 服务器。
- Claude Desktop 支持MCP协议,可充当MCP客户端 https://claude.ai/download
- Cursor 支持MCP协议,可充当MCP客户端 https://cursor.com/cn

此时可以通过 MCP 服务器扩宽大模型的能力边界。
工具是谁调用,大模型调用么?
不是大模型调用,大模型只接收 输入 和 输出。
所以大模型会回复:我需要调用 XXX 工具。


两个核心概念:
MCP Host: 往往指代AI应用本身,用于发现MCP Server以及其中的工具列表MCP Client: 用于和MCP Server通信的客户端,往往在Host内部开启,通常情况下,每启动一个MCP Server,就会开启一个MCP Client

例如:
- 在Claude Desk 中打开一个新的聊天窗口
- Claude查看当前启用了哪些MCP Server
- Claude(host)为每个MCP Server创建一个Client
- 每个Client分别启动各自的MCP Server,并且进行了2次通信,一次是初始化,另外一次是tools/list。
- 当时机到达时(要调用工具的时候),每个Client负责调用各自的工具并把结果传递给Host
- Host根据结果处理后续逻辑




