Skip to main content
Glama
KronosWasTaken

GitHub-Jira MCP Server

README.md
# 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