README.md
November 18, 2025 ยท View on GitHub
๐ Let AI Control Your GitHub
A powerful GitHub automation tool that seamlessly connects AI assistants to your GitHub repositories
๐ก Why GitHub MCP?
Have you ever faced these challenges?
- โ Repetitive Work: Manually checking, creating, and updating Issues and Pull Requests every day
- โ Low Efficiency: Constantly switching between command line and browser
- โ Collaboration Difficulties: Team members need a unified way to operate GitHub
GitHub MCP solves all of this!
โ
Let Claude, ChatGPT and other AI assistants directly operate GitHub
โ
No need to leave the conversation interface, complete tasks with one sentence
โ
Based on Model Context Protocol, secure and reliable
โ
Fully open source, easily extensible with new features
โก๏ธ Quick Start (3 Steps)
Step 1: Install
npm install github-mcp
Or install globally:
npm install -g github-mcp
Step 2: Get GitHub Token
- Visit GitHub Settings > Personal Access Tokens
- Click "Generate new token (classic)"
- Check
repopermission (for accessing repository information) - Copy the generated Token
Step 3: Start the Server
# Set environment variable
export GITHUB_ACCESS_TOKEN="your_github_token_here"
# Start the server
npx github-mcp
๐ Done! Now your AI assistant can operate GitHub!
Alternative Transport: Streamable HTTP (Hono)
Need an HTTP/SSE endpoint instead of STDIO? Start the Hono-powered Streamable HTTP server:
npx github-mcp streamableHttp
Or enable it via environment variables:
MCP_TRANSPORT=streamableHttp STREAMABLE_HTTP_PORT=3001 npx github-mcp
The Hono server exposes /mcp for POST/GET/DELETE requests, automatically handles CORS, and keeps SSE streams open for real-time messaging. It still reuses the same GitHubMCPServer logic from STDIO, so your tools and configuration behave identically.
Tip: You can start the server even without a Token, authentication is only required when calling GitHub APIs.
๐ฏ Use Cases
Scenario 1: Quickly View Issue List
Traditional Way:
- Open browser
- Log in to GitHub
- Find the repository
- Click Issues tab
- Manually filter and view
With GitHub MCP:
You: Help me check what unresolved Issues are in Seey215/github-mcp repository
AI: Querying... Found 3 unresolved Issues:
1. #12 - Add Pull Request management feature
2. #10 - Support GitHub Actions trigger
3. #8 - Optimize error messages
Scenario 2: Batch Process Issues
You: Mark all Issues with "bug" in the title as high priority
AI: Added high priority label to 5 Issues
Scenario 3: Automated Workflows
You: Summarize new Issues from yesterday every morning at 9 AM
AI: Scheduled task created, will send daily report via email
๐ ๏ธ Core Features
โ Currently Available
| Feature | Description | Status |
|---|---|---|
| ๐ List Issues | Query Issues list for any repository | โ Available |
| ๐ Issue Details | Get complete information for a single Issue | โ Available |
| ๐ Secure Authentication | Safe access based on GitHub Token | โ Available |
| โ๏ธ Flexible Configuration | Support environment variables and code configuration | โ Available |
| ๐จ Object-Oriented Design | Clear class structure, easy to extend | โ Available |
๐ง Coming Soon
| Feature | Description | Estimated Time |
|---|---|---|
| โ๏ธ Create Issue | Quickly create Issues through AI | Q1 2026 |
| ๐ท๏ธ Label Management | Add, delete, modify Issue labels | Q1 2026 |
| ๐ฌ Comment Feature | Comment on Issues and PRs | Q1 2026 |
| ๐ Pull Request | Complete PR management functionality | Q2 2026 |
| ๐ค GitHub Actions | Trigger and monitor workflows | Q2 2026 |
| ๐ Data Analytics | Issue trends and statistical analysis | Q2 2026 |
๐ Detailed Usage Guide
Running as MCP Server (Recommended)
This is the most common usage, suitable for integration with AI tools like Claude Desktop, Continue, etc.
Configure Claude Desktop:
Edit the configuration file ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"github": {
"command": "npx",
"args": ["-y", "github-mcp"],
"env": {
"GITHUB_ACCESS_TOKEN": "your_token_here"
}
}
}
}
Restart Claude Desktop, and you can use GitHub features in conversations!
Using as Node.js Library
If you want to use it in your own project:
import { GitHubMCPServer } from 'github-mcp';
import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js";
// Create server instance
const server = new GitHubMCPServer({
token: 'your_github_token',
serverName: 'my-custom-server',
serverVersion: '1.0.0'
});
// Connect transport layer
const transport = new StdioServerTransport();
await server.connect(transport);
console.log('GitHub MCP Server started!');
Configuration Options
GitHubMCPServer supports the following configuration:
interface GitHubConfig {
token?: string; // GitHub Personal Access Token
apiBase?: string; // API base URL (default: https://api.github.com)
apiVersion?: string; // API version (default: 2022-11-28)
serverName?: string; // Server name (default: github-mcp-server)
serverVersion?: string; // Server version (default: 1.0.0)
}
Configuration Priority: Constructor parameters > Environment variables > Default values
๐ง API Reference
Tool: list_issues
List Issues in a specified repository
Input Parameters:
{
owner: string; // Repository owner, e.g., "Seey215"
repo: string; // Repository name, e.g., "github-mcp"
state?: 'open' | 'closed'; // Issue state (optional, default 'open')
}
Return Data:
{
issues: Array<{
number: number; // Issue number
title: string; // Title
body: string | null; // Description content
state: 'open' | 'closed';
user: string; // Creator
created_at: string; // Creation time
updated_at: string; // Update time
html_url: string; // GitHub page link
}>
}
Usage Example:
// In AI conversation
"Help me check all Issues in Seey215/github-mcp repository"
// Underlying call
await server.callTool('list_issues', {
owner: 'Seey215',
repo: 'github-mcp'
});
๐๏ธ Architecture Design
Object-Oriented Architecture
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ GitHubMCPServer (Core Class) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ - config: GitHubConfig โ
โ - server: McpServer โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโค
โ + constructor(config?) โ
โ + connect(transport) โ
โ - registerTools() โ
โ - githubApiRequest(endpoint) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ uses
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ MCP SDK (Communication Protocol) โ
โ - StdioServerTransport โ
โ - Tool Registration & Invocation โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ
โ calls
โผ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โ GitHub REST API โ
โ - Issues โ
โ - Pull Requests (coming soon) โ
โ - Actions (planned) โ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
Design Principles
- Single Responsibility:
GitHubMCPServerfocuses on GitHub API integration - Encapsulation: Private methods hide implementation details
- Configurability: Flexible constructor supports multiple configuration methods
- Extensibility: Clear structure makes it easy to add new tools
- Lazy Validation: Token is only validated when using API, improving user experience
๐ค Contributing
We warmly welcome community contributions! Whether it's:
- ๐ Report Bugs: Found an issue? Submit an Issue
- ๐ก Suggest Features: Have a great idea? Tell us!
- ๐จ Submit Code: Fork the project, submit a Pull Request
- ๐ Improve Documentation: Help improve docs and examples
Development Environment Setup
# 1. Fork and clone repository
git clone https://github.com/your-username/github-mcp.git
cd github-mcp
# 2. Install dependencies
npm install
# 3. Build project
npm run build
# 4. Start development mode (auto-recompile)
npm run watch
# 5. Run tests
npx tsx demo.ts
Project Structure
github-mcp/
โโโ src/
โ โโโ types.ts # TypeScript type definitions
โ โโโ server.ts # GitHubMCPServer main class
โ โโโ index.ts # Entry file
โโโ dist/ # Compiled output directory
โโโ demo.ts # Example and test file
โโโ package.json # Project configuration
โโโ tsconfig.json # TypeScript configuration
โโโ README.md # Project documentation
Adding New Tools
- Add a new private method in
src/server.ts - Register the tool in
registerTools() - Update README documentation
- Submit a Pull Request
Example code:
private registerCreateIssueTool(): void {
this.server.registerTool(
'create_issue',
{
title: 'Create Issue',
description: 'Create a new issue in a GitHub repository',
inputSchema: {
owner: z.string(),
repo: z.string(),
title: z.string(),
body: z.string().optional()
},
outputSchema: {
issue: z.object({
number: z.number(),
html_url: z.string()
})
}
},
async ({ owner, repo, title, body }) => {
const endpoint = `/repos/${owner}/${repo}/issues`;
const data = await this.githubApiRequest(endpoint, {
method: 'POST',
body: JSON.stringify({ title, body })
});
return {
content: [],
structuredContent: { issue: data }
};
}
);
}
โ FAQ
Q: Why not validate Token at startup?
A: For better user experience! Even without a Token, you can:
- View all available tools
- Understand each tool's functionality
- Use them when Token is ready
Q: Is the Token secure?
A: Yes! The Token is only stored in local environment variables and is never uploaded or shared. Recommendations:
- Use Fine-grained tokens to limit permission scope
- Rotate Token regularly
- Never hardcode Token in public code
Q: Does it support GitHub Enterprise?
A: Yes! Just configure a custom API address:
const server = new GitHubMCPServer({
apiBase: 'https://github.your-company.com/api/v3',
token: 'your_token'
});
Q: How to debug?
A: Use the demo file for testing:
# Set Token
export GITHUB_ACCESS_TOKEN="your_token"
# Run test
npx tsx demo.ts
Q: What about API rate limiting?
A: GitHub API has rate limits:
- Unauthenticated: 60 requests/hour
- Authenticated: 5000 requests/hour
Recommended to use Token for higher quota.
๐ Roadmap
v0.1.0 - Current Version โ
- Basic MCP server framework
- GitHub Issues list query
- Object-oriented architecture design
- TypeScript type support
v0.2.0 - Next Version ๐ง
- Create and update Issues
- Issue comment functionality
- Label management
- Search functionality optimization
v0.3.0 - Future Plans ๐
- Full Pull Request support
- GitHub Actions integration
- Webhook support
- Batch operation functionality
v1.0.0 - Long-term Goals ๐ฏ
- Complete GitHub API coverage
- Graphical management interface
- Plugin system
- Multi-account management
Want to participate in development? Check Issues for pending tasks!
๐ Acknowledgments
Thanks to the following projects and communities:
- Model Context Protocol - Powerful AI integration protocol
- GitHub REST API - Comprehensive API documentation
- Anthropic Claude - Excellent AI assistant
- All contributors and users โค๏ธ
๐ Contact
- GitHub: @Seey215
- Issues: Submit Issues
- Discussions: Join Discussion
๐ License
This project is licensed under the MIT License.
MIT License
Copyright (c) 2025 Seey215
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction...
If this project helps you, please give it a โญ๏ธ Star!
Made with โค๏ธ by Seey215