my-mcp-servers
This project is a Dockerized MCP server that interfaces with GitHub's API to facilitate operations like file management, repository search, and issue tracking, providing automated branch creation, comprehensive error handling, and advanced search features.
Dockerized GitHub MCP Server
GitHubのAPIと連携し、リポジトリのファイル操作、リポジトリ管理、検索機能などを提供するModel Context Protocol(MCP)サーバーをDockerコンテナとして提供します。
機能
- 自動ブランチ作成: ファイル作成/更新時やpush時に、存在しないブランチを自動的に作成
- 包括的なエラーハンドリング: 一般的な問題に対する明確なエラーメッセージを提供
- Gitヒストリー保持: 操作は強制pushを使わず適切なGitヒストリーを維持
- バッチ操作: 単一ファイルと複数ファイルの両方の操作をサポート
- 高度な検索: コード、イシュー/PR、ユーザーの検索をサポート
セットアップ
1. GitHub Personal Access Tokenの準備
-
GitHub Personal Access Tokenを作成します
- GitHubの設定 > 開発者設定 > Personal access tokenに移動
- このトークンがアクセスできるリポジトリを選択(Public、All、または特定のリポジトリ)
repo
スコープ(「プライベートリポジトリの完全な制御」)を選択- または、公開リポジトリのみを操作する場合は
public_repo
スコープのみを選択
- または、公開リポジトリのみを操作する場合は
- 生成されたトークンをコピー
-
.env
ファイルにトークンを設定:GITHUB_PERSONAL_ACCESS_TOKEN=ghp_your_token_here
2. Dockerによるビルドと起動
ビルド手順
# Dockerイメージのビルド
docker build -t mcp/github -f src/github/Dockerfile .
起動手順(docker runの場合)
docker run -it --rm -e GITHUB_PERSONAL_ACCESS_TOKEN=$GITHUB_PERSONAL_ACCESS_TOKEN -p 5000:5000 mcp/github
複数コンテナ起動(docker-compose)
# .envファイルを作成してトークンを設定
cp .env.template .env
# 環境変数を編集
nano .env
# 起動
docker-compose up -d
これにより、2つの異なるポート(5002と5003)でGitHub MCPサーバーが起動します。 コンテナはttyモードで起動し、stdioインターフェースを通じて通信を待機します。
3. Cursorでの使用方法
MCPサーバーは標準入出力(stdio)を介して通信するように設計されています。Cursorと連携するには、claude_desktop_config.json
に以下の設定を追加してください:
{
"mcpServers": {
"github": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"GITHUB_PERSONAL_ACCESS_TOKEN",
"mcp/github"
],
"env": {
"GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_your_token_here"
}
}
}
}
この設定により、Cursorが必要なときにだけMCPサーバーを起動し、処理が完了すると自動的に終了します。
使用方法
MCPサーバーは、ツール名とその入力パラメータを含むメッセージ形式でリクエストを受け付けます。
リクエスト例(/respond エンドポイント)
ファイルの作成または更新
curl -X POST http://localhost:5002/respond \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"role": "user",
"content": {
"tool_name": "create_or_update_file",
"input": {
"owner": "your-username",
"repo": "your-repo",
"path": "example.txt",
"content": "Hello, world!",
"message": "Add example file",
"branch": "main"
}
}
}
]
}'
リポジトリ検索
curl -X POST http://localhost:5002/respond \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"role": "user",
"content": {
"tool_name": "search_repositories",
"input": {
"query": "modelcontextprotocol"
}
}
}
]
}'
ファイル内容取得
curl -X POST http://localhost:5002/respond \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"role": "user",
"content": {
"tool_name": "get_file_contents",
"input": {
"owner": "octocat",
"repo": "Hello-World",
"path": "README.md"
}
}
}
]
}'
サポートしているツール
GitHub MCPサーバーは以下の機能を提供します:
create_or_update_file
- リポジトリに単一ファイルを作成/更新push_files
- 複数ファイルを一度のコミットでプッシュsearch_repositories
- GitHubリポジトリを検索create_repository
- 新しいGitHubリポジトリを作成get_file_contents
- ファイルまたはディレクトリの内容を取得create_issue
- 新しいイシューを作成create_pull_request
- 新しいプルリクエストを作成fork_repository
- リポジトリをフォークcreate_branch
- 新しいブランチを作成list_commits
- ブランチのコミット一覧を取得list_issues
- リポジトリのイシュー一覧を取得update_issue
- 既存のイシューを更新add_issue_comment
- イシューにコメントを追加search_code
- コードを検索search_issues
- イシューとプルリクエストを検索search_users
- GitHubユーザーを検索get_issue
- 特定のイシューの詳細を取得get_pull_request
- 特定のプルリクエストの詳細を取得list_pull_requests
- プルリクエスト一覧を取得create_pull_request_review
- プルリクエストのレビューを作成merge_pull_request
- プルリクエストをマージget_pull_request_files
- プルリクエストの変更ファイル一覧を取得get_pull_request_status
- プルリクエストのステータスを取得update_pull_request_branch
- プルリクエストのブランチを更新get_pull_request_comments
- プルリクエストのコメントを取得get_pull_request_reviews
- プルリクエストのレビューを取得
詳細な各ツールの入力パラメータや使用方法については、公式リポジトリのドキュメントを参照してください。
注意事項
- アクセストークン: GitHub Personal Access Tokenは必要なスコープ(repoまたはpublic_repo)を持つものを使用してください。APIレート制限にも注意してください。
- リクエスト形式: MCPのプロトコルに準拠し、各メッセージはroleとcontent(中にtool_nameとinput)を含む必要があります。
- stdioモード: このMCPサーバーはHTTPサーバーではなく、標準入出力(stdio)を介して通信するよう設計されています。Cursorなどのツールから呼び出して使用するのが最適です。
ライセンス
このプロジェクトは、元のMCP serverと同じMITライセンスのもとで提供されています。