GitHub MCP サーバー
GitHub MCP サーバーは、GitHub API とのシームレスな統合を提供し、開発者とツールに高度な自動化と対話機能を可能にするモデル コンテキスト プロトコル (MCP)サーバーです。
ユースケース
- GitHub のワークフローとプロセスを自動化します。
- GitHub リポジトリからデータを抽出して分析します。
- GitHub のエコシステムと対話する AI 搭載のツールとアプリケーションを構築します。
前提条件
- コンテナ内でサーバーを実行するには、 Dockerがインストールされている必要があります。
- Dockerをインストールしたら、Dockerが実行中であることを確認する必要があります。イメージは公開されているため、プル時にエラーが発生する場合は、トークンの有効期限が切れている可能性があります。docker
docker logout ghcr.io
実行する必要があります。 - 最後に、 GitHub個人アクセストークンを作成する必要があります。MCPサーバーは多くのGitHub APIを使用できるため、AIツールに付与する権限を有効にしてください(アクセストークンの詳細については、 ドキュメントをご覧ください)。
インストール
VS Codeでの使用
素早くインストールするには、このREADMEの上部にあるワンクリックインストールボタンのいずれかを使用してください。インストールフローが完了したら、エージェントモード(Copilot Chatのテキスト入力欄にあります)に切り替えると、サーバーが起動します。
手動でインストールする場合は、VS Code のユーザー設定 (JSON) ファイルに次の JSON ブロックを追加します。Ctrl Ctrl + Shift + P
を押してPreferences: Open User Settings (JSON)
と入力すると、このブロックを追加できます。
オプションとして、同様の例(つまり mcp キーなし)をワークスペース内の.vscode/mcp.json
ファイルに追加することもできます。これにより、他のユーザーと設定を共有できるようになります。
MCP サーバー ツールの使用の詳細については、VS Code のエージェント モードのドキュメントを参照してください。
Claude Desktopでの使用
ソースからビルド
Dockerをお持ちでない場合は、 go build
使用してcmd/github-mcp-server
ディレクトリにバイナリをビルドし、 github-mcp-server stdio
コマンドでGITHUB_PERSONAL_ACCESS_TOKEN
環境変数にトークンを設定します。ビルドの出力先を指定するには、 -o
フラグを使用します。ビルドされた実行ファイルをcommand
として使用するようにサーバーを設定する必要があります。例:
ツール構成
GitHub MCP Serverは、 --toolsets
フラグを使用して特定の機能グループの有効化または無効化をサポートしています。これにより、AIツールで利用可能なGitHub API機能を制御できます。必要なツールセットのみを有効化することで、LLMによるツール選択が容易になり、コンテキストサイズを削減できます。
利用可能なツールセット
次のツール セットが利用可能です (すべてデフォルトでオンになっています)。
ツールセット | 説明 |
---|---|
repos | リポジトリ関連ツール(ファイル操作、ブランチ、コミット) |
issues | 問題関連のツール(作成、読み取り、更新、コメント) |
users | GitHubユーザーに関するあらゆること |
pull_requests | プルリクエスト操作(作成、マージ、レビュー) |
code_security | コードスキャンアラートとセキュリティ機能 |
experiments | 実験的な機能(安定していないと見なされます) |
ツールセットの指定
LLM で使用できるようにするツールセットを指定するには、次の 2 つの方法で許可リストを渡すことができます。
- コマンドライン引数の使用:
- 環境変数の使用:
両方が指定されている場合は、環境変数GITHUB_TOOLSETS
コマンドライン引数よりも優先されます。
Docker でツールセットを使用する
Docker を使用する場合、ツールセットを環境変数として渡すことができます。
「すべて」のツールセット
他の構成に関係なく、利用可能なすべてのツールセットを有効にするために、特別なツールセットall
を提供できます。
または環境変数を使用します:
動的ツール検出
注:この機能は現在ベータ版であり、すべての環境でご利用いただけない可能性があります。ぜひお試しいただき、問題が発生した場合はお知らせください。
すべてのツールを有効にした状態で起動する代わりに、動的ツールセット検出を有効にすることができます。動的ツールセット検出を有効にすると、MCPホストはユーザーのプロンプトに応じてツールセットを一覧表示し、有効にすることができます。これにより、利用可能なツールの数が多すぎてモデルが混乱する状況を回避できます。
動的ツール検出の使用
バイナリを使用する場合、 --dynamic-toolsets
フラグを渡すことができます。
Docker を使用する場合、ツールセットを環境変数として渡すことができます。
GitHub エンタープライズ サーバー
--gh-host
フラグと環境変数GITHUB_HOST
使用して、GitHub Enterprise Server のホスト名を設定できます。ホスト名の先頭にhttps://
URI スキームを追加してください。そうしないと、デフォルトでhttp://
が使用されますが、GitHub Enterprise Server はこれをサポートしていません。
i18n / 説明の上書き
ツールの説明は、バイナリと同じディレクトリにgithub-mcp-server-config.json
ファイルを作成することで上書きできます。
ファイルには、ツール名をキー、新しい説明を値として持つJSONオブジェクトが含まれている必要があります。例:
--export-translations
フラグを付けてバイナリを実行すると、現在の翻訳のエクスポートを作成できます。
このフラグにより、これまでに行った翻訳/オーバーライドが保持され、最後にエクスポートしてからバイナリに追加された新しい翻訳が追加されます。
環境変数を使って説明を上書きすることもできます。環境変数名はJSONファイル内のキーと同じで、 GITHUB_MCP_
というプレフィックスが付き、すべて大文字になります。
たとえば、 TOOL_ADD_ISSUE_COMMENT_DESCRIPTION
ツールをオーバーライドするには、次の環境変数を設定できます。
ツール
ユーザー
- get_me - 認証されたユーザーの詳細を取得する
- パラメータは必要ありません
問題
- get_issue - リポジトリ内の問題の内容を取得します
owner
: リポジトリの所有者(文字列、必須)repo
: リポジトリ名(文字列、必須)issue_number
: 発行番号(数値、必須)
- get_issue_comments - GitHub の問題に対するコメントを取得する
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
: ページあたりの結果数(数値、オプション)
- update_issue - GitHub リポジトリ内の既存の問題を更新する
owner
: リポジトリの所有者(文字列、必須)repo
: リポジトリ名(文字列、必須)issue_number
: 更新する問題番号(数値、必須)title
: 新しいタイトル(文字列、オプション)body
: 新しい説明(文字列、オプション)state
: 新しい状態('open' または 'closed')(文字列、オプション)labels
: 新しいラベル(文字列[]、オプション)assignees
: 新しい担当者(文字列[], オプション)milestone
: 新しいマイルストーン番号(数値、オプション)
- search_issues - 問題とプルリクエストを検索する
query
: 検索クエリ(文字列、必須)sort
: ソートフィールド(文字列、オプション)order
: ソート順(文字列、オプション)page
: ページ番号(数値、オプション)perPage
: ページあたりの結果数(数値、オプション)
プルリクエスト
- get_pull_request - 特定のプルリクエストの詳細を取得する
owner
: リポジトリの所有者(文字列、必須)repo
: リポジトリ名(文字列、必須)pullNumber
: プルリクエスト番号(数値、必須)
- list_pull_requests - リポジトリのプルリクエストを一覧表示してフィルタリングする
owner
: リポジトリの所有者(文字列、必須)repo
: リポジトリ名(文字列、必須)state
: PRの状態(文字列、オプション)sort
: ソートフィールド(文字列、オプション)direction
: ソート方向(文字列、オプション)perPage
: ページあたりの結果数(数値、オプション)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参照の予想される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
: コメントが適用されるプルリクエストの差分内のBLOBの行(数値、オプション)side
: コメントする差分の側面(LEFT または RIGHT)(文字列、オプション)start_line
: 複数行コメントの場合、範囲の最初の行(数値、オプション)start_side
: 複数行コメントの場合、diffの開始側(LEFTまたはRIGHT)(文字列、オプション)subject_type
: コメントが対象となるレベル(行またはファイル)(文字列、オプション)in_reply_to
: 返信先のレビューコメントのID(数値、オプション)。指定する場合は、本文のみ必須で、その他のパラメータは無視されます。
- update_pull_request - GitHub リポジトリ内の既存のプルリクエストを更新する
owner
: リポジトリの所有者(文字列、必須)repo
: リポジトリ名(文字列、必須)pullNumber
: 更新するプルリクエスト番号(数値、必須)title
: 新しいタイトル(文字列、オプション)body
: 新しい説明(文字列、オプション)state
: 新しい状態('open' または 'closed')(文字列、オプション)base
: 新しいベースブランチ名(文字列、オプション)maintainer_can_modify
: メンテナーによる編集を許可する(ブール値、オプション)
- request_copilot_review - プルリクエストに対する GitHub Copilot レビューをリクエストする (実験的; GitHub API サポートの対象)
owner
: リポジトリの所有者(文字列、必須)repo
: リポジトリ名(文字列、必須)pullNumber
: プルリクエスト番号(数値、必須)- 注: 現在、このツールはgithub.comでのみ動作します。
リポジトリ
- create_or_update_file - リポジトリ内の単一のファイルを作成または更新する
owner
: リポジトリの所有者(文字列、必須)repo
: リポジトリ名(文字列、必須)path
: ファイルパス(文字列、必須)message
: コミットメッセージ(文字列、必須)content
: ファイルの内容(文字列、必須)branch
: ブランチ名(文字列、オプション)sha
: 更新する場合のファイルSHA(文字列、オプション)
- list_branches - GitHub リポジトリ内のブランチを一覧表示する
owner
: リポジトリの所有者(文字列、必須)repo
: リポジトリ名(文字列、必須)page
: ページ番号(数値、オプション)perPage
: ページあたりの結果数(数値、オプション)
- push_files - 1回のコミットで複数のファイルをプッシュする
owner
: リポジトリの所有者(文字列、必須)repo
: リポジトリ名(文字列、必須)branch
: プッシュ先のブランチ(文字列、必須)files
: プッシュするファイル。パスとコンテンツが含まれます (配列、必須)message
: コミットメッセージ(文字列、必須)
- search_repositories - GitHub リポジトリを検索する
query
: 検索クエリ(文字列、必須)sort
: ソートフィールド(文字列、オプション)order
: ソート順(文字列、オプション)page
: ページ番号(数値、オプション)perPage
: ページあたりの結果数(数値、オプション)
- 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
: ページあたりの結果数(数値、オプション)
- get_commit - リポジトリからコミットの詳細を取得する
owner
: リポジトリの所有者(文字列、必須)repo
: リポジトリ名(文字列、必須)sha
: コミットSHA、ブランチ名、またはタグ名(文字列、必須)page
: コミット内のファイルのページ番号(数値、オプション)perPage
: コミット内のファイルのページあたりの結果数(数値、オプション)
- search_code - GitHubリポジトリ全体でコードを検索する
query
: 検索クエリ(文字列、必須)sort
: ソートフィールド(文字列、オプション)order
: ソート順(文字列、オプション)page
: ページ番号(数値、オプション)perPage
: ページあたりの結果数(数値、オプション)
ユーザー
- search_users - GitHub ユーザーを検索
q
: 検索クエリ(文字列、必須)sort
: ソートフィールド(文字列、オプション)order
: ソート順(文字列、オプション)page
: ページ番号(数値、オプション)perPage
: ページあたりの結果数(数値、オプション)
コードスキャン
- get_code_scanning_alert - コードスキャンアラートを取得する
owner
: リポジトリの所有者(文字列、必須)repo
: リポジトリ名(文字列、必須)alertNumber
: アラート番号(数値、必須)
- list_code_scanning_alerts - リポジトリのコードスキャンアラートを一覧表示する
owner
: リポジトリの所有者(文字列、必須)repo
: リポジトリ名(文字列、必須)ref
: Git 参照 (文字列、オプション)state
: アラート状態(文字列、オプション)severity
: アラートの重大度(文字列、オプション)tool_name
: コードスキャンに使用するツールの名前(文字列、オプション)
秘密スキャン
- get_secret_scanning_alert - シークレットスキャンアラートを取得する
owner
: リポジトリの所有者(文字列、必須)repo
: リポジトリ名(文字列、必須)alertNumber
: アラート番号(数値、必須)
- list_secret_scanning_alerts - リポジトリのシークレットスキャンアラートを一覧表示する
owner
: リポジトリの所有者(文字列、必須)repo
: リポジトリ名(文字列、必須)state
: アラート状態(文字列、オプション)secret_type
: フィルタリングするシークレットの種類をコンマ区切りのリストで指定します(文字列、オプション)resolution
: 解決ステータス(文字列、オプション)
リソース
リポジトリコンテンツ
- リポジトリ コンテンツの取得特定のパスにあるリポジトリのコンテンツを取得します。
- テンプレート:
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は現在不安定であり、互換性を損なう変更が行われる可能性があります。将来的には安定性を提供する可能性がありますので、安定性が重要となるユースケースがある場合は、問題報告をお願いします。
ライセンス
このプロジェクトはMITオープンソースライセンスの条件に基づいてライセンスされています。全文についてはMITをご覧ください。
This server cannot be installed
remote-capable server
The server can be hosted and run remotely because it primarily relies on remote services or has no dependency on the local environment.
ルイユ・マ
Related MCP Servers
- PythonMIT License
- PythonGPL 3.0
- GoMIT License
- JavaScriptMIT License