💬

CursorからGitHub GraphQL APIに雑にクエリを投げるMCPを自作した

に公開

概要

  • Cursorに設計/仕様の相談をしたり、長ーいissueコメントの最新状況まとめを書かせたり、随所で行われてる議論からホットトピックを抽出させたりしたかった
  • GitHubのIssues, Pull Requests, Projects(カンバン)にアクセスできるMCPが欲しかったが、GitHubの公式MCPではやりたいことができなかった
  • 雑に自作したので使い方、所感を紹介します

前提

AIコードエディター「Cursor」
https://www.cursor.com/en

GitHub GraphQL API
https://docs.github.com/en/graphql

MCPとは
https://modelcontextprotocol.io/introduction

自作MCPの中身と使い方

中身

  • GitHub GraphQL APIに対してクエリを投げつけて返すだけのシンプルなもの
  • コードと使い方は公開してある

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

使い方

1. GitHubのPersonal Access Token を取得する

初めてやる方はこの辺を参考にどうぞ
https://qiita.com/RyutoYoda/items/c6908025c0aef4b35cdd

2. CursorのMCP設定を足す

  • Cursor の mcp.json に下記の github-cli セクションを追加する
  • env<PERSONAL_ACCESS_TOKEN> に自分の GitHub アクセストークンを貼る
{
  "mcpServers": {
    "github-cli": {
      "command": "docker",
      "args": [
        "run",
        "-i",
        "--rm",
        "-e",
        "GITHUB_PERSONAL_ACCESS_TOKEN",
        "ikutani41/github-cli-mcp-server"
      ],
      "env": {
        "GITHUB_PERSONAL_ACCESS_TOKEN": "<PERSONAL ACCESS TOKEN HERE>"
      }
    }
  }
}

3. Cursorを再起動

(厳密には再起動しなくてもほぼ大丈夫なんですが一応

4. 必要に応じてRulesにインストラクションを追加

このMCPを使う際のガイドを与えておくと、より良い感じに動きそうです。
参考用のRuleファイルも置いておいたので、<>で囲われているOwner名Repository名をご自身の環境に合わせて変えて使ってみてください。

https://github.com/Everforth/github-cli-mcp-server/blob/main/samples/github.mdc

雑感

こういう使い方ができる。
重たい腰を上げて大量の情報をスキャンして整理する、みたいな仕事がとても楽になった。

https://github.com/Everforth/pj-name/issues/1234

このissueのやりとり見て最新状態をまとめて。決定事項と残と重要情報。

https://github.com/Everforth/pj-name/pull/789

このPRやっとApprove付いた!やりとり拾って別チケットとして切り出すべき作業や課題を抽出して。

https://github.com/orgs/Everforth/projects/12

このプロジェクトの Ready カラムにある issue を見て、それぞれの重さを3つにレベル分けして。アサイン考えたい。

https://github.com/Everforth/pj-name/issues/1234

設計議論が着地しました!議論を追って最終的な設計をtmpフォルダに書いといて!
データ設計とAPIエンドポイント設計だけでOKです。

GitHub公式MCPで「やりたいことができなかった」件について

  • 具体的に困ったことは2つ
    • カンバン(ProjectV2)にアクセスする方法がなかった
    • issueやpull requestのリストやcommentのリストを取得する場合、20件指定でもresponseが大きすぎて(10万文字とか)Cursor Agentが処理しきれなかった
  • そのため、GitHubのリソースに自由にアクセスできて、ほしい情報だけ取得することでresponseも最小限で済ませられるGraphQL APIを使う方法を採用した
    • 元々、私はREST APIの方が分かりやすくて好きだった
    • AIにとっては分かりやすさの差はなさそう
    • リソース横断で目的に応じた情報を取りたいというREST APIが有利だと思っていたユースケースも、Cursorが自分で数種類クエリを組み立てて順次勝手に実行してくれるので特に困らなかった
    • (たまにスキーマ理解が抜けていてケアレスミスをするので、そういうものは手順を作ってやらせることで解決している
  • GitHubの公式MCPは新旧あり、この試みを始めた当初は旧しかなかった
    • 引き続きREST APIっぽい思想でtool提供しているようなので、今回の用途においては乗り換えはなさそう


https://github.com/modelcontextprotocol/servers/tree/main/src/github


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

Discussion