Context
Grace's A2A dependency finding on #13082 exposed a sharper blocker than the original consumer leaf captured: the Neural Link tier metadata can be consumed only after the harness has an explicit boundary where embedded agents receive a projected tool surface.
Release classification: post-release harness line; this sequencing ticket is not v13 release-gating.
The Problem
#13082 was filed as the consumer of the Neural Link tier contract, but live V-B-A shows there is no projection boundary for that consumer to attach to yet. Without this boundary, implementation choices collapse into speculation:
- filter
tools/list at handshake time,
- gate
call_tool per request while still listing the full surface,
- generate a derived manifest for embedded agents,
- or add a harness-specific MCP client/server context layer.
Those options imply different signatures and authority contexts. Building the #13082 consumer before deciding the boundary would create another declarative-but-unconsumed function one layer up.
The Architectural Reality
V-B-A before filing:
ai/mcp/server/neural-link/Server.mjs:48-55 advertises static MCP capabilities with tools: {listChanged: false}; it does not project by agent identity or harness mode.
ai/mcp/server/BaseServer.mjs:285-305 returns every listed tool from the server tool service; BaseServer.mjs:341-342 dispatches calls without a projection-policy hook.
ai/mcp/client/Client.mjs:270-279 consumes listTools() as the full dynamic proxy set for a client connection.
ai/mcp/ToolService.mjs:98-151 parses OpenAPI operations into the MCP tools/list payload, but on current dev it has no projection output mode.
- Local exact source sweep for
x-neo-tool-tier, toolProjection, and harness projection terms under ai/ found no existing projection consumer or boundary.
- Knowledge Base semantic check was attempted and failed because the current KB server is unhealthy (
knowledgeBase:null; healthcheck details: requested resource not found), so this ticket does not rely on KB silence.
- Memory Core semantic search surfaced the approved
#13078 tier-contract review context and no prior implemented boundary.
- Live latest-open GitHub sweep checked the latest 20 open issues at 2026-06-13T09:49Z. No equivalent boundary ticket exists. Closest issues: #13056 parent epic, #13064 tier-contract leaf, #13082 consumer leaf.
- A2A in-flight sweep checked the latest 30 messages at 2026-06-13T09:49Z. The only overlapping signal was Grace's dependency finding; no competing
[lane-claim] or [lane-intent] exists for the boundary ticket.
- Local synced issue/discussion exact sweep for projection-boundary terms returned no existing issue or Discussion duplicate.
The Fix
Define and implement the Neural Link harness projection boundary before #13082 consumes the tier contract.
Expected shape:
- Add a single source-of-authority boundary where an embedded harness agent asks for or receives a Neural Link tool projection.
- Make that boundary explicit enough that
#13082 can mechanically derive default visibility from x-neo-harness-tool-projection / x-neo-tool-tier without choosing the embedding interface itself.
- Preserve the fail-closed sequence: default embedded agents never receive write/admin tools by accident; full developer surfaces remain available only through the existing developer/operator path.
- Document whether projection happens at
tools/list, call_tool, a generated manifest, or a named hybrid, with the authority context passed through the boundary.
- Keep the implementation on existing MCP surfaces if possible (
ToolService, BaseServer, or Client) rather than adding a parallel allowlist subsystem.
Contract Ledger Matrix
| Target Surface |
Source of Authority |
Proposed Behavior |
Fallback |
Docs |
Evidence |
| Harness Neural Link projection boundary |
#13056 tool-surface design row + ADR 0020 co-habitation guardrails |
Embedded harness agents have an explicit boundary for receiving a curated Neural Link tool surface. |
Fail closed to no write/admin projection when authority context is absent. |
JSDoc on the boundary plus PR body Contract Ledger. |
Unit/static test proves embedded projection is narrower than the full developer surface. |
| Projection decision point |
ai/mcp/server/BaseServer.mjs, ai/mcp/ToolService.mjs, and/or ai/mcp/client/Client.mjs |
One named hook or method owns projection; callers do not duplicate per-harness allowlists. |
If the final design chooses a generated artifact, generation is still derived from the OpenAPI source. |
PR body names the chosen boundary and rejected alternatives. |
Test proves changing the source contract changes or invalidates the projection. |
#13082 consumer interface |
#13064 tier contract, after PR #13078 lands |
The consumer leaf receives a stable interface instead of inventing filter/list/gate semantics. |
#13082 remains blocked until this boundary and #13064 are present on dev. |
Comment on #13082 links this dependency. |
Native blocked_by relationship from #13082 to this ticket. |
| Full developer surface |
Existing Neural Link MCP server behavior |
Operator/developer use keeps the full current tool surface unless explicitly routed through the harness projection boundary. |
Do not silently narrow existing local developer MCP sessions. |
PR body distinguishes developer surface from embedded-agent projection. |
Regression test proves default local server list remains full. |
Decision Record Impact
Aligned-with ADR 0020. This ticket implements one of the #13056 curated tool-surface prerequisites and does not amend the harness concept. It should not redefine Topological Locking, Bridge-token auth, or admin authority; those remain separate leaves under #13056.
Acceptance Criteria
Out of Scope
- Implementing the tier-map consumer itself; that remains #13082.
- Changing the tier taxonomy from #13064 / PR
#13078.
- Implementing Topological Locking.
- Implementing identity-bound Bridge-token auth.
- Granting admin authority to embedded agents.
- Changing the full local developer Neural Link MCP surface by default.
Avoided Traps
- Speculative consumer first — rejected because no receiving boundary exists for
#13082 yet.
- Private allowlist drift — rejected unless generated from the OpenAPI source-of-authority and validated.
- Full surface then call-time denial only — must be defended if chosen, because
tools/list visibility itself is part of the harness agent contract.
- Bundling auth/locking/admin policy — rejected; this ticket defines the projection boundary and fails closed until sibling authorities exist.
Related
Parent: #13056
Blocks #13082
Blocked by #13064
Refs #13078
Retrieval Hint: "Neural Link harness tool projection boundary embedded agents tools/list call_tool generated manifest x-neo-tool-tier"
Context
Grace's A2A dependency finding on
#13082exposed a sharper blocker than the original consumer leaf captured: the Neural Link tier metadata can be consumed only after the harness has an explicit boundary where embedded agents receive a projected tool surface.Release classification: post-release harness line; this sequencing ticket is not v13 release-gating.
The Problem
#13082was filed as the consumer of the Neural Link tier contract, but live V-B-A shows there is no projection boundary for that consumer to attach to yet. Without this boundary, implementation choices collapse into speculation:tools/listat handshake time,call_toolper request while still listing the full surface,Those options imply different signatures and authority contexts. Building the
#13082consumer before deciding the boundary would create another declarative-but-unconsumed function one layer up.The Architectural Reality
V-B-A before filing:
ai/mcp/server/neural-link/Server.mjs:48-55advertises static MCP capabilities withtools: {listChanged: false}; it does not project by agent identity or harness mode.ai/mcp/server/BaseServer.mjs:285-305returns every listed tool from the server tool service;BaseServer.mjs:341-342dispatches calls without a projection-policy hook.ai/mcp/client/Client.mjs:270-279consumeslistTools()as the full dynamic proxy set for a client connection.ai/mcp/ToolService.mjs:98-151parses OpenAPI operations into the MCPtools/listpayload, but on currentdevit has no projection output mode.x-neo-tool-tier,toolProjection, and harness projection terms underai/found no existing projection consumer or boundary.knowledgeBase:null; healthcheck details: requested resource not found), so this ticket does not rely on KB silence.#13078tier-contract review context and no prior implemented boundary.[lane-claim]or[lane-intent]exists for the boundary ticket.The Fix
Define and implement the Neural Link harness projection boundary before
#13082consumes the tier contract.Expected shape:
#13082can mechanically derive default visibility fromx-neo-harness-tool-projection/x-neo-tool-tierwithout choosing the embedding interface itself.tools/list,call_tool, a generated manifest, or a named hybrid, with the authority context passed through the boundary.ToolService,BaseServer, orClient) rather than adding a parallel allowlist subsystem.Contract Ledger Matrix
ai/mcp/server/BaseServer.mjs,ai/mcp/ToolService.mjs, and/orai/mcp/client/Client.mjs#13082consumer interface#13078lands#13082remains blocked until this boundary and #13064 are present ondev.#13082links this dependency.blocked_byrelationship from#13082to this ticket.Decision Record Impact
Aligned-with ADR 0020. This ticket implements one of the #13056 curated tool-surface prerequisites and does not amend the harness concept. It should not redefine Topological Locking, Bridge-token auth, or admin authority; those remain separate leaves under #13056.
Acceptance Criteria
#13082can consumex-neo-harness-tool-projection/x-neo-tool-tierafter #13064 lands.tools/list,call_tool, generated manifest, or hybrid) and why the rejected shapes were not chosen.Out of Scope
#13078.Avoided Traps
#13082yet.tools/listvisibility itself is part of the harness agent contract.Related
Parent: #13056 Blocks #13082 Blocked by #13064 Refs #13078
Retrieval Hint: "Neural Link harness tool projection boundary embedded agents tools/list call_tool generated manifest x-neo-tool-tier"