loading…
Search for a command to run...
loading…
MCP server for Atlassian (Confluence and Jira) integration
MCP server for Atlassian (Confluence and Jira) integration
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.
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
# Clone this fork
git clone https://github.com/Efithor/mcp-atlassian.git
cd mcp-atlassian
# Install dependencies
npm install
# Build TypeScript
npm run build
# Install directly from this fork
npm install -g github:Efithor/mcp-atlassian
# Or install in your project
npm install github:Efithor/mcp-atlassian
Create a .env file in the root directory:
ATLASSIAN_BASE_URL=https://yourdomain.atlassian.net
[email protected]
ATLASSIAN_API_TOKEN=your-api-token
.env fileAdd to your Claude Desktop config file:
~/Library/Application Support/Claude/claude_desktop_config.json%APPDATA%\Claude\claude_desktop_config.json~/.config/Claude/claude_desktop_config.json{
"mcpServers": {
"mcp-atlassian": {
"command": "npx",
"args": ["@efithor/mcp-atlassian"],
"env": {
"ATLASSIAN_BASE_URL": "https://yourdomain.atlassian.net",
"ATLASSIAN_EMAIL": "[email protected]",
"ATLASSIAN_API_TOKEN": "YOUR_API_TOKEN"
}
}
}
}
{
"mcpServers": {
"mcp-atlassian": {
"command": "node",
"args": ["/path/to/your/mcp-atlassian/dist/index.js"],
"env": {
"ATLASSIAN_BASE_URL": "https://yourdomain.atlassian.net",
"ATLASSIAN_EMAIL": "[email protected]",
"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": "[email protected]",
"ATLASSIAN_API_TOKEN": "YOUR_API_TOKEN"
}
}
}
}
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": "[email protected]",
"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.
| 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 |
| 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 |
// 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"
}
}
{
"tool": "search_confluence_pages",
"arguments": {
"cql": "space=DEV AND text~'architecture'",
"limit": 10
}
}
{
"tool": "create_jira_issue",
"arguments": {
"projectKey": "PROJ",
"issueType": "Task",
"summary": "Implement new feature",
"description": "Detailed description here",
"priority": "Medium"
}
}
// 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
}
}
// 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"
}
}
// 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
}
}
The server automatically converts between Markdown and Confluence's storage format:
# 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
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.
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
This project uses GitHub Actions for continuous integration and deployment.
ci.yml)publish.yml)security.yml)release.yml)pr-validation.yml)Dependabot is configured to:
NPM_TOKEN: npm authentication token for publishing
publishSNYK_TOKEN (Optional): For Snyk security scanning
Recommended branch protection rules for main:
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
Contributions are welcome! Please feel free to submit a Pull Request.
MIT License - see LICENSE file for details
For issues and questions:
Built with:
Thanks goes to these wonderful people (emoji key):
Vijay Iyengar 💻 📖 🚧 👀 ⚠️ 🚇 |
This project follows the all-contributors specification. Contributions of any kind welcome!
Добавь это в claude_desktop_config.json и перезапусти Claude Desktop.
{
"mcpServers": {
"atlassian": {
"command": "npx",
"args": [
"-y",
"mcp-atlassian"
]
}
}
}