ticket: close mcp tool registration

This commit is contained in:
Keisuke Hirata 2026-06-20 17:46:38 +09:00
parent 7abe13f23d
commit 381db88e33
No known key found for this signature in database
3 changed files with 96 additions and 2 deletions

View File

@ -1,8 +1,8 @@
--- ---
title: 'MCP: register server tools into ToolRegistry' title: 'MCP: register server tools into ToolRegistry'
state: 'done' state: 'closed'
created_at: '2026-06-20T05:30:04Z' created_at: '2026-06-20T05:30:04Z'
updated_at: '2026-06-20T08:46:10Z' updated_at: '2026-06-20T08:46:32Z'
assignee: null assignee: null
readiness: 'implementation_ready' readiness: 'implementation_ready'
risk_flags: ['mcp', 'tools-list', 'tool-registry', 'schema', 'untrusted-metadata'] risk_flags: ['mcp', 'tools-list', 'tool-registry', 'schema', 'untrusted-metadata']

View File

@ -0,0 +1,39 @@
## Resolution
`00001KVHR3WS6` を完了しました。
実装内容:
- MCP `tools/list` protocol result/tool types と bounded pagination helper を `crates/mcp` に追加しました。
- MCP stdio discovery feature module を `crates/pod` に追加しました。
- Configured stdio server を initialize し、bounded `tools/list` を呼び、server-provided tool metadata を untrusted data として検証・正規化して ToolRegistry contribution path に登録します。
- Tool names は server namespace を含む stable namespaced name例: `Mcp_<server>_<tool>`)に正規化されます。
- Invalid schema、duplicate/colliding normalized names は bounded diagnostics で fail-closed になります。Collision 時は該当 normalized identity は model-visible tool になりません。
- Server metadata / annotations / instructions は Yoi instructions, scope, permissions, system/developer instructions を弱める authority として扱いません。
- Registration は existing protocol-provider / ToolRegistry contribution path を通ります。
- This Ticket は `tools/call` execution を実装していません。Registered discovery-only stub は explicit not-implemented error を返し、MCP `tools/call` は送信しません。
- Resources/prompts/list_changed は実装していません。
主な commit:
- `66fa9d55 mcp: register stdio server tools`
- `0080c5b3 mcp: reject colliding tool names`
- `a1f904b8 merge: mcp tool registration`
Review:
- r1 は duplicate/colliding normalized MCP tool names が diagnostic-only で fail-closed でないため `request_changes`
- Coder が collision handling を修正し、該当 identity が model-visible にならない test を追加。
- r2 は `approve`
最終 validation:
- `cargo fmt --check`
- `git diff --check HEAD^1..HEAD`
- `cargo test -p mcp list_tools --test stdio_lifecycle`
- `cargo test -p pod feature::mcp --lib`
- `cargo test -p mcp`
- `cargo check -p pod -p mcp`
- `nix build .#yoi --no-link`
Package impact:
- `nix path-info -S .#yoi`: `113089912`
Validation log:
- `/run/user/1000/yoi/yoi-orchestrator/bash-output/bash-SnBew4.log`

View File

@ -346,3 +346,58 @@ Final state:
Implementation was merged into Orchestrator branch at `a1f904b8`, r2 review approved, and final Orchestrator validation passed: `cargo fmt --check`, `git diff --check HEAD^1..HEAD`, focused `mcp` and `pod feature::mcp` tests, `cargo check -p pod -p mcp`, and `nix build .#yoi --no-link`. Implementation was merged into Orchestrator branch at `a1f904b8`, r2 review approved, and final Orchestrator validation passed: `cargo fmt --check`, `git diff --check HEAD^1..HEAD`, focused `mcp` and `pod feature::mcp` tests, `cargo check -p pod -p mcp`, and `nix build .#yoi --no-link`.
--- ---
<!-- event: state_changed author: hare at: 2026-06-20T08:46:32Z from: done to: closed reason: closed field: state -->
## State changed
Ticket を closed にしました。
---
<!-- event: close author: hare at: 2026-06-20T08:46:32Z status: closed -->
## 完了
## Resolution
`00001KVHR3WS6` を完了しました。
実装内容:
- MCP `tools/list` protocol result/tool types と bounded pagination helper を `crates/mcp` に追加しました。
- MCP stdio discovery feature module を `crates/pod` に追加しました。
- Configured stdio server を initialize し、bounded `tools/list` を呼び、server-provided tool metadata を untrusted data として検証・正規化して ToolRegistry contribution path に登録します。
- Tool names は server namespace を含む stable namespaced name例: `Mcp_<server>_<tool>`)に正規化されます。
- Invalid schema、duplicate/colliding normalized names は bounded diagnostics で fail-closed になります。Collision 時は該当 normalized identity は model-visible tool になりません。
- Server metadata / annotations / instructions は Yoi instructions, scope, permissions, system/developer instructions を弱める authority として扱いません。
- Registration は existing protocol-provider / ToolRegistry contribution path を通ります。
- This Ticket は `tools/call` execution を実装していません。Registered discovery-only stub は explicit not-implemented error を返し、MCP `tools/call` は送信しません。
- Resources/prompts/list_changed は実装していません。
主な commit:
- `66fa9d55 mcp: register stdio server tools`
- `0080c5b3 mcp: reject colliding tool names`
- `a1f904b8 merge: mcp tool registration`
Review:
- r1 は duplicate/colliding normalized MCP tool names が diagnostic-only で fail-closed でないため `request_changes`
- Coder が collision handling を修正し、該当 identity が model-visible にならない test を追加。
- r2 は `approve`
最終 validation:
- `cargo fmt --check`
- `git diff --check HEAD^1..HEAD`
- `cargo test -p mcp list_tools --test stdio_lifecycle`
- `cargo test -p pod feature::mcp --lib`
- `cargo test -p mcp`
- `cargo check -p pod -p mcp`
- `nix build .#yoi --no-link`
Package impact:
- `nix path-info -S .#yoi`: `113089912`
Validation log:
- `/run/user/1000/yoi/yoi-orchestrator/bash-output/bash-SnBew4.log`
---