Skip to content

[Bug] ZCode Desktop 3.14.4 (Windows): user-scope MCP server connects, but its tools are never listed/registered in sessions #904

Description

@rder871

[Bug] ZCode Desktop 3.14.4 (Windows): user-scope MCP server connects, but its tools are never listed/registered in sessions

Summary

A user-scope MCP server (stdio) is connected successfully at session startup, but ZCode never sends a tools/list request to it and never registers its tools into chat sessions. As a result, mcp__<server>__* tools are unavailable in any new chat, even though the MCP server itself is fully healthy.

Environment

  • ZCode Desktop 3.14.4.7912, Windows 10 Pro 22H2 (build 19045, x64)
  • MCP server under test: local Node.js stdio server (tradingview-mcp 2.0.0, exposes 84 tools)
  • Registered at user scope in %USERPROFILE%\.zcode\cli\config.json → mcp.servers
  • Companion test server: built-in node_repl (1 tool)

Expected

After startup, a session's toolset includes tools from the connected user-scope MCP server (mcp__tradingview__chart_get_state, etc.).

Actual

  • Connection succeeds: mcp.server.connected (durationMs ≈ 1500–3500) in every session.
  • But no tools/list request is ever sent to that server — no tool-listing events appear in logs at all.
  • mcp.tools.registered consistently reports registeredToolCount: 1, serverCount: 2 across many sessions on different days — the "1" is the built-in node_repl tool; the user-scope server contributes 0 tools.
  • Tools are absent from every new chat's toolset.

Log evidence (2026-10-01 / 2026-10-02, anonymized)

{"event":"mcp.server.connect.started","context":{"mcpServerName":"tradingview","transport":"stdio","timeoutMs":30000}}
{"event":"mcp.server.connected","context":{"mcpServerName":"tradingview","durationMs":3444,"status":"completed"}}
{"event":"mcp.tools.registered","context":{"registeredToolCount":1,"serverCount":2}}

(The registeredToolCount: 1 pattern repeats in ~20+ events across two days, incl. fresh sessions at turnNumber 0.)

Server-side is healthy

Driving the same server manually over stdio JSON-RPC works perfectly:

initialize OK in 1274 ms; server: tradingview 2.0.0
tools/list OK in 1313 ms — 84 tools
tools/call chart_get_state → {"success": true, "symbol": "BYBIT:ADAUSDT.P", ...}

So the failure is on ZCode's side: the client connects but never enumerates/registers the server's tools.

Related issues

  1. Settings → MCP Servers page hangs on "Loading..." indefinitely (both User and Workspace scopes), so per-server status/toggles cannot be inspected in the GUI.
  2. A broken built-in plugin MCP server (plugin:image-search:image_search, HTTP transport) fails at every session start with coding plan is required; built-in plugins cannot be uninstalled (GUI "Uninstall" does nothing) — only disabling via config.json works.
  3. Config schema mismatch: a user config with
    "skills": { "paths": [ "..." ] }
    (as suggested by community templates) logs at every startup:
    config.file.invalid: skills.paths: Invalid input: expected object, received array (severity: error).
    Either the docs/template should be fixed or the array form accepted.

Workaround we use now

A small wrapper script that spawns the MCP server and speaks stdio JSON-RPC directly (initialize → tools/call). This works reliably, which confirms the MCP server is fine and the issue is in the client's tool-registration pipeline.

Request

Please register tools from connected user-scope MCP servers in chat sessions (or expose a per-server tools toggle in Settings). Also: make Settings → MCP Servers render, and clarify the skills.paths schema.

Activity

  1. github-actions commented on Oct 2, 2026

    @github-actions

    👋 感谢你的反馈,我们已经收到。

    • 维护者看到后会尽快回复你。
    • 状态保持为 status: 待评估,你可以随时补充信息。
    • 信息不全时我们会打上 needs: 更多信息 标签并 @ 你。

    👋 Thanks — we've received your issue.

    • A maintainer will get back to you as soon as we can.
    • Status stays at status: 待评估 (Triage); feel free to add context.
    • If we need more details, we'll add needs: 更多信息 and ping you.
  2. rder871 commented on Oct 2, 2026

    @rder871
    Author

    Follow-up comment for #904

    Follow-up: root cause found and fixed

    Further diagnostics traced both symptoms to two independent triggers in our setup. The client works as designed once they are removed — though the failure modes still seem worth hardening:

    1. Eternal "Loading..." in Settings → MCP Servers.
    The workspace-level .zcode/config.json was invalid JSON (it contained // comments). ZCode logged config.file.invalid: Unexpected token '/' every few seconds, and the Settings page could not build the resource list — in both User and Workspace scopes. After rewriting the file to valid JSON, the page renders immediately (no app restart needed — config is re-read live).

    2. Tools never registered in sessions.
    While the invalid workspace config was in place and a built-in plugin MCP server was failing at every session start (plugin:image-search:image_search, error coding plan is required), mcp.tools.registered stayed at registeredToolCount: 1 (only the built-in node_repl tool) across 20+ sessions over two days. Our healthy user-scope stdio server contributed 0 tools — although a manual stdio handshake with the same server returns tools/list with 84 tools in ~1.3 s.

    After (a) disabling the broken built-in plugin and (b) fixing the invalid workspace config, tool registration immediately jumped to:

    {"event":"mcp.tools.registered","context":{"registeredToolCount":90,"serverCount":4}}

    (84 tools from the user-scope server + node_repl + 2 plugin servers.)

    Suggestions

    • A single failing plugin MCP server should not prevent other connected servers' tools from registering — and the failure should be visible in Settings instead of an eternal "Loading...".
    • Built-in plugins cannot be uninstalled via the GUI (the "Uninstall" action does nothing); a per-plugin enable/disable toggle in Plugin Management would help.
    • config.file.invalid warnings are easy to miss in logs — surfacing config validation errors in the UI (e.g., a badge on Settings) would have saved hours of debugging.
    • The skills.paths: Invalid input: expected object, received array schema error deserves a docs note (community templates pass an array).

    Happy to provide full logs if useful.

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

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions