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
No fields configured for issues without a type.

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions