From a8f058c7927a6963e7002bb18d3db918a63dacb9 Mon Sep 17 00:00:00 2001 From: Hare Date: Sat, 20 Jun 2026 22:30:19 +0900 Subject: [PATCH] ticket: add mcp cli inspection --- .yoi/tickets/00001KVJKHAFE/artifacts/.gitkeep | 0 .../00001KVJKHAFE/artifacts/relations.json | 45 +++++++++++++++ .yoi/tickets/00001KVJKHAFE/item.md | 55 +++++++++++++++++++ .yoi/tickets/00001KVJKHAFE/thread.md | 24 ++++++++ 4 files changed, 124 insertions(+) create mode 100644 .yoi/tickets/00001KVJKHAFE/artifacts/.gitkeep create mode 100644 .yoi/tickets/00001KVJKHAFE/artifacts/relations.json create mode 100644 .yoi/tickets/00001KVJKHAFE/item.md create mode 100644 .yoi/tickets/00001KVJKHAFE/thread.md diff --git a/.yoi/tickets/00001KVJKHAFE/artifacts/.gitkeep b/.yoi/tickets/00001KVJKHAFE/artifacts/.gitkeep new file mode 100644 index 00000000..e69de29b diff --git a/.yoi/tickets/00001KVJKHAFE/artifacts/relations.json b/.yoi/tickets/00001KVJKHAFE/artifacts/relations.json new file mode 100644 index 00000000..88c168af --- /dev/null +++ b/.yoi/tickets/00001KVJKHAFE/artifacts/relations.json @@ -0,0 +1,45 @@ +{ + "version": 1, + "relations": [ + { + "ticket_id": "00001KVJKHAFE", + "kind": "related", + "target": "00001KVHR3WRF", + "note": "CLI inspection reads resolved MCP server config/trust policy", + "author": "yoi ticket", + "at": "2026-06-20T13:30:15Z" + }, + { + "ticket_id": "00001KVJKHAFE", + "kind": "related", + "target": "00001KVHR3WRY", + "note": "CLI inspection reports lifecycle/client initialization diagnostics", + "author": "yoi ticket", + "at": "2026-06-20T13:30:15Z" + }, + { + "ticket_id": "00001KVJKHAFE", + "kind": "related", + "target": "00001KVHR3WS6", + "note": "CLI tools output reports provider-discovered ToolRegistry registration eligibility", + "author": "yoi ticket", + "at": "2026-06-20T13:30:16Z" + }, + { + "ticket_id": "00001KVJKHAFE", + "kind": "related", + "target": "00001KVHR3WSN", + "note": "CLI resources/prompts output reports explicit operation eligibility", + "author": "yoi ticket", + "at": "2026-06-20T13:30:16Z" + }, + { + "ticket_id": "00001KVJKHAFE", + "kind": "related", + "target": "00001KVHR3WSW", + "note": "CLI shows list_changed refresh/reinitialize diagnostics", + "author": "yoi ticket", + "at": "2026-06-20T13:30:16Z" + } + ] +} diff --git a/.yoi/tickets/00001KVJKHAFE/item.md b/.yoi/tickets/00001KVJKHAFE/item.md new file mode 100644 index 00000000..d43a8abb --- /dev/null +++ b/.yoi/tickets/00001KVJKHAFE/item.md @@ -0,0 +1,55 @@ +--- +title: 'MCP: add yoi CLI inspection commands' +state: 'ready' +created_at: '2026-06-20T13:29:16Z' +updated_at: '2026-06-20T13:30:16Z' +assignee: null +--- + +## 背景 + +MCP local stdio integration は server config / lifecycle client / ToolRegistry registration / tools-call / resources-prompts explicit operations / list_changed diagnostics まで進んだ。一方で、ユーザーが `yoi` CLI から MCP の設定・解決結果・接続状態・discovered capabilities を確認する read-only inspection surface がまだ整理されていない。 + +Plugin には `yoi plugin list/show` があるが、MCP は plugin model そのものではなく protocol-bound bridge/runtime kind として扱う決定になっている。そのため MCP には専用の CLI namespace を用意し、設定済み server と provider-discovered tools/resources/prompts、起動/初期化/refresh diagnostics を確認できるようにする。 + +## 要件 + +- `yoi mcp ...` もしくは同等の top-level CLI namespace を追加する。 +- 初期 scope は read-only inspection とし、MCP server process の起動・Tool 実行・resources/prompts の content fetch は通常 runtime/tool path を迂回して行わない。 +- 最低限のコマンドを提供する。 + - `yoi mcp list` または `yoi mcp server list`: resolved MCP server の一覧。 + - `yoi mcp show `: server config/ref、transport、trust policy、resolved status、diagnostics、capability summary。 + - `yoi mcp tools []`: provider-discovered MCP tools と Yoi 側 stable tool name / registration eligibility / diagnostics。 + - `yoi mcp resources []`: discovered resources/resource templates の summary と explicit operation eligibility。 + - `yoi mcp prompts []`: discovered prompts の summary と explicit operation eligibility。 +- 各コマンドは human-readable output と `--json` を持つ。 +- `--workspace ` と `--profile ` を Plugin CLI と同じ感覚で扱い、resolved Profile/config から MCP server configuration を読む。 +- 出力は bounded / content-safe にする。 + - resource contents、prompt full text、secret values、environment secret refs の解決結果は表示しない。 + - external server 由来の descriptions/schema/annotations は untrusted data として扱い、必要なら truncate する。 +- 接続済み live Pod state が必要な情報と static config inspection だけで得られる情報を区別する。 + - static mode では config/resolution/package-less diagnostics を表示する。 + - live state が未実装または unavailable の場合は、silent stale state ではなく `not live / unavailable` を明示する。 +- `notifications/*/list_changed` 由来の restart/reinitialize-required diagnostics がある場合は CLI で見えるようにする。 +- CLI help に MCP namespace を追加する。 + +## Non-goals + +- MCP tool を CLI から直接実行すること。 +- MCP resources/prompts の content を CLI から直接取得して表示すること。 +- MCP server の install/update/distribution。 +- Streamable HTTP / remote auth / OAuth の実装。 +- sampling / elicitation の実行または approval flow。 +- Plugin CLI に MCP を混ぜること。 + +## 受け入れ条件 + +- `yoi --help` に MCP CLI namespace が表示される。 +- `yoi mcp list --json` が resolved MCP server の bounded structured report を返す。 +- `yoi mcp show --json` が server identity、transport kind、trust policy summary、capabilities summary、diagnostics を返す。 +- `yoi mcp tools [] --json` が Yoi stable tool name と MCP server/tool identity、schema availability、registration status/diagnostics を返す。 +- `yoi mcp resources [] --json` と `yoi mcp prompts [] --json` が content を取得せず summary/eligibility を返す。 +- Human-readable output は empty/missing/invalid/unavailable を区別して表示する。 +- Secrets and resource/prompt contents are not printed in normal or JSON output. +- Focused CLI tests cover list/show/tools/resources/prompts, missing server, invalid config, and JSON output. +- Validation before completion includes `cargo fmt --check`, focused MCP/CLI tests, `cargo check`, `git diff --check`, `yoi ticket doctor`, and `nix build .#yoi --no-link`. diff --git a/.yoi/tickets/00001KVJKHAFE/thread.md b/.yoi/tickets/00001KVJKHAFE/thread.md new file mode 100644 index 00000000..fb685410 --- /dev/null +++ b/.yoi/tickets/00001KVJKHAFE/thread.md @@ -0,0 +1,24 @@ + + +## 作成 + +LocalTicketBackend によって作成されました。 + +--- + + + +## Intake summary + +Marked ready by `yoi ticket state`. + +--- + + + +## State changed + +Marked ready by `yoi ticket state`. + + +---