EPIC C mechanism 11 · #3308 · 2026-08-10

A whole MCP server to ask five questions.

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.

What the directory actually held — TWO servers

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

Correction: my first pass deleted the whole directory

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.

The re-home already existed

Both call sites branched on availability and fell back

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.

Why this one was picked first

testresult
Target exists in the installed binaryHIT — AskUserQuestion in 2.1.226
Target observed firingused repeatedly in this very session
Retiring removes code248 lines of server + 35 of build glue
Frees a scarce resourcea permanent MCP tool slot, every session
Shared generated output with other lanesnone

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.

Removed

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.

Verification

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.