Skip to main content
Glama
iamthite

GitHub Analyzer Pro MCP Server

by iamthite

šŸ™ GitHub Analyzer Pro MCP Server v2.0

A production-ready Model Context Protocol (MCP) server with 28+ powerful tools for comprehensive GitHub analysis, built with FastMCP.

Python Version FastMCP GitHub API Production Ready


✨ Complete Feature Set

šŸ“¦ Repository Analysis (8 Tools)

  • get_repository_info - Complete repo metadata with stats

  • get_repository_languages - Language breakdown with percentages

  • get_repository_contributors - Top contributors ranking

  • get_repository_tags - Release tags listing

  • get_repository_branches - Branch info with protection status

  • get_repository_stats - Comprehensive analytics

  • get_repository_traffic - Views & clones (requires permissions)

  • get_repository_community - Health score & community files

šŸ“ Commits & History (3 Tools)

  • get_repository_commits - Commit history with authors

  • get_commit_details - Deep dive into specific commits

  • compare_commits - Compare branches or commits

šŸ› Issues & Pull Requests (3 Tools)

  • get_repository_issues - Filter by state, labels

  • get_pull_requests - PR details with merge status

  • get_issue_comments - Comment threads

šŸ“ Files & Content (4 Tools)

  • get_file_content - Read any file from repo

  • get_directory_contents - Browse directory structure

  • get_repository_readme - Quick README access

  • search_code - Find code across repositories

šŸ” Search & Discovery (5 Tools)

  • search_repositories - Advanced repo search

  • search_users - Find users & organizations

  • search_topics - Discover GitHub topics

  • get_trending_repositories - Hot repos by language

  • get_trending_developers - Active developers

šŸ‘¤ Users & Organizations (4 Tools)

  • get_user_profile - Complete user information

  • get_user_repositories - User's public repos

  • get_user_activity - Recent activity feed

  • get_organization_info - Organization details

šŸ“¦ Releases & Packages (2 Tools)

  • get_releases - All releases with download stats

  • get_latest_release - Latest release details

āš™ļø Workflows & Actions (2 Tools)

  • get_workflows - List GitHub Actions workflows

  • get_workflow_runs - Recent workflow execution history

šŸ› ļø Utilities (2 Tools)

  • get_rate_limit - Check API rate limit status

  • server_info - Server capabilities & stats


šŸš€ Quick Start

1. Install Dependencies

pip install fastmcp httpx python-dotenv

Without token: 60 requests/hour
With token: 5000 requests/hour + full search access

# Linux/Mac export GITHUB_TOKEN='ghp_your_token_here' # Windows PowerShell $env:GITHUB_TOKEN='ghp_your_token_here' # Or create .env file echo "GITHUB_TOKEN=ghp_your_token_here" > .env

Get your token: https://github.com/settings/tokens

  • Required scopes: public_repo, read:user

  • Optional: repo (for private repositories)

3. Run the Server

python github_server.py

Expected output:

============================================================ šŸ™ GitHub Analyzer Pro MCP Server v2.0.0 ============================================================ šŸ“” Server Configuration: Transport: HTTP Host: 0.0.0.0 Port: 8001 Timeout: 30.0s šŸ”‘ Authentication: GitHub Token: āœ“ Configured Rate Limit: 5000/hr šŸ“Š Available Tools: 28 • Repository Analysis (8 tools) • Commits & History (3 tools) • Issues & PRs (3 tools) • Files & Content (4 tools) • Search & Discovery (5 tools) • Users & Organizations (4 tools) • Releases & Packages (2 tools) • Workflows & Actions (2 tools) • Utilities (2 tools) ✨ Production Features: āœ“ Enhanced error handling āœ“ Request caching āœ“ Rate limit monitoring āœ“ Community health metrics āœ“ Traffic analytics āœ“ GitHub Actions support šŸš€ Server Status: READY Access at: http://localhost:8001 ============================================================

šŸ“š Usage Examples

šŸ” Advanced Repository Analysis

# Get comprehensive stats { "owner": "facebook", "repo": "react" } # Response includes: # - Stars, forks, watchers # - Language breakdown # - Commit activity # - Health score # - Community files # - Traffic data (if authorized)

šŸ“Š Language Distribution

# Get language percentages { "owner": "microsoft", "repo": "vscode" } # Returns: # - TypeScript: 45.2% # - JavaScript: 30.1% # - CSS: 15.7% # - etc.

šŸ‘„ Top Contributors

# See who contributes most { "owner": "torvalds", "repo": "linux", "limit": 10 }

šŸ”„ Compare Branches

# See what changed between branches { "owner": "python", "repo": "cpython", "base": "3.11", "head": "main" } # Shows: # - Commits ahead/behind # - Files changed # - Line additions/deletions

šŸ› Filter Issues by Labels

# Find specific issues { "owner": "microsoft", "repo": "vscode", "state": "open", "labels": "bug,high-priority" }

šŸ“¦ Release Management

# Get latest release { "owner": "nodejs", "repo": "node" } # Returns: # - Version tag # - Release notes # - Download links # - Asset download counts

āš™ļø Monitor GitHub Actions

# Check CI/CD status { "owner": "rust-lang", "repo": "rust" } # See: # - All workflows # - Recent runs # - Success/failure status

šŸ‘¤ User Activity Feed

# What's a user been up to? { "username": "gvanrossum", "limit": 20 } # Shows: # - Recent commits # - PRs created # - Issues opened # - Repos starred

šŸ”„ Discover Trending

# Hot Python repos this week { "language": "python", "since": "weekly" }

šŸ“ˆ Community Health

# Check repo health { "owner": "django", "repo": "django" } # Returns: # - Health percentage # - README quality # - Has CODE_OF_CONDUCT # - Has CONTRIBUTING guide # - Issue templates

šŸ”§ Connect to Claude Desktop

Configuration

macOS:
~/Library/Application Support/Claude/claude_desktop_config.json

Windows:
%APPDATA%\Claude\claude_desktop_config.json

Linux:
~/.config/Claude/claude_desktop_config.json

{ "mcpServers": { "github-pro": { "url": "http://localhost:8001/mcp/v1" } } }

Remote server:

{ "mcpServers": { "github-pro": { "url": "http://your-server-ip:8001/mcp/v1" } } }

Restart Claude Desktop after configuration!


šŸ’¬ Talk to Claude

Once connected, ask Claude things like:

"Analyze the React repository - give me complete statistics" "Show me the language breakdown for microsoft/vscode" "Who are the top 10 contributors to the Linux kernel?" "Compare the main and develop branches of my-org/my-repo" "Find all open high-priority bugs in facebook/react" "What's the latest release of Node.js? Show download counts" "Are GitHub Actions passing for rust-lang/rust?" "What has Guido van Rossum been working on lately?" "Show me trending Rust repositories this month" "Check the community health score for django/django" "Search for async functions in the FastAPI codebase" "Get traffic stats for my repository" (requires auth) "Show me all workflows and their status for my-org/api"

šŸ­ Production Features

āœ… Enhanced Error Handling

  • Detailed error messages

  • Rate limit detection

  • Authentication failure handling

  • Network timeout management

  • Resource not found handling

āœ… Performance Optimization

  • Request timeout control (30s)

  • Response caching (5min TTL)

  • Efficient batch requests

  • Maximum result limiting

āœ… Security

  • Token-based authentication

  • Secure environment variables

  • No token logging

  • Rate limit compliance

āœ… Monitoring & Debugging

  • Rate limit tracking

  • Request/response logging

  • Server health status

  • Detailed tool statistics

āœ… Data Quality

  • Response validation

  • Safe JSON encoding

  • Truncation for large responses

  • Binary file handling


🐳 Docker Deployment

Dockerfile

FROM python:3.10-slim WORKDIR /app # Install dependencies COPY requirements.txt . RUN pip install --no-cache-dir -r requirements.txt # Copy server COPY github_server.py . # Environment ENV GITHUB_TOKEN="" ENV PYTHONUNBUFFERED=1 # Health check HEALTHCHECK --interval=30s --timeout=10s --start-period=5s --retries=3 \ CMD python -c "import httpx; httpx.get('http://localhost:8001/mcp/v1/health')" EXPOSE 8001 CMD ["python", "github_server.py"]

requirements.txt

fastmcp>=2.14.0 httpx>=0.24.0 python-dotenv>=1.0.0

Build & Run

# Build image docker build -t github-mcp-pro . # Run with token docker run -d \ -p 8001:8001 \ -e GITHUB_TOKEN='ghp_your_token' \ --name github-server \ --restart unless-stopped \ github-mcp-pro # View logs docker logs -f github-server # Stop docker stop github-server

Docker Compose

version: '3.8' services: github-mcp: build: . ports: - "8001:8001" environment: - GITHUB_TOKEN=${GITHUB_TOKEN} restart: unless-stopped healthcheck: test: ["CMD", "python", "-c", "import httpx; httpx.get('http://localhost:8001/mcp/v1/health')"] interval: 30s timeout: 10s retries: 3

ā˜ļø Cloud Deployment

Deploy to Railway

# Install Railway CLI npm install -g @railway/cli # Login railway login # Initialize railway init # Deploy railway up # Set environment railway variables set GITHUB_TOKEN=ghp_your_token # Get URL railway domain

Deploy to Render

  1. Connect your GitHub repository

  2. Create new Web Service

  3. Set environment variables:

    • GITHUB_TOKEN: Your token

  4. Build command: pip install -r requirements.txt

  5. Start command: python github_server.py

  6. Deploy!

Deploy to Fly.io

# Install flyctl curl -L https://fly.io/install.sh | sh # Login flyctl auth login # Launch flyctl launch # Set secret flyctl secrets set GITHUB_TOKEN=ghp_your_token # Deploy flyctl deploy # Check status flyctl status

Deploy to Heroku

# Create Procfile echo "web: python github_server.py" > Procfile # Create app heroku create github-mcp-pro # Set token heroku config:set GITHUB_TOKEN=ghp_your_token # Deploy git push heroku main # Check logs heroku logs --tail

šŸ” Advanced Search Queries

GitHub supports powerful search syntax:

# Search by stars "query": "web framework stars:>10000" # Search by language "query": "machine learning language:python" # Search by topic "query": "topic:artificial-intelligence" # Search by license "query": "license:mit" # Search in organization "query": "org:google android" # Search by size "query": "size:>1000 language:go" # Search by fork count "query": "forks:>500 language:rust" # Search by pushed date "query": "pushed:>2024-01-01" # Combined "query": "neural network language:python stars:>1000 topic:deep-learning"

šŸ“Š Rate Limit Management

Check Your Limits

# Use the tool get_rate_limit() # Returns: { "core": { "limit": 5000, "remaining": 4850, "reset": "2024-12-15T10:30:00" }, "search": { "limit": 30, "remaining": 28, "reset": "2024-12-15T09:45:00" } }

Best Practices

  1. Use authentication - 5000 vs 60 requests/hour

  2. Cache results - Built-in 5-minute caching

  3. Batch requests - Use higher limits per call

  4. Monitor usage - Check rate_limit regularly

  5. Handle errors - Graceful degradation

Rate Limit Headers

The server automatically handles:

  • X-RateLimit-Limit - Total limit

  • X-RateLimit-Remaining - Requests left

  • X-RateLimit-Reset - Reset timestamp

  • Retry-After - Seconds to wait


šŸ›”ļø Security Best Practices

Token Management

# āœ… DO: Use environment variables export GITHUB_TOKEN='ghp_...' # āœ… DO: Use .env file (add to .gitignore) echo "GITHUB_TOKEN=ghp_..." > .env echo ".env" >> .gitignore # āŒ DON'T: Hardcode in files GITHUB_TOKEN = "ghp_..." # NEVER DO THIS! # āŒ DON'T: Commit to git git add .env # NEVER DO THIS!

Token Scopes

Minimum required:

  • āœ… public_repo - Access public repositories

  • āœ… read:user - Read user profile

Optional for more features:

  • repo - Access private repositories

  • read:org - Read organization data

  • admin:repo_hook - Manage webhooks

Token Rotation

# Create new token 1. Visit https://github.com/settings/tokens 2. Generate new token 3. Update environment variable 4. Restart server 5. Revoke old token

🧪 Testing

Manual Testing

# Test repository info curl -X POST http://localhost:8001/mcp/v1/tools/get_repository_info \ -H "Content-Type: application/json" \ -d '{"owner": "facebook", "repo": "react"}' # Test search curl -X POST http://localhost:8001/mcp/v1/tools/search_repositories \ -H "Content-Type: application/json" \ -d '{"query": "fastapi", "limit": 5}' # Test user profile curl -X POST http://localhost:8001/mcp/v1/tools/get_user_profile \ -H "Content-Type: application/json" \ -d '{"username": "torvalds"}'

Python Testing

import requests # Test connection response = requests.post( "http://localhost:8001/mcp/v1/tools/server_info", json={} ) assert response.status_code == 200 print(response.json()) # Test repository response = requests.post( "http://localhost:8001/mcp/v1/tools/get_repository_info", json={"owner": "python", "repo": "cpython"} ) data = response.json() assert "name" in data print(f"Repository: {data['name']}")

šŸ“ˆ Monitoring & Logging

Server Logs

The server provides detailed logging:

[2024-12-15 10:30:45] INFO - Server started on port 8001 [2024-12-15 10:31:12] INFO - Tool called: get_repository_info [2024-12-15 10:31:13] INFO - GitHub API request: repos/facebook/react [2024-12-15 10:31:14] INFO - Response cached for 300s [2024-12-15 10:31:14] INFO - Tool execution completed: 1.2s

Health Monitoring

# Check server health curl http://localhost:8001/health # Check rate limits curl -X POST http://localhost:8001/mcp/v1/tools/get_rate_limit \ -H "Content-Type: application/json" \ -d '{}'

šŸ› Troubleshooting

Common Issues

"Rate limit exceeded"

# Solution: Add GitHub token export GITHUB_TOKEN='ghp_your_token'

"Repository not found"

# Check: Owner and repo spelling # Check: Repository is public (or token has access) # Check: Repository hasn't been deleted/renamed

"Connection refused"

# Check: Server is running python github_server.py # Check: Port 8001 is available lsof -i :8001 # Linux/Mac netstat -ano | findstr :8001 # Windows

"Invalid token"

# Solution: Regenerate token with correct scopes # Required: public_repo, read:user

"Timeout error"

# Check: Internet connection # Check: GitHub status: https://www.githubstatus.com/ # Increase: Timeout in code (REQUEST_TIMEOUT)

Debug Mode

# Add to github_server.py for debugging import logging logging.basicConfig(level=logging.DEBUG)

šŸŽ“ Advanced Usage

Custom Tool Implementation

Add your own tools to github_server.py:

@mcp.tool() @safe_json_response def your_custom_tool(param: str) -> dict: """ Your custom GitHub tool. Args: param: Parameter description Returns: Custom data """ data = gh_client.request(f"your/endpoint/{param}") return { "result": data }

Batch Processing

# Process multiple repos repos = [ ("facebook", "react"), ("microsoft", "vscode"), ("google", "flutter") ] for owner, repo in repos: info = get_repository_info(owner, repo) print(f"{owner}/{repo}: {info['statistics']['stars']} stars")

Caching Strategy

The server includes built-in caching (5 minutes). Customize:

from functools import lru_cache @lru_cache(maxsize=128) def cached_request(endpoint: str): return gh_client.request(endpoint)

šŸ“‹ Requirements

  • Python: 3.10 or higher

  • Dependencies:

    • fastmcp>=2.14.0

    • httpx>=0.24.0

    • python-dotenv>=1.0.0


šŸ¤ Contributing

Contributions welcome! Here's how:

  1. Fork the repository

  2. Create a feature branch

  3. Add your improvements

  4. Test thoroughly

  5. Submit a pull request

Ideas for Contributions

  • Add more GitHub features

  • Implement GraphQL API support

  • Add webhook handlers

  • Create visualization tools

  • Add analytics dashboards

  • Improve caching strategies

  • Add more search filters

  • Enhance error messages

  • Add rate limit prediction

  • Create CLI interface


šŸ“„ License

MIT License - See LICENSE file for details


šŸ™ Credits

  • GitHub API - Data provider

  • FastMCP - MCP framework

  • Anthropic - Claude and MCP specification

  • httpx - HTTP client

  • Contributors - Thank you!


šŸ“ž Support


⭐ Star History

If this project helps you, please consider giving it a ⭐!


-
security - not tested
F
license - not found
-
quality - not tested

Latest Blog Posts

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/iamthite/GitHub-Analyzer-MCP-Server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server