# 実働MCP検証レビュー

## 目的

CodexにRemote MCP URLを登録したユーザーが、`get_started` から `publish_certificate` まで実際に進められるかを検証し、実働で見つかった不具合を再発防止できる形にする。

## 実働で見つかった改善点

1. `tools/list` の `inputSchema` が弱い
   - 現象: Codexが `publish_certificate` の引数を安定して組み立てられず、モデルが「引数を入れられるか分からない」と迷う。
   - 対応: `publish_certificate` は `records` と `confirmation` を必須化し、`source_integrity`、`resume_owner_name`、`source_scan_coverage`、`selected_sources` などをschemaに明示する。

2. MCPツール内エラーがJSON-RPCではなかった
   - 現象: `confirmation` 不足や品質ゲート失敗時にHTTP 400/422のRESTエラーが返り、Codex MCPクライアント側では `response body decode error` になった。
   - 対応: `tools/call` 内の失敗はHTTP 200のJSON-RPC `error` として返す。REST API側のHTTPステータスは維持する。

3. 公開ページに第三者個人名または内部置換語が出る
   - 現象: `佐藤花子さんの...` のような連体形で個人名が残る、または `[個人名非表示]` が公開文面に残る。
   - 対応: `個人名 + さん/様/氏/さま + の` を検出し、公開文では「関係者」に自然化する。公開API、MCP返却、HTML表示で同じ禁止語検査を行う。

4. MCP publish返却が保存前の詳細に寄りすぎる
   - 現象: 公開APIはサニタイズされるが、MCP返却に生に近いproject summaryや画像data URLが残る余地があった。
   - 対応: `publish_certificate` の返却は公開サニタイズ済み証明書に統一し、MCPレスポンスから `screenshotDataUrl`、`capturedAt`、`viewport` を除外する。

5. 公開できるプロジェクトが0件でも公開される
   - 現象: 提案止まり、単発更新、弱い案件が公開ページとして生成される可能性があった。
   - 対応: サーバー再分析後に `project_summaries` が空なら `publishable_project_required` で止める。

6. 実働回帰が手作業だった
   - 現象: CodexからのMCP呼び出し、公開ページHTTP確認、個人名漏れ確認を毎回手作業で再現していた。
   - 対応: `scripts/verify-remote-mcp.mjs` を追加し、互換性チェックと10ケース公開回帰をコマンド化する。

## 実装済みの再発防止

- `npm run check`
  - Node/PHP互換テスト、公開サニタイズ、MCPエラー応答、空プロジェクト公開拒否を確認する。
- `npm run verify:remote-mcp`
  - 本番Remote MCPに対し、`tools/list` schema、`get_started`、不正publishのJSON-RPCエラーを非破壊で確認する。
- `npm run verify:remote-mcp:publish`
  - 本番Remote MCPに対し、10ケースの公開回帰を行う。
  - 含むケース: 請求済み案件、Slack併用の継続案件、提案止まり拒否、単発更新拒否、同一会社の別プロジェクト分割、Figma/GitHub複合、長期ギャップ統合、1メール複数案件分割、会社/サービス名保持、制作プラグイン成果物。
  - 各公開URLについてAPI 200、HTML 200、第三者個人名、メールアドレス、内部置換語の非表示を確認する。

## 運用メモ

- `PROOF_FINDER_MCP_URL` を指定すると任意の環境へ向けられる。

```powershell
$env:PROOF_FINDER_MCP_URL = "https://matchmatrix.app/api/mcp"
npm run verify:remote-mcp
npm run verify:remote-mcp:publish
```

- `verify:remote-mcp:publish` は公開スモーク証明書を作成するため、検証用環境か公開して問題のない合成データだけで実行する。
