MCP 入门笔记 - 一个加法的例子
在学习 MCP 之前,先了解一些基础知识,这里用一个实现加法的例子来对比不同的实现方式
- 开发工具:VSCode v1.103.2
- 开发环境:Node.js v18.20.0
一个加法函数
function add({ a, b }) {
return a + b;
}
console.log(add({ a: 2, b: 3 }));很轻松就知道上面的代码会输出 5,下面来了解下如何使用 MCP 相关知识来实现同样的功能
前置知识
MCP 基本协议 相关知识
通信方式:stdio
stdio:standard input and output 标准输入输出,比如 node.js 代码:
输出
process.stdout.write('hello world !!\n');使用 node test.js 运行上面的代码,会在终端输出 hello world !!
输入/输出
process.stdin.setEncoding('utf-8');
process.stdin.on('data', (chunk) => {
process.stdout.write(`hello ${chunk}`);
});使用 node test.js 运行上面的代码,在终端输入xxx,会输出 hello xxx,关于 stdio 父子(client/server)进程参考下图

通信格式:JSON-RPC
基于 JSON 格式的 RPC(远程过程调用)协议。下面使用这种方式来实现上面的加法功能
process.stdin.setEncoding('utf-8');
const funcs = {
add({ a, b }) {
return a + b;
},
};
process.stdin.on('data', (chunk) => {
const req = JSON.parse(chunk);
const func = req.method;
const params = req.params;
const result = funcs[func](params);
const res = {
jsonrpc: '2.0',
result,
id: req.id,
};
process.stdout.write(JSON.stringify(res));
});request 请求
{"jsonrpc":"2.0","method":"add","params":{"a":1,"b":2},"id":3}response 响应
{"jsonrpc":"2.0","result":3,"id":3}
进入 MCP
MCP 是一套标准协议,它规定了应用程序之间如何通信:
- 通信方式:stdio(推荐,高效、简洁、本地);http(可远程)
- 通信格式:基于 JSON-RPC 的进一步规范
基本规范:
- 初始化(initialize)、发送请求(request)、接收响应(response) 详细说明
- 工具发现(tools/list):服务器有哪些工具可以给客户端使用 详细说明
- 工具调用(tools/call):客户端调用服务器的工具 详细说明
SDK 和调试工具
- MCP SDK:使用
@modelcontextprotocol/sdk可以更方便地开发MCP Server
npm i @modelcontextprotocol/sdk下面使用 SDK 的方式实现上面的加法功能,这也是 SDK 文档上的一个例子。我们将使用调试工具来测试,在 src/demo/mcp-server.js 中添加以下代码
import {
McpServer,
ResourceTemplate,
} from '@modelcontextprotocol/sdk/server/mcp.js';
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
import { z } from 'zod';
// Create an MCP server
const server = new McpServer({
name: 'mcp-server',
version: '1.0.0',
});
// Add an addition tool
server.registerTool(
'add',
{
title: '加法',
description: '两个数相加',
inputSchema: { a: z.number(), b: z.number() },
},
async ({ a, b }) => ({
content: [{ type: 'text', text: String(a + b) }],
}),
);
// Add a dynamic greeting resource
server.registerResource(
'greeting',
new ResourceTemplate('greeting://{name}', { list: undefined }),
{
title: '请求资源', // Display name for UI
description: '动态请求生成器',
},
async (uri, { name }) => ({
contents: [
{
uri: uri.href,
text: `Hello, ${name}!`,
},
],
}),
);
// Start receiving messages on stdin and sending messages on stdout
const transport = new StdioServerTransport();
await server.connect(transport);- MCP Server 的调试工具:直接运行下面的命令,会自动打开浏览器进行调试
npx @modelcontextprotocol/inspector
AI 应用程序
所有能与大模型交互的应用都可以看作是 AI 应用程序,例如:
- ChatGPT 是 AI 应用,而大模型是 GPT
- DeepSeek 也是类似的例子,DeepSeek 网页是 AI 应用,而大模型是 DeepSeek-V3.1、DeepSeek-R1 等
这里需要一个支持 MCP 协议的 AI 应用程序,例如我们可以在 VSCode 中添加本地 MCP Server,只需在 .vscode/mcp.json 中进行如下配置
{
"servers": {
"mcp-server": {
"type": "stdio",
"command": "node",
"args": [
"src/demo/mcp-server.js"
]
}
},
"inputs": []
}- 用户输入内容,例如
2+3 - AI 应用接受用户输入,然后通过大模型判断用户意图,然后调用 MCP Server 的工具,例如上面的加法工具
- MCP Server 返回结果给 AI 应用,AI 应用将结果展示给用户

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

现在可以在 VSCode 中调用 MCP Server 的工具了,例如调用我们刚刚创建的 add 工具
注意:需要使用 GitHub Copilot 来进行工具调用

最后总结
MCP,全称 Model Context Protocol(模型上下文协议),旨在为 AI 与外部程序之间建立通信标准,从而使得外部程序可以被部署到任意 AI 应用中,同时也使得 AI 应用可以使用任意符合协议的外部程序。这种标准化的协议极大地提高了 AI 应用的扩展性和互操作性。