GitHub MCP Server について
GitHub MCP Serverは、MCPクライアントやツールをGitHub APIにつなぎ、リポジトリ、Issue、Pull Requestを操作します。GitHubの自動化やデータ参照を行う開発者向けで、DockerまたはGoでビルドしたバイナリで実行でき、GitHub Enterprise Serverにも対応します。
主な機能
- 01Issueの参照と管理
- 02Pull Requestの作成とレビュー
- 03リポジトリとIssueの検索
- 04リポジトリ内ファイルの作成と更新
- 05GitHub Enterprise Serverホストの設定
- 06ツール説明の上書き
活用シーン
- 01Issueワークフローの自動化
- 02Pull Requestの確認と更新
- 03リポジトリデータの検索
- 04リポジトリへのファイルのコミット
MCP 対応
GitHub APIの操作をMCPクライアント向けのツールとして提供し、Issue、Pull Request、リポジトリを扱います。VS Code、Claude Desktop、GitHub Enterprise Server向けに設定できます。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
docker run -i --rm -e GITHUB_PERSONAL_ACCESS_TOKEN ghcr.io/github/github-mcp-serverGITHUB_PERSONAL_ACCESS_TOKENシークレットローカルサーバーにはマシン上の実行環境(Node.js 18 以上など)が必要です。設定ファイルの場所はクライアントごとに異なります。
ghcr.io/github/github-mcp-serverstdioツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
GitHub MCP Server
GitHub MCP Server は、GitHub API とシームレスに統合し、開発者やツール向けの高度な自動化機能と操作機能を提供する Model Context Protocol (MCP) サーバーです。
ユースケース
- GitHub のワークフローやプロセスを自動化します。
- GitHub リポジトリからデータを抽出して分析します。
- GitHub エコシステムと連携する AI 搭載ツールやアプリケーションを構築します。
前提条件
- コンテナーでサーバーを実行するには、Docker をインストールする必要があります。
- Docker のインストール後、Docker が実行中であることも確認してください。
- 最後に、GitHub Personal Access Token を作成する必要があります。 MCP サーバーは多くの GitHub API を使用できるため、AI ツールに付与してもよい権限を有効にしてください(アクセストークンの詳細については、ドキュメントをご覧ください)。
インストール
VS Code での使用
すばやくインストールするには、この README の冒頭にあるワンクリックインストールボタンのいずれかを使用してください。
手動でインストールするには、次の JSON ブロックを VS Code のユーザー設定(JSON)ファイルに追加してください。Ctrl + Shift + P を押して Preferences: Open User Settings (JSON) と入力すると開けます。
任意で、ワークスペース内の .vscode/mcp.json というファイルに追加することもできます。これにより、設定を他のユーザーと共有できます。
.vscode/mcp.jsonファイルでは、mcpキーは必要ありません。
{
"mcp": {
"inputs": [
{
"type": "promptString",
"id": "github_token",
"description": "GitHub Personal Access Token",
"password": true
}
],
"servers": {
"github": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GITHUB_PERSONAL_ACCESS_TOKEN",
"ghcr.io/github/github-mcp-server"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "${input:github_token}"
}
}
}
}
}
VS Code で MCP サーバーツールを使用する方法については、エージェントモードのドキュメントをご覧ください。
Claude Desktop での使用
{
"mcpServers": {
"github": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GITHUB_PERSONAL_ACCESS_TOKEN",
"ghcr.io/github/github-mcp-server"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "<YOUR_TOKEN>"
}
}
}
}
ソースからビルド
Docker がない場合は、go を使用して
cmd/github-mcp-server ディレクトリ内のバイナリをビルドし、トークンを設定した
GITHUB_PERSONAL_ACCESS_TOKEN 環境変数を使って github-mcp-server stdio
コマンドを実行できます。
GitHub Enterprise Server
フラグ --gh-host と環境変数 GH_HOST を使用して、
GitHub Enterprise Server のホスト名を設定できます。
i18n / 説明の上書き
バイナリと同じディレクトリに
github-mcp-server-config.json ファイルを作成すると、ツールの説明を上書きできます。
ファイルには、ツール名をキー、新しい説明を値とする JSON オブジェクトを含めます。例:
{
"TOOL_ADD_ISSUE_COMMENT_DESCRIPTION": "an alternative description",
"TOOL_CREATE_BRANCH_DESCRIPTION": "Create a new branch in a GitHub repository"
}
バイナリに --export-translations フラグを指定して実行すると、現在の翻訳をエクスポートできます。
このフラグを使うと、これまでに行った翻訳や上書きを保持したまま、前回のエクスポート以降にバイナリに追加された新しい翻訳も追加されます。
./github-mcp-server --export-translations
cat github-mcp-server-config.json
ENV 変数を使って説明を上書きすることもできます。環境変数名は JSON ファイルのキーと同じで、先頭に GITHUB_MCP_ を付け、すべて大文字にします。
たとえば、TOOL_ADD_ISSUE_COMMENT_DESCRIPTION ツールの説明を上書きするには、次の環境変数を設定します。
export GITHUB_MCP_TOOL_ADD_ISSUE_COMMENT_DESCRIPTION="an alternative description"
ツール
ユーザー
- get_me - 認証済みユーザーの詳細を取得します
- 必須パラメーターはありません
Issue
-
get_issue - リポジトリ内の Issue の内容を取得します
owner: リポジトリのオーナー(文字列、必須)repo: リポジトリ名(文字列、必須)issue_number: Issue 番号(数値、必須)
-
get_issue_comments - GitHub Issue のコメントを取得します
owner: リポジトリのオーナー(文字列、必須)repo: リポジトリ名(文字列、必須)issue_number: Issue 番号(数値、必須)
-
create_issue - GitHub リポジトリに新しい Issue を作成します
owner: リポジトリのオーナー(文字列、必須)repo: リポジトリ名(文字列、必須)title: Issue のタイトル(文字列、必須)body: Issue の本文(文字列、任意)assignees: この Issue に割り当てるユーザー名(文字列配列、任意)labels: この Issue に適用するラベル(文字列配列、任意)
-
add_issue_comment - Issue にコメントを追加します
owner: リポジトリのオーナー(文字列、必須)repo: リポジトリ名(文字列、必須)issue_number: Issue 番号(数値、必須)body: コメントのテキスト(文字列、必須)
-
list_issues - リポジトリの Issue を一覧表示し、絞り込みます
owner: リポジトリのオーナー(文字列、必須)repo: リポジトリ名(文字列、必須)state: 状態('open'、'closed'、'all')による絞り込み(文字列、任意)labels: 絞り込みに使用するラベル(文字列配列、任意)sort: 並べ替えの基準('created'、'updated'、'comments')(文字列、任意)direction: 並べ替えの順序('asc'、'desc')(文字列、任意)since: 日付(ISO 8601 タイムスタンプ)による絞り込み(文字列、任意)page: ページ番号(数値、任意)perPage: 1 ページあたりの結果数(数値、任意)
-
update_issue - GitHub リポジトリ内の既存の Issue を更新します
owner: リポジトリのオーナー(文字列、必須)repo: リポジトリ名(文字列、必須)issue_number: 更新する Issue 番号(数値、必須)title: 新しいタイトル(文字列、任意)body: 新しい説明(文字列、任意)state: 新しい状態('open' または 'closed')(文字列、任意)labels: 新しいラベル(文字列配列、任意)assignees: 新しい担当者(文字列配列、任意)milestone: 新しいマイルストーン番号(数値、任意)
-
search_issues - Issue とプルリクエストを検索します
query: 検索クエリ(文字列、必須)sort: 並べ替えフィールド(文字列、任意)order: 並べ替え順序(文字列、任意)page: ページ番号(数値、任意)perPage: 1 ページあたりの結果数(数値、任意)
プルリクエスト
-
get_pull_request - 特定のプルリクエストの詳細を取得します
owner: リポジトリのオーナー(文字列、必須)repo: リポジトリ名(文字列、必須)pullNumber: プルリクエスト番号(数値、必須)
-
list_pull_requests - リポジトリのプルリクエストを一覧表示し、絞り込みます
owner: リポジトリの所有者(文字列、必須)repo: リポジトリ名(文字列、必須)state: PR の状態(文字列、任意)sort: 並べ替えフィールド(文字列、任意)direction: 並べ替え方向(文字列、任意)perPage: 1 ページあたりの結果数(数値、任意)page: ページ番号(数値、任意)
-
merge_pull_request - プルリクエストをマージします
owner: リポジトリの所有者(文字列、必須)repo: リポジトリ名(文字列、必須)pullNumber: プルリクエスト番号(数値、必須)commit_title: マージコミットのタイトル(文字列、任意)commit_message: マージコミットのメッセージ(文字列、任意)merge_method: マージ方法(文字列、任意)
-
get_pull_request_files - プルリクエストで変更されたファイルの一覧を取得します
owner: リポジトリの所有者(文字列、必須)repo: リポジトリ名(文字列、必須)pullNumber: プルリクエスト番号(数値、必須)
-
get_pull_request_status - プルリクエストのすべてのステータスチェックをまとめた状態を取得します
owner: リポジトリの所有者(文字列、必須)repo: リポジトリ名(文字列、必須)pullNumber: プルリクエスト番号(数値、必須)
-
update_pull_request_branch - ベースブランチからの最新の変更でプルリクエストのブランチを更新します
owner: リポジトリの所有者(文字列、必須)repo: リポジトリ名(文字列、必須)pullNumber: プルリクエスト番号(数値、必須)expectedHeadSha: プルリクエストの HEAD ref に期待される SHA(文字列、任意)
-
get_pull_request_comments - プルリクエストのレビューコメントを取得します
owner: リポジトリの所有者(文字列、必須)repo: リポジトリ名(文字列、必須)pullNumber: プルリクエスト番号(数値、必須)
-
get_pull_request_reviews - プルリクエストのレビューを取得します
owner: リポジトリの所有者(文字列、必須)repo: リポジトリ名(文字列、必須)pullNumber: プルリクエスト番号(数値、必須)
-
create_pull_request_review - プルリクエストにレビューを作成します
owner: リポジトリの所有者(文字列、必須)repo: リポジトリ名(文字列、必須)pullNumber: プルリクエスト番号(数値、必須)body: レビューコメントのテキスト(文字列、任意)event: レビューアクション('APPROVE'、'REQUEST_CHANGES'、'COMMENT')(文字列、必須)commitId: レビュー対象のコミットの SHA(文字列、任意)comments: プルリクエストの変更箇所にコメントを付けるための、行に固有のコメントオブジェクトの配列(配列、任意)- インラインコメントの場合:
path、position(またはline)、およびbodyを指定します - 複数行コメントの場合:
path、start_line、line、任意のside/start_side、およびbodyを指定します
- インラインコメントの場合:
-
create_pull_request - 新しいプルリクエストを作成します
owner: リポジトリの所有者(文字列、必須)repo: リポジトリ名(文字列、必須)title: PR のタイトル(文字列、必須)body: PR の説明(文字列、任意)head: 変更を含むブランチ(文字列、必須)base: マージ先のブランチ(文字列、必須)draft: 下書き PR として作成するかどうか(ブール値、任意)maintainer_can_modify: メンテナーによる編集を許可するかどうか(ブール値、任意)
-
add_pull_request_review_comment - プルリクエストにレビューコメントを追加するか、既存のコメントに返信します
owner:リポジトリの所有者(文字列、必須)repo:リポジトリ名(文字列、必須)pull_number:プルリクエスト番号(数値、必須)body:レビューコメントの本文(文字列、必須)commit_id:コメント対象のコミットの SHA(文字列、in_reply_toを使用する場合を除き必須)path:コメントが必要なファイルへの相対パス(文字列、in_reply_toを使用する場合を除き必須)line:コメント対象となるプルリクエストの差分内の行(数値、任意)side:コメント対象の差分の側(LEFT または RIGHT)(文字列、任意)start_line:複数行コメントの場合、範囲の最初の行(数値、任意)start_side:複数行コメントの場合、差分の開始側(LEFT または RIGHT)(文字列、任意)subject_type:コメントの対象レベル(行またはファイル)(文字列、任意)in_reply_to:返信先のレビューコメントの ID(数値、任意)。指定した場合、必須なのはbodyのみで、他のパラメーターは無視されます。
-
update_pull_request - GitHub リポジトリの既存のプルリクエストを更新します
owner:リポジトリの所有者(文字列、必須)repo:リポジトリ名(文字列、必須)pullNumber:更新するプルリクエスト番号(数値、必須)title:新しいタイトル(文字列、任意)body:新しい説明(文字列、任意)state:新しい状態('open' または 'closed')(文字列、任意)base:新しいベースブランチ名(文字列、任意)maintainer_can_modify:メンテナーによる編集を許可するか(ブール値、任意)
リポジトリ
-
create_or_update_file - リポジトリ内の単一ファイルを作成または更新します
owner:リポジトリの所有者(文字列、必須)repo:リポジトリ名(文字列、必須)path:ファイルパス(文字列、必須)message:コミットメッセージ(文字列、必須)content:ファイルの内容(文字列、必須)branch:ブランチ名(文字列、任意)sha:更新する場合のファイル SHA(文字列、任意)
-
list_branches - GitHub リポジトリのブランチ一覧を取得します
owner:リポジトリの所有者(文字列、必須)repo:リポジトリ名(文字列、必須)page:ページ番号(数値、任意)perPage:1 ページあたりの結果数(数値、任意)
-
push_files - 複数のファイルを 1 つのコミットでプッシュします
owner:リポジトリの所有者(文字列、必須)repo:リポジトリ名(文字列、必須)branch:プッシュ先のブランチ(文字列、必須)files:プッシュするファイル。各ファイルにパスと内容を指定します(配列、必須)message:コミットメッセージ(文字列、必須)
-
search_repositories - GitHub リポジトリを検索します
query:検索クエリ(文字列、必須)sort:並べ替えフィールド(文字列、任意)order:並べ替え順序(文字列、任意)page:ページ番号(数値、任意)perPage:1 ページあたりの結果数(数値、任意)
-
create_repository - 新しい GitHub リポジトリを作成します
name:リポジトリ名(文字列、必須)description:リポジトリの説明(文字列、任意)private:リポジトリを非公開にするかどうか(ブール値、任意)autoInit:README を使用して自動初期化するかどうか(ブール値、任意)
-
get_file_contents - ファイルまたはディレクトリの内容を取得します
owner:リポジトリの所有者(文字列、必須)repo:リポジトリ名(文字列、必須)path:ファイルパス(文字列、必須)ref:Git の参照(文字列、任意)
-
fork_repository - リポジトリをフォークします
owner:リポジトリの所有者(文字列、必須)repo:リポジトリ名(文字列、必須)organization:フォーク先の組織名(文字列、任意)
-
create_branch - 新しいブランチを作成します
owner:リポジトリの所有者(文字列、必須)repo:リポジトリ名(文字列、必須)branch:新しいブランチ名(文字列、必須)sha:ブランチの作成元となる SHA(文字列、必須)
-
list_commits - リポジトリ内のブランチのコミット一覧を取得します
owner:リポジトリの所有者(文字列、必須)repo:リポジトリ名(文字列、必須)sha:ブランチ名、タグ、またはコミット SHA(文字列、任意)path:このファイルパスを含むコミットのみを対象とします(文字列、任意)page:ページ番号(数値、任意)perPage:1 ページあたりの結果数(数値、任意)
-
get_commit - リポジトリ内のコミットの詳細を取得します
owner:リポジトリの所有者(文字列、必須)repo:リポジトリ名(文字列、必須)sha:コミット SHA、ブランチ名、またはタグ名(文字列、必須)page:コミット内のファイルのページ番号(数値、任意)perPage:コミット内のファイルの1ページあたりの結果数(数値、任意)
検索
-
search_code - GitHub リポジトリ全体からコードを検索します
query:検索クエリ(文字列、必須)sort:並べ替えフィールド(文字列、任意)order:並べ替え順序(文字列、任意)page:ページ番号(数値、任意)perPage:1 ページあたりの結果数(数値、任意)
-
search_users - GitHub ユーザーを検索します
query:検索クエリ(文字列、必須)sort:並べ替えフィールド(文字列、任意)order:並べ替え順序(文字列、任意)page:ページ番号(数値、任意)perPage:1 ページあたりの結果数(数値、任意)
コードスキャン
-
get_code_scanning_alert - コードスキャンアラートを取得します
owner: リポジトリの所有者(文字列、必須)repo: リポジトリ名(文字列、必須)alertNumber: アラート番号(数値、必須)
-
list_code_scanning_alerts - リポジトリのコードスキャンアラートを一覧表示します
owner: リポジトリの所有者(文字列、必須)repo: リポジトリ名(文字列、必須)ref: Git の参照(文字列、任意)state: アラートの状態(文字列、任意)severity: アラートの深刻度(文字列、任意)
リソース
リポジトリのコンテンツ
-
リポジトリのコンテンツを取得 指定したパスにあるリポジトリのコンテンツを取得します。
- テンプレート:
repo://{owner}/{repo}/contents{/path*} - パラメーター:
owner: リポジトリの所有者(文字列、必須)repo: リポジトリ名(文字列、必須)path: ファイルまたはディレクトリのパス(文字列、任意)
- テンプレート:
-
特定のブランチのリポジトリコンテンツを取得 指定したブランチの、指定したパスにあるリポジトリのコンテンツを取得します。
- テンプレート:
repo://{owner}/{repo}/refs/heads/{branch}/contents{/path*} - パラメーター:
owner: リポジトリの所有者(文字列、必須)repo: リポジトリ名(文字列、必須)branch: ブランチ名(文字列、必須)path: ファイルまたはディレクトリのパス(文字列、任意)
- テンプレート:
-
特定のコミットのリポジトリコンテンツを取得 指定したコミットの、指定したパスにあるリポジトリのコンテンツを取得します。
- テンプレート:
repo://{owner}/{repo}/sha/{sha}/contents{/path*} - パラメーター:
owner: リポジトリの所有者(文字列、必須)repo: リポジトリ名(文字列、必須)sha: コミット SHA(文字列、必須)path: ファイルまたはディレクトリのパス(文字列、任意)
- テンプレート:
-
特定のタグのリポジトリコンテンツを取得 指定したタグの、指定したパスにあるリポジトリのコンテンツを取得します。
- テンプレート:
repo://{owner}/{repo}/refs/tags/{tag}/contents{/path*} - パラメーター:
owner: リポジトリの所有者(文字列、必須)repo: リポジトリ名(文字列、必須)tag: タグ名(文字列、必須)path: ファイルまたはディレクトリのパス(文字列、任意)
- テンプレート:
-
特定のプルリクエストのリポジトリコンテンツを取得 指定したプルリクエストの、指定したパスにあるリポジトリのコンテンツを取得します。
- テンプレート:
repo://{owner}/{repo}/refs/pull/{prNumber}/head/contents{/path*} - パラメーター:
owner: リポジトリの所有者(文字列、必須)repo: リポジトリ名(文字列、必須)prNumber: プルリクエスト番号(文字列、必須)path: ファイルまたはディレクトリのパス(文字列、任意)
- テンプレート:
ライブラリの使用
このモジュールのエクスポートされた Go API は、現時点では不安定であり、破壊的変更が行われる可能性があるものとして扱ってください。将来的に安定性を提供する可能性があります。有用なユースケースがあれば、issue を作成してください。
ライセンス
このプロジェクトは、MIT オープンソースライセンスの条件に基づいてライセンスされています。条件の全文については、MIT を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。