GitHub MCP Server について
GitHub MCP Serverは、MCPクライアントからGitHub APIを操作するTypeScript製サーバーです。リポジトリ、ファイル、イシュー、プルリクエスト、検索機能に加え、ブランチの自動作成と複数ファイルの更新に対応します。
主な機能
- 01リポジトリファイルの作成と更新
- 02複数ファイルを1コミットでプッシュ
- 03リポジトリ、ブランチ、フォークの管理
- 04イシューとプルリクエストの作成・管理
- 05コード、リポジトリ、イシュー、ユーザーの検索
- 06強制プッシュなしでGit履歴を維持
活用シーン
- 01リポジトリ内のファイルを更新
- 02コード、リポジトリ、ユーザーの検索
- 03プルリクエストのレビューとマージ
- 04リポジトリのイシューの作成・管理
MCP 対応
GitHub APIの操作をMCPクライアント向けツールとして公開し、リポジトリ、ファイル、イシュー、プルリクエスト、検索機能を提供します。GitHub公式のMCPサーバーではなく、独立したプロジェクトです。
設定
ローカルサーバーの設定はどのクライアントでも共通です。コピーしてクライアントの MCP 設定ファイルに貼り付けてください。
ツール
ローカルサーバーのツールはマシン上で起動して初めて取得できます。メンテナーはまだツール一覧を提供していません。
詳細
GitHub MCP サーバー
免責事項!: これは公式の GitHub MCP サーバーではありません。公式版については、http://github.com/github/github-mcp-server リポジトリをご覧ください。これは、公式サーバーに不足していると考えた機能を独自に追加した TypeScript サーバーです。ベースコードは、modelcontextprotocol リポジトリの servers ディレクトリのものです。
ファイル操作、リポジトリ管理、検索機能などを利用できる、GitHub API 用の MCP サーバーです。
特長
- ブランチの自動作成:ファイルの作成・更新時や変更のプッシュ時に、ブランチが存在しない場合は自動的に作成します
- 包括的なエラー処理:よくある問題について、わかりやすいエラーメッセージを表示します
- Git 履歴の保持:強制プッシュを行わず、適切な Git 履歴を維持して操作します
- 一括操作:単一ファイルと複数ファイルの両方の操作に対応します
- 高度な検索:コード、Issue/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):ページあたりの検索結果数(最大 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- 新しい Issue を作成します
- 入力:
owner(string):リポジトリの所有者repo(string):リポジトリ名title(string):Issue のタイトルbody(optional string):Issue の説明assignees(optional string[]):割り当てるユーザー名labels(optional string[]):追加するラベルmilestone(optional number):マイルストーン番号
- 戻り値:作成した Issue の詳細
-
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(任意の string):状態で絞り込みます('open'、'closed'、'all')head(任意の string):ヘッドユーザー/組織とブランチで絞り込みますbase(任意の string):ベースブランチで絞り込みますsort(任意の string):並べ替え基準('created'、'updated'、'popularity'、'long-running')direction(任意の string):並べ替え順('asc'、'desc')per_page(任意の number):1 ページあたりの結果数(最大 100)page(任意の number):ページ番号
- 戻り値:プルリクエストの詳細の配列
create_pull_request_review
- プルリクエストのレビューを作成します
- 入力:
owner(string):リポジトリのオーナーrepo(string):リポジトリ名pull_number(number):プルリクエスト番号body(string):レビューコメントのテキストevent(string):レビューアクション('APPROVE'、'REQUEST_CHANGES'、'COMMENT')commit_id(任意の string):レビュー対象のコミットの SHAcomments(任意の array):行ごとのコメント。それぞれ次の項目を含みます:path(string):ファイルパスposition(number):差分内の行位置body(string):コメントのテキスト
- 戻り値:作成されたレビューの詳細
merge_pull_request
- プルリクエストをマージします
- 入力:
owner(string):リポジトリのオーナーrepo(string):リポジトリ名pull_number(number):プルリクエスト番号commit_title(任意の string):マージコミットのタイトルcommit_message(任意の string):マージコミットの追加詳細merge_method(任意の 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
- ベースブランチの最新の変更をプルリクエストのブランチに反映します(GitHub の「Update branch」ボタンと同等です)
- 入力:
owner(string):リポジトリのオーナーrepo(string):リポジトリ名pull_number(number):プルリクエスト番号expected_head_sha(任意の 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 など)、レビュアー、レビュー本文などの詳細を含む、プルリクエストのレビューの配列
list_sub_issues
- 指定された issue のサブ issue の一覧を取得します
- 入力:
owner(string):リポジトリの所有者repo(string):リポジトリ名issue_number(number):issue の番号page(optional number):ページ番号per_page(optional number):1 ページあたりの結果数
- 戻り値:issue の詳細の配列
reprioritize_sub_issue
- sub_issue の順序を変更します
- 入力:
owner(string):リポジトリの所有者repo(string):リポジトリ名pull_number(number):プルリクエスト番号issue_number(number):issue の番号sub_issue_id(number):優先順位を変更するサブ issue の IDafter_id(number):優先順位をこのサブ issue の後にする ID(位置指定引数の after または before のいずれかを指定してください)。before_id(number):優先順位をこのサブ issue の前にする ID(位置指定引数の after または before のいずれかを指定してください)。
- 戻り値:サブ issue の詳細
remove_sub_issue
- issue から sub_issue を削除します
- 入力:
owner(string):リポジトリの所有者repo(string):リポジトリ名pull_number(number):プルリクエスト番号issue_number(number):issue の番号sub_issue_id(number):削除するサブ issue の ID
- 戻り値:サブ issue の詳細
add_sub_issue
- プルリクエストのレビューを取得します
- 入力:
owner(string):リポジトリの所有者repo(string):リポジトリ名pull_number(number):プルリクエスト番号issue_number(number):issue の番号sub_issue_id(number):サブ issue として追加する issue の ID
- 戻り値:サブ issue の詳細
list_labels_for_issue
- issue のすべてのラベルを一覧表示します
- 入力:
owner(string):リポジトリの所有者repo(string):リポジトリ名issue_number(number):issue 番号per_page(optional number):1 ページあたりの結果数page(optional number):ページ番号
- 戻り値:ラベルの詳細の配列
add_labels_to_issue
- issue にラベルを追加します
- 入力:
owner(string):リポジトリの所有者repo(string):リポジトリ名issue_number(number):issue 番号labels(string[]):追加するラベル名の配列
- 戻り値:issue に適用されたラベルの詳細の配列
set_labels_for_issue
- issue のラベルを設定し、既存のラベルをすべて置き換えます
- 入力:
owner(string):リポジトリの所有者repo(string):リポジトリ名issue_number(number):issue 番号labels(optional string[]):設定するラベル名の配列。すべてのラベルを削除するには、空の配列を指定します。
- 戻り値:issue に適用されたラベルの詳細の配列
remove_label_from_issue
- issue からラベルを削除します
- 入力:
owner(string):リポジトリの所有者repo(string):リポジトリ名issue_number(number):issue 番号name(string):削除するラベルの名前
- 戻り値:成功ステータス(通常は 204 No Content)
remove_all_labels_from_issue
- issue からすべてのラベルを削除します
- 入力:
owner(string):リポジトリの所有者repo(string):リポジトリ名issue_number(number):issue 番号
- 戻り値:成功ステータス(通常は 204 No Content)
list_labels_for_repo
- リポジトリのすべてのラベルを一覧表示します
- 入力:
owner(string):リポジトリの所有者repo(string):リポジトリ名per_page(optional number):1 ページあたりの結果数page(optional number):ページ番号
- 戻り値:リポジトリのラベルの詳細の配列
create_label
- リポジトリにラベルを作成します
- 入力:
owner(string):リポジトリのオーナーrepo(string):リポジトリ名name(string):ラベル名color(省略可能な string):先頭の # を除いた16進数カラーコードdescription(省略可能な string):ラベルの簡単な説明
- 戻り値:作成されたラベルの詳細
get_label
- リポジトリのラベルを1つ取得します
- 入力:
owner(string):リポジトリのオーナーrepo(string):リポジトリ名name(string):取得するラベル名
- 戻り値:ラベルの詳細
update_label
- リポジトリの既存のラベルを更新します
- 入力:
owner(string):リポジトリのオーナーrepo(string):リポジトリ名name(string):更新するラベルの現在の名前new_name(省略可能な string):ラベルの新しい名前color(省略可能な string):新しい16進数カラーコードdescription(省略可能な string):新しい説明
- 戻り値:更新されたラベルの詳細
delete_label
- リポジトリからラベルを削除します
- 入力:
owner(string):リポジトリのオーナーrepo(string):リポジトリ名name(string):削除するラベル名
- 戻り値:成功ステータス(通常は 204 No Content)
list_labels_for_milestone
- マイルストーン内のイシューに付けられたラベルを一覧表示します
- 入力:
owner(string):リポジトリのオーナーrepo(string):リポジトリ名milestone_number(number):マイルストーン番号per_page(省略可能な number):1ページあたりの結果数page(省略可能な number):ページ番号
- 戻り値:マイルストーンのラベル詳細の配列
list_milestones
- リポジトリのマイルストーンを一覧表示します
- 入力:
owner(string):リポジトリのオーナーrepo(string):リポジトリ名state(省略可能な string):状態で絞り込みます('open'、'closed'、'all'、デフォルト:'open')sort(省略可能な string):並べ替え基準('due_on'、'completeness'、デフォルト:'due_on')direction(省略可能な string):並べ替え方向('asc'、'desc'、デフォルト:'asc')per_page(省略可能な number):1ページあたりの結果数page(省略可能な number):ページ番号
- 戻り値:マイルストーン詳細の配列
create_milestone
- リポジトリにマイルストーンを作成します
- 入力:
owner(string):リポジトリのオーナーrepo(string):リポジトリ名title(string):マイルストーンのタイトルstate(省略可能な string):状態('open' または 'closed'、デフォルト:'open')description(省略可能な string):マイルストーンの説明due_on(省略可能な string):期限(ISO 8601 形式:YYYY-MM-DDTHH:MM:SSZ)
- 戻り値:作成されたマイルストーンの詳細
get_milestone
- リポジトリのマイルストーンを1つ取得します
- 入力:
owner(string):リポジトリのオーナーrepo(string):リポジトリ名milestone_number(number):マイルストーン番号
- 戻り値:マイルストーンの詳細
update_milestone
- リポジトリの既存のマイルストーンを更新します
- 入力:
owner(string):リポジトリのオーナーrepo(string):リポジトリ名milestone_number(number):更新するマイルストーン番号title(省略可能な string):新しいタイトルstate(省略可能な string):新しい状態('open' または 'closed')description(省略可能な string):新しい説明due_on(省略可能な string):新しい期限(ISO 8601 形式)
- 戻り値:更新されたマイルストーンの詳細
delete_milestone
- リポジトリからマイルストーンを削除します
- 入力:
owner(string):リポジトリのオーナーrepo(string):リポジトリ名milestone_number(number):削除するマイルストーン番号
- 戻り値:成功ステータス(通常は 204 No Content)
検索クエリ構文
コード検索
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スコープ(「プライベートリポジトリの完全な制御」)を指定してトークンを作成します- または、パブリックリポジトリのみを使用する場合は、
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 つのサーバーを複数のクライアントで再利用できます。