Skip to main content

MCP server for GitHub API operations - issues, PRs, CI, milestones

Project description

GitHub MCP Server

Python MCP (Model Context Protocol) server for GitHub operations, providing native tool integration with Claude Code and other MCP clients.

Features

  • 16 GitHub Tools: Issues, PRs, CI status, milestones, and batch operations
  • Native MCP Integration: Works seamlessly with Claude Code
  • Structured Responses: Type-safe, well-formatted tool outputs
  • Batch Operations: Parallel execution for bulk operations
  • Environment-Based Config: Configure default repository via environment variables

Installation

From PyPI

pip install github-mcp-server
# or with uv
uvx github-mcp-server

From Source

git clone https://github.com/rriesco/github-mcp-server.git
cd github-mcp-server
uv sync

Configuration

Environment Variables

Variable Required Description
GITHUB_TOKEN Yes GitHub Personal Access Token with repo scope
GITHUB_OWNER No Default repository owner for all operations
GITHUB_REPO No Default repository name for all operations

Claude Code Configuration

Add to your MCP configuration (~/.config/claude-code/mcp-config.json):

{
  "mcpServers": {
    "github-manager": {
      "type": "stdio",
      "command": "uvx",
      "args": ["github-mcp-server"],
      "env": {
        "GITHUB_TOKEN": "${GITHUB_TOKEN}",
        "GITHUB_OWNER": "your-username",
        "GITHUB_REPO": "your-repo"
      }
    }
  }
}

Getting a GitHub Token

  1. Go to https://github.com/settings/tokens
  2. Click "Generate new token (classic)"
  3. Select scope: repo (full repository access)
  4. Copy the generated token

Available Tools

Issue Operations

Tool Description
create_issues Create one or more issues (parallel execution for multiple)
get_issue Get full issue details including body
list_issues Query issues with filtering (state, labels, milestone, assignee)
close_issue Close an issue with optional comment

Pull Request Operations

Tool Description
create_pr_with_content Create PR with structured content (problem, solution, changes)
get_pull_request Get PR details including mergeable status
update_pr Update PR title, body, base branch, or state
merge_pr Merge PR with method selection (squash/merge/rebase)

CI/CD Operations

Tool Description
check_ci_status Check workflow run status for a branch
get_ci_logs Get CI logs for debugging failed jobs

Batch Operations

Tool Description
batch_update_issues Update multiple issues in parallel
batch_add_labels Add labels to multiple issues
batch_link_to_project Link issues to GitHub Project (v2)

Milestone Operations

Tool Description
create_milestone Create a milestone with optional due date
list_milestones List milestones with filtering

Usage Examples

Create an Issue

result = create_issues(
    issues=[{
        "title": "Implement feature X",
        "body": "## Description\n\nDetails here...",
        "labels": ["enhancement"],
        "milestone": 1
    }],
    owner="your-username",
    repo="your-repo"
)

Check CI Status

result = check_ci_status(
    branch="feature-branch",
    owner="your-username",
    repo="your-repo"
)

Create a PR

result = create_pr_with_content(
    title="feat: add new feature",
    problem="Current behavior lacks X functionality",
    solution="Implement X using approach Y",
    key_changes="- Added X component\n- Updated Y module",
    issue=42,  # Optional: links to issue #42
    owner="your-username",
    repo="your-repo"
)

Development

Prerequisites

  • Python >= 3.10
  • uv (recommended) or pip
  • GitHub Personal Access Token

Setup

git clone https://github.com/rriesco/github-mcp-server.git
cd github-mcp-server
uv sync

Running Tests

# Unit tests only (fast)
uv run pytest -m "not integration" -v

# Integration tests (requires GITHUB_TOKEN, TEST_OWNER, TEST_REPO)
uv run pytest -m integration -v

# All tests with coverage
uv run pytest --cov=src --cov-report=term-missing

Type Checking

uv run mypy src/github_mcp_server --strict

Architecture

Claude Code / MCP Client
      |
      | MCP Protocol (stdio)
      v
┌─────────────────────────────┐
│  Python FastMCP Server      │
│  - Tool Registry            │
│  - PyGithub Client          │
│  - Error Handling           │
│  - Type Validation          │
└─────────────┬───────────────┘
              |
              | PyGithub REST API
              v
        GitHub API

Project Structure

github-mcp-server/
├── src/github_mcp_server/
│   ├── server.py              # Server entry point
│   ├── tools/
│   │   ├── issues.py          # Issue operations
│   │   ├── pulls.py           # PR operations
│   │   ├── ci.py              # CI operations
│   │   ├── milestones.py      # Milestone operations
│   │   └── batch_operations.py # Batch operations
│   ├── utils/
│   │   ├── github_client.py   # Singleton PyGithub client
│   │   ├── errors.py          # Structured error handling
│   │   └── types.py           # Type definitions
│   └── config/
│       └── defaults.py        # Environment-based defaults
└── tests/
    ├── test_*.py              # Unit tests
    └── integration/           # Integration tests

License

MIT License - see LICENSE for details.

Links

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

rriesco_mcp_github-0.1.4.tar.gz (81.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

rriesco_mcp_github-0.1.4-py3-none-any.whl (27.2 kB view details)

Uploaded Python 3

File details

Details for the file rriesco_mcp_github-0.1.4.tar.gz.

File metadata

  • Download URL: rriesco_mcp_github-0.1.4.tar.gz
  • Upload date:
  • Size: 81.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for rriesco_mcp_github-0.1.4.tar.gz
Algorithm Hash digest
SHA256 e46f12822033b75e53c59d0c0c189259a2d134d504c5a1e3746c0d0c969e7c61
MD5 5a72dde83e238243f91a49032df3acf1
BLAKE2b-256 55ca4f961522a291cf15342a5723381422c0c8d221d4ec969ea644ae6131f01a

See more details on using hashes here.

File details

Details for the file rriesco_mcp_github-0.1.4-py3-none-any.whl.

File metadata

  • Download URL: rriesco_mcp_github-0.1.4-py3-none-any.whl
  • Upload date:
  • Size: 27.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.9.28 {"installer":{"name":"uv","version":"0.9.28","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for rriesco_mcp_github-0.1.4-py3-none-any.whl
Algorithm Hash digest
SHA256 929f1e3003223f414f421f761f478296a93c3832f63f1629470c059af8256f7a
MD5 4433a64512bacf9a0f990f1e4bac58d5
BLAKE2b-256 98fdcef12bfa60540901a412f40d52cce7453cb19509bdd5aee6d023a0094ed4

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page