A Model Context Protocol (MCP) server for interacting with self-hosted Jira instances using Personal Access Token (PAT) authentication.
- ✅ Personal Access Token authentication for self-hosted Jira
- ✅ Create, read, update, and delete Jira issues
- ✅ Search issues using JQL (Jira Query Language)
- ✅ Add and view comments
- ✅ Manage issue assignments
- ✅ List projects and issue types
- ✅ Transition issues between statuses
- ✅ Get current user information
- Node.js 18 or higher
- A self-hosted Jira instance (e.g., https://jira.domain.com)
- A Jira Personal Access Token
- Log in to your Jira instance (e.g., https://jira.domain.com)
- Click on your profile icon in the top right corner
- Select "Profile" or "Account Settings"
- Navigate to "Personal Access Tokens" or "Security"
- Click "Create token"
- Give your token a name (e.g., "MCP Server")
- Set an expiration date (optional but recommended)
- Click "Create"
- Copy the token immediately - you won't be able to see it again!
Direct usage with npx:
npx mcp-jira-serverOr install globally:
npm install -g mcp-jira-server- Clone the repository:
git clone https://github.com/edrich13/mcp-jira-server.git
cd mcp-jira-server- Install dependencies:
npm install- Build the server:
npm run buildAdd the following to your Claude Desktop configuration file:
MacOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
Option 1: Using npx (Recommended)
{
  "mcpServers": {
    "jira": {
      "command": "npx",
      "args": ["-y", "mcp-jira-server"],
      "env": {
        "JIRA_BASE_URL": "https://jira.domain.com",
        "JIRA_PAT": "your-personal-access-token-here"
      }
    }
  }
}Option 2: Using source build
{
  "mcpServers": {
    "jira": {
      "type": "stdio",
      "command": "node",
      "args": ["/Users/edrich.rocha/.nvm/versions/node/v22.6.0/bin/mcp-jira-server"],
      "env": {
        "JIRA_BASE_URL": "https://jira.domain.com",
        "JIRA_PAT": "your-personal-access-token-here"
      }
    }
  }
}Create or update .vscode/mcp.json in your workspace:
Option 1: Using npx (Recommended)
{
  "servers": {
    "jira": {
      "command": "npx",
      "args": ["-y", "mcp-jira-server"],
      "env": {
        "JIRA_BASE_URL": "https://jira.domain.com",
        "JIRA_PAT": "your-personal-access-token-here"
      }
    }
  }
}Option 2: Using source build
{
  "servers": {
    "jira": {
      "command": "node",
      "args": ["/absolute/path/to/mcp-jira-server/build/index.js"],
      "env": {
        "JIRA_BASE_URL": "https://jira.domain.com",
        "JIRA_PAT": "your-personal-access-token-here"
      }
    }
  }
}- JIRA_BASE_URL: The base URL of your self-hosted Jira instance (e.g.,- https://jira.domain.com)
- JIRA_PAT: Your Personal Access Token
Get details of a specific Jira issue by its key.
Parameters:
- issueKey(string, required): The Jira issue key (e.g., "PROJ-123")
Example:
Get details for issue PROJ-123
Search for Jira issues using JQL (Jira Query Language).
Parameters:
- jql(string, required): JQL query string
- maxResults(number, optional): Maximum number of results (default: 50)
Example:
Search for all open issues in project PROJ assigned to me
Common JQL Examples:
- project = PROJ AND status = Open
- assignee = currentUser() AND status != Done
- priority = High AND created >= -7d
- reporter = john.doe AND status IN (Open, "In Progress")
Create a new Jira issue.
Parameters:
- projectKey(string, required): Project key
- summary(string, required): Issue title/summary
- issueType(string, required): Issue type (e.g., "Bug", "Task", "Story")
- description(string, optional): Detailed description
- priority(string, optional): Priority level (e.g., "High", "Medium", "Low")
- assignee(string, optional): Username to assign to
- labels(array, optional): Array of labels
- components(array, optional): Array of component names
Example:
Create a new bug in project PROJ with summary "Login page not loading" and high priority
Update an existing Jira issue.
Parameters:
- issueKey(string, required): Issue key to update
- summary(string, optional): New summary
- description(string, optional): New description
- assignee(string, optional): New assignee username
- priority(string, optional): New priority
- labels(array, optional): New labels array
- status(string, optional): New status (e.g., "In Progress", "Done")
Example:
Update issue PROJ-123 to set status to "In Progress" and assign to john.doe
Add a comment to a Jira issue.
Parameters:
- issueKey(string, required): Issue key
- comment(string, required): Comment text
Example:
Add a comment to PROJ-123 saying "Fixed in latest deployment"
Get all comments from a Jira issue.
Parameters:
- issueKey(string, required): Issue key
List all available Jira projects.
Parameters: None
Example:
List all Jira projects
Get details of a specific project.
Parameters:
- projectKey(string, required): Project key
Get available issue types for a project.
Parameters:
- projectKey(string, required): Project key
Assign a Jira issue to a user.
Parameters:
- issueKey(string, required): Issue key
- assignee(string, required): Username to assign to
Delete a Jira issue permanently.
Parameters:
- issueKey(string, required): Issue key to delete
Get information about the currently authenticated user.
Parameters: None
npm run buildnpm run watchnpm run devAfter configuring the server, restart Claude Desktop or VS Code to load the new MCP server.
- 
Test authentication: Get my current Jira user information
- 
List projects: Show me all Jira projects
- 
Search for issues: Search for all issues assigned to me that are not done
- 
Create an issue: Create a new task in project PROJ with summary "Test MCP integration"
- Verify the absolute path in your configuration
- Ensure the server is built (npm run build)
- Check that environment variables are set correctly
- Restart Claude Desktop or VS Code after configuration changes
- Verify your Personal Access Token is still valid
- Check that the token has not expired
- Ensure the token has appropriate permissions
- Verify the JIRA_BASE_URL is correct (no trailing slash)
- Check Jira server logs for detailed error messages
- Verify the Jira API is accessible from your machine
- Ensure your user account has necessary permissions
- Try accessing the REST API directly: https://jira.domain.com/rest/api/2/myself
- "Cannot find module": Run npm installandnpm run build
- "Connection refused": Check if Jira server is accessible and URL is correct
- "Unauthorized": Verify your Personal Access Token
- "Issue type not found": Use jira_get_issue_typesto see valid types for the project
- Never commit your Personal Access Token to version control
- Store tokens securely in configuration files with restricted permissions
- Use tokens with minimal required permissions
- Set expiration dates for tokens
- Rotate tokens regularly
- Monitor token usage in Jira's audit logs
This MCP server uses the Jira REST API v2. For more information about Jira's API:
- Jira REST API documentation: https://your-jira-instance/rest/api/2/
- JQL syntax guide: Check your Jira instance documentation
MIT
For issues related to:
- MCP Server: Check the logs in Claude Desktop or VS Code
- Jira API: Refer to your self-hosted Jira documentation
- Authentication: Contact your Jira administrator
Contributions are welcome! Please ensure:
- Code follows TypeScript best practices
- All tools are properly documented
- Error handling is comprehensive
- Security best practices are followed