GitHub MCPサーバーの使い方 — Claude CodeでのIssue・PR自動化
GitHub MCPサーバーの導入手順をまとめます。リモート・ローカルの接続方法、有効にするtoolsetsの絞り方、read-onlyモードとlockdownモードの違い、つまずき対処まで扱います。
GitHub MCPサーバーは、GitHub自身が公開する公式MCPサーバーです。Issueやプルリクエストの読み書き、GitHub Actionsのログ確認、コードスキャンの結果参照までを、Claude Codeから自然文の指示で実行できます。Claude CodeはもともとghコマンドをBashツール経由で呼べますが、MCPサーバーはツール呼び出し単位で権限を絞れる点と、GitHub Actions・Dependabot・Secret Scanningのような構造化データを直接扱える点で役割が異なります。
以下では接続方法(リモート / ローカル)、有効にする機能範囲(toolsets)の絞り方、読み取り専用に固定するread-onlyモードまで確認します。MCPプロトコル自体の仕組みはMCPとは、権限ルールの一般的な書き方はMCPセキュリティガイドが対応します。
GitHub MCPサーバーとは
GitHub MCPサーバーとは、AIツールをGitHubのプラットフォームに直接接続する公式MCPサーバーです。リポジトリの閲覧・検索、Issue / PRの作成と管理、コミット履歴の分析、GitHub Actionsのワークフロー監視、Dependabotアラートやコードスキャン結果の確認といった操作を、ツール呼び出しとして提供します。
接続先は2種類あります。GitHubがホストするリモートサーバーと、Docker等でローカルに立てるサーバーです。リモートのほうが立ち上げが速く、認証もOAuthかPersonal Access Token(PAT)のどちらかで済みます。
Claude CodeにGitHub MCPを追加する
リモートサーバーを使う(推奨)
GitHubの個人アクセストークン設定で、対象リポジトリへのアクセス権を持つfine-grainedトークンを発行し、ヘッダー経由で渡します。
claude mcp add --transport http github https://api.githubcopilot.com/mcp/ \
--header "Authorization: Bearer YOUR_GITHUB_PAT"claude mcp addはトークンの有効性を検証せずに設定を保存するため、プレースホルダーの値でも追加自体は成功します。接続確認は/mcpを実行し、githubがconnectedと表示されるかで判断します。認証情報が誤っているとfailedと表示され、失敗の詳細にGitHub側が返したHTTPステータス(401など)が含まれます。
ローカルサーバーを使う(Docker)
チームでの一元的なトークン管理を避けたい場合や、GitHub Enterprise Serverに接続する場合はローカルのDockerサーバーを使います。github.com向けであればOAuthログインが既定で、ブラウザーでの初回ログイン後はトークンをメモリ上にのみ保持します。
claude mcp add github -e GITHUB_OAUTH_CALLBACK_PORT=8085 \
-- docker run -i --rm -p 127.0.0.1:8085:8085 \
-e GITHUB_OAUTH_CALLBACK_PORT ghcr.io/github/github-mcp-serverPATでの認証を優先したい場合はGITHUB_PERSONAL_ACCESS_TOKENを設定します(設定するとOAuthより優先されます)。
claude mcp add github -e GITHUB_PERSONAL_ACCESS_TOKEN=YOUR_GITHUB_PAT \
-- docker run -i --rm -e GITHUB_PERSONAL_ACCESS_TOKEN ghcr.io/github/github-mcp-servertoolsetsで有効にする範囲を絞る
GitHub MCPサーバーが持つ機能は、toolsetsという単位でグループ化されています。何も指定しなければ、次の5つ(default)だけが有効になります。
既定で有効(default) | 内容 |
|---|---|
context | 内容現在のユーザー・GitHubコンテキストの取得(強く推奨) |
repos | 内容リポジトリ関連の操作 |
issues | 内容Issue関連の操作 |
pull_requests | 内容プルリクエスト関連の操作 |
users | 内容ユーザー関連の操作 |
これ以外にも、actions(GitHub Actions・CI/CD)、code_security(コードスキャン)、dependabot、discussions、gists、git、labels、notifications、orgs、projects、secret_protection、security_advisories、stargazers、code_qualityといったtoolsetsが用意されており、必要なものだけを追加で有効化できます。
ローカルサーバーではフラグまたは環境変数で指定します。
GITHUB_TOOLSETS="default,actions,code_security" ./github-mcp-serverリモートサーバーではHTTPヘッダーで指定します。claude mcp add-jsonでヘッダーを複数渡す形が確実です。
claude mcp add-json github '{"type":"http","url":"https://api.githubcopilot.com/mcp/","headers":{"Authorization":"Bearer YOUR_GITHUB_PAT","X-MCP-Toolsets":"default,actions,code_security"}}'リモートサーバーにはローカルサーバーに無い追加のtoolsetsもあります。copilot(Copilot Coding Agent関連)、copilot_spaces、github_support_docs_search(GitHubの製品・サポート文書を検索する)の3つで、いずれもGitHub Copilotのエコシステムと連携する機能です。ローカルのDocker版だけを使っている場合、これらのtoolsetsは選択肢に出てきません。
read-onlyモードとlockdownモードの違い
似た名前の2つの安全機構がありますが、目的が異なります。
| モード | 何をするか | 位置付け |
|---|---|---|
--read-only / GITHUB_READ_ONLY | 何をするか書き込み系ツールを一切登録しない。--toolsで明示指定しても書き込み系は無効化される | 位置付け最優先で効く。他のどの設定より強い |
--lockdown-mode / GITHUB_LOCKDOWN_MODE | 何をするかコンテンツフィルターとして働く | 位置付け「ベストエフォートの内容フィルターであり、セキュリティ境界ではない」と公式ドキュメントが明記 |
read-onlyモードは、コードレビューや調査目的でGitHub MCPを使わせたいが、PRのマージやIssueのクローズまでは自動化したくない場合に有効です。
claude mcp add-json github '{"type":"http","url":"https://api.githubcopilot.com/mcp/","headers":{"Authorization":"Bearer YOUR_GITHUB_PAT","X-MCP-Readonly":"true"}}'read-onlyモードは他のすべての設定に優先します。--toolsで書き込み系のツール名を明示的に指定していても、read-onlyが有効なら登録されません。一方lockdown modeはセキュリティ境界として設計されていないため、権限を確実に絞りたい場面ではread-onlyモードか、Claude Code側の権限ルール(mcp__github__*単位のdeny設定)を使う判断になります。
よくあるつまずき
Added ...と出たのに動かない
claude mcp addはトークンを検証しません。追加コマンドが成功しても、トークンが無効・権限不足なら実際の呼び出しで失敗します。/mcpでステータスがconnectedかを必ず確認します。
目的のツールが見当たらない
既定で有効なのはcontext repos issues pull_requests usersの5つだけです。GitHub Actionsやコードスキャンを扱いたい場合は、actionsやcode_securityをtoolsetsに明示的に足す必要があります。
書き込み操作が急に効かなくなった
read-onlyモードが有効になっていないか確認します。--toolsで個別ツールを指定していても、read-onlyが優先されるため書き込み系は無効のままです。
除外したはずのツールがまだ見える
--exclude-toolsは--toolsetsや--toolsより優先されます。除外リストに載っているツールは、toolsetで一括有効化していても常に除外されます。優先順位を勘違いしていると原因が分かりにくいので、意図通りに絞れないときはまず除外リストの中身を確認します。
よくある質問
GitHub MCPサーバーとネイティブなghコマンドの違いは何ですか
Claude CodeはBashツール経由でghコマンドを直接実行できますが、これはコマンド単位の権限になります。GitHub MCPサーバーはツール単位(mcp__github__create_pull_requestのように)で権限を管理できるため、「PRの作成だけ許可し、マージは常に確認させる」といった細かい制御がしやすくなります。
リモートとローカル、どちらを選ぶべきですか
個人利用や標準的なgithub.comの利用ならリモートが手軽です。GitHub Enterprise Serverに接続する場合、あるいは組織のポリシーでトークン管理を自前で行いたい場合はローカル(Docker)を選びます。
有効なtoolsetsは後から変更できますか
変更できます。リモートサーバーであればclaude mcp remove githubで一度削除し、X-MCP-Toolsetsヘッダーの値を変えてclaude mcp add-jsonし直します。ローカルサーバーであればGITHUB_TOOLSETS環境変数を書き換えて再起動します。
PATに必要な権限はどこまで絞れますか
fine-grainedトークンを使えば、対象リポジトリと権限スコープを個別に選べます。使うtoolsetsに対応する権限だけを付与し、それ以外は含めないのが安全です。読み取りしか使わないなら、書き込み系の権限は最初から付与しない運用が確実です。
--read-onlyと権限ルールのdenyはどちらを使うべきですか
用途が異なります。read-onlyモードはサーバー起動時点で書き込み系ツールの存在自体をなくす設計で、確実性が高い代わりに全体一括です。Claude Codeの権限ルールはmcp__github__create_pull_requestのようにツール単位で細かく制御できますが、サーバー側の設定を書き換えるわけではありません。細かい制御と確実な遮断を両方使い分けたいなら併用します。
まとめ
GitHub MCPサーバーの導入は、リモートならPATをヘッダーに渡す1コマンドで完結します。決めるべきはその先です。どのtoolsetsを有効にするか、書き込みまで許すかread-onlyに固定するか。既定の5toolsetsは最小構成なので、Actionsやコードスキャンを扱いたければ明示的に足す必要があります。read-onlyモードは他設定より優先される最も強い制約で、lockdown modeはセキュリティ境界ではないベストエフォートのフィルターです。この違いを取り違えると「絞ったつもり」で絞れていない事態になるため、確実に遮断したい操作にはread-onlyモードか権限ルールのdeny設定を使います。ほかのMCPサーバーの選び方はおすすめMCPサーバー10選も参考にしてください。