之前已经介绍过了 MCP 了,如果你有兴趣可以查看下之前的文章:

目前很多官方都开发出了自己的 MCP 服务,例如 Gitlab, 支付宝,高德地图,都提供了 MCP 服务,如果你具备开发能力,你也可以搭建自己的 MCP 服务,本文教你如何搭建自己的 MCP 服务。我们来看看 MCP 服务是如何工作的。

传输方式

MCP 服务有两种传输方式,一种是 STDIO,一种是 SSE 方式,STDIO 通过标准输入输出流进行数据交换,SSE 则基于 HTTP 协议的单向通信,服务器向客户端推送数据。

下面我们来实现一个简单的 STDIO 模式的 MCP 服务,功能是如果大模型识别到需要进行加法运算,就会使用我们提供的 MCP tool。

首先确保你已经安装了 Node.js 和 npm,我们使用官方提供的 mcp sdk 来实现一个简单的 MCP 服务。

首先使用 pnpm init 初始化项目,安装相应的依赖,并声明 typemodule,这样可以使用 ES Module 的语法:

pnpm add @modelcontextprotocol/sdk zod

接下来我们创建一个 index.mjs 文件,代码如下:

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: "Demo",
version: "1.0.0"
});
// Add an addition tool
server.tool("add",
'Add two numbers',
{ a: z.number(), b: z.number() },
async ({ a, b }) => ({
content: [{ type: "text", text: String(a + b) }]
})
);
async function main() {
// Start receiving messages on stdin and sending messages on stdout
const transport = new StdioServerTransport();
await server.connect(transport);
}
main()

其中 zod 是一个用于数据验证和解析的库,可以使用它来验证传入的参数是否符合预期。我们完成了一个简单的 MCP 服务,提供了一个加法工具 add,接收两个数字参数 ab,返回它们的和。

完成给你编写后如何进行 tool 测试呢?我们可以使用 @modelcontextprotocol/inspector 来进行测试,执行下面命令:

npx @modelcontextprotocol/inspector node index.mjs

运行完成后,可以访问 http://127.0.0.1:6274/ 来校验工具是否正常工作。点击页面的 connect 按钮,连接到 MCP 服务,

@modelcontextprotocol/inspector

依次点击 list toolsadd,输入 add 方法的参数,点击 run tool 按钮,查看返回结果。

@modelcontextprotocol/inspector add tool

这样MCP工具就可以正常工作了,接下来我们来看看如何在大模型中使用这个工具。

客户端配置

调试完 MCP 后,我们可以在客户端使用了,我们以 Cursor 为例,在配置文件里配置 MCP 服务:

cursor mcp

新增配置项如下:

{
"mcpServers": {
"add-mcp": {
"type": "stdio",
"command": "npx",
"args": ["-y", "D:\\kelen\\study\\add-mcp\\index.js"]
}
}
}

配置完成之后可以看到亮绿灯,则表示 MCP 服务正常连接。接下来跑下实际效果。

cursor add mcp

可以看到在问到加法问题上,大模型自动帮我们调用 add 方法,并把实际结果返回给我们。

总结

本文介绍了如何使用 MCP 协议搭建一个简单的本地服务,并在大模型中使用这个服务。MCP 协议的优势在于可以让大模型自动识别需要调用的工具,并将结果返回给用户,极大地提高了工作效率。我们也可以根据自己的需求,扩展更多的 MCP 工具,来满足不同的需求。