Skip to main content
Glama
robwilde

jira-mcp-server

by robwilde
README.md
# Jira MCP Server

**For Claude Code CLI**

A Model Context Protocol (MCP) server that provides seamless Jira integration for Claude Code CLI.

## Features

- **Get Issue Details** - Fetch complete information about any Jira issue
- **Search Issues** - Query issues using JQL (Jira Query Language)
- **Get Comments** - Retrieve all comments on an issue
- **User Info** - Get authenticated user details
- **Multi-Environment Support** - Connect to multiple Jira instances simultaneously
- **Project-Specific Configuration** - Different Jira environments per project via `.mcp.json`

## Quick Start

### 1. Install

```bash
cd /var/home/mrwilde/mcp/jira-mcp-server
./install.sh
```

### 2. Configure (Per-Project)

Create `.mcp.json` in your project root:

```bash
cd /path/to/your/project

cat > .mcp.json <<'EOF'
{
  "mcpServers": {
    "jira": {
      "command": "python",
      "args": ["-m", "jira_mcp.server"],
      "env": {
        "JIRA_HOST": "https://your-company.atlassian.net",
        "JIRA_EMAIL": "your-email@company.com",
        "JIRA_API_TOKEN": "your-api-token",
        "JIRA_DEFAULT_PROJECT": "PROJ"
      }
    }
  }
}
EOF

# Don't commit tokens!
echo ".mcp.json" >> .gitignore
```

### 3. Verify

```bash
claude mcp list
```

### 4. Use

In Claude Code CLI, simply ask:
- "Get details for issue LXP-449"
- "Search for all my open tasks"
- "Show comments on PROJ-123"

## Installation & Configuration

See **[INSTALLATION.md](INSTALLATION.md)** for complete setup instructions including:
- System-wide installation
- Per-project configuration (`.mcp.json`)
- Global user configuration
- Multiple Jira environments
- CLI commands (`claude mcp add`)
- Security best practices

## Configuration Methods

### Method 1: Project `.mcp.json` File (Recommended)

```json
{
  "mcpServers": {
    "jira": {
      "command": "python",
      "args": ["-m", "jira_mcp.server"],
      "env": {
        "JIRA_HOST": "https://company.atlassian.net",
        "JIRA_EMAIL": "you@company.com",
        "JIRA_API_TOKEN": "your-token"
      }
    }
  }
}
```

### Method 2: Claude Code CLI Command

```bash
# Add to current project
cd /path/to/project
claude mcp add --scope project jira \
  --env JIRA_HOST=https://company.atlassian.net \
  --env JIRA_EMAIL=you@company.com \
  --env JIRA_API_TOKEN=your-token \
  -- python -m jira_mcp.server

# Add globally for all projects
claude mcp add --scope user jira \
  --env JIRA_HOST=https://company.atlassian.net \
  --env JIRA_EMAIL=you@company.com \
  --env JIRA_API_TOKEN=your-token \
  -- python -m jira_mcp.server
```

## Development

### Testing

```bash
# Test connection and authentication
source venv/bin/activate
python tests/test_connection.py

# Test with specific issue
python tests/test_connection.py LXP-449
```

### Project Structure

```
jira-mcp-server/
├── src/jira_mcp/
│   ├── server.py       # MCP server implementation
│   └── jira_client.py  # Jira API wrapper
├── tests/
│   └── test_connection.py
├── config-examples/    # Configuration templates
│   ├── project-mcp.json
│   └── multi-environment-mcp.json
├── pyproject.toml
├── requirements.txt
├── install.sh          # Quick install script
└── INSTALLATION.md     # Complete setup guide
```

## MCP Tools

### get_issue
Fetch detailed information about a Jira issue.

**Input:** `issue_key` (string) - e.g., "LXP-449"

**Returns:** Full issue details including summary, description, status, assignee, priority, dates, and project info.

### search_issues
Search for issues using JQL (Jira Query Language).

**Input:**
- `jql` (string) - Query string, e.g., "project = LXP AND status = 'To Do'"
- `max_results` (number, optional) - Default: 50

**Returns:** List of matching issues with key details.

### get_issue_comments
Get all comments on a specific issue.

**Input:** `issue_key` (string)

**Returns:** List of comments with author, body, and timestamps.

### get_current_user
Get information about the authenticated user.

**Input:** None

**Returns:** User details including username, email, and display name.

## JQL Query Examples

```
# All issues in a project
project = LXP

# Your open issues
assignee = currentUser() AND status != Done

# Recent updates
updated >= -7d ORDER BY updated DESC

# Complex query
project = LXP AND status = "In Progress" AND assignee = currentUser()
```

## Multiple Environments Example

```json
{
  "mcpServers": {
    "jira-prod": {
      "command": "python",
      "args": ["-m", "jira_mcp.server"],
      "env": {
        "JIRA_HOST": "https://prod.atlassian.net",
        "JIRA_EMAIL": "you@company.com",
        "JIRA_API_TOKEN": "prod-token",
        "JIRA_DEFAULT_PROJECT": "LXP"
      }
    },
    "jira-staging": {
      "command": "python",
      "args": ["-m", "jira_mcp.server"],
      "env": {
        "JIRA_HOST": "https://staging.atlassian.net",
        "JIRA_EMAIL": "you@company.com",
        "JIRA_API_TOKEN": "staging-token",
        "JIRA_DEFAULT_PROJECT": "LXL"
      }
    }
  }
}
```

## Claude Code CLI Commands

```bash
# List MCP servers
claude mcp list

# Get server details
claude mcp get jira

# Remove server
claude mcp remove --scope project jira

# Debug MCP issues
claude --mcp-debug
```

## Getting a Jira API Token

1. Visit: https://id.atlassian.com/manage-profile/security/api-tokens
2. Click "Create API token"
3. Name it (e.g., "MCP Server - Project X")
4. Copy the token immediately
5. Add it to your `.mcp.json`

## Security

- **Never commit tokens** to version control
- **Add `.mcp.json` to `.gitignore`** in every project
- Use project-specific tokens with minimal permissions
- Rotate tokens regularly (every 90 days)
- Revoke unused tokens
- Create `.mcp.json.example` templates for team onboarding

## Requirements

- Python >= 3.10
- Claude Code CLI
- Jira Cloud account with API access
- API token for authentication

## Dependencies

- `mcp` >= 1.0.0 - Model Context Protocol SDK
- `jira` >= 3.5.0 - Python Jira library
- `python-dotenv` >= 1.0.0 - Environment variable management
- `httpx` >= 0.27.0 - HTTP client

## Troubleshooting

### Module Not Found

Use full Python path in `.mcp.json`:

```json
{
  "mcpServers": {
    "jira": {
      "command": "/var/home/mrwilde/mcp/jira-mcp-server/venv/bin/python",
      "args": ["-m", "jira_mcp.server"],
      ...
    }
  }
}
```

### Check MCP Status

```bash
claude mcp list
claude --mcp-debug
```

See **[INSTALLATION.md](INSTALLATION.md)** for detailed troubleshooting.

## License

MIT

## Contributing

Contributions welcome! Please submit issues or pull requests.

## Support

- Check [INSTALLATION.md](INSTALLATION.md) for configuration help
- Review [CLAUDE.md](CLAUDE.md) for development guidance
- Open an issue on GitHub

## Changelog

### 0.1.0 (2025-10-28)
- Initial release for Claude Code CLI
- Core MCP server implementation
- Four essential Jira tools (get_issue, search_issues, get_issue_comments, get_current_user)
- Multi-environment support via `.mcp.json`
- Project-specific configuration
- Comprehensive documentation

Maintenance

ActivityInactive
ResponsivenessNo issues