🐙

GitHub公式のMCPサーバーをCursor/Windsurfでつかう

に公開

GitHub 公式が Go 実装の MCP(Model Context Protocol)サーバー GitHub MCP Server 0.2.0 を2025年4月17日に公開しました。

https://github.com/github/github-mcp-server

これにより、従来の Ahthropic が管理する TypeScript 版 modelcontextprotocol/servers の GitHub 実装が非推奨となり、Docker さえあれば即利用できます。

手順

  1. Docker を利用できるように OrbStack をインストール
  2. GitHub 上で認証のための PAT (Personal Access Token) を作成する
  3. エディタで設定する

Docker 環境の準備

Mac の Docker 環境は Docker Desktop が有名ですが、OrbStack の方が明らかに軽量なのでここでは OrbStack を推奨します。

https://orbstack.dev/

すでに Docker Desktop を利用している場合でも、OrbStack のインストール過程で移行フローが実行されるので試してみてください。

PAT を生成

GitHub MCP サーバーは GitHub API を利用するため、認証用の PAT (Personal Access Token) が必須です。
PAT は2種類あり、より細かく権限を制御可能な Fine-grained token の利用を推奨されていますが、理解するのが手間なので Classic token でも大丈夫です。

  • Personal access tokens (classic)
  • Fine-grained personal access tokens

Classic token の作り方

  • https://github.com/settings/tokens を開く
  • Generate new token をクリック
  • Generate new token (classic) を選択
  • Note: github-mcp-server を入力
  • Expiration: お試しなら 7 days, 再設定が面倒なら No expiration
  • Select scopes で repo 配下を全選択 (Read/Write)
  • Generate token をクリックし、生成された PAT をコピーする

Fine-grained token の作り方

セキュリティ志向が強い人向けの手順を開く
  • https://github.com/settings/personal-access-tokens を開く
  • Generate new token をクリック
  • Token name: github-mcp-server を入力
  • Expiration: お試しなら 7 days, 再設定が面倒なら No expiration
  • Repository access: All repositories
  • Repository Permissions
    • Administration: Read and write
      • 注)create_repository, fork_repository をさせたい場合のみ必要。AI で自動化させる恩恵は少ないはずなのでなくてよい
    • Code scanning alerts: Read-only
    • Commit statuses: Read and write
    • Contents: Read and write
    • Issues: Read and write
    • Pull requests: Read and write
    • Secret scanning alerts: Read-only
  • Generate token をクリックし、生成された PAT をコピーする

エディタ側の設定

Cursor の設定

  • メニュー Cursor ▸ Preferences ▸ Cursor Settings を開く
  • MCP セクション ▸ Add new global MCP server
  • mcp.json が開くので以下を入力
mcp.json
{
  "mcpServers": {
    "github": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "GITHUB_PERSONAL_ACCESS_TOKEN",
        "ghcr.io/github/github-mcp-server"
      ],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_******"
      }
    }
  }
}
  • ghp_****** の部分に作成した PAT を貼り付けます

Windsurf の設定

  • Windsurf ▸ Preferences ▸ Windsurf Settings を開く
  • Cascade ▸ Add Server ▸ Add custom server を選択
  • mcp_config.json が開くので以下を入力
mcp_config.json
{
  "mcpServers": {
    "github": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "GITHUB_PERSONAL_ACCESS_TOKEN",
        "ghcr.io/github/github-mcp-server"
      ],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_******"
      }
    }
  }
}
  • ghp_****** の部分に作成した PAT を貼り付けます

Windsurf の招待コード

まだ Windsurf を使ったことがない人は、以下の Refferal Link から登録すると 250 のボーナスクレジットがお互いに手に入ります。

https://windsurf.com/refer?referral_code=ll9owuyflqikrcqd

動作確認

Cursor なら Agent Mode、Windsurf なら Cascade の Write mode で指示をし、GitHub MCP サーバーが動作するか確認します。

Prompt
get_me を実行して
Prompt
サンプルの Issue を作成して
Prompt
サンプルの PR を作成して

GitHub MCP サーバーを最新にする

執筆時点では、2025年4月22日にリリースされた 0.2.1 が最新です。新しいバージョンがリリースされたら Docker イメージを最新にしなければ更新されません。

https://github.com/github/github-mcp-server/releases

MCP サーバーを実行する Docker コマンドは以下のような引数が使われています。

docker
  run \
  -i \
  --rm \
  -e GITHUB_PERSONAL_ACCESS_TOKEN \
  ghcr.io/github/github-mcp-server

Docker の pull policy が未指定のため、デフォルトの missing が使われます。ローカルに Docker イメージがない時だけ pull するという指定です。

そのため、最新版がリリースされたら手動で pull する必要があります。

docker pull ghcr.io/github/github-mcp-server:latest

これだと少し面倒なので、pull policy を always にすることで MCP サーバー起動時に常に最新化されます。各エディタの MCP の JSON ファイルの args に --pull=always を追加してください。

{
  "mcpServers": {
    "github": {
      "command": "docker",
      "args": [
        "run",
        "--pull=always",
        "-i",
        "--rm",
        "-e",
        "GITHUB_PERSONAL_ACCESS_TOKEN",
        "ghcr.io/github/github-mcp-server"
      ],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "ghp_******"
      }
    }
  }
}

ただし、この方法は壊れたコードがリリースされた場合や、悪意のあるコードが埋め込まれてリリースされた場合が仮にあったとすると、ゼロデイ攻撃を受けるリスクがあることを許容することになります。

Discussion