ARTICLE DETAIL

建站实战干货

来自一线的建站与推广经验沉淀,每一条都经过真实交付验证。

mcp服务小进阶

2026/8/17 18:52:51 拓冰建站 浏览量
mcp服务小进阶 学习mcp服务也有好一段时间了。当然中间也因为工作的因断了一些日子。这几天继续。通过这几天的巩固和各网友的博客视频的讲。对mcp 又有了新的认识。mcp到底是啥用一句简洁的话来说把一些复杂的需要人力繁琐的工作让AI去处理。那让AI处理总得需要让AI知道他要做啥那这个啥就是mcp服务。可能大家看到这个会觉得晕打个比方。在平时我们经常需要对某个商品或者某个内容进行统计。那么这个时候免不了的就是查数据然后分析数据。那么这个时候mcp就出来了。你只要给mcp加上数据库的查询工具。那ai就可以帮你实现。或者我们每次写完代码之后都要不断的 git add . …… 这些操作。那么此时我们也可以自己写个mcp让ai 来拉取提交代码。mcp服务样例import { McpServer } from modelcontextprotocol/sdk/server/mcp.js; import { StdioServerTransport } from modelcontextprotocol/sdk/server/stdio.js; import z from zod; //定义服务器名字和版本号 const server new McpServer({ name:我的测试服务, version:1.0.0, }); //下面两个工具是测试用的实际使用中可以根据需要添加更多的工具 //工具都是通过 server.tool(toolName, description, schema, handler) 来注册的 //toolName 工具名 //description 工具描述 //schema 工具参数的验证规则使用 zod 来定义 //handler 工具的处理函数接收参数并返回结果 //这儿需要注意schema 和 handler 的参数类型需要一致否则会报错 //也就是说schema 对象中有几个属性handler 的参数对象中也必须有相同的属性并且类型一致否则会报错 //第一个工具 let toolName myTool; let description 这是一个测试工具; let schema { city:z.string() } //这儿我是模拟了一个天气查询的工具实际使用中可以根据需要修改 //实际中是调用第三方天气接口来获取天气数据这儿为了方便演示我直接写了一个简单的对象来模拟天气数据 let handler async ({city}:{city:string}):Promise{ content:[{type:text, text:string}] }{ const watcherMap:Recordstring,{temp:number , condtion:string} { 北京:{temp:10, condtion:晴天}, 上海:{temp:20, condtion:多云}, }; const key city.trim(); //实际中如果调用第三方天气接口是在这儿发起请求获取天气数据 //注意使用 await fetch() 这样子来获取天气数据返回的数据是一个 JSON 对象需要根据实际情况来解析 const data watcherMap[key] ?? {temp:0 , condtion:未知}; return { content:[{type:text, text:${city}的天气是${data.temp}°C${data.condtion}}] } } server.tool(toolName, description, schema, handler) //第二个工具 let toolName2 add; let description2 这是一个加法工具; let schema2 { a:z.number(), b:z.number() }; let handler2 async ({a,b}:{a:number, b:number}):Promise{ content:[{type:text, text:string}] }{ return { content:[{type:text, text:${a} ${b} ${ab}}] } } server.tool(toolName2, description2, schema2, handler2) //最后这两行是通用的代码。 const transport new StdioServerTransport(); await server.connect(transport)这儿我写了一个简单的然在实际工作中也没多少人会像上面的这样写。因为实际中这样写麻烦而且繁琐。在今天2026年8月已经有很多现成的开源的包。其中大家用的的比较多的要数是 fastMcp 包了。fastMcp包有 nodejs 的也有py的。下面我就以 nodejs为例来继续写一个小 demo。之后随着自己的学习后面我也会记录一些 py 的 mcp。小前提包的安装在这儿我就不多说了会找到这博文的都对node会有一点小基础。npm install XXXimport { FastMCP } from fastmcp; import z from zod; const server new FastMCP({ name:fastServer, version:1.0.0, }); //一个工具就是一个server.addTool //里面的json 也是跟之前一样的原理。只是被封装了一层 //键名是固定的。 //这儿有个小区别 execute 函数里的参数是一个json对象。解析出来就是 parameters 里面的键 server.addTool({ name:tianQi, description:天气查询能够实时查询天气信息, parameters:z.object({ city: z.string().describe(查询天气的城市名称) }), execute: async (params) { //debugger; const { city } params; const mockData: Recordstring, { temp: string; weather: string; humidity: string; wind: string } { 北京: { temp: 25, weather: 晴, humidity: 45%, wind: 3级 }, 上海: { temp: 28, weather: 多云, humidity: 60%, wind: 2级 }, 广州: { temp: 32, weather: 雷阵雨, humidity: 80%, wind: 4级 }, 深圳: { temp: 30, weather: 阴, humidity: 70%, wind: 3级 }, }; const data mockData[city] || { temp: 未知, weather: 未知, humidity: 未知, wind: 未知 }; return { content:[ { type:text, text:城市: ${city}\n温度: ${data.temp}°C\n天气: ${data.weather}\n湿度: ${data.humidity}\n风力: ${data.wind} } ] } } }); server.start({ transportType:stdio });#调试mcp服务 npx modelcontextprotocol/inspectormcp服务。也是做为初入门的我写的一个小 demo 吧。