目的
v0.11.0 の device authorization grant 導入後、初回認証時に URL とコードがユーザに届かず、ツール呼び出しが 10 分でタイムアウトするだけで終わってしまう状態になっている。v0.10.x までの auto-browser 動作と同等以上の UX を取り戻し、「普通にツールを呼び出す → 認証が完走する」体験を回復させる。
前提
- 現在の
mcp-server/server/index.js は device flow 起動時に user_code と verification_uri を stderr に書き出し、その後 expires_in 秒(既定 600s)polling する。
- Claude Code / Claude Desktop いずれの MCP transport も、ツール呼び出し中の MCP サーバー stderr をチャット UI には露出しない(main.log の
[UtilityProcess stderr] には残る)。
verification_uri_complete にはコード事前入力済み URL が入る。RFC 8628 に準拠して Worker 側が返している。
- v0.10.x では stderr に
Opening browser for authentication... のログがあり、自動でブラウザを開いていた挙動が main.log に残っている(2026-04-18 02:06:15)。
- device flow は MCP 既定の OAuth 自動ハンドリング(
mcp-needs-auth-cache.json 経路)の対象外で、MCP サーバー自身がプロンプト露出を担う必要がある。
- 同じ device flow コードは TypeScript 側
local-mcp/src/index.ts にも複製されており、両者を同時に直す必要がある。
制約
- stdio transport を維持する(ブラウザに
stdout を汚さない)。
- tokens 形式 (
flow: device_authorization_grant) と保存先 (~/.github-webhook-mcp/oauth-tokens.json) は変更しない。
- Worker 側の変更は不要(サーバーの表面だけを直す)。
- 先頭ツール呼び出し内で 600s ブロックする挙動は避ける。code を返したあと、ユーザーの承認待ちはバックグラウンド(次回呼び出しで再利用)または早期エラー返却で制御する。
- mcp-server と local-mcp の双方を同一 PR で揃える。
実装方針
A-1 ブラウザ自動オープン
performOAuthFlow() 内で requestDeviceAuthorization() 成功直後、verification_uri_complete が存在すればそれを優先、なければ verification_uri を platform 既定のブラウザで開く。
- Windows/macOS/Linux 対応:
child_process.spawn で start / open / xdg-open を使う。失敗しても fatal にしない(stderr ログに残すのみ)。
A-2 tool 応答で auth-required を返す
- 初回呼び出し時に device flow を起動したら、ポーリングを開始したうえで即座に構造化エラー(
isError: true の tool result)を返し、本文に verification_uri_complete / user_code / 有効期限を含める。Claude Code がツール結果としてチャットに表示する形。
- 2 回目以降のツール呼び出しでは、キャッシュされた device flow の結果(完了または未完了)を参照し、完了していれば通常処理、未完了なら同じ auth-required メッセージを返す(ポーリングは 1 本のまま)。
target files
mcp-server/server/index.js (主変更)
local-mcp/src/index.ts (同期変更)
docs/0-requirements.ja.md, docs/0-requirements.md (device flow UX 要件追記)
docs/installation.ja.md, docs/installation.md (初回認証の体験説明)
mcp-server/test/ (該当テスト追加 or 更新)
mcp-server/package.json / mcp-server/server.json / manifest.json (0.11.1 に version bump)
関連
目的
v0.11.0 の device authorization grant 導入後、初回認証時に URL とコードがユーザに届かず、ツール呼び出しが 10 分でタイムアウトするだけで終わってしまう状態になっている。v0.10.x までの auto-browser 動作と同等以上の UX を取り戻し、「普通にツールを呼び出す → 認証が完走する」体験を回復させる。
前提
mcp-server/server/index.jsは device flow 起動時にuser_codeとverification_uriを stderr に書き出し、その後 expires_in 秒(既定 600s)polling する。[UtilityProcess stderr]には残る)。verification_uri_completeにはコード事前入力済み URL が入る。RFC 8628 に準拠して Worker 側が返している。Opening browser for authentication...のログがあり、自動でブラウザを開いていた挙動が main.log に残っている(2026-04-18 02:06:15)。mcp-needs-auth-cache.json経路)の対象外で、MCP サーバー自身がプロンプト露出を担う必要がある。local-mcp/src/index.tsにも複製されており、両者を同時に直す必要がある。制約
stdoutを汚さない)。flow: device_authorization_grant) と保存先 (~/.github-webhook-mcp/oauth-tokens.json) は変更しない。実装方針
A-1 ブラウザ自動オープン
performOAuthFlow()内でrequestDeviceAuthorization()成功直後、verification_uri_completeが存在すればそれを優先、なければverification_uriを platform 既定のブラウザで開く。child_process.spawnでstart/open/xdg-openを使う。失敗しても fatal にしない(stderr ログに残すのみ)。A-2 tool 応答で auth-required を返す
isError: trueの tool result)を返し、本文にverification_uri_complete/user_code/ 有効期限を含める。Claude Code がツール結果としてチャットに表示する形。target files
mcp-server/server/index.js(主変更)local-mcp/src/index.ts(同期変更)docs/0-requirements.ja.md,docs/0-requirements.md(device flow UX 要件追記)docs/installation.ja.md,docs/installation.md(初回認証の体験説明)mcp-server/test/(該当テスト追加 or 更新)mcp-server/package.json/mcp-server/server.json/manifest.json(0.11.1 に version bump)関連