Replies: 3 comments
Correction & root cause refinement (verified by restart test)In the original post I wrote that the dsh MCP client "unconditionally requires 1. dsh's validation is two-state, not unconditional ( required: structuredSchema === void 0 ? ["content"] : ["content", "structuredContent"]The client only requires 2. What OpenViking changed between 0.4.15 and 0.4.17.1: in 0.4.15, 3. The actual trigger: a stale tool manifest cached by a long-lived client session. The client session's MCP bridge registered before the server upgrade, so it was still holding the 0.4.15-era tool manifest (in which 4. Verified fix: restart the client (or open a fresh session). After restarting dsh, the bridge re-registered with a fresh TL;DR for anyone hitting this: if an MCP tool starts being rejected with Apologies for the imprecise framing in the original post — closing the loop here so the thread carries accurate information. |
|
This looks like a stale discovered schema across the OpenViking upgrade, rather than The guard proposed above is already in the exact rc.1 tag (and in the published npm artifact): the registered result schema requires only There is a version transition that explains the exact error:
If dsh discovered the 0.4.16 definition, then OpenViking was upgraded/restarted while dsh remained alive, the old registered definition can still validate the new content-only result. That produces exactly Try this order once:
If it still fails after a clean restart, the two most useful diagnostics are the Inspector's complete where.exe dsh
dsh --version
npm ls -g --all @deepseek-ai/dsh-mcp-client @modelcontextprotocol/sdkThat will distinguish an unexpected wire |
|
@Junaid-PK Apologies for the late reply — and thank you: your diagnosis is correct, and it matches our environment exactly. Timeline on our side: OpenViking was upgraded 0.4.16 → 0.4.17.1 while the dsh process stayed alive. The session opened before the upgrade kept the stale 0.4.16-discovered tool definition (with the advertised So: no unconditional |
Uh oh!
There was an error while loading. Please reload this page.
Summary (EN)
dsh 0.1.2-rc.1's MCP client rejects tool results that contain only
contentblocks withoutstructuredContent, even when the server explicitly declaredstructured_output=falsefor that tool (i.e. nooutputSchema). This breaks interop with MCP servers whose tools legitimately return unstructured text/media output — allowed by the MCP spec, wherestructuredContentis optional.环境 / Environment
0.1.2-rc.1(npm 全通道最新,next tag;Windows 11)0.4.17.1(PyPI 最新正式版;Volcengine 开源的 MCP 上下文数据库服务器,监听 127.0.0.1:1933,streamable HTTP)症状 / Symptom
调用 OpenViking 提供的 MCP 工具
read时,dsh 侧直接拒收结果:同一服务器的
search/list/write等工具(返回结构化结果)校验通过,只有read失败。服务端证据 / Server-side evidence
OpenViking
0.4.17.1的openviking/server/mcp_endpoint.py第 501 行起:0.4.17 起 OpenViking 的
read工具改为返回纯文本 / 媒体 content block(配合 MCP 原生媒体返回特性),并显式声明structured_output=False——即不声明 outputSchema、按 MCP 规范合法地只返回 content。已核对上游 main 分支(1,480 行版本)该处一致,即官方尚未调整。分析 / Analysis
structuredContent是可选字段;工具未声明 outputSchema 时,客户端不应要求它。structuredContent(报错路径value.structuredContent),导致任何合法返回 content-only 的服务器工具都会被拒。0.1.2-rc.1为全通道最新;OpenViking0.4.17.1为最新稳定版),升级无法绕过,属于两侧互操作适配问题。复现 / Repro
uv tool install "openviking[bot]==0.4.17.1",启动openviking-server --with-bot(127.0.0.1:1933)read,参数如{"uris": "viking://user/<uid>/memories/profile.md"}ov read)正常;search/list/write正常期望行为 / Expected behavior
工具未声明 outputSchema 时,客户端应接受仅含
content的结果,不强制要求structuredContent(MCP 规范行为)。建议修复 / Suggested fix
放宽 dsh MCP 结果校验:仅当工具声明了
outputSchema时才要求structuredContent;否则接受 content-only 结果。本地临时绕过 / Local workaround
改用
ov readCLI 或 MCPsearch(自带 read_content 全文返回);OpenViking 的自动记忆召回/会话捕获走 HTTP API 直连,不受影响。All reactions