@jagadeesh52423/atlassian-mcp-server 1.2.1 โ†’ 1.3.1

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/README.md CHANGED
@@ -1,537 +1,291 @@
1
- # Atlassian MCP Server
1
+ # ๐Ÿ”— Atlassian MCP Server
2
2
 
3
3
  [![npm version](https://badge.fury.io/js/@jagadeesh52423%2Fatlassian-mcp-server.svg)](https://www.npmjs.com/package/@jagadeesh52423/atlassian-mcp-server)
4
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
5
 
6
- A comprehensive Model Context Protocol (MCP) server that provides AI assistants with access to Atlassian APIs including Jira, Confluence, and Bitbucket. **84 tools** across 3 services โ€” the most complete Atlassian MCP server available.
7
-
8
- ## Confluence content format (v1.2.0+)
9
-
10
- Confluence input/output uses **ADF (Atlassian Document Format)**, not storage HTML or wiki markup:
11
-
12
- - **Input** โ€” `confluence_create_page`, `confluence_update_page`, `confluence_add_comment`, `confluence_update_comment` accept **Markdown**. The server converts it to ADF using the official `@atlaskit/editor-markdown-transformer` and submits via the Confluence v2 API.
13
- - **Output** โ€” `confluence_get_page`, `confluence_get_pages_by_space`, `confluence_get_comments` return the body as a parsed **ADF JSON** document (an object, not a string). `ConfluencePage.content` and `ConfluenceComment.body` are typed `any` to reflect the JSON shape.
14
- - **CQL search** โ€” `confluence_search_pages` still uses the **v1** REST endpoint (`/wiki/rest/api/search`) because v2 has no CQL equivalent. The `content` field on search hits is opaque legacy storage HTML; fetch the page by id with `confluence_get_page` for the ADF body.
15
- - **Image embedding** โ€” inline image embedding (`confluence_embed_image`, and `confluence_create_page` with `images: [...]`) is **not supported in v1.2.0** because ADF media nodes require Atlassian Media API tokens. Calling either path returns an explicit error. Use `confluence_add_attachment` to upload files and reference them from the Confluence UI.
16
-
17
- This is a breaking change from v1.1.x, which returned Confluence storage-format HTML strings. See "Phase 4 cleanup" in `docs/superpowers/specs/2026-05-08-adf-formatter-replacement-design.md`.
18
-
19
- ## Feature Comparison
20
-
21
- How we stack up against the official Atlassian MCP server and the popular sooperset/mcp-atlassian:
22
-
23
- ### Confluence
24
-
25
- | Feature | Ours | Official Atlassian | sooperset |
26
- |---|:---:|:---:|:---:|
27
- | Search / Get / Create / Update page | YES | YES | YES |
28
- | Delete page | YES | NO | YES |
29
- | Get spaces / pages by space | YES | YES | NO |
30
- | Get child pages | YES | YES | YES |
31
- | Get/Add comments | YES | YES | YES |
32
- | **Update/Delete comment** | **YES** | NO | NO |
33
- | Get/Add/Delete attachments | YES | NO | YES |
34
- | Embed image (with positioning) | NOยน | NO | NO |
35
- | Create page with inline images | NOยน | NO | NO |
36
- | Get/Add/Remove labels | YES | NO | Partial |
37
- | **Page version history** | YES | NO | YES |
38
-
39
- ยน Removed in v1.2.0 alongside the Confluence v2 / ADF migration. ADF media nodes need the Atlassian Media API; reinstating inline embedding is tracked as future work. Use `confluence_add_attachment` to upload files.
40
-
41
- ### Jira
42
-
43
- | Feature | Ours | Official Atlassian | sooperset |
44
- |---|:---:|:---:|:---:|
45
- | Search/Get/Create/Update issue | YES | YES | YES |
46
- | Delete issue | YES | NO | YES |
47
- | Comments (full CRUD) | YES | Partial | Partial |
48
- | **Smart transition (AI auto-fill)** | **YES** | NO | NO |
49
- | Attachments (get/add/delete) | YES | NO | NO |
50
- | Issue links (full CRUD) | YES | NO | Partial |
51
- | Worklogs (full CRUD) | YES | Partial | Partial |
52
- | **Watchers (get/add/remove)** | **YES** | NO | NO |
53
- | **Subtasks (get/create)** | **YES** | NO | NO |
54
- | **Labels (get/add/remove)** | **YES** | NO | NO |
55
- | Agile boards & board issues | YES | NO | YES |
56
- | Sprints (list/create/update) | YES | NO | YES |
57
- | Sprint issues | YES | NO | YES |
58
- | Batch create issues | YES | NO | YES |
59
- | Dev status (PRs/branches/commits) | YES | NO | YES |
60
- | Issue history | YES | NO | YES |
61
- | Fields discovery | YES | NO | YES |
62
- | User lookup by name/email | YES | YES | YES |
63
- | Issue type metadata | YES | YES | NO |
64
- | Version/release management | YES | NO | YES |
65
- | Epic linking | YES | NO | YES |
66
-
67
- ### Bitbucket
68
-
69
- | Feature | Ours | Official Atlassian | sooperset |
70
- |---|:---:|:---:|:---:|
71
- | **Full Bitbucket support (16 tools)** | **YES** | NO | NO |
72
-
73
- ### Key Differentiators
74
-
75
- - **Only MCP server covering all 3 Atlassian products** โ€” Confluence + Jira + Bitbucket
76
- - **Deepest CRUD coverage** โ€” update/delete on comments, worklogs, labels where competitors only do create/read
77
- - **Smart Field Handling** โ€” AI-driven field suggestions during Jira transitions, unique to this server
78
- - **84 total tools** vs ~45 (Official) and ~58 (sooperset)
79
- - **ADF / Confluence v2 native** โ€” pages and comments are stored and returned as ADF, the format Confluence Cloud uses internally; markdown input is converted via the official `@atlaskit/editor-markdown-transformer`
80
-
81
- ## Features
82
-
83
- ### Confluence Integration (20 tools)
84
- - Search pages by text query
85
- - Get, create, update, and delete pages
86
- - List spaces and pages within spaces
87
- - **Child Pages**: Get child pages of a parent page
88
- - **Page History**: View version history of a page
89
- - **Attachments**: Add, list, and delete attachments
90
- - **Comments**: Full CRUD operations on page footer comments
91
- - **Labels**: Get, add, and remove labels on pages
92
- - **ADF / v2 API**: input is markdown (converted to ADF via official @atlaskit transformers); output is ADF JSON. CQL search stays on v1.
93
-
94
- ### Jira Integration (48 tools)
95
- - Search issues by text, filters, or JQL query
96
- - Get, create, update, and delete issues
97
- - **Comments**: Full CRUD operations on issue comments
98
- - **Transitions**: Move issues between statuses with **Smart Field Handling**
99
- - **Attachments**: Add, list, and delete attachments
100
- - **Issue Links**: Create and manage links between issues
101
- - **Worklogs**: Full CRUD for time tracking entries
102
- - **Watchers**: Manage issue watchers
103
- - **Subtasks**: Create and list subtasks
104
- - **History**: View issue change history
105
- - **Labels**: Get, add, and remove labels on issues
106
- - **Fields**: Discover available standard and custom fields
107
- - **Agile**: List boards, get board issues, manage sprints
108
- - **Sprints**: Create, update, list sprint issues
109
- - **Versions**: Get, create, and update project versions/releases
110
- - **Batch Operations**: Bulk create up to 50 issues at once
111
- - **Dev Status**: View linked PRs, branches, and commits
112
- - **User Lookup**: Search users by name or email
113
- - **Issue Types**: Get available issue types per project
114
- - **Epic Linking**: Link issues to epics (next-gen + classic)
115
- - List projects
116
-
117
- #### Smart Field Handling
118
- Advanced transition management with intelligent field suggestions:
119
- - **Contextual Analysis**: Analyzes issue content to provide smart field suggestions
120
- - **Pattern Recognition**: Recognizes common field patterns (DB scripts, test cases, etc.)
121
- - **Auto-Suggestions**: Provides context-aware suggestions with reasoning
122
- - **Enhanced Error Handling**: Returns detailed field information instead of cryptic errors
123
-
124
- ### Bitbucket Integration (16 tools)
125
- - List and search repositories
126
- - Get repository details and create new repositories
127
- - Manage branches and commits
128
- - **Pull Requests**: Create, list, and get PR details with diffs
129
- - **PR Comments**: Full CRUD with resolve/unresolve support
130
- - Issue tracking within repositories
6
+ An MCP (Model Context Protocol) server that gives AI assistants full access to Jira, Confluence, and Bitbucket Cloud APIs -- 86 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** (49 tools) -- Full issue lifecycle: search, CRUD, comments, transitions, attachments, issue links, worklogs, watchers, subtasks, labels, history, agile boards, sprints (incl. moving issues into a sprint), versions, batch creation (up to 50 issues), dev status, epic linking, and user lookup.
16
+ - **Bitbucket** (17 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))
131
25
 
132
26
  ## Installation
133
27
 
134
- ### Option 1: Install from npm (Recommended)
28
+ ### From npm (recommended)
135
29
 
136
30
  ```bash
137
31
  npm install -g @jagadeesh52423/atlassian-mcp-server
138
32
  ```
139
33
 
140
- Or use with npx without installing:
34
+ Or run without installing:
35
+
141
36
  ```bash
142
37
  npx @jagadeesh52423/atlassian-mcp-server
143
38
  ```
144
39
 
145
- ### Option 2: Install from source
40
+ ### From source
146
41
 
147
- 1. Clone this repository:
148
42
  ```bash
149
43
  git clone https://github.com/jagadeeshpulamarasetti/atlassian-mcp-server.git
150
44
  cd atlassian-mcp-server
151
- ```
152
-
153
- 2. Install dependencies:
154
- ```bash
155
45
  npm install
156
- ```
157
-
158
- 3. Build the project:
159
- ```bash
160
46
  npm run build
161
47
  ```
162
48
 
163
49
  ## Configuration
164
50
 
165
- 1. Copy the environment template:
51
+ ### 1. Set environment variables
52
+
53
+ Copy the template and fill in your credentials:
54
+
166
55
  ```bash
167
56
  cp .env.example .env
168
57
  ```
169
58
 
170
- 2. Fill in your Atlassian credentials in `.env`:
171
-
172
59
  ```env
173
- # Confluence Configuration
60
+ # Confluence
174
61
  CONFLUENCE_DOMAIN=your-domain.atlassian.net
175
62
  CONFLUENCE_EMAIL=your-email@example.com
176
63
  CONFLUENCE_API_TOKEN=your-confluence-api-token
177
64
 
178
- # Jira Configuration
65
+ # Jira
179
66
  JIRA_DOMAIN=your-domain.atlassian.net
180
67
  JIRA_EMAIL=your-email@example.com
181
68
  JIRA_API_TOKEN=your-jira-api-token
182
69
 
183
- # Optional: OAuth Configuration (for advanced auth)
184
- JIRA_CLIENT_ID=your-client-id
185
- JIRA_CLIENT_SECRET=your-client-secret
186
-
187
- # Bitbucket Configuration
70
+ # Bitbucket
188
71
  BITBUCKET_WORKSPACE=your-workspace
189
72
  BITBUCKET_USERNAME=your-username
190
73
  BITBUCKET_API_TOKEN=your-bitbucket-api-token
191
-
192
- # Legacy: Atlassian Configuration (backward compatibility)
193
- ATLASSIAN_DOMAIN=your-domain.atlassian.net
194
- ATLASSIAN_EMAIL=your-email@example.com
195
- ATLASSIAN_API_TOKEN=your-api-token
196
74
  ```
197
75
 
198
- ### Getting API Tokens
76
+ You can also set legacy `ATLASSIAN_*` variables as a fallback for Confluence and Jira. Bitbucket always requires its own credentials.
199
77
 
200
- #### Atlassian API Token
201
- 1. Go to https://id.atlassian.com/manage-profile/security/api-tokens
202
- 2. Click "Create API token"
203
- 3. Give it a label and create
204
- 4. Copy the token to your `.env` file
78
+ <details>
79
+ <summary>Optional: Jira OAuth and Snapshot settings</summary>
205
80
 
206
- #### Bitbucket API Token
207
- 1. Go to your Bitbucket settings > Personal access tokens
208
- 2. Create a new API token with required scopes:
209
- - Repositories: Read, Write
210
- - Issues: Read, Write
211
- - Pull requests: Read, Write
212
- - Pipelines: Read (if needed)
213
- 3. Copy the token to your `.env` file
81
+ ```env
82
+ # Jira OAuth (advanced auth)
83
+ JIRA_CLIENT_ID=your-client-id
84
+ JIRA_CLIENT_SECRET=your-client-secret
214
85
 
215
- **Note**: App passwords are deprecated as of September 9, 2025. Use API tokens instead.
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
+ ```
91
+
92
+ </details>
93
+
94
+ ### 2. Get an API token
95
+
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
216
99
 
217
100
  ## Usage
218
101
 
219
- ### Running the Server
102
+ ### Running the server
220
103
 
221
- If installed globally:
222
104
  ```bash
105
+ # Global install
223
106
  atlassian-mcp-server
224
- ```
225
107
 
226
- If running from source:
227
- ```bash
108
+ # From source
228
109
  npm start
229
- ```
230
110
 
231
- For development with auto-reload:
232
- ```bash
111
+ # Development (auto-reload)
233
112
  npm run dev
234
113
  ```
235
114
 
236
- ### Integration with Claude Desktop
115
+ ### Claude Desktop integration
237
116
 
238
- Add the following to your Claude Desktop configuration file:
117
+ Add one of the following to your Claude Desktop config:
239
118
 
240
- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
241
- **Windows**: `%APPDATA%/Claude/claude_desktop_config.json`
119
+ **macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`
120
+ **Windows:** `%APPDATA%/Claude/claude_desktop_config.json`
242
121
 
243
- #### If installed globally via npm:
244
122
  ```json
245
123
  {
246
124
  "mcpServers": {
247
125
  "atlassian": {
248
- "command": "atlassian-mcp-server",
126
+ "command": "npx",
127
+ "args": ["-y", "@jagadeesh52423/atlassian-mcp-server"],
249
128
  "env": {
250
129
  "CONFLUENCE_DOMAIN": "your-domain.atlassian.net",
251
130
  "CONFLUENCE_EMAIL": "your-email@example.com",
252
- "CONFLUENCE_API_TOKEN": "your-confluence-api-token",
131
+ "CONFLUENCE_API_TOKEN": "your-token",
253
132
  "JIRA_DOMAIN": "your-domain.atlassian.net",
254
133
  "JIRA_EMAIL": "your-email@example.com",
255
- "JIRA_API_TOKEN": "your-jira-api-token",
134
+ "JIRA_API_TOKEN": "your-token",
256
135
  "BITBUCKET_WORKSPACE": "your-workspace",
257
136
  "BITBUCKET_USERNAME": "your-username",
258
- "BITBUCKET_API_TOKEN": "your-bitbucket-api-token"
137
+ "BITBUCKET_API_TOKEN": "your-token"
259
138
  }
260
139
  }
261
140
  }
262
141
  }
263
142
  ```
264
143
 
265
- #### If using npx:
144
+ <details>
145
+ <summary>Alternative: global install or from-source config</summary>
146
+
147
+ **Global install:**
266
148
  ```json
267
149
  {
268
150
  "mcpServers": {
269
151
  "atlassian": {
270
- "command": "npx",
271
- "args": ["-y", "@jagadeesh52423/atlassian-mcp-server"],
272
- "env": {
273
- "CONFLUENCE_DOMAIN": "your-domain.atlassian.net",
274
- "CONFLUENCE_EMAIL": "your-email@example.com",
275
- "CONFLUENCE_API_TOKEN": "your-confluence-api-token",
276
- "JIRA_DOMAIN": "your-domain.atlassian.net",
277
- "JIRA_EMAIL": "your-email@example.com",
278
- "JIRA_API_TOKEN": "your-jira-api-token",
279
- "BITBUCKET_WORKSPACE": "your-workspace",
280
- "BITBUCKET_USERNAME": "your-username",
281
- "BITBUCKET_API_TOKEN": "your-bitbucket-api-token"
282
- }
152
+ "command": "atlassian-mcp-server",
153
+ "env": { "..." : "same env vars as above" }
283
154
  }
284
155
  }
285
156
  }
286
157
  ```
287
158
 
288
- #### If installed from source:
159
+ **From source:**
289
160
  ```json
290
161
  {
291
162
  "mcpServers": {
292
163
  "atlassian": {
293
164
  "command": "node",
294
- "args": ["/path/to/your/atlassian-mcp-server/dist/index.js"]
165
+ "args": ["/path/to/atlassian-mcp-server/dist/index.js"]
295
166
  }
296
167
  }
297
168
  }
298
169
  ```
299
170
 
171
+ </details>
172
+
300
173
  ## Available Tools
301
174
 
302
- ### Confluence Tools (20 tools)
175
+ ### Confluence (20 tools)
303
176
 
304
177
  | Tool | Description |
305
178
  |------|-------------|
306
- | `confluence_search_pages` | Search pages by CQL text query (legacy v1; result `content` is opaque storage HTML) |
307
- | `confluence_get_page` | Get specific page by ID โ€” returns ADF JSON `content` |
308
- | `confluence_create_page` | Create new page (markdown โ†’ ADF). Inline image embedding not supported in v1.2.0. |
309
- | `confluence_update_page` | Update existing page (markdown โ†’ ADF) |
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) |
310
183
  | `confluence_delete_page` | Delete a page |
311
184
  | `confluence_get_spaces` | List all spaces |
312
- | `confluence_get_pages_by_space` | Get pages from specific space |
313
- | `confluence_get_page_children` | Get child pages of a parent page |
185
+ | `confluence_get_pages_by_space` | Get pages in a space |
186
+ | `confluence_get_page_children` | Get child pages |
314
187
  | `confluence_get_page_history` | Get page version history |
315
- | `confluence_get_attachments` | List attachments on a page |
316
- | `confluence_add_attachment` | Add attachment to a page |
317
- | `confluence_delete_attachment` | Delete attachment from a page |
318
- | `confluence_embed_image` | NOT SUPPORTED in v1.2.0 โ€” returns an error. Use `confluence_add_attachment`. |
319
- | `confluence_get_comments` | Get footer comments on a page โ€” returns ADF JSON `body` |
320
- | `confluence_add_comment` | Add footer comment (markdown โ†’ ADF) |
321
- | `confluence_update_comment` | Update existing footer comment (markdown โ†’ ADF) |
322
- | `confluence_delete_comment` | Delete comment from a page |
323
- | `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 |
324
196
  | `confluence_add_labels` | Add labels to a page |
325
- | `confluence_remove_label` | Remove a label from a page |
326
-
327
- ### Jira Tools (48 tools)
328
-
329
- | Tool | Description |
330
- |------|-------------|
331
- | **Core** | |
332
- | `jira_search_issues` | Search issues by text, filters, or JQL |
333
- | `jira_get_issue` | Get specific issue by key |
334
- | `jira_create_issue` | Create new issue with custom fields |
335
- | `jira_update_issue` | Update existing issue |
336
- | `jira_delete_issue` | Delete issue with optional subtask deletion |
337
- | `jira_get_projects` | List all projects |
338
- | `jira_get_issue_types` | Get available issue types for a project |
339
- | `jira_get_fields` | Discover available standard and custom fields |
340
- | `jira_lookup_user` | Look up users by name or email |
341
- | **Comments** | |
342
- | `jira_add_comment` | Add comment to issue |
343
- | `jira_get_comments` | Get comments on an issue |
344
- | `jira_update_comment` | Update existing comment |
345
- | `jira_delete_comment` | Delete comment from issue |
346
- | **Transitions** | |
347
- | `jira_get_issue_transitions` | Get available transitions |
348
- | `jira_transition_issue` | Change issue status |
349
- | `jira_transition_issue_interactive` | Change status with smart field handling |
350
- | **Attachments** | |
351
- | `jira_get_attachments` | List attachments on an issue |
352
- | `jira_add_attachment` | Add attachment to issue |
353
- | `jira_delete_attachment` | Delete attachment from issue |
354
- | **Issue Links** | |
355
- | `jira_get_issue_links` | Get linked issues |
356
- | `jira_create_issue_link` | Create link between issues |
357
- | `jira_delete_issue_link` | Delete issue link |
358
- | `jira_get_link_types` | Get available link types |
359
- | **Worklogs** | |
360
- | `jira_get_worklogs` | Get work logs on an issue |
361
- | `jira_add_worklog` | Add work log entry |
362
- | `jira_update_worklog` | Update work log entry |
363
- | `jira_delete_worklog` | Delete work log entry |
364
- | **Watchers** | |
365
- | `jira_get_watchers` | Get issue watchers |
366
- | `jira_add_watcher` | Add watcher to issue |
367
- | `jira_remove_watcher` | Remove watcher from issue |
368
- | **Subtasks** | |
369
- | `jira_get_subtasks` | Get subtasks of an issue |
370
- | `jira_create_subtask` | Create subtask for an issue |
371
- | **Labels** | |
372
- | `jira_get_labels` | Get available labels |
373
- | `jira_add_labels` | Add labels to an issue |
374
- | `jira_remove_labels` | Remove labels from an issue |
375
- | **History** | |
376
- | `jira_get_issue_history` | Get issue change history |
377
- | **Agile / Sprints** | |
378
- | `jira_get_agile_boards` | List agile boards with optional filters |
379
- | `jira_get_board_issues` | Get issues on a board |
380
- | `jira_get_sprints` | Get sprints for a board |
381
- | `jira_get_sprint_issues` | Get issues in a sprint |
382
- | `jira_create_sprint` | Create a new sprint |
383
- | `jira_update_sprint` | Update sprint (name, state, dates, goal) |
384
- | **Versions / Releases** | |
385
- | `jira_get_project_versions` | Get all versions for a project |
386
- | `jira_create_version` | Create a new version/release |
387
- | `jira_update_version` | Update version (release, archive, dates) |
388
- | **Batch & Dev** | |
389
- | `jira_batch_create_issues` | Bulk create up to 50 issues |
390
- | `jira_get_dev_status` | Get linked PRs, branches, commits |
391
- | **Epic** | |
392
- | `jira_link_to_epic` | Link an issue to an epic |
393
-
394
- ### Bitbucket Tools (16 tools)
197
+ | `confluence_remove_label` | Remove a label |
198
+
199
+ ### Jira (49 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`, `move_issues_to_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 (17 tools)
395
221
 
396
222
  | Tool | Description |
397
223
  |------|-------------|
398
- | `bitbucket_get_repositories` | List repositories in workspace |
399
- | `bitbucket_get_repository` | Get specific repository details |
400
- | `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 |
401
227
  | `bitbucket_get_pull_requests` | List pull requests |
402
- | `bitbucket_get_pull_request` | Get specific PR with diff |
403
- | `bitbucket_create_pull_request` | Create new pull request |
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 |
404
231
  | `bitbucket_get_branches` | List branches |
405
232
  | `bitbucket_get_commits` | List commits |
406
233
  | `bitbucket_get_issues` | List repository issues |
407
- | `bitbucket_create_issue` | Create new issue |
234
+ | `bitbucket_create_issue` | Create an issue |
408
235
  | `bitbucket_get_pr_comments` | Get PR comments |
409
- | `bitbucket_add_pr_comment` | Add comment to a PR |
410
- | `bitbucket_update_pr_comment` | Update PR comment |
411
- | `bitbucket_delete_pr_comment` | Delete PR comment |
412
- | `bitbucket_resolve_pr_comment` | Resolve a PR comment |
413
- | `bitbucket_unresolve_pr_comment` | Unresolve a PR comment |
414
-
415
- ## Example Usage with AI Assistant
416
-
417
- ```
418
- User: "Search for pages about API documentation in Confluence"
419
- AI: Uses confluence_search_pages with query "API documentation"
420
-
421
- User: "Create a new Jira issue for the bug I found"
422
- AI: Uses jira_create_issue with appropriate project, summary, and description
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` | Mark a PR comment thread as resolved |
240
+ | `bitbucket_unresolve_pr_comment` | Reopen (unresolve) a PR comment thread |
423
241
 
424
- User: "Move this Jira ticket to Code Review status"
425
- AI: Uses jira_transition_issue_interactive which automatically:
426
- - Analyzes the issue content for context
427
- - Provides smart suggestions for required fields
428
- - Handles transition with minimal user input
242
+ ### PR comment resolution (v1.3.0+)
429
243
 
430
- User: "What pull requests are open in my main repository?"
431
- AI: Uses bitbucket_get_pull_requests with your repository name
244
+ - `bitbucket_resolve_pr_comment` / `bitbucket_unresolve_pr_comment` use Bitbucket's dedicated resolution sub-resource (`POST`/`DELETE .../comments/{id}/resolve`) and return the refreshed comment.
245
+ - **Top-level comments only** -- Bitbucket only allows resolving/unresolving top-level review comments, not replies. Calling these on a reply returns `Comment is not a top-level comment`.
246
+ - Comments returned by `bitbucket_get_pr_comments`, `bitbucket_resolve_pr_comment`, and `bitbucket_unresolve_pr_comment` now include a `resolved` boolean. When a comment is resolved, the single-comment responses also include `resolvedOn` (ISO timestamp) and `resolvedBy` (display name); these resolution details are not present in the bulk list response.
432
247
 
433
- User: "Create 10 issues for the sprint backlog"
434
- AI: Uses jira_batch_create_issues to create all at once
248
+ ## Confluence Content Format (v1.2.0+)
435
249
 
436
- User: "Show me the active sprint and its issues"
437
- AI: Uses jira_get_sprints then jira_get_sprint_issues
438
- ```
250
+ Confluence pages and comments use **ADF (Atlassian Document Format)** natively:
439
251
 
440
- ### Smart Field Handling Examples
252
+ - **Input** -- `create_page`, `update_page`, `add_comment`, `update_comment` accept **Markdown**, which the server converts to ADF using the official `@atlaskit/editor-markdown-transformer`.
253
+ - **Output** -- `get_page`, `get_comments` return ADF JSON (an object, not a string).
254
+ - **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._
255
+ - **Inline images** -- Not currently supported via ADF media nodes (requires Atlassian Media API tokens). Use `confluence_add_attachment` instead.
441
256
 
442
- ```
443
- Scenario: Transitioning a template configuration issue
444
- Issue: "Update notification template to use 'Prefr App'"
445
- Smart Suggestion: DB Script = "No" (Template changes use MOFU tool)
446
- Test Cases = "No" (Template changes don't require separate tests)
447
-
448
- Scenario: Transitioning a new feature development issue
449
- Issue: "Implement user authentication system"
450
- Smart Suggestion: DB Script = "Yes" (New features typically need database changes)
451
- Test Cases = "Yes" (New features require comprehensive testing)
452
- ```
257
+ ## Project Structure
453
258
 
454
- ## Development
455
-
456
- ### Project Structure
457
259
  ```
458
260
  src/
459
- โ”œโ”€โ”€ index.ts # Main MCP server & tool routing
460
- โ”œโ”€โ”€ types.ts # TypeScript interfaces
461
- โ”œโ”€โ”€ config.ts # Configuration management
462
- โ”œโ”€โ”€ constants.ts # Application-wide constants
463
- โ”œโ”€โ”€ error-handler.ts # Structured error handling
464
- โ”œโ”€โ”€ clients/
465
- โ”‚ โ”œโ”€โ”€ base-client.ts # Base HTTP client
466
- โ”‚ โ”œโ”€โ”€ confluence-client.ts
467
- โ”‚ โ”œโ”€โ”€ jira-client.ts
468
- โ”‚ โ””โ”€โ”€ bitbucket-client.ts
469
- โ”œโ”€โ”€ services/
470
- โ”‚ โ”œโ”€โ”€ confluence.ts # Confluence API service
471
- โ”‚ โ”œโ”€โ”€ jira.ts # Jira API service (with smart field handling)
472
- โ”‚ โ””โ”€โ”€ bitbucket.ts # Bitbucket API service
473
- โ”œโ”€โ”€ tools/
474
- โ”‚ โ”œโ”€โ”€ index.ts # Tool aggregation
475
- โ”‚ โ”œโ”€โ”€ confluence-tools.ts # Confluence tool definitions
476
- โ”‚ โ”œโ”€โ”€ jira-tools.ts # Jira tool definitions
477
- โ”‚ โ””โ”€โ”€ bitbucket-tools.ts # Bitbucket tool definitions
478
- โ””โ”€โ”€ handlers/
479
- โ”œโ”€โ”€ confluence-handlers.ts
480
- โ”œโ”€โ”€ jira-handlers.ts
481
- โ””โ”€โ”€ bitbucket-handlers.ts
482
- ```
483
-
484
- ### Building and Testing
485
-
486
- ```bash
487
- # Build
488
- npm run build
489
-
490
- # Development with auto-reload
491
- npm run dev
492
-
493
- # Clean build artifacts
494
- npm run clean
261
+ โ”œโ”€โ”€ index.ts # Server entry point and tool routing
262
+ โ”œโ”€โ”€ config.ts # Environment variable loading and validation
263
+ โ”œโ”€โ”€ types.ts # TypeScript interfaces
264
+ โ”œโ”€โ”€ constants.ts # Shared constants
265
+ โ”œโ”€โ”€ error-handler.ts # Structured error responses
266
+ โ”œโ”€โ”€ formatters/ # Markdown-to-ADF and ADF-to-text converters
267
+ โ”œโ”€โ”€ clients/ # HTTP clients (one per Atlassian product)
268
+ โ”œโ”€โ”€ services/ # Business logic for each product
269
+ โ”‚ โ””โ”€โ”€ jira/ # Jira sub-modules (agile, comments, transitions, etc.)
270
+ โ”œโ”€โ”€ handlers/ # MCP request handlers
271
+ โ”œโ”€โ”€ tools/ # MCP tool definitions (schemas)
272
+ โ”œโ”€โ”€ registry/ # Tool dispatch registry
273
+ โ””โ”€โ”€ snapshot/ # Snapshot safety net (auto-backup before mutations)
495
274
  ```
496
275
 
497
- ## Security Considerations
498
-
499
- - API tokens are stored in environment variables
500
- - All API calls use HTTPS
501
- - Tokens should have minimal required permissions
502
- - Never commit `.env` files to version control
503
-
504
- ## Error Handling
505
-
506
- The server includes comprehensive error handling:
507
- - API authentication errors
508
- - Rate limiting responses
509
- - Network connectivity issues
510
- - Invalid parameters
511
- - Resource not found errors
512
- - Actionable tips for common issues
513
-
514
- ## Rate Limiting
515
-
516
- Respects Atlassian API rate limits:
517
- - Jira Cloud: 10 requests per second
518
- - Confluence Cloud: 10 requests per second
519
- - Bitbucket Cloud: 1000 requests per hour
520
-
521
- ## Contributing
276
+ ## Security
522
277
 
523
- 1. Fork the repository
524
- 2. Create a feature branch
525
- 3. Make your changes
526
- 4. Add tests if applicable
527
- 5. Submit a pull request
278
+ - Credentials are read from environment variables only; never committed to source control.
279
+ - All API calls use HTTPS with Basic Auth (base64-encoded `email:token`).
280
+ - Grant tokens the minimum required permissions.
281
+ - Snapshots are stored locally in `~/.atlassian-mcp-snapshots` by default.
528
282
 
529
283
  ## License
530
284
 
531
- MIT License - see LICENSE file for details
285
+ [MIT](LICENSE)
532
286
 
533
- ## Support
287
+ ## Links
534
288
 
535
- - **npm package**: [@jagadeesh52423/atlassian-mcp-server](https://www.npmjs.com/package/@jagadeesh52423/atlassian-mcp-server)
536
- - **Issues & Feature Requests**: [GitHub Issues](https://github.com/jagadeeshpulamarasetti/atlassian-mcp-server/issues)
537
- - **Source Code**: [GitHub Repository](https://github.com/jagadeeshpulamarasetti/atlassian-mcp-server)
289
+ - **npm:** [@jagadeesh52423/atlassian-mcp-server](https://www.npmjs.com/package/@jagadeesh52423/atlassian-mcp-server)
290
+ - **Source:** [GitHub](https://github.com/jagadeeshpulamarasetti/atlassian-mcp-server)
291
+ - **Issues:** [GitHub Issues](https://github.com/jagadeeshpulamarasetti/atlassian-mcp-server/issues)