jira-mcp-simple


Namejira-mcp-simple JSON
Version 1.0.0 PyPI version JSON
download
home_pageNone
SummaryA clean, reliable MCP server for Jira integration with Claude Desktop
upload_time2025-10-28 16:41:22
maintainerNone
docs_urlNone
authorNone
requires_python>=3.10
licenseNone
keywords jira mcp model-context-protocol claude anthropic api atlassian
VCS
bugtrack_url
requirements mcp httpx pydantic python-dotenv
Travis-CI No Travis.
coveralls test coverage No coveralls.
            # Jira MCP Server

A clean, reliable [Model Context Protocol](https://modelcontextprotocol.io) server for Jira integration, designed for use with Claude Desktop and other MCP clients.

## Why This Exists

The existing Jira MCP servers have quality issues:
- Pydantic dependency conflicts
- Deprecated API usage (v2 instead of v3)
- Poor error handling
- Unreliable connections

This implementation focuses on:
- ✅ Modern Jira REST API v3
- ✅ Minimal, stable dependencies
- ✅ Proper error handling
- ✅ Multi-instance support
- ✅ Type safety throughout

## Features

### Core Operations
- 🔍 **Search issues** with JQL (Jira Query Language)
- 📄 **Get issue details** with full field information
- ➕ **Create issues** with descriptions, labels, and custom fields
- ✏️ **Update issues** (summary, description, labels, etc.)
- 💬 **Add comments** to issues
- 🔄 **Transition issues** between statuses
- 📋 **List projects** accessible to the user

### Multi-Instance Support
Connect to multiple Jira instances simultaneously:
- Different organizations
- Personal and work accounts
- Multiple teams

## Quick Start

### 1. Installation

**Option A: Install from PyPI (Recommended)**

```bash
pip install jira-mcp-server
```

**Option B: Install from source**

```bash
git clone https://github.com/Positronic-AI/jira-mcp.git
cd jira-mcp
pip install -e .
```

### 2. Get Your Jira API Token

1. Go to https://id.atlassian.com/manage-profile/security/api-tokens
2. Click "Create API token"
3. Give it a name (e.g., "Claude Desktop MCP")
4. Copy the token

### 3. Test Connection

```bash
export JIRA_MYCOMPANY_URL="https://your-company.atlassian.net"
export JIRA_MYCOMPANY_EMAIL="your.email@company.com"
export JIRA_MYCOMPANY_TOKEN="your_api_token_here"

jira-mcp --test-connection mycompany
```

You should see:
```
✓ Connected successfully!
  User: Your Name (your@email.com)
  Account ID: 123abc...
  Accessible projects: N
```

### 4. Configure Claude Desktop

Edit your Claude Desktop config file:
- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
- **Linux**: `~/.config/Claude/claude_desktop_config.json`

Add this configuration:

```json
{
  "mcpServers": {
    "jira": {
      "command": "jira-mcp",
      "args": ["--instance", "mycompany"],
      "env": {
        "JIRA_MYCOMPANY_URL": "https://your-company.atlassian.net",
        "JIRA_MYCOMPANY_EMAIL": "your.email@company.com",
        "JIRA_MYCOMPANY_TOKEN": "your_api_token_here"
      }
    }
  }
}
```

**Note**: If you installed in a virtual environment, use the full path to `jira-mcp`, e.g., `/path/to/venv/bin/jira-mcp`

### 5. Restart Claude Desktop

Completely quit and reopen Claude Desktop.

### 6. Test It!

Try these commands in Claude:

```
List my Jira projects

Search for issues assigned to me

Show me PROJECT-123

Create a new task in PROJECT called "Test MCP integration"
```

## Usage Examples

### Natural Language Commands

Once configured, you can use natural language with Claude:

- "Find all open bugs in the MOBILE project"
- "Show me high priority issues assigned to me"
- "Create a task about fixing the login page"
- "Add a comment to PROJ-42 saying the fix is deployed"
- "Move PROJ-42 to In Progress"
- "Update the summary of PROJ-42 to include more details"

### Direct JQL Queries

```
Search Jira with: project = PROJ AND status = "In Progress" ORDER BY priority DESC
```

## Multi-Instance Configuration

To connect multiple Jira instances:

```json
{
  "mcpServers": {
    "jira-work": {
      "command": "jira-mcp",
      "args": ["--instance", "work"],
      "env": {
        "JIRA_WORK_URL": "https://company.atlassian.net",
        "JIRA_WORK_EMAIL": "you@company.com",
        "JIRA_WORK_TOKEN": "token1"
      }
    },
    "jira-personal": {
      "command": "jira-mcp",
      "args": ["--instance", "personal"],
      "env": {
        "JIRA_PERSONAL_URL": "https://personal.atlassian.net",
        "JIRA_PERSONAL_EMAIL": "you@personal.com",
        "JIRA_PERSONAL_TOKEN": "token2"
      }
    }
  }
}
```

Claude will know which instance to use based on context.

## Architecture

```
jira-mcp/
├── server.py          # Main MCP server
├── jira_client.py     # Jira REST API v3 wrapper
├── config.py          # Configuration management
├── requirements.txt   # Python dependencies
└── examples/          # Configuration examples
```

### Key Design Decisions

**Minimal Dependencies**: Only essential, stable packages (mcp, httpx, pydantic, python-dotenv)

**Modern API**: Uses Jira REST API v3 (`/rest/api/3/search/jql`) instead of deprecated v2

**Type Safety**: Full type hints throughout for better IDE support and fewer bugs

**Error Handling**: Clear error messages propagated from Jira API

**Multi-Instance**: Environment-based configuration for multiple Jira instances

## Available Tools

The server exposes these MCP tools:

| Tool | Description |
|------|-------------|
| `jira_search` | Search issues using JQL with pagination |
| `jira_get_issue` | Get detailed issue information |
| `jira_create_issue` | Create new issues with custom fields |
| `jira_update_issue` | Update existing issue fields |
| `jira_add_comment` | Add comments to issues |
| `jira_transition_issue` | Change issue status |
| `jira_list_projects` | List accessible projects |

## Troubleshooting

### Connection fails

- Verify your API token is correct
- Check the Jira URL has no trailing slash
- Ensure your email matches the Atlassian account
- Test with: `jira-mcp --test-connection <instance>`

### Claude Desktop doesn't see the server

- Verify JSON config is valid
- Use absolute paths (not `~/` or relative)
- Restart Claude Desktop completely
- Check Claude Desktop logs for errors

### "Module not found" errors

- Ensure `jira-mcp-server` is installed: `pip install jira-mcp-server`
- If using a virtual environment, ensure it's activated or use the full path

### "Field cannot be set" errors

- Not all fields are available on all projects
- Check your project's issue type screen configuration
- Common issue: `priority` field not on screen (make it optional)

## Contributing

Contributions are welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.

Areas we'd especially appreciate help:
- Unit and integration tests
- Jira Data Center support
- Attachment handling
- Sprint/board operations
- Custom field improvements

## Development

```bash
# Clone and setup
git clone https://github.com/Positronic-AI/jira-mcp.git
cd jira-mcp
pip install -e ".[dev]"

# Test connection
export JIRA_TEST_URL="https://test.atlassian.net"
export JIRA_TEST_EMAIL="test@example.com"
export JIRA_TEST_TOKEN="test_token"
jira-mcp --test-connection test
```

## License

MIT License - see [LICENSE](LICENSE) for details.

## Acknowledgments

- Built for use with [Claude Desktop](https://claude.ai/desktop)
- Uses the [Model Context Protocol](https://modelcontextprotocol.io)
- Inspired by the need for reliable Jira automation

## Support

- 🐛 [Report bugs](https://github.com/yourusername/jira-mcp/issues)
- 💡 [Request features](https://github.com/yourusername/jira-mcp/issues)
- 📖 [Documentation](https://github.com/yourusername/jira-mcp/wiki)
- 💬 [Discussions](https://github.com/yourusername/jira-mcp/discussions)

---

**Note**: This is an independent project and is not affiliated with Atlassian or Anthropic.

            

Raw data

            {
    "_id": null,
    "home_page": null,
    "name": "jira-mcp-simple",
    "maintainer": null,
    "docs_url": null,
    "requires_python": ">=3.10",
    "maintainer_email": "Ben Vierck <ben@positronic.ai>",
    "keywords": "jira, mcp, model-context-protocol, claude, anthropic, api, atlassian",
    "author": null,
    "author_email": "Ben Vierck <ben@positronic.ai>",
    "download_url": "https://files.pythonhosted.org/packages/2d/2f/653df5f57dccc8b789cf1f75d0fedb938b6ac0284d1944bf8ec3865f8e93/jira_mcp_simple-1.0.0.tar.gz",
    "platform": null,
    "description": "# Jira MCP Server\n\nA clean, reliable [Model Context Protocol](https://modelcontextprotocol.io) server for Jira integration, designed for use with Claude Desktop and other MCP clients.\n\n## Why This Exists\n\nThe existing Jira MCP servers have quality issues:\n- Pydantic dependency conflicts\n- Deprecated API usage (v2 instead of v3)\n- Poor error handling\n- Unreliable connections\n\nThis implementation focuses on:\n- \u2705 Modern Jira REST API v3\n- \u2705 Minimal, stable dependencies\n- \u2705 Proper error handling\n- \u2705 Multi-instance support\n- \u2705 Type safety throughout\n\n## Features\n\n### Core Operations\n- \ud83d\udd0d **Search issues** with JQL (Jira Query Language)\n- \ud83d\udcc4 **Get issue details** with full field information\n- \u2795 **Create issues** with descriptions, labels, and custom fields\n- \u270f\ufe0f **Update issues** (summary, description, labels, etc.)\n- \ud83d\udcac **Add comments** to issues\n- \ud83d\udd04 **Transition issues** between statuses\n- \ud83d\udccb **List projects** accessible to the user\n\n### Multi-Instance Support\nConnect to multiple Jira instances simultaneously:\n- Different organizations\n- Personal and work accounts\n- Multiple teams\n\n## Quick Start\n\n### 1. Installation\n\n**Option A: Install from PyPI (Recommended)**\n\n```bash\npip install jira-mcp-server\n```\n\n**Option B: Install from source**\n\n```bash\ngit clone https://github.com/Positronic-AI/jira-mcp.git\ncd jira-mcp\npip install -e .\n```\n\n### 2. Get Your Jira API Token\n\n1. Go to https://id.atlassian.com/manage-profile/security/api-tokens\n2. Click \"Create API token\"\n3. Give it a name (e.g., \"Claude Desktop MCP\")\n4. Copy the token\n\n### 3. Test Connection\n\n```bash\nexport JIRA_MYCOMPANY_URL=\"https://your-company.atlassian.net\"\nexport JIRA_MYCOMPANY_EMAIL=\"your.email@company.com\"\nexport JIRA_MYCOMPANY_TOKEN=\"your_api_token_here\"\n\njira-mcp --test-connection mycompany\n```\n\nYou should see:\n```\n\u2713 Connected successfully!\n  User: Your Name (your@email.com)\n  Account ID: 123abc...\n  Accessible projects: N\n```\n\n### 4. Configure Claude Desktop\n\nEdit your Claude Desktop config file:\n- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`\n- **Windows**: `%APPDATA%\\Claude\\claude_desktop_config.json`\n- **Linux**: `~/.config/Claude/claude_desktop_config.json`\n\nAdd this configuration:\n\n```json\n{\n  \"mcpServers\": {\n    \"jira\": {\n      \"command\": \"jira-mcp\",\n      \"args\": [\"--instance\", \"mycompany\"],\n      \"env\": {\n        \"JIRA_MYCOMPANY_URL\": \"https://your-company.atlassian.net\",\n        \"JIRA_MYCOMPANY_EMAIL\": \"your.email@company.com\",\n        \"JIRA_MYCOMPANY_TOKEN\": \"your_api_token_here\"\n      }\n    }\n  }\n}\n```\n\n**Note**: If you installed in a virtual environment, use the full path to `jira-mcp`, e.g., `/path/to/venv/bin/jira-mcp`\n\n### 5. Restart Claude Desktop\n\nCompletely quit and reopen Claude Desktop.\n\n### 6. Test It!\n\nTry these commands in Claude:\n\n```\nList my Jira projects\n\nSearch for issues assigned to me\n\nShow me PROJECT-123\n\nCreate a new task in PROJECT called \"Test MCP integration\"\n```\n\n## Usage Examples\n\n### Natural Language Commands\n\nOnce configured, you can use natural language with Claude:\n\n- \"Find all open bugs in the MOBILE project\"\n- \"Show me high priority issues assigned to me\"\n- \"Create a task about fixing the login page\"\n- \"Add a comment to PROJ-42 saying the fix is deployed\"\n- \"Move PROJ-42 to In Progress\"\n- \"Update the summary of PROJ-42 to include more details\"\n\n### Direct JQL Queries\n\n```\nSearch Jira with: project = PROJ AND status = \"In Progress\" ORDER BY priority DESC\n```\n\n## Multi-Instance Configuration\n\nTo connect multiple Jira instances:\n\n```json\n{\n  \"mcpServers\": {\n    \"jira-work\": {\n      \"command\": \"jira-mcp\",\n      \"args\": [\"--instance\", \"work\"],\n      \"env\": {\n        \"JIRA_WORK_URL\": \"https://company.atlassian.net\",\n        \"JIRA_WORK_EMAIL\": \"you@company.com\",\n        \"JIRA_WORK_TOKEN\": \"token1\"\n      }\n    },\n    \"jira-personal\": {\n      \"command\": \"jira-mcp\",\n      \"args\": [\"--instance\", \"personal\"],\n      \"env\": {\n        \"JIRA_PERSONAL_URL\": \"https://personal.atlassian.net\",\n        \"JIRA_PERSONAL_EMAIL\": \"you@personal.com\",\n        \"JIRA_PERSONAL_TOKEN\": \"token2\"\n      }\n    }\n  }\n}\n```\n\nClaude will know which instance to use based on context.\n\n## Architecture\n\n```\njira-mcp/\n\u251c\u2500\u2500 server.py          # Main MCP server\n\u251c\u2500\u2500 jira_client.py     # Jira REST API v3 wrapper\n\u251c\u2500\u2500 config.py          # Configuration management\n\u251c\u2500\u2500 requirements.txt   # Python dependencies\n\u2514\u2500\u2500 examples/          # Configuration examples\n```\n\n### Key Design Decisions\n\n**Minimal Dependencies**: Only essential, stable packages (mcp, httpx, pydantic, python-dotenv)\n\n**Modern API**: Uses Jira REST API v3 (`/rest/api/3/search/jql`) instead of deprecated v2\n\n**Type Safety**: Full type hints throughout for better IDE support and fewer bugs\n\n**Error Handling**: Clear error messages propagated from Jira API\n\n**Multi-Instance**: Environment-based configuration for multiple Jira instances\n\n## Available Tools\n\nThe server exposes these MCP tools:\n\n| Tool | Description |\n|------|-------------|\n| `jira_search` | Search issues using JQL with pagination |\n| `jira_get_issue` | Get detailed issue information |\n| `jira_create_issue` | Create new issues with custom fields |\n| `jira_update_issue` | Update existing issue fields |\n| `jira_add_comment` | Add comments to issues |\n| `jira_transition_issue` | Change issue status |\n| `jira_list_projects` | List accessible projects |\n\n## Troubleshooting\n\n### Connection fails\n\n- Verify your API token is correct\n- Check the Jira URL has no trailing slash\n- Ensure your email matches the Atlassian account\n- Test with: `jira-mcp --test-connection <instance>`\n\n### Claude Desktop doesn't see the server\n\n- Verify JSON config is valid\n- Use absolute paths (not `~/` or relative)\n- Restart Claude Desktop completely\n- Check Claude Desktop logs for errors\n\n### \"Module not found\" errors\n\n- Ensure `jira-mcp-server` is installed: `pip install jira-mcp-server`\n- If using a virtual environment, ensure it's activated or use the full path\n\n### \"Field cannot be set\" errors\n\n- Not all fields are available on all projects\n- Check your project's issue type screen configuration\n- Common issue: `priority` field not on screen (make it optional)\n\n## Contributing\n\nContributions are welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.\n\nAreas we'd especially appreciate help:\n- Unit and integration tests\n- Jira Data Center support\n- Attachment handling\n- Sprint/board operations\n- Custom field improvements\n\n## Development\n\n```bash\n# Clone and setup\ngit clone https://github.com/Positronic-AI/jira-mcp.git\ncd jira-mcp\npip install -e \".[dev]\"\n\n# Test connection\nexport JIRA_TEST_URL=\"https://test.atlassian.net\"\nexport JIRA_TEST_EMAIL=\"test@example.com\"\nexport JIRA_TEST_TOKEN=\"test_token\"\njira-mcp --test-connection test\n```\n\n## License\n\nMIT License - see [LICENSE](LICENSE) for details.\n\n## Acknowledgments\n\n- Built for use with [Claude Desktop](https://claude.ai/desktop)\n- Uses the [Model Context Protocol](https://modelcontextprotocol.io)\n- Inspired by the need for reliable Jira automation\n\n## Support\n\n- \ud83d\udc1b [Report bugs](https://github.com/yourusername/jira-mcp/issues)\n- \ud83d\udca1 [Request features](https://github.com/yourusername/jira-mcp/issues)\n- \ud83d\udcd6 [Documentation](https://github.com/yourusername/jira-mcp/wiki)\n- \ud83d\udcac [Discussions](https://github.com/yourusername/jira-mcp/discussions)\n\n---\n\n**Note**: This is an independent project and is not affiliated with Atlassian or Anthropic.\n",
    "bugtrack_url": null,
    "license": null,
    "summary": "A clean, reliable MCP server for Jira integration with Claude Desktop",
    "version": "1.0.0",
    "project_urls": {
        "Changelog": "https://github.com/Positronic-AI/jira-mcp/blob/main/CHANGELOG.md",
        "Documentation": "https://github.com/Positronic-AI/jira-mcp#readme",
        "Homepage": "https://github.com/Positronic-AI/jira-mcp",
        "Issues": "https://github.com/Positronic-AI/jira-mcp/issues",
        "Repository": "https://github.com/Positronic-AI/jira-mcp"
    },
    "split_keywords": [
        "jira",
        " mcp",
        " model-context-protocol",
        " claude",
        " anthropic",
        " api",
        " atlassian"
    ],
    "urls": [
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "eb7c1c57ff4702d1733fa6b54a55e4f3e018832397df0046bc1c2e16463cca18",
                "md5": "e0f12e72fd3c1575c14b4fa25d921dff",
                "sha256": "b017078858a5b3c64dd3db0fedf106b960593bbf8276847d2aea259ab9208ccd"
            },
            "downloads": -1,
            "filename": "jira_mcp_simple-1.0.0-py3-none-any.whl",
            "has_sig": false,
            "md5_digest": "e0f12e72fd3c1575c14b4fa25d921dff",
            "packagetype": "bdist_wheel",
            "python_version": "py3",
            "requires_python": ">=3.10",
            "size": 14446,
            "upload_time": "2025-10-28T16:41:21",
            "upload_time_iso_8601": "2025-10-28T16:41:21.357938Z",
            "url": "https://files.pythonhosted.org/packages/eb/7c/1c57ff4702d1733fa6b54a55e4f3e018832397df0046bc1c2e16463cca18/jira_mcp_simple-1.0.0-py3-none-any.whl",
            "yanked": false,
            "yanked_reason": null
        },
        {
            "comment_text": null,
            "digests": {
                "blake2b_256": "2d2f653df5f57dccc8b789cf1f75d0fedb938b6ac0284d1944bf8ec3865f8e93",
                "md5": "429ae46fa0051ed04757df48bcbcc8ff",
                "sha256": "af6445d5b467cf0c222018d99a0c01e4bd00d27d3ebd006eb0996f35bdff51b3"
            },
            "downloads": -1,
            "filename": "jira_mcp_simple-1.0.0.tar.gz",
            "has_sig": false,
            "md5_digest": "429ae46fa0051ed04757df48bcbcc8ff",
            "packagetype": "sdist",
            "python_version": "source",
            "requires_python": ">=3.10",
            "size": 18258,
            "upload_time": "2025-10-28T16:41:22",
            "upload_time_iso_8601": "2025-10-28T16:41:22.335496Z",
            "url": "https://files.pythonhosted.org/packages/2d/2f/653df5f57dccc8b789cf1f75d0fedb938b6ac0284d1944bf8ec3865f8e93/jira_mcp_simple-1.0.0.tar.gz",
            "yanked": false,
            "yanked_reason": null
        }
    ],
    "upload_time": "2025-10-28 16:41:22",
    "github": true,
    "gitlab": false,
    "bitbucket": false,
    "codeberg": false,
    "github_user": "Positronic-AI",
    "github_project": "jira-mcp",
    "travis_ci": false,
    "coveralls": false,
    "github_actions": false,
    "requirements": [
        {
            "name": "mcp",
            "specs": [
                [
                    ">=",
                    "1.0.0"
                ]
            ]
        },
        {
            "name": "httpx",
            "specs": [
                [
                    ">=",
                    "0.27.0"
                ]
            ]
        },
        {
            "name": "pydantic",
            "specs": [
                [
                    ">=",
                    "2.0.0"
                ],
                [
                    "<",
                    "3.0.0"
                ]
            ]
        },
        {
            "name": "python-dotenv",
            "specs": [
                [
                    ">=",
                    "1.0.0"
                ]
            ]
        }
    ],
    "lcname": "jira-mcp-simple"
}
        
Elapsed time: 3.23797s