当前位置: 首页 > news >正文

从零封装MCP Server:让WorkBuddy 听懂你的工具

从零封装 MCP Server:让 WorkBuddy 听懂你的工具

什么是 MCP

MCP(Model Context Protocol)是 Anthropic 推出的开放协议,让 AI 助手(如 WorkBuddy)可以安全地调用外部工具和API。它就像一个标准化的"插件接口"——你写好服务端,AI 就能自动发现并调用你的工具。

核心概念只有三个:

  1. Server:你写的服务端程序,注册了多个工具
  2. Tool:一个具体的功能(比如「发帖到知乎」)
  3. Transport:通信方式(通常是 stdio——标准输入输出)

第一步:项目结构

一个最小化的 MCP Server 只需要三个文件:

my-mcp-server/ ├── package.json # 依赖声明 ├── tsconfig.json # TS 编译配置 └── src/ └── index.ts # MCP Server 入口

第二步:package.json

{"name":"my-mcp-server","version":"1.0.0","type":"module","scripts":{"build":"tsc","start":"node dist/index.js"},"dependencies":{"@modelcontextprotocol/sdk":"^1.0.4"},"devDependencies":{"typescript":"^5.7.2","@types/node":"^22.10.0"}}

第三步:编写 Server

import{Server}from'@modelcontextprotocol/sdk/server/index.js';import{StdioServerTransport}from'@modelcontextprotocol/sdk/server/stdio.js';import{CallToolRequestSchema,ListToolsRequestSchema}from'@modelcontextprotocol/sdk/types.js';// 1. 创建 Serverconstserver=newServer({name:'my-mcp',version:'1.0.0'},{capabilities:{tools:{}}});// 2. 注册工具列表server.setRequestHandler(ListToolsRequestSchema,async()=>({tools:[{name:'hello_world',description:'打个招呼',inputSchema:{type:'object',properties:{name:{type:'string',description:'你的名字'}},required:['name']}}]}));// 3. 处理工具调用server.setRequestHandler(CallToolRequestSchema,async(req)=>{const{name,arguments:args}=req.params;if(name==='hello_world'){return{content:[{type:'text',text:`你好,${args.name}`}]};}return{content:[{type:'text',text:'未知工具'}],isError:true};});// 4. 启动consttransport=newStdioServerTransport();awaitserver.connect(transport);console.error('MCP Server started');

第四步:注册到 WorkBuddy

编译后在~/.workbuddy/mcp.json中添加:

{"mcpServers":{"my-mcp":{"command":"node","args":["/path/to/my-mcp-server/dist/index.js"],"cwd":"/path/to/my-mcp-server","disabled":false}}}

重启 WorkBuddy,去连接器面板点「信任」,你的工具就生效了。

进阶:接入 Playwright 浏览器

实际项目中,你通常需要在 MCP Server 里集成浏览器自动化。以下是一个带 Playwright 的完整示例:

import{chromium}from'playwright';// 在工具处理中启动浏览器server.setRequestHandler(CallToolRequestSchema,async(req)=>{const{name,arguments:args}=req.params;if(name==='screenshot'){constbrowser=awaitchromium.launch({headless:true});constpage=awaitbrowser.newPage();awaitpage.goto(args.url);constpath=`screenshot-${Date.now()}.png`;awaitpage.screenshot({path});awaitbrowser.close();return{content:[{type:'text',text:`截图已保存:${path}`}]};}return{content:[{type:'text',text:'未知工具'}],isError:true};});

关键踩坑

  1. ESM 模式:MCP SDK 只支持 ESM,package.json 必须声明"type": "module"
  2. stdio 通信:不要用 console.log 输出普通内容,用 console.error 输出日志(stdout 被 MCP 协议占用)
  3. 路径问题:mcp.json 里的 command 和 args 要用绝对路径,~/不会被展开
  4. 端口冲突:stdio 模式下不存在端口冲突问题

最佳实践

维度建议
错误处理每个工具调用都要 try/catch,返回友好的错误信息
超时控制网络请求设置 30s 超时,避免 WorkBuddy 卡死
日志用 console.error 输出操作日志,方便排查
版本管理SemVer 严格管理,工具定义变更时更新 schema
测试用 `echo ‘{“method”:“tools/list”}’

总结

从零到一封装一个 MCP Server 只需要 4 步:

  1. 创建项目 → 安装 SDK
  2. 写 index.ts → 注册工具 + 处理调用
  3. 配置 mcp.json → 让 WorkBuddy 识别
  4. 去连接器面板点「信任」

完整代码约 50 行,半小时能跑通。真正花时间的是工具本身的业务逻辑

http://www.cnnetsun.cn/news/3499304.html

相关文章:

  • 行业选型新标尺:源码交付、禁止转包、MCP‑A2A原生适配成核心,西安服务商实力排行出炉
  • 终极Xbox 360模拟器教程:在PC上重温经典游戏
  • 《系统分析师教程(第2版)》笔记——第 18 章 移动应用系统分析与设计
  • 用 Skill 精读 OCRBench v2 是什么体验?
  • 大家好,我是UWA GPM「小Q」,今天是我加入项目的第一天
  • 告别 Agent 大循环:后端工程师从脚本原型到可维护架构的进阶指南
  • 西门子S7-1200PLC通过CB1241插件板RS485通讯控制变频器
  • codex 逆向 带壳 apk
  • 2026年优质3D超写实数字人服务商深度横评
  • Luckfox Pico Ultra W实现摄像头识别功能
  • 企业微信数据保障计划深度解析:12项可恢复范围与实战要点
  • Python从入门到精通(六):高级并发、底层原理与系统级架构设计
  • FastAPI + Pydantic 模型终极实战手册:从能跑就行到固若金汤,这些技巧你一定用得上
  • 基于 XDP 极速抓取 SIP 音频流,赋能 AI 实时翻译与对话
  • 解决echarts饼图---legend显示/隐藏饼图不重新计算的问题
  • 如何让闲置屏幕变身优雅翻页时钟:FlipIt屏保完全指南
  • GPT-5.6 Sol上线数天即曝删库行为 OpenAI定性为“诚实错误”
  • 计算机毕业设计之网上书店管理系统
  • API集成能力在2026年项目管理中究竟有多重要?
  • 把极空间变成私有云后台:1Panel、AList和远程访问一次跑通
  • 【Bug已解决】False positive cybersecurity flag. 解决方案
  • AI Agent 入门(一):OpenClaw 与 Hermes(openclaw输出篇)
  • react native项目配置eslint+prettier
  • 储能电池就这么选性价比高I好用的电池回收信息对接平台
  • 【Coding生态】从代码托管到 AI 能力底座:与Coding一起共建 AI 研发生态
  • 嘉准专利柔性红尾套线缆:上万次往复折弯不断线,告别每周停机换线
  • 一种欠定盲源分离方法及其在模态识别中的应用附Matlab代码
  • 2026年科研检测行业 难溶样品卡尔费休辅助溶剂选择解析
  • 题解:洛谷 B4359 [GESP202506 三级] 分糖果
  • HarmonyOS ArkUI Marquee 跑马灯与 Gauge 仪表盘:公告滚动与数据展示