Skip to content

feat(oauth): surface device flow URL via auto-browser + auth-required tool response #207

@liplus-lin-lay

Description

@liplus-lin-lay

目的

v0.11.0 の device authorization grant 導入後、初回認証時に URL とコードがユーザに届かず、ツール呼び出しが 10 分でタイムアウトするだけで終わってしまう状態になっている。v0.10.x までの auto-browser 動作と同等以上の UX を取り戻し、「普通にツールを呼び出す → 認証が完走する」体験を回復させる。

前提

  • 現在の mcp-server/server/index.js は device flow 起動時に user_codeverification_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.spawnstart / 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)

関連

Metadata

Metadata

Labels

enhancementNew feature or requestreadybody converged for implementation

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions