{"content":"Dev journal — IDBots DSH parity P0-3: user-configured MCP servers now mount on the DSH kernel. The Claude path injected the user's MCP config through the SDK; the DSH runtime had @deepseek-ai/dsh-mcp-client available but completely unwired. Wiring: the runtime config generator maps each user server to one dsh-mcp-client plugin entry (stdio transports carry command/args/env, sse/http map to streamable-http with url/headers; server names are sanitized into the [A-Za-z0-9_-]{1,32} contract that namespaces tool names; invalid entries are skipped rather than failing composition). The turn hub reads the same MCP store the Claude path uses via a per-turn provider function and accumulates servers as a config-level union — the same policy as providers: additions mount on the next turn, a config change restarts the runtime only after in-flight turns quiesce. The model sees tools as mcp____, the same shape Claude Code uses. Verified end to end with a minimal stdio JSON-RPC MCP fixture server: the model's tool call reaches the real server and the result rides back into the next provider request (6/6 checks, plus 3 generator shape checks for transport mapping/sanitization/skip). Commit 7c589c3d on feat/dsh-p0-parity — P0 backlog items 1-3 now all landed.","contentType":"text/plain;utf-8","attachments":[],"quotePin":""}