npm package: @iflow-mcp/tom28881-mcp-jira-server
Description: Model Context Protocol server for Jira integration with Claude Code
Author: MCP Jira Server Contributors
Latest version: 1.1.1

# MCP Jira Server fo Claude Code

A comprehensive Model Context Protocol (MCP) server for Jira integration with Claude Code. This server provides complete Jira functionality including issue management, sprint operations, comments, attachments, and batch processing.

[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
[![TypeScript](https://img.shields.io/badge/TypeScript-5.4+-blue.svg)](https://www.typescriptlang.org/)
[![Node.js](https://img.shields.io/badge/Node.js-18+-green.svg)](https://nodejs.org/)

⚠️ **Security Note**: Never commit your API tokens! All credentials should be in `.env` files or environment variables.

## 🚀 Features

### 📋 Issue Management (12 tools)
- **create-issue** - Create issues with full field support including custom fields and dates
- **update-issue** - Update existing issues with smart field handling
- **get-issue** - Retrieve detailed issue information
- **search-issues** - Advanced search using JQL or simplified filters with date support
- **transition-issue** - Move issues through workflow states
- **link-issues** - Create relationships between issues (with smart type matching)
- **get-link-types** - List available issue link types
- **get-fields** - Show available fields for project/issue type
- **diagnose-fields** - Troubleshoot field configuration and find custom field IDs
- **create-epic-with-subtasks** - Create epic with multiple subtasks in one operation
- **create-task-for-epic** - Create task linked to epic (optimized for localized Jira)

### 💬 Comments & History (3 tools)
- **get-comments** - Read issue comments with author and timestamp information
- **get-history** - View detailed change history with field modifications
- **add-comment** - Add comments with Atlassian Document Format support
- **batch-comment** - Add same comment to multiple issues simultaneously

### 📎 Attachments (2 tools)
- **get-attachments** - List attachments with metadata (size, type, upload date)
- **upload-attachment** - Upload files using base64 encoding

### 🏃 Sprint & Agile Management (4 tools)
- **get-boards** - List available Jira boards for agile projects
- **get-sprints** - View sprints for a board with status indicators
- **move-issue-to-sprint** - Move issues between sprints and backlog
- **create-sprint** - Create new sprints with optional start/end dates

### Resources
- `jira://projects` - List all accessible projects
- `jira://project/{key}` - Get specific project details
- `jira://issue/{key}` - Get specific issue details
- `jira://myself` - Current user information
- `jira://search?jql={query}` - Search results

### Prompts
- **standup-report** - Generate daily standup reports
- **sprint-planning** - Assist with sprint planning activities
- **bug-triage** - Help prioritize and triage bugs
- **release-notes** - Generate release notes from completed issues
- **epic-status** - Comprehensive epic progress reports

## Installation

1. Clone the repository:
```bash
git clone https://github.com/tom28881/JIRA_MCP.git
cd JIRA_MCP
```

2. Install dependencies:
```bash
npm install
```

3. Build the project:
```bash
npm run build
```

4. Create a `.env` file from the example:
```bash
cp .env.example .env
```

5. Configure your Jira credentials in `.env`:
```env
JIRA_HOST=https://your-company.atlassian.net
JIRA_EMAIL=your-email@company.com
JIRA_API_TOKEN=your-api-token
JIRA_DEFAULT_PROJECT=PROJ
```

### Getting a Jira API Token

1. Log in to [Atlassian account settings](https://id.atlassian.com/manage-profile/security/api-tokens)
2. Click "Create API token"
3. Give it a name (e.g., "MCP Server")
4. Copy the token and add it to your `.env` file

## Claude Code Configuration

To use this MCP server with Claude Code, you need to configure it in your MCP settings.

### Option 1: Using Environment Variables

Set up the server with environment variables:

```bash
# Export environment variables
export JIRA_HOST="https://your-company.atlassian.net"
export JIRA_EMAIL="your-email@company.com"
export JIRA_API_TOKEN="your-api-token"
export JIRA_DEFAULT_PROJECT="PROJ"

# Run Claude Code with the MCP server
claude --mcp "node /absolute/path/to/mcp-jira-server/dist/index.js"
```

### Option 2: Using .env File

Create a `.env` file in the server directory and run:

```bash
cd /path/to/mcp-jira-server
claude --mcp "node dist/index.js"
# or use the convenient run script:
claude --mcp "./run.sh"
```

### Option 3: Add to Claude Code Settings

Add the server to your Claude Code settings file (`~/.claude/settings.json`):

```json
{
  "mcpServers": [
    {
      "name": "jira",
      "command": "node",
      "args": ["/absolute/path/to/mcp-jira-server/dist/index.js"],
      "env": {
        "JIRA_HOST": "https://your-company.atlassian.net",
        "JIRA_EMAIL": "your-email@company.com",
        "JIRA_API_TOKEN": "your-api-token",
        "JIRA_DEFAULT_PROJECT": "PROJ"
      }
    }
  ]
}
```

## Usage Examples

### Creating Issues

```
Create a new bug in project PROJ with high priority about login issues
```

```
Create a story "Implement user authentication" with 5 story points and assign it to john@example.com
```

### Setting Dates and Time Estimates

```
Create task "Database backup" with dueDate "next week" and originalEstimate "4h"
```

```
Update PROJ-123 with startDate "tomorrow" and dueDate "+14d"
```

```
Create issue "Quarterly review" with dueDate "31.3.2025" and originalEstimate "2 days"
```

### Creating Epics with Subtasks

```
Create an epic "Database Migration" in project PROJ with subtasks "Backup current data" and "Migrate schema"
```

### Creating Subtasks

```
Create a subtask "Review code" for parent issue PROJ-123
```

### Czech Jira Support

```
Create issue type "Úkol" in project PROJ
```

```
Create task for epic PPC-48 with summary "Database backup"
```

### Searching Issues

```
Find all open bugs assigned to me
```

```
Search for issues in project PROJ with label "urgent" that are not done
```

### Date-based Searching

```
Search issues due before "next week" in project PROJ
```

```
Find issues created after "2024-12-01" and updated after "yesterday"
```

```
Search for overdue issues: dueBefore "today" and status != "Done"
```

### Managing Issues

```
Update PROJ-123 to add story points 8
```

```
Transition PROJ-456 to "In Progress"
```

```
Link PROJ-123 to PROJ-456 as "blocks"
```

**Note**: Epic-Story relationships use the epicLink field, not regular issue links:
```
Update PROJ-456 with epicLink "PROJ-100"  # Links story to epic
```

### Using Prompts

```
Generate a standup report for john@example.com
```

```
Help me plan the sprint for project PROJ
```

```
Create release notes for version 2.0 in project PROJ
```

## Advanced Configuration

### Custom Fields

The server can work with any Jira configuration:

#### Option 1: Auto-Detection (Recommended)
Leave custom field IDs unset in `.env` and the server will automatically detect them based on field names.

#### Option 2: Manual Configuration
If auto-detection doesn't work, configure custom field IDs in your `.env`:

```env
JIRA_FIELD_STORY_POINTS=customfield_10001
JIRA_FIELD_ACCEPTANCE_CRITERIA=customfield_10002
JIRA_FIELD_EPIC_LINK=customfield_10003
```

#### Finding Field IDs
Use the `diagnose-fields` tool to find the correct field IDs for your Jira instance:
```
diagnose-fields project:"PROJ" issueType:"Story"
```

### Auto-create Test Tickets

Enable automatic test ticket creation for stories:

```env
AUTO_CREATE_TEST_TICKETS=true
```

## Development

### Running in Development Mode

```bash
npm run dev
```

### Type Checking

```bash
npm run typecheck
```

### Linting

```bash
npm run lint
```

## Features

### 🌍 Localization Support
- Automatic support for localized Jira instances (Czech, English, etc.)
- Issue type names can be in any language (e.g., "Task", "Úkol", "Aufgabe")
- Priority names support localization (e.g., "High", "Vysoká", "Hoch")
- Special support for Czech Jira configurations
- Works with any Jira language setting

### 📅 Date and Time Management
- Flexible date input formats:
  - ISO: "2024-12-31"
  - European: "31.12.2024" or "31/12/2024"
  - Relative: "today", "tomorrow", "next week", "+7d", "+2w", "+1m"
  - Czech: "dnes", "zítra", "příští týden"
- Time tracking support:
  - Estimates: "2h", "1d 4h", "3 days", "2 hodiny"
  - Automatic format conversion
- Date-based searching and filtering

### 🔄 Automatic Retry
The server automatically retries failed requests with exponential backoff (up to 3 attempts).

### 📦 Robust Error Handling
- Empty response handling for Jira transitions
- Detailed error messages with context
- Graceful degradation for missing features

### 📝 Comprehensive Logging
Enable debug logging to see detailed information:
```bash
DEBUG=* claude --mcp "./run.sh"
# or specific to jira-mcp:
DEBUG=jira-mcp claude --mcp "./run.sh"
```

### 🔒 Connection Testing
The server tests the connection on startup and provides clear error messages if authentication fails.

### 📄 Atlassian Document Format
Automatically converts plain text and markdown to Jira's ADF format for rich text fields.

## Troubleshooting

### Working with Different Jira Configurations

This MCP server is designed to work with **any Jira instance** regardless of:
- Language settings (English, Czech, German, etc.)
- Custom field configurations
- Project-specific settings

**Best Practices:**
1. Use `get-fields` to see available issue types in your language
2. Use `diagnose-fields` to find custom field IDs
3. Create issues using the exact issue type names from your Jira

### Common Issues

1. **Authentication Failed**
   - Verify your API token is correct
   - Ensure your email matches your Atlassian account
   - Check that your Jira instance URL includes `https://`

2. **Project Not Found**
   - Verify you have access to the project
   - Check the project key is correct (case-sensitive)

3. **Custom Fields Not Working**
   - Use `diagnose-fields` tool to find the correct field IDs for your project
   - Use `get-fields` tool to see all available fields
   - Custom field IDs typically start with `customfield_`
   - Some fields may not be available for certain issue types (e.g., labels on Epics)
   - Epic Link field ID varies between Jira instances

4. **Link Type Not Found**
   - Use `get-link-types` tool to see available link types
   - Link types are case-sensitive in Jira API
   - The server will try to match case-insensitively
   - Epic-Story relationships use epicLink field, not regular issue links

5. **Epic-Story Linking Issues**
   - Run `diagnose-fields` for project and "Story" issue type
   - Update JIRA_FIELD_EPIC_LINK in .env with the correct field ID
   - Restart the MCP server after updating .env

### Debug Mode

Set the `DEBUG` environment variable for verbose logging:

```bash
DEBUG=* claude --mcp "./run.sh"
# or
DEBUG=jira-mcp claude --mcp "./run.sh"
```

### View Logs

Logs are output to stderr and include:
- Connection status
- API requests and responses
- Error details with context
- Performance metrics

## Contributing

See [CONTRIBUTING.md](CONTRIBUTING.md) for development guidelines.

## License

MIT License - see LICENSE file for details

## Support

For issues and feature requests, please use the GitHub issue tracker.