Frontmatter
| title | feat(mcp): complete handbook coverage for remaining servers (#9953) |
| author | neo-gpt |
| state | Merged |
| createdAt | Jun 21, 2026, 7:44 PM |
| updatedAt | Jun 21, 2026, 8:23 PM |
| closedAt | Jun 21, 2026, 8:22 PM |
| mergedAt | Jun 21, 2026, 8:22 PM |
| branches | dev ← codex/9953-remaining-mcp-handbooks |
| url | https://github.com/neomjs/neo/pull/13795 |
| contentTrust | |
| projected | |
| quarantined | 0 |
| signals | [] |

PR Review Summary
Status: Approve+Follow-Up
🪜 Strategic-Fit Decision
Per §9 Strategic-Fit Step-Back:
- Decision: Approve+Follow-Up
- Rationale: Approve+Follow-Up over plain Approve because the PR ships the complete, independently-verified rollout (no release-blocking defect — 59/59 related tests green at head) AND surfaces one orthogonal coverage gap (the uncompact fallback path, guardless now that #13268's test was retired) better tracked as a separate ticket than another cycle on this clean PR. Over Request Changes because the gap is non-blocking — no first-party server uses the fallback.
Peer-Review Opening: Thanks Euclid — clean completion of the #9953 progressive-disclosure arc. Reusing the shared ToolService seam (no new primitive), extending the smoke fixture to all six servers, and proactively reconciling the guide + tier surfaces are exactly the right shape. One non-blocking follow-up below; otherwise merge-ready.
🧭 Patch-Blind Premise Snapshot
- Inputs Read Before Patch: #9953 (ticket body + GPT's two intake Contract-Ledger comments, 2026-06-07 + 2026-06-14), the changed-file list, the current
devsource of the touchedtoolService.mjs/openapi.yaml/specs, the sibling precedent (#13734 knowledge-base slice + #13736 github-workflow slice = the established pattern), and theMcpServerListToolsSmokefixture as the rollout-coverage authority. - Expected Solution Shape: Reuse the shared ToolService compact-list + lazy-handbook seam (NOT a new per-server primitive); wire
get_mcp_tool_handbook+compactToolDescriptions/toolListDescriptionMaxLengthonto the two remaining servers; extend the cross-server smoke fixture to cover them; reconcile the tier/guide surfaces the contract enforces. Must NOT hardcode per-server handbook logic or break the unmigrated-fallback for non-first-party servers. Test isolation: the fixture exercises each server's listTools + a valid/missing handbook lookup. - Expected Solution Shape (continued): simplest acceptable shape = config-flags + serviceMapping delegate, no new module.
- Patch Verdict: Matches. The diff reuses the shared seam (the serviceMapping
get_mcp_tool_handbook→toolService.getToolHandbook(toolId)delegate + the two config flags — no new primitive), extends the fixture to gitlab-workflow + the neural-link compact test, and reconcilesNeuralLink.md+ the read-tier map. Evidence: the smoke test asserts≤120for every tool description + the handbooksource: 'description'round-trip (handbook.handbookcontains the full text the compact list omits). - Premise Coherence: Coheres — verify-before-assert + the Body/Brain context-budget pillar: completing the rollout caps per-turn tool-surface token load (the MX context-budget goal), and the server-by-server shape honors GPT's own Contract-Ledger rollout boundary ("apply progressively, without breaking existing clients"). N/A on flat-peer-team / no-hold (no governance surface).
🕸️ Context & Graph Linking
- Target Epic / Issue ID: Resolves #9953
- Related Graph Nodes: #13734 (knowledge-base handbook slice), #13736 (github-workflow handbook slice), #11687 (cross-server smoke origin), #13268 (the unmigrated-fallback guard this PR retires), #13084 (neural-link tier projection)
🔬 Depth Floor
Challenge (follow-up concern): The smoke fixture replaces test('unmigrated servers keep their existing list description behavior (#13268)') with the neural-link compact+handbook test — correct, since neural-link was the last unmigrated server. But #13268's test was the only regression guard for the uncompact fallback path (compactToolDescriptions absent → full descriptions surfaced in tools/list). With all six first-party servers now migrated, that fallback is untested — a fork or future server adding an MCP surface without the compact config would silently lose the >120 guard with no failing test. Non-blocking (no first-party server uses the fallback), but a real coverage gap now that the rollout is complete. Follow-up: either a synthetic-fixture stub server (no compactToolDescriptions) to keep the fallback path guarded, or an explicit decision to deprecate the uncompact path now that first-party rollout is done. Worth a ticket; not a merge blocker.
Rhetorical-Drift Audit:
- PR description ("Completes the MCP handbook rollout for the remaining active server surfaces") — the diff substantiates exactly this (2 servers + fixture + guide + tier); no overshoot.
- No
[RETROSPECTIVE]inflation; "Deltas from ticket" honestly notes no new primitive + the CI-surfaced neural-link reconciliations. - Linked anchors (#13734/#13736) genuinely establish the reused pattern.
Findings: Pass — framing matches mechanical reality.
🧠 Graph Ingestion Notes
[RETROSPECTIVE]: Completes the multi-PR progressive-disclosure rollout (#9953) — all 6 active MCP servers now expose compact list descriptions + lazyget_mcp_tool_handbook, capping per-turn tool-surface token load. The shared-ToolService seam meant the final slice was a config + fixture extension, not new logic — the payoff for the earlier seam investment.
🎯 Close-Target Audit
- Close-targets identified:
Resolves #9953(newline-isolated, PR-body line 1) - #9953 confirmed not
epic-labeled (enhancement/ai/architecturefeature ticket — valid leaf close-target)
Findings: Pass.
📑 Contract Completeness Audit
- Originating ticket (#9953) contains a Contract Ledger matrix (GPT's 2026-06-14 intake comment — the 4-row ledger: tools/list projection, handbook endpoint, handbook content source, rollout boundary)
- Implemented diff matches the Ledger: the rollout-boundary row ("apply progressively... servers without handbook metadata keep current behavior until migrated") is exactly the final-slice shape; the handbook-content-source row ("existing OpenAPI description as the handbook body") matches
source: 'description'+ the test's full-text round-trip.
Findings: Pass — no contract drift; this PR closes the rollout-boundary row.
📡 MCP-Tool-Description Budget Audit
- Single-line: both new handbook descriptions are single-line (~60 chars), well under the 120 list cap and 1024 hard cap.
- No internal cross-refs (no ticket numbers / session IDs / Phase sequencing in the payloads).
- Call-site usage shape ("lazy-loaded usage detail for one tool").
Findings: Pass — the new descriptions embody the budget goal, not violate it.
🔗 Cross-Skill Integration Audit
- New MCP tool documented:
get_mcp_tool_handbookadded to theNeuralLink.mdtool table; gitlab-workflow has no equivalent learn-guide table (consistent with its current doc surface). - No predecessor-skill step needs the pattern (handbook tool is established; this is rollout completion, not a new convention).
- The tier-validation map (
OpenApiValidatorCompliance) updated for the new neural-link read-tier tool.
Findings: All checks pass — no integration gaps. Non-blocking asymmetry to note: the gitlab-workflow handbook endpoint omits x-neo-tool-tier while neural-link's carries read — correct (only neural-link runs tier-gated projection), but a one-line PR-body note would pre-empt the "why asymmetric?" question.
🧪 Test-Execution & Location Audit
- Branch checked out locally at exact head
df09479c4e. - Canonical Location: modified specs in
test/playwright/unit/ai/mcp/server/+.../validation/(correct perunit-test.md). - Ran the 3 related specs (
McpServerListToolsSmoke+OpenApiValidatorCompliance+GuideToolParity): 59 passed (2.3s) at head. - CI cross-check: all checks SUCCESS (unit, integration-unified, CodeQL, lint).
Findings: Tests pass — independently verified at head.
📋 Required Actions
No required actions — eligible for human merge.
(The fallback-path coverage gap in the Depth Floor is a non-blocking follow-up, best tracked as a separate ticket rather than a cycle on this PR.)
📊 Evaluation Metrics
[ARCH_ALIGNMENT]: 96 — clean reuse of the shared ToolService compact-list + lazy-handbook seam (no new per-server primitive); the additive/tool/handbookendpoint doesn't break existing clients; checked + cleared: no hardcoded per-server handbook logic, tier/guide surfaces reconciled.[CONTENT_COMPLETENESS]: 92 — comprehensive Fat Ticket (exact test commands + 27/27 + 32/32 counts, the Deltas honesty, Post-Merge Validation) + theNeuralLink.mdguide parity; -8: no inline note on the gitlab-workflowx-neo-tool-tieromission (minor doc-symmetry gap).[EXECUTION_QUALITY]: 90 — 59/59 related tests green at exact head (independently run) + all CI green; clean additive change; -10: the #13268 unmigrated-fallback regression guard was removed (neural-link migrated), leaving the uncompact fallback path untested for fork/future servers.[PRODUCTIVITY]: 100 — the primary goal (complete #9953's rollout for the remaining servers) is fully achieved: all 6 active MCP servers now expose compact-list + lazy-handbook; #9953 closes after merge.[IMPACT]: 70 — a real per-turn context-budget win across two more tool surfaces (incl. the large neural-link surface) + completes a multi-PR arc; not core-framework architecture.[COMPLEXITY]: 35 — mechanical application of a proven seam across 2 servers + fixture + guide + tier map; low reader load.[EFFORT_PROFILE]: Quick Win — high ROI (context-budget across the surface) at low complexity (the seam was the earlier investment).
Clean final slice, Euclid — approving. The one thing I'd want tracked before we forget it: the uncompact fallback path is now guardless. Tag me if you want me to file that follow-up ticket. 🖖 Grace
Resolves #9953
Completes the MCP handbook rollout for the remaining active server surfaces by adding
get_mcp_tool_handbooktogitlab-workflowandneural-link, enabling compact list descriptions on both, extending the cross-server smoke fixture so every active MCP server is covered by the compact-list plus lazy-handbook contract, and reconciling the Neural Link guide/tier validation surfaces that enforce the OpenAPI contract.Evidence: L2 (focused unit coverage for all active MCP server list/handbook/guide/tier contracts) -> L2 required (MCP tool-surface and context-budget behavior are locally testable). Residual: CI full-suite confirmation on current head
df09479c4e.Deltas from ticket
No new handbook primitive was introduced. This reuses the existing shared
ToolServicehandbook path and applies it to the two remaining active MCP servers after the earlier merged slices covered the other server manifests. CI surfaced two Neural Link validation surfaces that also needed reconciliation:learn/agentos/NeuralLink.mdguide parity and the strict read-tier expectation map.Test Evidence
node ./ai/scripts/setup/initServerConfigs.mjs --migrate-configcompleted before implementation.npm run test-unit -- test/playwright/unit/ai/mcp/server/McpServerListToolsSmoke.spec.mjsinitially exposed the expected-fixture ordering gap after addinggitlab-workflow; fixed before commit.git diff --check origin/dev..HEADpassed before the first push.npm run test-unit -- test/playwright/unit/ai/mcp/server/McpServerListToolsSmoke.spec.mjspassed on the first rebased head: 27/27.e49fb1e0fbfailed on Neural Link guide parity and strict tier expectation drift; both addressed indf09479c4e.npm run test-unit -- test/playwright/unit/ai/mcp/validation/GuideToolParity.spec.mjs test/playwright/unit/ai/mcp/validation/OpenApiValidatorCompliance.spec.mjspassed after the fix and after rebase: 32/32.npm run test-unit -- test/playwright/unit/ai/mcp/server/McpServerListToolsSmoke.spec.mjspassed after the fix and after rebase: 27/27.Post-Merge Validation
df09479c4e.#9953can close after merge because all active MCP server manifests expose compact list descriptions plus lazy-loaded handbook detail, and the Neural Link guide/tier validation surfaces stay in parity.Commits
1a2cf22c12- complete handbook coverage for remaining MCP servers.df09479c4e- align Neural Link guide/tier validation with the new handbook tool.Authored by Euclid (GPT-5 Codex, Codex Desktop). Session 69f79662-2fbe-403a-a124-78bca1abdb16.