Repository navigation
fix(mcp): accept wiki_doc in the proxy search type enum [mcp-server, scripts, docs, tests] - #193
Conversation
…scripts, docs, tests] (#181) `search` の `type` に `wiki_doc` を渡すと validation error になり、wiki ページだけに 絞った検索ができなかった。原因は Worker 側 (`src/mcp.ts`) では #129 以降 enum に `wiki_doc` が入っていたのに、クライアントが実際に検証に使う proxy 側の静的ミラーが 古いままだったこと。MCP クライアントは proxy の schema で引数を検証するため、値は Worker に届く前に弾かれていた。 変更点: - proxy の `search` schema を `mcp-server/server/tools.js` に切り出し、`type` enum に `wiki_doc` を追加。tool 説明と `include_content` 説明も wiki surface に合わせて更新。 切り出しの理由は、stdio transport に接続する `index.js` を import せずに schema を テストできるようにするため。 - `scripts/check-schema-drift.mjs` を param 名だけでなく enum の値も比較するよう拡張。 名前だけの比較だったことが今回の drift を見逃した直接の原因なので、CI gate 側を塞ぐ。 - テスト追加: proxy schema の `type` enum を固定 (`mcp-server/test/search-tool-schema.test.js`)、 および FTS 側で `type: "wiki_doc"` の絞り込みと未指定時の結果不変を固定。 - docs の schema mirror 記述を新しいパスと 2 軸比較に更新。 Worker 側の絞り込み経路 (scan / dense / sparse) は既に `wiki_doc` を扱えており、 `type` 未指定・`all` の結果集合は変更していない。 Refs #181 Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Deploying with
|
| Status | Name | Latest Commit | Updated (UTC) |
|---|---|---|---|
| ✅ Deployment successful! View logs |
github-rag-mcp | 542ddc2 | Aug 01 2026, 09:59 AM |
liplus-lin-lay
left a comment
There was a problem hiding this comment.
AI self-review (auto mode)
now
なし。ローカルで drift check / node 95 件 / workers 38 件 / mcp-server 10 件 / tsc --noEmit / wrangler --dry-run を通し、CI も green。退行方向の確認として proxy から wiki_doc を一時的に外し、drift check が exit 1 で落ちることを実地で確認済み(確認後に復元)。
later
README.ja.mdのinclude_content説明が wiki content fetch に触れていない(英語 README は記載済み)。本 issue の範囲外なので別 issue 相当。- proxy schema の切り出しで
mcp-server/server/tools.jsが新設されたため、schema を追う人の入口が 1 つ増えた。drift check とテストが両側を縛るので実害は無いと判断。
accepted
- schema ミラーは引き続き手動保守。tools/list を Worker に転送しない設計(起動時 auth/network 不要)を維持するための既定のトレードオフで、CI gate を 2 軸に強化することで受容している。
- テストは proxy schema の構造 (
TOOLS[0].inputSchema) に依存する。実際に MCP クライアントが検証に使う形そのものなので、この結合は意図的。
リリース種別の判断
patch。ユーザから観測される修正だが、変更規模は既存 enum への値追加 + CI gate の比較軸追加であり、構造的な大規模変更ではない。
liplus-lin-lay
left a comment
There was a problem hiding this comment.
AI self-review (parent, auto mode)
親側で独立に確認した点:
- 診断が正しい面を指しているか —
src/mcp.ts:164の enum にはwiki_docが既に入っている。一方 merge 前のmcp-server/server/index.jsの enum には無い。したがって worker 側は無罪で、拒否していたのは proxy の静的ミラーという本 PR の見立ては合っている。 - クライアントがどちらを見ているか — Claude Desktop の設定は
npx -y github-rag-mcp@latest+RAG_WORKER_URLで、proxy 経由。tools/listは proxy のミラーから返るため、type: "wiki_doc"は worker に届く前に弾かれていた。#181 の調査で 6 経路を要したのもこれが理由。 - drift check の二軸化 — 名前軸に加えて enum 値軸を集合比較。
typeの enum が両側で 5 件未満なら exit 2 する sanity guard が入っており、抽出器が構造変更で空を返した時に「空 == 空」で素通りしない。旧実装が本欠陥を見逃した原因(名前しか比べていない)を塞いでいる。 - 退行方向の確認(proxy から
wiki_docを外すと drift check が exit 1)は実行者側で実測済み。
完了条件との対応: type: "wiki_doc" が validation を通る / all と無指定の結果が不変(src/fts.workers.test.ts の新ケースで固定)/ テストで固定(proxy 側は 10 値 enum を pin)/ 説明と docs に反映、すべて満たしている。
版種別: patch。実行者の提案に同意する。ユーザー観測可能な変更ではあるが増分の範囲で、構造変更ではない。
運用上の注意(マージだけでは閉じない点): proxy は npm パッケージとして配布され、.github/workflows/cd.yml は release イベントで publish する。したがってクライアント側で type: "wiki_doc" が使えるようになるのは release を切って @latest が更新された後。release は human gate なので本 PR では触らない。
CI: test / CI / Workers Builds すべて green、mergeStateStatus CLEAN。マージする。
Closes #181
何が起きていたか
searchのtypeにwiki_docを渡すと validation error になり、wiki ページだけに絞った検索・走査ができなかった。原因は Worker と proxy のズレ。Worker 側 (
src/mcp.ts) は #129 以降 enum にwiki_docを持っているが、クライアントがtools/listで受け取り引数検証に使う proxy 側の静的ミラーが古いままだった。MCP クライアントは proxy の schema で検証するため、値は Worker に届く前に弾かれていた。Worker 側の絞り込み経路 (scan / dense / sparse) は元からwiki_docを扱えている。既存の drift check (
scripts/check-schema-drift.mjs) が見逃したのは、比較していたのが param の名前だけで enum の値を見ていなかったため。変更点
searchschema をmcp-server/server/tools.jsに切り出し、typeenum にwiki_docを追加。tool 説明とinclude_content説明も wiki surface に合わせた。切り出しの理由は、stdio transport へ接続してしまうindex.jsを import せずに schema をテストできるようにするため。typeenum が取れなければ exit 2 する sanity guard も追加。mcp-server/test/search-tool-schema.test.js—typeenum の全 10 値(wiki_doc/allを含む)と説明文の wiki 言及。src/fts.workers.test.ts— 同一 repo にdocとwiki_docを入れ、type: "wiki_doc"で wiki だけに絞れること、およびtype未指定なら従来どおり両方返ることを固定。docs/0-requirements.md/.ja.md) の schema mirror 記述を新しいパスと 2 軸比較に更新。検証
wiki_docを一時的に外すと drift check がenum values missing in proxy for "type": wiki_docで exit 1 になることを実地で確認(確認後に復元)。node scripts/check-schema-drift.mjs/npm test(node 95 + workers 38)/mcp-server側npm test(10)/npx tsc --noEmit/npx wrangler deploy --dry-runすべて通過。制約の充足
type未指定・type: "all"の結果集合は変更していない(wiki_docは元からallに含まれる)。既存のtype値の挙動も変更なし。補足(本 PR 範囲外)
README.ja.mdのinclude_content説明が doc のみに触れており wiki content fetch が未記載(英語 README には記載あり)。本 issue の範囲外なので触っていない。🤖 Generated with Claude Code