Skip to main content
Glama
MCP Atlassian Server
by Vijay-Duke

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/search endpoint entirely, breaking all Jira search functionality in the original package. This fork migrates to the new /rest/api/3/search/jql endpoint 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

License: MIT

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

First, configure npm to use GitHub Packages for the @efithor scope. Add to your ~/.npmrc:

@efithor:registry=https://npm.pkg.github.com

Then install:

# Install globally
npm install -g @efithor/mcp-atlassian

# Or install locally
npm install @efithor/mcp-atlassian

Option 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 build

Option 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-atlassian

Configuration

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-token

Getting API Token

  1. Log in to Atlassian Account Settings

  2. Click "Create API token"

  3. Give it a label and copy the token

  4. Use this token in your .env file

MCP Settings Configuration

Add to your Claude Desktop config file:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • Linux: ~/.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_confluence_current_user

Get details of the authenticated user

get_confluence_user

Get details for a specific user

search_confluence_pages_by_user

Search pages by user activity

list_user_confluence_pages

List pages authored by a user

list_user_confluence_attachments

List attachments uploaded by a user

read_confluence_page

Read a Confluence page by ID or title

search_confluence_pages

Search pages using CQL (Confluence Query Language)

list_confluence_spaces

List all accessible spaces

get_confluence_space

Get details of a specific space

create_confluence_page

Create a new page

update_confluence_page

Update existing page content

list_confluence_page_children

List child pages of a page

list_confluence_page_ancestors

Get parent hierarchy of a page

export_confluence_page

Export page as HTML or Markdown with embedded images

list_confluence_attachments

List page attachments

download_confluence_attachment

Download specific attachment

upload_confluence_attachment

Upload file to a page

download_confluence_page_complete

Download page with all content

add_confluence_comment

Add comment to a page

list_confluence_page_labels

Get page labels

add_confluence_page_label

Add labels to a page

find_confluence_users

Search for users

get_my_recent_confluence_pages

List your recent pages

get_confluence_pages_mentioning_me

Find pages that mention you

Jira Tools

Tool

Description

get_jira_current_user

Get details of the authenticated user

get_jira_user

Get details for a specific user

search_jira_issues_by_user

Search issues by user involvement

list_user_jira_issues

List issues by user role with date filtering

get_user_jira_activity

Track user activity including comments and transitions

get_user_jira_worklog

Get time tracking entries with formatted totals

read_jira_issue

Read issue details by key

search_jira_issues

Search issues using JQL

list_jira_projects

List all accessible projects

create_jira_issue

Create new issue

add_jira_comment

Add comment to issue

list_jira_boards

List accessible Scrum/Kanban boards

list_jira_sprints

List sprints for a board

get_jira_sprint

Get detailed sprint information

get_my_tasks_in_current_sprint

Get your tasks in active sprints

get_my_open_issues

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 test

Logging 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.json

Security 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

  1. NPM_TOKEN: npm authentication token for publishing

  2. SNYK_TOKEN (Optional): For Snyk security scanning

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 --noEmit

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

License

MIT License - see LICENSE file for details

Support

For issues and questions:

Acknowledgments

Built with:

Contributors

Thanks goes to these wonderful people (emoji key):

This project follows the all-contributors specification. Contributions of any kind welcome!

Available Tools

40 tools
add_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

    B3.2/5.0

    Scored across 40 tools

    Disambiguation3/5

    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.

    Naming Consistency4/5

    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.

    Tool Count2/5

    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.

    Completeness3/5

    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

    ActivityStale
    ResponsivenessLimited data

    Related MCP Connectors

    Related MCP Servers