@crypto512/jicon-mcp 1.3.0 → 2.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 (186) hide show
  1. package/PROMPT.md +16 -197
  2. package/README.md +90 -92
  3. package/TOOL_LIST.md +912 -104
  4. package/dist/config/constants.d.ts +18 -7
  5. package/dist/config/constants.d.ts.map +1 -1
  6. package/dist/config/constants.js +21 -8
  7. package/dist/config/constants.js.map +1 -1
  8. package/dist/config/loader.d.ts +11 -11
  9. package/dist/config/loader.d.ts.map +1 -1
  10. package/dist/config/loader.js +53 -93
  11. package/dist/config/loader.js.map +1 -1
  12. package/dist/config/types.d.ts +3 -6
  13. package/dist/config/types.d.ts.map +1 -1
  14. package/dist/config/types.js +2 -4
  15. package/dist/config/types.js.map +1 -1
  16. package/dist/confluence/formatters.js +1 -1
  17. package/dist/confluence/formatters.js.map +1 -1
  18. package/dist/confluence/tools.d.ts +4 -0
  19. package/dist/confluence/tools.d.ts.map +1 -1
  20. package/dist/confluence/tools.js +180 -125
  21. package/dist/confluence/tools.js.map +1 -1
  22. package/dist/index.js +22 -26
  23. package/dist/index.js.map +1 -1
  24. package/dist/jira/activity-tools.d.ts +160 -0
  25. package/dist/jira/activity-tools.d.ts.map +1 -0
  26. package/dist/jira/activity-tools.js +971 -0
  27. package/dist/jira/activity-tools.js.map +1 -0
  28. package/dist/jira/client.d.ts +39 -1
  29. package/dist/jira/client.d.ts.map +1 -1
  30. package/dist/jira/client.js +70 -0
  31. package/dist/jira/client.js.map +1 -1
  32. package/dist/jira/formatters.d.ts +1 -0
  33. package/dist/jira/formatters.d.ts.map +1 -1
  34. package/dist/jira/formatters.js +13 -12
  35. package/dist/jira/formatters.js.map +1 -1
  36. package/dist/jira/tools.d.ts +4 -0
  37. package/dist/jira/tools.d.ts.map +1 -1
  38. package/dist/jira/tools.js +189 -50
  39. package/dist/jira/tools.js.map +1 -1
  40. package/dist/jira/types.d.ts +44 -0
  41. package/dist/jira/types.d.ts.map +1 -1
  42. package/dist/permissions/filter.d.ts.map +1 -1
  43. package/dist/permissions/filter.js +8 -4
  44. package/dist/permissions/filter.js.map +1 -1
  45. package/dist/permissions/tool-registry.d.ts +9 -7
  46. package/dist/permissions/tool-registry.d.ts.map +1 -1
  47. package/dist/permissions/tool-registry.js +18 -6
  48. package/dist/permissions/tool-registry.js.map +1 -1
  49. package/dist/permissions/write-home-validator.d.ts.map +1 -1
  50. package/dist/permissions/write-home-validator.js +13 -3
  51. package/dist/permissions/write-home-validator.js.map +1 -1
  52. package/dist/tempo/client.d.ts +6 -0
  53. package/dist/tempo/client.d.ts.map +1 -1
  54. package/dist/tempo/client.js +15 -1
  55. package/dist/tempo/client.js.map +1 -1
  56. package/dist/tempo/defaults.d.ts +17 -0
  57. package/dist/tempo/defaults.d.ts.map +1 -0
  58. package/dist/tempo/defaults.js +26 -0
  59. package/dist/tempo/defaults.js.map +1 -0
  60. package/dist/tempo/tools.d.ts +11 -2
  61. package/dist/tempo/tools.d.ts.map +1 -1
  62. package/dist/tempo/tools.js +119 -36
  63. package/dist/tempo/tools.js.map +1 -1
  64. package/dist/utils/buffer-pipeline/index.d.ts +30 -0
  65. package/dist/utils/buffer-pipeline/index.d.ts.map +1 -0
  66. package/dist/utils/buffer-pipeline/index.js +317 -0
  67. package/dist/utils/buffer-pipeline/index.js.map +1 -0
  68. package/dist/utils/buffer-pipeline/output/csv.d.ts +20 -0
  69. package/dist/utils/buffer-pipeline/output/csv.d.ts.map +1 -0
  70. package/dist/utils/buffer-pipeline/output/csv.js +117 -0
  71. package/dist/utils/buffer-pipeline/output/csv.js.map +1 -0
  72. package/dist/utils/buffer-pipeline/output/json.d.ts +16 -0
  73. package/dist/utils/buffer-pipeline/output/json.d.ts.map +1 -0
  74. package/dist/utils/buffer-pipeline/output/json.js +48 -0
  75. package/dist/utils/buffer-pipeline/output/json.js.map +1 -0
  76. package/dist/utils/buffer-pipeline/output/markdown.d.ts +15 -0
  77. package/dist/utils/buffer-pipeline/output/markdown.d.ts.map +1 -0
  78. package/dist/utils/buffer-pipeline/output/markdown.js +105 -0
  79. package/dist/utils/buffer-pipeline/output/markdown.js.map +1 -0
  80. package/dist/utils/buffer-pipeline/output/xhtml-list.d.ts +16 -0
  81. package/dist/utils/buffer-pipeline/output/xhtml-list.d.ts.map +1 -0
  82. package/dist/utils/buffer-pipeline/output/xhtml-list.js +81 -0
  83. package/dist/utils/buffer-pipeline/output/xhtml-list.js.map +1 -0
  84. package/dist/utils/buffer-pipeline/output/xhtml-table.d.ts +15 -0
  85. package/dist/utils/buffer-pipeline/output/xhtml-table.d.ts.map +1 -0
  86. package/dist/utils/buffer-pipeline/output/xhtml-table.js +176 -0
  87. package/dist/utils/buffer-pipeline/output/xhtml-table.js.map +1 -0
  88. package/dist/utils/buffer-pipeline/schema.d.ts +1878 -0
  89. package/dist/utils/buffer-pipeline/schema.d.ts.map +1 -0
  90. package/dist/utils/buffer-pipeline/schema.js +168 -0
  91. package/dist/utils/buffer-pipeline/schema.js.map +1 -0
  92. package/dist/utils/buffer-pipeline/stages/filter.d.ts +32 -0
  93. package/dist/utils/buffer-pipeline/stages/filter.d.ts.map +1 -0
  94. package/dist/utils/buffer-pipeline/stages/filter.js +208 -0
  95. package/dist/utils/buffer-pipeline/stages/filter.js.map +1 -0
  96. package/dist/utils/buffer-pipeline/stages/format.d.ts +45 -0
  97. package/dist/utils/buffer-pipeline/stages/format.d.ts.map +1 -0
  98. package/dist/utils/buffer-pipeline/stages/format.js +160 -0
  99. package/dist/utils/buffer-pipeline/stages/format.js.map +1 -0
  100. package/dist/utils/buffer-pipeline/stages/group-by.d.ts +25 -0
  101. package/dist/utils/buffer-pipeline/stages/group-by.d.ts.map +1 -0
  102. package/dist/utils/buffer-pipeline/stages/group-by.js +190 -0
  103. package/dist/utils/buffer-pipeline/stages/group-by.js.map +1 -0
  104. package/dist/utils/buffer-pipeline/stages/select.d.ts +54 -0
  105. package/dist/utils/buffer-pipeline/stages/select.d.ts.map +1 -0
  106. package/dist/utils/buffer-pipeline/stages/select.js +228 -0
  107. package/dist/utils/buffer-pipeline/stages/select.js.map +1 -0
  108. package/dist/utils/buffer-pipeline/stages/sort.d.ts +20 -0
  109. package/dist/utils/buffer-pipeline/stages/sort.d.ts.map +1 -0
  110. package/dist/utils/buffer-pipeline/stages/sort.js +96 -0
  111. package/dist/utils/buffer-pipeline/stages/sort.js.map +1 -0
  112. package/dist/utils/buffer-pipeline/types.d.ts +277 -0
  113. package/dist/utils/buffer-pipeline/types.d.ts.map +1 -0
  114. package/dist/utils/buffer-pipeline/types.js +8 -0
  115. package/dist/utils/buffer-pipeline/types.js.map +1 -0
  116. package/dist/utils/buffer-tools.d.ts +749 -19
  117. package/dist/utils/buffer-tools.d.ts.map +1 -1
  118. package/dist/utils/buffer-tools.js +739 -492
  119. package/dist/utils/buffer-tools.js.map +1 -1
  120. package/dist/utils/content-buffer.d.ts +55 -4
  121. package/dist/utils/content-buffer.d.ts.map +1 -1
  122. package/dist/utils/content-buffer.js +107 -9
  123. package/dist/utils/content-buffer.js.map +1 -1
  124. package/dist/utils/date-tools.d.ts +78 -0
  125. package/dist/utils/date-tools.d.ts.map +1 -0
  126. package/dist/utils/date-tools.js +312 -0
  127. package/dist/utils/date-tools.js.map +1 -0
  128. package/dist/utils/jicon-help.d.ts +5 -5
  129. package/dist/utils/jicon-help.d.ts.map +1 -1
  130. package/dist/utils/jicon-help.js +418 -32
  131. package/dist/utils/jicon-help.js.map +1 -1
  132. package/dist/utils/json-structure.d.ts +121 -0
  133. package/dist/utils/json-structure.d.ts.map +1 -0
  134. package/dist/utils/json-structure.js +637 -0
  135. package/dist/utils/json-structure.js.map +1 -0
  136. package/dist/utils/plantuml/include-expander.d.ts +31 -30
  137. package/dist/utils/plantuml/include-expander.d.ts.map +1 -1
  138. package/dist/utils/plantuml/include-expander.js +167 -133
  139. package/dist/utils/plantuml/include-expander.js.map +1 -1
  140. package/dist/utils/plantuml/index.d.ts +3 -3
  141. package/dist/utils/plantuml/index.d.ts.map +1 -1
  142. package/dist/utils/plantuml/index.js +4 -4
  143. package/dist/utils/plantuml/index.js.map +1 -1
  144. package/dist/utils/plantuml/service.d.ts +13 -24
  145. package/dist/utils/plantuml/service.d.ts.map +1 -1
  146. package/dist/utils/plantuml/service.js +49 -99
  147. package/dist/utils/plantuml/service.js.map +1 -1
  148. package/dist/utils/plantuml/tools.d.ts.map +1 -1
  149. package/dist/utils/plantuml/tools.js +33 -72
  150. package/dist/utils/plantuml/tools.js.map +1 -1
  151. package/dist/utils/plantuml/types.d.ts +1 -35
  152. package/dist/utils/plantuml/types.d.ts.map +1 -1
  153. package/dist/utils/plantuml/types.js +1 -11
  154. package/dist/utils/plantuml/types.js.map +1 -1
  155. package/dist/utils/plantuml/validation-helper.d.ts +3 -3
  156. package/dist/utils/plantuml/validation-helper.js +14 -14
  157. package/dist/utils/plantuml/validation-helper.js.map +1 -1
  158. package/dist/utils/response-formatter.d.ts +61 -6
  159. package/dist/utils/response-formatter.d.ts.map +1 -1
  160. package/dist/utils/response-formatter.js +174 -91
  161. package/dist/utils/response-formatter.js.map +1 -1
  162. package/dist/utils/url-tools.d.ts.map +1 -1
  163. package/dist/utils/url-tools.js +22 -0
  164. package/dist/utils/url-tools.js.map +1 -1
  165. package/dist/utils/xhtml/error-locator.js +2 -2
  166. package/dist/utils/xhtml/error-locator.js.map +1 -1
  167. package/dist/utils/xhtml/index.d.ts +1 -1
  168. package/dist/utils/xhtml/index.d.ts.map +1 -1
  169. package/dist/utils/xhtml/index.js +1 -1
  170. package/dist/utils/xhtml/index.js.map +1 -1
  171. package/dist/utils/xhtml/parser.d.ts +34 -5
  172. package/dist/utils/xhtml/parser.d.ts.map +1 -1
  173. package/dist/utils/xhtml/parser.js +66 -11
  174. package/dist/utils/xhtml/parser.js.map +1 -1
  175. package/dist/utils/xhtml/plantuml.d.ts +4 -4
  176. package/dist/utils/xhtml/plantuml.d.ts.map +1 -1
  177. package/dist/utils/xhtml/plantuml.js +10 -8
  178. package/dist/utils/xhtml/plantuml.js.map +1 -1
  179. package/dist/utils/xhtml/serializer.d.ts.map +1 -1
  180. package/dist/utils/xhtml/serializer.js +12 -15
  181. package/dist/utils/xhtml/serializer.js.map +1 -1
  182. package/dist/utils/xhtml/validator.d.ts +2 -2
  183. package/dist/utils/xhtml/validator.js +4 -4
  184. package/dist/utils/xhtml/validator.js.map +1 -1
  185. package/package.json +12 -4
  186. package/crypto512-jicon-mcp-1.3.0.tgz +0 -0
package/PROMPT.md CHANGED
@@ -1,214 +1,33 @@
1
1
  # Jicon MCP Agent Prompt
2
2
 
3
- You are an assistant with access to the Jicon MCP server for Jira, Confluence, and Tempo operations. Follow these protocols strictly.
3
+ You are an assistant with access to the Jicon MCP server for Jira, Confluence, and Tempo operations.
4
4
 
5
- ---
5
+ ## Before ANY Operation: Call Help
6
6
 
7
- ## MANDATORY: Read Help Before Acting
7
+ **Always start by reading the help documentation:**
8
8
 
9
- **Before ANY jicon operation, you MUST read the relevant help documentation.**
10
-
11
- ### Step 1: Initial Orientation
12
9
  ```
13
- help() ← Call this FIRST to get workflow decision tree
10
+ help() ← Returns workflow decision tree and quick reference
14
11
  ```
15
12
 
16
- ### Step 2: Topic-Specific Help (Required Before Domain Operations)
13
+ Then use topic-specific help for your task:
17
14
 
18
- | Task | Required Help Call |
19
- |------|--------------------|
20
- | Search Jira issues | `help(topic="jql")` |
15
+ | Task | Help Command |
16
+ |------|--------------|
17
+ | Search Jira | `help(topic="jql")` |
21
18
  | Search Confluence | `help(topic="cql")` |
22
19
  | Edit Confluence pages | `help(topic="buffers")` then `help(topic="storage")` |
23
- | Create PlantUML diagrams | `help(topic="plantuml")` |
24
- | Work with large content | `help(topic="buffers")` |
25
-
26
- **DO NOT proceed with operations until you have read the relevant help topic.**
27
-
28
- ---
29
-
30
- ## PlantUML Protocol (STRICT)
31
-
32
- PlantUML operations require a specific workflow. Deviations cause errors.
33
-
34
- ### Mandatory Workflow
35
-
36
- ```
37
- 1. plantuml_validate(code="@startuml\n...\n@enduml")
38
-
39
- If errors → FIX and re-validate (see Error Handling below)
40
-
41
- 2. buffer_edit(bufferId, after=ID, plantuml="@startuml\n...\n@enduml")
42
-
43
- 3. confluence_draft_save(draftId, bufferId)
44
- ```
45
-
46
- ### Critical Rules
47
-
48
- 1. **ALWAYS validate first** - Even for "simple" diagrams
49
- 2. **Use `plantuml` parameter** - The `content` parameter REJECTS PlantUML macros
50
- 3. **Include markers required** - Every diagram needs `@startuml` and `@enduml`
51
- 4. **One diagram per operation** - Multiple diagrams = multiple operations or batch
52
-
53
- ### PlantUML Error Handling
54
-
55
- When `plantuml_validate` returns errors:
56
-
57
- ```json
58
- {
59
- "valid": false,
60
- "errors": [
61
- {"line": 5, "column": 10, "message": "Syntax error", "suggestion": "..."}
62
- ]
63
- }
64
- ```
65
-
66
- **You MUST:**
67
- 1. Read the error location (line, column)
68
- 2. Read the suggestion if provided
69
- 3. Fix the PlantUML code at that location
70
- 4. Re-validate until `valid: true`
71
-
72
- **You MUST NOT:**
73
- - Skip the diagram
74
- - Insert unvalidated code
75
- - Tell the user "it doesn't work"
76
-
77
- ### Service Unavailable
78
-
79
- If you receive "PlantUML service unavailable":
80
-
81
- ```
82
- 1. plantuml_status() ← Check what's wrong
83
- 2. Report the specific issue to user:
84
- - Docker not running
85
- - Container failed to start
86
- - Container died
87
- 3. Suggest: "Please ensure Docker is running and restart the session"
88
- ```
89
-
90
- ---
91
-
92
- ## Buffer & Element ID Editing
93
-
94
- Confluence content is edited via buffers using stable element IDs.
95
-
96
- ### Workflow
97
-
98
- ```
99
- 1. Get content:
100
- confluence_get_page(pageId) OR confluence_draft_create(spaceKey, title)
101
- → Returns: bufferId, structure
102
-
103
- 2. Structure shows element IDs:
104
- [
105
- {id: 1, type: "h1", text: "Title"},
106
- {id: 2, type: "p", text: "Content..."},
107
- {id: 3, type: "plantuml", text: "Diagram"}
108
- ]
20
+ | PlantUML diagrams | `help(topic="plantuml")` |
109
21
 
110
- 3. Edit by ID:
111
- buffer_edit(bufferId, after=1, content="<p>New paragraph</p>")
112
- buffer_edit(bufferId, replace=3, plantuml="@startuml...@enduml")
113
- buffer_edit(bufferId, remove=2)
114
-
115
- 4. Save:
116
- confluence_draft_save(draftId, bufferId)
117
- ```
118
-
119
- ### Batch Operations (Preferred for Multiple Edits)
120
-
121
- ```
122
- buffer_edit(bufferId, operations=[
123
- {after: 1, content: "<h2>Section</h2>"},
124
- {after: 2, plantuml: "@startuml\nA -> B\n@enduml"},
125
- {remove: 5}
126
- ])
127
- ```
128
-
129
- Benefits: Single parse, single validation, atomic execution.
130
-
131
- ---
132
-
133
- ## ERROR HANDLING MANDATE
134
-
135
- ### NEVER Skip Tasks Due to Errors
136
-
137
- When you encounter an error:
138
-
139
- 1. **READ** the full error message (includes diagnostics)
140
- 2. **ANALYZE** the cause using error details
141
- 3. **FIX** the issue based on error guidance
142
- 4. **RETRY** the operation
143
- 5. **REPEAT** steps 1-4 up to 3 times
144
-
145
- **Only after 3 failed fix attempts** may you report being blocked.
146
-
147
- ### Error Recovery Reference
148
-
149
- | Error Type | Recovery Action |
150
- |------------|-----------------|
151
- | PlantUML syntax error | Fix code at reported line/column, re-validate |
152
- | Element not found | Call `buffer_get_structure(bufferId)` to see valid IDs |
153
- | Buffer expired | Re-fetch content to get new bufferId |
154
- | XHTML parse error | Check `suggestedActions` in error, fix malformed XML |
155
- | Multiple occurrences | Use `replace_all=true` for string replacement |
156
- | Permission denied | Report to user - configuration issue |
157
- | Service unavailable | Call status tool, report specific issue |
158
-
159
- ### XHTML Error Recovery
160
-
161
- When `confluence_draft_save` fails with XHTML error:
162
-
163
- ```
164
- 1. Error includes: errorLocation (element ID), suggestedActions
165
- 2. buffer_get_element(bufferId, elementId) ← Inspect problem element
166
- 3. buffer_edit(bufferId, replace=elementId, content="<fixed XHTML>")
167
- 4. Retry save
168
- ```
169
-
170
- ---
171
-
172
- ## Quick Reference
173
-
174
- ### Help Topics
22
+ ## Available Topics
175
23
 
176
24
  | Topic | Content |
177
25
  |-------|---------|
178
26
  | (none) | Workflow decision tree, core patterns |
179
- | `jql` | Jira Query Language syntax, operators, examples |
180
- | `cql` | Confluence Query Language syntax, operators, examples |
181
- | `storage` | Confluence XHTML format, macros, layouts |
182
- | `plantuml` | PlantUML validation workflow, macro structure |
183
- | `buffers` | Element ID system, buffer operations, batch editing |
184
-
185
- ### Common PlantUML Fixes
186
-
187
- | Error | Fix |
188
- |-------|-----|
189
- | Missing @startuml | Add `@startuml` at start |
190
- | Missing @enduml | Add `@enduml` at end |
191
- | Unexpected token | Check syntax at reported line |
192
- | Unknown entity | Verify class/actor/component name spelling |
193
- | C4 not recognized | Add `!include` for C4 library |
194
-
195
- ### Buffer Operation Types
196
-
197
- | Operation | Parameters |
198
- |-----------|------------|
199
- | Insert after | `after=ID, content="..." OR plantuml="..."` |
200
- | Insert before | `before=ID, content="..." OR plantuml="..."` |
201
- | Replace | `replace=ID, content="..." OR plantuml="..."` |
202
- | Remove | `remove=ID` |
203
- | Append | `append=true, content="..." OR plantuml="..."` |
204
-
205
- ---
206
-
207
- ## Core Principles
27
+ | `jql` | Jira Query Language syntax |
28
+ | `cql` | Confluence Query Language syntax |
29
+ | `storage` | Confluence XHTML format |
30
+ | `plantuml` | PlantUML validation workflow |
31
+ | `buffers` | Element ID system, buffer operations |
208
32
 
209
- 1. **Help-First**: Always read documentation before acting
210
- 2. **Validate-First**: For PlantUML, validation is mandatory before insertion
211
- 3. **Fix-Not-Skip**: Errors are problems to solve, not reasons to abandon tasks
212
- 4. **ID-Based Editing**: Use element IDs for precise content manipulation
213
- 5. **Batch When Possible**: Multiple edits should use operations array
214
- 6. **Retry With Fixes**: Failed operations require analysis and correction, not abandonment
33
+ The help system provides complete guidance for all operations. Read it before proceeding.
package/README.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Jicon - Jira & Confluence MCP Server
2
2
 
3
+ <!--
4
+ README.md Guidelines:
5
+ - Keep this file USER-FOCUSED: describe features and benefits, not implementation details
6
+ - NO tool names, function signatures, or technical API details here
7
+ - Tool documentation belongs in TOOL_LIST.md
8
+ - Development documentation belongs in CLAUDE.md
9
+ -->
10
+
3
11
  [![npm version](https://badge.fury.io/js/%40crypto512%2Fjicon-mcp.svg)](https://badge.fury.io/js/%40crypto512%2Fjicon-mcp)
4
12
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
13
 
@@ -23,9 +31,11 @@ Once configured, just ask in natural language:
23
31
 
24
32
  ### Jira
25
33
  - *"Find all high-priority bugs assigned to me"*
34
+ - *"What happened on project ACME this week?"* (Activity digest)
26
35
  - *"Create a task for implementing user authentication"*
27
36
  - *"Move PROJ-123 to Done and add a comment that it's deployed"*
28
37
  - *"Show me the current sprint's progress"*
38
+ - *"Summarize recent discussions about authentication"* (Comment analysis)
29
39
  - *"Link PROJ-456 as blocking PROJ-789"*
30
40
 
31
41
  ### Confluence
@@ -110,65 +120,61 @@ Add to `opencode.jsonc` in your project root or `~/.config/opencode/opencode.jso
110
120
 
111
121
  ## Configuration
112
122
 
123
+ All configuration is done through environment variables.
124
+
113
125
  ### Environment Variables
114
126
 
115
- | Variable | Description |
116
- |----------|-------------|
117
- | `JIRA_URL` | Your Jira instance URL |
118
- | `JIRA_USERNAME` | Your email (omit for Data Center PAT) |
119
- | `JIRA_API_TOKEN` | API token or Personal Access Token |
120
- | `JIRA_AUTH_TYPE` | Optional: `basic` or `bearer` (auto-detected from username) |
121
- | `CONFLUENCE_URL` | Your Confluence instance URL |
122
- | `CONFLUENCE_USERNAME` | Your email (omit for Data Center PAT) |
123
- | `CONFLUENCE_API_TOKEN` | API token or Personal Access Token |
124
- | `CONFLUENCE_AUTH_TYPE` | Optional: `basic` or `bearer` (auto-detected from username) |
127
+ | Variable | Type | Default | Description |
128
+ |----------|------|---------|-------------|
129
+ | `JIRA_URL` | string | - | Jira instance URL |
130
+ | `JIRA_USERNAME` | string | - | Email (omit for Data Center PAT) |
131
+ | `JIRA_API_TOKEN` | string | - | API token or Personal Access Token |
132
+ | `JIRA_AUTH_TYPE` | `basic`\|`bearer` | auto | Auth type (auto-detected from username) |
133
+ | `CONFLUENCE_URL` | string | - | Confluence instance URL |
134
+ | `CONFLUENCE_USERNAME` | string | - | Email (omit for Data Center PAT) |
135
+ | `CONFLUENCE_API_TOKEN` | string | - | API token or Personal Access Token |
136
+ | `CONFLUENCE_AUTH_TYPE` | `basic`\|`bearer` | auto | Auth type (auto-detected from username) |
137
+ | `JICON_PERMISSIONS_MODE` | `readonly`\|`full`\|`custom` | `readonly` | Permission mode |
138
+ | `JICON_PERMISSIONS_WHITELIST` | comma-separated | - | Tools to allow (custom mode) |
139
+ | `JICON_PERMISSIONS_BLACKLIST` | comma-separated | - | Tools to deny (custom mode) |
140
+ | `JICON_CONFLUENCE_WRITE_HOME` | `true`\|`false` | `false` | Restrict Confluence writes to personal space |
141
+ | `JICON_PLANTUML_SERVER_URL` | string | - | PlantUML server URL (e.g., `http://localhost:8080`) |
142
+ | `JICON_MAX_OUTPUT` | number | `16000` | Maximum output characters |
125
143
 
126
144
  **Note:** Tempo uses the same Jira credentials - no separate configuration needed.
127
145
 
128
- ### Configuration File (Optional)
146
+ ### Permission Modes
129
147
 
130
- Create `.jicon.json` in your project root for project-specific settings, or `~/.config/jicon/jicon.json` for user-wide settings:
148
+ Control what operations are allowed. **By default, Jicon runs in read-only mode** - all read tools across Jira, Confluence, and Tempo are available, but no write operations.
131
149
 
150
+ **Read-Only** (default):
132
151
  ```json
133
152
  {
134
- "jira": {
135
- "url": "https://jira.example.com",
136
- "username": "your-email@example.com",
137
- "token": "your-api-token"
138
- },
139
- "confluence": {
140
- "url": "https://confluence.example.com",
141
- "username": "your-email@example.com",
142
- "token": "your-api-token"
153
+ "env": {
154
+ "JIRA_URL": "https://jira.example.com",
155
+ "JIRA_API_TOKEN": "your-token"
143
156
  }
144
157
  }
145
158
  ```
146
159
 
147
- **Priority:** Project config → User config → Environment variables
148
-
149
- **Important:** Add `.jicon.json` to your `.gitignore`!
150
-
151
- ### Permission Modes
152
-
153
- Control what operations are allowed. **By default, Jicon runs in read-only mode** - all read tools across Jira, Confluence, and Tempo are available, but no write operations. Safe for exploration without risk of accidental modifications.
154
-
155
- **Read-Only** (default) - all read tools enabled:
160
+ **Full Access**:
156
161
  ```json
157
- { "permissions": { "mode": "readonly" } }
158
- ```
159
-
160
- **Full Access** - all operations enabled:
161
- ```json
162
- { "permissions": { "mode": "full" } }
162
+ {
163
+ "env": {
164
+ "JIRA_URL": "https://jira.example.com",
165
+ "JIRA_API_TOKEN": "your-token",
166
+ "JICON_PERMISSIONS_MODE": "full"
167
+ }
168
+ }
163
169
  ```
164
170
 
165
- **Custom** - fine-grained control with whitelist and blacklist:
171
+ **Custom** - fine-grained control:
166
172
  ```json
167
173
  {
168
- "permissions": {
169
- "mode": "custom",
170
- "whitelist": ["jira_all", "confluence_all", "tempo_all"],
171
- "blacklist": ["confluence_delete_page", "tempo_delete_worklog"]
174
+ "env": {
175
+ "JICON_PERMISSIONS_MODE": "custom",
176
+ "JICON_PERMISSIONS_WHITELIST": "jira_all,confluence_all,tempo_all",
177
+ "JICON_PERMISSIONS_BLACKLIST": "confluence_delete_page,tempo_delete_worklog"
172
178
  }
173
179
  }
174
180
  ```
@@ -176,10 +182,10 @@ Control what operations are allowed. **By default, Jicon runs in read-only mode*
176
182
  **Safe Write** - recommended for controlled write access:
177
183
  ```json
178
184
  {
179
- "permissions": {
180
- "mode": "custom",
181
- "whitelist": ["jira_read", "confluence_write", "tempo_read"],
182
- "confluenceWriteHome": true
185
+ "env": {
186
+ "JICON_PERMISSIONS_MODE": "custom",
187
+ "JICON_PERMISSIONS_WHITELIST": "jira_read,confluence_write,tempo_read",
188
+ "JICON_CONFLUENCE_WRITE_HOME": "true"
183
189
  }
184
190
  }
185
191
  ```
@@ -189,34 +195,34 @@ This configuration allows:
189
195
  - **Confluence**: Write restricted to your personal space only
190
196
  - **Tempo**: Read-only (view worklogs, no time logging)
191
197
 
192
- The `confluenceWriteHome: true` setting ensures all Confluence write operations (drafts, comments, attachments) can only target your personal space, preventing accidental modifications to shared team spaces.
193
-
194
198
  **Draft Only** - create new documents without reading existing content:
195
199
  ```json
196
200
  {
197
- "permissions": {
198
- "mode": "custom",
199
- "whitelist": ["confluence_draft"]
201
+ "env": {
202
+ "JICON_PERMISSIONS_MODE": "custom",
203
+ "JICON_PERMISSIONS_WHITELIST": "confluence_draft"
200
204
  }
201
205
  }
202
206
  ```
203
207
 
204
- Includes: `confluence_draft_create`, `confluence_draft_save`, `confluence_draft_delete`, plus space discovery (`confluence_get_current_user_space`, `confluence_list_spaces`) to know where to create drafts. No page content is exposed.
205
-
206
208
  **Virtual actions** (for whitelist): `jira_read`, `jira_write`, `jira_all`, `confluence_read`, `confluence_write`, `confluence_draft`, `confluence_all`, `tempo_read`, `tempo_write`, `tempo_all`
207
209
 
208
- **Individual tools** (for blacklist): See [TOOL_LIST.md](TOOL_LIST.md) for all tool names (e.g., `confluence_delete_page`, `tempo_delete_worklog`)
210
+ **Individual tools** (for blacklist): See [TOOL_LIST.md](TOOL_LIST.md) for all tool names
209
211
 
210
- ### Docker Configuration
212
+ ### PlantUML Configuration
211
213
 
212
- PlantUML validation requires Docker. The container starts when MCP loads and does **not auto-restart** if it stops - you'll need to restart the MCP server.
214
+ PlantUML validation requires an external PlantUML server. If not configured, PlantUML tools are disabled.
213
215
 
214
- **Disable Docker/PlantUML** - if you don't need PlantUML validation:
216
+ **Configure PlantUML server**:
215
217
  ```json
216
- { "disableDocker": true }
218
+ {
219
+ "env": {
220
+ "JICON_PLANTUML_SERVER_URL": "http://localhost:8080"
221
+ }
222
+ }
217
223
  ```
218
224
 
219
- When disabled, PlantUML tools return clear errors instead of failing silently.
225
+ You can use the public PlantUML server (`http://www.plantuml.com/plantuml`) or run your own with Docker: `docker run -d -p 8080:8080 plantuml/plantuml-server:jetty`.
220
226
 
221
227
  ### PlantUML Include Expansion
222
228
 
@@ -253,7 +259,7 @@ C4-PlantUML, AWS icons, and Azure diagrams require `!include` directives. By def
253
259
  - **Jira** Server/Data Center or Cloud with API access
254
260
  - **Confluence** (optional) Server/Data Center or Cloud
255
261
  - **Tempo** (optional) Timesheets plugin
256
- - **Docker** (optional) For PlantUML diagram validation
262
+ - **PlantUML Server** (optional) External server for diagram validation
257
263
 
258
264
  ## API Limitations
259
265
 
@@ -274,7 +280,7 @@ The Confluence Data Center REST API has specific limitations for draft managemen
274
280
  Since the API cannot create a "draft version" of an existing page, Jicon uses a workaround:
275
281
  1. Creates a `[jicon-mcp REVIEW] Title` draft linked to the original via label
276
282
  2. User reviews the draft content
277
- 3. `confluence_review_publish` copies content to original page and deletes draft
283
+ 3. User approves to publish changes to the original page
278
284
 
279
285
  This achieves "draft before publish" semantics within API constraints.
280
286
 
@@ -286,38 +292,38 @@ This achieves "draft before publish" semantics within API constraints.
286
292
 
287
293
  ## Features
288
294
 
289
- ### 69 Tools Across 3 Services
295
+ ### 75 Tools Across 3 Services
290
296
 
291
297
  | Service | Capabilities |
292
298
  |---------|--------------|
293
- | **Jira** (18 tools) | Search, create, update, transition issues; manage comments, links, watchers; access boards, sprints, worklogs |
299
+ | **Jira** (22 tools) | Search, create, update, transition issues; manage comments, links, watchers; access boards, sprints, worklogs; **LLM-powered analysis** |
294
300
  | **Confluence** (21 tools) | Search, create, edit pages via drafts; manage spaces, comments, attachments; PlantUML diagrams; review workflow |
295
301
  | **Tempo** (12 tools) | Log time, view/update worklogs, team tracking, accounts |
296
302
 
297
- Plus utility tools for content buffering, time calculations, URL generation, and built-in help.
303
+ Plus utility tools for content buffering, time calculations, URL generation, date resolution, and built-in help.
298
304
 
299
- ### Buffered Responses
305
+ ### LLM-Powered Analysis Tools
300
306
 
301
- All data-heavy tools (search, list, get) return **buffered responses** for efficient handling of large datasets. Instead of returning raw data, tools return a `bufferId` with metadata:
307
+ These **intelligent entry points** are designed for AI synthesis - they return pre-processed content directly to the LLM (not buffered) for analysis and insight generation:
302
308
 
303
- ```json
304
- {
305
- "bufferId": "buf_abc123",
306
- "metadata": {
307
- "resourceType": "jira_search",
308
- "title": "JQL: project = PROJ AND status = 'In Progress'"
309
- },
310
- "totalSize": 125000,
311
- "hint": "Use buffer_get_chunk(bufferId) to read, buffer_grep(bufferId, pattern) to search"
312
- }
313
- ```
309
+ | Tool | Purpose |
310
+ |------|---------|
311
+ | **Activity Digest** | Fetches comments, status/priority/assignee changes across issues. Ask: *"What happened on project X this week?"* |
312
+ | **Recent Comments** | Aggregates comments across multiple issues. Ask: *"Any blockers mentioned in recent discussions?"* |
313
+ | **Changelog** | Tracks field changes across issues. Ask: *"What issues had priority escalations?"* |
314
+ | **Analyze Epic** | Comprehensive Epic analysis: hierarchy breakdown, time metrics, velocity, linked Confluence pages, recent discussions. Ask: *"Analyze Epic PROJ-100 for progress and risks"* |
314
315
 
315
- **Working with buffers:**
316
- - `buffer_get_chunk(bufferId, offset, limit)` - Read data in chunks
317
- - `buffer_grep(bufferId, pattern)` - Search within buffered data
318
- - `buffer_list()` - List all active buffers with metadata
316
+ These tools return **markdown formatted for LLM comprehension** with pre-computed summaries (counts, breakdowns), enabling the AI to focus on **insight and synthesis** rather than data extraction.
319
317
 
320
- The buffer metadata includes `resourceType` and `title` to track origin (e.g., which query or resource the data came from).
318
+ ### Buffered Responses
319
+
320
+ All data-heavy tools (search, list, get) return **buffered responses** for efficient handling of large datasets. Instead of returning raw data, tools return a `bufferId` with metadata:
321
+
322
+ **Buffer capabilities:**
323
+ - Read content in chunks or search within buffered data
324
+ - Server-side data transformation: filtering, grouping, sorting, aggregations
325
+ - Export to multiple formats: XHTML tables, lists, CSV, JSON, Markdown
326
+ - Track buffer origin with metadata (resource type, query, title)
321
327
 
322
328
  ### Safe Confluence Editing (Review Workflow)
323
329
 
@@ -332,21 +338,13 @@ Confluence write operations use a **review workflow** for safety:
332
338
  1. **Ask the AI**: *"Add a PlantUML diagram to page https://confluence.example.com/..."*
333
339
  2. **Review Draft Created**: Jicon creates a `[jicon-mcp REVIEW] Page Title` draft linked to the original
334
340
  3. **You Review**: Check the draft content in Confluence UI
335
- 4. **Publish or Discard**:
336
- - AI can run `confluence_review_publish` to apply changes to original page
337
- - Or `confluence_review_discard` to cancel without changes
338
- - Or you can manually copy content if preferred
341
+ 4. **Publish or Discard**: Apply changes to the original page, discard them, or manually copy content
339
342
 
340
343
  This means the AI assistant **never directly modifies** existing pages - all changes are staged as review drafts that require your approval. Combined with `confluenceWriteHome: true`, this ensures complete control over what gets published.
341
344
 
342
- **Review Workflow Tools:**
343
- - `confluence_review_list()` - Find all `[jicon-mcp REVIEW]` drafts
344
- - `confluence_review_publish(reviewDraftId)` - Apply changes to original page
345
- - `confluence_review_discard(reviewDraftId)` - Discard without changes
346
-
347
345
  ### PlantUML Diagrams
348
346
 
349
- Create and validate UML diagrams directly in Confluence pages. The PlantUML Docker container starts automatically when the MCP server loads (if Docker is available). If Docker is unavailable or the container stops, PlantUML tools return clear errors - restart the MCP server to retry. Use `"disableDocker": true` in config to skip PlantUML entirely.
347
+ Create and validate UML diagrams directly in Confluence pages. Configure `JICON_PLANTUML_SERVER_URL` to enable diagram validation. If not configured, PlantUML tools return clear errors explaining how to enable them.
350
348
 
351
349
  ## Tool Reference
352
350
 
@@ -358,7 +356,7 @@ For complete tool documentation with parameters and examples, see **[TOOL_LIST.m
358
356
  - Use API tokens with minimal required permissions
359
357
  - Rotate tokens regularly
360
358
  - Use read-only mode for exploration
361
- - Never commit `.jicon.json` to version control
359
+ - Never commit credentials to version control
362
360
 
363
361
  ## License
364
362