Server data from the Official MCP Registry
Jira & Confluence MCP: 24 tools for issues, sprints, comments, transitions & wiki. Run via npx.
Jira & Confluence MCP: 24 tools for issues, sprints, comments, transitions & wiki. Run via npx.
This is a legitimate Jira MCP server with proper authentication via environment variables and reasonable code quality. However, there are several code quality and error handling concerns that prevent a higher score. The server appropriately requires credentials (email + API token) for all operations, implements input validation via Yup schemas, and permissions align well with its stated purpose of Jira/Confluence integration. Issues include broad exception handling, insufficient input validation in some areas, and overly permissive API scope. Supply chain analysis found 3 known vulnerabilities in dependencies (0 critical, 3 high severity). Package verification found 1 issue.
4 files analyzed · 11 issues found
Security scores are indicators to help you make informed decisions, not guarantees. Always review permissions before connecting any MCP server.
This plugin requests these system permissions. Most are normal for its category.
Set these up before or after installing:
Environment variable: JIRA_HOST
Environment variable: JIRA_EMAIL
Environment variable: JIRA_API_TOKEN
Add this to your MCP configuration file:
{
"mcpServers": {
"io-github-raalarcon9705-jira-mcp": {
"env": {
"JIRA_HOST": "your-jira-host-here",
"JIRA_EMAIL": "your-jira-email-here",
"JIRA_API_TOKEN": "your-jira-api-token-here"
},
"args": [
"-y",
"raalarcon-jira-mcp-server"
],
"command": "npx"
}
}
}From the project's GitHub README.
The most complete open source Model Context Protocol (MCP) server for Jira & Atlassian. Connect any MCP-compatible AI client to your Jira instance in seconds — manage issues, sprints, comments, transitions, users, and Confluence pages without leaving your AI assistant.
{
"mcpServers": {
"jira": {
"command": "npx",
"args": ["-y", "raalarcon-jira-mcp-server"],
"env": {
"JIRA_HOST": "https://your-domain.atlassian.net",
"JIRA_EMAIL": "your-email@example.com",
"JIRA_API_TOKEN": "your-api-token"
}
}
}
}
| Client | Supported |
|---|---|
| Claude Desktop | ✅ |
| Claude Code | ✅ |
| Cursor | ✅ |
| Windsurf | ✅ |
| Cline | ✅ |
| Continue | ✅ |
| Any MCP-compatible client | ✅ |
npx raalarcon-jira-mcp-serverThe easiest way to use this MCP server is with npx:
{
"mcpServers": {
"jira": {
"command": "npx",
"args": ["-y", "raalarcon-jira-mcp-server"],
"env": {
"JIRA_HOST": "https://your-domain.atlassian.net",
"JIRA_EMAIL": "your-email@example.com",
"JIRA_API_TOKEN": "your-api-token"
}
}
}
}
That's it! The server will be automatically downloaded and run when needed.
git clone https://github.com/raalarcon9705/jira-mcp.git
cd jira-mcp
npm install
npm run build
{
"mcpServers": {
"jira": {
"command": "node",
"args": ["/full/path/to/jira-mcp/dist/index.js"],
"env": {
"JIRA_HOST": "https://your-domain.atlassian.net",
"JIRA_EMAIL": "your-email@example.com",
"JIRA_API_TOKEN": "your-api-token"
}
}
}
}
Note: Replace /full/path/to/jira-mcp/ with the actual absolute path to your project directory.
Once configured in your MCP client, the server will automatically start when needed. No additional setup required!
The server now supports automatic Markdown to ADF conversion for issue descriptions and comments. Simply use Markdown syntax and it will be automatically converted to Atlassian Document Format (ADF).
# H1, ## H2, ### H3**bold**, *italic*`inline code` and code blocks- bullet lists and 1. numbered lists[text](url)> quoted text- [x] completed task// Create issue with Markdown description
create_issue({
projectKey: 'PROJ',
summary: 'Bug Report',
description: `# Bug Report
## Description
This is a **critical** bug affecting the login system.
## Steps to Reproduce
1. Go to login page
2. Enter invalid credentials
3. Click login button
## Code Example
\`\`\`javascript
function login(username, password) {
return authenticate(username, password);
}
\`\`\`
> **Note**: This bug was reported by multiple users.`,
});
// Create comment with Markdown
create_comment({
issueKey: 'PROJ-123',
body: `## Update
**Status**: Fixed ✅
- [x] Identified root cause
- [x] Implemented fix
- [x] Tested solution
The issue has been resolved.`,
});
npm run dev
npm run build
npm start
You can also test the server directly with npx:
# Test the server
npx raalarcon-jira-mcp-server
# Or use with MCP Inspector
npx @modelcontextprotocol/inspector
# Then configure: command: "npx", args: ["-y", "raalarcon-jira-mcp-server"]
get_projectsRetrieves all projects accessible to the authenticated user.
Parameters:
expand (optional): Additional data to includerecent (optional): Number of recent projects (0-20)Response: Array of projects with essential fields:
[
{
"key": "PROJ",
"name": "Project Name",
"id": "10001",
"projectTypeKey": "software"
}
]
get_issue_typesGets all available issue types for a specific project.
Parameters:
projectKey (required): Project keyResponse: Array of issue types with essential fields:
[
{
"id": "10002",
"name": "Task",
"desc": "A small, independent piece of work",
"subtask": false,
"level": 0
}
]
create_issueCreates a new issue in Jira.
Parameters:
projectKey (required): Project keysummary (required): Issue summaryissueType (required): Issue type (Bug, Story, Task, etc.)description (optional): Issue descriptionpriority (optional): Priority (Highest, High, Medium, Low, Lowest)assignee (optional): Assignee account IDlabels (optional): Array of labelscomponents (optional): Array of componentsfixVersions (optional): Array of fix versionscustomFields (optional): Custom field valuesResponse: Issue PROJ-123 created successfully
get_issueGets details of a specific issue (custom fields removed for token efficiency).
Parameters:
issueKey (required): Issue key (e.g., PROJ-123)expand (optional): Additional informationfields (optional): Specific fields to returnResponse: Complete issue object with custom fields filtered out
update_issueUpdates an existing issue.
Parameters:
issueKey (required): Issue key to updatesummary (optional): New summarydescription (optional): New descriptionpriority (optional): New priorityassignee (optional): New assigneelabels (optional): New labelscomponents (optional): New componentsfixVersions (optional): New fix versionscustomFields (optional): Custom fieldsResponse: Issue PROJ-123 updated successfully
delete_issueDeletes an issue.
Parameters:
issueKey (required): Issue key to deletedeleteSubtasks (optional): Delete subtasks too (default: false)Response: Issue PROJ-123 deleted successfully
create_commentAdds a comment to an issue.
Parameters:
issueKey (required): Issue keybody (required): Comment text (supports ADF format)visibility (optional): Visibility settingsResponse: Comment 12345 created successfully
get_commentsGets all comments for an issue.
Parameters:
issueKey (required): Issue keystartAt (optional): Start index (default: 0)maxResults (optional): Max comments (1-100, default: 50)Response: Optimized comment structure:
{
"total": 5,
"start": 0,
"max": 50,
"items": [
{
"id": "12345",
"author": "John Doe",
"authorId": "account-id",
"created": "2025-01-01T10:00:00.000Z",
"text": "Comment text content"
}
]
}
update_commentUpdates an existing comment.
Parameters:
issueKey (required): Issue keycommentId (required): Comment IDbody (required): New comment textvisibility (optional): New visibility settingsResponse: Comment 12345 updated successfully
delete_commentDeletes a comment.
Parameters:
issueKey (required): Issue keycommentId (required): Comment IDResponse: Comment 12345 deleted successfully
get_transitionsGets available transitions for an issue.
Parameters:
issueKey (required): Issue keyResponse: Array of transitions with essential fields:
[
{
"id": "21",
"name": "In Progress",
"desc": "The assignee is currently working on this activity",
"toName": "In Progress",
"toId": "3",
"available": true,
"category": "In Progress"
}
]
transition_issueMoves an issue to a different state.
Parameters:
issueKey (required): Issue keytransitionId (required): Transition IDcomment (optional): Comment to add during transitionfields (optional): Additional fields to updateResponse: Issue PROJ-123 transitioned successfully
assign_issueAssigns an issue to a user.
Parameters:
issueKey (required): Issue keyassignee (required): User account IDResponse: Issue PROJ-123 assigned successfully
get_usersSearches for users in Jira.
Parameters:
query (optional): Search query by name or emailprojectKey (optional): Filter by project accessmaxResults (optional): Max users (1-100, default: 50)Response: Array of users with essential fields:
[
{
"id": "account-id",
"name": "John Doe",
"email": "john@example.com",
"active": true,
"type": "atlassian"
}
]
get_current_userGets information about the current authenticated user.
Response: Current user with essential fields:
{
"id": "account-id",
"name": "Current User",
"email": "user@example.com",
"active": true,
"timezone": "America/New_York",
"type": "atlassian"
}
get_agile_boardsGets all agile boards available in the Jira instance. Required to find board IDs for sprint operations.
Parameters:
projectKey (optional): Filter boards by projectboardType (optional): Filter by type (scrum, kanban)Response: Array of boards with essential fields:
[
{
"id": 191,
"name": "DreamStar Board",
"type": "scrum",
"projectKey": "DRMSTR",
"projectName": "DreamStar"
}
]
get_sprintsGets all sprints for a specific board. Returns sprint information including ID, name, state, and dates.
Parameters:
boardId (required): The ID of the board to get sprints fromstate (optional): Filter sprints by state (active, closed, future)Response: Array of sprints with essential fields:
[
{
"id": 387,
"name": "DRMSTR Sprint 1",
"state": "active",
"startDate": "2025-09-15T14:05:37.511Z",
"endDate": "2025-09-26T05:00:00.000Z",
"goal": ""
}
]
create_sprintCreates a new sprint. Sprint name and origin board ID are required. Start date, end date, and goal are optional.
Parameters:
name (required): Name of the sprint to createoriginBoardId (required): ID of the board where the sprint will be createdstartDate (optional): Start date of the sprint (ISO 8601 format)endDate (optional): End date of the sprint (ISO 8601 format)goal (optional): Goal or objective of the sprintResponse: Created sprint with essential fields:
{
"id": 421,
"name": "DRMSTR Sprint 3",
"state": "future",
"goal": ""
}
update_sprintUpdates sprint information (name, dates, goal, state). Only provided fields will be updated. For closed sprints, only name and goal can be updated.
Parameters:
sprintId (required): ID of the sprint to updatename (optional): New name for the sprintstartDate (optional): New start date (ISO 8601 format)endDate (optional): New end date (ISO 8601 format)goal (optional): New goal or objective for the sprintstate (optional): New state (future, active, closed)Response: Sprint 421 updated successfully
close_sprintCloses and completes a sprint. This action requires the sprint to be in the "active" state. Once closed, the sprint cannot be reopened.
Parameters:
sprintId (required): ID of the sprint to closeResponse: Sprint 421 closed successfully
delete_sprintDeletes a sprint. Once deleted, all open issues in the sprint will be moved to the backlog. This action is irreversible.
Parameters:
sprintId (required): ID of the sprint to deleteResponse: Sprint 421 deleted successfully. All open issues moved to backlog.
move_issue_to_sprintMoves an issue to a specific sprint. Returns a confirmation message. Issues can only be moved to open or active sprints.
Parameters:
issueKey (required): Key of the issue to move (e.g., "PROJ-123")sprintId (required): ID of the sprint to move the issue toResponse: Issue PROJ-123 moved to sprint 421 successfully
get_sprint_issuesGets all issues for a given sprint. Returns a list of essential issue details (key, summary, status, assignee, priority).
Parameters:
sprintId (required): ID of the sprintmaxResults (optional): Maximum number of issues to return (1-100, default: 50)Response: Array of issues with essential fields:
[
{
"key": "DRMSTR-1",
"summary": "Implement user authentication",
"status": "In Progress",
"assignee": "John Doe",
"priority": "High"
}
]
The server is optimized for token efficiency:
desc instead of description)The server includes robust error handling with descriptive messages. Common errors include:
src/
├── index.ts # Main MCP server
├── jira-client.ts # Jira API client
├── schemas/
│ └── index.ts # Yup validation schemas
└── tools/
├── projects.ts # Project tools
├── issues.ts # Issue tools
├── comments.ts # Comment tools
├── transitions.ts # Transition tools
├── assignments.ts # Assignment tools
└── sprints.ts # Sprint management tools
src/schemas/index.tssrc/jira-client.tssrc/tools/src/index.tsInstall MCP Inspector:
npm install -g @modelcontextprotocol/inspector
Build the project:
npm run build
Start MCP Inspector:
npx @modelcontextprotocol/inspector
Configure your server in the inspector interface:
nodebuild/index.jsCLI Mode (for automation and scripting):
# List available tools
npx @modelcontextprotocol/inspector --cli node build/index.js --method tools/list
# Call a specific tool
npx @modelcontextprotocol/inspector --cli node build/index.js --method tools/call --tool-name get_projects
Configuration File (for complex setups):
{
"mcpServers": {
"jira-server": {
"command": "node",
"args": ["build/index.js"],
"env": {
"JIRA_HOST": "https://your-domain.atlassian.net",
"JIRA_EMAIL": "your-email@example.com",
"JIRA_API_TOKEN": "your-api-token"
}
}
}
}
Claude Desktop: Configure MCP servers directly in Claude Desktop for real-world testing
Environment Variables (for advanced users):
# Jira configuration
export JIRA_HOST="https://your-domain.atlassian.net"
export JIRA_EMAIL="your-email@example.com"
export JIRA_API_TOKEN="your-api-token"
# Timeout settings
export MCP_SERVER_REQUEST_TIMEOUT=60000
export MCP_REQUEST_TIMEOUT_RESET_ON_PROGRESS=false
# Proxy settings (if using MCP Proxy)
export MCP_PROXY_FULL_ADDRESS=http://localhost:5577
# Auto-open browser
export MCP_AUTO_OPEN_ENABLED=true
Query Parameters (for direct testing):
http://localhost:6274/?transport=stdio&serverCommand=node&serverArgs=build/index.js
# Build and run the server
npm run build
npm start
query_wikiAccesses Confluence pages by URL identifier and returns formatted content.
Parameters:
query (required): Page code to search for (like F4CjNw)Response: Markdown-formatted page content with metadata:
# Page Title
**ID:** 933462039
**Space:** Orderbahn Team (OT)
**URL:** /spaces/OT/pages/933462039/...
**Author:** User Name
**Last Modified:** 2025-09-26T16:35:30.695Z
**Code:** F4CjNw
## Content
[Page content in plain text with preserved line breaks]
## Page Hierarchy
- Parent Page (page)
- Child Page (folder)
- Current Page (page)
Features:
We welcome contributions to the Jira MCP Server! Please follow these guidelines to ensure a smooth contribution process.
git clone https://github.com/raalarcon9705/jira-mcp.git
cd jira-mcp
npm install
git checkout -b feature/your-feature-name
Install MCP Inspector (official testing tool):
npm install -g @modelcontextprotocol/inspector
Build the project:
npm run build
Test with MCP Inspector:
npx @modelcontextprotocol/inspector
Then configure your server:
nodebuild/index.jsany types, use proper Jira.js typesCreate validation schema in src/schemas/index.ts:
export const yourFeatureSchema = yup.object({
// Define your schema
});
Implement API method in src/jira-client.ts:
async yourFeature(input: YourFeatureInput) {
try {
// Implementation
} catch (error) {
throw new Error(`Failed to your feature: ${error.message}`);
}
}
Create MCP tool in appropriate file in src/tools/:
{
name: 'your_tool',
description: 'Clear description of what the tool does',
inputSchema: {
// Define input schema
}
}
Register tool in src/index.ts:
// Add to appropriate handler
Optimize response for token efficiency:
Build the project:
npm run build
Test with MCP Inspector:
npx @modelcontextprotocol/inspector
node build/index.jsTest with CLI mode (for automation):
# List tools
npx @modelcontextprotocol/inspector --cli node build/index.js --method tools/list
# Test specific tool
npx @modelcontextprotocol/inspector --cli node build/index.js --method tools/call --tool-name get_projects
Verify response optimization:
Commit your changes with clear messages:
git add .
git commit -m "Add new feature: brief description"
Push to your fork:
git push origin feature/your-feature-name
Open a Pull Request on GitHub with:
## Description
Brief description of the changes
## Type of Change
- [ ] Bug fix
- [ ] New feature
- [ ] Breaking change
- [ ] Documentation update
## Testing
- [ ] All existing tests pass
- [ ] New functionality tested
- [ ] Response optimization verified
## Checklist
- [ ] Code follows project standards
- [ ] Self-review completed
- [ ] Documentation updated
- [ ] No personal data included
When reporting bugs or requesting features:
desc instead of description)customfield_* from issue responsesThank you for contributing to the Jira MCP Server! 🚀
We welcome contributions from the community! This project is open source and we value all contributions.
git clone https://github.com/your-username/jira-mcp.git
cd jira-mcp
npm install
git checkout -b feature/your-feature-name
To publish this MCP server to npm for distribution:
Login to npm:
npm login
Run the publish script:
./publish.sh
Or publish manually:
npm run build
npm publish
The package will be available as raalarcon-jira-mcp-server and users can install it with:
npx raalarcon-jira-mcp-server
MIT
To report bugs or request features, please open an issue in the repository.
Note: This MCP server is designed to work with Jira Cloud. For Jira Server/Data Center, additional modifications are required for authentication and some endpoints.
Be the first to review this server!
by Toleno · Developer Tools
Toleno Network MCP Server — Manage your Toleno mining account with Claude AI using natural language.
by mcp-marketplace · Developer Tools
Create, build, and publish Python MCP servers to PyPI — conversationally.
by Microsoft · Content & Media
Convert files (PDF, Word, Excel, images, audio) to Markdown for LLM consumption