README.md•3.81 kB
# GitHub-Jira MCP Server
A comprehensive Model Context Protocol (MCP) server that provides secure integration between GitHub and Jira with proper permission controls and security enforcement.
## 🛠️ Installation
### Prerequisites
- Python 3.11+
- GitHub Personal Access Token
- Jira OAuth App Credentials
### Setup
1. **Clone the repository**
```bash
git clone <your-repo>
cd mcp-servers
```
2. **Install dependencies**
```bash
uv sync
```
3. **Configure environment variables**
```bash
cp env.example .env
# Edit .env with your actual credentials
```
4. **Set up credentials**
**GitHub:**
- Go to [GitHub Settings > Tokens](https://github.com/settings/tokens)
- Generate a new personal access token
- Required scopes: `repo` (for private repos), `public_repo` (for public repos)
**Jira:**
- Go to [Atlassian Developer Console](https://developer.atlassian.com/console/myapps/)
- Create a new OAuth app
- Set redirect URI to: `http://localhost:8080/callback`
- Note your Jira instance URL, client ID, and client secret
## 🔧 Configuration
### Environment Variables
Create a `.env` file in your project root:
```bash
# GitHub Configuration
GITHUB_TOKEN=ghp_your_github_token_here
# Jira OAuth Configuration
JIRA_URL=https://your-domain.atlassian.net
JIRA_CLIENT_ID=your_jira_oauth_client_id_here
JIRA_CLIENT_SECRET=your_jira_oauth_client_secret_here
# Optional: Jira Access Tokens (will be obtained automatically via OAuth)
JIRA_ACCESS_TOKEN=
JIRA_REFRESH_TOKEN=
# Optional: Logging
LOG_LEVEL=INFO
```
### MCP Client Configuration
Add this to your MCP client configuration:
```json
{
"mcpServers": {
"github-jira": {
"command": "python",
"args": ["mcp_github_jira_server.py"],
"env": {
"GITHUB_TOKEN": "your_token_here",
"JIRA_URL": "https://your-domain.atlassian.net",
"JIRA_CLIENT_ID": "your_jira_oauth_client_id_here",
"JIRA_CLIENT_SECRET": "your_jira_oauth_client_secret_here"
}
}
}
}
```
## 📚 Usage
### Starting the Server
```bash
python mcp_github_jira_server.py
```
### Available Tools
#### GitHub Tools
- `github_read_file(owner, repo, path)` - Read file content with security checks
- `github_create_issue(owner, repo, title, body, labels)` - Create issues in own repos
- `github_create_pull_request(owner, repo, title, body, head, base)` - Create PRs in own repos
- `github_delete_file(owner, repo, path, message, sha)` - Delete files from own repos
- `check_github_permissions()` - Check current GitHub permissions
#### Jira Tools
- `jira_create_issue(project_key, summary, description, issue_type)` - Create issues
- `jira_search_issues(jql, max_results)` - Search issues using JQL
- `jira_update_issue(issue_key, updates)` - Update issue fields
- `jira_add_comment(issue_key, comment)` - Add comments to issues
- `jira_transition_issue(issue_key, transition_id)` - Move issues through workflows
- `check_jira_permissions()` - Check current Jira permissions
- `setup_jira_oauth()` - Setup Jira OAuth authentication
### Available Resources
#### GitHub Resources
- `github://{owner}/{repo}` - Repository information
- `github://{owner}/{repo}/files/{path}` - File content
#### Jira Resources
- `jira://projects/{project_key}` - Project information
- `jira://issues/{issue_key}` - Issue details
### Available Prompts
- `check_repository_security_permissions` - Check GitHub permissions
- `read_file_from_github_repo` - Read files from GitHub
- `create_jira_issue_in_project` - Create Jira issues
- `update_jira_issue_workflow` - Update workflow states
- `github_repository_management` - Manage GitHub repos
- `jira_project_workflow_management` - Manage Jira projects
- `setup_jira_oauth_authentication` - Setup Jira OAuth authentication