GitHub MCP Server について
GitHub MCP Serverは、リポジトリ、Issue、プルリクエスト、検索などのGitHub API操作を開発者やツールに提供します。トークン認証、GitHub Enterpriseのホスト設定、ツール説明の上書きに対応します。
主な機能
- 01Issueの閲覧と管理
- 02プルリクエストの作成とレビュー
- 03リポジトリ、コード、ユーザーの検索
- 04リポジトリのファイルとブランチ管理
- 05GitHub Enterpriseホストの設定
- 06ツール説明の上書き
活用シーン
- 01GitHub Issueワークフローの自動化
- 02プルリクエストのレビューと更新
- 03コードやリポジトリの検索
- 04リポジトリ内容の閲覧や変更
MCP 対応
MCPクライアントにGitHub API操作のツールを提供します。Dockerでの実行またはソースからのビルドが可能で、認証にはGitHub Personal Access Tokenを使用します。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの 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 サーバー
GitHub MCP サーバーは、Model Context Protocol (MCP) サーバーであり、GitHub API とシームレスに連携して、開発者やツール向けに高度な 自動化機能と操作機能を提供します。
使用例
- GitHub のワークフローとプロセスを自動化します。
- GitHub リポジトリからデータを抽出して分析します。
- GitHub のエコシステムと連携する AI 搭載ツールやアプリケーションを構築します。
前提条件
- コンテナー内でサーバーを実行するには、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
環境変数を使って説明を上書きすることもできます。環境変数の名前は JSON ファイルのキーと同じで、先頭に GITHUB_MCP_ を付け、すべて大文字にします。
たとえば、TOOL_ADD_ISSUE_COMMENT_DESCRIPTION ツールの説明を上書きするには、次の環境変数を設定します。
export GITHUB_MCP_TOOL_ADD_ISSUE_COMMENT_DESCRIPTION="an alternative description"
ツール
ユーザー
- get_me - 認証済みユーザーの詳細を取得します
- パラメーターは不要です
イシュー
-
get_issue - リポジトリ内のイシューの内容を取得します
owner:リポジトリのオーナー(文字列、必須)repo:リポジトリ名(文字列、必須)issue_number:イシュー番号(数値、必須)
-
create_issue - GitHub リポジトリに新しいイシューを作成します
owner:リポジトリのオーナー(文字列、必須)repo:リポジトリ名(文字列、必須)title:イシューのタイトル(文字列、必須)body:イシューの本文(文字列、任意)assignees:このイシューに割り当てるユーザー名(文字列の配列、任意)labels:このイシューに適用するラベル(文字列の配列、任意)
-
add_issue_comment - イシューにコメントを追加します
owner:リポジトリのオーナー(文字列、必須)repo:リポジトリ名(文字列、必須)issue_number:イシュー番号(数値、必須)body:コメントのテキスト(文字列、必須)
-
list_issues - リポジトリのイシューを一覧表示し、絞り込みます
owner:リポジトリのオーナー(文字列、必須)repo:リポジトリ名(文字列、必須)state:状態('open'、'closed'、'all')で絞り込みます(文字列、任意)labels:ラベルで絞り込みます(文字列の配列、任意)sort:並べ替え基準('created'、'updated'、'comments')(文字列、任意)direction:並べ替え方向('asc'、'desc')(文字列、任意)since:日付(ISO 8601 タイムスタンプ)で絞り込みます(文字列、任意)page:ページ番号(数値、任意)perPage:1 ページあたりの結果数(数値、任意)
-
update_issue - GitHub リポジトリの既存のイシューを更新します
owner:リポジトリのオーナー(文字列、必須)repo:リポジトリ名(文字列、必須)issue_number:更新するイシュー番号(数値、必須)title:新しいタイトル(文字列、任意)body:新しい説明(文字列、任意)state:新しい状態('open' または 'closed')(文字列、任意)labels:新しいラベル(文字列の配列、任意)assignees:新しい担当者(文字列の配列、任意)milestone:新しいマイルストーン番号(数値、任意)
-
search_issues - イシューとプルリクエストを検索します
query:検索クエリ(文字列、必須)sort:並べ替えフィールド(文字列、任意)order:並べ替え順(文字列、任意)page:ページ番号(数値、任意)per_page: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(数値)、body(文字列)が含まれます(配列、任意)
-
create_pull_request - 新しいプルリクエストを作成します
owner: リポジトリのオーナー(文字列、必須)repo: リポジトリ名(文字列、必須)title: PR のタイトル(文字列、必須)body: PR の説明(文字列、任意)head: 変更を含むブランチ(文字列、必須)base: マージ先のブランチ(文字列、必須)draft: ドラフト PR として作成(ブール値、任意)maintainer_can_modify: メンテナーによる編集を許可(ブール値、任意)
リポジトリ
-
create_or_update_file - リポジトリ内の単一ファイルを作成または更新します
owner: リポジトリの所有者(string、必須)repo: リポジトリ名(string、必須)path: ファイルパス(string、必須)message: コミットメッセージ(string、必須)content: ファイルの内容(string、必須)branch: ブランチ名(string、任意)sha: 更新時のファイル SHA(string、任意)
-
push_files - 複数のファイルを1つのコミットでプッシュします
owner: リポジトリの所有者(string、必須)repo: リポジトリ名(string、必須)branch: プッシュ先のブランチ(string、必須)files: プッシュするファイル。各ファイルには path と content が含まれます(array、必須)message: コミットメッセージ(string、必須)
-
search_repositories - GitHub リポジトリを検索します
query: 検索クエリ(string、必須)sort: 並べ替えフィールド(string、任意)order: 並べ替え順(string、任意)page: ページ番号(number、任意)perPage: 1ページあたりの検索結果数(number、任意)
-
create_repository - 新しい GitHub リポジトリを作成します
name: リポジトリ名(string、必須)description: リポジトリの説明(string、任意)private: リポジトリを非公開にするかどうか(boolean、任意)autoInit: README を自動的に初期化するかどうか(boolean、任意)
-
get_file_contents - ファイルまたはディレクトリの内容を取得します
owner: リポジトリの所有者(string、必須)repo: リポジトリ名(string、必須)path: ファイルパス(string、必須)ref: Git リファレンス(string、任意)
-
fork_repository - リポジトリをフォークします
owner: リポジトリの所有者(string、必須)repo: リポジトリ名(string、必須)organization: フォーク先の組織名(string、任意)
-
create_branch - 新しいブランチを作成します
owner: リポジトリの所有者(string、必須)repo: リポジトリ名(string、必須)branch: 新しいブランチ名(string、必須)sha: ブランチの作成元となる SHA(string、必須)
-
list_commits - リポジトリ内のブランチのコミットを取得します
owner: リポジトリの所有者(string、必須)repo: リポジトリ名(string、必須)sha: ブランチ名、タグ、またはコミット SHA(string、任意)path: このファイルパスを含むコミットのみ(string、任意)page: ページ番号(number、任意)perPage: 1ページあたりの検索結果数(number、任意)
検索
-
search_code - GitHub リポジトリ全体からコードを検索します
query: 検索クエリ(string、必須)sort: 並べ替えフィールド(string、任意)order: 並べ替え順(string、任意)page: ページ番号(number、任意)perPage: 1ページあたりの検索結果数(number、任意)
-
search_users - GitHub ユーザーを検索します
query: 検索クエリ(string、必須)sort: 並べ替えフィールド(string、任意)order: 並べ替え順(string、任意)page: ページ番号(number、任意)perPage: 1ページあたりの検索結果数(number、任意)
コードスキャン
-
get_code_scanning_alert - コードスキャンアラートを取得します
owner: リポジトリの所有者(string、必須)repo: リポジトリ名(string、必須)alertNumber: アラート番号(number、必須)
-
list_code_scanning_alerts - リポジトリのコードスキャンアラートを一覧表示します
owner: リポジトリの所有者(string、必須)repo: リポジトリ名(string、必須)ref: Git リファレンス(string、任意)state: アラートの状態(string、任意)severity: アラートの重大度(string、任意)
リソース
リポジトリの内容
-
リポジトリの内容を取得 指定したパスにあるリポジトリの内容を取得します。
- テンプレート:
repo://{owner}/{repo}/contents{/path*} - パラメーター:
owner: リポジトリの所有者(string、必須)repo: リポジトリ名(string、必須)path: ファイルまたはディレクトリのパス(string、任意)
- テンプレート:
-
特定のブランチのリポジトリの内容を取得 指定したブランチの特定のパスにあるリポジトリの内容を取得します。
- テンプレート:
repo://{owner}/{repo}/refs/heads/{branch}/contents{/path*} - パラメーター:
owner: リポジトリの所有者(string、必須)repo: リポジトリ名(string、必須)branch: ブランチ名(string、必須)path: ファイルまたはディレクトリのパス(string、任意)
- テンプレート:
-
特定のコミットのリポジトリの内容を取得 指定したコミットの特定のパスにあるリポジトリの内容を取得します。
- テンプレート:
repo://{owner}/{repo}/sha/{sha}/contents{/path*} - パラメーター:
owner: リポジトリの所有者(string、必須)repo: リポジトリ名(string、必須)sha: コミット SHA(string、必須)path: ファイルまたはディレクトリのパス(string、任意)
- テンプレート:
-
特定のタグのリポジトリの内容を取得 指定したタグの特定のパスにあるリポジトリの内容を取得します。
- テンプレート:
repo://{owner}/{repo}/refs/tags/{tag}/contents{/path*} - パラメーター:
owner: リポジトリの所有者(string、必須)repo: リポジトリ名(string、必須)tag: タグ名(string、必須)path: ファイルまたはディレクトリのパス(string、任意)
- テンプレート:
-
特定のプルリクエストのリポジトリの内容を取得 指定したプルリクエストの特定のパスにあるリポジトリの内容を取得します。
- テンプレート:
repo://{owner}/{repo}/refs/pull/{prNumber}/head/contents{/path*} - パラメーター:
owner: リポジトリの所有者(string、必須)repo: リポジトリ名(string、必須)prNumber: プルリクエスト番号(string、必須)path: ファイルまたはディレクトリのパス(string、任意)
- テンプレート:
ライセンス
このプロジェクトは、MIT オープンソースライセンスの条件に基づいてライセンスされています。すべての条件については、MIT を参照してください。
コメント
AI アプリケーションが外部のツールやデータソースに統一的な方法で接続するためのオープンなプロトコルです。クライアントはモデルとの対話を担い、MCP サーバーはツール・リソース・プロンプトテンプレートを提供します。標準メッセージでやり取りするため、1 つのサーバーを複数のクライアントで再利用できます。