Multi-node control plane and MCP gateway for DeepSeek Harness (DSH) ChatGPT Helm connectors
24 tools with complete schemas and descriptions, but significant gaps in parameter documentation and output schema clarity. Most tools have 1-3 required parameters with type definitions, but many optional parameters lack descriptions. Descriptions average ~80 chars (below 194-char baseline), often too terse for LLM selection. No output schemas documented. Error handling and recovery guidance absent. Tool naming follows verb_noun convention well (code_*, sessions_*, nodes_*), but some descriptions are generic ('List workspaces across all connected nodes' lacks context on when to call it). Security-relevant tools (presence_claim, sessions_prompt with mode=steer) lack explicit permission/risk documentation.
List agents across all connected nodes.
Find files by name pattern in the workspace.
Find symbols referencing a given symbol.
Find a symbol by name.
Symbol overview of the active workspace.
List a directory in the active workspace.
Read a file in the active workspace. Routes to the workspace owner.
Output schemas not documented. Tools return structured data but LLMs cannot plan downstream calls without knowing response field names and types. E.g., sessions_get, nodes_list, code_find_symbol lack documented return structures.
Many optional parameters lack descriptions. 'workspace' and 'target_node' appear in 20+ tools but descriptions are minimal or missing context on when to use them. LLMs cannot reason about optional params without guidance.
Discovery tools (projects_list, workspaces_list, agents_list, nodes_list) have generic descriptions ('List X across all connected nodes') that do not explain WHEN to call them or what structure they reveal. LLMs cannot determine if a discovery call is needed.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 67 | 2026-07-28+ | v2 |
Search file contents for a regex pattern.
Select the workspace to operate on. Routes to the owning node.
Get one node by node_id with layered health.
List all nodes registered with the control plane, with connection and capability status.
Manually claim presence on a node (default 10min TTL, pinned). Explicit target always wins routing.
Release a manual presence claim on a node.
List projects across all connected nodes.
Explain how a call would be routed (target/session/workspace/presence), without executing it.
Cancel a running session on its owning node.
Create a new DSH session on a node.
Get session details. Routes to the session owner. Default returns a compact summary; pass include_messages=true for full history (max_messages/before_seq page it).
List sessions across all connected nodes.
Send a message to a session on its owning node. mode=queue (default) appends to the session queue; mode=steer bypasses the queue and injects immediately into the running turn (structured result: steered/queued/rejected/unavailable).
Resume a session on its owning node.
Wait for a session to reach a terminal state.
Layered health of the control plane and all nodes.
List workspaces across all connected nodes.
Destructive/sensitive tools (sessions_resume, sessions_prompt with mode=steer, sessions_cancel, presence_claim) lack explicit permission/risk documentation. No guidance on what happens on retry, whether operations are idempotent, or what permissions are required.
No error handling or recovery guidance. Tools do not document what errors are possible, whether they are retryable, or what the LLM should do next. E.g., sessions_get with invalid session_id returns nothing; code_read_file with missing path returns nothing.