GitHub Analytics MCP Server
GitHub Analytics MCP サーバー
GitHub アナリティクスのための本番グレードの Model Context Protocol (MCP) 2.x サーバー。
このプロジェクトは基本的な MCP チュートリアルを超えて、実運用で実際に必要となるエンジニアリングパターンを用いた MCP サーバーの構築方法を示します。
非同期 HTTP
コネクションプーリング
明示的なタイムアウト
TTL キャッシュ
GitHub レート制限への対応
指数バックオフ付きリトライ
構造化ロギング
入力検証
並列 API リクエスト
クリーンな MCP ライフサイクル管理
実際のエンドツーエンド MCP プロトコルテスト
Agentic Data Lab の Production AI Engineering シリーズの一部として構築されました。
🎥 YouTube: Agentic Data Lab
この MCP サーバーは何をするのか?
このサーバーは、GitHub リポジトリのアナリティクスを MCP ツールとして公開します。
MCP 互換の AI クライアントは、これを使って次のことができます:
リポジトリのメタデータを確認する
最近のコミットを取得する
コントリビューターを分析する
オープン中の issue を確認する
コミットアクティビティを分析する
2 つのリポジトリを比較する
GitHub API のレート制限を確認する
例:
User:
Compare pallets/flask and django/django.
Which repository looks more active?AI クライアントは次を呼び出すことができます:
compare_reposそして、この MCP サーバーを介してライブな GitHub データを取得できます。
アーキテクチャ
┌─────────────────────┐
│ MCP Client / AI │
│ Claude / MCP Client │
└──────────┬──────────┘
│
│ MCP stdio
▼
┌─────────────────────┐
│ GitHub Analytics │
│ MCP Server │
└──────────┬──────────┘
│
┌─────────┴─────────┐
│ │
▼ ▼
Input Validation TTL Cache
│
┌─────────┴─────────┐
│ │
CACHE HIT CACHE MISS
│ │
│ ▼
│ Async HTTP Client
│ │
│ Retry + Backoff
│ │
│ ▼
│ GitHub REST API
│ │
└───────────◄───────┘
│
▼
Structured MCP Result実装された 7 つの本番パターン
1. 非同期 HTTP + コネクションプーリング
サーバーは以下を使用します:
httpx.AsyncClient同期 HTTP リクエストの代わりに。
HTTP クライアントは MCP サーバーのライフサイクル中に一度だけ作成され、ツール呼び出し間で再利用されます。
これにより以下の利点があります:
ノンブロッキング I/O
コネクションの再利用
より良い並行性
明示的なタイムアウト制御
サーバーは以下に対して個別のタイムアウトを設定します:
connect
read
write
poolRelated MCP server: ship-it-mcp
2. TTL キャッシュ
AI クライアントは、1 つの会話中に同じ MCP ツールを複数回呼び出すことがあります。
毎回 GitHub にアクセスする代わりに、サーバーはレスポンスをメモリにキャッシュします。
例:
First request
MCP Client
│
▼
MCP Server
│
▼
GitHub API
│
▼
Cache2 回目のリクエスト:
MCP Client
│
▼
MCP Server
│
▼
CACHE HIT追加の GitHub リクエストは必要ありません。
ツールごとに、データの変化速度に応じて異なる TTL を使用します。
ツール | キャッシュ TTL |
| 5 分 |
| 2 分 |
| 10 分 |
| 2 分 |
| 30 分 |
| 5 分 |
| 30 秒 |
3. GitHub レート制限への対応
GitHub はレスポンスヘッダーを通じてレート制限情報を公開します。
サーバーは以下を追跡します:
X-RateLimit-Limit
X-RateLimit-Used
X-RateLimit-Remaining
X-RateLimit-Reset
Retry-Afterサーバーは GitHub が実際にリクエストをレート制限していることを検出し、生の例外を公開する代わりに有益な MCP ツールエラーを返すことができます。
4. リトライ + 指数バックオフ
一時的なネットワーク障害と上流の 5xx レスポンスは自動的にリトライされます。
リトライのシーケンス:
Attempt 1
│
└── failure
│
▼
wait 1s
Attempt 2
│
└── failure
│
▼
wait 2s
Attempt 3
│
└── final resultバックオフの計算式は次のとおりです:
2 ** (attempt - 1)サーバーは通常の 4xx クライアントエラーを盲目的にリトライしません。
5. 構造化ロギング
MCP stdio はプロトコル通信に stdout を使用します。
そのため、運用ログは Python のロギングを通じて別途書き出されます。
例:
2026-08-27T14:14:03 | INFO | Starting GitHub Analytics MCP server
2026-08-27T14:14:04 | INFO | GET /repos/facebook/react → 200
2026-08-27T14:14:04 | INFO | CACHE HIT /repos/facebook/reactこれにより、以下を簡単に確認できます:
API リクエスト
HTTP ステータス
レイテンシ
リトライ試行
キャッシュヒット
検証エラー
レート制限の警告
6. 入力検証
リポジトリのオーナー名とリポジトリ名は、ネットワークリクエストを行う前に検証されます。
有効な名前に含めることができる文字:
letters
numbers
.
-
_たとえば:
face../../bookは、GitHub API リクエストの一部になる前にローカルで拒否されます。
7. 並列 API リクエスト
compare_repos MCP ツールは、2 つの独立したリポジトリから情報を取得する必要があります。
順番に取得する代わりに:
repo_a = await get_repo_a()
repo_b = await get_repo_b()サーバーは両方のリクエストを並行して実行します:
repo_a, repo_b = await asyncio.gather(
get_repo_a(),
get_repo_b(),
)概念的に:
Sequential
Repo A ───────────────► Done
Repo B ───────────────► Done
Parallel
Repo A ───────────────► Done
Repo B ───────────────────► Doneこれにより、リクエストが独立している場合の経過待ち時間が短縮されます。
利用可能な MCP ツール
サーバーは現在 7 つの MCP ツール を公開しています。
get_repo_overview
返す内容:
スター数
フォーク数
オープン中の issue 数
ウォッチャー数
使用言語
トピック
ライセンス
最終プッシュ日
ホームページ
リポジトリサイズ
例:
get_repo_overview(
owner="facebook",
repo="react"
)list_recent_commits
リポジトリの最近のコミットを返します。
例:
list_recent_commits(
owner="vuejs",
repo="core",
limit=5
)get_contributors
リポジトリの上位コントリビューターを返します。
例:
get_contributors(
owner="django",
repo="django",
limit=10
)list_open_issues
プルリクエストを除外した、オープン中の GitHub issue を返します。
例:
list_open_issues(
owner="pallets",
repo="flask",
limit=10
)get_commit_activity
リポジトリのコミットアクティビティを返します。内容は次のとおりです:
合計コミット数
週あたりの平均コミット数
ピークアクティビティ
最近の週次アクティビティ
compare_repos
2 つのリポジトリを並べて比較します。
例:
compare_repos(
owner1="pallets",
repo1="flask",
owner2="django",
repo2="django"
)返されるフィールドは次のとおりです:
stars
forks
open issues
language
last pushget_rate_limit_status
GitHub API のレート制限情報と、ローカル MCP サーバーのカウンターを返します。
例:
{
"limit": 60,
"used": 4,
"remaining": 56,
"resets_in_seconds": 3599,
"server_outbound_http_requests": 4,
"server_cache_hits": 1
}実際の値は、現在の GitHub API の使用状況によって異なります。
プロジェクト構成
mcp-github-analytics/
│
├── server.py
│ └── Main MCP server and GitHub tools
│
├── demo_mcp.py
│ └── Real end-to-end MCP client demo
│
├── requirements.txt
│ └── Python dependencies
│
├── .env.example
│ └── Environment variable template
│
└── .gitignoreセットアップ
1. リポジトリのクローン
git clone https://github.com/sweta2503/mcp-github-analytics.gitプロジェクトに移動します:
cd mcp-github-analytics2. 仮想環境の作成
python -m venv .venvmacOS / Linux
source .venv/bin/activateWindows
.venv\Scripts\activate3. 依存関係のインストール
pip install -r requirements.txtプロジェクトが使用するもの:
mcp[cli]==2.1.1
httpx==0.28.1
python-dotenv==1.2.3GitHub トークンの設定
GitHub トークンは、公開リポジトリのみを扱う場合はオプションですが、推奨されます。
環境変数のサンプルファイルをコピーします:
cp .env.example .envGitHub トークンを追加します:
GITHUB_TOKEN=your_github_token_here実際の .env ファイルやトークンをコミットしないでください。
実際の MCP デモを実行する
実行:
python demo_mcp.pyこれは実際の MCP エンドツーエンドテストです。
demo_mcp.py は server.py の関数を単にインポートするわけではありません。
その代わりに、次のことを行います:
1. Starts server.py as an MCP subprocess
2. Connects using MCP stdio
3. Negotiates the MCP protocol
4. Discovers the MCP tools
5. Calls the tools through MCP
6. Receives structured MCP responses次のような出力が表示されるはずです:
MCP CONNECTED — discover the real server tools
Negotiated protocol: ...
Tools discovered (7):
get_repo_overview
list_recent_commits
get_contributors
list_open_issues
get_commit_activity
compare_repos
get_rate_limit_statusキャッシュをテストする
デモは次を呼び出します:
get_repo_overview(facebook/react)を 2 回実行します。
1 回目の呼び出しは GitHub にアクセスします。
2 回目は次のように表示されるはずです:
CACHE HITそして、大幅に速く返ってきます。
並列リポジトリ比較をテストする
デモは次も実行します:
compare_repos(
pallets/flask,
django/django
)両方の上流 GitHub リクエストは、次を通じて並行して発行されます:
asyncio.gather(...)デモ出力とサーバーログをキャプチャする
MCP クライアントの出力とサーバーログをそれぞれ別々にキャプチャできます:
python demo_mcp.py > demo_output.txt 2> server.logこれにより以下が作成されます:
demo_output.txtMCP クライアントのレスポンス用と:
server.logサーバー側のログ用です。
サーバーログには、次のような有用な情報が含まれます:
GET /repos/facebook/react → 200
CACHE HIT /repos/facebook/react
GET /repos/pallets/flask → 200
GET /repos/django/django → 200サーバーを直接実行する
MCP サーバー自体は次のコマンドで起動できます:
python server.pyサーバーは MCP stdio 上で動作します。
通常、MCP 互換クライアントがこのプロセスを自動的に起動します。
サーバーを Claude Desktop に接続する
このリポジトリ内にマシン固有の claude_desktop_config.json を置いておく必要はありません。
代わりに、ローカルの Claude Desktop 設定にサーバーを追加してください。
例:
{
"mcpServers": {
"github-analytics": {
"command": "/ABSOLUTE/PATH/TO/mcp-github-analytics/.venv/bin/python",
"args": [
"/ABSOLUTE/PATH/TO/mcp-github-analytics/server.py"
],
"env": {
"GITHUB_TOKEN": "YOUR_GITHUB_TOKEN"
}
}
}
}次の部分を置き換えます:
/ABSOLUTE/PATH/TO/mcp-github-analyticsを、お使いのコンピューター上の実際のプロジェクトの場所に置き換えます。
実際の GitHub トークンをコミットしないでください。
Claude Desktop を再起動すると、GitHub アナリティクスツールが Claude で利用できるようになります。
プロンプトの例:
Compare pallets/flask and django/django.
Which repository appears more active?
Use the GitHub MCP tools and explain which data you used.エンドツーエンドのリクエストフロー
User
│
▼
Claude / MCP Client
│
│ MCP tool call
▼
GitHub Analytics MCP Server
│
├── Validate input
│
├── Check TTL cache
│
├── Cache hit ──────────────► Return result
│
└── Cache miss
│
▼
Async HTTP
│
Retry / Backoff
│
▼
GitHub REST API
│
▼
Response
│
▼
TTL Cache
│
▼
Structured MCP Response
│
▼
AI / MCP Clientローカル MCP と分散本番 MCP
このプロジェクトは、明確なローカル/stdio MCP の例として設計されているため、意図的にインメモリ TTL キャッシュを使用しています。
マルチインスタンスのリモート MCP デプロイメントでは、通常、プロセスローカルな状態を次のようなインフラストラクチャに置き換えます:
Redis
PostgreSQL
distributed rate limiting
centralized observability
authentication
tracingこのリポジトリで実証されているパターンは、その次の段階のための構成要素です。
完全版ビルドを見る
アーキテクチャ、コード、キャッシュ、リトライロジック、検証、並列リクエスト、実際の MCP デモについて、私の YouTube チャンネルで説明しています:
🎥 Agentic Data Lab
https://www.youtube.com/@agenticdatalab
このチャンネルでは次のトピックを扱っています:
Production AI Engineering
MCP
AI Agents
LangGraph
RAG
AI evaluations
Agent observability
AI system design
Data Engineering + AI
Production benchmarks and experiments
チュートリアルデモを超えた AI システムの構築に興味があるなら、チャンネル登録を検討してください。
👉 YouTube: Agentic Data Lab
コントリビューション
Issue、改善提案、プルリクエストを歓迎します。
MCP サーバーに別の便利な GitHub アナリティクスツールを追加した場合は、お気軽に PR を開いてください。
プロジェクトをサポートする
このリポジトリが役立った場合は:
⭐ リポジトリにスターを付ける
🍴 フォークして独自の MCP ツールを構築する
▶️ Agentic Data Lab を登録する
さらなる本番 AI エンジニアリングプロジェクトがまもなく公開されます。
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Code intelligence for LLMs. Analyze, search, and retrieve code from any public git repository.
Access the GitHub API, enabling file operations, repository management, search functionality, and…
Connect AI assistants to GitHub - manage repos, issues, PRs, and workflows through natural language.
Manage repositories, users, releases, and automate GitHub workflows
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables Large Language Models to analyze GitHub repositories in real-time, providing tools for retrieving repository information, analyzing issues, accessing documentation, and visualizing activity.
- FlicenseNot gradedqualityCmaintenanceEnables to interact with GitHub repositories directly from Claude, supporting actions like viewing repos, checking status, committing and pushing changes, and managing pull requests.
- FlicenseAqualityDmaintenanceEnables Claude to access and manage GitHub repositories dynamically at runtime, including private repos, with tools for browsing files, searching code, and viewing commits, pull requests, and issues.111
- AlicenseNot gradedqualityDmaintenanceEnables Claude to analyze GitHub repositories with tools for health scoring, contributor analysis, issue tracking, code search, and more.MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/sweta2503/mcp-github-analytics'
If you have feedback or need assistance with the MCP directory API, please join our Discord server