@jagadeesh52423/atlassian-mcp-server 1.1.2 → 1.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.env.example +6 -1
- package/README.md +154 -395
- package/dist/config.d.ts +2 -1
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +7 -0
- package/dist/config.js.map +1 -1
- package/dist/constants.d.ts +0 -4
- package/dist/constants.d.ts.map +1 -1
- package/dist/constants.js +0 -5
- package/dist/constants.js.map +1 -1
- package/dist/formatters/adf-formatter.d.ts +5 -2
- package/dist/formatters/adf-formatter.d.ts.map +1 -1
- package/dist/formatters/adf-formatter.js +271 -52
- package/dist/formatters/adf-formatter.js.map +1 -1
- package/dist/formatters/adf-to-text.d.ts +9 -0
- package/dist/formatters/adf-to-text.d.ts.map +1 -0
- package/dist/formatters/adf-to-text.js +25 -0
- package/dist/formatters/adf-to-text.js.map +1 -0
- package/dist/formatters/index.d.ts +7 -1
- package/dist/formatters/index.d.ts.map +1 -1
- package/dist/formatters/index.js +7 -1
- package/dist/formatters/index.js.map +1 -1
- package/dist/formatters/markdown-to-adf.d.ts +6 -0
- package/dist/formatters/markdown-to-adf.d.ts.map +1 -0
- package/dist/formatters/markdown-to-adf.js +27 -0
- package/dist/formatters/markdown-to-adf.js.map +1 -0
- package/dist/handlers/bitbucket-handlers.d.ts +7 -0
- package/dist/handlers/bitbucket-handlers.d.ts.map +1 -1
- package/dist/handlers/bitbucket-handlers.js +20 -0
- package/dist/handlers/bitbucket-handlers.js.map +1 -1
- package/dist/handlers/confluence-handlers.d.ts +2 -0
- package/dist/handlers/confluence-handlers.d.ts.map +1 -1
- package/dist/handlers/confluence-handlers.js +2 -2
- package/dist/handlers/confluence-handlers.js.map +1 -1
- package/dist/index.js +12 -5
- package/dist/index.js.map +1 -1
- package/dist/services/bitbucket.d.ts +5 -0
- package/dist/services/bitbucket.d.ts.map +1 -1
- package/dist/services/bitbucket.js +23 -4
- package/dist/services/bitbucket.js.map +1 -1
- package/dist/services/confluence.d.ts +79 -12
- package/dist/services/confluence.d.ts.map +1 -1
- package/dist/services/confluence.js +291 -310
- package/dist/services/confluence.js.map +1 -1
- package/dist/services/jira/base.d.ts +0 -1
- package/dist/services/jira/base.d.ts.map +1 -1
- package/dist/services/jira/base.js +2 -3
- package/dist/services/jira/base.js.map +1 -1
- package/dist/snapshot/decorators/bitbucket-snapshots.d.ts +4 -0
- package/dist/snapshot/decorators/bitbucket-snapshots.d.ts.map +1 -0
- package/dist/snapshot/decorators/bitbucket-snapshots.js +65 -0
- package/dist/snapshot/decorators/bitbucket-snapshots.js.map +1 -0
- package/dist/snapshot/decorators/confluence-snapshots.d.ts +4 -0
- package/dist/snapshot/decorators/confluence-snapshots.d.ts.map +1 -0
- package/dist/snapshot/decorators/confluence-snapshots.js +71 -0
- package/dist/snapshot/decorators/confluence-snapshots.js.map +1 -0
- package/dist/snapshot/decorators/jira-snapshots.d.ts +4 -0
- package/dist/snapshot/decorators/jira-snapshots.d.ts.map +1 -0
- package/dist/snapshot/decorators/jira-snapshots.js +171 -0
- package/dist/snapshot/decorators/jira-snapshots.js.map +1 -0
- package/dist/snapshot/index.d.ts +7 -0
- package/dist/snapshot/index.d.ts.map +1 -0
- package/dist/snapshot/index.js +7 -0
- package/dist/snapshot/index.js.map +1 -0
- package/dist/snapshot/snapshot-decorator.d.ts +4 -0
- package/dist/snapshot/snapshot-decorator.d.ts.map +1 -0
- package/dist/snapshot/snapshot-decorator.js +74 -0
- package/dist/snapshot/snapshot-decorator.js.map +1 -0
- package/dist/snapshot/snapshot-manager.d.ts +9 -0
- package/dist/snapshot/snapshot-manager.d.ts.map +1 -0
- package/dist/snapshot/snapshot-manager.js +56 -0
- package/dist/snapshot/snapshot-manager.js.map +1 -0
- package/dist/snapshot/snapshot-types.d.ts +26 -0
- package/dist/snapshot/snapshot-types.d.ts.map +1 -0
- package/dist/snapshot/snapshot-types.js +2 -0
- package/dist/snapshot/snapshot-types.js.map +1 -0
- package/dist/tools/bitbucket-tools.d.ts.map +1 -1
- package/dist/tools/bitbucket-tools.js +30 -0
- package/dist/tools/bitbucket-tools.js.map +1 -1
- package/dist/tools/confluence-tools.d.ts.map +1 -1
- package/dist/tools/confluence-tools.js +17 -12
- package/dist/tools/confluence-tools.js.map +1 -1
- package/dist/types.d.ts +50 -2
- package/dist/types.d.ts.map +1 -1
- package/package.json +6 -2
package/README.md
CHANGED
|
@@ -1,525 +1,284 @@
|
|
|
1
|
-
# Atlassian MCP Server
|
|
1
|
+
# 🔗 Atlassian MCP Server
|
|
2
2
|
|
|
3
3
|
[](https://www.npmjs.com/package/@jagadeesh52423/atlassian-mcp-server)
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
##
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
###
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
| Get/Add/Remove labels | YES | NO | Partial |
|
|
26
|
-
| **Page version history** | YES | NO | YES |
|
|
27
|
-
|
|
28
|
-
### Jira
|
|
29
|
-
|
|
30
|
-
| Feature | Ours | Official Atlassian | sooperset |
|
|
31
|
-
|---|:---:|:---:|:---:|
|
|
32
|
-
| Search/Get/Create/Update issue | YES | YES | YES |
|
|
33
|
-
| Delete issue | YES | NO | YES |
|
|
34
|
-
| Comments (full CRUD) | YES | Partial | Partial |
|
|
35
|
-
| **Smart transition (AI auto-fill)** | **YES** | NO | NO |
|
|
36
|
-
| Attachments (get/add/delete) | YES | NO | NO |
|
|
37
|
-
| Issue links (full CRUD) | YES | NO | Partial |
|
|
38
|
-
| Worklogs (full CRUD) | YES | Partial | Partial |
|
|
39
|
-
| **Watchers (get/add/remove)** | **YES** | NO | NO |
|
|
40
|
-
| **Subtasks (get/create)** | **YES** | NO | NO |
|
|
41
|
-
| **Labels (get/add/remove)** | **YES** | NO | NO |
|
|
42
|
-
| Agile boards & board issues | YES | NO | YES |
|
|
43
|
-
| Sprints (list/create/update) | YES | NO | YES |
|
|
44
|
-
| Sprint issues | YES | NO | YES |
|
|
45
|
-
| Batch create issues | YES | NO | YES |
|
|
46
|
-
| Dev status (PRs/branches/commits) | YES | NO | YES |
|
|
47
|
-
| Issue history | YES | NO | YES |
|
|
48
|
-
| Fields discovery | YES | NO | YES |
|
|
49
|
-
| User lookup by name/email | YES | YES | YES |
|
|
50
|
-
| Issue type metadata | YES | YES | NO |
|
|
51
|
-
| Version/release management | YES | NO | YES |
|
|
52
|
-
| Epic linking | YES | NO | YES |
|
|
53
|
-
|
|
54
|
-
### Bitbucket
|
|
55
|
-
|
|
56
|
-
| Feature | Ours | Official Atlassian | sooperset |
|
|
57
|
-
|---|:---:|:---:|:---:|
|
|
58
|
-
| **Full Bitbucket support (16 tools)** | **YES** | NO | NO |
|
|
59
|
-
|
|
60
|
-
### Key Differentiators
|
|
61
|
-
|
|
62
|
-
- **Only MCP server covering all 3 Atlassian products** — Confluence + Jira + Bitbucket
|
|
63
|
-
- **Deepest CRUD coverage** — update/delete on comments, worklogs, labels where competitors only do create/read
|
|
64
|
-
- **Smart Field Handling** — AI-driven field suggestions during Jira transitions, unique to this server
|
|
65
|
-
- **Image embedding** — Confluence image embedding with positioning control, unique to this server
|
|
66
|
-
- **84 total tools** vs ~45 (Official) and ~58 (sooperset)
|
|
67
|
-
|
|
68
|
-
## Features
|
|
69
|
-
|
|
70
|
-
### Confluence Integration (20 tools)
|
|
71
|
-
- Search pages by text query
|
|
72
|
-
- Get, create, update, and delete pages
|
|
73
|
-
- List spaces and pages within spaces
|
|
74
|
-
- **Child Pages**: Get child pages of a parent page
|
|
75
|
-
- **Page History**: View version history of a page
|
|
76
|
-
- **Attachments**: Add, list, and delete attachments
|
|
77
|
-
- **Comments**: Full CRUD operations on page comments
|
|
78
|
-
- **Labels**: Get, add, and remove labels on pages
|
|
79
|
-
- **Images**: Embed images in page content with positioning control
|
|
80
|
-
- Full support for Confluence storage format
|
|
81
|
-
|
|
82
|
-
### Jira Integration (48 tools)
|
|
83
|
-
- Search issues by text, filters, or JQL query
|
|
84
|
-
- Get, create, update, and delete issues
|
|
85
|
-
- **Comments**: Full CRUD operations on issue comments
|
|
86
|
-
- **Transitions**: Move issues between statuses with **Smart Field Handling**
|
|
87
|
-
- **Attachments**: Add, list, and delete attachments
|
|
88
|
-
- **Issue Links**: Create and manage links between issues
|
|
89
|
-
- **Worklogs**: Full CRUD for time tracking entries
|
|
90
|
-
- **Watchers**: Manage issue watchers
|
|
91
|
-
- **Subtasks**: Create and list subtasks
|
|
92
|
-
- **History**: View issue change history
|
|
93
|
-
- **Labels**: Get, add, and remove labels on issues
|
|
94
|
-
- **Fields**: Discover available standard and custom fields
|
|
95
|
-
- **Agile**: List boards, get board issues, manage sprints
|
|
96
|
-
- **Sprints**: Create, update, list sprint issues
|
|
97
|
-
- **Versions**: Get, create, and update project versions/releases
|
|
98
|
-
- **Batch Operations**: Bulk create up to 50 issues at once
|
|
99
|
-
- **Dev Status**: View linked PRs, branches, and commits
|
|
100
|
-
- **User Lookup**: Search users by name or email
|
|
101
|
-
- **Issue Types**: Get available issue types per project
|
|
102
|
-
- **Epic Linking**: Link issues to epics (next-gen + classic)
|
|
103
|
-
- List projects
|
|
104
|
-
|
|
105
|
-
#### Smart Field Handling
|
|
106
|
-
Advanced transition management with intelligent field suggestions:
|
|
107
|
-
- **Contextual Analysis**: Analyzes issue content to provide smart field suggestions
|
|
108
|
-
- **Pattern Recognition**: Recognizes common field patterns (DB scripts, test cases, etc.)
|
|
109
|
-
- **Auto-Suggestions**: Provides context-aware suggestions with reasoning
|
|
110
|
-
- **Enhanced Error Handling**: Returns detailed field information instead of cryptic errors
|
|
111
|
-
|
|
112
|
-
### Bitbucket Integration (16 tools)
|
|
113
|
-
- List and search repositories
|
|
114
|
-
- Get repository details and create new repositories
|
|
115
|
-
- Manage branches and commits
|
|
116
|
-
- **Pull Requests**: Create, list, and get PR details with diffs
|
|
117
|
-
- **PR Comments**: Full CRUD with resolve/unresolve support
|
|
118
|
-
- Issue tracking within repositories
|
|
6
|
+
An MCP (Model Context Protocol) server that gives AI assistants full access to Jira, Confluence, and Bitbucket Cloud APIs -- 84 tools covering deep CRUD across all three products.
|
|
7
|
+
|
|
8
|
+
## What It Does
|
|
9
|
+
|
|
10
|
+
This server acts as a bridge between any MCP-compatible AI client (Claude Desktop, etc.) and your Atlassian Cloud instance. Instead of switching between browser tabs, you ask your AI assistant to search Confluence, create Jira tickets, review pull requests, and more -- all through natural language.
|
|
11
|
+
|
|
12
|
+
### Key Features
|
|
13
|
+
|
|
14
|
+
- **Confluence** (20 tools) -- Search, create, read, update, and delete pages. Manage spaces, child pages, comments (full CRUD), attachments, labels, and version history. Input accepts Markdown (auto-converted to ADF); output is native ADF JSON.
|
|
15
|
+
- **Jira** (48 tools) -- Full issue lifecycle: search, CRUD, comments, transitions, attachments, issue links, worklogs, watchers, subtasks, labels, history, agile boards, sprints, versions, batch creation (up to 50 issues), dev status, epic linking, and user lookup.
|
|
16
|
+
- **Bitbucket** (16 tools) -- Repository management, branches, commits, pull requests (create/update/list), PR comments with resolve/unresolve, and issue tracking.
|
|
17
|
+
- **Smart Field Handling** -- AI-driven field suggestions during Jira transitions. Analyzes issue context to auto-suggest values for required fields (e.g., DB scripts, test cases), reducing manual input.
|
|
18
|
+
- **Snapshot Safety Net** -- Automatic local snapshots of mutating operations (create/update/delete) with configurable retention, so you can recover from accidental changes.
|
|
19
|
+
|
|
20
|
+
## Prerequisites
|
|
21
|
+
|
|
22
|
+
- **Node.js** >= 18
|
|
23
|
+
- **Atlassian Cloud** account(s) with API tokens
|
|
24
|
+
- An MCP-compatible client (e.g., [Claude Desktop](https://claude.ai/download))
|
|
119
25
|
|
|
120
26
|
## Installation
|
|
121
27
|
|
|
122
|
-
###
|
|
28
|
+
### From npm (recommended)
|
|
123
29
|
|
|
124
30
|
```bash
|
|
125
31
|
npm install -g @jagadeesh52423/atlassian-mcp-server
|
|
126
32
|
```
|
|
127
33
|
|
|
128
|
-
Or
|
|
34
|
+
Or run without installing:
|
|
35
|
+
|
|
129
36
|
```bash
|
|
130
37
|
npx @jagadeesh52423/atlassian-mcp-server
|
|
131
38
|
```
|
|
132
39
|
|
|
133
|
-
###
|
|
40
|
+
### From source
|
|
134
41
|
|
|
135
|
-
1. Clone this repository:
|
|
136
42
|
```bash
|
|
137
43
|
git clone https://github.com/jagadeeshpulamarasetti/atlassian-mcp-server.git
|
|
138
44
|
cd atlassian-mcp-server
|
|
139
|
-
```
|
|
140
|
-
|
|
141
|
-
2. Install dependencies:
|
|
142
|
-
```bash
|
|
143
45
|
npm install
|
|
144
|
-
```
|
|
145
|
-
|
|
146
|
-
3. Build the project:
|
|
147
|
-
```bash
|
|
148
46
|
npm run build
|
|
149
47
|
```
|
|
150
48
|
|
|
151
49
|
## Configuration
|
|
152
50
|
|
|
153
|
-
1.
|
|
51
|
+
### 1. Set environment variables
|
|
52
|
+
|
|
53
|
+
Copy the template and fill in your credentials:
|
|
54
|
+
|
|
154
55
|
```bash
|
|
155
56
|
cp .env.example .env
|
|
156
57
|
```
|
|
157
58
|
|
|
158
|
-
2. Fill in your Atlassian credentials in `.env`:
|
|
159
|
-
|
|
160
59
|
```env
|
|
161
|
-
# Confluence
|
|
60
|
+
# Confluence
|
|
162
61
|
CONFLUENCE_DOMAIN=your-domain.atlassian.net
|
|
163
62
|
CONFLUENCE_EMAIL=your-email@example.com
|
|
164
63
|
CONFLUENCE_API_TOKEN=your-confluence-api-token
|
|
165
64
|
|
|
166
|
-
# Jira
|
|
65
|
+
# Jira
|
|
167
66
|
JIRA_DOMAIN=your-domain.atlassian.net
|
|
168
67
|
JIRA_EMAIL=your-email@example.com
|
|
169
68
|
JIRA_API_TOKEN=your-jira-api-token
|
|
170
69
|
|
|
171
|
-
#
|
|
172
|
-
JIRA_CLIENT_ID=your-client-id
|
|
173
|
-
JIRA_CLIENT_SECRET=your-client-secret
|
|
174
|
-
|
|
175
|
-
# Bitbucket Configuration
|
|
70
|
+
# Bitbucket
|
|
176
71
|
BITBUCKET_WORKSPACE=your-workspace
|
|
177
72
|
BITBUCKET_USERNAME=your-username
|
|
178
73
|
BITBUCKET_API_TOKEN=your-bitbucket-api-token
|
|
179
|
-
|
|
180
|
-
# Legacy: Atlassian Configuration (backward compatibility)
|
|
181
|
-
ATLASSIAN_DOMAIN=your-domain.atlassian.net
|
|
182
|
-
ATLASSIAN_EMAIL=your-email@example.com
|
|
183
|
-
ATLASSIAN_API_TOKEN=your-api-token
|
|
184
74
|
```
|
|
185
75
|
|
|
186
|
-
|
|
76
|
+
You can also set legacy `ATLASSIAN_*` variables as a fallback for Confluence and Jira. Bitbucket always requires its own credentials.
|
|
77
|
+
|
|
78
|
+
<details>
|
|
79
|
+
<summary>Optional: Jira OAuth and Snapshot settings</summary>
|
|
80
|
+
|
|
81
|
+
```env
|
|
82
|
+
# Jira OAuth (advanced auth)
|
|
83
|
+
JIRA_CLIENT_ID=your-client-id
|
|
84
|
+
JIRA_CLIENT_SECRET=your-client-secret
|
|
85
|
+
|
|
86
|
+
# Snapshot safety net (defaults shown)
|
|
87
|
+
MCP_SNAPSHOTS_ENABLED=true
|
|
88
|
+
MCP_SNAPSHOT_DIR=~/.atlassian-mcp-snapshots
|
|
89
|
+
MCP_SNAPSHOT_RETENTION_DAYS=30
|
|
90
|
+
```
|
|
187
91
|
|
|
188
|
-
|
|
189
|
-
1. Go to https://id.atlassian.com/manage-profile/security/api-tokens
|
|
190
|
-
2. Click "Create API token"
|
|
191
|
-
3. Give it a label and create
|
|
192
|
-
4. Copy the token to your `.env` file
|
|
92
|
+
</details>
|
|
193
93
|
|
|
194
|
-
|
|
195
|
-
1. Go to your Bitbucket settings > Personal access tokens
|
|
196
|
-
2. Create a new API token with required scopes:
|
|
197
|
-
- Repositories: Read, Write
|
|
198
|
-
- Issues: Read, Write
|
|
199
|
-
- Pull requests: Read, Write
|
|
200
|
-
- Pipelines: Read (if needed)
|
|
201
|
-
3. Copy the token to your `.env` file
|
|
94
|
+
### 2. Get an API token
|
|
202
95
|
|
|
203
|
-
|
|
96
|
+
1. Go to [Atlassian API Tokens](https://id.atlassian.com/manage-profile/security/api-tokens)
|
|
97
|
+
2. Click **Create API token**, give it a name, and copy the value
|
|
98
|
+
3. For Bitbucket, create a token under **Personal settings > Access tokens** with repo, issue, and PR scopes
|
|
204
99
|
|
|
205
100
|
## Usage
|
|
206
101
|
|
|
207
|
-
### Running the
|
|
102
|
+
### Running the server
|
|
208
103
|
|
|
209
|
-
If installed globally:
|
|
210
104
|
```bash
|
|
105
|
+
# Global install
|
|
211
106
|
atlassian-mcp-server
|
|
212
|
-
```
|
|
213
107
|
|
|
214
|
-
|
|
215
|
-
```bash
|
|
108
|
+
# From source
|
|
216
109
|
npm start
|
|
217
|
-
```
|
|
218
110
|
|
|
219
|
-
|
|
220
|
-
```bash
|
|
111
|
+
# Development (auto-reload)
|
|
221
112
|
npm run dev
|
|
222
113
|
```
|
|
223
114
|
|
|
224
|
-
###
|
|
115
|
+
### Claude Desktop integration
|
|
225
116
|
|
|
226
|
-
Add the following to your Claude Desktop
|
|
117
|
+
Add one of the following to your Claude Desktop config:
|
|
227
118
|
|
|
228
|
-
**macOS
|
|
229
|
-
**Windows
|
|
119
|
+
**macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
120
|
+
**Windows:** `%APPDATA%/Claude/claude_desktop_config.json`
|
|
230
121
|
|
|
231
|
-
#### If installed globally via npm:
|
|
232
122
|
```json
|
|
233
123
|
{
|
|
234
124
|
"mcpServers": {
|
|
235
125
|
"atlassian": {
|
|
236
|
-
"command": "
|
|
126
|
+
"command": "npx",
|
|
127
|
+
"args": ["-y", "@jagadeesh52423/atlassian-mcp-server"],
|
|
237
128
|
"env": {
|
|
238
129
|
"CONFLUENCE_DOMAIN": "your-domain.atlassian.net",
|
|
239
130
|
"CONFLUENCE_EMAIL": "your-email@example.com",
|
|
240
|
-
"CONFLUENCE_API_TOKEN": "your-
|
|
131
|
+
"CONFLUENCE_API_TOKEN": "your-token",
|
|
241
132
|
"JIRA_DOMAIN": "your-domain.atlassian.net",
|
|
242
133
|
"JIRA_EMAIL": "your-email@example.com",
|
|
243
|
-
"JIRA_API_TOKEN": "your-
|
|
134
|
+
"JIRA_API_TOKEN": "your-token",
|
|
244
135
|
"BITBUCKET_WORKSPACE": "your-workspace",
|
|
245
136
|
"BITBUCKET_USERNAME": "your-username",
|
|
246
|
-
"BITBUCKET_API_TOKEN": "your-
|
|
137
|
+
"BITBUCKET_API_TOKEN": "your-token"
|
|
247
138
|
}
|
|
248
139
|
}
|
|
249
140
|
}
|
|
250
141
|
}
|
|
251
142
|
```
|
|
252
143
|
|
|
253
|
-
|
|
144
|
+
<details>
|
|
145
|
+
<summary>Alternative: global install or from-source config</summary>
|
|
146
|
+
|
|
147
|
+
**Global install:**
|
|
254
148
|
```json
|
|
255
149
|
{
|
|
256
150
|
"mcpServers": {
|
|
257
151
|
"atlassian": {
|
|
258
|
-
"command": "
|
|
259
|
-
"
|
|
260
|
-
"env": {
|
|
261
|
-
"CONFLUENCE_DOMAIN": "your-domain.atlassian.net",
|
|
262
|
-
"CONFLUENCE_EMAIL": "your-email@example.com",
|
|
263
|
-
"CONFLUENCE_API_TOKEN": "your-confluence-api-token",
|
|
264
|
-
"JIRA_DOMAIN": "your-domain.atlassian.net",
|
|
265
|
-
"JIRA_EMAIL": "your-email@example.com",
|
|
266
|
-
"JIRA_API_TOKEN": "your-jira-api-token",
|
|
267
|
-
"BITBUCKET_WORKSPACE": "your-workspace",
|
|
268
|
-
"BITBUCKET_USERNAME": "your-username",
|
|
269
|
-
"BITBUCKET_API_TOKEN": "your-bitbucket-api-token"
|
|
270
|
-
}
|
|
152
|
+
"command": "atlassian-mcp-server",
|
|
153
|
+
"env": { "..." : "same env vars as above" }
|
|
271
154
|
}
|
|
272
155
|
}
|
|
273
156
|
}
|
|
274
157
|
```
|
|
275
158
|
|
|
276
|
-
|
|
159
|
+
**From source:**
|
|
277
160
|
```json
|
|
278
161
|
{
|
|
279
162
|
"mcpServers": {
|
|
280
163
|
"atlassian": {
|
|
281
164
|
"command": "node",
|
|
282
|
-
"args": ["/path/to/
|
|
165
|
+
"args": ["/path/to/atlassian-mcp-server/dist/index.js"]
|
|
283
166
|
}
|
|
284
167
|
}
|
|
285
168
|
}
|
|
286
169
|
```
|
|
287
170
|
|
|
171
|
+
</details>
|
|
172
|
+
|
|
288
173
|
## Available Tools
|
|
289
174
|
|
|
290
|
-
### Confluence
|
|
175
|
+
### Confluence (20 tools)
|
|
291
176
|
|
|
292
177
|
| Tool | Description |
|
|
293
178
|
|------|-------------|
|
|
294
|
-
| `confluence_search_pages` | Search pages
|
|
295
|
-
| `confluence_get_page` | Get
|
|
296
|
-
| `confluence_create_page` | Create
|
|
297
|
-
| `confluence_update_page` | Update
|
|
179
|
+
| `confluence_search_pages` | Search pages via CQL text query |
|
|
180
|
+
| `confluence_get_page` | Get a page by ID (returns ADF JSON body) |
|
|
181
|
+
| `confluence_create_page` | Create a page (accepts Markdown) |
|
|
182
|
+
| `confluence_update_page` | Update a page (accepts Markdown) |
|
|
298
183
|
| `confluence_delete_page` | Delete a page |
|
|
299
184
|
| `confluence_get_spaces` | List all spaces |
|
|
300
|
-
| `confluence_get_pages_by_space` | Get pages
|
|
301
|
-
| `confluence_get_page_children` | Get child pages
|
|
185
|
+
| `confluence_get_pages_by_space` | Get pages in a space |
|
|
186
|
+
| `confluence_get_page_children` | Get child pages |
|
|
302
187
|
| `confluence_get_page_history` | Get page version history |
|
|
303
|
-
| `confluence_get_attachments` | List attachments
|
|
304
|
-
| `confluence_add_attachment` |
|
|
305
|
-
| `confluence_delete_attachment` | Delete attachment
|
|
306
|
-
| `
|
|
307
|
-
| `
|
|
308
|
-
| `
|
|
309
|
-
| `
|
|
310
|
-
| `
|
|
311
|
-
| `confluence_get_labels` | Get labels on a page |
|
|
188
|
+
| `confluence_get_attachments` | List page attachments |
|
|
189
|
+
| `confluence_add_attachment` | Upload an attachment |
|
|
190
|
+
| `confluence_delete_attachment` | Delete an attachment |
|
|
191
|
+
| `confluence_get_comments` | Get footer and/or inline comments (ADF JSON). `commentType`: `footer` \| `inline` \| `all` (default `all`) |
|
|
192
|
+
| `confluence_add_comment` | Add a comment (Markdown) |
|
|
193
|
+
| `confluence_update_comment` | Update a comment (Markdown) |
|
|
194
|
+
| `confluence_delete_comment` | Delete a comment |
|
|
195
|
+
| `confluence_get_labels` | Get page labels |
|
|
312
196
|
| `confluence_add_labels` | Add labels to a page |
|
|
313
|
-
| `confluence_remove_label` | Remove a label
|
|
314
|
-
|
|
315
|
-
### Jira
|
|
197
|
+
| `confluence_remove_label` | Remove a label |
|
|
198
|
+
|
|
199
|
+
### Jira (48 tools)
|
|
200
|
+
|
|
201
|
+
| Category | Tools |
|
|
202
|
+
|----------|-------|
|
|
203
|
+
| **Core** | `search_issues`, `get_issue`, `create_issue`, `update_issue`, `delete_issue`, `get_projects`, `get_issue_types`, `get_fields`, `lookup_user` |
|
|
204
|
+
| **Comments** | `add_comment`, `get_comments`, `update_comment`, `delete_comment` |
|
|
205
|
+
| **Transitions** | `get_issue_transitions`, `transition_issue`, `transition_issue_interactive` (smart field handling) |
|
|
206
|
+
| **Attachments** | `get_attachments`, `add_attachment`, `delete_attachment` |
|
|
207
|
+
| **Issue Links** | `get_issue_links`, `create_issue_link`, `delete_issue_link`, `get_link_types` |
|
|
208
|
+
| **Worklogs** | `get_worklogs`, `add_worklog`, `update_worklog`, `delete_worklog` |
|
|
209
|
+
| **Watchers** | `get_watchers`, `add_watcher`, `remove_watcher` |
|
|
210
|
+
| **Subtasks** | `get_subtasks`, `create_subtask` |
|
|
211
|
+
| **Labels** | `get_labels`, `add_labels`, `remove_labels` |
|
|
212
|
+
| **History** | `get_issue_history` |
|
|
213
|
+
| **Agile** | `get_agile_boards`, `get_board_issues`, `get_sprints`, `get_sprint_issues`, `create_sprint`, `update_sprint` |
|
|
214
|
+
| **Versions** | `get_project_versions`, `create_version`, `update_version` |
|
|
215
|
+
| **Batch/Dev** | `batch_create_issues`, `get_dev_status` |
|
|
216
|
+
| **Epic** | `link_to_epic` |
|
|
217
|
+
|
|
218
|
+
All Jira tools are prefixed with `jira_`.
|
|
219
|
+
|
|
220
|
+
### Bitbucket (16 tools)
|
|
316
221
|
|
|
317
222
|
| Tool | Description |
|
|
318
223
|
|------|-------------|
|
|
319
|
-
|
|
|
320
|
-
| `
|
|
321
|
-
| `
|
|
322
|
-
| `jira_create_issue` | Create new issue with custom fields |
|
|
323
|
-
| `jira_update_issue` | Update existing issue |
|
|
324
|
-
| `jira_delete_issue` | Delete issue with optional subtask deletion |
|
|
325
|
-
| `jira_get_projects` | List all projects |
|
|
326
|
-
| `jira_get_issue_types` | Get available issue types for a project |
|
|
327
|
-
| `jira_get_fields` | Discover available standard and custom fields |
|
|
328
|
-
| `jira_lookup_user` | Look up users by name or email |
|
|
329
|
-
| **Comments** | |
|
|
330
|
-
| `jira_add_comment` | Add comment to issue |
|
|
331
|
-
| `jira_get_comments` | Get comments on an issue |
|
|
332
|
-
| `jira_update_comment` | Update existing comment |
|
|
333
|
-
| `jira_delete_comment` | Delete comment from issue |
|
|
334
|
-
| **Transitions** | |
|
|
335
|
-
| `jira_get_issue_transitions` | Get available transitions |
|
|
336
|
-
| `jira_transition_issue` | Change issue status |
|
|
337
|
-
| `jira_transition_issue_interactive` | Change status with smart field handling |
|
|
338
|
-
| **Attachments** | |
|
|
339
|
-
| `jira_get_attachments` | List attachments on an issue |
|
|
340
|
-
| `jira_add_attachment` | Add attachment to issue |
|
|
341
|
-
| `jira_delete_attachment` | Delete attachment from issue |
|
|
342
|
-
| **Issue Links** | |
|
|
343
|
-
| `jira_get_issue_links` | Get linked issues |
|
|
344
|
-
| `jira_create_issue_link` | Create link between issues |
|
|
345
|
-
| `jira_delete_issue_link` | Delete issue link |
|
|
346
|
-
| `jira_get_link_types` | Get available link types |
|
|
347
|
-
| **Worklogs** | |
|
|
348
|
-
| `jira_get_worklogs` | Get work logs on an issue |
|
|
349
|
-
| `jira_add_worklog` | Add work log entry |
|
|
350
|
-
| `jira_update_worklog` | Update work log entry |
|
|
351
|
-
| `jira_delete_worklog` | Delete work log entry |
|
|
352
|
-
| **Watchers** | |
|
|
353
|
-
| `jira_get_watchers` | Get issue watchers |
|
|
354
|
-
| `jira_add_watcher` | Add watcher to issue |
|
|
355
|
-
| `jira_remove_watcher` | Remove watcher from issue |
|
|
356
|
-
| **Subtasks** | |
|
|
357
|
-
| `jira_get_subtasks` | Get subtasks of an issue |
|
|
358
|
-
| `jira_create_subtask` | Create subtask for an issue |
|
|
359
|
-
| **Labels** | |
|
|
360
|
-
| `jira_get_labels` | Get available labels |
|
|
361
|
-
| `jira_add_labels` | Add labels to an issue |
|
|
362
|
-
| `jira_remove_labels` | Remove labels from an issue |
|
|
363
|
-
| **History** | |
|
|
364
|
-
| `jira_get_issue_history` | Get issue change history |
|
|
365
|
-
| **Agile / Sprints** | |
|
|
366
|
-
| `jira_get_agile_boards` | List agile boards with optional filters |
|
|
367
|
-
| `jira_get_board_issues` | Get issues on a board |
|
|
368
|
-
| `jira_get_sprints` | Get sprints for a board |
|
|
369
|
-
| `jira_get_sprint_issues` | Get issues in a sprint |
|
|
370
|
-
| `jira_create_sprint` | Create a new sprint |
|
|
371
|
-
| `jira_update_sprint` | Update sprint (name, state, dates, goal) |
|
|
372
|
-
| **Versions / Releases** | |
|
|
373
|
-
| `jira_get_project_versions` | Get all versions for a project |
|
|
374
|
-
| `jira_create_version` | Create a new version/release |
|
|
375
|
-
| `jira_update_version` | Update version (release, archive, dates) |
|
|
376
|
-
| **Batch & Dev** | |
|
|
377
|
-
| `jira_batch_create_issues` | Bulk create up to 50 issues |
|
|
378
|
-
| `jira_get_dev_status` | Get linked PRs, branches, commits |
|
|
379
|
-
| **Epic** | |
|
|
380
|
-
| `jira_link_to_epic` | Link an issue to an epic |
|
|
381
|
-
|
|
382
|
-
### Bitbucket Tools (16 tools)
|
|
383
|
-
|
|
384
|
-
| Tool | Description |
|
|
385
|
-
|------|-------------|
|
|
386
|
-
| `bitbucket_get_repositories` | List repositories in workspace |
|
|
387
|
-
| `bitbucket_get_repository` | Get specific repository details |
|
|
388
|
-
| `bitbucket_create_repository` | Create new repository |
|
|
224
|
+
| `bitbucket_get_repositories` | List workspace repositories |
|
|
225
|
+
| `bitbucket_get_repository` | Get repository details |
|
|
226
|
+
| `bitbucket_create_repository` | Create a repository |
|
|
389
227
|
| `bitbucket_get_pull_requests` | List pull requests |
|
|
390
|
-
| `bitbucket_get_pull_request` | Get
|
|
391
|
-
| `bitbucket_create_pull_request` | Create
|
|
228
|
+
| `bitbucket_get_pull_request` | Get a PR with diff |
|
|
229
|
+
| `bitbucket_create_pull_request` | Create a pull request |
|
|
230
|
+
| `bitbucket_update_pull_request` | Update a pull request |
|
|
392
231
|
| `bitbucket_get_branches` | List branches |
|
|
393
232
|
| `bitbucket_get_commits` | List commits |
|
|
394
233
|
| `bitbucket_get_issues` | List repository issues |
|
|
395
|
-
| `bitbucket_create_issue` | Create
|
|
234
|
+
| `bitbucket_create_issue` | Create an issue |
|
|
396
235
|
| `bitbucket_get_pr_comments` | Get PR comments |
|
|
397
|
-
| `bitbucket_add_pr_comment` | Add
|
|
398
|
-
| `bitbucket_update_pr_comment` | Update PR comment |
|
|
399
|
-
| `bitbucket_delete_pr_comment` | Delete PR comment |
|
|
400
|
-
| `bitbucket_resolve_pr_comment` | Resolve a PR comment |
|
|
401
|
-
| `bitbucket_unresolve_pr_comment` | Unresolve a PR comment |
|
|
236
|
+
| `bitbucket_add_pr_comment` | Add a PR comment |
|
|
237
|
+
| `bitbucket_update_pr_comment` | Update a PR comment |
|
|
238
|
+
| `bitbucket_delete_pr_comment` | Delete a PR comment |
|
|
239
|
+
| `bitbucket_resolve_pr_comment` | Resolve/unresolve a PR comment |
|
|
402
240
|
|
|
403
|
-
##
|
|
404
|
-
|
|
405
|
-
```
|
|
406
|
-
User: "Search for pages about API documentation in Confluence"
|
|
407
|
-
AI: Uses confluence_search_pages with query "API documentation"
|
|
241
|
+
## Confluence Content Format (v1.2.0+)
|
|
408
242
|
|
|
409
|
-
|
|
410
|
-
AI: Uses jira_create_issue with appropriate project, summary, and description
|
|
243
|
+
Confluence pages and comments use **ADF (Atlassian Document Format)** natively:
|
|
411
244
|
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
416
|
-
- Handles transition with minimal user input
|
|
417
|
-
|
|
418
|
-
User: "What pull requests are open in my main repository?"
|
|
419
|
-
AI: Uses bitbucket_get_pull_requests with your repository name
|
|
420
|
-
|
|
421
|
-
User: "Create 10 issues for the sprint backlog"
|
|
422
|
-
AI: Uses jira_batch_create_issues to create all at once
|
|
423
|
-
|
|
424
|
-
User: "Show me the active sprint and its issues"
|
|
425
|
-
AI: Uses jira_get_sprints then jira_get_sprint_issues
|
|
426
|
-
```
|
|
245
|
+
- **Input** -- `create_page`, `update_page`, `add_comment`, `update_comment` accept **Markdown**, which the server converts to ADF using the official `@atlaskit/editor-markdown-transformer`.
|
|
246
|
+
- **Output** -- `get_page`, `get_comments` return ADF JSON (an object, not a string).
|
|
247
|
+
- **Comments** -- `get_comments` returns **both footer (page-level) and inline (text-anchored) comments** by default. Use the `commentType` param (`footer` | `inline` | `all`, default `all`) to filter. Every comment carries a `type` field (`"footer"` or `"inline"`). Inline comments additionally include `anchoredText` (the highlighted page text the comment is attached to), `resolutionStatus` (e.g. `"open"`, `"resolved"`), `markerRef`, and `webuiLink`. _Backwards-compatibility note: callers that previously relied on `get_comments` returning footer comments only will now also receive inline comments under the default `all`; pass `commentType: "footer"` to restore the old footer-only behaviour. The new `type` field is additive and does not remove any existing field._
|
|
248
|
+
- **Inline images** -- Not currently supported via ADF media nodes (requires Atlassian Media API tokens). Use `confluence_add_attachment` instead.
|
|
427
249
|
|
|
428
|
-
|
|
250
|
+
## Project Structure
|
|
429
251
|
|
|
430
|
-
```
|
|
431
|
-
Scenario: Transitioning a template configuration issue
|
|
432
|
-
Issue: "Update notification template to use 'Prefr App'"
|
|
433
|
-
Smart Suggestion: DB Script = "No" (Template changes use MOFU tool)
|
|
434
|
-
Test Cases = "No" (Template changes don't require separate tests)
|
|
435
|
-
|
|
436
|
-
Scenario: Transitioning a new feature development issue
|
|
437
|
-
Issue: "Implement user authentication system"
|
|
438
|
-
Smart Suggestion: DB Script = "Yes" (New features typically need database changes)
|
|
439
|
-
Test Cases = "Yes" (New features require comprehensive testing)
|
|
440
|
-
```
|
|
441
|
-
|
|
442
|
-
## Development
|
|
443
|
-
|
|
444
|
-
### Project Structure
|
|
445
252
|
```
|
|
446
253
|
src/
|
|
447
|
-
├── index.ts
|
|
448
|
-
├──
|
|
449
|
-
├──
|
|
450
|
-
├── constants.ts
|
|
451
|
-
├── error-handler.ts
|
|
452
|
-
├──
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
│
|
|
456
|
-
|
|
457
|
-
├──
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
│ └── bitbucket.ts # Bitbucket API service
|
|
461
|
-
├── tools/
|
|
462
|
-
│ ├── index.ts # Tool aggregation
|
|
463
|
-
│ ├── confluence-tools.ts # Confluence tool definitions
|
|
464
|
-
│ ├── jira-tools.ts # Jira tool definitions
|
|
465
|
-
│ └── bitbucket-tools.ts # Bitbucket tool definitions
|
|
466
|
-
└── handlers/
|
|
467
|
-
├── confluence-handlers.ts
|
|
468
|
-
├── jira-handlers.ts
|
|
469
|
-
└── bitbucket-handlers.ts
|
|
470
|
-
```
|
|
471
|
-
|
|
472
|
-
### Building and Testing
|
|
473
|
-
|
|
474
|
-
```bash
|
|
475
|
-
# Build
|
|
476
|
-
npm run build
|
|
477
|
-
|
|
478
|
-
# Development with auto-reload
|
|
479
|
-
npm run dev
|
|
480
|
-
|
|
481
|
-
# Clean build artifacts
|
|
482
|
-
npm run clean
|
|
254
|
+
├── index.ts # Server entry point and tool routing
|
|
255
|
+
├── config.ts # Environment variable loading and validation
|
|
256
|
+
├── types.ts # TypeScript interfaces
|
|
257
|
+
├── constants.ts # Shared constants
|
|
258
|
+
├── error-handler.ts # Structured error responses
|
|
259
|
+
├── formatters/ # Markdown-to-ADF and ADF-to-text converters
|
|
260
|
+
├── clients/ # HTTP clients (one per Atlassian product)
|
|
261
|
+
├── services/ # Business logic for each product
|
|
262
|
+
│ └── jira/ # Jira sub-modules (agile, comments, transitions, etc.)
|
|
263
|
+
├── handlers/ # MCP request handlers
|
|
264
|
+
├── tools/ # MCP tool definitions (schemas)
|
|
265
|
+
├── registry/ # Tool dispatch registry
|
|
266
|
+
└── snapshot/ # Snapshot safety net (auto-backup before mutations)
|
|
483
267
|
```
|
|
484
268
|
|
|
485
|
-
## Security
|
|
486
|
-
|
|
487
|
-
- API tokens are stored in environment variables
|
|
488
|
-
- All API calls use HTTPS
|
|
489
|
-
- Tokens should have minimal required permissions
|
|
490
|
-
- Never commit `.env` files to version control
|
|
491
|
-
|
|
492
|
-
## Error Handling
|
|
493
|
-
|
|
494
|
-
The server includes comprehensive error handling:
|
|
495
|
-
- API authentication errors
|
|
496
|
-
- Rate limiting responses
|
|
497
|
-
- Network connectivity issues
|
|
498
|
-
- Invalid parameters
|
|
499
|
-
- Resource not found errors
|
|
500
|
-
- Actionable tips for common issues
|
|
501
|
-
|
|
502
|
-
## Rate Limiting
|
|
503
|
-
|
|
504
|
-
Respects Atlassian API rate limits:
|
|
505
|
-
- Jira Cloud: 10 requests per second
|
|
506
|
-
- Confluence Cloud: 10 requests per second
|
|
507
|
-
- Bitbucket Cloud: 1000 requests per hour
|
|
508
|
-
|
|
509
|
-
## Contributing
|
|
269
|
+
## Security
|
|
510
270
|
|
|
511
|
-
|
|
512
|
-
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
5. Submit a pull request
|
|
271
|
+
- Credentials are read from environment variables only; never committed to source control.
|
|
272
|
+
- All API calls use HTTPS with Basic Auth (base64-encoded `email:token`).
|
|
273
|
+
- Grant tokens the minimum required permissions.
|
|
274
|
+
- Snapshots are stored locally in `~/.atlassian-mcp-snapshots` by default.
|
|
516
275
|
|
|
517
276
|
## License
|
|
518
277
|
|
|
519
|
-
MIT
|
|
278
|
+
[MIT](LICENSE)
|
|
520
279
|
|
|
521
|
-
##
|
|
280
|
+
## Links
|
|
522
281
|
|
|
523
|
-
- **npm
|
|
524
|
-
- **
|
|
525
|
-
- **
|
|
282
|
+
- **npm:** [@jagadeesh52423/atlassian-mcp-server](https://www.npmjs.com/package/@jagadeesh52423/atlassian-mcp-server)
|
|
283
|
+
- **Source:** [GitHub](https://github.com/jagadeeshpulamarasetti/atlassian-mcp-server)
|
|
284
|
+
- **Issues:** [GitHub Issues](https://github.com/jagadeeshpulamarasetti/atlassian-mcp-server/issues)
|