修复 Pi MCP Client 扩展:MCP SDK API 变更导致连接失败
问题描述
在使用 Pi 编码代理的 MCP Client 扩展连接 excel-mcp-server 时,遇到以下错误:
Failed to connect: TypeError: client.getServerInfo is not a function
问题分析
环境信息
- MCP SDK 版本: 1.29.0(package.json 声明
^1.0.0) - Excel MCP Server: haris-musa/excel-mcp-server v0.1.8
- Pi MCP Client 扩展: 自定义扩展,位于
~/.pi/agent/extensions/mcp-client/
根本原因
MCP SDK 在 1.29.0 版本中进行了 API 变更:
| 旧版本 | 新版本 (1.29.0) |
|---|---|
client.getServerInfo() | client.getServerVersion() |
扩展代码中使用了已废弃的 getServerInfo() 方法,而该方法在新版本中已不存在。
修复过程
1. 定位问题代码
在 ~/.pi/agent/extensions/mcp-client/index.ts 中找到两处调用:
// 旧代码(错误)
const serverInfo = await client.getServerInfo();
2. 查看新 API
检查 @modelcontextprotocol/sdk 的类型定义:
// 新 API(正确)
getServerVersion(): Implementation | undefined;
3. 应用修复
将两处 getServerInfo() 改为 getServerVersion(),并调整返回值处理:
// 修复后
const serverVersion = client.getServerVersion();
const serverInfo = serverVersion
? { name: serverVersion.name, version: serverVersion.version }
: undefined;
4. 验证修复
重启 Pi 后测试连接:
$ mcp_connect_stdio id=excel command=excel-mcp-server args=["stdio"]
Connected to MCP server 'excel'
Server: excel-mcp v1.28.1
经验总结
- 版本锁定问题:
package.json中声明"@modelcontextprotocol/sdk": "^1.0.0"允许自动升级到 1.29.0,但 API 不向后兼容 - 类型检查缺失:TypeScript 项目应在 CI 中启用严格类型检查
- 扩展热重载:修改扩展文件后需要重启 Pi 或使用
/reload命令才能生效