Skip to content

MCP実クライアントQA

この手順では、実クライアントの手動QAとCIで自動化できるprotocol testを 分離します。token、PAT、literal credentialを含む設定や生logはcommitしません。

正式な接続経路

Client今回使うtransportCredentialの渡し方
Codex CLIremote Streamable HTTP継承した環境変数からbearerを参照
Claude Desktoplocal stdio adapteropenface-mcp-stdioが制限付きtoken fileを読む
VS Coderemote Streamable HTTP公式mcp.jsonのpassword input

Codexではtoken値をcommand lineに置かず登録します。

powershell
$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_TOKEN

Claude 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を登録します。

json
{
  "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 guideVS Code MCP referenceClaude Desktop local server guideClaude remote connector guide と照合しています。

手動チェック

  1. clientごとに別の短期service credentialを発行します。
  2. token値やtoken file内容を残さず、client/OS/server revision/実行日時を記録します。
  3. initialize、Tools、Resources、限定されたreadを1件確認します。AIへpromptを送るより、 client nativeのresource browserを優先します。
  4. valid、scope不足、expired、revoked、invalidをprotocol levelで再確認します。 lifecycle不正はinitialize前の401が期待値です。scope不足ではgovernance上 許可済みのsearch_catalogをrepository-only credentialで呼び、 catalog:read不足という特定のdenialを確認します。
  5. 2 instance構成で片方を外し、gateway resolver間隔後に同じ設定でreadします。 復旧後にもう片方でも繰り返し、clientの再設定やsticky sessionが不要と確認します。
  6. commit前にsanitized summaryへcredentialが混入していないかscanします。
  7. Git外の制限付きdirectoryへnative raw logを保存し、全QA credentialとの exact match scan後、byte count、SHA-256、sanitized stateだけをcommitします。
bash
bash openface-mcp/scripts/provision_live_client_qa.sh
python openface-mcp/scripts/run_live_client_protocol.py --help

provisionerは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で実行した結果は次のとおりです。

ClientNative結果未完了事項
Codex CLI 0.146.026 tools、1 resource、9 resource templatesを列挙し、OpenAPI resource read、限定catalog read、scope不足、invalidを確認このread-only経路ではなし
Claude Desktop 1.19367.0.0initialize、Tools、Prompts、Resourcesとinvalid startup rejectionを確認native representative readはpending。Claude promptは未送信
VS Code 1.129.1native 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に保存します。再現時は次の順序を守ります。

  1. token値を含めずnative出力のoriginal bytesを保存します。
  2. revoke前に、全raw artifactを全unique QA credentialとexact match scanします。
  3. Gitにはsource label、byte count、SHA-256、sanitized stateだけを記録し、path、 log、screenshot、token、client設定はcommitしません。
  4. temporary credentialをrevokeし、active QA credentialが0件であること、client設定の 復元、両replicaのhealthyを確認します。

Sanitized result、HA phase identity、raw hashは docs/evidence/issues/130/にあります。

Released under the MIT License. Third-party components retain their own licenses.