Skip to main content
Glama
abdoosalomov

Jira MCP Server

by abdoosalomov
README.md
# Jira MCP Server 🚀
Custom MCP server for Agrobank's self-hosted Jira (`itjira.agrobank.uz`)

## Setup

### Option A — Run with Node

#### 1. Install dependencies
```bash
npm install
```

#### 2. Configure credentials
Edit the `.env` file:
```
JIRA_BASE_URL=https://itjira.agrobank.uz
JIRA_EMAIL=your.email@agrobank.uz
JIRA_PASSWORD=your_password
```

#### 3a. Hook up Claude Desktop
Open Claude Desktop config:
- **Mac:** `~/Library/Application Support/Claude/claude_desktop_config.json`
- **Windows:** `%APPDATA%\Claude\claude_desktop_config.json`

```json
{
  "mcpServers": {
    "jira": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-servers/index.js"],
      "env": {
        "JIRA_BASE_URL": "https://itjira.agrobank.uz",
        "JIRA_EMAIL": "your.email@agrobank.uz",
        "JIRA_PASSWORD": "your_password"
      }
    }
  }
}
```

Restart Claude Desktop and you're good.

#### 3b. Hook up Claude Code

One-liner via the CLI (user scope, available across all projects):
```bash
claude mcp add jira \
  -s user \
  -e JIRA_BASE_URL=https://itjira.agrobank.uz \
  -e JIRA_EMAIL=your.email@agrobank.uz \
  -e JIRA_PASSWORD=your_password \
  -- node /absolute/path/to/mcp-servers/index.js
```

Or drop it in `~/.claude.json` manually:
```json
{
  "mcpServers": {
    "jira": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-servers/index.js"],
      "env": {
        "JIRA_BASE_URL": "https://itjira.agrobank.uz",
        "JIRA_EMAIL": "your.email@agrobank.uz",
        "JIRA_PASSWORD": "your_password"
      }
    }
  }
}
```

Check it loaded:
```bash
claude mcp list
```

---

### Option B — Run with Docker

#### 1. Build the image
```bash
docker build -t jira-mcp:latest .
```

Or with compose:
```bash
docker compose build
```

#### 2a. Wire up Claude Desktop
MCP talks over stdio, so Claude Desktop spawns the container per session. Use `-i --rm` and pass env vars through:

```json
{
  "mcpServers": {
    "jira": {
      "command": "docker",
      "args": [
        "run", "-i", "--rm",
        "-e", "JIRA_BASE_URL",
        "-e", "JIRA_EMAIL",
        "-e", "JIRA_PASSWORD",
        "jira-mcp:latest"
      ],
      "env": {
        "JIRA_BASE_URL": "https://itjira.agrobank.uz",
        "JIRA_EMAIL": "your.email@agrobank.uz",
        "JIRA_PASSWORD": "your_password"
      }
    }
  }
}
```

Why this shape:
- `-i` keeps stdin open (MCP needs JSON-RPC over stdio)
- `--rm` cleans up when Claude Desktop closes the pipe
- `-e VAR` (no `=value`) inherits from the `env` block — secrets never get baked into the image
- No `-t` (no TTY) and no port mapping — pure stdio, no listener

Restart Claude Desktop.

#### 2b. Wire up Claude Code

```bash
claude mcp add jira \
  -s user \
  -e JIRA_BASE_URL=https://itjira.agrobank.uz \
  -e JIRA_EMAIL=your.email@agrobank.uz \
  -e JIRA_PASSWORD=your_password \
  -- docker run -i --rm \
       -e JIRA_BASE_URL -e JIRA_EMAIL -e JIRA_PASSWORD \
       jira-mcp:latest
```

Verify:
```bash
claude mcp list
```

---

## Available Tools

| Tool | Description |
|------|-------------|
| `get_my_issues` | Get all issues assigned to you (filter by status) |
| `search_issues` | Search by keyword or JQL |
| `get_issue` | Get full details of an issue (e.g. PROJ-123) |
| `create_issue` | Create a new issue or subtask (pass `parentIssueKey` for subtasks) |
| `add_comment` | Add a comment to an issue |
| `get_transitions` | See available status transitions |
| `transition_issue` | Change issue status (To Do → In Progress → Done) |
| `get_projects` | List all projects you have access to |
| `update_issue` | Update priority, summary, or description |
| `get_current_user` | Get the currently authenticated Jira user |

## Example prompts in Claude
- "Show me my current Jira tasks"
- "What issues do I have In Progress?"
- "Get details of BANK-456"
- "Create a subtask under MOBCORE-565 titled 'Fix login bug'"
- "Add a comment to BANK-123: done with testing"
- "Move BANK-789 to Done"
- "Bump priority of BANK-100 to High"

Maintenance

ActivitySlowing
ResponsivenessNo issues