Skip to main content
Glama
README.md
# atlassian-multi-mcp

Multi-account Atlassian MCP server for Claude Code. Supports multiple Jira/Confluence workspaces simultaneously with automatic account routing by URL or issue key.

## Features

- **Multiple accounts** — configure as many Atlassian sites as needed
- **Auto-routing** — detects the correct account from issue key prefix (`RES-123` → radekwork), full URL, or alias
- **Full Jira coverage** — get/create/edit issues, comments, transitions, worklogs, links, search (JQL)
- **Full Confluence coverage** — pages, spaces, comments, search (CQL)
- **Account management tools** — add/remove/test accounts from within Claude

## Installation

### Via npx (recommended)

```bash
npx atlassian-multi-mcp
```

### Global install

```bash
npm install -g atlassian-multi-mcp
```

## Claude Code Setup

Add to your `~/.claude/settings.json` under `mcpServers`:

```json
{
  "mcpServers": {
    "atlassian": {
      "command": "npx",
      "args": ["-y", "atlassian-multi-mcp"]
    }
  }
}
```

Or as a Claude Code plugin:

```bash
claude plugin install ntlongctt/atlassian-multi-mcp
```

## Configure Accounts

After installing, use the `add_atlassian_account` tool in Claude:

```
add_atlassian_account:
  alias: "radekwork"
  site: "radekwork.atlassian.net"
  email: "you@example.com"
  token: "ATATT..."
  projectPrefixes: "RES,RS"
  isDefault: false
```

Or edit `~/.atlassian-accounts.json` directly:

```json
{
  "accounts": [
    {
      "alias": "doneitbetter",
      "site": "doneitbetter.atlassian.net",
      "email": "you@doneitbetter.com",
      "token": "ATATT...",
      "projectPrefixes": ["DIB"],
      "isDefault": true
    },
    {
      "alias": "radekwork",
      "site": "radekwork.atlassian.net",
      "email": "you@radek.com",
      "token": "ATATT...",
      "projectPrefixes": ["RES", "RS", "SHIELD"]
    }
  ]
}
```

Get API tokens at: https://id.atlassian.com/manage-profile/security/api-tokens

## Account Resolution

The server resolves which account to use in this order:

1. **Full URL** — `https://radekwork.atlassian.net/browse/RES-123` → radekwork account
2. **Issue key** — `RES-123` → lookup `RES` in `projectPrefixes` → radekwork account
3. **Alias** — `"radekwork"` → exact alias match
4. **Partial site** — `"radek"` → partial hostname match
5. **Default account** — `isDefault: true` in config
6. **Single account** — use it if only one configured

## Available Tools

### Account Management
| Tool | Description |
|------|-------------|
| `list_atlassian_accounts` | List all configured accounts |
| `add_atlassian_account` | Add a new account (tests connection) |
| `remove_atlassian_account` | Remove an account |
| `set_default_atlassian_account` | Set default account |
| `test_atlassian_connection` | Test credentials |
| `getAccessibleAtlassianResources` | List all sites (compatible with built-in Atlassian MCP) |

### Jira
| Tool | Description |
|------|-------------|
| `getJiraIssue` | Get issue by key or URL |
| `searchJiraIssuesUsingJql` | Search with JQL |
| `createJiraIssue` | Create issue |
| `editJiraIssue` | Edit issue fields |
| `addCommentToJiraIssue` | Add comment |
| `getTransitionsForJiraIssue` | Get workflow transitions |
| `transitionJiraIssue` | Move to new status |
| `getVisibleJiraProjects` | List projects |
| `getJiraProjectIssueTypesMetadata` | Get issue types |
| `getJiraIssueTypeMetaWithFields` | Get fields for issue type |
| `lookupJiraAccountId` | Search users |
| `getIssueLinkTypes` | Get link types |
| `createIssueLink` | Link two issues |
| `addWorklogToJiraIssue` | Log time |
| `getJiraIssueRemoteIssueLinks` | Get external links |
| `atlassianUserInfo` | Current user info |

### Confluence
| Tool | Description |
|------|-------------|
| `getConfluencePage` | Get page by ID |
| `createConfluencePage` | Create page |
| `updateConfluencePage` | Update page |
| `searchConfluenceUsingCql` | Search with CQL |
| `getConfluenceSpaces` | List spaces |
| `getPagesInConfluenceSpace` | List pages in space |
| `getConfluencePageDescendants` | Get child pages |
| `getConfluencePageFooterComments` | Get comments |
| `createConfluenceFooterComment` | Add comment |
| `getConfluencePageInlineComments` | Get inline comments |
| `createConfluenceInlineComment` | Add inline comment |
| `getConfluenceCommentChildren` | Get comment replies |

## License

MIT