Skip to main content
Glama
muhammadzaeemaltaf

GitHub Summary MCP

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


Related MCP server: git-standup-mcp

Prerequisites


Setup

1. Clone the repository

git clone <repo-url>
cd github-summary-mcp

2. Install dependencies

uv sync

3. Export your GitHub token

export GITHUB_TOKEN=ghp_your_token_here

Running the server

stdio transport (for Claude Code / Qwen Code)

uv run server.py

HTTP 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.py

Connecting via MCP Inspector

  1. Install the inspector:

npx @modelcontextprotocol/inspector
  1. Point it at your running server or use it in stdio mode:

npx @modelcontextprotocol/inspector uv run server.py

Connecting 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

repo_name

string

Short name (Hello-World) or full owner/repo string

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 repos

Environment Variables

Variable

Required

Description

GITHUB_TOKEN

Yes

GitHub Personal Access Token with repo scope


Future Extensions

The codebase is structured for easy extension:

  • LLM summarisation – replace summarizer.py logic with an Anthropic/OpenAI call

  • Slack standup posting – add a post_standup MCP tool in server.py

  • Weekly reports – add a since parameter to CommitService.get_today_commits_all_repos

  • File-level diff summaries – the CommitRecord.files field already carries filenames; fetch full diffs from GET /repos/{owner}/{repo}/commits/{sha}


License

MIT

Available Tools

3 tools
get_daily_summaryA

Generate a summary of today's commits authored by the authenticated GitHub user.

The tool:

  1. Detects the authenticated GitHub user from the token.

  2. Fetches every repository where the user is an owner, collaborator, or organisation member.

  3. Retrieves all commits pushed since the start of today (UTC).

  4. Filters to commits authored by the authenticated user.

  5. Groups commits by repository.

  6. Returns a formatted, human-readable summary.

Returns: A dict with a single key "summary" containing the formatted text.

Example return value::

{
    "summary": "> Evorgs\n\n* Simplified layout structure ...\n\n> BMS\n\n* Work in payment feature."
}
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: it automatically detects the authenticated user, fetches repositories based on user roles, filters commits by date and author, groups by repository, and returns a formatted summary. It also specifies the return structure. However, it lacks details on error handling, rate limits, or authentication requirements beyond token use.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear opening sentence and a numbered list detailing steps, followed by return format and an example. It is appropriately sized and front-loaded with the core purpose. However, some sentences could be more concise (e.g., the numbered list is detailed but slightly verbose), and the example adds clarity but extends length.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (multiple internal steps) and the presence of an output schema (implied by 'Has output schema: true'), the description is complete. It thoroughly explains the process, return format, and provides an example, compensating for the lack of annotations. No additional information is needed for effective use by an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

There are 0 parameters, and schema description coverage is 100%, so no parameter documentation is needed. The description adds value by explaining the tool's internal logic (e.g., steps like detecting user and filtering commits), which goes beyond the empty schema. This justifies a score above the baseline of 3 for high schema coverage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the tool's purpose: 'Generate a summary of today's commits authored by the authenticated GitHub user.' It specifies the verb ('generate'), resource ('summary of today's commits'), and scope ('authored by the authenticated GitHub user'), clearly distinguishing it from siblings like 'get_repo_commits_today' and 'list_repositories' by focusing on summarization and user-specific filtering.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context by detailing the steps involved (e.g., detecting the authenticated user, fetching repositories, filtering commits), which suggests it's for daily personal summaries. However, it does not explicitly state when to use this tool versus alternatives like 'get_repo_commits_today' or 'list_repositories', nor does it provide exclusions or prerequisites beyond authentication.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_repo_commits_todayA

Return today's commits for a single repository authored by the authenticated user.

Args: repo_name: The repository to inspect. Accepts either the short name (e.g. "Hello-World") or the full owner/repo format (e.g. "octocat/Hello-World"). When a short name is provided the authenticated user's login is used as the owner.

Returns: A dict with keys:

* ``"repo"``    – the resolved ``owner/repo`` string
* ``"commits"`` – list of commit objects
* ``"summary"`` – formatted bullet-list summary for this repository

Example return value::

{
    "repo": "octocat/Hello-World",
    "commits": [
        {
            "sha": "abc123",
            "message": "Fix login bug",
            "files": ["auth/login.py"],
            "insertions": 5,
            "deletions": 2,
            "committed_at": "2024-01-15T09:30:00+00:00"
        }
    ],
    "summary": "> Hello-World\n\n* Fix login bug"
}
ParametersJSON Schema
NameRequiredDescriptionDefault
repo_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden and does well by specifying authentication context ('authored by the authenticated user'), date scope ('today's commits'), and detailed return format. It doesn't mention rate limits or error conditions, but provides substantial behavioral context.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Perfectly structured with purpose statement, parameter documentation, return specification, and example. Every sentence earns its place, and information is front-loaded with the core functionality stated first.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's moderate complexity, no annotations, but comprehensive output schema in the description, this is complete. The description covers purpose, parameters, authentication context, date scope, and detailed return format with example, leaving no gaps for the agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage for the single parameter, the description fully compensates by explaining repo_name's semantics, acceptable formats (short name vs owner/repo), and resolution logic when short name is provided. This adds significant value beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the specific action ('Return today's commits'), target resource ('for a single repository'), and scope ('authored by the authenticated user'). It distinguishes from siblings by focusing on commits rather than summaries or repository listings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context (today's commits, authenticated user's authorship) but doesn't explicitly state when to use this tool versus alternatives like get_daily_summary or list_repositories. No exclusions or prerequisites are mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_repositoriesA

Return all repositories accessible by the authenticated GitHub user.

Includes repositories where the user is an owner, collaborator, or organisation member.

Returns: A dict with key "repositories" containing a list of objects, each with full_name, name, owner, private, and default_branch fields.

Example return value::

{
    "repositories": [
        {
            "full_name": "octocat/Hello-World",
            "name": "Hello-World",
            "owner": "octocat",
            "private": false,
            "default_branch": "main"
        }
    ]
}
ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It does specify that it returns repositories 'accessible by the authenticated GitHub user' and details what access levels are included (owner, collaborator, organization member), which adds useful context. However, it doesn't mention authentication requirements, rate limits, pagination behavior, or error conditions, leaving significant behavioral aspects undocumented.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured and appropriately sized. It starts with the core purpose, adds clarifying details about access levels, then provides a clear return format with an example. Every sentence adds value without redundancy. The example is separated for readability but remains concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (0 parameters, no annotations, but with an output schema), the description is reasonably complete. It explains what the tool does, who it affects, and what it returns. The output schema handles return value documentation, so the description doesn't need to duplicate that. However, it could benefit from more behavioral context like authentication or rate limits.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has 0 parameters, and schema description coverage is 100% (though empty). The description appropriately doesn't discuss parameters since none exist. It focuses instead on the return value structure, which is helpful given the presence of an output schema. A baseline of 4 is appropriate for zero-parameter tools.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Return all repositories accessible by the authenticated GitHub user.' It specifies the verb ('return') and resource ('repositories'), and clarifies scope ('accessible by the authenticated GitHub user'). However, it doesn't explicitly differentiate from sibling tools like 'get_daily_summary' or 'get_repo_commits_today', which have different purposes.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It doesn't mention sibling tools or explain scenarios where this tool is appropriate versus others. The only contextual information is about what repositories are included, which relates to purpose rather than usage guidelines.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 3 tool updatesv0.1.0
    • First observedget_daily_summary
    • First observedget_repo_commits_today
    • First observedlist_repositories

TDQS

A3.9/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose: get_daily_summary aggregates commits across all repositories for today, get_repo_commits_today focuses on a single repository's commits for today, and list_repositories provides a repository listing. There is no overlap or ambiguity in functionality.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern: get_daily_summary, get_repo_commits_today, and list_repositories. The naming is predictable and readable throughout the set.

Tool Count3/5

With only 3 tools, the server feels thin for a GitHub-related domain, which typically involves more operations like creating issues, managing pull requests, or accessing other repository details. While the tools are well-defined, the scope is limited.

Completeness2/5

The toolset is severely incomplete for a GitHub server, covering only commit summaries and repository listing. Missing are core operations like issue management, pull request handling, branch operations, or user actions, which are essential for typical GitHub workflows.

Maintenance

ActivityInactive
ResponsivenessSyncing

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

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides comprehensive access to GitHub repositories, issues, pull requests, commits, user profiles, and statistics through 10 tools with natural language query support and advanced search capabilities.
    -
  • A
    license
    B
    quality
    D
    maintenance
    Generates standup reports from git history by analyzing recent commits across configured repositories. Enables users to query their development activity, such as what they worked on yesterday or over multiple days, through natural language interactions with Claude.
    2
    MIT
  • F
    license
    A
    quality
    D
    maintenance
    Extracts today's Git commit history and code changes from a local repository, filtering by the current user and excluding merge commits, for integration with MCP clients like Claude Desktop.
    1
    -

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/muhammadzaeemaltaf/github-summary-mcp'

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