@crypto512/jicon-mcp 0.6.1 → 0.7.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.
Files changed (77) hide show
  1. package/README.md +265 -43
  2. package/TOOL_LIST.md +201 -5
  3. package/dist/config/types.d.ts +6 -6
  4. package/dist/config/types.d.ts.map +1 -1
  5. package/dist/config/types.js +3 -2
  6. package/dist/config/types.js.map +1 -1
  7. package/dist/confluence/client.d.ts +8 -16
  8. package/dist/confluence/client.d.ts.map +1 -1
  9. package/dist/confluence/client.js +75 -43
  10. package/dist/confluence/client.js.map +1 -1
  11. package/dist/confluence/formatters.d.ts +4 -0
  12. package/dist/confluence/formatters.d.ts.map +1 -1
  13. package/dist/confluence/formatters.js +19 -0
  14. package/dist/confluence/formatters.js.map +1 -1
  15. package/dist/confluence/tools.d.ts +9 -36
  16. package/dist/confluence/tools.d.ts.map +1 -1
  17. package/dist/confluence/tools.js +90 -158
  18. package/dist/confluence/tools.js.map +1 -1
  19. package/dist/index.js +9 -1
  20. package/dist/index.js.map +1 -1
  21. package/dist/jira/client.d.ts +9 -9
  22. package/dist/jira/client.d.ts.map +1 -1
  23. package/dist/jira/client.js +252 -30
  24. package/dist/jira/client.js.map +1 -1
  25. package/dist/jira/formatters.d.ts +4 -0
  26. package/dist/jira/formatters.d.ts.map +1 -1
  27. package/dist/jira/formatters.js +24 -0
  28. package/dist/jira/formatters.js.map +1 -1
  29. package/dist/jira/tools.d.ts +36 -36
  30. package/dist/jira/tools.d.ts.map +1 -1
  31. package/dist/jira/tools.js +161 -139
  32. package/dist/jira/tools.js.map +1 -1
  33. package/dist/jira/types.d.ts +50 -0
  34. package/dist/jira/types.d.ts.map +1 -1
  35. package/dist/permissions/filter.d.ts.map +1 -1
  36. package/dist/permissions/filter.js +42 -13
  37. package/dist/permissions/filter.js.map +1 -1
  38. package/dist/permissions/tool-registry.d.ts +33 -14
  39. package/dist/permissions/tool-registry.d.ts.map +1 -1
  40. package/dist/permissions/tool-registry.js +80 -5
  41. package/dist/permissions/tool-registry.js.map +1 -1
  42. package/dist/tempo/client.d.ts +1 -0
  43. package/dist/tempo/client.d.ts.map +1 -1
  44. package/dist/tempo/client.js +43 -0
  45. package/dist/tempo/client.js.map +1 -1
  46. package/dist/tempo/formatters.d.ts +4 -0
  47. package/dist/tempo/formatters.d.ts.map +1 -1
  48. package/dist/tempo/formatters.js +24 -0
  49. package/dist/tempo/formatters.js.map +1 -1
  50. package/dist/tempo/tools.d.ts +21 -0
  51. package/dist/tempo/tools.d.ts.map +1 -1
  52. package/dist/tempo/tools.js +74 -134
  53. package/dist/tempo/tools.js.map +1 -1
  54. package/dist/types.d.ts +1 -0
  55. package/dist/types.d.ts.map +1 -1
  56. package/dist/types.js.map +1 -1
  57. package/dist/utils/buffer-tools.d.ts +128 -0
  58. package/dist/utils/buffer-tools.d.ts.map +1 -0
  59. package/dist/utils/buffer-tools.js +312 -0
  60. package/dist/utils/buffer-tools.js.map +1 -0
  61. package/dist/utils/content-buffer.d.ts +144 -0
  62. package/dist/utils/content-buffer.d.ts.map +1 -0
  63. package/dist/utils/content-buffer.js +330 -0
  64. package/dist/utils/content-buffer.js.map +1 -0
  65. package/dist/utils/response-formatter.d.ts +5 -1
  66. package/dist/utils/response-formatter.d.ts.map +1 -1
  67. package/dist/utils/response-formatter.js +52 -2
  68. package/dist/utils/response-formatter.js.map +1 -1
  69. package/dist/utils/workload-tools.d.ts +68 -0
  70. package/dist/utils/workload-tools.d.ts.map +1 -0
  71. package/dist/utils/workload-tools.js +134 -0
  72. package/dist/utils/workload-tools.js.map +1 -0
  73. package/package.json +1 -1
  74. package/CLAUDE.md +0 -722
  75. package/CONTRIBUTING.md +0 -371
  76. package/DEVELOPMENT.md +0 -400
  77. package/JIRA_API_ANALYSIS.md +0 -275
package/CLAUDE.md DELETED
@@ -1,722 +0,0 @@
1
- # Jira, Confluence, and Tempo MCP Server
2
-
3
- ## Overview
4
-
5
- A Model Context Protocol (MCP) server that provides seamless integration with Atlassian Jira, Confluence, and Tempo Server/Data Center instances. This server enables AI assistants to interact with Jira issues, projects, boards, Confluence pages, spaces, content, and Tempo time tracking 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
- ### Tempo Integration
26
- - **Time Tracking**: Log, view, and manage work time
27
- - **Worklog Management**: Create, update, and delete worklogs
28
- - **Team Tracking**: Access team worklogs and time tracking data
29
- - **Account Management**: View and manage Tempo accounts
30
- - **User Info**: Retrieve user time tracking information
31
- - **v4 API**: Uses Tempo v4 API with automatic key-to-ID conversion
32
-
33
- ## Installation
34
-
35
- ```bash
36
- # Install globally
37
- npm install -g @crypto512/jicon-mcp
38
-
39
- # Or run directly with npx
40
- npx @crypto512/jicon-mcp
41
- ```
42
-
43
- ## Configuration
44
-
45
- The server supports multiple authentication methods depending on your Atlassian instance type.
46
-
47
- ### Jira/Confluence Cloud (Basic Auth)
48
-
49
- For Cloud instances, use email + API token with Basic authentication:
50
-
51
- ```bash
52
- # Jira Configuration
53
- JIRA_URL=https://your-domain.atlassian.net
54
- JIRA_USERNAME=your-email@example.com
55
- JIRA_API_TOKEN=your-jira-api-token
56
-
57
- # Confluence Configuration
58
- CONFLUENCE_URL=https://your-domain.atlassian.net/wiki
59
- CONFLUENCE_USERNAME=your-email@example.com
60
- CONFLUENCE_API_TOKEN=your-confluence-api-token
61
- ```
62
-
63
- ### Jira/Confluence Data Center 8.14+ (Bearer Auth with PAT)
64
-
65
- 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`:
66
-
67
- ```bash
68
- # Jira Configuration (PAT - recommended for Data Center)
69
- JIRA_URL=https://jira.example.com
70
- JIRA_API_TOKEN=your-personal-access-token
71
- JIRA_AUTH_TYPE=bearer
72
-
73
- # Confluence Configuration (PAT - recommended for Data Center)
74
- CONFLUENCE_URL=https://confluence.example.com
75
- CONFLUENCE_API_TOKEN=your-personal-access-token
76
- CONFLUENCE_AUTH_TYPE=bearer
77
- ```
78
-
79
- **Note**: To generate a Personal Access Token in Jira/Confluence Data Center:
80
- 1. Click your avatar → Profile
81
- 2. Select "Personal access tokens" in the left menu
82
- 3. Create a new token with appropriate permissions
83
-
84
- ### Tempo Configuration
85
-
86
- Tempo uses the same authentication as Jira (same URL and credentials). This server uses **Tempo v4 API**, which requires issueId and projectId (integers) instead of string keys. The server automatically converts user-friendly keys (e.g., "PROJ-123") to the numeric IDs required by the v4 API.
87
-
88
- **Requirements:**
89
- - Tempo 3.x or later (which provides v4 API)
90
- - Same Jira credentials for authentication
91
-
92
- ### Claude Desktop Configuration
93
-
94
- #### For Jira/Confluence Cloud:
95
-
96
- **MacOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
97
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`
98
-
99
- ```json
100
- {
101
- "mcpServers": {
102
- "jicon": {
103
- "command": "npx",
104
- "args": ["-y", "@crypto512/jicon-mcp"],
105
- "env": {
106
- "JIRA_URL": "https://your-domain.atlassian.net",
107
- "JIRA_USERNAME": "your-email@example.com",
108
- "JIRA_API_TOKEN": "your-jira-api-token",
109
- "CONFLUENCE_URL": "https://your-domain.atlassian.net/wiki",
110
- "CONFLUENCE_USERNAME": "your-email@example.com",
111
- "CONFLUENCE_API_TOKEN": "your-confluence-api-token"
112
- }
113
- }
114
- }
115
- }
116
- ```
117
-
118
- #### For Jira/Confluence Data Center 8.14+ with PAT:
119
-
120
- ```json
121
- {
122
- "mcpServers": {
123
- "jicon": {
124
- "command": "npx",
125
- "args": ["-y", "@crypto512/jicon-mcp"],
126
- "env": {
127
- "JIRA_URL": "https://jira.example.com",
128
- "JIRA_API_TOKEN": "your-personal-access-token",
129
- "JIRA_AUTH_TYPE": "bearer",
130
- "CONFLUENCE_URL": "https://confluence.example.com",
131
- "CONFLUENCE_API_TOKEN": "your-personal-access-token",
132
- "CONFLUENCE_AUTH_TYPE": "bearer"
133
- }
134
- }
135
- }
136
- }
137
- ```
138
-
139
- ## Tools
140
-
141
- ### Jira Tools
142
-
143
- #### `jira_search_issues`
144
- Search for Jira issues using JQL (Jira Query Language).
145
-
146
- **Parameters:**
147
- - `jql` (string, required): JQL query string
148
- - `maxResults` (number, optional): Maximum number of results (default: 50)
149
- - `fields` (string[], optional): Specific fields to return
150
-
151
- **Example:**
152
- ```typescript
153
- {
154
- "jql": "project = PROJ AND status = 'In Progress'",
155
- "maxResults": 10,
156
- "fields": ["summary", "status", "assignee"]
157
- }
158
- ```
159
-
160
- #### `jira_get_issue`
161
- Get detailed information about a specific Jira issue.
162
-
163
- **Parameters:**
164
- - `issueKey` (string, required): Issue key (e.g., "PROJ-123")
165
- - `fields` (string[], optional): Specific fields to return
166
- - `expand` (string[], optional): Additional data to expand (e.g., "changelog", "renderedFields")
167
-
168
- **Example:**
169
- ```typescript
170
- {
171
- "issueKey": "PROJ-123",
172
- "expand": ["changelog"]
173
- }
174
- ```
175
-
176
- #### `jira_create_issue`
177
- Create a new Jira issue.
178
-
179
- **Parameters:**
180
- - `projectKey` (string, required): Project key
181
- - `issueType` (string, required): Issue type (e.g., "Bug", "Story", "Task")
182
- - `summary` (string, required): Issue summary
183
- - `description` (string, optional): Issue description
184
- - `priority` (string, optional): Priority name
185
- - `assignee` (string, optional): Assignee username
186
- - `labels` (string[], optional): Array of labels
187
- - `components` (string[], optional): Array of component names
188
- - `customFields` (object, optional): Custom field values
189
-
190
- **Example:**
191
- ```typescript
192
- {
193
- "projectKey": "PROJ",
194
- "issueType": "Bug",
195
- "summary": "Login button not responding",
196
- "description": "When clicking the login button, nothing happens",
197
- "priority": "High",
198
- "labels": ["ui", "authentication"]
199
- }
200
- ```
201
-
202
- #### `jira_update_issue`
203
- Update an existing Jira issue.
204
-
205
- **Parameters:**
206
- - `issueKey` (string, required): Issue key
207
- - `fields` (object, required): Fields to update
208
- - `notifyUsers` (boolean, optional): Send notifications (default: true)
209
-
210
- **Example:**
211
- ```typescript
212
- {
213
- "issueKey": "PROJ-123",
214
- "fields": {
215
- "summary": "Updated summary",
216
- "priority": { "name": "Critical" }
217
- }
218
- }
219
- ```
220
-
221
- #### `jira_transition_issue`
222
- Transition an issue to a different status.
223
-
224
- **Parameters:**
225
- - `issueKey` (string, required): Issue key
226
- - `transitionName` (string, required): Transition name (e.g., "In Progress", "Done")
227
- - `comment` (string, optional): Comment to add with transition
228
- - `fields` (object, optional): Fields to update during transition
229
-
230
- **Example:**
231
- ```typescript
232
- {
233
- "issueKey": "PROJ-123",
234
- "transitionName": "Done",
235
- "comment": "Completed and tested"
236
- }
237
- ```
238
-
239
- #### `jira_add_comment`
240
- Add a comment to a Jira issue.
241
-
242
- **Parameters:**
243
- - `issueKey` (string, required): Issue key
244
- - `comment` (string, required): Comment text (supports Jira markdown)
245
- - `visibility` (object, optional): Visibility restrictions
246
-
247
- **Example:**
248
- ```typescript
249
- {
250
- "issueKey": "PROJ-123",
251
- "comment": "This has been fixed in the latest build"
252
- }
253
- ```
254
-
255
- #### `jira_get_issue_comments`
256
- Retrieve comments from a Jira issue.
257
-
258
- **Parameters:**
259
- - `issueKey` (string, required): Issue key
260
- - `maxResults` (number, optional): Maximum number of comments
261
- - `orderBy` (string, optional): Sort order ("created" or "-created")
262
-
263
- #### `jira_list_projects`
264
- List all accessible Jira projects.
265
-
266
- **Parameters:**
267
- - `recent` (boolean, optional): Only return recent projects
268
- - `expand` (string[], optional): Additional data to expand
269
-
270
- #### `jira_get_project`
271
- Get detailed information about a specific project.
272
-
273
- **Parameters:**
274
- - `projectKey` (string, required): Project key
275
- - `expand` (string[], optional): Additional data to expand
276
-
277
- #### `jira_get_transitions`
278
- Get available transitions for an issue.
279
-
280
- **Parameters:**
281
- - `issueKey` (string, required): Issue key
282
-
283
- #### `jira_link_issues`
284
- Create a link between two issues.
285
-
286
- **Parameters:**
287
- - `issueKey` (string, required): Source issue key
288
- - `linkedIssueKey` (string, required): Target issue key
289
- - `linkType` (string, required): Link type (e.g., "Blocks", "Relates to")
290
- - `comment` (string, optional): Comment for the link
291
-
292
- **Example:**
293
- ```typescript
294
- {
295
- "issueKey": "PROJ-123",
296
- "linkedIssueKey": "PROJ-456",
297
- "linkType": "Blocks"
298
- }
299
- ```
300
-
301
- #### `jira_get_board`
302
- Get information about an Agile board.
303
-
304
- **Parameters:**
305
- - `boardId` (number, required): Board ID
306
-
307
- #### `jira_get_sprints`
308
- List sprints for a board.
309
-
310
- **Parameters:**
311
- - `boardId` (number, required): Board ID
312
- - `state` (string, optional): Sprint state filter ("active", "future", "closed")
313
-
314
- #### `jira_get_sprint_issues`
315
- Get issues in a specific sprint.
316
-
317
- **Parameters:**
318
- - `sprintId` (number, required): Sprint ID
319
- - `maxResults` (number, optional): Maximum number of results
320
-
321
- ### Confluence Tools
322
-
323
- #### `confluence_search_content`
324
- Search Confluence content using CQL (Confluence Query Language).
325
-
326
- **Parameters:**
327
- - `cql` (string, required): CQL query string
328
- - `limit` (number, optional): Maximum number of results (default: 25)
329
- - `expand` (string[], optional): Additional data to expand
330
-
331
- **Example:**
332
- ```typescript
333
- {
334
- "cql": "type=page AND space=DOCS AND title~'API'",
335
- "limit": 10
336
- }
337
- ```
338
-
339
- #### `confluence_get_page`
340
- Get a Confluence page by ID.
341
-
342
- **Parameters:**
343
- - `pageId` (string, required): Page ID
344
- - `expand` (string[], optional): Additional data to expand (e.g., "body.storage", "version")
345
-
346
- **Example:**
347
- ```typescript
348
- {
349
- "pageId": "123456",
350
- "expand": ["body.storage", "version", "ancestors"]
351
- }
352
- ```
353
-
354
- #### `confluence_get_page_by_title`
355
- Get a Confluence page by title and space.
356
-
357
- **Parameters:**
358
- - `spaceKey` (string, required): Space key
359
- - `title` (string, required): Page title
360
- - `expand` (string[], optional): Additional data to expand
361
-
362
- **Example:**
363
- ```typescript
364
- {
365
- "spaceKey": "DOCS",
366
- "title": "API Documentation"
367
- }
368
- ```
369
-
370
- #### `confluence_create_page`
371
- Create a new Confluence page.
372
-
373
- **Parameters:**
374
- - `spaceKey` (string, required): Space key
375
- - `title` (string, required): Page title
376
- - `content` (string, required): Page content (Confluence storage format or HTML)
377
- - `parentId` (string, optional): Parent page ID
378
- - `labels` (string[], optional): Array of labels
379
-
380
- **Example:**
381
- ```typescript
382
- {
383
- "spaceKey": "DOCS",
384
- "title": "New Feature Documentation",
385
- "content": "<p>This page describes the new feature...</p>",
386
- "labels": ["api", "v2"]
387
- }
388
- ```
389
-
390
- #### `confluence_update_page`
391
- Update an existing Confluence page.
392
-
393
- **Parameters:**
394
- - `pageId` (string, required): Page ID
395
- - `title` (string, optional): New title
396
- - `content` (string, optional): New content
397
- - `version` (number, required): Current version number (for optimistic locking)
398
- - `minorEdit` (boolean, optional): Whether this is a minor edit
399
-
400
- **Example:**
401
- ```typescript
402
- {
403
- "pageId": "123456",
404
- "content": "<p>Updated content...</p>",
405
- "version": 5
406
- }
407
- ```
408
-
409
- #### `confluence_delete_page`
410
- Delete a Confluence page.
411
-
412
- **Parameters:**
413
- - `pageId` (string, required): Page ID
414
-
415
- #### `confluence_list_spaces`
416
- List all accessible Confluence spaces.
417
-
418
- **Parameters:**
419
- - `limit` (number, optional): Maximum number of results
420
- - `type` (string, optional): Space type filter ("global" or "personal")
421
-
422
- #### `confluence_get_space`
423
- Get detailed information about a space.
424
-
425
- **Parameters:**
426
- - `spaceKey` (string, required): Space key
427
- - `expand` (string[], optional): Additional data to expand
428
-
429
- #### `confluence_get_page_children`
430
- Get child pages of a page.
431
-
432
- **Parameters:**
433
- - `pageId` (string, required): Parent page ID
434
- - `expand` (string[], optional): Additional data to expand
435
- - `limit` (number, optional): Maximum number of results
436
-
437
- #### `confluence_add_comment`
438
- Add a comment to a Confluence page.
439
-
440
- **Parameters:**
441
- - `pageId` (string, required): Page ID
442
- - `comment` (string, required): Comment text (HTML format)
443
-
444
- #### `confluence_get_comments`
445
- Get comments on a Confluence page.
446
-
447
- **Parameters:**
448
- - `pageId` (string, required): Page ID
449
- - `limit` (number, optional): Maximum number of results
450
-
451
- #### `confluence_upload_attachment`
452
- Upload an attachment to a Confluence page.
453
-
454
- **Parameters:**
455
- - `pageId` (string, required): Page ID
456
- - `filePath` (string, required): Local file path
457
- - `comment` (string, optional): Attachment comment
458
-
459
- #### `confluence_list_attachments`
460
- List attachments on a Confluence page.
461
-
462
- **Parameters:**
463
- - `pageId` (string, required): Page ID
464
- - `limit` (number, optional): Maximum number of results
465
-
466
- ## Authentication
467
-
468
- The server supports multiple authentication methods depending on your Atlassian instance:
469
-
470
- ### Basic Authentication (Jira/Confluence Cloud)
471
- For Cloud instances, use API tokens with Basic Auth:
472
- - **Username**: Your email address (e.g., user@example.com)
473
- - **Token**: API token generated from your Atlassian account settings
474
- - **Method**: Basic Auth (automatically used when username is provided)
475
-
476
- Generate Cloud API tokens at: https://id.atlassian.com/manage-profile/security/api-tokens
477
-
478
- ### Bearer Token Authentication (Jira/Confluence Data Center 8.14+)
479
- For Data Center instances version 8.14 and later (including 9.x), use Personal Access Tokens (PAT):
480
- - **Token**: Personal Access Token generated from your Jira/Confluence profile
481
- - **Method**: Bearer Auth (automatically used when username is omitted or `authType=bearer` is set)
482
- - **Recommended for**: Jira 9.x, Confluence 7.9+
483
-
484
- To generate a PAT:
485
- 1. Log into your Jira/Confluence Data Center instance
486
- 2. Click your avatar → Profile
487
- 3. Select "Personal access tokens" from the left menu
488
- 4. Click "Create token" and set appropriate permissions
489
- 5. Copy the token immediately (it won't be shown again)
490
-
491
- ### Authentication Auto-Detection
492
- The server automatically detects the authentication method:
493
- - If `username` is provided → uses **Basic Auth**
494
- - If `username` is omitted → uses **Bearer Auth**
495
- - If `authType` is explicitly set → uses the specified method
496
-
497
- ## Error Handling
498
-
499
- All tools return structured error responses:
500
-
501
- ```typescript
502
- {
503
- "error": true,
504
- "message": "Description of the error",
505
- "statusCode": 401,
506
- "details": { /* Additional error context */ }
507
- }
508
- ```
509
-
510
- Common error scenarios:
511
- - **401 Unauthorized**: Invalid credentials or token
512
- - **403 Forbidden**: Insufficient permissions
513
- - **404 Not Found**: Resource doesn't exist
514
- - **400 Bad Request**: Invalid parameters
515
- - **500 Internal Server Error**: Server-side issue
516
-
517
- ## Best Practices
518
-
519
- ### Security
520
- - **Never commit credentials to version control** - Use .gitignore to exclude .jicon.json and .env files
521
- - **Use environment variables or secure credential storage** - Leverage hierarchical config (project > user > env)
522
- - **Start with read-only mode** - Use `"mode": "readonly"` for exploration and reporting tasks
523
- - **API tokens should have minimal required permissions** - Create tokens with only the necessary scopes
524
- - **Regularly rotate API tokens** - Set expiration dates and rotate every 90 days
525
- - **Use Personal Access Tokens (PAT) for Data Center** - More secure than username/password for DC 8.14+
526
- - **Monitor write operations** - Enable audit logging in your Atlassian instances
527
- - **Review permission configurations** - Regularly audit your .jicon.json whitelist/blacklist settings
528
-
529
- ### Performance Considerations
530
- - **Use pagination for large datasets** - Set appropriate `maxResults` to avoid memory issues
531
- - **Enable `fetchAll` judiciously** - Auto-pagination can return up to 5000 results, which may be slow
532
- - **Filter queries narrowly** - Specific JQL/CQL queries are faster than broad searches
533
- - **Request only needed fields** - Use the `fields` parameter to reduce response size
534
- - **Respect API rate limits** - Atlassian Cloud has rate limits; space out bulk operations
535
- - **Use narrow date ranges for Tempo** - Tempo Server/DC doesn't support pagination, so use focused date filters
536
-
537
- ## Development
538
-
539
- ### Project Structure
540
- ```
541
- jicon/
542
- ├── src/
543
- │ ├── index.ts # MCP server entry point
544
- │ ├── types.ts # Shared type definitions
545
- │ │
546
- │ ├── config/ # Configuration system
547
- │ │ ├── loader.ts # Config hierarchy loader
548
- │ │ ├── types.ts # Config schemas with Zod
549
- │ │ └── constants.ts # Config constants
550
- │ │
551
- │ ├── permissions/ # Security & access control
552
- │ │ ├── tool-registry.ts # Tool categorization
553
- │ │ └── filter.ts # Permission filtering
554
- │ │
555
- │ ├── utils/ # Shared utilities
556
- │ │ ├── http-client.ts # HTTP/Auth wrapper
557
- │ │ └── response-formatter.ts # MCP response formatting
558
- │ │
559
- │ ├── jira/ # Jira integration (15 tools)
560
- │ │ ├── client.ts # Jira API client
561
- │ │ ├── tools.ts # Tool definitions
562
- │ │ ├── formatters.ts # Response formatting
563
- │ │ ├── types.ts # TypeScript types
564
- │ │ └── defaults.ts # Default field configs
565
- │ │
566
- │ ├── confluence/ # Confluence integration (13 tools)
567
- │ │ ├── client.ts # Confluence API client
568
- │ │ ├── tools.ts # Tool definitions
569
- │ │ ├── formatters.ts # Response formatting
570
- │ │ ├── types.ts # TypeScript types
571
- │ │ └── defaults.ts # Default field configs
572
- │ │
573
- │ └── tempo/ # Tempo integration (11 tools)
574
- │ ├── client.ts # Tempo API client
575
- │ ├── tools.ts # Tool definitions
576
- │ ├── formatters.ts # Response formatting
577
- │ └── types.ts # TypeScript types
578
-
579
- ├── tests/ # Test suite (86 tests)
580
- │ ├── permissions/ # Permission system tests
581
- │ ├── jira/ # Jira client tests
582
- │ ├── confluence/ # Confluence client tests
583
- │ └── utils/ # Utility tests
584
-
585
- ├── .jicon.json.example # Example full-access config
586
- ├── .jicon.json.readonly # Example read-only config
587
- ├── .jicon.json.custom # Example custom permissions
588
- ├── package.json
589
- ├── tsconfig.json
590
- └── README.md
591
- ```
592
-
593
- ### Building
594
- ```bash
595
- npm install
596
- npm run build
597
- ```
598
-
599
- ### Testing
600
- ```bash
601
- npm test
602
- npm run test:integration
603
- ```
604
-
605
- ## Roadmap
606
-
607
- ### v1.0 (Current)
608
- - ✅ Core Jira issue operations
609
- - ✅ Core Confluence page operations
610
- - ✅ Basic search capabilities
611
- - ✅ Authentication support
612
-
613
- ### v1.1 (Planned)
614
- - Advanced filtering and sorting
615
- - Bulk operations
616
- - Webhooks support
617
- - Custom field templates
618
-
619
- ### v1.2 (Future)
620
- - Jira Automation integration
621
- - Confluence templates
622
- - Analytics and reporting
623
- - Multi-instance support
624
-
625
- ## Contributing
626
-
627
- Contributions are welcome! Please see CONTRIBUTING.md for guidelines.
628
-
629
- ## License
630
-
631
- MIT License - see LICENSE file for details
632
-
633
- ## Security Best Practices
634
-
635
- ### Deployment Security
636
-
637
- #### 1. Credential Management
638
- - **Use hierarchical configuration**: Project config (.jicon.json) > User config (~/.config/jicon/jicon.json) > Environment variables
639
- - **Never commit credentials**: Ensure .jicon.json is in .gitignore
640
- - **Use PAT for Data Center**: Personal Access Tokens are more secure than username/password for DC 8.14+
641
- - **Rotate tokens regularly**: Set 90-day expiration and rotate before expiry
642
-
643
- #### 2. Permission Configuration
644
- - **Start with read-only mode**: Default to `"mode": "readonly"` for safety
645
- - **Use custom permissions for specific workflows**: Whitelist only required tools
646
- - **Example read-only configuration**:
647
- ```json
648
- {
649
- "permissions": {
650
- "mode": "readonly"
651
- }
652
- }
653
- ```
654
- - **Example custom configuration**:
655
- ```json
656
- {
657
- "permissions": {
658
- "mode": "custom",
659
- "whitelist": ["jira_read", "confluence_read", "tempo_read"]
660
- }
661
- }
662
- ```
663
-
664
- #### 3. Network Security
665
- - **Use HTTPS only**: Atlassian Cloud enforces HTTPS; ensure Data Center uses HTTPS
666
- - **Network isolation**: Run MCP server in isolated network segments when possible
667
- - **Firewall rules**: Restrict outbound connections to Atlassian instance IPs only
668
-
669
- #### 4. Monitoring & Auditing
670
- - **Enable Atlassian audit logs**: Monitor API usage in your Atlassian instances
671
- - **Review permission denials**: Check logs for unauthorized access attempts
672
- - **Monitor write operations**: Track issue creation, updates, and deletions
673
- - **Set up alerts**: Configure notifications for suspicious API activity
674
-
675
- #### 5. Input Validation
676
- - **Be cautious with JQL/CQL queries**: Complex queries can impact performance
677
- - **Validate user inputs**: When building tools that generate JQL/CQL, validate inputs
678
- - **Use parameterized searches**: Prefer specific field filters over broad text searches
679
-
680
- #### 6. Token Permissions
681
- - **Principle of least privilege**: Grant tokens only necessary permissions
682
- - **Jira Cloud token permissions**:
683
- - Read: View issues, projects, boards
684
- - Write: Create/update issues (only if needed)
685
- - Admin: Avoid granting admin permissions
686
- - **Data Center PAT scopes**:
687
- - Read: READ scope only for read-only operations
688
- - Write: WRITE scope only when modifications needed
689
-
690
- ### Threat Model
691
-
692
- #### Protected Against
693
- - ✅ **Unauthorized write operations**: Permission system blocks write tools in readonly mode
694
- - ✅ **Credential exposure**: .gitignore prevents credential commits
695
- - ✅ **Man-in-the-middle**: HTTPS encryption for all API calls
696
- - ✅ **Authentication bypass**: Double-check permission enforcement
697
-
698
- #### Security Considerations
699
- - ⚠️ **JQL/CQL injection**: While APIs handle parsing, avoid user-generated queries when possible
700
- - ⚠️ **Rate limiting**: No built-in rate limiting; respect Atlassian API limits manually
701
- - ⚠️ **Data exfiltration**: Read-only mode can still read all accessible data
702
- - ⚠️ **Privilege escalation**: Ensure API tokens don't have excessive permissions
703
-
704
- ### Incident Response
705
-
706
- If credentials are compromised:
707
- 1. **Immediately revoke** the API token in Atlassian settings
708
- 2. **Review audit logs** for unauthorized activity
709
- 3. **Generate new tokens** with appropriate permissions
710
- 4. **Update configurations** with new tokens
711
- 5. **Investigate** how credentials were exposed
712
- 6. **Implement preventive measures** to avoid future exposure
713
-
714
- ## Support
715
-
716
- - GitHub Issues: https://github.com/crypto512/jicon/issues
717
- - Documentation: https://github.com/crypto512/jicon
718
- - Community: https://github.com/crypto512/jicon/discussions
719
-
720
- ## Acknowledgments
721
-
722
- Built on the [Model Context Protocol](https://modelcontextprotocol.io) by Anthropic.