从零开始开发一个 MCP Server! - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
formulahendry
V2EX    Node.js

从零开始开发一个 MCP Server!

  •  
  •   formulahendry 195 天前 7546 次点击
    这是一个创建于 195 天前的主题,其中的信息可能已经有所发展或是发生改变。

    最近,在 AI 开发领域,MCP (Model Context Protocol) 是越来越火了!

    前几天,我我也开发了一款 Code Runner MCP Server:

    Code Runner MCP Server ,支持运行 39 种编程语言!

    今天,我就把我开发 MCP Server 的经验和遇到的一些坑,分享给大家!

    以 Node.js 为例,从零开始开发一个 MCP Server !

    安装 Node.js

    https://nodejs.org/en 安装 LTS 版的 Node.js 即可。

    安装 Scaffolding Tool

    在命令行运行下面命令,安装 Yeoman Generator for MCP Server

    npm install -g yo generator-mcp 

    创建 MCP Server 项目

    在命令行运行下面命令,创建 MCP Server 项目:

    yo mcp -n 'Weather MCP Server' 

    实现代码逻辑

    generator-mcp 已经把全部需要的代码框架和依赖都生成和安装了。

    你可以按需修改代码,或者利用已有的代码直接进行调试和测试。

    调试/测试

    generator-mcp 已经配置好了 VS Code 的调试配置文件:launch.json 和 tasks.json

    在 VS Code 中打开项目,按 F5 就能一键启动调试!

    稍等片刻,浏览器自动打开 MCP Inspector 后,就能进行测试了!

    运行

    此外,你还可以在其他支持 MCP 的客户端中,测试你的 MCP Server 。

    generator-mcp 已经默认创建了 .vscode\mcp.json 文件,这个文件定义了在 VS Code 运行的 MCP Server 。

    注:需从 https://code.visualstudio.com/insiders/ 下载最新版本的 VS Code Insiders 。

    安装好最新的 VS Code Insiders 版本,点击 “start” 按钮,就能在 VS Code Insiders 的 Agent Mode 调用你的 MCP Server 啦!

    发布

    测试完成后,就可以把你的 MCP Server 发布到 npm registry 或者 Docker Hub 了!

    关于 Dockerfile 怎么写,以及如何在 VS Code 、Claude Desktop 等客户端配置 MCP Server ,还有 npx 可能在 Windows 上运行失败的问题,都可以参考 Code Runner MCP Server 的 README 和源代码,完全开源:

    https://github.com/formulahendry/mcp-server-code-runner

    9 条回复    2025-04-09 18:48:25 +08:00
    z7356995
        1
    z7356995  
       195 天前
    谢谢,刚好想学这方面知识
    xyooyx
        2
    xyooyx  
       195 天前
    请教下过程中是如何解决“大模型有概率不调用 mcp 服务”的问题
    Tacks
        3
    Tacks  
       195 天前
    @lqw3030 参考 openai agents sdk 里面有一个参数应该可以满足 tool_choice: "required" 设置强制模型在聊天完成和助手 API 中调用您提供的函数之一(
    formulahendry
        4
    formulahendry  
    OP
       194 天前   1
    @lqw3030 我觉得目前可能没有终极方案,需要开发者、用户、MCP Host 三方协调吧:
    * MCP Server 的开发者:把 description 尽量写好,颗粒度分明
    * MCP Host/Client:提供 UI 入口,用户在输入 prompt 的时候,可以选择引用不同的 Tool 。比如 VS Code 的 Add Context 可以手动选 Tool
    * 用户:写 Prompt 的时候,可以加上 “use mcp-server-code-runner tool” 之类的话术
    OBJECTION
        5
    OBJECTION  
       193 天前
    这种咋部署到 docker ? 因为目前大多都是 stdio 的形式把 docker 的话 不就直接隔离了吗? 还是说通过本地的 socket? 比如 inspect 的界面那样?
    formulahendry
        6
    formulahendry  
    OP
       193 天前
    @OBJECTION 部署到 docker 的话,那 Code Runner 的 runtime 就是与 host machine 隔离的
    h1298841903
        7
    h1298841903  
       191 天前
    不太懂,和普通的 API json 格式的接口有什么区别吗?
    max1024
        8
    max1024  
       191 天前
    我都还不知道如何用 mcp 每次在 windsurf 都没有成功过
    humbass
        9
    humbass  
       185 天前
    不太懂,这个是用来跟 deepseek 对接的吗?
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2449 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 23ms UTC 01:36 PVG 09:36 LAX 18:36 JFK 21:36
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86