Enables discovery of repositories and fetching of daily commit summaries authored by the authenticated user across owned, collaborated, and organization repositories.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@GitHub Summary MCPsummarize my work today across all repositories"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
github-summary-mcp
An MCP server that generates a daily GitHub work summary by analysing commits across all repositories the authenticated user owns or contributes to.
Designed for use with Claude Code, Qwen Code, and the MCP Inspector.
Features
Discovers all repos: owned, collaborated on, and organisation member
Fetches today's commits (since 00:00 UTC) authored by the authenticated user
Inspects commit messages and changed files
Groups and deduplicates commits per repository
Exposes three MCP tools:
get_daily_summary,list_repositories,get_repo_commits_today
Prerequisites
Python 3.11+
uv package manager
A GitHub Personal Access Token with
reposcope
Setup
1. Clone the repository
git clone <repo-url>
cd github-summary-mcp2. Install dependencies
uv sync3. Export your GitHub token
export GITHUB_TOKEN=ghp_your_token_hereRunning the server
stdio transport (for Claude Code / Qwen Code)
uv run server.pyHTTP transport (for MCP Inspector)
Edit server.py and change the mcp.run() call:
mcp.run(transport="http", host="127.0.0.1", port=8000)Then run:
uv run server.pyConnecting via MCP Inspector
Install the inspector:
npx @modelcontextprotocol/inspectorPoint it at your running server or use it in stdio mode:
npx @modelcontextprotocol/inspector uv run server.pyConnecting to Claude Code
Add the server to your Claude Code MCP configuration (~/.claude/claude_desktop_config.json or .mcp.json in your project):
{
"mcpServers": {
"github-summary": {
"command": "uv",
"args": ["run", "/absolute/path/to/github-summary-mcp/server.py"],
"env": {
"GITHUB_TOKEN": "ghp_your_token_here"
}
}
}
}Connecting to Qwen Code
Add to your Qwen Code MCP settings:
{
"mcpServers": {
"github-summary": {
"command": "uv",
"args": ["run", "/absolute/path/to/github-summary-mcp/server.py"],
"env": {
"GITHUB_TOKEN": "ghp_your_token_here"
}
}
}
}MCP Tools
get_daily_summary
Generate a complete daily work summary across all repositories.
No parameters required.
Returns:
{
"summary": "> Evorgs\n\n* Simplified layout structure in VendorMainLayout\n* Enhanced DashboardPage with better spacing\n\n> BMS\n\n* Work in payment feature\n* Add auto redirection to PayFast checkout page"
}list_repositories
List all repositories accessible to the authenticated user.
No parameters required.
Returns:
{
"repositories": [
{
"full_name": "octocat/Hello-World",
"name": "Hello-World",
"owner": "octocat",
"private": false,
"default_branch": "main"
}
]
}get_repo_commits_today
Get today's commits for a specific repository.
Parameters:
Name | Type | Description |
| string | Short name ( |
Returns:
{
"repo": "octocat/Hello-World",
"commits": [
{
"sha": "abc123ef",
"message": "Fix login redirect bug",
"files": ["auth/login.py", "tests/test_auth.py"],
"insertions": 12,
"deletions": 3,
"committed_at": "2024-01-15T09:30:00+00:00"
}
],
"summary": "> Hello-World\n\n* Fix login redirect bug"
}Project Structure
github-summary-mcp/
│
├─ pyproject.toml # uv/hatch project config
├─ README.md
│
├─ server.py # FastMCP server + tool definitions
├─ github_client.py # GitHub REST API client (httpx)
├─ summarizer.py # Commit grouping & formatting
├─ utils.py # Date helpers, normalizers
│
└─ services/
└─ commit_service.py # Orchestration: fetches commits across all reposEnvironment Variables
Variable | Required | Description |
| Yes | GitHub Personal Access Token with |
Future Extensions
The codebase is structured for easy extension:
LLM summarisation – replace
summarizer.pylogic with an Anthropic/OpenAI callSlack standup posting – add a
post_standupMCP tool inserver.pyWeekly reports – add a
sinceparameter toCommitService.get_today_commits_all_reposFile-level diff summaries – the
CommitRecord.filesfield already carries filenames; fetch full diffs fromGET /repos/{owner}/{repo}/commits/{sha}
License
MIT