JIRA MCP Tools
by NZenitram
Verified
# JIRA MCP Tools
A Model Context Protocol (MCP) for interacting with JIRA APIs through Claude Desktop.
## Features
- Search JIRA issues using JQL (JIRA Query Language)
- List JIRA projects for the authenticated user
- Create, update, and delete JIRA issues
- Add comments and transition issues between statuses
- Search for users (with GDPR compliance support)
## Installation
1. Clone this repository:
```bash
git clone https://github.com/yourusername/mcp-jira.git
cd mcp-jira
```
2. Create and activate a virtual environment:
```bash
# On macOS/Linux
python -m venv venv
source venv/bin/activate
# On Windows
python -m venv venv
.\venv\Scripts\activate
```
3. Install dependencies:
```bash
pip install -r requirements.txt
```
4. Create a `.env` file in the project root:
```bash
touch .env
```
5. Add your JIRA credentials to the `.env` file:
```
JIRA_SERVER=https://your-domain.atlassian.net
JIRA_EMAIL=your.email@example.com
JIRA_API_TOKEN=your_api_token_here
```
6. Test the installation:
```bash
# Run all tests
python -m pytest
# Run a specific test file
python -m pytest tests/test_search_issues.py
```
7. Start the MCP server:
```bash
python run.py
```
## Environment Setup
### JIRA API Token
You'll need a JIRA API token to authenticate with your JIRA instance:
1. Log in to your Atlassian account
2. Go to Account Settings > Security > Create and manage API tokens
3. Click "Create API token"
4. Give it a name (e.g., "Claude Desktop Integration")
5. Click "Create" and save the generated token securely
### GDPR Compliance
If you're using a JIRA Cloud instance (which is likely in GDPR strict mode):
1. User searches will only match against display names and email addresses
2. Username-based searches are not supported
3. Results may be limited based on user permissions
4. The tool automatically handles GDPR requirements, but you may need to adjust your search patterns
### Troubleshooting
Common issues and solutions:
1. **ModuleNotFoundError: No module named 'src'**
```bash
# Run with PYTHONPATH set
PYTHONPATH=/path/to/mcp-jira python run.py
```
2. **JIRA API Authentication Error**
- Verify your API token is correct
- Check that your email matches your Atlassian account
- Ensure your JIRA instance URL is correct and includes 'https://'
3. **GDPR-related Errors**
- If you see "username parameter not supported" errors, your instance is in GDPR mode
- Use display names or email addresses for searching instead of usernames
- The tool will automatically adjust the API calls for GDPR compliance
## Getting a JIRA API Token
1. Log in to your Atlassian account
2. Go to Account Settings > Security > Create and manage API tokens
3. Click "Create API token"
4. Give it a name (e.g., "Claude Desktop Integration")
5. Click "Create" and save the generated token securely
## Tools
### Search Issues
Search for JIRA issues using JQL (JIRA Query Language).
**Parameters:**
- jql: JIRA Query Language string (e.g., "project=DEMO AND status=Open")
- max_results: Maximum number of results to return (default: 10)
- fields: Comma-separated list of fields to include in the results (default: "summary,status,assignee,priority,issuetype")
### Create Issue
Create a new JIRA issue in a specified project.
**Parameters:**
- project_key: The key of the project to create the issue in (e.g., "DEMO")
- summary: Issue summary
- description: Issue description (optional)
- issue_type: Type of issue (default: "Task", can be "Bug", "Story", etc.)
- priority: Priority of the issue (optional, e.g., "High", "Medium", "Low")
- assignee: Username to assign the issue to (optional)
### Update Issue
Update an existing JIRA issue with new values.
**Parameters:**
- issue_key: The JIRA issue key (e.g., "PROJ-123")
- summary: New summary for the issue (optional)
- description: New description for the issue (optional)
- status: New status for the issue (optional, e.g., "In Progress", "Done")
- priority: New priority for the issue (optional, e.g., "High", "Medium", "Low")
- assignee: New assignee for the issue (optional)
- comment: Comment to add to the issue (optional)
### Delete Issue
Delete a JIRA issue (requires explicit confirmation).
**Parameters:**
- issue_key: The JIRA issue key (e.g., "PROJ-123")
- confirm: Confirmation flag to prevent accidental deletion, must be set to True
### List Projects
Lists JIRA projects for the authenticated user.
**Parameters:**
- limit: Maximum number of projects to return (default: 10)
### Add Comment
Add a comment to an existing JIRA issue.
**Parameters:**
- issue_key: The JIRA issue key (e.g., "PROJ-123")
- comment: The comment text to add to the issue
### Transition Issue
Transition a JIRA issue to a new status.
**Parameters:**
- issue_key: The JIRA issue key (e.g., "PROJ-123")
- status: The target status to transition the issue to (e.g., "In Progress", "Done")
- comment: Optional comment to add with the transition
### Get Issue Details
Get detailed information about a JIRA issue.
**Parameters:**
- issue_key: The JIRA issue key (e.g., "PROJ-123")
- include_comments: Whether to include issue comments in the response (default: False)
### Search Users
Search for JIRA users by name, email, or username. This tool helps you find users when you need to assign issues or add watchers.
> **Important Note**: For JIRA Cloud instances with GDPR strict mode enabled (which is the default for newer instances), user search must use the `query` parameter instead of `username`. The tool automatically handles this, but you may need to adjust your search patterns accordingly.
Parameters:
- `query` (str): The search string to match against user display names and email addresses
- For GDPR-compliant instances, this searches display names and email addresses
- The search is case-insensitive and matches partial strings
- Example: "john" will match "John Doe" and "johnny@example.com"
- `max_results` (int, optional): Maximum number of users to return (default: 10)
- `include_active_users` (bool, optional): Include active users in search results (default: True)
- `include_inactive_users` (bool, optional): Include inactive users in search results (default: False)
Example usage:
```python
# Search for users with "john" in their display name or email
search_users(query="john")
# Search for up to 20 users, including inactive ones
search_users(
query="smith",
max_results=20,
include_inactive_users=True
)
```
GDPR Compliance Notes:
- In GDPR strict mode, user search is more restrictive to protect user privacy
- The search matches against user display names and email addresses only
- Exact username matching is not supported
- The search is always case-insensitive
- Partial matches are supported (e.g., "jo" will match "John")
- Results may be limited based on the user's permissions and privacy settings
## Example Usage
```
Search for bugs in the PROJECT with high priority:
search_issues(jql="project=PROJECT AND issuetype=Bug AND priority=High")
Create a new bug in the PROJECT:
create_issue(project_key="PROJECT", summary="Login button not working", description="Users cannot log in using the login button on the homepage", issue_type="Bug", priority="High")
Update an existing issue:
update_issue(issue_key="PROJECT-123", summary="Updated: Login button fixed", status="In Progress", comment="Fixed the CSS styling issue")
Delete an issue:
delete_issue(issue_key="PROJECT-123", confirm=True)
List the first 5 projects:
list_projects(limit=5)
Add a comment to an issue:
add_comment(issue_key="PROJECT-123", comment="The fix has been deployed to production")
Transition an issue:
transition_issue(issue_key="PROJECT-123", status="In Progress", comment="Starting work on this issue")
Get issue details:
get_issue_details(issue_key="PROJECT-123", include_comments=True)
```
## Development
For developers who want to modify or extend this MCP:
1. Clone the repository
2. Set up a virtual environment: `python -m venv venv && source venv/bin/activate`
3. Install dependencies: `pip install -r requirements.txt`
4. Run tests: `python -m pytest`
5. Make your changes
6. Test with Claude Desktop