MCP実クライアントQA
この手順では、実クライアントの手動QAとCIで自動化できるprotocol testを 分離します。token、PAT、literal credentialを含む設定や生logはcommitしません。
正式な接続経路
| Client | 今回使うtransport | Credentialの渡し方 |
|---|---|---|
| Codex CLI | remote Streamable HTTP | 継承した環境変数からbearerを参照 |
| Claude Desktop | local stdio adapter | openface-mcp-stdioが制限付きtoken fileを読む |
| VS Code | remote Streamable HTTP | 公式mcp.jsonのpassword input |
Codexではtoken値をcommand lineに置かず登録します。
$env:OPENFACE_MCP_TOKEN = (Get-Content $env:OPENFACE_MCP_TOKEN_FILE -Raw).Trim()
codex mcp add openface --url https://openface.example/mcp `
--bearer-token-env-var OPENFACE_MCP_TOKENClaude Desktopのremote custom connectorはauthlessまたはOAuth用で、static Bearer欄はありません。local stdio commandを使う前にverified host packageを installします(このcheckoutなら python -m pip install --upgrade ./openface-mcp、 またはverified wheel)。非secret設定を検証した上で、 %APPDATA%\Claude\claude_desktop_config.jsonにlocal stdio adapterを登録します。
{
"mcpServers": {
"openface": {
"command": "openface-mcp-stdio",
"env": {
"OPENFACE_MCP_REMOTE_URL": "https://openface.example/mcp",
"OPENFACE_MCP_CLIENT_TOKEN_FILE": "C:\\restricted\\openface.token"
}
}
}
}変更後はClaude Desktopを完全終了して再起動します。Windowsのpackaged版では、 unpackaged版のpathを決め打ちせず、app packageのLocalCache配下にある実効 Roaming pathを確認してください。
VS Codeではopenface-mcp/examples/vscode-mcp.json を.vscode/mcp.jsonまたはuser profileへコピーし、<OPENFACE_HOST> のhost placeholderだけを自分のdeploymentへ置き換えます。templateの/mcp pathは残し、 password inputは残し、 literal tokenへ置換してはいけません。
設定schemaはCodex MCP guide、 VS Code MCP reference、 Claude Desktop local server guide、 Claude remote connector guide と照合しています。
手動チェック
- clientごとに別の短期service credentialを発行します。
- token値やtoken file内容を残さず、client/OS/server revision/実行日時を記録します。
- initialize、Tools、Resources、限定されたreadを1件確認します。AIへpromptを送るより、 client nativeのresource browserを優先します。
- valid、scope不足、expired、revoked、invalidをprotocol levelで再確認します。 lifecycle不正はinitialize前の
401が期待値です。scope不足ではgovernance上 許可済みのsearch_catalogをrepository-only credentialで呼び、catalog:read不足という特定のdenialを確認します。 - 2 instance構成で片方を外し、gateway resolver間隔後に同じ設定でreadします。 復旧後にもう片方でも繰り返し、clientの再設定やsticky sessionが不要と確認します。
- commit前にsanitized summaryへcredentialが混入していないかscanします。
- Git外の制限付きdirectoryへnative raw logを保存し、全QA credentialとの exact match scan後、byte count、SHA-256、sanitized stateだけをcommitします。
bash openface-mcp/scripts/provision_live_client_qa.sh
python openface-mcp/scripts/run_live_client_protocol.py --helpprovisionerはGit外のroot-only fileへcredentialを保存し、secret-freeな件数だけを 出力します。protocol runnerはtoken fileを読み、期待する認証失敗も検証し、summary にcredentialが現れた場合は失敗します。CIはこのprotocol behaviorを検証できますが、 desktop UIやscreenshotの確認済みとは扱いません。
Issue #130のversion付き実行結果
2026-08-02 JSTにpublic 2-replica endpointで実行した結果は次のとおりです。
| Client | Native結果 | 未完了事項 |
|---|---|---|
| Codex CLI 0.146.0 | 26 tools、1 resource、9 resource templatesを列挙し、OpenAPI resource read、限定catalog read、scope不足、invalidを確認 | このread-only経路ではなし |
| Claude Desktop 1.19367.0.0 | initialize、Tools、Prompts、Resourcesとinvalid startup rejectionを確認 | native representative readはpending。Claude promptは未送信 |
| VS Code 1.129.1 | native MCP managerのRunning、tool discovery、OpenAPI resourceのread-only open、scope/invalid切替を確認 | このread-only経路ではなし |
HA確認では各replicaを順番にsole backendにし、同じconfiguration fingerprintを 使いました。session headerやsticky cookieなしでinitialize、Tools、Resources、 representative readが各phaseの想定replicaだけを返し、終了後は両replicaをhealthyへ 復旧しました。
Raw artifactはGit外の制限付きdirectoryに保存します。再現時は次の順序を守ります。
- token値を含めずnative出力のoriginal bytesを保存します。
- revoke前に、全raw artifactを全unique QA credentialとexact match scanします。
- Gitにはsource label、byte count、SHA-256、sanitized stateだけを記録し、path、 log、screenshot、token、client設定はcommitしません。
- temporary credentialをrevokeし、active QA credentialが0件であること、client設定の 復元、両replicaのhealthyを確認します。
Sanitized result、HA phase identity、raw hashは docs/evidence/issues/130/にあります。
