@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.
Files changed (85) hide show
  1. package/.env.example +6 -1
  2. package/README.md +154 -395
  3. package/dist/config.d.ts +2 -1
  4. package/dist/config.d.ts.map +1 -1
  5. package/dist/config.js +7 -0
  6. package/dist/config.js.map +1 -1
  7. package/dist/constants.d.ts +0 -4
  8. package/dist/constants.d.ts.map +1 -1
  9. package/dist/constants.js +0 -5
  10. package/dist/constants.js.map +1 -1
  11. package/dist/formatters/adf-formatter.d.ts +5 -2
  12. package/dist/formatters/adf-formatter.d.ts.map +1 -1
  13. package/dist/formatters/adf-formatter.js +271 -52
  14. package/dist/formatters/adf-formatter.js.map +1 -1
  15. package/dist/formatters/adf-to-text.d.ts +9 -0
  16. package/dist/formatters/adf-to-text.d.ts.map +1 -0
  17. package/dist/formatters/adf-to-text.js +25 -0
  18. package/dist/formatters/adf-to-text.js.map +1 -0
  19. package/dist/formatters/index.d.ts +7 -1
  20. package/dist/formatters/index.d.ts.map +1 -1
  21. package/dist/formatters/index.js +7 -1
  22. package/dist/formatters/index.js.map +1 -1
  23. package/dist/formatters/markdown-to-adf.d.ts +6 -0
  24. package/dist/formatters/markdown-to-adf.d.ts.map +1 -0
  25. package/dist/formatters/markdown-to-adf.js +27 -0
  26. package/dist/formatters/markdown-to-adf.js.map +1 -0
  27. package/dist/handlers/bitbucket-handlers.d.ts +7 -0
  28. package/dist/handlers/bitbucket-handlers.d.ts.map +1 -1
  29. package/dist/handlers/bitbucket-handlers.js +20 -0
  30. package/dist/handlers/bitbucket-handlers.js.map +1 -1
  31. package/dist/handlers/confluence-handlers.d.ts +2 -0
  32. package/dist/handlers/confluence-handlers.d.ts.map +1 -1
  33. package/dist/handlers/confluence-handlers.js +2 -2
  34. package/dist/handlers/confluence-handlers.js.map +1 -1
  35. package/dist/index.js +12 -5
  36. package/dist/index.js.map +1 -1
  37. package/dist/services/bitbucket.d.ts +5 -0
  38. package/dist/services/bitbucket.d.ts.map +1 -1
  39. package/dist/services/bitbucket.js +23 -4
  40. package/dist/services/bitbucket.js.map +1 -1
  41. package/dist/services/confluence.d.ts +79 -12
  42. package/dist/services/confluence.d.ts.map +1 -1
  43. package/dist/services/confluence.js +291 -310
  44. package/dist/services/confluence.js.map +1 -1
  45. package/dist/services/jira/base.d.ts +0 -1
  46. package/dist/services/jira/base.d.ts.map +1 -1
  47. package/dist/services/jira/base.js +2 -3
  48. package/dist/services/jira/base.js.map +1 -1
  49. package/dist/snapshot/decorators/bitbucket-snapshots.d.ts +4 -0
  50. package/dist/snapshot/decorators/bitbucket-snapshots.d.ts.map +1 -0
  51. package/dist/snapshot/decorators/bitbucket-snapshots.js +65 -0
  52. package/dist/snapshot/decorators/bitbucket-snapshots.js.map +1 -0
  53. package/dist/snapshot/decorators/confluence-snapshots.d.ts +4 -0
  54. package/dist/snapshot/decorators/confluence-snapshots.d.ts.map +1 -0
  55. package/dist/snapshot/decorators/confluence-snapshots.js +71 -0
  56. package/dist/snapshot/decorators/confluence-snapshots.js.map +1 -0
  57. package/dist/snapshot/decorators/jira-snapshots.d.ts +4 -0
  58. package/dist/snapshot/decorators/jira-snapshots.d.ts.map +1 -0
  59. package/dist/snapshot/decorators/jira-snapshots.js +171 -0
  60. package/dist/snapshot/decorators/jira-snapshots.js.map +1 -0
  61. package/dist/snapshot/index.d.ts +7 -0
  62. package/dist/snapshot/index.d.ts.map +1 -0
  63. package/dist/snapshot/index.js +7 -0
  64. package/dist/snapshot/index.js.map +1 -0
  65. package/dist/snapshot/snapshot-decorator.d.ts +4 -0
  66. package/dist/snapshot/snapshot-decorator.d.ts.map +1 -0
  67. package/dist/snapshot/snapshot-decorator.js +74 -0
  68. package/dist/snapshot/snapshot-decorator.js.map +1 -0
  69. package/dist/snapshot/snapshot-manager.d.ts +9 -0
  70. package/dist/snapshot/snapshot-manager.d.ts.map +1 -0
  71. package/dist/snapshot/snapshot-manager.js +56 -0
  72. package/dist/snapshot/snapshot-manager.js.map +1 -0
  73. package/dist/snapshot/snapshot-types.d.ts +26 -0
  74. package/dist/snapshot/snapshot-types.d.ts.map +1 -0
  75. package/dist/snapshot/snapshot-types.js +2 -0
  76. package/dist/snapshot/snapshot-types.js.map +1 -0
  77. package/dist/tools/bitbucket-tools.d.ts.map +1 -1
  78. package/dist/tools/bitbucket-tools.js +30 -0
  79. package/dist/tools/bitbucket-tools.js.map +1 -1
  80. package/dist/tools/confluence-tools.d.ts.map +1 -1
  81. package/dist/tools/confluence-tools.js +17 -12
  82. package/dist/tools/confluence-tools.js.map +1 -1
  83. package/dist/types.d.ts +50 -2
  84. package/dist/types.d.ts.map +1 -1
  85. 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
  [![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
- ## Feature Comparison
9
-
10
- How we stack up against the official Atlassian MCP server and the popular sooperset/mcp-atlassian:
11
-
12
- ### Confluence
13
-
14
- | Feature | Ours | Official Atlassian | sooperset |
15
- |---|:---:|:---:|:---:|
16
- | Search / Get / Create / Update page | YES | YES | YES |
17
- | Delete page | YES | NO | YES |
18
- | Get spaces / pages by space | YES | YES | NO |
19
- | Get child pages | YES | YES | YES |
20
- | Get/Add comments | YES | YES | YES |
21
- | **Update/Delete comment** | **YES** | NO | NO |
22
- | Get/Add/Delete attachments | YES | NO | YES |
23
- | **Embed image (with positioning)** | **YES** | NO | NO |
24
- | **Create page with inline images** | **YES** | NO | NO |
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
- ### Option 1: Install from npm (Recommended)
28
+ ### From npm (recommended)
123
29
 
124
30
  ```bash
125
31
  npm install -g @jagadeesh52423/atlassian-mcp-server
126
32
  ```
127
33
 
128
- Or use with npx without installing:
34
+ Or run without installing:
35
+
129
36
  ```bash
130
37
  npx @jagadeesh52423/atlassian-mcp-server
131
38
  ```
132
39
 
133
- ### Option 2: Install from source
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. Copy the environment template:
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 Configuration
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 Configuration
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
- # Optional: OAuth Configuration (for advanced auth)
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
- ### Getting API Tokens
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
- #### Atlassian API Token
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
- #### Bitbucket API Token
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
- **Note**: App passwords are deprecated as of September 9, 2025. Use API tokens instead.
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 Server
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
- If running from source:
215
- ```bash
108
+ # From source
216
109
  npm start
217
- ```
218
110
 
219
- For development with auto-reload:
220
- ```bash
111
+ # Development (auto-reload)
221
112
  npm run dev
222
113
  ```
223
114
 
224
- ### Integration with Claude Desktop
115
+ ### Claude Desktop integration
225
116
 
226
- Add the following to your Claude Desktop configuration file:
117
+ Add one of the following to your Claude Desktop config:
227
118
 
228
- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
229
- **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`
230
121
 
231
- #### If installed globally via npm:
232
122
  ```json
233
123
  {
234
124
  "mcpServers": {
235
125
  "atlassian": {
236
- "command": "atlassian-mcp-server",
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-confluence-api-token",
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-jira-api-token",
134
+ "JIRA_API_TOKEN": "your-token",
244
135
  "BITBUCKET_WORKSPACE": "your-workspace",
245
136
  "BITBUCKET_USERNAME": "your-username",
246
- "BITBUCKET_API_TOKEN": "your-bitbucket-api-token"
137
+ "BITBUCKET_API_TOKEN": "your-token"
247
138
  }
248
139
  }
249
140
  }
250
141
  }
251
142
  ```
252
143
 
253
- #### If using npx:
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": "npx",
259
- "args": ["-y", "@jagadeesh52423/atlassian-mcp-server"],
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
- #### If installed from source:
159
+ **From source:**
277
160
  ```json
278
161
  {
279
162
  "mcpServers": {
280
163
  "atlassian": {
281
164
  "command": "node",
282
- "args": ["/path/to/your/atlassian-mcp-server/dist/index.js"]
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 Tools (20 tools)
175
+ ### Confluence (20 tools)
291
176
 
292
177
  | Tool | Description |
293
178
  |------|-------------|
294
- | `confluence_search_pages` | Search pages by text query |
295
- | `confluence_get_page` | Get specific page by ID |
296
- | `confluence_create_page` | Create new page with content and optional inline images |
297
- | `confluence_update_page` | Update existing page |
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 from specific space |
301
- | `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 |
302
187
  | `confluence_get_page_history` | Get page version history |
303
- | `confluence_get_attachments` | List attachments on a page |
304
- | `confluence_add_attachment` | Add attachment to a page |
305
- | `confluence_delete_attachment` | Delete attachment from a page |
306
- | `confluence_embed_image` | Embed image in page content with positioning |
307
- | `confluence_get_comments` | Get comments on a page |
308
- | `confluence_add_comment` | Add comment to a page |
309
- | `confluence_update_comment` | Update existing comment |
310
- | `confluence_delete_comment` | Delete comment from a page |
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 from a page |
314
-
315
- ### Jira Tools (48 tools)
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
- | **Core** | |
320
- | `jira_search_issues` | Search issues by text, filters, or JQL |
321
- | `jira_get_issue` | Get specific issue by key |
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 specific PR with diff |
391
- | `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 |
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 new issue |
234
+ | `bitbucket_create_issue` | Create an issue |
396
235
  | `bitbucket_get_pr_comments` | Get PR comments |
397
- | `bitbucket_add_pr_comment` | Add comment to a PR |
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
- ## Example Usage with AI Assistant
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
- User: "Create a new Jira issue for the bug I found"
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
- User: "Move this Jira ticket to Code Review status"
413
- AI: Uses jira_transition_issue_interactive which automatically:
414
- - Analyzes the issue content for context
415
- - Provides smart suggestions for required fields
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
- ### Smart Field Handling Examples
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 # Main MCP server & tool routing
448
- ├── types.ts # TypeScript interfaces
449
- ├── config.ts # Configuration management
450
- ├── constants.ts # Application-wide constants
451
- ├── error-handler.ts # Structured error handling
452
- ├── clients/
453
- │ ├── base-client.ts # Base HTTP client
454
- │ ├── confluence-client.ts
455
- │ ├── jira-client.ts
456
- │ └── bitbucket-client.ts
457
- ├── services/
458
- │ ├── confluence.ts # Confluence API service
459
- │ ├── jira.ts # Jira API service (with smart field handling)
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 Considerations
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
- 1. Fork the repository
512
- 2. Create a feature branch
513
- 3. Make your changes
514
- 4. Add tests if applicable
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 License - see LICENSE file for details
278
+ [MIT](LICENSE)
520
279
 
521
- ## Support
280
+ ## Links
522
281
 
523
- - **npm package**: [@jagadeesh52423/atlassian-mcp-server](https://www.npmjs.com/package/@jagadeesh52423/atlassian-mcp-server)
524
- - **Issues & Feature Requests**: [GitHub Issues](https://github.com/jagadeeshpulamarasetti/atlassian-mcp-server/issues)
525
- - **Source Code**: [GitHub Repository](https://github.com/jagadeeshpulamarasetti/atlassian-mcp-server)
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)