An open API service indexing awesome lists of open source software.

https://github.com/nzenitram/github-mcp


https://github.com/nzenitram/github-mcp

Last synced: about 2 months ago
JSON representation

Awesome Lists containing this project

README

          

# GitHub MCP Tools

A Multi-Claude Program (MCP) for interacting with GitHub APIs through Claude Desktop.

## Features

- Search GitHub repositories and issues
- Create, update, and manage GitHub issues and pull requests
- Manage repository settings and configurations
- Handle repository workflows and actions
- Search for users and organizations
- Manage repository collaborators and teams

## Installation

1. Clone this repository:
```bash
git clone https://github.com/yourusername/github-mcp.git
cd github-mcp
```

2. Create and activate a virtual environment:
```bash
# On macOS/Linux
python -m venv venv
source venv/bin/activate

# On Windows
python -m venv venv
.\venv\Scripts\activate
```

3. Install dependencies:
```bash
pip install -r requirements.txt
```

4. Create a `.env` file in the project root:
```bash
touch .env
```

5. Add your GitHub credentials to the `.env` file:
```
GITHUB_TOKEN=your_personal_access_token_here
GITHUB_USERNAME=your_github_username
```

6. Test the installation:
```bash
# Run all tests
python -m pytest

# Run a specific test file
python -m pytest tests/test_search_repos.py
```

7. Start the MCP server:
```bash
python run.py
```

## Environment Setup

### GitHub Personal Access Token
You'll need a fine-grained personal access token to authenticate with GitHub:

1. Log in to your GitHub account
2. Go to Settings > Developer settings > Personal access tokens > Fine-grained tokens
3. Click "Generate new token"
4. Configure the token:
- Token name: "Claude Desktop Integration"
- Description: "Token for Claude Desktop GitHub integration"
- Expiration: Choose an appropriate expiration date
- Repository access: Select "All repositories" or specific repositories
- Permissions:
- Repository permissions:
- Actions: Read and write
- Contents: Read and write
- Issues: Read and write
- Pull requests: Read and write
- Repository hooks: Read and write
- Repository settings: Read and write
- Organization permissions (if working with organization repositories):
- Members: Read-only
- Teams: Read-only
5. Click "Generate token" and save the generated token securely

## Tools

### Search Repositories
Search for GitHub repositories using various criteria.

**Parameters:**
- query: Search query string
- sort: Sort field (stars, forks, updated, etc.)
- order: Sort order (asc or desc)
- max_results: Maximum number of results to return (default: 10)

### Create Issue
Create a new GitHub issue in a specified repository.

**Parameters:**
- owner: Repository owner
- repo: Repository name
- title: Issue title
- body: Issue description
- labels: List of labels to apply
- assignees: List of assignee usernames

### Create Pull Request
Create a new pull request.

**Parameters:**
- owner: Repository owner
- repo: Repository name
- title: PR title
- body: PR description
- head: Source branch
- base: Target branch
- draft: Whether to create as draft PR

### Manage Repository Settings
Update repository settings and configurations.

**Parameters:**
- owner: Repository owner
- repo: Repository name
- settings: Dictionary of settings to update

### Search Issues
Search for issues across repositories.

**Parameters:**
- query: Search query string
- state: Issue state (open, closed, all)
- sort: Sort field
- order: Sort order
- max_results: Maximum number of results

### Manage Workflows
Manage GitHub Actions workflows.

**Parameters:**
- owner: Repository owner
- repo: Repository name
- workflow_file: Workflow file path
- action: Action to perform (enable, disable, trigger)

### Manage Collaborators
Manage repository collaborators.

**Parameters:**
- owner: Repository owner
- repo: Repository name
- username: Collaborator username
- permission: Permission level (pull, push, admin, maintain, triage)

## Example Usage

```python
# Search for repositories
search_repos(query="python web framework", sort="stars", max_results=5)

# Create a new issue
create_issue(
owner="username",
repo="repository",
title="Bug: Login not working",
body="Users cannot log in using the login button",
labels=["bug", "high-priority"]
)

# Create a pull request
create_pull_request(
owner="username",
repo="repository",
title="Feature: Add user authentication",
body="Implements JWT-based authentication",
head="feature/auth",
base="main"
)

# Search for issues
search_issues(query="is:open is:issue author:username", max_results=10)

# Manage repository settings
manage_repo_settings(
owner="username",
repo="repository",
settings={
"has_issues": True,
"has_projects": True,
"has_wiki": True
}
)
```

## Development

### Running Tests
```bash
# Run all tests
python -m pytest

# Run with coverage
python -m pytest --cov=src tests/

# Run specific test file
python -m pytest tests/test_search_repos.py
```

### Adding New Tools
1. Create a new file in `src/tools/`
2. Implement your tool function
3. Register the tool in `src/main.py`
4. Add tests in `tests/`
5. Update documentation in README.md

### Contributing
1. Fork the repository
2. Create a feature branch
3. Make your changes
4. Run tests
5. Submit a pull request

## License
MIT License