问题描述
- 部分MCP服务(如IntelliJ IDEA配套MCP服务)仅实现
tools/list接口,调用resources/list、prompts/list时会阻塞挂起。原有逻辑会将资源、提示词发现作为强制流程,一旦阻塞就导致整个MCP连接初始化失败,服务无法就绪。
- 命令行
codewhale-tui mcp tools <server> 展示工具列表时,会完整打印工具全部多行描述文本,大量前置条件、行为说明内容刷屏,输出冗长难以阅读。
复现步骤
- 配置CodeWhale连接IntelliJ IDEA MCP服务(该服务仅支持工具查询,资源/提示词查询会阻塞)
- 启动MCP服务连接初始化流程
- 执行
codewhale-tui mcp tools <服务名> 查看工具列表
预期行为
- 只要工具列表查询成功,MCP连接即可正常进入就绪状态;资源、提示词查询超时或失败仅输出警告日志,不阻断连接。
- 终端展示工具描述时,仅保留首行前80个字符,超长内容末尾添加省略号,避免大量冗余文本刷屏。
实际行为
- 连接初始化卡在资源/提示词查询步骤无限阻塞,MCP连接直接初始化失败,完全无法使用该服务的工具能力。
- 工具描述完整输出全部多行内容,单条工具信息占数十行,终端输出杂乱冗长。
影响范围
- 复现概率:100%,所有仅实现
tools/list、不支持资源/提示词接口的MCP服务都会触发问题。
- 工作流阻塞程度:严重阻断,无法使用JetBrains IDE等配套MCP服务;工具列表可读性极差,排查工具信息效率极低。
运行环境
- 操作系统:Windows 11
- CodeWhale版本:提交 8fbc95a688d78e0a2680ff00a1ad544b1c5063cc
- 安装方式:源码本地编译构建
- codewhale doctor 输出:开发环境无相关输出
- 模型/服务商:无关联,属于MCP传输层问题
- 终端程序:Windows Terminal
- Shell:PowerShell
日志、截图、相关代码变更
本次提交补丁信息
提交说明:fix(mcp): 增强资源/提示词发现容错性 + 截断工具描述文本
修改文件:
- crates/tui/src/mcp.rs:新增29行,删减3行
- crates/tui/src/tui/mcp_routing.rs:新增25行,删减7行
总计:新增44行,删除10行
代码改动核心说明
1. mcp.rs:MCP发现流程容错改造
- 在
McpConnection结构体新增connect_timeout_secs字段存储连接总超时时长;
- 调整初始化发现逻辑:仅
discover_tools()为强制步骤,失败直接报错;资源、资源模板、提示词查询改为非强制;
- 计算单步查询自适应超时时间:总连接超时÷3,下限2秒,上限为读取超时,保证三步查询总耗时不超过连接超时;
- 使用tokio超时接口包裹资源、提示词查询,超时或接口报错仅打印警告日志,不中断整个连接流程,兼容仅提供工具接口的第三方MCP服务。
2. mcp_routing.rs:终端工具列表展示优化
- 提取工具描述仅第一行文本,舍弃后续所有换行内容;
- 按Unicode字符截断至80字符,超过长度则末尾添加
...;
- 简化输出格式,解决超长工具说明刷屏问题,提升终端可读性。
修复前后日志对比
修复前(连接失败):
ERROR mcp: server=idea-mcp error=resources/list 请求超时,终止MCP连接
ERROR mcp: 连接初始化失败,标记服务断开
修复后(正常就绪):
WARN mcp: server=idea-mcp error=资源查询超时(非致命错误)
INFO mcp: MCP连接就绪,工具加载完成
兼容性说明
- 完全兼容标准完整实现resources/prompts/list的MCP服务;
- 兼容仅实现tools/list的轻量化IDE MCP服务(JetBrains IDE系列);
- 无需新增配置项,改动自动生效,无需用户额外操作。
patch文件
0001-fix-mcp-make-resource-prompt-discovery-resilient-tru.patch
问题描述
tools/list接口,调用resources/list、prompts/list时会阻塞挂起。原有逻辑会将资源、提示词发现作为强制流程,一旦阻塞就导致整个MCP连接初始化失败,服务无法就绪。codewhale-tui mcp tools <server>展示工具列表时,会完整打印工具全部多行描述文本,大量前置条件、行为说明内容刷屏,输出冗长难以阅读。复现步骤
codewhale-tui mcp tools <服务名>查看工具列表预期行为
实际行为
影响范围
tools/list、不支持资源/提示词接口的MCP服务都会触发问题。运行环境
日志、截图、相关代码变更
本次提交补丁信息
提交说明:fix(mcp): 增强资源/提示词发现容错性 + 截断工具描述文本
修改文件:
总计:新增44行,删除10行
代码改动核心说明
1. mcp.rs:MCP发现流程容错改造
McpConnection结构体新增connect_timeout_secs字段存储连接总超时时长;discover_tools()为强制步骤,失败直接报错;资源、资源模板、提示词查询改为非强制;2. mcp_routing.rs:终端工具列表展示优化
...;修复前后日志对比
修复前(连接失败):
修复后(正常就绪):
兼容性说明
patch文件
0001-fix-mcp-make-resource-prompt-discovery-resilient-tru.patch