loading…
Search for a command to run...
loading…
MCP server for Atlassian Confluence and Jira Cloud with 51 tools to manage pages, issues, sprints, boards, and backlogs.
MCP server for Atlassian Confluence and Jira Cloud with 51 tools to manage pages, issues, sprints, boards, and backlogs.
npm version npm downloads Docker Image Docker Pulls License: MIT
Model Context Protocol (MCP) server for Atlassian Confluence and Jira Cloud. Provides 51 tools to manage Confluence pages, Jira issues, sprints, boards, and backlogs. Supports NPM package and Docker deployment with flexible authentication.
Provides 51 tools (13 for Confluence, 38 for Jira) that allow MCP-compatible AI assistants to manage your Atlassian Cloud workspace.
Confluence (13 Tools)
Jira (38 Tools)
No installation required, runs directly from npm registry:
# Run with default config file (~/.atlassian-mcp.json)
npx @xuandev/atlassian-mcp
# Run with custom config file
npx @xuandev/atlassian-mcp --config /path/to/config.json
# Run with environment variables
ATLASSIAN_DOMAIN="your-domain.atlassian.net" \
ATLASSIAN_EMAIL="[email protected]" \
ATLASSIAN_API_TOKEN="your-api-token" \
npx @xuandev/atlassian-mcp
# Run with command-line arguments
npx @xuandev/atlassian-mcp \
--domain your-domain.atlassian.net \
--email [email protected] \
--token your-api-token
Prerequisites:
~/.atlassian-mcp.json config file (see Configuration)# Using npm
npm install -g @xuandev/atlassian-mcp
# Using bun
bun install -g @xuandev/atlassian-mcp
# Run with config file (recommended)
atlassian-mcp
# Run with custom config
atlassian-mcp --config /path/to/config.json
# Run with environment variables
ATLASSIAN_DOMAIN="your-domain.atlassian.net" \
ATLASSIAN_EMAIL="[email protected]" \
ATLASSIAN_API_TOKEN="your-api-token" \
atlassian-mcp
# Run with command-line arguments
atlassian-mcp \
--domain your-domain.atlassian.net \
--email [email protected] \
--token your-api-token
Using published image from Docker Hub:
# Pull the image
docker pull xuanxdev/atlassian-mcp:latest
# Run with config file (recommended)
docker run -i --rm \
-v .atlassian-mcp.json:/config/.atlassian-mcp.json:ro \
xuanxdev/atlassian-mcp:latest
# Run with environment variables
docker run -i --rm \
-e ATLASSIAN_DOMAIN="your-domain.atlassian.net" \
-e ATLASSIAN_EMAIL="[email protected]" \
-e ATLASSIAN_API_TOKEN="your-api-token" \
xuanxdev/atlassian-mcp:latest
# Run with command-line arguments
docker run -i --rm xuanxdev/atlassian-mcp:latest \
--domain your-domain.atlassian.net \
--email [email protected] \
--token your-api-token
Building locally:
# Build the Docker image
docker build -t xuanxdev/atlassian-mcp:1.0.0 -t xuanxdev/atlassian-mcp:latest .
# Run locally built image
docker run -i --rm \
-v /absolute/path/to/.atlassian-mcp.json:/config/.atlassian-mcp.json:ro \
xuanxdev/atlassian-mcp:latest
This MCP server supports three configuration methods with the following priority:
Before configuring, you need an API token:
The server automatically searches for config files in these locations (in order):
~/.atlassian-mcp.json (user home directory - recommended)~/.config/atlassian-mcp/config.json (XDG config directory)./.atlassian-mcp.json (current working directory)Config file format:
{
"domain": "your-domain.atlassian.net",
"email": "[email protected]",
"apiToken": "your-api-token-here"
}
Security tip: Set restrictive permissions on your config file:
chmod 600 ~/.atlassian-mcp.json
Linux/macOS:
export ATLASSIAN_DOMAIN="your-domain.atlassian.net"
export ATLASSIAN_EMAIL="[email protected]"
export ATLASSIAN_API_TOKEN="your-api-token-here"
atlassian-mcp --domain your-domain.atlassian.net \
--email [email protected] \
--token your-api-token-here
Available options:
-c, --config <path> - Path to config file-d, --domain <domain> - Atlassian domain-e, --email <email> - Account email-t, --token <token> - API token-V, --version - Display version-h, --help - Display helpWith config file (relative path):
{
"mcpServers": {
"atlassian": {
"command": "npx",
"args": [
"-y",
"@xuandev/atlassian-mcp",
"--config",
".atlassian-mcp.json"
]
}
}
}
With environment variables:
{
"mcpServers": {
"atlassian": {
"command": "npx",
"args": ["-y", "@xuandev/atlassian-mcp"],
"env": {
"ATLASSIAN_DOMAIN": "your-domain.atlassian.net",
"ATLASSIAN_EMAIL": "[email protected]",
"ATLASSIAN_API_TOKEN": "your-api-token"
}
}
}
}
With config file (relative path):
{
"mcpServers": {
"atlassian": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-v",
".atlassian-mcp.json:/config/.atlassian-mcp.json:ro",
"xuanxdev/atlassian-mcp:latest"
]
}
}
}
With environment variables:
{
"mcpServers": {
"atlassian": {
"command": "docker",
"args": [
"run",
"-i",
"--rm",
"-e",
"ATLASSIAN_DOMAIN=your-domain.atlassian.net",
"-e",
"[email protected]",
"-e",
"ATLASSIAN_API_TOKEN=your-api-token",
"xuanxdev/atlassian-mcp:latest"
]
}
}
}
1. confluence_list_spaces
maxResults (optional, number): Maximum results to return (default: 25)startAt (optional, number): Starting index for pagination (default: 0)2. confluence_search
cql (required, string): CQL query string (e.g., "type=page AND space=TEAM")maxResults (optional, number): Maximum results (default: 25)startAt (optional, number): Pagination offset (default: 0)expand (optional, string[]): Fields to expand (e.g., ["body.view", "version", "space"])type=page AND title~"API" - Search pages with "API" in titlespace=TEAM AND lastModified>now("-7d") - Pages modified in last 7 dayscreator=currentUser() - Content created by current user3. confluence_list_pages
spaceId (required, string): Space IDmaxResults (optional, number): Maximum results (default: 25)startAt (optional, number): Pagination offset (default: 0)4. confluence_get_page
pageId (required, string): Page IDbodyFormat (optional, string): Body format - "storage" (raw HTML), "atlas_doc_format" (JSON), "view" (rendered HTML), "export_view" (export format)version (optional, number): Specific version number (omit for latest)5. confluence_get_page_children
pageId (required, string): Parent page IDmaxResults (optional, number): Maximum results (default: 25)startAt (optional, number): Pagination offset (default: 0)6. confluence_create_page
spaceId (required, string): Target space IDtitle (required, string): Page titlebody (required, string): Page content in storage format (HTML) or atlas_doc_format (JSON)parentId (optional, string): Parent page ID (for hierarchy)status (optional, string): "current" or "draft" (default: "current")7. confluence_update_page
pageId (required, string): Page ID to updatetitle (optional, string): New titlebody (optional, string): New contentversion (required, number): Current version number (for optimistic locking)status (optional, string): "current" or "draft"8. confluence_delete_page
pageId (required, string): Page ID to delete9. confluence_search_user
query (required, string): Search query (name, email, or display name)maxResults (optional, number): Maximum results (default: 25)startAt (optional, number): Pagination offset (default: 0)10. confluence_get_labels
pageId (required, string): Page IDmaxResults (optional, number): Maximum results (default: 25)startAt (optional, number): Pagination offset (default: 0)11. confluence_add_label
pageId (required, string): Target page IDlabelName (required, string): Label name (e.g., "important", "draft")12. confluence_get_comments
pageId (required, string): Page IDmaxResults (optional, number): Maximum results (default: 25)startAt (optional, number): Pagination offset (default: 0)13. confluence_add_comment
pageId (required, string): Target page IDbody (required, string): Comment content in storage format (HTML)parentCommentId (optional, string): Parent comment ID (for replies)1. jira_list_projects
maxResults (optional, number): Maximum results (default: 50)startAt (optional, number): Pagination offset (default: 0)2. jira_search_issues
jql (required, string): JQL query stringmaxResults (optional, number): Maximum results (default: 50)startAt (optional, number): Pagination offset (default: 0)fields (optional, string[]): Specific fields to returnproject = PROJ AND status = "In Progress" - Open issuesassignee = currentUser() AND priority = High - My high-priority issuescreated >= -7d ORDER BY priority DESC - Issues from last 7 dayssprint = 5 AND type = Bug - Bugs in Sprint 53. jira_get_issue
issueKey (required, string): Issue key (e.g., "PROJ-123")fields (optional, string[]): Specific fields to retrieveexpand (optional, string[]): Additional data to expand (e.g., ["changelog", "renderedFields"])4. jira_get_project_issues
projectKey (required, string): Project keymaxResults (optional, number): Maximum results (default: 50)startAt (optional, number): Pagination offset (default: 0)fields (optional, string[]): Specific fields to return5. jira_create_issue
projectKey (required, string): Target project keyissueType (required, string): Issue type (e.g., "Task", "Bug", "Story", "Epic", "Sub-task")summary (required, string): Issue summary/titledescription (optional, string): Detailed descriptionpriority (optional, string): Priority level (e.g., "Highest", "High", "Medium", "Low", "Lowest")labels (optional, string[]): Issue labelsassignee (optional, string): Assignee account IDparentKey (optional, string): Parent issue key - REQUIRED for creating Sub-task (e.g., "PROJ-123")customFields (optional, object): Custom fields as key-value pairs (see Custom Fields below)issueType is "Sub-task", you MUST provide parentKey to specify the parent issue6. jira_update_issue
issueKey (required, string): Issue key to updatesummary (optional, string): New summarydescription (optional, string): New descriptionpriority (optional, string): New prioritylabels (optional, string[]): New labels (replaces existing)assignee (optional, string): New assignee account IDparentKey (optional, string): New parent issue key (for changing Sub-task parent)customFields (optional, object): Custom fields to update as key-value pairs (see Custom Fields below)7. jira_delete_issue
issueKey (required, string): Issue key to deletedeleteSubtasks (optional, boolean): Whether to delete subtasks (default: false)Using parentKey for Hierarchy:
Jira supports multi-level issue hierarchies using the parentKey parameter. Use parentKey when creating issues to establish parent-child relationships:
Example Hierarchy:
parentKey: "PROJ-100") → PROJ-102 (Sub-task, parentKey: "PROJ-101")parentKey is required for Sub-task, optional for Story/Task/BugUsing customFields Parameter:
All issue types (Epic, Story, Task, Bug, Sub-task) support custom fields through the customFields parameter. Custom fields are passed as key-value pairs where keys are field IDs.
Finding Custom Field IDs:
Use the jira_search_fields tool to find custom field IDs in your Jira instance:
jira_search_fields with query: "Epic" or "Story Points" or "Sprint"
Common Custom Fields:
Epic Color: customfield_10011 (varies by instance)
"ghx-label-1" to "ghx-label-14")Epic Name: customfield_10004 (varies by instance)
"User Authentication System")Story Points: customfield_10016 (varies by instance)
5, 8, 13)Sprint: customfield_10020 (varies by instance)
123)Examples:
Creating an Epic with custom fields:
{
"projectKey": "PROJ",
"issueType": "Epic",
"summary": "User Authentication System",
"customFields": {
"customfield_10011": "ghx-label-1",
"customfield_10004": "User Auth"
}
}
Creating a Story with story points:
{
"projectKey": "PROJ",
"issueType": "Story",
"summary": "Login functionality",
"parentKey": "PROJ-100",
"customFields": {
"customfield_10016": 5,
"customfield_10020": 123
}
}
Updating custom fields:
{
"issueKey": "PROJ-101",
"customFields": {
"customfield_10016": 8
}
}
Notes:
jira_search_fields to find the correct field IDs for your instance8. jira_get_transitions
issueKey (required, string): Issue key9. jira_transition_issue
issueKey (required, string): Issue keytransitionId (required, string): Transition ID (from jira_get_transitions)comment (optional, string): Comment to add with transitionfields (optional, object): Required fields for transition (if any)10. jira_add_comment
issueKey (required, string): Target issue keybody (required, string): Comment text (supports Jira markdown)11. jira_get_worklog
issueKey (required, string): Issue keymaxResults (optional, number): Maximum results (default: 50)startAt (optional, number): Pagination offset (default: 0)12. jira_add_worklog
issueKey (required, string): Target issue keytimeSpent (required, string): Time spent (e.g., "3h 30m", "1d 4h", "45m")comment (optional, string): Work descriptionstarted (optional, string): Start date/time (ISO 8601 format, default: now)13. jira_get_issue_link_types
14. jira_create_issue_link
issueKey (required, string): Source issue keylinkedIssueKey (required, string): Target issue keylinkType (required, string): Link type name (e.g., "Blocks", "Relates")comment (optional, string): Comment about the link15. jira_remove_issue_link
linkId (required, string): Link ID (from issue's issuelinks field)16. jira_get_project_versions
projectKey (required, string): Project keymaxResults (optional, number): Maximum results (default: 50)startAt (optional, number): Pagination offset (default: 0)17. jira_create_version
projectKey (required, string): Project keyname (required, string): Version name (e.g., "v1.0.0", "Sprint 5")description (optional, string): Version descriptionreleaseDate (optional, string): Release date (YYYY-MM-DD)startDate (optional, string): Start date (YYYY-MM-DD)released (optional, boolean): Mark as released (default: false)archived (optional, boolean): Archive version (default: false)18. jira_batch_create_versions
projectKey (required, string): Target project keyversions (required, array): Array of version objects (same fields as jira_create_version)19. jira_search_fields
maxResults (optional, number): Maximum results (default: 50)startAt (optional, number): Pagination offset (default: 0)type (optional, string): Filter by field type (e.g., "custom", "system")query (optional, string): Search query for field name20. jira_get_user_profile
accountId (required, string): User account ID21. jira_get_agile_boards
maxResults (optional, number): Maximum results (default: 50)startAt (optional, number): Pagination offset (default: 0)projectKeyOrId (optional, string): Filter by projecttype (optional, string): Filter by board type ("scrum", "kanban")name (optional, string): Filter by board name22. jira_create_board 🆕
name (required, string): Board nametype (required, string): Board type - "scrum" or "kanban"projectKeyOrId (required, string): Project key or ID to associate with the boardfilterId (optional, number): Filter ID to base the board on (alternative to project)23. jira_update_board 🆕
boardId (required, number): Board ID to updatename (optional, string): New board namefilterId (optional, number): New filter ID24. jira_delete_board 🆕
boardId (required, number): Board ID to delete25. jira_get_board_issues
boardId (required, number): Board IDmaxResults (optional, number): Maximum results (default: 50)startAt (optional, number): Pagination offset (default: 0)jql (optional, string): Additional JQL filterfields (optional, string[]): Specific fields to return26. jira_get_backlog_issues 🆕
boardId (required, number): Board IDmaxResults (optional, number): Maximum results (default: 50)startAt (optional, number): Pagination offset (default: 0)jql (optional, string): Additional JQL filterfields (optional, string[]): Specific fields to return27. jira_rank_backlog_issues 🆕
issueKeys (required, string[]): Array of issue keys to rank (e.g., ["PROJ-1", "PROJ-2"])rankBeforeIssue (optional, string): Rank the issues before this issue key (e.g., "PROJ-10")rankAfterIssue (optional, string): Rank the issues after this issue key (e.g., "PROJ-5")28. jira_get_sprints_from_board
boardId (required, number): Board IDmaxResults (optional, number): Maximum results (default: 50)startAt (optional, number): Pagination offset (default: 0)state (optional, string): Filter by state ("active", "future", "closed")29. jira_get_sprint_issues
sprintId (required, number): Sprint IDmaxResults (optional, number): Maximum results (default: 50)startAt (optional, number): Pagination offset (default: 0)jql (optional, string): Additional JQL filterfields (optional, string[]): Specific fields to return30. jira_create_sprint
boardId (required, number): Target board IDname (required, string): Sprint name (e.g., "Sprint 5", "Q4 Sprint 1")goal (optional, string): Sprint goal/objectivestartDate (optional, string): Start date (ISO 8601 format)endDate (optional, string): End date (ISO 8601 format)31. jira_update_sprint
sprintId (required, number): Sprint IDname (optional, string): New sprint namegoal (optional, string): New sprint goalstartDate (optional, string): New start date (ISO 8601)endDate (optional, string): New end date (ISO 8601)state (optional, string): New state ("active", "closed")32. jira_delete_sprint 🆕
sprintId (required, number): Sprint ID to delete33. jira_move_issues_to_sprint 🆕
sprintId (required, number): Target sprint IDissues (required, string[]): Array of issue keys to move (e.g., ["PROJ-1", "PROJ-2"])Complete Workflow: Create Sprint → Create hierarchy (Epic → Story → Task with parentKey) → Move to Sprint → Start Sprint
parentKey usage34. jira_link_to_epic
issueKey (required, string): Issue key to link (e.g., "PROJ-123")epicKey (required, string): Epic key (e.g., "PROJ-50")35. jira_get_epic_issues 🆕
epicIdOrKey (required, string): Epic ID or key (e.g., "PROJ-50")maxResults (optional, number): Maximum results (default: 50)startAt (optional, number): Pagination offset (default: 0)fields (optional, string[]): Specific fields to return36. jira_batch_create_issues
issues (required, array): Array of issue objects (same fields as jira_create_issue)37. jira_batch_get_changelogs
issueKeys (required, string[]): Array of issue keys38. jira_download_attachments
issueKey (required, string): Issue keyAll major Confluence REST API v2 features implemented:
Sprint Management: 100% 🎯
Board Management: 90%
Epic Management: 65%
Backlog Management: 100% 🎯
MIT License
Выполни в терминале:
claude mcp add atlassian-mcp -- npx Безопасность
Низкий рискАвтоматическая эвристика по публичным данным — не гарантия безопасности.