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-server
Or 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 build
Add 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 stringmaxResults
(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 keysummary
(string, required): Issue title/summaryissueType
(string, required): Issue type (e.g., "Bug", "Task", "Story")description
(string, optional): Detailed descriptionpriority
(string, optional): Priority level (e.g., "High", "Medium", "Low")assignee
(string, optional): Username to assign tolabels
(array, optional): Array of labelscomponents
(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 updatesummary
(string, optional): New summarydescription
(string, optional): New descriptionassignee
(string, optional): New assignee usernamepriority
(string, optional): New prioritylabels
(array, optional): New labels arraystatus
(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 keycomment
(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 keyassignee
(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 build
npm run watch
npm run dev
After 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 install
andnpm 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_types
to 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