---
title: "ブラウザ版ClaudeからGitHubに書き込む｜OAuthの制約を自作MCPサーバーで回避する"
excerpt: "claude.aiのOAuth連携は読み取りのみで書き込みができません。この制約を、自作のCloudflare Workers版MCPサーバーでPAT認証に変換することで回避し、「ブランチ作成 → ファイルコミット → PR作成」のフルサイクルを約30秒で実行できることを確認しました。Fine-grained PATの必要権限とUser-Agentヘッダー必須の落とし穴もまとめています。"
author: "AI活編集部"
author_username: ai-katsu-editorial
published_at: 2026-04-15T00:00:00+00:00
verified_at: 2026-04-15T00:00:00+00:00
models: ["Claude"]
tools: ["GitHub", "MCP", "Cloudflare"]
tasks: ["開発・エンジニアリング", "ツール検証"]
canonical_url: https://ai-katsu.jp/articles/github-remote-mcp-verification
---
# ブラウザ版ClaudeからGitHubに書き込む｜OAuthの制約を自作MCPサーバーで回避する

ブラウザ版・スマホ版の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_branch` や `create_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 upstream` → `git 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エージェント導入を支援しています。ご相談は[お問い合わせフォーム](/contact)から、継続的な伴走支援については[AI参謀](/ai-sanbo)をご覧ください。
