MCP Atlassian Server
Provides tools to interact with Atlassian Cloud APIs, enabling management of Confluence pages and Jira issues, including search, creation, updates, and user management.
Enables reading, searching, creating, updating Confluence pages, managing attachments, labels, comments, and exporting pages as HTML or Markdown.
Allows reading, searching, creating Jira issues, adding comments, listing projects, boards, sprints, and tracking user activity and worklogs.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Atlassian Server Show my active Jira sprint tasks"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
MCP Atlassian Server
This is a maintained fork of Vijay-Duke/mcp-atlassian
Why this fork exists: In January 2026, Atlassian removed the
/rest/api/3/searchendpoint entirely, breaking all Jira search functionality in the original package. This fork migrates to the new/rest/api/3/search/jqlendpoint and implements the new cursor-based pagination. A PR has been submitted to upstream, but as of now there are 14+ unmerged PRs in that repo.Install this fork:
npm install @efithor/mcp-atlassian --registry=https://npm.pkg.github.com
A Model Context Protocol (MCP) server for integrating with Atlassian products (Confluence and Jira). This server provides tools for AI assistants to interact with Atlassian Cloud APIs, enabling document management, search, and export capabilities.
Features
Confluence Integration
Read & Search: Access pages, spaces, and content
Content Management: Create, update pages and comments
Page Hierarchy: Navigate parent/child page relationships
Export: Export pages as HTML or Markdown with embedded images
Attachments: List, download, and upload attachments
Labels: Manage page labels
Users: Find and query users, track personal activity
Personal Dashboard: View recent pages and mentions
Jira Integration
Issues: Read and search issues, get personal tasks
Projects: List and explore projects
Boards & Sprints: List boards, view sprints, track active work
Comments: Add comments to issues
Issue Creation: Create new issues with custom fields
User Management: Get current user details
Personal Dashboard: View your open issues and sprint tasks
Related MCP server: Atlassian MCP Server
Installation
Option 1: GitHub Packages (Recommended)
First, configure npm to use GitHub Packages for the @efithor scope. Add to your ~/.npmrc:
@efithor:registry=https://npm.pkg.github.comThen install:
# Install globally
npm install -g @efithor/mcp-atlassian
# Or install locally
npm install @efithor/mcp-atlassianOption 2: Clone and Build
# Clone this fork
git clone https://github.com/Efithor/mcp-atlassian.git
cd mcp-atlassian
# Install dependencies
npm install
# Build TypeScript
npm run buildOption 3: Install Directly from GitHub
# Install directly from this fork
npm install -g github:Efithor/mcp-atlassian
# Or install in your project
npm install github:Efithor/mcp-atlassianConfiguration
Environment Variables
Create a .env file in the root directory:
ATLASSIAN_BASE_URL=https://yourdomain.atlassian.net
ATLASSIAN_EMAIL=your-email@example.com
ATLASSIAN_API_TOKEN=your-api-tokenGetting API Token
Log in to Atlassian Account Settings
Click "Create API token"
Give it a label and copy the token
Use this token in your
.envfile
MCP Settings Configuration
Add to your Claude Desktop config file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonWindows:
%APPDATA%\Claude\claude_desktop_config.jsonLinux:
~/.config/Claude/claude_desktop_config.json
Option 1: After npm install -g
{
"mcpServers": {
"mcp-atlassian": {
"command": "npx",
"args": ["@efithor/mcp-atlassian"],
"env": {
"ATLASSIAN_BASE_URL": "https://yourdomain.atlassian.net",
"ATLASSIAN_EMAIL": "your-email@example.com",
"ATLASSIAN_API_TOKEN": "YOUR_API_TOKEN"
}
}
}
}Option 2: From Local Clone
{
"mcpServers": {
"mcp-atlassian": {
"command": "node",
"args": ["/path/to/your/mcp-atlassian/dist/index.js"],
"env": {
"ATLASSIAN_BASE_URL": "https://yourdomain.atlassian.net",
"ATLASSIAN_EMAIL": "your-email@example.com",
"ATLASSIAN_API_TOKEN": "YOUR_API_TOKEN"
}
}
}
}Example with typical paths:
{
"mcpServers": {
"mcp-atlassian": {
"command": "node",
"args": ["~/projects/mcp-atlassian/dist/index.js"],
"env": {
"ATLASSIAN_BASE_URL": "https://yourdomain.atlassian.net",
"ATLASSIAN_EMAIL": "your.email@company.com",
"ATLASSIAN_API_TOKEN": "YOUR_API_TOKEN"
}
}
}
}Option 3: Direct from GitHub using uvx (Coming Soon)
You can run the server directly from GitHub without cloning:
{
"mcpServers": {
"mcp-atlassian": {
"command": "uvx",
"args": ["--from", "git+https://github.com/Efithor/mcp-atlassian.git", "mcp-atlassian"],
"env": {
"ATLASSIAN_BASE_URL": "https://yourdomain.atlassian.net",
"ATLASSIAN_EMAIL": "your-email@example.com",
"ATLASSIAN_API_TOKEN": "YOUR_API_TOKEN"
}
}
}
}Note: The uvx method requires the package to be properly configured for Python packaging. This is planned for a future release.
Available Tools
Confluence Tools
Tool | Description |
| Get details of the authenticated user |
| Get details for a specific user |
| Search pages by user activity |
| List pages authored by a user |
| List attachments uploaded by a user |
| Read a Confluence page by ID or title |
| Search pages using CQL (Confluence Query Language) |
| List all accessible spaces |
| Get details of a specific space |
| Create a new page |
| Update existing page content |
| List child pages of a page |
| Get parent hierarchy of a page |
| Export page as HTML or Markdown with embedded images |
| List page attachments |
| Download specific attachment |
| Upload file to a page |
| Download page with all content |
| Add comment to a page |
| Get page labels |
| Add labels to a page |
| Search for users |
| List your recent pages |
| Find pages that mention you |
Jira Tools
Tool | Description |
| Get details of the authenticated user |
| Get details for a specific user |
| Search issues by user involvement |
| List issues by user role with date filtering |
| Track user activity including comments and transitions |
| Get time tracking entries with formatted totals |
| Read issue details by key |
| Search issues using JQL |
| List all accessible projects |
| Create new issue |
| Add comment to issue |
| List accessible Scrum/Kanban boards |
| List sprints for a board |
| Get detailed sprint information |
| Get your tasks in active sprints |
| Get all your open issues |
Usage Examples
Export Confluence Page
// Export as HTML (raw content with embedded images)
{
"tool": "export_confluence_page",
"arguments": {
"pageId": "123456789",
"format": "html"
}
}
// Export as Markdown with metadata
{
"tool": "export_confluence_page",
"arguments": {
"pageId": "123456789",
"format": "markdown"
}
}Search Confluence
{
"tool": "search_confluence_pages",
"arguments": {
"cql": "space=DEV AND text~'architecture'",
"limit": 10
}
}Create Jira Issue
{
"tool": "create_jira_issue",
"arguments": {
"projectKey": "PROJ",
"issueType": "Task",
"summary": "Implement new feature",
"description": "Detailed description here",
"priority": "Medium"
}
}Get Your Sprint Tasks
// Get your tasks in the current sprint
{
"tool": "get_my_tasks_in_current_sprint",
"arguments": {
"projectKey": "PROJ"
}
}
// Get all your open issues
{
"tool": "get_my_open_issues",
"arguments": {
"projectKeys": ["PROJ1", "PROJ2"],
"maxResults": 50
}
}Work with Boards and Sprints
// List boards for a project
{
"tool": "list_jira_boards",
"arguments": {
"projectKeyOrId": "PROJ",
"type": "scrum"
}
}
// Get active sprints for a board
{
"tool": "list_jira_sprints",
"arguments": {
"boardId": 123,
"state": "active"
}
}User-Specific Jira Operations
// Get user details
{
"tool": "get_jira_user",
"arguments": {
"username": "john.doe"
}
}
// Search issues by user involvement
{
"tool": "search_jira_issues_by_user",
"arguments": {
"username": "john.doe",
"searchType": "assignee",
"status": "In Progress",
"maxResults": 20
}
}
// Get user's work logs
{
"tool": "get_user_jira_worklog",
"arguments": {
"username": "john.doe",
"startDate": "2024-01-01",
"endDate": "2024-01-31",
"projectKeys": ["PROJ1", "PROJ2"]
}
}
// Track user activity
{
"tool": "get_user_jira_activity",
"arguments": {
"username": "john.doe",
"activityType": "all",
"days": 7
}
}Content Format Support
Markdown ā Confluence Storage Format
The server automatically converts between Markdown and Confluence's storage format:
Write content in Markdown when creating/updating pages
Read pages in either storage format or converted to Markdown
Preserves formatting, links, and structure
Export Formats
HTML: Raw Confluence HTML with all images embedded as base64 data URIs
Markdown: Clean Markdown with YAML frontmatter, includes metadata and embedded images
Development
# Run in development mode with console logging
npm run dev
# Build for production
npm run build
# Run built server in MCP mode (no console output)
npm start
# Run built server in development mode (with console output)
npm run start:dev
# Run tests
npm testLogging Behavior
The server defaults to MCP mode where console output is disabled to prevent interference with the JSON-RPC protocol. Console logging is only enabled when MCP_SERVER_MODE=false is set, which is done automatically by the dev and start:dev scripts.
Project Structure
mcp-atlassian/
āāā src/
ā āāā index.ts # Main server entry point
ā āāā types/ # TypeScript type definitions
ā āāā confluence/
ā ā āāā handlers.ts # Confluence API handlers
ā ā āāā tools.ts # Tool definitions
ā āāā jira/
ā ā āāā handlers.ts # Jira API handlers
ā ā āāā tools.ts # Tool definitions
ā āāā utils/
ā āāā http-client.ts # Axios HTTP client setup
ā āāā content-converter.ts # Markdown ā Storage conversion
ā āāā export-converter.ts # HTML/Markdown export utilities
āāā dist/ # Compiled JavaScript
āāā .env # Environment variables (not in git)
āāā package.json
āāā tsconfig.jsonSecurity Notes
API tokens are stored in environment variables, never in code
Uses Basic Authentication with API tokens (not passwords)
All requests are made over HTTPS
Supports Atlassian Cloud only (not Server/Data Center)
Limitations
No delete operations implemented (by design for safety)
Export to PDF requires browser conversion (HTML ā Print ā PDF)
Some Confluence macros may not convert perfectly to Markdown
Rate limits apply based on Atlassian Cloud API limits
CI/CD Pipeline
This project uses GitHub Actions for continuous integration and deployment.
Workflows
š Continuous Integration (ci.yml)
Triggers: Push to main/develop, Pull requests
Jobs:
Test: Runs tests on Node.js 18.x, 20.x, and 22.x
Build: Compiles TypeScript and validates the build
Lint: Type checking and security audit
Validate Package: Ensures package size and structure
š¦ Publish to npm (publish.yml)
Triggers: GitHub releases, Manual dispatch
Features:
Automatic version bumping
npm publishing with provenance
GitHub release creation
Changelog updates
š Security Scanning (security.yml)
Triggers: Push to main, PRs, Weekly schedule
Scans:
npm audit for vulnerabilities
CodeQL analysis
OWASP dependency check
Snyk security scanning (optional)
š·ļø Release Management (release.yml)
Triggers: Version tags, Manual dispatch
Features:
Automatic changelog generation
GitHub release creation
Build artifacts attachment
Release notes formatting
ā
PR Validation (pr-validation.yml)
Triggers: Pull request events
Checks:
Semantic PR title validation
PR size labeling
Auto-labeling based on files changed
š¤ Automated Dependency Updates
Dependabot is configured to:
Check for npm dependency updates weekly
Check for GitHub Actions updates weekly
Group non-major updates together
Create PRs with proper labels
Setting Up CI/CD
Required GitHub Secrets
NPM_TOKEN: npm authentication token for publishing
Generate at: https://www.npmjs.com/settings/YOUR_USERNAME/tokens
Required scopes:
publish
SNYK_TOKEN (Optional): For Snyk security scanning
Get from: https://app.snyk.io/account
Branch Protection
Recommended branch protection rules for main:
Require PR reviews before merging
Require status checks to pass (CI tests)
Require branches to be up to date
Include administrators in restrictions
Local Development
Before pushing changes:
# Run tests locally
npm test
# Build the project
npm run build
# Check for security vulnerabilities
npm audit
# Type check
npx tsc --noEmitContributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
MIT License - see LICENSE file for details
Support
For issues and questions:
Create an issue in this fork's GitHub repository
Check Atlassian API documentation for API-specific questions
Review MCP documentation for protocol-related topics
Acknowledgments
Built with:
TypeScript, Node.js, Axios
Contributors
Thanks goes to these wonderful people (emoji key):
This project follows the all-contributors specification. Contributions of any kind welcome!
Available Tools
40 toolsadd_confluence_commentA
Adds a comment to a Confluence page. Can also be used to reply to an existing comment.
Inputs: pageId (required), content (required), parentCommentId.
add_confluence_page_labelA
Adds one or more labels to a Confluence page. Labels are useful for organizing and categorizing content.
Inputs: labels (required), pageId (required).
add_jira_commentA
Adds a comment to an existing Jira issue. You can also control the visibility of the comment.
Inputs: body (required), issueKey (required), visibility.
create_confluence_pageC
Creates a new page or blog post in a Confluence space. Content can be provided in Markdown or Confluence storage format (XHTML).
Inputs: title (required), content (required), spaceKey (required), type, +1 more.
create_jira_issueA
Creates a new issue in a Jira project. You must specify the project, issue type, and a summary. Other fields like description, priority, and assignee are optional.
Inputs: summary (required), issueType (required), projectKey (required), labels, +5 more.
download_confluence_attachmentA
Downloads a specific Confluence attachment and returns its content as a base64-encoded string. This is useful for reading the content of files attached to a page.
Inputs: attachmentId (required), version.
export_confluence_pageA
Exports a Confluence page to either HTML or Markdown format. All images in the page content are embedded directly into the exported file as base64 data, making it self-contained. Use this when you want to create a portable, self-contained file of a page.
Inputs: format (required), pageId (required).
find_confluence_usersA
Searches for Confluence users based on various criteria. This is useful for finding user details like account IDs when you have partial information or need to perform a broader search. Use this tool when you need to find users based on a query.
Inputs: cql, limit, start, expand, +3 more.
get_confluence_current_userA
Get details of the authenticated Confluence user. Returns information about the current user including account ID, display name, email, and profile picture.
Inputs: no named parameters.
get_confluence_pages_mentioning_meA
Search for pages that mention the current user. Returns pages where you have been @mentioned.
Inputs: limit, start, spaceKey.
get_confluence_spaceA
Get details of a specific Confluence space by its key. Returns space information including name, type, status, and description.
Inputs: spaceKey (required), expand.
get_confluence_userA
Get details for a specific Confluence user by a unique identifier like username, account ID, or email. Returns user profile information. Use this tool when you are confident you can uniquely identify a user.
Inputs: email, username, accountId.
get_jira_current_userA
Get details of the authenticated Jira user. Returns information about the current user including account ID, display name, email, and avatar URLs.
Inputs: no named parameters.
get_jira_userA
Get details for a specific Jira user by username, account ID, or email. Returns user profile information.
Inputs: email, username, accountId.
get_my_current_sprint_issuesA
Get all issues assigned to you in the currently active sprint(s). Useful for daily standups or checking your current sprint workload. Can filter by specific board or project.
Inputs: boardId, projectKey.
get_my_recent_confluence_pagesA
List pages recently created or updated by the current user. Returns pages where you are the creator or last modifier.
Inputs: limit, start, spaceKey.
get_my_unresolved_issuesA
Get all unresolved issues currently assigned to you, organized by status and priority. Perfect for checking your backlog or identifying what needs attention.
Inputs: maxResults, projectKeys.
get_page_with_attachmentsA
Performs a comprehensive download of a Confluence page, including its full content, metadata, and optionally, all of its attachments. Attachments are base64-encoded. Use this when you need the page content, metadata, and all associated attachments.
Inputs: pageId (required), attachmentTypes, maxAttachmentSize, includeAttachments.
get_sprint_detailsA
Get comprehensive details about a specific sprint including its name, start/end dates, goals, and all issues included in the sprint.
Inputs: sprintId (required).
get_user_activity_historyC
Get a stream of recent user activity, such as issue comments, status changes, and field updates. Can filter by activity type and project.
Inputs: days, startAt, username, accountId, +3 more.
get_user_time_trackingB
Retrieve time tracking work logs (worklogs) for a specific user. Shows all time entries logged by the user within a date range, useful for timesheet and worklog reporting.
Inputs: endDate, startAt, username, accountId, +3 more.
list_agile_boardsA
List all accessible Agile boards (both Scrum and Kanban types). Can be filtered by project or board type to find specific boards.
Inputs: type, startAt, maxResults, projectKeyOrId.
list_attachments_on_pageC
Lists all attachments for a specific Confluence page. Can be filtered by filename or media type.
Inputs: pageId (required), limit, start, filename, +1 more.
list_attachments_uploaded_by_userB
List all attachments uploaded by a specific user, with optional filtering by space.
Inputs: limit, start, spaceKey, username, +1 more.
list_confluence_page_ancestorsA
Retrieve the parent hierarchy of a Confluence page. Returns the full ancestry path from root to the immediate parent.
Inputs: pageId (required).
list_confluence_page_childrenA
List child pages under a given Confluence page. Returns a hierarchical list of direct child pages.
Inputs: pageId (required), limit, start, expand.
list_confluence_page_labelsB
Retrieves all labels for a specific Confluence page.
Inputs: pageId (required), limit, start, prefix.
list_confluence_spacesA
Lists all Confluence spaces that the user has permission to view. Can be filtered by type and status.
Inputs: type, limit, status.
list_issues_by_user_roleC
List issues where a user has a specific role (assignee, reporter, or creator). Includes date filtering for finding issues within specific time periods.
Inputs: role (required), endDate, startAt, username, +4 more.
list_jira_projectsA
Lists all Jira projects that the user has permission to view. This is useful for discovering available projects to work with.
Inputs: expand.
list_pages_created_by_userA
List all pages created by a specific user, with optional filtering by space or time range.
Inputs: limit, start, endDate, spaceKey, +3 more.
list_sprints_for_boardA
List all sprints for a specific Agile board. Can filter by sprint state (active, closed, or future) to find current or historical sprints.
Inputs: boardId (required), state, startAt, maxResults.
read_confluence_pageA
Retrieves the content of a Confluence page. You can specify the page by its ID or by its title and space key. The content can be returned in raw storage format (XHTML) or converted to Markdown. Use this for quickly reading the text content of a page.
Inputs: title, expand, format, pageId, +1 more.
read_jira_issueA
Retrieves detailed information about a specific Jira issue, including its fields, status, and transitions. Use this to get the full picture of a single issue.
Inputs: issueKey (required), expand.
search_confluence_pagesB
Performs a search for Confluence pages using Confluence Query Language (CQL). This is useful for finding pages that match specific criteria.
Inputs: cql (required), limit, start, expand.
search_issues_by_user_involvementB
Search for issues based on how a specific user is involved (assignee, reporter, creator, watcher, or any). Provides comprehensive filtering to find all issues a user is connected to.
Inputs: searchType (required), status, startAt, username, +4 more.
search_jira_issuesB
Searches for Jira issues using Jira Query Language (JQL). This is the primary way to find issues that match specific criteria.
Inputs: jql (required), fields, startAt, maxResults.
search_pages_by_user_involvementB
Search pages based on a user's involvement, such as being the creator or last modifier. Can filter by creator, last modifier, or both.
Inputs: searchType (required), limit, start, spaceKey, +2 more.
update_confluence_pageA
Updates an existing Confluence page. You must provide the page ID and its current version number to prevent conflicts. You can update the title, content, or both.
Inputs: pageId (required), version (required), title, content, +2 more.
upload_confluence_attachmentB
Upload a file attachment to a Confluence page. The file should be provided as a base64-encoded string.
Inputs: file (required), pageId (required), filename (required), comment, +1 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelogā¦
TDQS
Scored across 40 tools
Most tools are clearly scoped by product and resource type, and usage notes help distinguish read, get, export, and search variants. However, search_issues_by_user_involvement and list_issues_by_user_role overlap heavily, and search_pages_by_user_involvement vs list_pages_created_by_user creates ambiguity for user-based page lookup.
The majority of tools follow a consistent verb_noun pattern with product prefixes like get_confluence_, list_jira_, create_confluence_page, and search_jira_issues. Minor deviations such as get_page_with_attachments, get_my_recent_confluence_pages, and get_my_unresolved_issues break the pattern slightly.
With 40 tools, the server is well beyond the typical well-scoped range, even for a combined Confluence and Jira server. Many tools are narrow user-reporting or variation-on-a-theme operations, which makes the set feel bloated rather than curated.
The server covers broad read/search functionality across Confluence and Jira, plus page create/update, issue creation, comments, attachments, labels, spaces, users, and agile boards/sprunts. However, there are important lifecycle gaps: no update/transition/delete for Jira issues, no delete for Confluence pages/attachments/comments, and no comment update/delete.
Maintenance
Related MCP Connectors
Connect to Atlassian Jira, Confluence, Loom, and more to search, create, and manage your work.
Integrate Connext AI into agentic workflows, enabling Connext product-aware assistance.
Connect AI assistants to Stellary projects, boards, documents, and governed agent workflows.
Task manager your agent can fully operate: boards, tasks, sprints, roles, worklogs, day planner.
Related MCP Servers
- AlicenseAqualityDmaintenanceIntegrates with Atlassian Cloud products (Confluence and Jira) to enable AI assistants to search, read, create, and manage pages, issues, comments, attachments, and export content through natural language interactions.404,948 npmMIT
- AlicenseAqualityBmaintenanceEnables AI assistants to interact with Atlassian Cloud (Jira, Confluence, Bitbucket) through natural language, providing CRUD operations for issues, pages, pull requests, and more.8661 npmMIT
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to interact with Atlassian Confluence and Jira for searching, updating, and managing content and issues.MIT
- AlicenseBqualityCmaintenanceEnables AI assistants to search and manage Confluence pages and Jira issues, including creating, updating, transitioning, and commenting, across Atlassian Cloud and Server/Data Center deployments.35MIT