@crypto512/jicon-mcp 0.1.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 (103) hide show
  1. package/.env.example +9 -0
  2. package/.jicon.json.custom +21 -0
  3. package/.jicon.json.example +15 -0
  4. package/.jicon.json.readonly +15 -0
  5. package/CLAUDE.md +596 -0
  6. package/CONTRIBUTING.md +371 -0
  7. package/DEVELOPMENT.md +400 -0
  8. package/LICENSE +21 -0
  9. package/README.md +300 -0
  10. package/TOOL_LIST.md +435 -0
  11. package/dist/config/constants.d.ts +14 -0
  12. package/dist/config/constants.d.ts.map +1 -0
  13. package/dist/config/constants.js +18 -0
  14. package/dist/config/constants.js.map +1 -0
  15. package/dist/config/loader.d.ts +35 -0
  16. package/dist/config/loader.d.ts.map +1 -0
  17. package/dist/config/loader.js +108 -0
  18. package/dist/config/loader.js.map +1 -0
  19. package/dist/config/types.d.ts +130 -0
  20. package/dist/config/types.d.ts.map +1 -0
  21. package/dist/config/types.js +32 -0
  22. package/dist/config/types.js.map +1 -0
  23. package/dist/confluence/client.d.ts +30 -0
  24. package/dist/confluence/client.d.ts.map +1 -0
  25. package/dist/confluence/client.js +176 -0
  26. package/dist/confluence/client.js.map +1 -0
  27. package/dist/confluence/defaults.d.ts +23 -0
  28. package/dist/confluence/defaults.d.ts.map +1 -0
  29. package/dist/confluence/defaults.js +29 -0
  30. package/dist/confluence/defaults.js.map +1 -0
  31. package/dist/confluence/formatters.d.ts +22 -0
  32. package/dist/confluence/formatters.d.ts.map +1 -0
  33. package/dist/confluence/formatters.js +125 -0
  34. package/dist/confluence/formatters.js.map +1 -0
  35. package/dist/confluence/tools.d.ts +266 -0
  36. package/dist/confluence/tools.d.ts.map +1 -0
  37. package/dist/confluence/tools.js +376 -0
  38. package/dist/confluence/tools.js.map +1 -0
  39. package/dist/confluence/types.d.ts +122 -0
  40. package/dist/confluence/types.d.ts.map +1 -0
  41. package/dist/confluence/types.js +5 -0
  42. package/dist/confluence/types.js.map +1 -0
  43. package/dist/index.d.ts +6 -0
  44. package/dist/index.d.ts.map +1 -0
  45. package/dist/index.js +161 -0
  46. package/dist/index.js.map +1 -0
  47. package/dist/jira/client.d.ts +46 -0
  48. package/dist/jira/client.d.ts.map +1 -0
  49. package/dist/jira/client.js +178 -0
  50. package/dist/jira/client.js.map +1 -0
  51. package/dist/jira/defaults.d.ts +19 -0
  52. package/dist/jira/defaults.d.ts.map +1 -0
  53. package/dist/jira/defaults.js +57 -0
  54. package/dist/jira/defaults.js.map +1 -0
  55. package/dist/jira/formatters.d.ts +22 -0
  56. package/dist/jira/formatters.d.ts.map +1 -0
  57. package/dist/jira/formatters.js +128 -0
  58. package/dist/jira/formatters.js.map +1 -0
  59. package/dist/jira/tools.d.ts +334 -0
  60. package/dist/jira/tools.d.ts.map +1 -0
  61. package/dist/jira/tools.js +372 -0
  62. package/dist/jira/tools.js.map +1 -0
  63. package/dist/jira/types.d.ts +110 -0
  64. package/dist/jira/types.d.ts.map +1 -0
  65. package/dist/jira/types.js +5 -0
  66. package/dist/jira/types.js.map +1 -0
  67. package/dist/permissions/filter.d.ts +30 -0
  68. package/dist/permissions/filter.d.ts.map +1 -0
  69. package/dist/permissions/filter.js +89 -0
  70. package/dist/permissions/filter.js.map +1 -0
  71. package/dist/permissions/tool-registry.d.ts +49 -0
  72. package/dist/permissions/tool-registry.d.ts.map +1 -0
  73. package/dist/permissions/tool-registry.js +111 -0
  74. package/dist/permissions/tool-registry.js.map +1 -0
  75. package/dist/tempo/client.d.ts +32 -0
  76. package/dist/tempo/client.d.ts.map +1 -0
  77. package/dist/tempo/client.js +125 -0
  78. package/dist/tempo/client.js.map +1 -0
  79. package/dist/tempo/formatters.d.ts +30 -0
  80. package/dist/tempo/formatters.d.ts.map +1 -0
  81. package/dist/tempo/formatters.js +172 -0
  82. package/dist/tempo/formatters.js.map +1 -0
  83. package/dist/tempo/tools.d.ts +184 -0
  84. package/dist/tempo/tools.d.ts.map +1 -0
  85. package/dist/tempo/tools.js +392 -0
  86. package/dist/tempo/tools.js.map +1 -0
  87. package/dist/tempo/types.d.ts +98 -0
  88. package/dist/tempo/types.d.ts.map +1 -0
  89. package/dist/tempo/types.js +5 -0
  90. package/dist/tempo/types.js.map +1 -0
  91. package/dist/types.d.ts +27 -0
  92. package/dist/types.d.ts.map +1 -0
  93. package/dist/types.js +6 -0
  94. package/dist/types.js.map +1 -0
  95. package/dist/utils/http-client.d.ts +22 -0
  96. package/dist/utils/http-client.d.ts.map +1 -0
  97. package/dist/utils/http-client.js +137 -0
  98. package/dist/utils/http-client.js.map +1 -0
  99. package/dist/utils/response-formatter.d.ts +8 -0
  100. package/dist/utils/response-formatter.d.ts.map +1 -0
  101. package/dist/utils/response-formatter.js +38 -0
  102. package/dist/utils/response-formatter.js.map +1 -0
  103. package/package.json +50 -0
package/.env.example ADDED
@@ -0,0 +1,9 @@
1
+ # Jira Configuration
2
+ JIRA_URL=https://jira.example.com
3
+ JIRA_USERNAME=your-email@example.com
4
+ JIRA_API_TOKEN=your-jira-api-token
5
+
6
+ # Confluence Configuration
7
+ CONFLUENCE_URL=https://confluence.example.com
8
+ CONFLUENCE_USERNAME=your-email@example.com
9
+ CONFLUENCE_API_TOKEN=your-confluence-api-token
@@ -0,0 +1,21 @@
1
+ {
2
+ "jira": {
3
+ "url": "https://jira.example.com",
4
+ "username": "your-email@example.com",
5
+ "token": "your-jira-api-token"
6
+ },
7
+ "confluence": {
8
+ "url": "https://confluence.example.com",
9
+ "username": "your-email@example.com",
10
+ "token": "your-confluence-api-token"
11
+ },
12
+ "permissions": {
13
+ "mode": "custom",
14
+ "whitelist": [
15
+ "jira_read",
16
+ "jira_create_issue",
17
+ "confluence_read"
18
+ ],
19
+ "blacklist": []
20
+ }
21
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "jira": {
3
+ "url": "https://jira.example.com",
4
+ "username": "your-email@example.com",
5
+ "token": "your-jira-api-token"
6
+ },
7
+ "confluence": {
8
+ "url": "https://confluence.example.com",
9
+ "username": "your-email@example.com",
10
+ "token": "your-confluence-api-token"
11
+ },
12
+ "permissions": {
13
+ "mode": "full"
14
+ }
15
+ }
@@ -0,0 +1,15 @@
1
+ {
2
+ "jira": {
3
+ "url": "https://jira.example.com",
4
+ "username": "your-email@example.com",
5
+ "token": "your-jira-api-token"
6
+ },
7
+ "confluence": {
8
+ "url": "https://confluence.example.com",
9
+ "username": "your-email@example.com",
10
+ "token": "your-confluence-api-token"
11
+ },
12
+ "permissions": {
13
+ "mode": "readonly"
14
+ }
15
+ }
package/CLAUDE.md ADDED
@@ -0,0 +1,596 @@
1
+ # Jira and Confluence MCP Server
2
+
3
+ ## Overview
4
+
5
+ A Model Context Protocol (MCP) server that provides seamless integration with Atlassian Jira and Confluence Server/Data Center instances. This server enables AI assistants to interact with Jira issues, projects, boards, and Confluence pages, spaces, and content through a comprehensive set of tools.
6
+
7
+ ## Features
8
+
9
+ ### Jira Integration
10
+ - **Issue Management**: Search, create, update, and transition issues
11
+ - **Project Operations**: List projects, components, and versions
12
+ - **Agile Support**: Access boards, sprints, and backlogs
13
+ - **Comments & Collaboration**: Add and retrieve comments on issues
14
+ - **Issue Linking**: Create and manage relationships between issues
15
+ - **Advanced Search**: Execute JQL queries for complex issue searches
16
+
17
+ ### Confluence Integration
18
+ - **Content Management**: Create, read, update Confluence pages
19
+ - **Search Capabilities**: Execute CQL queries to find content
20
+ - **Space Operations**: List and manage Confluence spaces
21
+ - **Page Hierarchy**: Navigate parent-child page relationships
22
+ - **Attachments**: Upload and retrieve file attachments
23
+ - **Comments**: Add and view page comments
24
+
25
+ ## Installation
26
+
27
+ ```bash
28
+ # Install globally
29
+ npm install -g @crypto512/jicon-mcp
30
+
31
+ # Or run directly with npx
32
+ npx @crypto512/jicon-mcp
33
+ ```
34
+
35
+ ## Configuration
36
+
37
+ The server supports multiple authentication methods depending on your Atlassian instance type.
38
+
39
+ ### Jira/Confluence Cloud (Basic Auth)
40
+
41
+ For Cloud instances, use email + API token with Basic authentication:
42
+
43
+ ```bash
44
+ # Jira Configuration
45
+ JIRA_URL=https://your-domain.atlassian.net
46
+ JIRA_USERNAME=your-email@example.com
47
+ JIRA_API_TOKEN=your-jira-api-token
48
+
49
+ # Confluence Configuration
50
+ CONFLUENCE_URL=https://your-domain.atlassian.net/wiki
51
+ CONFLUENCE_USERNAME=your-email@example.com
52
+ CONFLUENCE_API_TOKEN=your-confluence-api-token
53
+ ```
54
+
55
+ ### Jira/Confluence Data Center 8.14+ (Bearer Auth with PAT)
56
+
57
+ For Data Center instances version 8.14 and later (including 9.x), use Personal Access Tokens (PAT) with Bearer authentication. Simply omit the `USERNAME` variable or set `AUTH_TYPE=bearer`:
58
+
59
+ ```bash
60
+ # Jira Configuration (PAT - recommended for Data Center)
61
+ JIRA_URL=https://jira.example.com
62
+ JIRA_API_TOKEN=your-personal-access-token
63
+ JIRA_AUTH_TYPE=bearer
64
+
65
+ # Confluence Configuration (PAT - recommended for Data Center)
66
+ CONFLUENCE_URL=https://confluence.example.com
67
+ CONFLUENCE_API_TOKEN=your-personal-access-token
68
+ CONFLUENCE_AUTH_TYPE=bearer
69
+ ```
70
+
71
+ **Note**: To generate a Personal Access Token in Jira/Confluence Data Center:
72
+ 1. Click your avatar → Profile
73
+ 2. Select "Personal access tokens" in the left menu
74
+ 3. Create a new token with appropriate permissions
75
+
76
+ ### Claude Desktop Configuration
77
+
78
+ #### For Jira/Confluence Cloud:
79
+
80
+ **MacOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
81
+ **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
82
+
83
+ ```json
84
+ {
85
+ "mcpServers": {
86
+ "jicon": {
87
+ "command": "npx",
88
+ "args": ["-y", "@crypto512/jicon-mcp"],
89
+ "env": {
90
+ "JIRA_URL": "https://your-domain.atlassian.net",
91
+ "JIRA_USERNAME": "your-email@example.com",
92
+ "JIRA_API_TOKEN": "your-jira-api-token",
93
+ "CONFLUENCE_URL": "https://your-domain.atlassian.net/wiki",
94
+ "CONFLUENCE_USERNAME": "your-email@example.com",
95
+ "CONFLUENCE_API_TOKEN": "your-confluence-api-token"
96
+ }
97
+ }
98
+ }
99
+ }
100
+ ```
101
+
102
+ #### For Jira/Confluence Data Center 8.14+ with PAT:
103
+
104
+ ```json
105
+ {
106
+ "mcpServers": {
107
+ "jicon": {
108
+ "command": "npx",
109
+ "args": ["-y", "@crypto512/jicon-mcp"],
110
+ "env": {
111
+ "JIRA_URL": "https://jira.example.com",
112
+ "JIRA_API_TOKEN": "your-personal-access-token",
113
+ "JIRA_AUTH_TYPE": "bearer",
114
+ "CONFLUENCE_URL": "https://confluence.example.com",
115
+ "CONFLUENCE_API_TOKEN": "your-personal-access-token",
116
+ "CONFLUENCE_AUTH_TYPE": "bearer"
117
+ }
118
+ }
119
+ }
120
+ }
121
+ ```
122
+
123
+ ## Tools
124
+
125
+ ### Jira Tools
126
+
127
+ #### `jira_search_issues`
128
+ Search for Jira issues using JQL (Jira Query Language).
129
+
130
+ **Parameters:**
131
+ - `jql` (string, required): JQL query string
132
+ - `maxResults` (number, optional): Maximum number of results (default: 50)
133
+ - `fields` (string[], optional): Specific fields to return
134
+
135
+ **Example:**
136
+ ```typescript
137
+ {
138
+ "jql": "project = PROJ AND status = 'In Progress'",
139
+ "maxResults": 10,
140
+ "fields": ["summary", "status", "assignee"]
141
+ }
142
+ ```
143
+
144
+ #### `jira_get_issue`
145
+ Get detailed information about a specific Jira issue.
146
+
147
+ **Parameters:**
148
+ - `issueKey` (string, required): Issue key (e.g., "PROJ-123")
149
+ - `fields` (string[], optional): Specific fields to return
150
+ - `expand` (string[], optional): Additional data to expand (e.g., "changelog", "renderedFields")
151
+
152
+ **Example:**
153
+ ```typescript
154
+ {
155
+ "issueKey": "PROJ-123",
156
+ "expand": ["changelog"]
157
+ }
158
+ ```
159
+
160
+ #### `jira_create_issue`
161
+ Create a new Jira issue.
162
+
163
+ **Parameters:**
164
+ - `projectKey` (string, required): Project key
165
+ - `issueType` (string, required): Issue type (e.g., "Bug", "Story", "Task")
166
+ - `summary` (string, required): Issue summary
167
+ - `description` (string, optional): Issue description
168
+ - `priority` (string, optional): Priority name
169
+ - `assignee` (string, optional): Assignee username
170
+ - `labels` (string[], optional): Array of labels
171
+ - `components` (string[], optional): Array of component names
172
+ - `customFields` (object, optional): Custom field values
173
+
174
+ **Example:**
175
+ ```typescript
176
+ {
177
+ "projectKey": "PROJ",
178
+ "issueType": "Bug",
179
+ "summary": "Login button not responding",
180
+ "description": "When clicking the login button, nothing happens",
181
+ "priority": "High",
182
+ "labels": ["ui", "authentication"]
183
+ }
184
+ ```
185
+
186
+ #### `jira_update_issue`
187
+ Update an existing Jira issue.
188
+
189
+ **Parameters:**
190
+ - `issueKey` (string, required): Issue key
191
+ - `fields` (object, required): Fields to update
192
+ - `notifyUsers` (boolean, optional): Send notifications (default: true)
193
+
194
+ **Example:**
195
+ ```typescript
196
+ {
197
+ "issueKey": "PROJ-123",
198
+ "fields": {
199
+ "summary": "Updated summary",
200
+ "priority": { "name": "Critical" }
201
+ }
202
+ }
203
+ ```
204
+
205
+ #### `jira_transition_issue`
206
+ Transition an issue to a different status.
207
+
208
+ **Parameters:**
209
+ - `issueKey` (string, required): Issue key
210
+ - `transitionName` (string, required): Transition name (e.g., "In Progress", "Done")
211
+ - `comment` (string, optional): Comment to add with transition
212
+ - `fields` (object, optional): Fields to update during transition
213
+
214
+ **Example:**
215
+ ```typescript
216
+ {
217
+ "issueKey": "PROJ-123",
218
+ "transitionName": "Done",
219
+ "comment": "Completed and tested"
220
+ }
221
+ ```
222
+
223
+ #### `jira_add_comment`
224
+ Add a comment to a Jira issue.
225
+
226
+ **Parameters:**
227
+ - `issueKey` (string, required): Issue key
228
+ - `comment` (string, required): Comment text (supports Jira markdown)
229
+ - `visibility` (object, optional): Visibility restrictions
230
+
231
+ **Example:**
232
+ ```typescript
233
+ {
234
+ "issueKey": "PROJ-123",
235
+ "comment": "This has been fixed in the latest build"
236
+ }
237
+ ```
238
+
239
+ #### `jira_get_issue_comments`
240
+ Retrieve comments from a Jira issue.
241
+
242
+ **Parameters:**
243
+ - `issueKey` (string, required): Issue key
244
+ - `maxResults` (number, optional): Maximum number of comments
245
+ - `orderBy` (string, optional): Sort order ("created" or "-created")
246
+
247
+ #### `jira_list_projects`
248
+ List all accessible Jira projects.
249
+
250
+ **Parameters:**
251
+ - `recent` (boolean, optional): Only return recent projects
252
+ - `expand` (string[], optional): Additional data to expand
253
+
254
+ #### `jira_get_project`
255
+ Get detailed information about a specific project.
256
+
257
+ **Parameters:**
258
+ - `projectKey` (string, required): Project key
259
+ - `expand` (string[], optional): Additional data to expand
260
+
261
+ #### `jira_get_transitions`
262
+ Get available transitions for an issue.
263
+
264
+ **Parameters:**
265
+ - `issueKey` (string, required): Issue key
266
+
267
+ #### `jira_link_issues`
268
+ Create a link between two issues.
269
+
270
+ **Parameters:**
271
+ - `issueKey` (string, required): Source issue key
272
+ - `linkedIssueKey` (string, required): Target issue key
273
+ - `linkType` (string, required): Link type (e.g., "Blocks", "Relates to")
274
+ - `comment` (string, optional): Comment for the link
275
+
276
+ **Example:**
277
+ ```typescript
278
+ {
279
+ "issueKey": "PROJ-123",
280
+ "linkedIssueKey": "PROJ-456",
281
+ "linkType": "Blocks"
282
+ }
283
+ ```
284
+
285
+ #### `jira_get_board`
286
+ Get information about an Agile board.
287
+
288
+ **Parameters:**
289
+ - `boardId` (number, required): Board ID
290
+
291
+ #### `jira_get_sprints`
292
+ List sprints for a board.
293
+
294
+ **Parameters:**
295
+ - `boardId` (number, required): Board ID
296
+ - `state` (string, optional): Sprint state filter ("active", "future", "closed")
297
+
298
+ #### `jira_get_sprint_issues`
299
+ Get issues in a specific sprint.
300
+
301
+ **Parameters:**
302
+ - `sprintId` (number, required): Sprint ID
303
+ - `maxResults` (number, optional): Maximum number of results
304
+
305
+ ### Confluence Tools
306
+
307
+ #### `confluence_search_content`
308
+ Search Confluence content using CQL (Confluence Query Language).
309
+
310
+ **Parameters:**
311
+ - `cql` (string, required): CQL query string
312
+ - `limit` (number, optional): Maximum number of results (default: 25)
313
+ - `expand` (string[], optional): Additional data to expand
314
+
315
+ **Example:**
316
+ ```typescript
317
+ {
318
+ "cql": "type=page AND space=DOCS AND title~'API'",
319
+ "limit": 10
320
+ }
321
+ ```
322
+
323
+ #### `confluence_get_page`
324
+ Get a Confluence page by ID.
325
+
326
+ **Parameters:**
327
+ - `pageId` (string, required): Page ID
328
+ - `expand` (string[], optional): Additional data to expand (e.g., "body.storage", "version")
329
+
330
+ **Example:**
331
+ ```typescript
332
+ {
333
+ "pageId": "123456",
334
+ "expand": ["body.storage", "version", "ancestors"]
335
+ }
336
+ ```
337
+
338
+ #### `confluence_get_page_by_title`
339
+ Get a Confluence page by title and space.
340
+
341
+ **Parameters:**
342
+ - `spaceKey` (string, required): Space key
343
+ - `title` (string, required): Page title
344
+ - `expand` (string[], optional): Additional data to expand
345
+
346
+ **Example:**
347
+ ```typescript
348
+ {
349
+ "spaceKey": "DOCS",
350
+ "title": "API Documentation"
351
+ }
352
+ ```
353
+
354
+ #### `confluence_create_page`
355
+ Create a new Confluence page.
356
+
357
+ **Parameters:**
358
+ - `spaceKey` (string, required): Space key
359
+ - `title` (string, required): Page title
360
+ - `content` (string, required): Page content (Confluence storage format or HTML)
361
+ - `parentId` (string, optional): Parent page ID
362
+ - `labels` (string[], optional): Array of labels
363
+
364
+ **Example:**
365
+ ```typescript
366
+ {
367
+ "spaceKey": "DOCS",
368
+ "title": "New Feature Documentation",
369
+ "content": "<p>This page describes the new feature...</p>",
370
+ "labels": ["api", "v2"]
371
+ }
372
+ ```
373
+
374
+ #### `confluence_update_page`
375
+ Update an existing Confluence page.
376
+
377
+ **Parameters:**
378
+ - `pageId` (string, required): Page ID
379
+ - `title` (string, optional): New title
380
+ - `content` (string, optional): New content
381
+ - `version` (number, required): Current version number (for optimistic locking)
382
+ - `minorEdit` (boolean, optional): Whether this is a minor edit
383
+
384
+ **Example:**
385
+ ```typescript
386
+ {
387
+ "pageId": "123456",
388
+ "content": "<p>Updated content...</p>",
389
+ "version": 5
390
+ }
391
+ ```
392
+
393
+ #### `confluence_delete_page`
394
+ Delete a Confluence page.
395
+
396
+ **Parameters:**
397
+ - `pageId` (string, required): Page ID
398
+
399
+ #### `confluence_list_spaces`
400
+ List all accessible Confluence spaces.
401
+
402
+ **Parameters:**
403
+ - `limit` (number, optional): Maximum number of results
404
+ - `type` (string, optional): Space type filter ("global" or "personal")
405
+
406
+ #### `confluence_get_space`
407
+ Get detailed information about a space.
408
+
409
+ **Parameters:**
410
+ - `spaceKey` (string, required): Space key
411
+ - `expand` (string[], optional): Additional data to expand
412
+
413
+ #### `confluence_get_page_children`
414
+ Get child pages of a page.
415
+
416
+ **Parameters:**
417
+ - `pageId` (string, required): Parent page ID
418
+ - `expand` (string[], optional): Additional data to expand
419
+ - `limit` (number, optional): Maximum number of results
420
+
421
+ #### `confluence_add_comment`
422
+ Add a comment to a Confluence page.
423
+
424
+ **Parameters:**
425
+ - `pageId` (string, required): Page ID
426
+ - `comment` (string, required): Comment text (HTML format)
427
+
428
+ #### `confluence_get_comments`
429
+ Get comments on a Confluence page.
430
+
431
+ **Parameters:**
432
+ - `pageId` (string, required): Page ID
433
+ - `limit` (number, optional): Maximum number of results
434
+
435
+ #### `confluence_upload_attachment`
436
+ Upload an attachment to a Confluence page.
437
+
438
+ **Parameters:**
439
+ - `pageId` (string, required): Page ID
440
+ - `filePath` (string, required): Local file path
441
+ - `comment` (string, optional): Attachment comment
442
+
443
+ #### `confluence_list_attachments`
444
+ List attachments on a Confluence page.
445
+
446
+ **Parameters:**
447
+ - `pageId` (string, required): Page ID
448
+ - `limit` (number, optional): Maximum number of results
449
+
450
+ ## Authentication
451
+
452
+ The server supports multiple authentication methods depending on your Atlassian instance:
453
+
454
+ ### Basic Authentication (Jira/Confluence Cloud)
455
+ For Cloud instances, use API tokens with Basic Auth:
456
+ - **Username**: Your email address (e.g., user@example.com)
457
+ - **Token**: API token generated from your Atlassian account settings
458
+ - **Method**: Basic Auth (automatically used when username is provided)
459
+
460
+ Generate Cloud API tokens at: https://id.atlassian.com/manage-profile/security/api-tokens
461
+
462
+ ### Bearer Token Authentication (Jira/Confluence Data Center 8.14+)
463
+ For Data Center instances version 8.14 and later (including 9.x), use Personal Access Tokens (PAT):
464
+ - **Token**: Personal Access Token generated from your Jira/Confluence profile
465
+ - **Method**: Bearer Auth (automatically used when username is omitted or `authType=bearer` is set)
466
+ - **Recommended for**: Jira 9.x, Confluence 7.9+
467
+
468
+ To generate a PAT:
469
+ 1. Log into your Jira/Confluence Data Center instance
470
+ 2. Click your avatar → Profile
471
+ 3. Select "Personal access tokens" from the left menu
472
+ 4. Click "Create token" and set appropriate permissions
473
+ 5. Copy the token immediately (it won't be shown again)
474
+
475
+ ### Authentication Auto-Detection
476
+ The server automatically detects the authentication method:
477
+ - If `username` is provided → uses **Basic Auth**
478
+ - If `username` is omitted → uses **Bearer Auth**
479
+ - If `authType` is explicitly set → uses the specified method
480
+
481
+ ## Error Handling
482
+
483
+ All tools return structured error responses:
484
+
485
+ ```typescript
486
+ {
487
+ "error": true,
488
+ "message": "Description of the error",
489
+ "statusCode": 401,
490
+ "details": { /* Additional error context */ }
491
+ }
492
+ ```
493
+
494
+ Common error scenarios:
495
+ - **401 Unauthorized**: Invalid credentials or token
496
+ - **403 Forbidden**: Insufficient permissions
497
+ - **404 Not Found**: Resource doesn't exist
498
+ - **400 Bad Request**: Invalid parameters
499
+ - **500 Internal Server Error**: Server-side issue
500
+
501
+ ## Best Practices
502
+
503
+ ### Rate Limiting
504
+ The server implements intelligent rate limiting to respect Atlassian API limits:
505
+ - Automatic retry with exponential backoff
506
+ - Request queuing to prevent overwhelming the API
507
+ - Configurable rate limits per endpoint
508
+
509
+ ### Caching
510
+ Certain read-only operations are cached to improve performance:
511
+ - Project metadata (5 minutes)
512
+ - User information (10 minutes)
513
+ - Space information (5 minutes)
514
+
515
+ ### Security
516
+ - Never commit credentials to version control
517
+ - Use environment variables or secure credential storage
518
+ - API tokens should have minimal required permissions
519
+ - Regularly rotate API tokens
520
+
521
+ ## Development
522
+
523
+ ### Project Structure
524
+ ```
525
+ jicon/
526
+ ├── src/
527
+ │ ├── index.ts # MCP server entry point
528
+ │ ├── jira/
529
+ │ │ ├── client.ts # Jira API client
530
+ │ │ ├── tools.ts # Jira tool implementations
531
+ │ │ └── types.ts # Jira type definitions
532
+ │ ├── confluence/
533
+ │ │ ├── client.ts # Confluence API client
534
+ │ │ ├── tools.ts # Confluence tool implementations
535
+ │ │ └── types.ts # Confluence type definitions
536
+ │ └── utils/
537
+ │ ├── auth.ts # Authentication utilities
538
+ │ ├── cache.ts # Caching layer
539
+ │ └── rate-limit.ts # Rate limiting
540
+ ├── tests/
541
+ │ ├── jira/
542
+ │ └── confluence/
543
+ ├── package.json
544
+ ├── tsconfig.json
545
+ └── README.md
546
+ ```
547
+
548
+ ### Building
549
+ ```bash
550
+ npm install
551
+ npm run build
552
+ ```
553
+
554
+ ### Testing
555
+ ```bash
556
+ npm test
557
+ npm run test:integration
558
+ ```
559
+
560
+ ## Roadmap
561
+
562
+ ### v1.0 (Current)
563
+ - ✅ Core Jira issue operations
564
+ - ✅ Core Confluence page operations
565
+ - ✅ Basic search capabilities
566
+ - ✅ Authentication support
567
+
568
+ ### v1.1 (Planned)
569
+ - Advanced filtering and sorting
570
+ - Bulk operations
571
+ - Webhooks support
572
+ - Custom field templates
573
+
574
+ ### v1.2 (Future)
575
+ - Jira Automation integration
576
+ - Confluence templates
577
+ - Analytics and reporting
578
+ - Multi-instance support
579
+
580
+ ## Contributing
581
+
582
+ Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
583
+
584
+ ## License
585
+
586
+ MIT License - see LICENSE file for details
587
+
588
+ ## Support
589
+
590
+ - GitHub Issues: https://github.com/crypto512/jicon/issues
591
+ - Documentation: https://github.com/crypto512/jicon
592
+ - Community: https://github.com/crypto512/jicon/discussions
593
+
594
+ ## Acknowledgments
595
+
596
+ Built on the [Model Context Protocol](https://modelcontextprotocol.io) by Anthropic.