yoi/.yoi/tickets/00001KVHR3WS6/item.md

46 lines
1.8 KiB
Markdown

---
title: 'MCP: register server tools into ToolRegistry'
state: 'ready'
created_at: '2026-06-20T05:30:04Z'
updated_at: '2026-06-20T05:33:03Z'
assignee: null
readiness: 'implementation_ready'
risk_flags: ['mcp', 'tools-list', 'tool-registry', 'schema', 'untrusted-metadata']
---
## Background
Once a configured MCP stdio server can initialize, Yoi should expose discovered MCP tools as ordinary model-visible Yoi tools through the existing ToolRegistry path. Server-provided tool metadata and schemas are untrusted data.
This Ticket only registers tools discovered through `tools/list`. It does not implement `tools/call` execution.
## Requirements
- Call MCP `tools/list` after initialize where supported.
- Handle pagination / bounded listing.
- Normalize MCP tool names into stable namespaced Yoi tool names that include server namespace.
- Validate/normalize tool descriptions and input schemas as untrusted metadata.
- Reject invalid schemas, duplicate names, and collisions fail-closed with diagnostics.
- Register contributions through `pod::feature` / normal ToolRegistry path; no private MCP bypass.
- Do not register resources/prompts in this Ticket.
## Acceptance criteria
- MCP mock server tool appears as model-visible Yoi tool with stable namespaced name.
- Invalid schema is rejected with bounded diagnostic.
- Duplicate/colliding names are rejected fail-closed.
- Server metadata cannot weaken Yoi instructions/scope/permissions.
- No `tools/call` request is sent during registration.
- Tests cover valid registration, pagination/bounds, invalid schema, duplicate/collision, and untrusted metadata normalization.
## Non-goals
- MCP tool execution.
- Resources/prompts operations.
- list_changed notifications.
## Related work
- Depends on `00001KVHR3WRY`.
- Objective: `00001KTR80WMN`.