Skip to content

未使用的 MCP 工具 schema 每个步骤全量重发;MCP 重连失败后静默注销,模型与用户都无提示 #611

Description

@ewanchen0314-boop

Title: 未使用的 MCP 工具 schema 每个步骤全量重发;MCP 重连失败后静默注销,模型与用户都无提示

Labels: enhancement, cost

===== 以下为 Issue 正文 =====

这里有两个相关但独立的问题,都关于 MCP 工具集对会话成本与可靠性的影响。

问题 1:无关 MCP 工具的 schema 每步全量重发

被排查会话的 request/header 记录显示:

项 值
注册工具总数 79
工具 schema 载荷 106.6 KB(约 27 K token)
其中来自一个与本次任务完全无关的项目管理类 MCP 50 个工具

这 106.6 KB 在每一个 step 的请求里都重复发送。作为对照,该会话整轮累计增长的对话正文只有约 29 K token——也就是说,光工具 schema 的固定载荷就与全部对话内容同量级,而其中 50/79 从未被调用。

问题 2:MCP 断连后静默注销

同一个会话窗口内,另一个 MCP(记忆/上下文类,openviking)持续重连失败,日志依次为:

[E] [mcp] mcp: openviking: connection attempt 1/10 failed
[E] [mcp] mcp: openviking: connection attempt 2/10 failed
…
[W] [mcp] mcp: openviking: connection lost after 10 attempts, tools unregistered

问题在于:

  • 只有宿主日志里有记录,用户界面与模型侧都没有任何提示;
  • 工具被注销后模型并不知情,仍会按先前上下文去调用已消失的工具,得到难以理解的失败。

期望

  1. 能按会话/任务裁剪工具集,或者默认对未使用的 MCP 工具做懒注册,避免每步携带 27 K token 的死重。
  2. MCP 连接状态变化(尤其是"工具已被注销")要作为一条模型可见的提示注入,并在 UI 上有持久可见的状态标识。

建议

  1. 提供 per-session / per-preset 的工具白名单,或按 MCP 分组开关;并在请求构造时跳过本轮明显无关的分组。
  2. 记录并暴露"每步工具 schema 字节数 / token 数"指标,便于用户自己发现死重(当前需要人工解日志才能看到)。
  3. MCP 注销时注入一条系统级提示告知模型该 MCP 的工具已不可用;同时在 UI 上给持久的连接状态。

环境

@deepseek-ai/dsh 0.1.5-rc.2 / dsh-plugin-desktop 2.0.10 / Windows 11 build 26200 AMD64。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions