MCP服务显示“Connected”但工具列表为空等问题,90%源于服务端未正确暴露工具定义或客户端未完成资源发现流程:需确认Server静默运行、tools/list返回合规JSON、claude mcp list可见服务、/mcp reload触发响应、且resources/list已实现并可被调用。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

Claude Code里MCP服务显示“Connected”但工具列表为空、@mentions不触发、/mcp命令查不到可用工具,这类问题90%不是连接失败,而是服务端未正确暴露工具定义或客户端未完成资源发现流程。
先确认MCP Server是否真在运行且无stdout污染
打开终端,手动执行你配置中指定的启动命令,例如:npx tsx src/server.ts或node dist/server.js。
观察终端输出:如果出现任何console.log、console.info或未捕获的异常堆栈,说明Server尚未进入等待JSON-RPC消息的就绪状态——【所有普通日志必须重定向到stderr,stdout必须完全空闲】。
用Ctrl+C终止进程,将所有console.log改为console.error,再重新运行。此时终端应保持静默,仅等待输入。
验证MCP Server是否返回了合法的tools响应
在Server静默运行状态下,用curl模拟一次标准的MCP discovery请求:
curl -X POST http://localhost:3000 -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"tools/list","id":1}'
如果返回404、空响应、HTML页面或非JSON内容,说明Server未实现tools/list方法,或监听路径不是根路径/。
如果返回JSON但result字段为空数组或结构不符合MCP规范(例如缺少name、description、input_schema),说明工具注册逻辑未执行或元数据生成失败。
检查Claude Code是否成功加载并解析了tools响应
第一步:执行claude mcp list,确认该服务名称出现在已注册列表中且状态为connected。
为Claude Code提供对提醒事项、日历、联系人、笔记、邮件和tmux的本地命令访问权限,以便在macOS上进行工作流感知的个人操作。
第二步:在Claude Code会话中输入/mcp reload 强制刷新工具缓存——这一步会重新触发tools/list调用并打印原始响应体到控制台。
第三步:立即查看Claude Code启动时的终端输出(不是聊天窗口),搜索tools/list response关键词。若看到ParseError或Invalid tool schema,说明返回的JSON中存在字段缺失、类型错误或嵌套过深等问题。
常见错误是input_schema写成了JavaScript对象字面量而非JSON Schema字符串,或name包含空格、斜杠等非法字符。
排查resource reference语义解析是否启用
方法一:在Claude Code中输入@/dummy/path并按Tab,观察是否触发autocomplete请求。
方法二:打开Server终端,此时应看到一条console.error("Received request for resources")类日志(前提是已正确改写日志输出)。如果没有日志,说明Claude Code根本没发出resources/list请求——这意味着工具列表为空导致后续所有resource机制被跳过。
方法三:直接调用resources/list接口验证:
curl -X POST http://localhost:3000 -H "Content-Type: application/json" -d '{"jsonrpc":"2.0","method":"resources/list","params":{"query":"/"},"id":2}'
返回空数组或Method not found,说明Server未实现资源发现协议,autocomplete必然失效。此时需确认是否调用了server.registerResources()或等效初始化逻辑。

















