问题出现得很突然,日志倒是留得挺全。mcp Python SDK 1.2,客户端连自建 server,调 list_resources 报 McpError: Method not found,tools 列表却正常,server 里确实只写了 tool 处理函数。
刚开始盯着「客户端用了旧协议版本,方法名对不上」,折腾了半个多小时,排掉了。
这类报错背后常见的原因有几处,逐个排除就行。server 没有注册 resources 能力。另一种情况是initialize 返回的 capabilities 里没有 resources。
少数情况下是stdio 传输下 server 的 stderr 被关,异常被吞。
先用 inspector 连一次看能力
npx @modelcontextprotocol/inspector python server.py
然后在 server 里注册一个资源
python -c "from mcp.server.fastmcp import FastMCP;m=FastMCP('demo');m.resource('config://app');print('ok')"
接着用 JSON-RPC 看 initialize 返回
curl -s localhost:8935/mcp -d '{"jsonrpc":"2.0","id":1,"method":"initialize"}' -H 'Content-Type: application/json'
剩下的就是重连后列出资源
python client.py --list-resources
改之前先确认了最近有没有人动过配置,避免白查一遍。
这次没动代码,只在配置和运行环境上找原因。
隔了一天再看,现象没变,说明不是偶发。
那几天正好在做别的变更,先把时间线对齐才敢动手。
改完先别撤,确认这几项。list_resources 至少返回一条 uri,read_resource 能取到内容,tools 列表不受影响。
MCP 的能力是按方法分开关的,没声明就直接回 -32601,这个错误和网络无关。报错文案容易误导,真正的原因往往在相邻那一层的日志里。
