github-mcp-server

This project demonstrates a Model Context Protocol (MCP) Server that integrates with the GitHub API, allowing AI Assistants to interact with GitHub.

Visit Server
Added on 3/28/2025

GitHub MCP Server Integration

This project demonstrates a Model Context Protocol (MCP) Server that integrates with the GitHub API. It allows AI Assistants like Claude or OpenAI GPT to interact with GitHub using MCP.


๐ŸŒ Live Demo

๐Ÿ‘‰ Deployed Server Link
๐Ÿ‘‰ .well-known/ai-plugin.json endpoint:

https://github-mcp-server-production.up.railway.app/.well-known/ai-plugin.json

๐Ÿ“– Project Overview

This MCP Server exposes a REST API that allows AI Assistants to:

  • Get user GitHub profile information
  • List repositories for a user
  • Create an issue in a repository

The server follows Model Context Protocol (MCP) standards to ensure interoperability with AI systems.


๐Ÿ”ง Tech Stack

  • FastAPI (Python framework for building APIs)
  • OpenAPI (Standard for describing REST APIs)
  • ai-plugin.json (MCP metadata configuration)
  • GitHub REST API v3
  • Deployed on Railway

โœจ Features

  • MCP-compliant server with OpenAPI documentation
  • Secure interaction with GitHub using a personal access token
  • AI Assistants can:
    • Fetch GitHub user details
    • List repositories by username
    • Create issues on repositories

๐Ÿ“‚ Project Structure

โ”œโ”€โ”€ ai-plugin.json             # MCP Plugin metadata for AI Assistants
โ”œโ”€โ”€ openapi.yaml               # OpenAPI spec describing the available endpoints
โ”œโ”€โ”€ main.py                    # FastAPI MCP server code
โ”œโ”€โ”€ requirements.txt           # Python dependencies
โ””โ”€โ”€ README.md                  # Project documentation (this file)

๐Ÿš€ How It Works

1. FastAPI Server

  • Exposes REST API endpoints like:
    • /github/user
    • /github/repos/{username}
    • /github/repos/{owner}/{repo}/issues

2. ai-plugin.json

  • Metadata for AI assistants to understand the MCP server:
    • Plugin name, description
    • Authentication method
    • OpenAPI URL reference

3. openapi.yaml

  • Defines all routes and parameters for the AI assistant to interact with.

๐Ÿ” Authentication

  • GitHub Personal Access Token (PAT)
    • Set as an environment variable: GITHUB_TOKEN
    • Use in your .env file or directly in Railway's environment settings.

โš™๏ธ Setup Instructions (Local Development)

Prerequisites:

  • Python 3.9+
  • GitHub Personal Access Token (PAT) with repo permissions

Clone the repo:

git clone https://github.com/yourusername/github-mcp-server.git
cd github-mcp-server

Install dependencies:

pip install -r requirements.txt

Create .env file:

GITHUB_TOKEN=your_personal_access_token

Run the FastAPI server:

uvicorn main:app --reload

Visit: http://localhost:8000/docs for the Swagger UI


๐ŸŒ Deployment (Railway)

  1. Login at Railway
  2. Create a new project โ†’ Deploy from GitHub โ†’ Select your MCP repo
  3. Add the GITHUB_TOKEN as an environment variable in Railway
  4. Confirm the start command:
    uvicorn main:app --host 0.0.0.0 --port 8000
    
  5. Deploy & get your production URL (e.g., https://github-mcp-server-production.up.railway.app)

๐Ÿค– Demonstration with AI Assistants

Claude AI / OpenAI GPT Plugin (optional based on access)

  • Register your .well-known/ai-plugin.json URL in the AI assistant settings.
  • Interact using natural language prompts:
    "List my GitHub repositories."
    "Create an issue in my repo named 'sample-repo'."
    

๐Ÿ“œ OpenAPI Endpoints

| Endpoint | Method | Description | |------------------------------------|--------|-------------------------------| | /github/user | GET | Get authenticated user info | | /github/repos/{username} | GET | List repositories of a user | | /github/repos/{owner}/{repo}/issues | POST | Create an issue in a repo |


๐Ÿ“ Example Requests

Get user info

curl -X GET https://github-mcp-server-production.up.railway.app/github/user

List repos

curl -X GET https://github-mcp-server-production.up.railway.app/github/repos/<username>

Create an issue

curl -X POST https://github-mcp-server-production.up.railway.app/github/repos/<owner>/<repo>/issues \
  -H "Content-Type: application/json" \
  -d '{"title": "Bug found!", "body": "Please fix this bug."}'