OrchestKit shipped its own MCP server, holding a permanent tool slot in every
session, to render a form. Claude Code has AskUserQuestion for exactly that — and both
call sites already had an AskUserQuestion path written as the fallback. The re-home was done
years before the retirement; only the pipe was left.
src/mcp-server/src/ index.ts registerElicitTool() → dist/server.mjs RETIRED tools/ork-elicit.ts + presets/ RETIRED docs-server.ts registerDocsTools() → dist/docs-server.mjs KEPT tools/docs.ts KEPT
The first version of this PR removed all of src/mcp-server and asserted in its body
that tools/docs.ts was "71 lines, never registered, dead." It is registered — by a
second entry point, docs-server.ts, which is the stdio variant of the public Docs MCP
server at orchestkit.yonyon.ai/api/mcp, shipped as a container image and used for Glama
registry checks. esbuild.config.mjs has two build() blocks; I had read
neither.
CI caught it — Docs MCP image builds failed on
COPY src/mcp-server/src: not found. I concluded a file was dead from a partial read,
which is the exact defect class this milestone exists to remove, committed while writing a PR about
removing it.
setup/references/configure-wizard.md elicit_available = "mcp__ork-elicit__ork_elicit" in available_tools if elicit_available: ork_elicit(preset="project-config") else: 5x AskUserQuestion ← already written release-sync/SKILL.md elicit_available = ToolSearch(...).found if elicit_available: ork_elicit(preset="release-sync-targets") else: 3x AskUserQuestion ← already written
So this retirement is the easy shape: the opinion ("ask the user these things in a structured way") already had a working CC-native home, and the MCP server was a second mechanism sitting beside it. Deleting the branch leaves one path instead of two.
| test | result |
|---|---|
| Target exists in the installed binary | HIT — AskUserQuestion in 2.1.226 |
| Target observed firing | used repeatedly in this very session |
| Retiring removes code | 248 lines of server + 35 of build glue |
| Frees a scarce resource | a permanent MCP tool slot, every session |
| Shared generated output with other lanes | none |
Mechanism 10 (keybindings) taught the extra test: confirm the target can actually receive the opinion. There the action vocabulary was closed and no re-home was possible. Here the target is a tool I had already invoked, so "observe it firing" was satisfied before the work started.
src/mcp-server/src/index.ts the ork-elicit entry point src/mcp-server/src/tools/ork-elicit.ts the tool src/mcp-server/src/presets/ imported only by ork-elicit esbuild.config.mjs the server.mjs entry (docs entry kept) plugins/ork/mcp-server/server.mjs build output scripts/build-plugins.sh 35 lines of build + copy phases src/settings/ork.settings.json permissions.allow 6 → 5 src/skills/setup/SKILL.md allowed-tools entry configure-wizard.md Step 0.5 probe + elicit branch → one path release-sync/SKILL.md elicit branch → one path mcp-version-matrix.md the ork-elicit row test-mcp-pinning-check.sh fixture renamed (it was only test data)
The two build phases were each guarded
on [[ -d "$SRC_DIR/mcp-server" ]], so with the directory gone they would have skipped
silently forever — dead machinery that still reads as "OrchestKit ships an MCP server". That is the
EPIC A shape, so it went with the rest rather than being left for later.
bash -n scripts/build-plugins.sh syntax OK npm run build exit 0, plugins regenerated tests/skills/test-mcp-pinning-check.sh 18 passed, 0 failed npm run test:skills every /ork: ref resolves; totals match src/ 105 skills, 36 agents, 217 hooks
Ordering note for the remaining seven. EPIC C says re-home, observe, then
delete, and mechanisms 09, 12 and 13 have targets I verified in the binary today
(cache_*_input_tokens, Installing plugin dependencies,
cleanupPeriodDays + unpushed commits). Mechanisms 05, 06, 07 and 08 do not
have verified targets yet and need a fitness probe first — not an existence grep, which is what
keybindings would have passed. 08 stays last because retiring the worktree protocol rewrites the
thing every parallel agent is currently running inside.