GitHub MCP Server について
GitHub MCP Serverは、GitHubのリポジトリ、ファイル、Issue、プルリクエスト、検索、Webhook操作をMCPクライアントに提供します。複数ファイルの一括変更、自動ブランチ作成、Git履歴を保つ更新に対応します。
主な機能
- 01リポジトリのファイル作成と更新
- 02複数ファイルの一括コミット
- 03リポジトリ、Issue、プルリクエストの管理
- 04リポジトリ、コード、Issue、ユーザーの検索
- 05リポジトリと組織のWebhook管理
- 06Git履歴の維持とブランチの自動作成
活用シーン
- 01リポジトリへの単一または複数ファイルのコミット
- 02Issueやプルリクエストの作成とレビュー
- 03リポジトリ、コード、GitHubユーザーの検索
- 04Webhookの設定と配信履歴の確認
MCP 対応
GitHub APIの操作をツールとしてMCPクライアントに提供するMCPサーバーです。リポジトリ、Issue、プルリクエスト、検索、Webhook管理に対応します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
GitHub MCP サーバー
GitHub API 用の MCP サーバーです。ファイル操作、リポジトリ管理、検索機能などを利用できます。
Mission Squad による変更
- github pat はリクエストごとに動的に指定されるようになり、環境変数に含める必要がなくなりましたが、環境変数へのフォールバックも引き続き可能です。
- 名前:mcp-github
機能
- ブランチの自動作成:ファイルの作成・更新や変更のプッシュ時に、ブランチが存在しない場合は自動的に作成します
- 包括的なエラー処理:よくある問題に対して明確なエラーメッセージを表示します
- Git 履歴の保持:強制プッシュを行わず、適切な Git 履歴を維持します
- 一括操作:単一ファイルと複数ファイルの両方の操作に対応しています
- 高度な検索:コード、イシュー/PR、ユーザーの検索に対応しています
ツール
-
create_or_update_file- リポジトリ内の単一ファイルを作成または更新します
- 入力:
owner(string):リポジトリの所有者(ユーザー名または組織)repo(string):リポジトリ名path(string):ファイルを作成または更新するパスcontent(string):ファイルの内容message(string):コミットメッセージbranch(string):ファイルを作成または更新するブランチsha(optional string):置き換えるファイルの SHA(更新時)
- 戻り値:ファイルの内容とコミットの詳細
-
push_files- 複数のファイルを単一のコミットでプッシュします
- 入力:
owner(string):リポジトリの所有者repo(string):リポジトリ名branch(string):プッシュ先のブランチfiles(array):プッシュするファイル。各ファイルにpathとcontentを指定しますmessage(string):コミットメッセージ
- 戻り値:更新されたブランチ参照
-
search_repositories- GitHub リポジトリを検索します
- 入力:
query(string):検索クエリpage(optional number):ページネーション用のページ番号perPage(optional number):1 ページあたりの結果数(最大 100)
- 戻り値:リポジトリの検索結果
-
create_repository- 新しい GitHub リポジトリを作成します
- 入力:
name(string):リポジトリ名description(optional string):リポジトリの説明private(optional boolean):リポジトリを非公開にするかどうかautoInit(optional boolean):README を使って初期化するかどうか
- 戻り値:作成されたリポジトリの詳細
-
get_file_contents- ファイルまたはディレクトリの内容を取得します
- 入力:
owner(string):リポジトリの所有者repo(string):リポジトリ名path(string):ファイルまたはディレクトリのパスbranch(optional string):内容を取得するブランチ
- 戻り値:ファイルまたはディレクトリの内容
-
create_issue- 新しいイシューを作成します
- 入力:
owner(string):リポジトリの所有者repo(string):リポジトリ名title(string):イシューのタイトルbody(optional string):イシューの説明assignees(optional string[]):割り当てるユーザー名labels(optional string[]):追加するラベルmilestone(optional number):マイルストーン番号
- 戻り値:作成されたイシューの詳細
-
create_pull_request- 新しいプルリクエストを作成します
- 入力:
owner(string):リポジトリの所有者repo(string):リポジトリ名title(string):PR のタイトルbody(optional string):PR の説明head(string):変更を含むブランチbase(string):マージ先のブランチdraft(optional boolean):ドラフト PR として作成するかどうかmaintainer_can_modify(optional boolean):メンテナーによる編集を許可するかどうか
- 戻り値:作成されたプルリクエストの詳細
-
fork_repository- リポジトリをフォークします
- 入力:
owner(string):リポジトリの所有者repo(string):リポジトリ名organization(optional string):フォーク先の組織
- 戻り値:フォークされたリポジトリの詳細
-
create_branch- 新しいブランチを作成します
- 入力:
owner(string):リポジトリの所有者repo(string):リポジトリ名branch(string):新しいブランチ名from_branch(optional string):元のブランチ(デフォルトはリポジトリのデフォルトブランチ)
- 戻り値:作成されたブランチの参照
-
list_issues- リポジトリのイシューを一覧表示して絞り込みます
- 入力:
owner(string):リポジトリの所有者repo(string):リポジトリ名state(optional string):状態で絞り込みます('open'、'closed'、'all')labels(optional string[]):ラベルで絞り込みますsort(optional string):並べ替えの基準('created'、'updated'、'comments')direction(optional string):並べ替えの順序('asc'、'desc')since(optional string):日付で絞り込みます(ISO 8601 タイムスタンプ)page(optional number):ページ番号per_page(optional number):1 ページあたりの結果数
- 戻り値:イシューの詳細の配列
-
update_issue- 既存のイシューを更新します
- 入力:
owner(string):リポジトリの所有者repo(string):リポジトリ名issue_number(number):更新するイシュー番号title(optional string):新しいタイトルbody(optional string):新しい説明state(optional string):新しい状態('open' または 'closed')labels(optional string[]):新しいラベルassignees(optional string[]):新しい担当者milestone(optional number):新しいマイルストーン番号
- 戻り値:更新されたイシューの詳細
-
add_issue_comment- イシューにコメントを追加します
- 入力:
owner(string):リポジトリの所有者repo(string):リポジトリ名issue_number(number):コメントするイシュー番号body(string):コメント本文
- 戻り値:作成されたコメントの詳細
-
search_code- GitHub リポジトリ全体からコードを検索します
- 入力:
q(string):GitHub のコード検索構文を使用した検索クエリsort(optional string):並べ替えフィールド('indexed' のみ)order(optional string):並べ替え順序('asc' または 'desc')per_page(optional number):1 ページあたりの結果数(最大 100)page(optional number):ページ番号
- 戻り値:リポジトリのコンテキストを含むコード検索結果
-
search_issues- イシューとプルリクエストを検索します
- 入力:
q(string):GitHub のイシュー検索構文を使用した検索クエリsort(optional string):並べ替えフィールド(comments、reactions、created など)order(optional string):並べ替え順序('asc' または 'desc')per_page(optional number):1 ページあたりの結果数(最大 100)page(optional number):ページ番号
- 戻り値:イシューとプルリクエストの検索結果
-
search_users- GitHub ユーザーを検索します
- 入力:
q(string):GitHub のユーザー検索構文を使用した検索クエリsort(optional string):並べ替えフィールド(followers、repositories、joined)order(optional string):並べ替え順序('asc' または 'desc')per_page(optional number):1 ページあたりの結果数(最大 100)page(optional number):ページ番号
- 戻り値:ユーザーの検索結果
-
list_commits
- リポジトリ内のブランチのコミットを取得します
- 入力:
owner(string):リポジトリの所有者repo(string):リポジトリ名page(optional string):ページ番号per_page(optional string):1 ページあたりのレコード数sha(optional string):ブランチ名
- 戻り値:コミットの一覧
get_issue
- リポジトリ内のイシューの内容を取得します
- 入力:
owner(string):リポジトリの所有者repo(string):リポジトリ名issue_number(number):取得するイシュー番号
- 戻り値:Github Issue オブジェクトと詳細
get_pull_request
- 特定のプルリクエストの詳細を取得します
- 入力:
owner(string):リポジトリのオーナーrepo(string):リポジトリ名pull_number(number):プルリクエスト番号
- 戻り値:差分とレビュー状況を含むプルリクエストの詳細
list_pull_requests
- リポジトリのプルリクエストを一覧表示して絞り込みます
- 入力:
owner(string):リポジトリのオーナーrepo(string):リポジトリ名state(optional string):状態で絞り込みます('open'、'closed'、'all')head(optional string):head のユーザー/組織とブランチで絞り込みますbase(optional string):base ブランチで絞り込みますsort(optional string):並べ替え方法('created'、'updated'、'popularity'、'long-running')direction(optional string):並べ替え順('asc'、'desc')per_page(optional number):ページあたりの結果数(最大 100)page(optional number):ページ番号
- 戻り値:プルリクエストの詳細の配列
create_pull_request_review
- プルリクエストにレビューを作成します
- 入力:
owner(string):リポジトリのオーナーrepo(string):リポジトリ名pull_number(number):プルリクエスト番号body(string):レビューコメントのテキストevent(string):レビューアクション('APPROVE'、'REQUEST_CHANGES'、'COMMENT')commit_id(optional string):レビュー対象のコミットの SHAcomments(optional array):行ごとのコメント。各コメントには以下を含みます:path(string):ファイルパスposition(number):差分内の行位置body(string):コメントのテキスト
- 戻り値:作成されたレビューの詳細
merge_pull_request
- プルリクエストをマージします
- 入力:
owner(string):リポジトリのオーナーrepo(string):リポジトリ名pull_number(number):プルリクエスト番号commit_title(optional string):マージコミットのタイトルcommit_message(optional string):マージコミットの追加詳細merge_method(optional string):マージ方法('merge'、'squash'、'rebase')
- 戻り値:マージ結果の詳細
get_pull_request_files
- プルリクエストで変更されたファイルの一覧を取得します
- 入力:
owner(string):リポジトリのオーナーrepo(string):リポジトリ名pull_number(number):プルリクエスト番号
- 戻り値:パッチと状態の詳細を含む、変更されたファイルの配列
get_pull_request_status
- プルリクエストのすべてのステータスチェックをまとめた状態を取得します
- 入力:
owner(string):リポジトリのオーナーrepo(string):リポジトリ名pull_number(number):プルリクエスト番号
- 戻り値:ステータスチェック結果の集約と、各チェックの詳細
update_pull_request_branch
- base ブランチの最新変更でプルリクエストのブランチを更新します(GitHub の「Update branch」ボタンと同等です)
- 入力:
owner(string):リポジトリのオーナーrepo(string):リポジトリ名pull_number(number):プルリクエスト番号expected_head_sha(optional string):プルリクエストの HEAD ref に期待される SHA
- 戻り値:ブランチが更新されたときの成功メッセージ
get_pull_request_comments
- プルリクエストのレビューコメントを取得します
- 入力:
owner(string):リポジトリのオーナーrepo(string):リポジトリ名pull_number(number):プルリクエスト番号
- 戻り値:コメントのテキスト、投稿者、差分内の位置などの詳細を含む、プルリクエストのレビューコメントの配列
get_pull_request_reviews
- プルリクエストのレビューを取得します
- 入力:
owner(string):リポジトリのオーナーrepo(string):リポジトリ名pull_number(number):プルリクエスト番号
- 戻り値:レビュー状態(APPROVED、CHANGES_REQUESTED など)、レビュアー、レビュー本文などの詳細を含む、プルリクエストレビューの配列
Webhook ツール
このサーバーは、既存の github_pat 認証モデルで利用できる、リポジトリおよび組織の Webhook REST 機能一式をサポートするようになりました。
リポジトリのWebhookツール
list_repository_webhooksget_repository_webhookcreate_repository_webhookupdate_repository_webhookdelete_repository_webhookget_repository_webhook_configupdate_repository_webhook_configping_repository_webhooklist_repository_webhook_deliveriesget_repository_webhook_deliveryredeliver_repository_webhook_delivery
OrganizationのWebhookツール
list_organization_webhooksget_organization_webhookcreate_organization_webhookupdate_organization_webhookdelete_organization_webhookget_organization_webhook_configupdate_organization_webhook_configping_organization_webhooklist_organization_webhook_deliveriesget_organization_webhook_deliveryredeliver_organization_webhook_delivery
権限
リポジトリのWebhook:
- Classic PATでは通常、作成、編集、削除、ping、再配信に
admin:repo_hook(または、より広範なrepo)が必要です。 - Fine-grained PATでは、一覧表示と取得に
read、作成、更新、削除、ping、再配信にwriteのリポジトリWebhooks権限が必要です。
OrganizationのWebhook:
- Classic PATには
admin:org_hookが必要です。 - Fine-grained PATでは、一覧表示と取得に
read、作成、更新、削除、ping、再配信にwriteのOrganizationWebhooks権限が必要です。
使用上の注意
- Webhookの作成・更新ツールでは、GitHubで必須の
name: "web"が内部で固定されています。 - リポジトリのWebhook設定では、
url、content_type、secret、insecure_sslに対応しています。 - OrganizationのWebhook設定では、これらのフィールドに加えて、Basic認証用に任意の
usernameとpasswordに対応しています。 - GitHubは、Webhookに
secretを設定し、受信側サービスで配信署名を検証することを強く推奨しています。 insecure_ssl: "1"は証明書の検証を無効にするため、推奨されません。
デバッグの流れ
ping_*_webhookを使って、作成または更新後にテスト配信を実行します。list_*_webhook_deliveriesを使って、最近の試行を確認します。get_*_webhook_deliveryを使って、リクエストのペイロードとヘッダー、およびGitHubが記録したレスポンスを確認します。redeliver_*_webhook_deliveryを使って、失敗した配信や古い配信を再実行します。
対象外
- このサーバーは、Webhook配信を受信するHTTPエンドポイントを実装していません。
- このサーバーは、Webhookエンドポイントの配信署名を検証しません。
- GitHub AppのWebhookエンドポイントは、この段階では対象外です。これらのAPIではPATではなく、JWTベースのアプリ認証が必要なためです。
検索クエリの構文
コード検索
language:javascript:プログラミング言語で検索repo:owner/name:特定のリポジトリ内を検索path:app/src:特定のパス内を検索extension:js:ファイル拡張子で検索- 例:
q: "import express" language:typescript path:src/
Issue検索
is:issueまたはis:pr:種類で絞り込みis:openまたはis:closed:状態で絞り込みlabel:bug:ラベルで検索author:username:作成者で検索- 例:
q: "memory leak" is:issue is:open label:bug
ユーザー検索
type:userまたはtype:org:アカウントの種類で絞り込みfollowers:>1000:フォロワー数で絞り込みlocation:London:所在地で検索- 例:
q: "fullstack developer" location:London followers:>100
検索構文の詳細については、GitHubの検索ドキュメントをご覧ください。
セットアップ
Personal Access Token
適切な権限を持つGitHub Personal Access Tokenを作成します。
- Personal access tokensに移動します(GitHubのSettings > Developer settings内)
- このトークンでアクセスするリポジトリを選択します(Public、All、またはSelect)
repoスコープ(「Full control of private repositories」)を付与したトークンを作成します- または、公開リポジトリのみを扱う場合は、
public_repoスコープのみを選択します
- または、公開リポジトリのみを扱う場合は、
- 生成されたトークンをコピーします
Claude Desktop での使用方法
Claude Desktop で使用するには、次の内容を claude_desktop_config.json に追加します。
Docker
{
"mcpServers": {
"github": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GITHUB_PERSONAL_ACCESS_TOKEN",
"mcp/github"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>"
}
}
}
}
NPX
{
"mcpServers": {
"github": {
"command": "npx",
"args": [
"-y",
"@modelcontextprotocol/server-github"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>"
}
}
}
}
ビルド
Docker のビルド:
docker build -t mcp/github -f src/github/Dockerfile .
ライセンス
この MCP サーバーは MIT License の下でライセンスされています。MIT License の利用規約に従う限り、ソフトウェアを自由に使用、変更、配布できます。詳しくは、プロジェクトリポジトリの LICENSE ファイルをご覧ください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。