Analyze GitHub Pull Requests using GitHub API
GitHub PR Analysis MCP Server
This project implements a Model Context Protocol (MCP) server that analyzes GitHub Pull Requests and optionally creates a structured Notion page with the analysis results. It is designed to be used locally with Claude CLI using the stdio MCP transport.
๐ Features: Analyze GitHub Pull Requests using GitHub API Extract PR metadata, commits, files, and code changes Generate structured AI-based PR analysis Optionally create a Notion page with the analysis Runs locally via MCP stdio Integrates seamlessly with Claude CLI
๐ง Architecture Overview: Claude CLI โ โ (MCP stdio) โผ MCP Server (Python) โโโ GitHub API (PR data) โโโ AI Analysis Logic โโโ Notion API (Page creation)
๐ Project Structure: MCP-STDIO/ โโโ pr_analyzer.py # MCP server entry point โโโ github_integration.py # GitHub PR fetching logic โโโ requirements.txt # Python dependencies โโโ .venv/ # Virtual environment
๐ Required Environment Variables:
The application relies on the following environment variables:
Variable Description GITHUB_TOKEN GitHub Personal Access Token NOTION_API_KEY Notion integration secret NOTION_PAGE_ID Parent Notion page ID
๐ How to Create GITHUB_TOKEN: Go to ๐ https://github.com/settings/tokens
Click Generate new token (classic) Select scopes: โ repo โ read:user Generate token and copy it
๐งพ How to Create NOTION_API_KEY: Go to ๐ https://www.notion.so/my-integrations
Click New integration Name it (e.g. PR Analyzer) Select your workspace Copy the Internal Integration Secret
๐ How to Create NOTION_PAGE_ID: Create a page in Notion (this will be the parent page) Share the page with your integration: Click Share Invite your integration Copy the page URL:
https://www.notion.so/AI-PR_ANALYSIS-2*************************
Extract the page ID (last 32 characters): 2***********************
๐ฆ Dependencies (requirements.txt): Package Purpose requests Communicates with GitHub & Notion REST APIs python-dotenv Loads environment variables from .env fastmcp MCP server framework
๐ Setup Instructions: 1๏ธโฃ Create Virtual Environment cd MCP-STDIO python -m venv .venv source .venv/bin/activate
2๏ธโฃ Install Dependencies pip install -r requirements.txt
3๏ธโฃ Verify Server Runs Manually .venv/bin/python pr_analyzer.py
โ This should start the MCP server without errors.
๐ค Using the MCP Server with Claude CLI 1๏ธโฃ Ensure Claude CLI is Installed claude --version
Expected output:
2.x.x (Claude Code)
2๏ธโฃ Configure MCP Server (~/.claude.json) { "mcpServers": { "github_pr_analysis": { "type": "stdio", "command": "full path of your .venv/bin/python ", "args": ["pr_analyzer.py"], "cwd": "full path of your pr_analyzer.py" } } }
โ ๏ธ Make sure: command points to the virtualenv python cwd is the folder containing pr_analyzer.py
3๏ธโฃ Restart Claude CLI claude 4๏ธโฃ Verify MCP Server is Connected Inside Claude CLI: /mcp You should see: github_pr_analysis ยท โ connected ๐งช Example Usage in Claude Analyze this PR: https://github.com/org/repo/pull/123
Claude will: Fetch PR details Perform analysis
Ask: โWould you like me to create a Notion page for this analysis?โ
Reply with: yes โ creates Notion page no โ skips creation
๐ Debugging Tips Add logs in MCP server: print("Debug message", file=sys.stderr)
Check Claude MCP logs: claude --debug
Verify paths: pwd ls pr_analyzer.py
โ Summary MCP server runs locally via stdio Claude CLI acts as the client GitHub PRs are analyzed automatically Notion pages are created on user confirmation Secure via environment variables
children=[{ "object": "block", "type": "paragraph", "paragraph": { "rich_text": [{ "type": "text", "text": {"content": content} }] } }]
Environment Variables
GITHUB_TOKENrequiredGitHub Personal Access TokenNOTION_API_KEYrequiredNotion integration secretNOTION_PAGE_IDrequiredParent Notion page IDConfiguration
{
"mcpServers": {
"github_pr_analysis": {
"type": "stdio",
"command": "full path of your .venv/bin/python ",
"args": ["pr_analyzer.py"],
"cwd": "full path of your pr_analyzer.py"
}
}
}