raalarcon-jira-mcp-server — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited raalarcon-jira-mcp-server (MCP Server) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
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": "[email protected]",
"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": "[email protected]",
"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-mcpnpm installnpm 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": "[email protected]",
"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).
#### Supported Markdown Elements
# H1, ## H2, ### H3**bold**, *italic* inline code and code blocks`- bullet lists and 1. numbered lists[text](url)> quoted text- [x] completed task#### Example Usage
// 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 devnpm run build
npm startYou 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_projects
Retrieves 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_types
Gets 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_issue
Creates 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_issue
Gets 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_issue
Updates 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_issue
Deletes an issue.
Parameters:
issueKey (required): Issue key to deletedeleteSubtasks (optional): Delete subtasks too (default: false)Response: Issue PROJ-123 deleted successfully
#### create_comment
Adds 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_comments
Gets 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_comment
Updates an existing comment.
Parameters:
issueKey (required): Issue keycommentId (required): Comment IDbody (required): New comment textvisibility (optional): New visibility settingsResponse: Comment 12345 updated successfully
#### delete_comment
Deletes a comment.
Parameters:
issueKey (required): Issue keycommentId (required): Comment IDResponse: Comment 12345 deleted successfully
#### get_transitions
Gets 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_issue
Moves 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_issue
Assigns an issue to a user.
Parameters:
issueKey (required): Issue keyassignee (required): User account IDResponse: Issue PROJ-123 assigned successfully
#### get_users
Searches 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": "[email protected]",
"active": true,
"type": "atlassian"
}
]#### get_current_user
Gets information about the current authenticated user.
Response: Current user with essential fields:
{
"id": "account-id",
"name": "Current User",
"email": "[email protected]",
"active": true,
"timezone": "America/New_York",
"type": "atlassian"
}#### get_agile_boards
Gets 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_sprints
Gets 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_sprint
Creates 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_sprint
Updates 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_sprint
Closes 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_sprint
Deletes 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_sprint
Moves 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_issues
Gets 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 toolssrc/schemas/index.tssrc/jira-client.tssrc/tools/src/index.ts#### Using MCP Inspector (Recommended)
npm install -g @modelcontextprotocol/inspector npm run build npx @modelcontextprotocol/inspectornodebuild/index.js#### Alternative Testing Methods
CLI 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_projectsConfiguration File (for complex setups):
{
"mcpServers": {
"jira-server": {
"command": "node",
"args": ["build/index.js"],
"env": {
"JIRA_HOST": "https://your-domain.atlassian.net",
"JIRA_EMAIL": "[email protected]",
"JIRA_API_TOKEN": "your-api-token"
}
}
}
}Claude Desktop: Configure MCP servers directly in Claude Desktop for real-world testing
#### Advanced Configuration
Environment Variables (for advanced users):
# Jira configuration
export JIRA_HOST="https://your-domain.atlassian.net"
export JIRA_EMAIL="[email protected]"
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=trueQuery Parameters (for direct testing):
http://localhost:6274/?transport=stdio&serverCommand=node&serverArgs=build/index.js#### Manual Testing
# Build and run the server
npm run build
npm start#### query_wiki
Accesses 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#### Setting Up Your Environment
npm install -g @modelcontextprotocol/inspector npm run build npx @modelcontextprotocol/inspectorThen configure your server:
nodebuild/index.js#### Code Standards
any types, use proper Jira.js types#### Adding New Features
src/schemas/index.ts: export const yourFeatureSchema = yup.object({
// Define your schema
});src/jira-client.ts: async yourFeature(input: YourFeatureInput) {
try {
// Implementation
} catch (error) {
throw new Error(`Failed to your feature: ${error.message}`);
}
}src/tools/: {
name: 'your_tool',
description: 'Clear description of what the tool does',
inputSchema: {
// Define input schema
}
}src/index.ts: // Add to appropriate handler#### Testing Your Changes
npm run build npx @modelcontextprotocol/inspectornode build/index.js # 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#### Before Submitting
#### Creating a Pull Request
git add .
git commit -m "Add new feature: brief description" git push origin feature/your-feature-name#### Pull Request Template
## 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 includedWhen reporting bugs or requesting features:
#### Response Optimization
desc instead of description)customfield_* from issue responses#### Error Handling
#### Documentation
Thank 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-nameTo publish this MCP server to npm for distribution:
npm login ./publish.sh npm run build
npm publishThe package will be available as raalarcon-jira-mcp-server and users can install it with:
npx raalarcon-jira-mcp-serverMIT
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.
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.