@crypto512/jicon-mcp 2.1.0 → 2.2.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/README.md +288 -15
  2. package/TOOL_LIST.md +390 -87
  3. package/dist/config/constants.d.ts +12 -0
  4. package/dist/config/constants.d.ts.map +1 -1
  5. package/dist/config/constants.js +13 -0
  6. package/dist/config/constants.js.map +1 -1
  7. package/dist/config/loader.d.ts +8 -0
  8. package/dist/config/loader.d.ts.map +1 -1
  9. package/dist/config/loader.js +27 -1
  10. package/dist/config/loader.js.map +1 -1
  11. package/dist/config/types.d.ts +93 -0
  12. package/dist/config/types.d.ts.map +1 -1
  13. package/dist/config/types.js +26 -0
  14. package/dist/config/types.js.map +1 -1
  15. package/dist/confluence/tools.d.ts +8 -1
  16. package/dist/confluence/tools.d.ts.map +1 -1
  17. package/dist/confluence/tools.js +61 -51
  18. package/dist/confluence/tools.js.map +1 -1
  19. package/dist/credentials/client-factory.d.ts +64 -0
  20. package/dist/credentials/client-factory.d.ts.map +1 -0
  21. package/dist/credentials/client-factory.js +110 -0
  22. package/dist/credentials/client-factory.js.map +1 -0
  23. package/dist/credentials/context.d.ts +25 -0
  24. package/dist/credentials/context.d.ts.map +1 -0
  25. package/dist/credentials/context.js +35 -0
  26. package/dist/credentials/context.js.map +1 -0
  27. package/dist/credentials/extractor.d.ts +21 -0
  28. package/dist/credentials/extractor.d.ts.map +1 -0
  29. package/dist/credentials/extractor.js +46 -0
  30. package/dist/credentials/extractor.js.map +1 -0
  31. package/dist/credentials/index.d.ts +9 -0
  32. package/dist/credentials/index.d.ts.map +1 -0
  33. package/dist/credentials/index.js +8 -0
  34. package/dist/credentials/index.js.map +1 -0
  35. package/dist/credentials/types.d.ts +21 -0
  36. package/dist/credentials/types.d.ts.map +1 -0
  37. package/dist/credentials/types.js +13 -0
  38. package/dist/credentials/types.js.map +1 -0
  39. package/dist/index.js +98 -75
  40. package/dist/index.js.map +1 -1
  41. package/dist/jira/activity-tools.d.ts +54 -1
  42. package/dist/jira/activity-tools.d.ts.map +1 -1
  43. package/dist/jira/activity-tools.js +737 -79
  44. package/dist/jira/activity-tools.js.map +1 -1
  45. package/dist/jira/client.d.ts +34 -2
  46. package/dist/jira/client.d.ts.map +1 -1
  47. package/dist/jira/client.js +119 -63
  48. package/dist/jira/client.js.map +1 -1
  49. package/dist/jira/tools.d.ts +58 -1
  50. package/dist/jira/tools.d.ts.map +1 -1
  51. package/dist/jira/tools.js +226 -27
  52. package/dist/jira/tools.js.map +1 -1
  53. package/dist/jira/types.d.ts +22 -0
  54. package/dist/jira/types.d.ts.map +1 -1
  55. package/dist/permissions/tool-registry.d.ts +10 -10
  56. package/dist/permissions/tool-registry.d.ts.map +1 -1
  57. package/dist/permissions/tool-registry.js +8 -4
  58. package/dist/permissions/tool-registry.js.map +1 -1
  59. package/dist/tempo/tools.d.ts +33 -1
  60. package/dist/tempo/tools.d.ts.map +1 -1
  61. package/dist/tempo/tools.js +141 -17
  62. package/dist/tempo/tools.js.map +1 -1
  63. package/dist/transport/http.d.ts +18 -0
  64. package/dist/transport/http.d.ts.map +1 -0
  65. package/dist/transport/http.js +66 -0
  66. package/dist/transport/http.js.map +1 -0
  67. package/dist/transport/index.d.ts +17 -0
  68. package/dist/transport/index.d.ts.map +1 -0
  69. package/dist/transport/index.js +32 -0
  70. package/dist/transport/index.js.map +1 -0
  71. package/dist/transport/types.d.ts +15 -0
  72. package/dist/transport/types.d.ts.map +1 -0
  73. package/dist/transport/types.js +12 -0
  74. package/dist/transport/types.js.map +1 -0
  75. package/dist/types.d.ts +10 -0
  76. package/dist/types.d.ts.map +1 -1
  77. package/dist/types.js +0 -1
  78. package/dist/types.js.map +1 -1
  79. package/dist/utils/buffer-pipeline/index.js +2 -2
  80. package/dist/utils/buffer-pipeline/index.js.map +1 -1
  81. package/dist/utils/buffer-pipeline/schema.d.ts +99 -99
  82. package/dist/utils/buffer-pipeline/schema.d.ts.map +1 -1
  83. package/dist/utils/buffer-tools.d.ts +91 -83
  84. package/dist/utils/buffer-tools.d.ts.map +1 -1
  85. package/dist/utils/buffer-tools.js +312 -139
  86. package/dist/utils/buffer-tools.js.map +1 -1
  87. package/dist/utils/jicon-help.d.ts +3 -3
  88. package/dist/utils/jicon-help.d.ts.map +1 -1
  89. package/dist/utils/jicon-help.js +141 -10
  90. package/dist/utils/jicon-help.js.map +1 -1
  91. package/dist/utils/json-structure.d.ts +11 -0
  92. package/dist/utils/json-structure.d.ts.map +1 -1
  93. package/dist/utils/json-structure.js +61 -0
  94. package/dist/utils/json-structure.js.map +1 -1
  95. package/dist/utils/plantuml/tools.d.ts +4 -4
  96. package/dist/utils/plantuml/tools.d.ts.map +1 -1
  97. package/dist/utils/plantuml/tools.js +29 -8
  98. package/dist/utils/plantuml/tools.js.map +1 -1
  99. package/dist/utils/plantuml/types.d.ts +4 -4
  100. package/dist/utils/response-formatter.d.ts.map +1 -1
  101. package/dist/utils/response-formatter.js +8 -4
  102. package/dist/utils/response-formatter.js.map +1 -1
  103. package/package.json +5 -2
package/TOOL_LIST.md CHANGED
@@ -5,10 +5,10 @@ This document provides a comprehensive reference of all available tools in the J
5
5
 
6
6
  ## Summary
7
7
 
8
- **Total Tools**: 75
9
- - **Jira Tools**: 22 (17 read + 5 write)
8
+ **Total Tools**: 79
9
+ - **Jira Tools**: 26 (21 read + 5 write)
10
10
  - **Confluence Tools**: 21 (13 read + 8 write)
11
- - **Tempo Tools**: 12 (9 read + 3 write)
11
+ - **Tempo Tools**: 13 (10 read + 3 write)
12
12
  - **Buffer Tools**: 11
13
13
  - **Workload Tools**: 2
14
14
  - **URL Tools**: 2
@@ -21,8 +21,6 @@ This document provides a comprehensive reference of all available tools in the J
21
21
  - **XHTML**: Use `buffer_get_element` for element-based access
22
22
  - **Search**: Use `buffer_grep` to search within any buffer
23
23
 
24
- **Important**: `buffer_get_chunk` is blocked for JSON arrays and XHTML. Use the appropriate tool above.
25
-
26
24
  ---
27
25
 
28
26
  ## Agentic Workflow Patterns
@@ -139,7 +137,34 @@ When XHTML validation fails, the response includes element ID and suggested acti
139
137
 
140
138
  ---
141
139
 
142
- ## Jira Tools (21)
140
+ ## Jira Tools (25)
141
+
142
+ ### Localization / Non-English Jira
143
+
144
+ **IMPORTANT**: Jira field names, issue types, statuses, and priorities are localized.
145
+
146
+ | English | French | German |
147
+ |---------|--------|--------|
148
+ | Epic | Épopée | Epic |
149
+ | Story | Story | Story |
150
+ | Bug | Bogue | Fehler |
151
+ | Task | Tâche | Aufgabe |
152
+ | Sub-task | Sous-tâche | Unteraufgabe |
153
+ | Done | Terminé | Erledigt |
154
+ | In Progress | En cours | In Bearbeitung |
155
+ | To Do | À faire | Zu erledigen |
156
+ | Open | Ouvert | Offen |
157
+ | High | Haute | Hoch |
158
+ | Epic Link | Lien d'épopée | Epic-Link |
159
+
160
+ **Before writing JQL:**
161
+ 1. `jira_get_issue_types()` - Discover actual type names
162
+ 2. `jira_get_fields(search="epic")` - Discover field names and IDs
163
+ 3. Use `cf[ID]` syntax for language-independent queries: `cf[10014] = PROJ-123`
164
+
165
+ The server automatically handles localized changelog field names for activity tracking.
166
+
167
+ ---
143
168
 
144
169
  ### 1. jira_search_issues
145
170
  **Description**: Search for Jira issues using JQL. Auto-fetches all results (up to 5000).
@@ -183,7 +208,7 @@ When XHTML validation fails, the response includes element ID and suggested acti
183
208
  | fields | string[] | ✗ | Specific fields to return |
184
209
  | expand | string[] | ✗ | Additional data (e.g., "changelog", "renderedFields") |
185
210
 
186
- **Returns**: `bufferId` with metadata `{resourceType: "jira_issue", title: "PROJ-123: Summary", issueId, projectKey}`. Use `buffer_get_chunk` to read, `buffer_grep` to search.
211
+ **Returns**: `bufferId` with metadata `{resourceType: "jira_issue", title: "PROJ-123: Summary", issueId, projectKey}`. Use `buffer_get_items` to read, `buffer_grep` to search.
187
212
 
188
213
  ---
189
214
 
@@ -254,7 +279,7 @@ When XHTML validation fails, the response includes element ID and suggested acti
254
279
  | issueKey | string | ✓ | Issue key |
255
280
  | orderBy | string | ✗ | Sort order ("created" or "-created") |
256
281
 
257
- **Returns**: `bufferId` with metadata `{resourceType: "jira_comments", title: "PROJ-123 comments", issueKey}`. Use `buffer_get_chunk` to read, `buffer_grep` to search.
282
+ **Returns**: `bufferId` with metadata `{resourceType: "jira_comments", title: "PROJ-123 comments", issueKey}`. Use `buffer_get_items` to read, `buffer_grep` to search.
258
283
 
259
284
  ---
260
285
 
@@ -267,7 +292,7 @@ When XHTML validation fails, the response includes element ID and suggested acti
267
292
  | recent | boolean | ✗ | Only recent projects |
268
293
  | expand | string[] | ✗ | Additional data to expand |
269
294
 
270
- **Returns**: `bufferId` with metadata `{resourceType: "jira_projects", title: "All Projects"}`. Use `buffer_get_chunk` to read, `buffer_grep` to search.
295
+ **Returns**: `bufferId` with metadata `{resourceType: "jira_projects", title: "All Projects"}`. Use `buffer_get_items` to read, `buffer_grep` to search.
271
296
 
272
297
  ---
273
298
 
@@ -280,7 +305,7 @@ When XHTML validation fails, the response includes element ID and suggested acti
280
305
  | projectKey | string | ✓ | Project key |
281
306
  | expand | string[] | ✗ | Additional data to expand |
282
307
 
283
- **Returns**: `bufferId` with metadata `{resourceType: "jira_project", title: "Project Name", projectKey}`. Use `buffer_get_chunk` to read, `buffer_grep` to search.
308
+ **Returns**: `bufferId` with metadata `{resourceType: "jira_project", title: "Project Name", projectKey}`. Use `buffer_get_items` to read, `buffer_grep` to search.
284
309
 
285
310
  ---
286
311
 
@@ -296,7 +321,29 @@ When XHTML validation fails, the response includes element ID and suggested acti
296
321
 
297
322
  ---
298
323
 
299
- ### 11. jira_get_transitions
324
+ ### 11. jira_get_fields
325
+ **Description**: Get all available Jira fields (system and custom)
326
+ **Use Cases**: Discover field names in user's language, find custom field IDs for JQL, identify Epic Link field
327
+
328
+ | Parameter | Type | Required | Description |
329
+ |-----------|------|----------|-------------|
330
+ | filter | enum | ✗ | Filter: "all" (default), "custom", "system", or "navigable" |
331
+ | search | string | ✗ | Search in field name or ID (case-insensitive) |
332
+
333
+ **Returns**: List of fields with id, name, custom, clauseNames, schemaType
334
+
335
+ **Example workflow for Epic Link in any language**:
336
+ 1. Call `jira_get_fields(search="epic")` to find the Epic Link field
337
+ 2. Look for field with `schemaType = "com.pyxis.greenhopper.jira:gh-epic-link"`
338
+ 3. Use either:
339
+ - Localized name: `"Lien d'épopée" = PROJ-123` (French)
340
+ - Language-independent: `cf[10014] = PROJ-123`
341
+
342
+ **Tip**: The `clauseNames` array shows all valid JQL names for a field. The `cf[ID]` syntax always works regardless of language.
343
+
344
+ ---
345
+
346
+ ### 12. jira_get_transitions
300
347
  **Description**: Get available workflow transitions for an issue
301
348
  **Use Cases**: Check what status changes are possible
302
349
 
@@ -306,7 +353,7 @@ When XHTML validation fails, the response includes element ID and suggested acti
306
353
 
307
354
  ---
308
355
 
309
- ### 12. jira_link_issues
356
+ ### 13. jira_link_issues
310
357
  **Description**: Create a link between two issues
311
358
  **Use Cases**: Mark blockers, relate issues, create dependencies
312
359
 
@@ -319,7 +366,7 @@ When XHTML validation fails, the response includes element ID and suggested acti
319
366
 
320
367
  ---
321
368
 
322
- ### 13. jira_get_board
369
+ ### 14. jira_get_board
323
370
  **Description**: Get Agile board information
324
371
  **Use Cases**: View board details, get board configuration
325
372
 
@@ -327,11 +374,11 @@ When XHTML validation fails, the response includes element ID and suggested acti
327
374
  |-----------|------|----------|-------------|
328
375
  | boardId | number | ✓ | Board ID |
329
376
 
330
- **Returns**: `bufferId` with metadata `{resourceType: "jira_board", title: "Board Name", boardId}`. Use `buffer_get_chunk` to read, `buffer_grep` to search.
377
+ **Returns**: `bufferId` with metadata `{resourceType: "jira_board", title: "Board Name", boardId}`. Use `buffer_get_items` to read, `buffer_grep` to search.
331
378
 
332
379
  ---
333
380
 
334
- ### 14. jira_get_sprints
381
+ ### 15. jira_get_sprints
335
382
  **Description**: List all sprints for a board
336
383
  **Use Cases**: View active sprints, check sprint schedules
337
384
 
@@ -340,11 +387,11 @@ When XHTML validation fails, the response includes element ID and suggested acti
340
387
  | boardId | number | ✓ | Board ID |
341
388
  | state | string | ✗ | Sprint state ("active", "future", "closed") |
342
389
 
343
- **Returns**: `bufferId` with metadata `{resourceType: "jira_sprints", title: "Board #123 sprints", boardId}`. Use `buffer_get_chunk` to read, `buffer_grep` to search.
390
+ **Returns**: `bufferId` with metadata `{resourceType: "jira_sprints", title: "Board #123 sprints", boardId}`. Use `buffer_get_items` to read, `buffer_grep` to search.
344
391
 
345
392
  ---
346
393
 
347
- ### 15. jira_get_sprint_issues
394
+ ### 16. jira_get_sprint_issues
348
395
  **Description**: Get all issues in a specific sprint
349
396
  **Use Cases**: View sprint backlog, check sprint progress
350
397
 
@@ -352,11 +399,11 @@ When XHTML validation fails, the response includes element ID and suggested acti
352
399
  |-----------|------|----------|-------------|
353
400
  | sprintId | number | ✓ | Sprint ID |
354
401
 
355
- **Returns**: `bufferId` with metadata `{resourceType: "jira_sprint_issues", title: "Sprint #456 issues", sprintId}`. Use `buffer_get_chunk` to read, `buffer_grep` to search.
402
+ **Returns**: `bufferId` with metadata `{resourceType: "jira_sprint_issues", title: "Sprint #456 issues", sprintId}`. Use `buffer_get_items` to read, `buffer_grep` to search.
356
403
 
357
404
  ---
358
405
 
359
- ### 16. jira_get_issue_watchers
406
+ ### 17. jira_get_issue_watchers
360
407
  **Description**: Get list of watchers on an issue
361
408
  **Use Cases**: See who's following an issue
362
409
 
@@ -366,7 +413,7 @@ When XHTML validation fails, the response includes element ID and suggested acti
366
413
 
367
414
  ---
368
415
 
369
- ### 17. jira_get_issue_worklogs
416
+ ### 18. jira_get_issue_worklogs
370
417
  **Description**: Retrieve all worklogs from a Jira issue
371
418
  **Use Cases**: Analyze time logged against an issue, see worklog history
372
419
 
@@ -374,11 +421,11 @@ When XHTML validation fails, the response includes element ID and suggested acti
374
421
  |-----------|------|----------|-------------|
375
422
  | issueKey | string | ✓ | Issue key (e.g., PROJ-123) |
376
423
 
377
- **Returns**: `bufferId` with metadata `{resourceType: "jira_worklogs", title: "PROJ-123 worklogs", issueKey}`. Includes `worklogCount`, `totalTimeSpentSeconds`, `totalTimeSpent`, `worklogs`. Use `buffer_get_chunk` to read, `buffer_grep` to search.
424
+ **Returns**: `bufferId` with metadata `{resourceType: "jira_worklogs", title: "PROJ-123 worklogs", issueKey}`. Includes `worklogCount`, `totalTimeSpentSeconds`, `totalTimeSpent`, `worklogs`. Use `buffer_get_items` to read, `buffer_grep` to search.
378
425
 
379
426
  ---
380
427
 
381
- ### 18. jira_get_total_worklogs
428
+ ### 19. jira_get_total_worklogs
382
429
  **Description**: Get total worklogs for an issue and all its children recursively
383
430
  **Use Cases**: Get total time spent on an Epic including all stories and sub-tasks
384
431
 
@@ -390,7 +437,30 @@ When XHTML validation fails, the response includes element ID and suggested acti
390
437
 
391
438
  ---
392
439
 
393
- ### 19. jira_get_activity_digest
440
+ ### 20. jira_list_epic_children
441
+ **Description**: List all children of an Epic/Initiative without needing JQL
442
+ **Use Cases**: Get Epic children, list Initiative epics, find issue hierarchy
443
+
444
+ Automatically detects Epic Link and Parent Link fields for language-independent queries. Handles:
445
+ - Initiative → Epic (via Parent Link)
446
+ - Epic → Story/Task/Bug (via Epic Link)
447
+ - Any parent → Subtasks
448
+
449
+ | Parameter | Type | Required | Description |
450
+ |-----------|------|----------|-------------|
451
+ | parentKey | string | ✓ | Parent issue key (Epic, Initiative, etc.) |
452
+ | type | string | ✗ | Filter by issue type (Story, Task, Bug, etc.) |
453
+ | status | "open" \| "closed" \| "all" | ✗ | Filter by status (default: "all") |
454
+ | recursive | boolean | ✗ | Include nested children recursively (default: false) |
455
+ | fields | string[] | ✗ | Specific fields to return |
456
+
457
+ **Returns**: `bufferId` with child issues (same format as `jira_search_issues`). Includes metadata `{resourceType: "jira_epic_children", parentKey, recursive, filters}`.
458
+
459
+ **Example**: `jira_list_epic_children(parentKey="PROJ-100", status="open", type="Story")`
460
+
461
+ ---
462
+
463
+ ### 21. jira_get_activity_digest
394
464
  **Description**: Get recent activity across issues for LLM analysis. Returns DIRECTLY (not buffered).
395
465
  **Use Cases**: Project activity summary, team updates, blocker detection, weekly reports
396
466
 
@@ -431,7 +501,7 @@ Fetches comments, status changes, priority changes, and assignee changes - forma
431
501
 
432
502
  ---
433
503
 
434
- ### 20. jira_get_recent_comments
504
+ ### 22. jira_get_recent_comments
435
505
  **Description**: Get comments across multiple issues for discussion analysis. Returns DIRECTLY (not buffered).
436
506
  **Use Cases**: Discussion summaries, finding comments about specific topics, tracking team communication
437
507
 
@@ -451,7 +521,7 @@ Fetches comments, status changes, priority changes, and assignee changes - forma
451
521
 
452
522
  ---
453
523
 
454
- ### 21. jira_get_changelog
524
+ ### 23. jira_get_changelog
455
525
  **Description**: Get field changes across issues for tracking what happened. Returns DIRECTLY (not buffered).
456
526
  **Use Cases**: Status change tracking, priority escalation analysis, assignment history
457
527
 
@@ -481,7 +551,7 @@ Fetches comments, status changes, priority changes, and assignee changes - forma
481
551
 
482
552
  ---
483
553
 
484
- ### 22. jira_analyze_epic
554
+ ### 24. jira_analyze_epic
485
555
  **Description**: Comprehensive Epic/Feature analysis for LLM insights. Returns DIRECTLY (not buffered).
486
556
  **Use Cases**: Epic progress analysis, velocity tracking, time metrics, feature status
487
557
 
@@ -500,7 +570,7 @@ Fetches comments, status changes, priority changes, and assignee changes - forma
500
570
  - **Linked Resources**: Confluence pages, related issues
501
571
  - **Recent Discussions**: Comments from the last N days
502
572
 
503
- **Example output**:
573
+ **Example output** *(status names will be in your Jira's language)*:
504
574
  ```markdown
505
575
  # Epic Analysis: PROJ-100
506
576
  **Payment Gateway Integration**
@@ -526,6 +596,140 @@ Currently **3 issues** are in progress.
526
596
 
527
597
  ---
528
598
 
599
+ ### 25. jira_epic_summary
600
+ **Description**: Lightweight Epic/Initiative summary with hierarchy and status breakdown. Returns DIRECTLY (not buffered).
601
+ **Use Cases**: Quick Epic overview, status breakdown, cross-project dependencies
602
+
603
+ Provides quick overview without the heavy metrics of `jira_analyze_epic` - no time tracking, no comments, no Confluence links.
604
+
605
+ | Parameter | Type | Required | Description |
606
+ |-----------|------|----------|-------------|
607
+ | issueKey | string | ✓ | Epic or parent issue key (e.g., PROJ-123) |
608
+ | includeLinks | boolean | ✗ | Show cross-project dependencies (default: true) |
609
+ | maxDepth | number | ✗ | Maximum recursion depth (default: 3) |
610
+
611
+ **Returns**: Markdown summary including:
612
+ - Issue list (key, type, summary, status, assignee)
613
+ - Status breakdown by issue type
614
+ - Cross-project dependencies (links to issues outside hierarchy)
615
+
616
+ **Example output**:
617
+ ```markdown
618
+ # Epic Summary: PROJ-100
619
+ **Payment Gateway Integration**
620
+
621
+ **Status**: In Progress | **Completion**: 65%
622
+
623
+ ## Hierarchy (17 issues)
624
+
625
+ | Key | Type | Summary | Status | Assignee |
626
+ |-----|------|---------|--------|----------|
627
+ | PROJ-101 | Story | Stripe integration | Done | Alice |
628
+ | PROJ-102 | Story | PayPal support | In Progress | Bob |
629
+
630
+ ## Status Breakdown
631
+
632
+ | Type | Total | Done | In Progress | To Do | Completion |
633
+ |------|-------|------|-------------|-------|------------|
634
+ | Story | 5 | 3 | 1 | 1 | 60% |
635
+ | Sub-task | 12 | 8 | 2 | 2 | 67% |
636
+
637
+ ## Cross-Project Dependencies (3)
638
+
639
+ | Source | Relationship | Target | Project | Status |
640
+ |--------|--------------|--------|---------|--------|
641
+ | PROJ-102 | blocks | CORE-45 | CORE | Open |
642
+ ```
643
+
644
+ ---
645
+
646
+ ### 26. jira_analyze_sprint
647
+ **Description**: Comprehensive Sprint analysis for LLM insights. Returns DIRECTLY (not buffered).
648
+ **Use Cases**: Sprint progress, risk assessment, team workload, daily standups
649
+
650
+ | Parameter | Type | Required | Description |
651
+ |-----------|------|----------|-------------|
652
+ | sprintId | number | ✓ | Sprint ID (from `jira_get_sprints`) |
653
+ | includeComments | boolean | ✗ | Include recent comments (default: true) |
654
+ | commentDays | number | ✗ | Days of comments to include (default: 7) |
655
+ | includeRisks | boolean | ✗ | Calculate risk indicators (default: true) |
656
+
657
+ **Finding sprintId**: Call `jira_get_sprints(boardId)` first. BoardId can be found in Jira URLs like `/secure/RapidBoard.jspa?rapidView=123`.
658
+
659
+ **Returns**: Comprehensive markdown analysis including:
660
+ - **Sprint Metadata**: Name, state, dates, duration, days remaining
661
+ - **Progress**: Completion percentage, status breakdown (Done/In Progress/To Do)
662
+ - **Issue Breakdown**: By type with status distribution
663
+ - **Time Metrics**: Estimated vs spent vs remaining, burn rate warning
664
+ - **Team Distribution**: Who's working on what, sorted by workload
665
+ - **Risk Indicators**: Stale issues (3+ days no update), blocked, high-priority unstarted
666
+ - **Recent Discussions**: Comments from last N days
667
+
668
+ **Example output**:
669
+ ```markdown
670
+ # Sprint Analysis: Sprint 42
671
+
672
+ **State**: Active
673
+ **Period**: Jan 20 - Feb 3 (14 days)
674
+ **Progress**: Day 10 of 14 (4 days remaining)
675
+
676
+ ---
677
+ ## Sprint Progress
678
+
679
+ **Completion**: 65% (13 of 20 issues done)
680
+
681
+ | Status | Count | % |
682
+ |--------|-------|---|
683
+ | Done | 13 | 65% |
684
+ | In Progress | 4 | 20% |
685
+ | To Do | 3 | 15% |
686
+
687
+ ## Issue Breakdown by Type
688
+
689
+ | Type | Total | Done | In Progress | To Do |
690
+ |------|-------|------|-------------|-------|
691
+ | Story | 8 | 5 | 2 | 1 |
692
+ | Bug | 6 | 4 | 1 | 1 |
693
+ | Task | 6 | 4 | 1 | 1 |
694
+
695
+ ## Time Metrics
696
+
697
+ - **Estimated**: 120h (3w)
698
+ - **Spent**: 85h (2w 1d)
699
+ - **Remaining**: 35h (4d 3h)
700
+ - **Burn Rate**: 71% spent, 65% done
701
+
702
+ ## Team Distribution
703
+
704
+ | Assignee | Total | Done | In Progress |
705
+ |----------|-------|------|-------------|
706
+ | Alice | 5 | 3 | 2 |
707
+ | Bob | 4 | 3 | 1 |
708
+ | Unassigned | 3 | 0 | 0 |
709
+
710
+ ## Risk Indicators
711
+
712
+ ⚠️ **3 issues at risk:**
713
+ - **PROJ-456**: In Progress for 5 days without update
714
+ - **PROJ-789**: High priority, still To Do
715
+ - **PROJ-012**: Blocked by PROJ-999 (In Progress) - external to sprint
716
+
717
+ ## Recent Discussions (last 7 days)
718
+
719
+ - **PROJ-123** @alice (Jan 28): "Found edge case in payment flow..."
720
+ - **PROJ-456** @bob (Jan 27): "Blocked by API changes..."
721
+
722
+ ---
723
+ ## Summary
724
+
725
+ Sprint "Sprint 42" is **65% complete** with 4 issues in progress and 3 issues remaining.
726
+ **4 days remaining** in the sprint.
727
+ **3 issues** need attention.
728
+ Time tracking shows **71% of estimate used** for **65% completion**.
729
+ ```
730
+
731
+ ---
732
+
529
733
  ## Confluence Tools (21)
530
734
 
531
735
  ### 1. confluence_search_content
@@ -537,7 +741,7 @@ Currently **3 issues** are in progress.
537
741
  | cql | string | ✓ | CQL query string |
538
742
  | expand | string[] | ✗ | Additional data to expand |
539
743
 
540
- **Returns**: `bufferId` with metadata `{resourceType: "confluence_search", title: "CQL: ..."}`. Use `buffer_get_chunk` to read, `buffer_grep` to search.
744
+ **Returns**: `bufferId` with metadata `{resourceType: "confluence_search", title: "CQL: ..."}`. Use `buffer_get_items` to read, `buffer_grep` to search.
541
745
 
542
746
  ---
543
747
 
@@ -640,7 +844,7 @@ buffer_edit(bufferId=pageBuffer, after=5, fromBufferId=newContentBuffer)
640
844
  |-----------|------|----------|-------------|
641
845
  | type | string | ✗ | Space type filter ("global" or "personal") |
642
846
 
643
- **Returns**: `bufferId` with metadata `{resourceType: "confluence_spaces", title: "All Spaces"}`. Use `buffer_get_chunk` to read, `buffer_grep` to search.
847
+ **Returns**: `bufferId` with metadata `{resourceType: "confluence_spaces", title: "All Spaces"}`. Use `buffer_get_items` to read, `buffer_grep` to search.
644
848
 
645
849
  ---
646
850
 
@@ -653,7 +857,7 @@ buffer_edit(bufferId=pageBuffer, after=5, fromBufferId=newContentBuffer)
653
857
  | spaceKey | string | ✓ | Space key |
654
858
  | expand | string[] | ✗ | Additional data to expand |
655
859
 
656
- **Returns**: `bufferId` with metadata `{resourceType: "confluence_space", title: "Space Name", spaceKey}`. Use `buffer_get_chunk` to read, `buffer_grep` to search.
860
+ **Returns**: `bufferId` with metadata `{resourceType: "confluence_space", title: "Space Name", spaceKey}`. Use `buffer_get_items` to read, `buffer_grep` to search.
657
861
 
658
862
  ---
659
863
 
@@ -666,7 +870,7 @@ buffer_edit(bufferId=pageBuffer, after=5, fromBufferId=newContentBuffer)
666
870
  | pageId | string | ✓ | Parent page ID (accepts string or number) |
667
871
  | expand | string[] | ✗ | Additional data to expand |
668
872
 
669
- **Returns**: `bufferId` with metadata `{resourceType: "confluence_page_children", title: "Page 123 children", pageId}`. Use `buffer_get_chunk` to read, `buffer_grep` to search.
873
+ **Returns**: `bufferId` with metadata `{resourceType: "confluence_page_children", title: "Page 123 children", pageId}`. Use `buffer_get_items` to read, `buffer_grep` to search.
670
874
 
671
875
  ---
672
876
 
@@ -689,7 +893,7 @@ buffer_edit(bufferId=pageBuffer, after=5, fromBufferId=newContentBuffer)
689
893
  |-----------|------|----------|-------------|
690
894
  | pageId | string | ✓ | Page ID (accepts string or number) |
691
895
 
692
- **Returns**: `bufferId` with metadata `{resourceType: "confluence_comments", title: "Page 123 comments", pageId}`. Use `buffer_get_chunk` to read, `buffer_grep` to search.
896
+ **Returns**: `bufferId` with metadata `{resourceType: "confluence_comments", title: "Page 123 comments", pageId}`. Use `buffer_get_items` to read, `buffer_grep` to search.
693
897
 
694
898
  ---
695
899
 
@@ -713,7 +917,7 @@ buffer_edit(bufferId=pageBuffer, after=5, fromBufferId=newContentBuffer)
713
917
  |-----------|------|----------|-------------|
714
918
  | pageId | string | ✓ | Page ID (accepts string or number) |
715
919
 
716
- **Returns**: `bufferId` with metadata `{resourceType: "confluence_attachments", title: "Page 123 attachments", pageId}`. Use `buffer_get_chunk` to read, `buffer_grep` to search.
920
+ **Returns**: `bufferId` with metadata `{resourceType: "confluence_attachments", title: "Page 123 attachments", pageId}`. Use `buffer_get_items` to read, `buffer_grep` to search.
717
921
 
718
922
  ---
719
923
 
@@ -739,7 +943,7 @@ buffer_edit(bufferId=pageBuffer, after=5, fromBufferId=newContentBuffer)
739
943
  |-----------|------|----------|-------------|
740
944
  | spaceKey | string | ✗ | Filter by space key |
741
945
 
742
- **Returns**: `bufferId` with metadata `{resourceType: "confluence_drafts", title: "All Drafts"}`. Includes `drafts` array with `draftId`, `title`, `spaceKey`, `spaceName`, `created`, `url`. Use `buffer_get_chunk` to read, `buffer_grep` to search.
946
+ **Returns**: `bufferId` with metadata `{resourceType: "confluence_drafts", title: "All Drafts"}`. Includes `drafts` array with `draftId`, `title`, `spaceKey`, `spaceName`, `created`, `url`. Use `buffer_get_items` to read, `buffer_grep` to search.
743
947
 
744
948
  ---
745
949
 
@@ -904,6 +1108,8 @@ buffer_edit(bufferId=pageBuffer, after=5, fromBufferId=newContentBuffer)
904
1108
 
905
1109
  ### JQL (Jira Query Language) Examples
906
1110
 
1111
+ > **Note**: Type, status, and priority names below are in English. Use `jira_get_issue_types()` and `jira_get_fields()` to discover actual names for your Jira instance. Functions like `currentUser()`, `openSprints()`, `startOfDay()` work in all languages.
1112
+
907
1113
  ```jql
908
1114
  # Find open bugs assigned to you
909
1115
  project = PROJ AND type = Bug AND status = Open AND assignee = currentUser()
@@ -924,6 +1130,8 @@ AND priority in (High, Critical) ORDER BY created DESC
924
1130
 
925
1131
  ### CQL (Confluence Query Language) Examples
926
1132
 
1133
+ > **Note**: CQL keywords (`type`, `space`, `label`, `text`) and type values (`page`, `blogpost`) are language-independent. Space keys, labels, and usernames are instance-specific.
1134
+
927
1135
  ```cql
928
1136
  # Find pages by title keyword
929
1137
  type=page AND title~"API Documentation"
@@ -1002,7 +1210,7 @@ AND lastModified >= now("-30d")
1002
1210
 
1003
1211
  ---
1004
1212
 
1005
- ## Tempo Tools (12)
1213
+ ## Tempo Tools (13)
1006
1214
 
1007
1215
  ### 1. tempo_get_worklogs
1008
1216
  **Description**: Get Tempo worklogs with filters
@@ -1018,7 +1226,7 @@ AND lastModified >= now("-30d")
1018
1226
 
1019
1227
  **WARNING**: No workerKey = returns ALL worklogs.
1020
1228
 
1021
- **Returns**: `bufferId` with metadata `{resourceType: "tempo_worklogs", title: "Worklogs 2024-01-01 to 2024-01-31"}`. Use `buffer_get_chunk` to read, `buffer_grep` to search.
1229
+ **Returns**: `bufferId` with metadata `{resourceType: "tempo_worklogs", title: "Worklogs 2024-01-01 to 2024-01-31"}`. Use `buffer_get_items` to read, `buffer_grep` to search.
1022
1230
 
1023
1231
  ---
1024
1232
 
@@ -1030,7 +1238,7 @@ AND lastModified >= now("-30d")
1030
1238
  |-----------|------|----------|-------------|
1031
1239
  | worklogId | number | ✓ | Tempo worklog ID |
1032
1240
 
1033
- **Returns**: `bufferId` with metadata `{resourceType: "tempo_worklog", title: "PROJ-123 worklog #456", resourceId, issueKey}`. Use `buffer_get_chunk` to read, `buffer_grep` to search.
1241
+ **Returns**: `bufferId` with metadata `{resourceType: "tempo_worklog", title: "PROJ-123 worklog #456", resourceId, issueKey}`. Use `buffer_get_items` to read, `buffer_grep` to search.
1034
1242
 
1035
1243
  ---
1036
1244
 
@@ -1083,7 +1291,7 @@ AND lastModified >= now("-30d")
1083
1291
  |-----------|------|----------|-------------|
1084
1292
  | (none) | | | |
1085
1293
 
1086
- **Returns**: `bufferId` with metadata `{resourceType: "tempo_accounts", title: "All Tempo Accounts"}`. Use `buffer_get_chunk` to read, `buffer_grep` to search.
1294
+ **Returns**: `bufferId` with metadata `{resourceType: "tempo_accounts", title: "All Tempo Accounts"}`. Use `buffer_get_items` to read, `buffer_grep` to search.
1087
1295
 
1088
1296
  ---
1089
1297
 
@@ -1095,7 +1303,7 @@ AND lastModified >= now("-30d")
1095
1303
  |-----------|------|----------|-------------|
1096
1304
  | accountKey | string | ✓ | Account key |
1097
1305
 
1098
- **Returns**: `bufferId` with metadata `{resourceType: "tempo_account", title: "Account Name", accountKey}`. Use `buffer_get_chunk` to read, `buffer_grep` to search.
1306
+ **Returns**: `bufferId` with metadata `{resourceType: "tempo_account", title: "Account Name", accountKey}`. Use `buffer_get_items` to read, `buffer_grep` to search.
1099
1307
 
1100
1308
  ---
1101
1309
 
@@ -1107,7 +1315,7 @@ AND lastModified >= now("-30d")
1107
1315
  |-----------|------|----------|-------------|
1108
1316
  | (none) | | | |
1109
1317
 
1110
- **Returns**: `bufferId` with metadata `{resourceType: "tempo_teams", title: "All Tempo Teams"}`. Use `buffer_get_chunk` to read, `buffer_grep` to search.
1318
+ **Returns**: `bufferId` with metadata `{resourceType: "tempo_teams", title: "All Tempo Teams"}`. Use `buffer_get_items` to read, `buffer_grep` to search.
1111
1319
 
1112
1320
  ---
1113
1321
 
@@ -1119,7 +1327,7 @@ AND lastModified >= now("-30d")
1119
1327
  |-----------|------|----------|-------------|
1120
1328
  | teamId | number | ✓ | Team ID |
1121
1329
 
1122
- **Returns**: `bufferId` with metadata `{resourceType: "tempo_team", title: "Team Name", teamId}`. Use `buffer_get_chunk` to read, `buffer_grep` to search.
1330
+ **Returns**: `bufferId` with metadata `{resourceType: "tempo_team", title: "Team Name", teamId}`. Use `buffer_get_items` to read, `buffer_grep` to search.
1123
1331
 
1124
1332
  ---
1125
1333
 
@@ -1133,7 +1341,7 @@ AND lastModified >= now("-30d")
1133
1341
  | dateFrom | string | ✓ | Start date (YYYY-MM-DD) |
1134
1342
  | dateTo | string | ✓ | End date (YYYY-MM-DD) |
1135
1343
 
1136
- **Returns**: `bufferId` with metadata `{resourceType: "tempo_team_worklogs", title: "Team #123 worklogs 2024-01-01 to 2024-01-31", teamId}`. Use `buffer_get_chunk` to read, `buffer_grep` to search.
1344
+ **Returns**: `bufferId` with metadata `{resourceType: "tempo_team_worklogs", title: "Team #123 worklogs 2024-01-01 to 2024-01-31", teamId}`. Use `buffer_get_items` to read, `buffer_grep` to search.
1137
1345
 
1138
1346
  ---
1139
1347
 
@@ -1159,7 +1367,38 @@ AND lastModified >= now("-30d")
1159
1367
  | dateFrom | string | ✗ | Start date filter (YYYY-MM-DD) |
1160
1368
  | dateTo | string | ✗ | End date filter (YYYY-MM-DD) |
1161
1369
 
1162
- **Returns**: `bufferId` with metadata `{resourceType: "tempo_epic_worklogs", title: "PROJ-100 epic worklogs", epicKey}`. Includes `totalTimeSpent`, `totalWorklogCount`, `issueCount`, breakdown by issue, and full worklog list. Use `buffer_get_chunk` to read, `buffer_grep` to search. More efficient than `jira_get_total_worklogs` for Tempo instances.
1370
+ **Returns**: `bufferId` with metadata `{resourceType: "tempo_epic_worklogs", title: "PROJ-100 epic worklogs", epicKey}`. Includes `totalTimeSpent`, `totalWorklogCount`, `issueCount`, breakdown by issue, and full worklog list. Use `buffer_get_items` to read, `buffer_grep` to search. More efficient than `jira_get_total_worklogs` for Tempo instances.
1371
+
1372
+ ---
1373
+
1374
+ ### 13. tempo_get_top_worklogs
1375
+ **Description**: Get top issues or users by workload for a period. Returns DIRECTLY (not buffered).
1376
+ **Use Cases**: Top tickets by workload, most active contributors, time distribution analysis
1377
+
1378
+ Aggregates Tempo worklogs and returns ranked results in markdown format.
1379
+
1380
+ | Parameter | Type | Required | Description |
1381
+ |-----------|------|----------|-------------|
1382
+ | since | string | ✓ | Date expression: "today", "last_week", "this_month", "7d", "30d", etc. |
1383
+ | projectKey | string | ✗ | Filter by project key |
1384
+ | groupBy | "issue" \| "user" | ✗ | Group results by issue or user (default: "issue") |
1385
+ | limit | number | ✗ | Maximum results to return (default: 10) |
1386
+
1387
+ **Returns**: Markdown table with ranked results:
1388
+ ```markdown
1389
+ # Top 10 Issues by Workload (MESH)
1390
+ **Period**: 2026-01-20 to 2026-01-31
1391
+
1392
+ | Rank | Issue | Time Spent | Entries | Contributors |
1393
+ |------|-------|------------|---------|--------------|
1394
+ | 1 | MESH-4898 | 16h | 8 | Alice, Bob |
1395
+ | 2 | MESH-4899 | 8h 30m | 4 | Charlie |
1396
+
1397
+ ---
1398
+ **Total** (top 10): 45h 30m across 42 worklogs
1399
+ ```
1400
+
1401
+ **Example**: `tempo_get_top_worklogs(since="last_week", projectKey="MESH", groupBy="issue", limit=10)`
1163
1402
 
1164
1403
  ---
1165
1404
 
@@ -1178,15 +1417,14 @@ Buffer tools are used for local content management. All buffer operations are in
1178
1417
 
1179
1418
  **Content types**:
1180
1419
  - **xhtml**: Confluence storage format. Returns element IDs for `buffer_edit`.
1181
- - **json**: JSON data (array or object). Use `buffer_pipeline` to filter, aggregate, and transform.
1182
- - **plain**: Raw text content.
1420
+ - **json**: JSON data (array or object). Use `buffer_get_items` to access, `buffer_pipeline` to transform.
1183
1421
 
1184
1422
  **Use Cases**: Draft new Confluence pages, prepare content before persisting, create JSON arrays for aggregation
1185
1423
 
1186
1424
  | Parameter | Type | Required | Description |
1187
1425
  |-----------|------|----------|-------------|
1188
1426
  | content | string \| object \| array | ✓ | Content: string for all types, or object/array for json (auto-stringified) |
1189
- | contentType | enum | ✓ | Content type: `"xhtml"` for Confluence, `"plain"` for text, `"json"` for data |
1427
+ | contentType | enum | ✓ | Content type: `"xhtml"` for Confluence, `"json"` for data |
1190
1428
  | metadata | object | ✗ | Optional metadata to attach to the buffer |
1191
1429
 
1192
1430
  **Auto-stringify for JSON**: When `contentType: "json"`, you can pass native objects/arrays directly instead of JSON strings:
@@ -1200,8 +1438,6 @@ buffer_create({ content: [{"key":"PROJ-1"}], contentType: "json" }) // Native
1200
1438
 
1201
1439
  **Response for JSON includes**: `bufferId`, `contentType`, `bufferSizeBytes`, `structure` (type, itemCount/keys, preview), `hint` (suggested next tool)
1202
1440
 
1203
- **Response for plain includes**: `bufferId`, `contentType`, `bufferSizeBytes`, `createdAt`, `expiresAt`
1204
-
1205
1441
  **CDATA Detection**: For XHTML content, the tool detects if content is incorrectly wrapped in `<![CDATA[...]]>` and returns a clear error. CDATA should only be used inside `<ac:plain-text-body>` elements (for code blocks and PlantUML), never around the entire content.
1206
1442
 
1207
1443
  **Example workflow for new Confluence page**:
@@ -1228,41 +1464,24 @@ buffer_create({ content: [{"key":"PROJ-1"}], contentType: "json" }) // Native
1228
1464
 
1229
1465
  ---
1230
1466
 
1231
- ### 2. buffer_get_chunk
1232
- **Description**: Retrieve raw character chunks from a buffer. Returns raw content by character offset.
1233
- **Use Cases**: Plain text buffers only, raw character access
1234
-
1235
- **BLOCKED FOR**: JSON arrays and XHTML content. Use instead:
1236
- - JSON arrays: `buffer_get_items` - returns complete items
1237
- - XHTML: `buffer_get_element` - returns element content
1467
+ ### 2. buffer_get_items
1468
+ **Description**: Retrieve items from a JSON buffer (arrays by index, objects by key).
1469
+ **Use Cases**: Iterate through search results, access object properties, process items in batches
1238
1470
 
1239
1471
  | Parameter | Type | Required | Description |
1240
1472
  |-----------|------|----------|-------------|
1241
- | bufferId | string | ✓ | Buffer ID from previous tool response |
1242
- | offset | number | ✗ | Character position to start from (default: 0) |
1243
- | limit | number | ✗ | Maximum characters to return (default: 5000) |
1473
+ | bufferId | string | ✓ | Buffer ID containing JSON array or object |
1474
+ | start | number | ✗ | Array: starting index (0-based, default: 0) |
1475
+ | count | number | ✗ | Array: number of items to return (default: 10, max: 100) |
1476
+ | keys | string[] | ✗ | Object: specific keys to retrieve (omit for all keys) |
1244
1477
 
1245
- **Response includes**: `bufferId`, `content`, `offset`, `limit`, `totalSize`, `hasMore`, `metadata`
1478
+ **Type Requirement**: Buffer must have `contentType: "json"`. Returns error if buffer is XHTML.
1246
1479
 
1247
- **Error on JSON/XHTML**: Returns error with guidance to use correct tool
1248
-
1249
- ---
1480
+ **Response for arrays**: `bufferId`, `type: "array"`, `items`, `start`, `count`, `totalItems`, `hasMore`, `itemSchema`
1250
1481
 
1251
- ### 3. buffer_get_items
1252
- **Description**: Retrieve complete JSON array items from a buffer. Unlike `buffer_get_chunk` which may truncate mid-item, this returns whole items.
1253
- **Use Cases**: Iterate through search results, process items in batches, inspect specific items
1482
+ **Response for objects**: `bufferId`, `type: "object"`, `data`, `keys` (all available), `foundKeys`, `missingKeys` (if any)
1254
1483
 
1255
- | Parameter | Type | Required | Description |
1256
- |-----------|------|----------|-------------|
1257
- | bufferId | string | ✓ | Buffer ID containing JSON array |
1258
- | start | number | ✗ | Starting index (0-based, default: 0) |
1259
- | count | number | ✗ | Number of items to return (default: 10, max: 100) |
1260
-
1261
- **Type Requirement**: Buffer must have `contentType: "json"`. Returns error if buffer is XHTML or plain text.
1262
-
1263
- **Response includes**: `bufferId`, `items` (array of parsed objects), `start`, `count`, `totalItems`, `hasMore`, `itemSchema` (field names in items)
1264
-
1265
- **Example - Get first 10 items:**
1484
+ **Example - Array: Get first 10 items:**
1266
1485
  ```typescript
1267
1486
  buffer_get_items({
1268
1487
  bufferId: "buf_xxx",
@@ -1270,6 +1489,7 @@ buffer_get_items({
1270
1489
  count: 10
1271
1490
  })
1272
1491
  // Returns: {
1492
+ // type: "array",
1273
1493
  // items: [{key: "PROJ-1", ...}, {key: "PROJ-2", ...}, ...],
1274
1494
  // start: 0,
1275
1495
  // count: 10,
@@ -1279,23 +1499,42 @@ buffer_get_items({
1279
1499
  // }
1280
1500
  ```
1281
1501
 
1282
- **Example - Page through results:**
1502
+ **Example - Array: Page through results:**
1283
1503
  ```typescript
1284
1504
  // Page 1
1285
1505
  buffer_get_items({ bufferId: "buf_xxx", start: 0, count: 50 })
1286
1506
  // Page 2
1287
1507
  buffer_get_items({ bufferId: "buf_xxx", start: 50, count: 50 })
1288
- // Page 3
1289
- buffer_get_items({ bufferId: "buf_xxx", start: 100, count: 50 })
1290
1508
  ```
1291
1509
 
1292
- **When to use `buffer_get_items` vs `buffer_get_chunk`:**
1293
- - Use `buffer_get_items` for JSON array buffers when you need complete items
1294
- - Use `buffer_get_chunk` for XHTML/plain text or when you need raw character access
1510
+ **Example - Object: Get specific keys:**
1511
+ ```typescript
1512
+ buffer_get_items({
1513
+ bufferId: "buf_xxx",
1514
+ keys: ["name", "email"]
1515
+ })
1516
+ // Returns: {
1517
+ // type: "object",
1518
+ // data: { name: "John", email: "john@example.com" },
1519
+ // requestedKeys: ["name", "email"],
1520
+ // foundKeys: ["name", "email"],
1521
+ // availableKeys: ["name", "email", "age", "phone"]
1522
+ // }
1523
+ ```
1524
+
1525
+ **Example - Object: Get all keys:**
1526
+ ```typescript
1527
+ buffer_get_items({ bufferId: "buf_xxx" })
1528
+ // Returns: {
1529
+ // type: "object",
1530
+ // data: { name: "John", email: "john@example.com", age: 30, phone: "..." },
1531
+ // keys: ["name", "email", "age", "phone"]
1532
+ // }
1533
+ ```
1295
1534
 
1296
1535
  ---
1297
1536
 
1298
- ### 4. buffer_get_element
1537
+ ### 3. buffer_get_element
1299
1538
  **Description**: Get the raw XHTML content of a specific element by ID. Use to inspect problematic elements when fixing XHTML parsing errors.
1300
1539
  **Use Cases**: Debug XHTML validation errors, inspect element content before editing, targeted error recovery
1301
1540
 
@@ -1328,6 +1567,70 @@ buffer_get_element({
1328
1567
 
1329
1568
  ---
1330
1569
 
1570
+ ### 4. buffer_set_items
1571
+ **Description**: Update or append items in a JSON buffer (arrays by ID/append, objects by key).
1572
+ **Use Cases**: Modify JSON data after processing, update specific fields, append new items to arrays, merge new data into objects
1573
+
1574
+ | Parameter | Type | Required | Description |
1575
+ |-----------|------|----------|-------------|
1576
+ | bufferId | string | ✓ | Buffer ID containing JSON array or object |
1577
+ | itemId | number | ✗ | Array: ID of the item to update (from buffer structure) |
1578
+ | append | boolean | ✗ | Array: append new item instead of updating existing |
1579
+ | data | object | ✓ | Data to set/merge/append |
1580
+
1581
+ **Type Requirement**: Buffer must have `contentType: "json"`. Returns error if buffer is XHTML.
1582
+
1583
+ **For Arrays - Update**: Update an item by its `__jicon_id` (visible in buffer structure). The `data` object replaces the existing item.
1584
+
1585
+ **For Arrays - Append**: Set `append=true` to add a new item to the array. Returns the new item's ID.
1586
+
1587
+ **For Objects**: Merge the `data` object into the root object. Existing keys are updated, new keys are added.
1588
+
1589
+ **Response for array update**: `bufferId`, `type: "array"`, `action: "replace"`, `itemId`, `totalItems`
1590
+
1591
+ **Response for array append**: `bufferId`, `type: "array"`, `action: "append"`, `appendedId`, `totalItems`
1592
+
1593
+ **Response for objects**: `bufferId`, `type: "object"`, `action: "merge"`, `updatedKeys`, `addedKeys`, `keys`
1594
+
1595
+ **Example - Array: Update item by ID:**
1596
+ ```typescript
1597
+ // Buffer structure shows items with IDs: [{id: 1, ...}, {id: 2, ...}]
1598
+ buffer_set_items({
1599
+ bufferId: "buf_xxx",
1600
+ itemId: 1,
1601
+ data: { status: "completed", updatedAt: "2024-01-15" }
1602
+ })
1603
+ // Returns: { type: "array", action: "replace", itemId: 1, totalItems: 2 }
1604
+ ```
1605
+
1606
+ **Example - Array: Append new item:**
1607
+ ```typescript
1608
+ buffer_set_items({
1609
+ bufferId: "buf_xxx",
1610
+ append: true,
1611
+ data: { key: "PROJ-123", summary: "New issue" }
1612
+ })
1613
+ // Returns: { type: "array", action: "append", appendedId: 3, totalItems: 3 }
1614
+ ```
1615
+
1616
+ **Example - Object: Update/add keys:**
1617
+ ```typescript
1618
+ // Buffer contains: { name: "Alice", age: 30 }
1619
+ buffer_set_items({
1620
+ bufferId: "buf_xxx",
1621
+ data: { age: 31, email: "alice@example.com" }
1622
+ })
1623
+ // Returns: {
1624
+ // type: "object",
1625
+ // action: "merge",
1626
+ // updatedKeys: ["age"],
1627
+ // addedKeys: ["email"],
1628
+ // keys: ["name", "age", "email"]
1629
+ // }
1630
+ ```
1631
+
1632
+ ---
1633
+
1331
1634
  ### 5. buffer_list
1332
1635
  **Description**: List all active buffers with their metadata
1333
1636
  **Use Cases**: View active buffers, check expiration times
@@ -1676,9 +1979,9 @@ buffer_pipeline({
1676
1979
  | Parameter | Type | Required | Description |
1677
1980
  |-----------|------|----------|-------------|
1678
1981
  | bufferId | string | ✓ | Buffer ID to modify |
1679
- | old_string | string | ✓ | Exact text to replace |
1680
- | new_string | string | ✓ | Replacement text |
1681
- | replace_all | boolean | ✗ | Replace all occurrences (default: false) |
1982
+ | oldString | string | ✓ | Exact text to replace |
1983
+ | newString | string | ✓ | Replacement text |
1984
+ | replaceAll | boolean | ✗ | Replace all occurrences (default: false) |
1682
1985
 
1683
1986
  **Plain/JSON Parameters (append):**
1684
1987
 
@@ -2205,7 +2508,7 @@ Tools enforce type-safe buffer access - each tool only accepts buffers of the ty
2205
2508
  |-------------|------------------------------|
2206
2509
  | **json** | `buffer_pipeline`, `buffer_get_items` |
2207
2510
  | **xhtml** | `buffer_get_structure`, `buffer_get_element`, `buffer_validate_xhtml`, `confluence_draft_create` (with bufferId), `confluence_draft_save` |
2208
- | **any** | `buffer_grep`, `buffer_get_chunk`, `buffer_list`, `buffer_clear`, `buffer_edit` (string mode) |
2511
+ | **any** | `buffer_grep`, `buffer_list`, `buffer_clear`, `buffer_edit` (string mode) |
2209
2512
 
2210
2513
  **Error Messages**: When you use a tool with the wrong buffer type, you get a helpful error:
2211
2514
  ```