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

MCP Inspector 调试——开发必备调试工具实战

今天来聊一个开发 MCP Server 必须知道的工具。

大家在写完工具代码打包 jar 之后,第一步不是直接接进 Cursor 测,因为 Cursor 出了问题你不知道是 Server 的问题还是 Cursor 本身的问题。我的习惯是先用MCP Inspector单独验证 Server——工具有没有注册上、参数传进去对不对、返回值格式对不对,全在 Inspector 里先跑一遍,没问题了再接进去。

一、安装和启动

不需要全局安装,一行 npx 搞定:

npx @modelcontextprotocol/inspector

第一次运行会下载包,稍等几秒。终端会打印:

Starting MCP inspector...
⚙️ Proxy server listening on 127.0.0.1:6277
🔑 Session token: a747cccf3036a7c038ed42f0393363c44413785f971bbfe15eaab20c298eb937
Use this token to authenticate requests or set DANGEROUSLY_OMIT_AUTH=true to disable auth

🔗 Open inspector with token pre-filled:
http://localhost:6274/?MCP_PROXY_AUTH_TOKEN=a747cccf3036a7c038ed42f0393363c44413785f971bbfe15eaab20c298eb937

🔍 MCP Inspector is up and running at http://127.0.0.1:6274 🚀

直接点终端里那个带 token 的链接打开浏览器,token 会自动填好。

如果手动访问http://localhost:6274出现Connection Error - Did you add the proxy session token in Configuration?,点左上角Configuration,把终端里的 Session token 粘贴进去,再重新连接即可。

二、调试 stdio MCP Server

2.1连接 Server

Inspector 界面左侧面板:

  1. Transport TypeSTDIO

  2. Commandjava

  3. Arguments-jar /path/to/mcp-tools-server.jar(换成你自己的路径)

  4. Connect

Inspector 会帮你把 Server 进程拉起来,完成 MCP 握手,然后右侧出现已连接的提示。

2.2查看工具列表

Tools标签,能看到 Server 暴露的所有工具。

2.3手动触发工具调用

querySales右侧的Run按钮,填入参数:

{ "startDate": "2024-01-08", "endDate": "2024-01-14" }

立刻看到返回:

{ "content": [ { "type": "text", "text": "2024-01-08 至 2024-01-14 销售数据:\n总销售额:¥128,450.00\n订单量:543 单..." } ], "isError": false }

右侧History面板同时显示完整的 JSON-RPC 通信记录,这里能看到协议层的原始消息,出了问题直接查这里。

三、调试 SSE MCP Server

比 stdio 还简单,填个 URL 就行:

  1. Transport TypeSSE

  2. URLhttp://localhost:8090/sse

  3. 如果加了认证,在Headers里填X-API-Key: your-key

  4. Connect

后续操作和 stdio 完全一样。

四、常见问题排查

4.1连接失败、没有任何响应

十有八九是 Server 把 Spring Boot 日志打到 stdout 了。Inspector 去解析 JSON,结果第一行是2026-03-26 INFO ...,直接懵了。

排查方法:

# 直接跑一下 Server,看 stdout 有没有输出 java -jar mcp-server.jar # 如果看到了 Banner 或者日志,说明没配好 # 检查 logback-spring.xml 是否把 ConsoleAppender 的 target 改成了 System.err

4.2工具列表为空

# 检查启动日志(在 mcp-server.log 里) grep "ToolCallbackProvider" mcp-server.log # 或者加个临时 Bean 打一下 @Bean public ApplicationRunner debugTools(ToolCallbackProvider provider) { return args -> { System.err.println("注册的工具数量:" + provider.getToolCallbacks().length); }; }

4.3工具调用返回 isError: true

Inspector 里看到这个格式说明工具执行时抛了异常:

{ "content": [{ "type": "text", "text": "Error: 数据库连接失败..." }], "isError": true }

去工具方法里看业务逻辑,isError: true不是协议层的问题,是工具自己报错了。

4.4description 不对

在 Inspector 的工具详情里查inputSchema,确认参数描述、类型、required字段是否和代码里写的一致:

{ "name": "querySales", "description": "查询指定日期范围内的销售汇总数据...", "inputSchema": { "type": "object", "properties": { "startDate": { "type": "string", "description": "开始日期,格式 yyyy-MM-dd" } }, "required": ["startDate", "endDate"] } }

五、调试 Resources 和 Prompts

Tools 是最常用的,但 MCP Server 还可以暴露 Resources 和 Prompts,Inspector 对这两个也支持调试,顺带说一下。

5.1 Resources

Resources标签,看已注册的资源列表:

  • docs://handbook/onboarding—— 员工入职手册

  • docs://api/overview—— API 接口文档总览

  • config://app/production—— 生产环境配置

点右侧Read直接读取,验证内容是否正确。
模板资源(如db://orders/{orderId})填入参数后读取:

URI: db://orders/ORD20240115001

5.2 Prompts

MCP Prompts 是可复用的提示词模板,带参数,调用时填参数生成最终 prompt。点Prompts标签,看到提示词模板列表,点code_review右侧Get填参数:

{ "code": "public void login(String user, String pass) { ... }", "focus": "security" }

查看生成的提示词内容对不对。

六、推荐的调试流程

每次改了工具代码,按这个顺序走:

  1. 写工具代码

  2. mvn package打 jar

  3. MCP Inspector 连接,看工具列表是否正确

  4. Inspector 手动调每个工具,验证参数和返回值

  5. 验证 Resources 和 Prompts(如果有)

  6. 接入 Cursor 做端到端测试

  7. 集成到 Spring Boot Agent 应用

改了代码重新打包后,Inspector 里点Reconnect,不用重启 Inspector 界面,很方便。

Inspector 这个工具我强烈建议大家养成习惯——先 Inspector 验证,再接 Cursor,遇到问题心里有底,不会一堆报错不知道从哪查起。

http://www.jsqmd.com/news/1077541/

相关文章:

  • [Android] AudioEditor音频剪辑高级版-多轨+分割+混合+超级好用
  • Sunshine游戏串流终极指南:如何用开源软件打造专业级游戏串流服务器
  • OFDM项目开发(05):FPGA跨时钟域IFFT数据接口设计——异步FIFO + 精准时序控制
  • STM32-S369-存取柜+光敏+灯光+消毒+取件码+二维码+语音播报+存件+手机号录入+后台数据+4舵机+OLED屏+按键+(无线方式选择)-2(设计源文件+万字报告+讲解)(支持资料、图片参考_
  • 循环学习率CLR实战指南:提升收敛速度与泛化能力
  • Adobe-GenP 3.0:开源逆向工程的艺术与实用指南
  • OpenCLIP与Diffusion Bee:AI模型工程化落地实战指南
  • 5大理由:为什么企业需要billd-desk私有化部署的远程控制解决方案
  • LoRA微调实战:在笔记本上高效微调大模型的完整指南
  • Bunny DNS 免费!多维度优化助力构建更快更安全应用
  • 2026年重庆山三云企售后跟进的技术解析与工作要点说明
  • 现代gpu编程系统教程(一) ------- 概述
  • NCMDump是什么?网易云NCM格式转换工具详解及使用教程(附替代方案)
  • 3.7V升压5V2A芯片哪个好?PW6276同步升压低功耗方案
  • 基于 OB2513x开关芯片的PSR DCM模式反激电源的FB波形
  • 欧拉-丸山法在McKean-Vlasov SDE不变测度收敛性中的分析与MATLAB实践
  • Django毕业设计-基于 Django + 协同过滤算法的电影推荐系统设计与实现 基于 Django + 协同过滤算法的个性化电影推荐平台(源码+LW+部署文档+全bao+远程调试+代码讲解等)
  • SAMTEC/申泰 asp系列 134488 01 中文资料 板对板连接器
  • 2019年全球10km分辨率人类发展指数栅格数据集
  • 星载深度学习实战:空间遥感与自主导航的轻量AI部署
  • LSTM时间序列实战:工业级预测的12个关键工程细节
  • 电影评分为什么是离散分布?认知、平台与技术的三重约束
  • 从 PHP 到 AI + Golang,程序员自救转型手记(六):泛型基服务、控制器、仓储实现,自动发现和注册业务路由
  • 游泳池表面涂装,从别墅泳池到大型主题乐园,选对材料是关键
  • 线性回归实战:从数据到利润的商业建模指南
  • 【数据库系统原理】第22篇:索引的神经:哈希索引、位图索引与全文索引的原理及应用场景
  • 星露谷物语模组创作革命:从游戏玩家到数字园艺师的蜕变之旅
  • AI安全实战手记:从启发式扫描到神经符号防火墙
  • EXE软件加密实战:从原理到应用,保护你的代码与授权
  • 硬件安全引擎描述符机制:嵌入式网络加密加速的核心原理与实践