活用事例一覧へ
2026年7月27日開発・エンジニアリング検証時期:2026年4月

ブラウザ版ClaudeからGitHubに書き込む|OAuthの制約を自作MCPサーバーで回避する【AI活用検証vol.65】

ブラウザ版ClaudeからGitHubに書き込む|OAuthの制約を自作MCPサーバーで回避する【AI活用検証vol.65】

ブラウザ版・スマホ版のClaudeからGitHubを操作したい——読み取りだけなら公式のGitHub MCPをOAuthで接続すればすぐに使えます。しかし書き込みは通りません。

この検証では、その制約の正体を特定し、自作のCloudflare Workers版MCPサーバー+Fine-grained PATという構成で回避しました。結果として「ブランチ作成 → ファイルコミット → PR作成」のフルサイクルをclaude.aiから一気通貫で実行できることを確認しています。

この検証の概要

検証日

2026年4月15日(1日で完結)

対象

GitHub Remote MCP Server(公式 + 自作Cloudflare Workers版)

バージョン

github/github-mcp-server(GA: 2025年9月4日)/自作版 初版 2026/04/15

やりたかったこと

claude.ai(ブラウザ・スマホ)からGitHubのIssue作成・ブランチpush・PR作成を行う

結果

書き込みフルサイクル成功。ブランチ作成〜PR作成の一連が約30秒

運用コスト

Cloudflare Workers 無料枠内(10万req/日):$0/GitHub Free:$0

判定

条件付きで導入可(自作Worker + Fine-grained PAT構成)

結論:OAuthで書き込めないのは仕様ではなくアプリ側の設計

この検証で最も価値のある発見は、制約の正確な把握です。

claude.aiのOAuth連携は書き込みスコープを持っていません。これはclaude.ai側の実装制約です。

ここは誤解されやすい部分です。「書き込み権限を与えると他ツールに伝播するリスクがある」という説明はOAuthの仕様上正確ではありません。正確には「claude.aiのアプリが書き込みスコープを要求しない設計になっている」という話です。

さらに、claude.aiのカスタムコネクタUIはOAuth前提で、PATをAuthorizationヘッダーで渡す欄がありません。つまりUI上で直接PAT接続に切り替えることもできません。

制約の場所が分かれば、回避方法も決まります。今回は「Worker側でPATに変換する」という構成をとりました。

構成:OAuthとPATを橋渡しする

[GitHub API] ← PAT認証 ← [Cloudflare Worker(自作MCPサーバー)]
                                        ↑ OAuth(Client ID/Secret)
                                 [claude.ai カスタムコネクタ]
  • claude.aiはWorkerにOAuthで接続する(Client ID / Secretで認証)
  • WorkerはGitHub APIをPATで呼び出す

「OAuthで書き込めない」問題を、Worker側でPATに変換することで回避する構成です。claude.aiから見ればOAuth接続、GitHubから見ればPAT認証になります。

Fine-grained PATに必要な権限

ここでも一度つまずいています。初回のPATはFine-grained権限が不十分で create_branch が403エラーになりました。

Permission

設定

Contents

Read and write

Issues

Read and write

Pull requests

Read and write

Metadata

Read(自動付与)

Read only のままだと create_branchcreate_pull_request が403になります。

Repository accessは対象リポジトリのみに絞ります(All repositoriesは避ける)。Fine-grained PATはリポジトリ単位・権限単位で絞れるため、アカウント全体に紐づくOAuthよりセキュリティを高くできます。

GitHub APIは User-Agent がないと403を返す

実装で最初に踏んだ落とし穴です。

GitHub APIはリクエストに User-Agent ヘッダーが必須で、未設定の場合は403エラーになります。

headers: {
  'Authorization': `token ${env.GITHUB_PAT}`,
  'User-Agent': 'github-remote-mcp-worker/1.0',  // ← これが必須
  'Content-Type': 'application/json',
}

403という同じステータスコードが、権限不足とヘッダー不足という異なる原因で返ってきます。切り分けの順番を知らないと時間を取られます。

動作確認:フルサイクルの実績

ツール単位の検証結果は次のとおりです。

ツール名

概要

結果

debug_echo

引数をそのまま返すデバッグ用

正常動作(timestampカスタム確認)

list_issues

Issue一覧取得

正常動作(#1〜#76 取得確認)

create_issue

Issue作成

正常動作(Issue #77 作成確認)

get_file_contents / search_code / search_issues

読み取り系

正常動作

create_branch

フィーチャーブランチ作成

PAT更新後に動作確認済み

create_or_update_file

ファイルコミット

PAT更新後に動作確認済み

create_pull_request

PR作成

PAT更新後に動作確認済み

フルサイクルは ① create_branch → ② create_or_update_file → ③ create_pull_request の順で実行し、PR作成まで完全に成功しています。

項目

測定結果

読み取り成功率

100%(OAuthで安定動作)

書き込み成功率(PAT権限付与後)

100%

ブランチ作成〜PR作成(一連)

約30秒(3ツール連続実行の合計)

OAuthとPAT、どちらを使うか

項目

OAuth(公式Remote)

Fine-grained PAT(自作Worker)

設定の手軽さ

◎ 数クリックで完了

△ Worker + PAT設定が必要

読み取り

書き込み

❌ claude.aiでは不可

✅ 全ツール動作確認済み

スマホ対応

✅ 読み取りのみ

✅ 書き込みも可(Worker経由)

セキュリティ

△ アカウント全体に紐づく

◎ リポジトリ・権限単位で制御可

カスタマイズ性

◎ ツール追加が自由

読み取りだけで十分ならOAuthが最も手軽です。書き込みが必要な場合のみ、自作Worker + Fine-grained PATの構成を検討する形になります。

導入コストの内訳

項目

工数

OAuth接続(読み取り)

約15分

Fine-grained PAT発行

約10分

Cloudflare Workersデプロイ(フォーク〜deploy + デバッグ込み)

約2〜3時間

PATスコープ調整(権限不足エラー確認後の再発行)

約15分

PAT発行からclaude.ai接続完了までの目安は約3〜4時間(初回)です。

トラブルシューティング早見表

症状

原因

対処

403 Resource not accessible by integration

OAuthスコープ不足(claude.aiの制約)

自作Worker + Fine-grained PATに切り替える

403 Resource not accessible by personal access token

PATのFine-grained権限不足

Contents / Pull requests を Read and write に変更して再発行

GitHub API 403(初回疎通時)

User-Agent ヘッダー未設定

fetchにUser-Agentを追加して wrangler deploy

新しいツールが認識されない

MCPツール一覧のキャッシュ

MCP接続をオフ→オン、または新しいチャットを開く

Session terminated (32600)

tools/callレスポンス前にWorkerが終了

Streamable HTTP statelessモードへの移行を検討

運用上の注意点

  • MCPサーバーのツール一覧はセッション開始時に読み込まれます。新ツール追加後は新チャット、またはMCP再接続が必要です
  • Cloudflare WorkersはPagesと異なりGitHubリポジトリと直接紐付けできません。wrangler deploy の手動実行が基本になります
  • PATはCloudflare Workersのシークレットで管理し、コードにハードコードしない
  • 公開エンドポイントに認証なしでアクセスできる状態のため、APIキー認証の追加が望ましい(この検証時点では未対応)
  • 公式リポジトリの最新を取り込むには git remote add upstreamgit fetch upstream && git merge upstream/main

よくある質問

claude.aiからGitHubに書き込めないのはなぜですか?

claude.aiのOAuth連携が書き込みスコープを要求しない設計になっているためです。OAuthの仕様上の制約ではなく、アプリ側の実装によるものです。

PATをUIから設定できませんか?

できません。claude.aiのカスタムコネクタUIはOAuth前提で、PATをAuthorizationヘッダーで渡す欄がありません。Authorization: Bearer [JWT] を直接入力できるUIも現状存在しません。

GitHub APIで403が出ます

権限不足と User-Agent ヘッダー未設定の2つの可能性があります。まずリクエストにUser-Agentが含まれているか確認し、次にFine-grained PATのContents / Pull requestsが Read and write になっているか確認してください。

費用はかかりますか?

この構成では$0です。Cloudflare Workersの無料枠(10万req/日)とGitHub Freeプランの範囲で運用できます。

まとめ

  • claude.aiのOAuth連携は書き込みスコープを持たない。これはclaude.ai側の実装制約
  • 回避策は自作Cloudflare Workers版MCPサーバーで、OAuth接続をPAT認証に変換する構成
  • 「ブランチ作成 → ファイルコミット → PR作成」のフルサイクルをclaude.aiから約30秒で実行できることを確認
  • Fine-grained PATはContents / Issues / Pull requests を Read and write に。Read only だと403
  • GitHub APIは User-Agent ヘッダー必須。未設定でも403が返るため切り分けに注意
  • 読み取りだけならOAuthで十分。書き込みが必要な場合のみWorker構成を検討(初回セットアップ約3〜4時間)

AIエージェントに実際の作業をさせようとすると、必ず認証と権限の設計に突き当たります。どこで詰まるかを先に把握しておくと、構成の選択が速くなります。

株式会社AI棒では、こうしたAI活用の検証を日々行い、企業のAIエージェント導入を支援しています。ご相談はお問い合わせフォームから、継続的な伴走支援についてはAI参謀をご覧ください。

関連する検証事例

© 株式会社AI棒 All Rights Reserved.