@crypto512/jicon-mcp 0.6.1 → 0.7.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.
- package/CLAUDE.md +252 -27
- package/README.md +237 -34
- package/TOOL_LIST.md +201 -5
- package/dist/config/types.d.ts +6 -6
- package/dist/config/types.d.ts.map +1 -1
- package/dist/config/types.js +3 -2
- package/dist/config/types.js.map +1 -1
- package/dist/confluence/client.d.ts +8 -16
- package/dist/confluence/client.d.ts.map +1 -1
- package/dist/confluence/client.js +75 -43
- package/dist/confluence/client.js.map +1 -1
- package/dist/confluence/formatters.d.ts +4 -0
- package/dist/confluence/formatters.d.ts.map +1 -1
- package/dist/confluence/formatters.js +19 -0
- package/dist/confluence/formatters.js.map +1 -1
- package/dist/confluence/tools.d.ts +9 -36
- package/dist/confluence/tools.d.ts.map +1 -1
- package/dist/confluence/tools.js +90 -158
- package/dist/confluence/tools.js.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/jira/client.d.ts +9 -9
- package/dist/jira/client.d.ts.map +1 -1
- package/dist/jira/client.js +252 -30
- package/dist/jira/client.js.map +1 -1
- package/dist/jira/formatters.d.ts +4 -0
- package/dist/jira/formatters.d.ts.map +1 -1
- package/dist/jira/formatters.js +24 -0
- package/dist/jira/formatters.js.map +1 -1
- package/dist/jira/tools.d.ts +36 -36
- package/dist/jira/tools.d.ts.map +1 -1
- package/dist/jira/tools.js +161 -139
- package/dist/jira/tools.js.map +1 -1
- package/dist/jira/types.d.ts +50 -0
- package/dist/jira/types.d.ts.map +1 -1
- package/dist/permissions/filter.d.ts.map +1 -1
- package/dist/permissions/filter.js +42 -13
- package/dist/permissions/filter.js.map +1 -1
- package/dist/permissions/tool-registry.d.ts +33 -14
- package/dist/permissions/tool-registry.d.ts.map +1 -1
- package/dist/permissions/tool-registry.js +80 -5
- package/dist/permissions/tool-registry.js.map +1 -1
- package/dist/tempo/client.d.ts +1 -0
- package/dist/tempo/client.d.ts.map +1 -1
- package/dist/tempo/client.js +43 -0
- package/dist/tempo/client.js.map +1 -1
- package/dist/tempo/formatters.d.ts +4 -0
- package/dist/tempo/formatters.d.ts.map +1 -1
- package/dist/tempo/formatters.js +24 -0
- package/dist/tempo/formatters.js.map +1 -1
- package/dist/tempo/tools.d.ts +21 -0
- package/dist/tempo/tools.d.ts.map +1 -1
- package/dist/tempo/tools.js +74 -134
- package/dist/tempo/tools.js.map +1 -1
- package/dist/types.d.ts +1 -0
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/utils/buffer-tools.d.ts +128 -0
- package/dist/utils/buffer-tools.d.ts.map +1 -0
- package/dist/utils/buffer-tools.js +312 -0
- package/dist/utils/buffer-tools.js.map +1 -0
- package/dist/utils/content-buffer.d.ts +132 -0
- package/dist/utils/content-buffer.d.ts.map +1 -0
- package/dist/utils/content-buffer.js +313 -0
- package/dist/utils/content-buffer.js.map +1 -0
- package/dist/utils/response-formatter.d.ts +5 -1
- package/dist/utils/response-formatter.d.ts.map +1 -1
- package/dist/utils/response-formatter.js +52 -2
- package/dist/utils/response-formatter.js.map +1 -1
- package/dist/utils/workload-tools.d.ts +68 -0
- package/dist/utils/workload-tools.d.ts.map +1 -0
- package/dist/utils/workload-tools.js +134 -0
- package/dist/utils/workload-tools.js.map +1 -0
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -17,35 +17,174 @@ npm install -g @crypto512/jicon-mcp
|
|
|
17
17
|
|
|
18
18
|
## What is Jicon?
|
|
19
19
|
|
|
20
|
-
Jicon is an MCP server that enables AI assistants like Claude to interact with your Jira, Confluence, and Tempo instances. It provides
|
|
20
|
+
Jicon is an MCP server that enables AI assistants like Claude to interact with your Jira, Confluence, and Tempo instances. It provides 52 powerful tools for:
|
|
21
21
|
|
|
22
22
|
- 🎫 **Jira**: Issue management, searching, project operations, Agile boards, sprints
|
|
23
23
|
- 📄 **Confluence**: Page management, content search, spaces, attachments, comments
|
|
24
24
|
- ⏱️ **Tempo**: Time tracking, worklog management, accounts, and teams
|
|
25
|
+
- 📦 **Buffer**: Content pagination for handling large responses
|
|
25
26
|
|
|
26
27
|
## Features at a Glance
|
|
27
28
|
|
|
28
|
-
### Jira (
|
|
29
|
+
### Jira (19 Tools)
|
|
29
30
|
- Search issues with JQL
|
|
30
31
|
- Create, update, and transition issues
|
|
31
|
-
- Manage comments and
|
|
32
|
+
- Manage comments, links, and watchers
|
|
32
33
|
- Access boards and sprints
|
|
33
|
-
- View projects and metadata
|
|
34
|
+
- View projects, issue types, and metadata
|
|
35
|
+
- Track worklogs (individual and recursive totals)
|
|
34
36
|
|
|
35
|
-
### Confluence (
|
|
37
|
+
### Confluence (14 Tools)
|
|
36
38
|
- Search content with CQL
|
|
37
|
-
- Create and
|
|
39
|
+
- Create, update, and delete pages
|
|
38
40
|
- Navigate page hierarchies
|
|
39
41
|
- Manage attachments
|
|
40
42
|
- Add and view comments
|
|
41
43
|
|
|
42
|
-
### Tempo (
|
|
44
|
+
### Tempo (12 Tools)
|
|
43
45
|
- Log and manage work time
|
|
44
46
|
- View and update worklogs
|
|
45
47
|
- Access accounts and teams
|
|
46
|
-
- Retrieve team worklogs
|
|
48
|
+
- Retrieve team and epic worklogs
|
|
47
49
|
- Get user time tracking info
|
|
48
50
|
|
|
51
|
+
### Buffer (5 Tools)
|
|
52
|
+
- Retrieve content chunks from buffered responses
|
|
53
|
+
- List active buffers and their metadata
|
|
54
|
+
- Clear buffers to free memory
|
|
55
|
+
- **Search buffered content with grep-like patterns**
|
|
56
|
+
- **Edit buffered content with find/replace**
|
|
57
|
+
|
|
58
|
+
### Workload (2 Tools)
|
|
59
|
+
- Convert time between units (seconds, hours, days)
|
|
60
|
+
- Sum multiple workload values with mixed units
|
|
61
|
+
|
|
62
|
+
## Content Buffering
|
|
63
|
+
|
|
64
|
+
Tools that return large content (Confluence pages, Jira issues, Tempo worklogs) use an in-memory buffering system for efficient content pagination.
|
|
65
|
+
|
|
66
|
+
### How It Works
|
|
67
|
+
|
|
68
|
+
1. **Initial Call**: When you call a tool like `confluence_get_page`, it fetches the full content and stores it in a buffer
|
|
69
|
+
2. **Chunked Response**: The response includes a `bufferId`, the first chunk of content (default 5000 chars), and pagination info
|
|
70
|
+
3. **Retrieve More**: Use `buffer_get_chunk` with the `bufferId` to get subsequent chunks
|
|
71
|
+
|
|
72
|
+
### Response Format
|
|
73
|
+
|
|
74
|
+
Buffered tools return:
|
|
75
|
+
- `bufferId`: Unique identifier for retrieving more content
|
|
76
|
+
- `content`: The current chunk of content
|
|
77
|
+
- `offset`: Starting position of this chunk
|
|
78
|
+
- `limit`: Maximum characters returned
|
|
79
|
+
- `totalSize`: Total size of buffered content
|
|
80
|
+
- `hasMore`: Whether more content is available
|
|
81
|
+
|
|
82
|
+
### Example Usage
|
|
83
|
+
|
|
84
|
+
```typescript
|
|
85
|
+
// 1. Get a Confluence page (returns first 5000 chars)
|
|
86
|
+
{
|
|
87
|
+
"pageId": "123456"
|
|
88
|
+
}
|
|
89
|
+
// Response: { bufferId: "buf_xxx", content: "...", hasMore: true, totalSize: 15000 }
|
|
90
|
+
|
|
91
|
+
// 2. Get next chunk
|
|
92
|
+
{
|
|
93
|
+
"bufferId": "buf_xxx",
|
|
94
|
+
"offset": 5000,
|
|
95
|
+
"limit": 5000
|
|
96
|
+
}
|
|
97
|
+
// Response: { content: "...", hasMore: true }
|
|
98
|
+
|
|
99
|
+
// 3. Continue until hasMore: false
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
### Buffered Tools
|
|
103
|
+
|
|
104
|
+
- `confluence_get_page` - Returns page content with buffering
|
|
105
|
+
- `confluence_get_page_by_title` - Returns page content with buffering
|
|
106
|
+
- `jira_get_issue` - Returns issue data with buffering
|
|
107
|
+
- `tempo_get_worklogs` - Returns worklog data with buffering
|
|
108
|
+
- `tempo_get_team_worklogs` - Returns team worklog data with buffering
|
|
109
|
+
|
|
110
|
+
### Buffer Management
|
|
111
|
+
|
|
112
|
+
- **TTL**: Buffers expire after 10 minutes
|
|
113
|
+
- **List Buffers**: Use `buffer_list` to see active buffers
|
|
114
|
+
- **Clear Buffers**: Use `buffer_clear` to free memory
|
|
115
|
+
|
|
116
|
+
### Searching Buffer Content
|
|
117
|
+
|
|
118
|
+
Use `buffer_grep` to search within buffered content with regex patterns:
|
|
119
|
+
|
|
120
|
+
```typescript
|
|
121
|
+
// Search for "meeting" with 2 lines of context before and after
|
|
122
|
+
{
|
|
123
|
+
"bufferId": "buf_xxx",
|
|
124
|
+
"pattern": "meeting",
|
|
125
|
+
"-C": 2
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
// Case-insensitive search with 3 lines after each match
|
|
129
|
+
{
|
|
130
|
+
"bufferId": "buf_xxx",
|
|
131
|
+
"pattern": "API",
|
|
132
|
+
"-i": true,
|
|
133
|
+
"-A": 3
|
|
134
|
+
}
|
|
135
|
+
|
|
136
|
+
// Count occurrences only
|
|
137
|
+
{
|
|
138
|
+
"bufferId": "buf_xxx",
|
|
139
|
+
"pattern": "TODO",
|
|
140
|
+
"output_mode": "count"
|
|
141
|
+
}
|
|
142
|
+
```
|
|
143
|
+
|
|
144
|
+
**Parameters:**
|
|
145
|
+
- `pattern`: Regex pattern to search for
|
|
146
|
+
- `-A`: Lines to show after each match
|
|
147
|
+
- `-B`: Lines to show before each match
|
|
148
|
+
- `-C`: Lines to show before AND after (overrides -A/-B)
|
|
149
|
+
- `-i`: Case insensitive search
|
|
150
|
+
- `-n`: Show line numbers (default: true)
|
|
151
|
+
- `output_mode`: "content" (default) or "count"
|
|
152
|
+
- `multiline`: Enable multiline mode where `.` matches newlines
|
|
153
|
+
- `head_limit`: Limit to first N matches
|
|
154
|
+
- `offset`: Skip first N matches
|
|
155
|
+
|
|
156
|
+
### Editing Buffer Content
|
|
157
|
+
|
|
158
|
+
Use `buffer_edit` to perform find/replace on buffered content:
|
|
159
|
+
|
|
160
|
+
```typescript
|
|
161
|
+
// Replace single occurrence
|
|
162
|
+
{
|
|
163
|
+
"bufferId": "buf_xxx",
|
|
164
|
+
"old_string": "Meeting at 2pm",
|
|
165
|
+
"new_string": "Meeting at 3pm"
|
|
166
|
+
}
|
|
167
|
+
|
|
168
|
+
// Replace all occurrences
|
|
169
|
+
{
|
|
170
|
+
"bufferId": "buf_xxx",
|
|
171
|
+
"old_string": "TODO",
|
|
172
|
+
"new_string": "DONE",
|
|
173
|
+
"replace_all": true
|
|
174
|
+
}
|
|
175
|
+
```
|
|
176
|
+
|
|
177
|
+
**Important:** `buffer_edit` modifies content in memory only. To persist changes:
|
|
178
|
+
- For Confluence: call `confluence_update_page` with the modified content
|
|
179
|
+
- For Jira: call `jira_update_issue` with the modified fields
|
|
180
|
+
|
|
181
|
+
**Workflow Example:**
|
|
182
|
+
1. `confluence_get_page` → get bufferId
|
|
183
|
+
2. `buffer_grep` → find text to replace
|
|
184
|
+
3. `buffer_edit` → replace text in memory
|
|
185
|
+
4. `buffer_get_chunk` → get full modified content
|
|
186
|
+
5. `confluence_update_page` → persist changes
|
|
187
|
+
|
|
49
188
|
## Configuration
|
|
50
189
|
|
|
51
190
|
### Configuration with `.jicon.json` (Recommended)
|
|
@@ -70,13 +209,7 @@ Jicon supports a flexible configuration hierarchy with permission control:
|
|
|
70
209
|
"url": "https://confluence.example.com",
|
|
71
210
|
"username": "your-email@example.com",
|
|
72
211
|
"token": "your-api-token"
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
```
|
|
76
|
-
|
|
77
|
-
**Note:** This configuration uses the default `readonly` mode. To enable write operations, add:
|
|
78
|
-
```json
|
|
79
|
-
{
|
|
212
|
+
},
|
|
80
213
|
"permissions": {
|
|
81
214
|
"mode": "full"
|
|
82
215
|
}
|
|
@@ -87,35 +220,38 @@ Jicon supports a flexible configuration hierarchy with permission control:
|
|
|
87
220
|
|
|
88
221
|
### Permission Modes
|
|
89
222
|
|
|
90
|
-
Control which tools are allowed to execute
|
|
223
|
+
Control which tools are allowed to execute:
|
|
91
224
|
|
|
92
|
-
#### 1. **
|
|
225
|
+
#### 1. **Full Access** (default)
|
|
93
226
|
```json
|
|
94
|
-
{ "permissions": { "mode": "
|
|
227
|
+
{ "permissions": { "mode": "full" } }
|
|
95
228
|
```
|
|
96
|
-
|
|
97
|
-
This is the **recommended default** for security - users must explicitly opt-in to write access.
|
|
229
|
+
All 52 tools are available.
|
|
98
230
|
|
|
99
|
-
#### 2. **
|
|
231
|
+
#### 2. **Read-Only Mode**
|
|
100
232
|
```json
|
|
101
|
-
{ "permissions": { "mode": "
|
|
233
|
+
{ "permissions": { "mode": "readonly" } }
|
|
102
234
|
```
|
|
103
|
-
|
|
235
|
+
Only read operations (36 read tools + auto-included dependencies: 14 Jira + 9 Confluence + 9 Tempo + 4 Buffer read tools, plus workload utilities).
|
|
104
236
|
|
|
105
237
|
#### 3. **Custom Mode** with Virtual Actions
|
|
106
238
|
|
|
107
239
|
Simplify configuration with **virtual actions** that group related tools:
|
|
108
240
|
|
|
109
|
-
**Virtual Actions Available:**
|
|
110
|
-
- `jira_read` - All
|
|
241
|
+
**Virtual Actions Available (9 total):**
|
|
242
|
+
- `jira_read` - All 14 Jira read tools
|
|
111
243
|
- `jira_write` - All 5 Jira write tools
|
|
112
|
-
- `jira_all` - All
|
|
113
|
-
- `confluence_read` - All
|
|
244
|
+
- `jira_all` - All 19 Jira tools
|
|
245
|
+
- `confluence_read` - All 9 Confluence read tools
|
|
114
246
|
- `confluence_write` - All 5 Confluence write tools
|
|
115
|
-
- `confluence_all` - All
|
|
116
|
-
- `tempo_read` - All
|
|
247
|
+
- `confluence_all` - All 14 Confluence tools
|
|
248
|
+
- `tempo_read` - All 9 Tempo read tools
|
|
117
249
|
- `tempo_write` - All 3 Tempo write tools
|
|
118
|
-
- `tempo_all` - All
|
|
250
|
+
- `tempo_all` - All 12 Tempo tools
|
|
251
|
+
|
|
252
|
+
**Auto-included Dependencies:**
|
|
253
|
+
- Buffer tools (buffer_get_chunk, buffer_grep, etc.) are automatically included with any read/write action
|
|
254
|
+
- Workload tools (workload_convert, workload_sum) are automatically included with any Jira/Confluence/Tempo tool
|
|
119
255
|
|
|
120
256
|
**Example: Read-only access to all services**
|
|
121
257
|
```json
|
|
@@ -204,21 +340,30 @@ Once configured, you can ask Claude to:
|
|
|
204
340
|
- *"Show me my worklogs for this week"*
|
|
205
341
|
- *"Get team worklogs for the development team"*
|
|
206
342
|
|
|
343
|
+
## Documentation
|
|
344
|
+
|
|
345
|
+
- **[CLAUDE.md](CLAUDE.md)** - Complete functional specification
|
|
346
|
+
- **[TOOL_LIST.md](TOOL_LIST.md)** - Comprehensive tool reference with examples
|
|
347
|
+
- **[API Documentation](docs/api.md)** - Detailed API documentation (coming soon)
|
|
348
|
+
|
|
207
349
|
## Tool Categories
|
|
208
350
|
|
|
209
351
|
### Jira Tools
|
|
210
352
|
| Category | Tools |
|
|
211
353
|
|----------|-------|
|
|
354
|
+
| **Help** | `jira_jql_help` |
|
|
212
355
|
| **Search & Retrieval** | `jira_search_issues`, `jira_get_issue`, `jira_get_issue_comments` |
|
|
213
356
|
| **Issue Management** | `jira_create_issue`, `jira_update_issue`, `jira_transition_issue` |
|
|
214
357
|
| **Collaboration** | `jira_add_comment`, `jira_link_issues`, `jira_get_issue_watchers` |
|
|
215
|
-
| **Projects** | `jira_list_projects`, `jira_get_project` |
|
|
358
|
+
| **Projects** | `jira_list_projects`, `jira_get_project`, `jira_get_issue_types` |
|
|
216
359
|
| **Agile** | `jira_get_board`, `jira_get_sprints`, `jira_get_sprint_issues` |
|
|
217
360
|
| **Workflow** | `jira_get_transitions` |
|
|
361
|
+
| **Time Tracking** | `jira_get_issue_worklogs`, `jira_get_total_worklogs` |
|
|
218
362
|
|
|
219
363
|
### Confluence Tools
|
|
220
364
|
| Category | Tools |
|
|
221
365
|
|----------|-------|
|
|
366
|
+
| **Help** | `confluence_cql_help` |
|
|
222
367
|
| **Search & Retrieval** | `confluence_search_content`, `confluence_get_page`, `confluence_get_page_by_title` |
|
|
223
368
|
| **Page Management** | `confluence_create_page`, `confluence_update_page`, `confluence_delete_page` |
|
|
224
369
|
| **Spaces** | `confluence_list_spaces`, `confluence_get_space` |
|
|
@@ -231,9 +376,22 @@ Once configured, you can ask Claude to:
|
|
|
231
376
|
|----------|-------|
|
|
232
377
|
| **Worklog Management** | `tempo_get_worklogs`, `tempo_get_worklog`, `tempo_log_work`, `tempo_update_worklog`, `tempo_delete_worklog` |
|
|
233
378
|
| **Team Tracking** | `tempo_get_team_worklogs`, `tempo_get_teams`, `tempo_get_team` |
|
|
379
|
+
| **Epic Tracking** | `tempo_get_epic_worklogs` |
|
|
234
380
|
| **Accounts** | `tempo_get_accounts`, `tempo_get_account` |
|
|
235
381
|
| **User Info** | `tempo_get_user_info` |
|
|
236
382
|
|
|
383
|
+
### Buffer Tools
|
|
384
|
+
| Category | Tools |
|
|
385
|
+
|----------|-------|
|
|
386
|
+
| **Content Pagination** | `buffer_get_chunk`, `buffer_list`, `buffer_clear` |
|
|
387
|
+
| **Content Search** | `buffer_grep` |
|
|
388
|
+
| **Content Edit** | `buffer_edit` |
|
|
389
|
+
|
|
390
|
+
### Workload Tools
|
|
391
|
+
| Category | Tools |
|
|
392
|
+
|----------|-------|
|
|
393
|
+
| **Time Conversion** | `workload_convert`, `workload_sum` |
|
|
394
|
+
|
|
237
395
|
## Requirements
|
|
238
396
|
|
|
239
397
|
- Node.js 18 or higher
|
|
@@ -258,12 +416,57 @@ Generate a Personal Access Token (PAT):
|
|
|
258
416
|
|
|
259
417
|
## Security Best Practices
|
|
260
418
|
|
|
261
|
-
- ✅
|
|
262
|
-
- ✅ Store credentials in `.jicon.json` and add it to `.gitignore`
|
|
419
|
+
- ✅ Store credentials in environment variables
|
|
263
420
|
- ✅ Use API tokens with minimal required permissions
|
|
264
421
|
- ✅ Regularly rotate API tokens
|
|
265
422
|
- ✅ Never commit credentials to version control
|
|
266
|
-
- ✅
|
|
423
|
+
- ✅ Use read-only tokens for search/read operations
|
|
424
|
+
|
|
425
|
+
## Development Status
|
|
426
|
+
|
|
427
|
+
- ✅ **Specification Complete** - Functional spec and tool list defined
|
|
428
|
+
- ✅ **Implementation Complete** - All 52 tools implemented
|
|
429
|
+
- ✅ **Testing** - 157 tests passing
|
|
430
|
+
- ✅ **Configuration System** - Flexible .jicon.json with permissions
|
|
431
|
+
- ✅ **Content Buffering** - In-memory pagination for large responses
|
|
432
|
+
- 📦 **Publishing** - Ready for npm publish
|
|
433
|
+
|
|
434
|
+
## Roadmap
|
|
435
|
+
|
|
436
|
+
### Phase 1: Core Implementation ✅ **COMPLETED**
|
|
437
|
+
- ✅ Project setup and structure
|
|
438
|
+
- ✅ Jira API client implementation (19 tools)
|
|
439
|
+
- ✅ Confluence API client implementation (14 tools)
|
|
440
|
+
- ✅ Tempo API client implementation (12 tools)
|
|
441
|
+
- ✅ Workload utility tools implementation (2 tools)
|
|
442
|
+
- ✅ Buffer tools implementation (5 tools)
|
|
443
|
+
- ✅ MCP server implementation
|
|
444
|
+
- ✅ Basic testing (157 tests, 100% pass rate)
|
|
445
|
+
- ✅ Configuration system (.jicon.json with hierarchy)
|
|
446
|
+
- ✅ Permission system (full, readonly, custom modes)
|
|
447
|
+
- ✅ Virtual actions (jira_read, jira_all, confluence_read, tempo_all, etc.)
|
|
448
|
+
- ✅ Content buffering with pagination support
|
|
449
|
+
- ✅ Development and contributing guides
|
|
450
|
+
|
|
451
|
+
### Phase 2: Enhancement (In Progress)
|
|
452
|
+
- ✅ Advanced error handling (implemented)
|
|
453
|
+
- [ ] Rate limiting and caching
|
|
454
|
+
- [ ] Integration tests with mock servers
|
|
455
|
+
- ✅ Documentation examples (DEVELOPMENT.md added)
|
|
456
|
+
- [ ] CI/CD pipeline
|
|
457
|
+
- [ ] npm package publishing
|
|
458
|
+
|
|
459
|
+
### Phase 3: Advanced Features (Planned)
|
|
460
|
+
- [ ] Bulk operations
|
|
461
|
+
- [ ] Custom field templates
|
|
462
|
+
- [ ] Webhook support
|
|
463
|
+
- [ ] Multi-instance support
|
|
464
|
+
- [ ] CLI tool for configuration testing
|
|
465
|
+
- [ ] Performance optimizations
|
|
466
|
+
|
|
467
|
+
## Contributing
|
|
468
|
+
|
|
469
|
+
Contributions are welcome! Please read our [Contributing Guide](CONTRIBUTING.md) for details on our code of conduct and the process for submitting pull requests.
|
|
267
470
|
|
|
268
471
|
## License
|
|
269
472
|
|
package/TOOL_LIST.md
CHANGED
|
@@ -5,12 +5,13 @@ This document provides a comprehensive reference of all available tools in the J
|
|
|
5
5
|
|
|
6
6
|
## Summary
|
|
7
7
|
|
|
8
|
-
**Total Tools**:
|
|
8
|
+
**Total Tools**: 42
|
|
9
9
|
- **Jira Tools**: 15
|
|
10
10
|
- **Confluence Tools**: 13
|
|
11
11
|
- **Tempo Tools**: 11
|
|
12
|
+
- **Buffer Tools**: 3
|
|
12
13
|
|
|
13
|
-
**Note**:
|
|
14
|
+
**Note**: Tools that return large content use in-memory buffering with pagination support. See the Buffer Tools section for content retrieval.
|
|
14
15
|
|
|
15
16
|
---
|
|
16
17
|
|
|
@@ -29,7 +30,7 @@ This document provides a comprehensive reference of all available tools in the J
|
|
|
29
30
|
---
|
|
30
31
|
|
|
31
32
|
### 2. jira_get_issue
|
|
32
|
-
**Description**: Get detailed information about a specific issue
|
|
33
|
+
**Description**: Get detailed information about a specific issue with buffered content pagination
|
|
33
34
|
**Use Cases**: View issue details, check status, read description and comments
|
|
34
35
|
|
|
35
36
|
| Parameter | Type | Required | Description |
|
|
@@ -37,6 +38,10 @@ This document provides a comprehensive reference of all available tools in the J
|
|
|
37
38
|
| issueKey | string | ✓ | Issue key (e.g., "PROJ-123") |
|
|
38
39
|
| fields | string[] | ✗ | Specific fields to return |
|
|
39
40
|
| expand | string[] | ✗ | Additional data (e.g., "changelog") |
|
|
41
|
+
| offset | number | ✗ | Character offset to start from (default: 0) |
|
|
42
|
+
| limit | number | ✗ | Maximum characters to return (default: 5000) |
|
|
43
|
+
|
|
44
|
+
**Response includes**: `bufferId`, `content`, `offset`, `limit`, `totalSize`, `hasMore`
|
|
40
45
|
|
|
41
46
|
---
|
|
42
47
|
|
|
@@ -209,18 +214,22 @@ This document provides a comprehensive reference of all available tools in the J
|
|
|
209
214
|
---
|
|
210
215
|
|
|
211
216
|
### 2. confluence_get_page
|
|
212
|
-
**Description**: Get a Confluence page by ID
|
|
217
|
+
**Description**: Get a Confluence page by ID with buffered content pagination
|
|
213
218
|
**Use Cases**: Read page content, check version
|
|
214
219
|
|
|
215
220
|
| Parameter | Type | Required | Description |
|
|
216
221
|
|-----------|------|----------|-------------|
|
|
217
222
|
| pageId | string | ✓ | Page ID |
|
|
218
223
|
| expand | string[] | ✗ | Additional data (e.g., "body.storage") |
|
|
224
|
+
| offset | number | ✗ | Character offset to start from (default: 0) |
|
|
225
|
+
| limit | number | ✗ | Maximum characters to return (default: 5000) |
|
|
226
|
+
|
|
227
|
+
**Response includes**: `bufferId`, `content`, `offset`, `limit`, `totalSize`, `hasMore`, page metadata
|
|
219
228
|
|
|
220
229
|
---
|
|
221
230
|
|
|
222
231
|
### 3. confluence_get_page_by_title
|
|
223
|
-
**Description**: Get a page by title and space
|
|
232
|
+
**Description**: Get a page by title and space with buffered content pagination
|
|
224
233
|
**Use Cases**: Find page by name, access documentation
|
|
225
234
|
|
|
226
235
|
| Parameter | Type | Required | Description |
|
|
@@ -228,6 +237,10 @@ This document provides a comprehensive reference of all available tools in the J
|
|
|
228
237
|
| spaceKey | string | ✓ | Space key |
|
|
229
238
|
| title | string | ✓ | Page title |
|
|
230
239
|
| expand | string[] | ✗ | Additional data to expand |
|
|
240
|
+
| offset | number | ✗ | Character offset to start from (default: 0) |
|
|
241
|
+
| limit | number | ✗ | Maximum characters to return (default: 5000) |
|
|
242
|
+
|
|
243
|
+
**Response includes**: `bufferId`, `content`, `offset`, `limit`, `totalSize`, `hasMore`, page metadata
|
|
231
244
|
|
|
232
245
|
---
|
|
233
246
|
|
|
@@ -436,3 +449,186 @@ AND lastModified >= now("-30d")
|
|
|
436
449
|
- **Meeting notes**: Recording decisions, action items
|
|
437
450
|
- **Collaboration**: Comments, feedback on pages
|
|
438
451
|
- **Content organization**: Space and page hierarchy management
|
|
452
|
+
|
|
453
|
+
---
|
|
454
|
+
|
|
455
|
+
## Tempo Tools (11)
|
|
456
|
+
|
|
457
|
+
### 1. tempo_get_worklogs
|
|
458
|
+
**Description**: Get time tracking worklogs with buffered content pagination
|
|
459
|
+
**Use Cases**: View time entries, generate reports, review team work
|
|
460
|
+
|
|
461
|
+
| Parameter | Type | Required | Description |
|
|
462
|
+
|-----------|------|----------|-------------|
|
|
463
|
+
| dateFrom | string | ✗ | Start date (YYYY-MM-DD) |
|
|
464
|
+
| dateTo | string | ✗ | End date (YYYY-MM-DD) |
|
|
465
|
+
| projectKey | string | ✗ | Filter by project key |
|
|
466
|
+
| issueKey | string | ✗ | Filter by issue key |
|
|
467
|
+
| workerKey | string | ✗ | Filter by worker username |
|
|
468
|
+
| offset | number | ✗ | Character offset to start from (default: 0) |
|
|
469
|
+
| limit | number | ✗ | Maximum characters to return (default: 5000) |
|
|
470
|
+
|
|
471
|
+
**Response includes**: `bufferId`, `content`, `offset`, `limit`, `totalSize`, `hasMore`, worklog metadata
|
|
472
|
+
|
|
473
|
+
---
|
|
474
|
+
|
|
475
|
+
### 2. tempo_get_worklog
|
|
476
|
+
**Description**: Get detailed information about a specific worklog entry
|
|
477
|
+
**Use Cases**: View worklog details, check time logged
|
|
478
|
+
|
|
479
|
+
| Parameter | Type | Required | Description |
|
|
480
|
+
|-----------|------|----------|-------------|
|
|
481
|
+
| worklogId | number | ✓ | Tempo worklog ID |
|
|
482
|
+
|
|
483
|
+
---
|
|
484
|
+
|
|
485
|
+
### 3. tempo_log_work
|
|
486
|
+
**Description**: Log time to a Jira issue
|
|
487
|
+
**Use Cases**: Record work time, track daily activities
|
|
488
|
+
|
|
489
|
+
| Parameter | Type | Required | Description |
|
|
490
|
+
|-----------|------|----------|-------------|
|
|
491
|
+
| issueKey | string | ✓ | Jira issue key (e.g., PROJ-123) |
|
|
492
|
+
| hours | number | ✓ | Hours to log (decimal, e.g., 2.5 = 2h 30m) |
|
|
493
|
+
| date | string | ✓ | Date to log work (YYYY-MM-DD) |
|
|
494
|
+
| description | string | ✗ | Work description |
|
|
495
|
+
| startTime | string | ✗ | Start time (HH:MM:SS) |
|
|
496
|
+
| remainingEstimateHours | number | ✗ | Remaining estimate in hours |
|
|
497
|
+
|
|
498
|
+
---
|
|
499
|
+
|
|
500
|
+
### 4. tempo_update_worklog
|
|
501
|
+
**Description**: Update an existing worklog entry
|
|
502
|
+
**Use Cases**: Correct time logged, update descriptions
|
|
503
|
+
|
|
504
|
+
| Parameter | Type | Required | Description |
|
|
505
|
+
|-----------|------|----------|-------------|
|
|
506
|
+
| worklogId | number | ✓ | Tempo worklog ID to update |
|
|
507
|
+
| hours | number | ✗ | New hours (decimal) |
|
|
508
|
+
| description | string | ✗ | New description |
|
|
509
|
+
| date | string | ✗ | New date (YYYY-MM-DD) |
|
|
510
|
+
|
|
511
|
+
---
|
|
512
|
+
|
|
513
|
+
### 5. tempo_delete_worklog
|
|
514
|
+
**Description**: Delete a worklog entry
|
|
515
|
+
**Use Cases**: Remove incorrect entries
|
|
516
|
+
|
|
517
|
+
| Parameter | Type | Required | Description |
|
|
518
|
+
|-----------|------|----------|-------------|
|
|
519
|
+
| worklogId | number | ✓ | Tempo worklog ID to delete |
|
|
520
|
+
|
|
521
|
+
---
|
|
522
|
+
|
|
523
|
+
### 6. tempo_get_accounts
|
|
524
|
+
**Description**: Get all Tempo accounts
|
|
525
|
+
**Use Cases**: List accounts for time tracking, find account keys
|
|
526
|
+
|
|
527
|
+
| Parameter | Type | Required | Description |
|
|
528
|
+
|-----------|------|----------|-------------|
|
|
529
|
+
| (none) | | | |
|
|
530
|
+
|
|
531
|
+
---
|
|
532
|
+
|
|
533
|
+
### 7. tempo_get_account
|
|
534
|
+
**Description**: Get detailed information about a Tempo account
|
|
535
|
+
**Use Cases**: View account details, check status
|
|
536
|
+
|
|
537
|
+
| Parameter | Type | Required | Description |
|
|
538
|
+
|-----------|------|----------|-------------|
|
|
539
|
+
| accountKey | string | ✓ | Account key |
|
|
540
|
+
|
|
541
|
+
---
|
|
542
|
+
|
|
543
|
+
### 8. tempo_get_teams
|
|
544
|
+
**Description**: Get all Tempo teams
|
|
545
|
+
**Use Cases**: List teams, find team IDs
|
|
546
|
+
|
|
547
|
+
| Parameter | Type | Required | Description |
|
|
548
|
+
|-----------|------|----------|-------------|
|
|
549
|
+
| (none) | | | |
|
|
550
|
+
|
|
551
|
+
---
|
|
552
|
+
|
|
553
|
+
### 9. tempo_get_team
|
|
554
|
+
**Description**: Get detailed information about a Tempo team
|
|
555
|
+
**Use Cases**: View team details, check membership
|
|
556
|
+
|
|
557
|
+
| Parameter | Type | Required | Description |
|
|
558
|
+
|-----------|------|----------|-------------|
|
|
559
|
+
| teamId | number | ✓ | Team ID |
|
|
560
|
+
|
|
561
|
+
---
|
|
562
|
+
|
|
563
|
+
### 10. tempo_get_team_worklogs
|
|
564
|
+
**Description**: Get all worklogs for a team with buffered content pagination
|
|
565
|
+
**Use Cases**: Team capacity reports, sprint reviews
|
|
566
|
+
|
|
567
|
+
| Parameter | Type | Required | Description |
|
|
568
|
+
|-----------|------|----------|-------------|
|
|
569
|
+
| teamId | number | ✓ | Team ID |
|
|
570
|
+
| dateFrom | string | ✓ | Start date (YYYY-MM-DD) |
|
|
571
|
+
| dateTo | string | ✓ | End date (YYYY-MM-DD) |
|
|
572
|
+
| offset | number | ✗ | Character offset to start from (default: 0) |
|
|
573
|
+
| limit | number | ✗ | Maximum characters to return (default: 5000) |
|
|
574
|
+
|
|
575
|
+
**Response includes**: `bufferId`, `content`, `offset`, `limit`, `totalSize`, `hasMore`, worklog metadata
|
|
576
|
+
|
|
577
|
+
---
|
|
578
|
+
|
|
579
|
+
### 11. tempo_get_user_info
|
|
580
|
+
**Description**: Get current user information (workerKey, accountId, displayName)
|
|
581
|
+
**Use Cases**: Get workerKey for filtering worklogs, verify authentication
|
|
582
|
+
|
|
583
|
+
| Parameter | Type | Required | Description |
|
|
584
|
+
|-----------|------|----------|-------------|
|
|
585
|
+
| (none) | | | |
|
|
586
|
+
|
|
587
|
+
---
|
|
588
|
+
|
|
589
|
+
## Buffer Tools (3)
|
|
590
|
+
|
|
591
|
+
Buffer tools are used to retrieve content from buffered responses. When tools like `confluence_get_page` or `jira_get_issue` return large content, they store the full data in an in-memory buffer and return a `bufferId` for pagination.
|
|
592
|
+
|
|
593
|
+
### 1. buffer_get_chunk
|
|
594
|
+
**Description**: Retrieve a chunk of buffered content by buffer ID
|
|
595
|
+
**Use Cases**: Get remaining content from large responses
|
|
596
|
+
|
|
597
|
+
| Parameter | Type | Required | Description |
|
|
598
|
+
|-----------|------|----------|-------------|
|
|
599
|
+
| bufferId | string | ✓ | Buffer ID from previous tool response |
|
|
600
|
+
| offset | number | ✗ | Character position to start from (default: 0) |
|
|
601
|
+
| limit | number | ✗ | Maximum characters to return (default: 5000) |
|
|
602
|
+
|
|
603
|
+
**Response includes**: `bufferId`, `content`, `offset`, `limit`, `totalSize`, `hasMore`, `metadata`
|
|
604
|
+
|
|
605
|
+
**Example workflow**:
|
|
606
|
+
```typescript
|
|
607
|
+
// 1. Call confluence_get_page -> returns bufferId, first chunk, hasMore: true
|
|
608
|
+
// 2. Call buffer_get_chunk(bufferId, offset: 5000) -> returns next chunk
|
|
609
|
+
// 3. Repeat until hasMore: false
|
|
610
|
+
```
|
|
611
|
+
|
|
612
|
+
---
|
|
613
|
+
|
|
614
|
+
### 2. buffer_list
|
|
615
|
+
**Description**: List all active buffers with their metadata
|
|
616
|
+
**Use Cases**: View active buffers, check expiration times
|
|
617
|
+
|
|
618
|
+
| Parameter | Type | Required | Description |
|
|
619
|
+
|-----------|------|----------|-------------|
|
|
620
|
+
| (none) | | | |
|
|
621
|
+
|
|
622
|
+
**Response includes**: `count`, list of buffers with `bufferId`, `totalSize`, `createdAt`, `expiresAt`, `metadata`
|
|
623
|
+
|
|
624
|
+
---
|
|
625
|
+
|
|
626
|
+
### 3. buffer_clear
|
|
627
|
+
**Description**: Clear a specific buffer or all buffers
|
|
628
|
+
**Use Cases**: Free up memory, clean up after processing
|
|
629
|
+
|
|
630
|
+
| Parameter | Type | Required | Description |
|
|
631
|
+
|-----------|------|----------|-------------|
|
|
632
|
+
| bufferId | string | ✗ | Buffer ID to clear, or omit to clear all buffers |
|
|
633
|
+
|
|
634
|
+
**Response includes**: `message`, `cleared` (count of buffers cleared)
|
package/dist/config/types.d.ts
CHANGED
|
@@ -28,11 +28,11 @@ export declare const PermissionsConfigSchema: z.ZodObject<{
|
|
|
28
28
|
whitelist: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
29
29
|
blacklist: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
30
30
|
}, "strip", z.ZodTypeAny, {
|
|
31
|
-
mode: "
|
|
31
|
+
mode: "custom" | "full" | "readonly";
|
|
32
32
|
whitelist: string[];
|
|
33
33
|
blacklist: string[];
|
|
34
34
|
}, {
|
|
35
|
-
mode?: "
|
|
35
|
+
mode?: "custom" | "full" | "readonly" | undefined;
|
|
36
36
|
whitelist?: string[] | undefined;
|
|
37
37
|
blacklist?: string[] | undefined;
|
|
38
38
|
}>;
|
|
@@ -75,17 +75,17 @@ export declare const ConfigSchema: z.ZodObject<{
|
|
|
75
75
|
whitelist: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
76
76
|
blacklist: z.ZodDefault<z.ZodArray<z.ZodString, "many">>;
|
|
77
77
|
}, "strip", z.ZodTypeAny, {
|
|
78
|
-
mode: "
|
|
78
|
+
mode: "custom" | "full" | "readonly";
|
|
79
79
|
whitelist: string[];
|
|
80
80
|
blacklist: string[];
|
|
81
81
|
}, {
|
|
82
|
-
mode?: "
|
|
82
|
+
mode?: "custom" | "full" | "readonly" | undefined;
|
|
83
83
|
whitelist?: string[] | undefined;
|
|
84
84
|
blacklist?: string[] | undefined;
|
|
85
85
|
}>>;
|
|
86
86
|
}, "strip", z.ZodTypeAny, {
|
|
87
87
|
permissions: {
|
|
88
|
-
mode: "
|
|
88
|
+
mode: "custom" | "full" | "readonly";
|
|
89
89
|
whitelist: string[];
|
|
90
90
|
blacklist: string[];
|
|
91
91
|
};
|
|
@@ -115,7 +115,7 @@ export declare const ConfigSchema: z.ZodObject<{
|
|
|
115
115
|
authType?: "basic" | "bearer" | undefined;
|
|
116
116
|
} | undefined;
|
|
117
117
|
permissions?: {
|
|
118
|
-
mode?: "
|
|
118
|
+
mode?: "custom" | "full" | "readonly" | undefined;
|
|
119
119
|
whitelist?: string[] | undefined;
|
|
120
120
|
blacklist?: string[] | undefined;
|
|
121
121
|
} | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,cAAc,gCAA8B,CAAC;AAC1D,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAGtD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;EAK9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAGhE,eAAO,MAAM,oBAAoB,2CAAyC,CAAC;AAC3E,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAGlE,eAAO,MAAM,uBAAuB;;;;;;;;;;;;EAIlC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/config/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,cAAc,gCAA8B,CAAC;AAC1D,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAGtD,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;EAK9B,CAAC;AAEH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAGhE,eAAO,MAAM,oBAAoB,2CAAyC,CAAC;AAC3E,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAGlE,eAAO,MAAM,uBAAuB;;;;;;;;;;;;EAIlC,CAAC;AAEH,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,uBAAuB,CAAC,CAAC;AAIxE,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAQvB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAGlD,MAAM,WAAW,SAAS;IACxB,GAAG,EAAE,MAAM,CAAC;IACZ,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,CAAC,EAAE,QAAQ,CAAC;CACrB"}
|
package/dist/config/types.js
CHANGED
|
@@ -20,12 +20,13 @@ export const PermissionsConfigSchema = z.object({
|
|
|
20
20
|
blacklist: z.array(z.string()).default([]),
|
|
21
21
|
});
|
|
22
22
|
// Main configuration schema
|
|
23
|
+
// Default: custom mode with jira_read + confluence_read only (Tempo disabled by default)
|
|
23
24
|
export const ConfigSchema = z.object({
|
|
24
25
|
jira: ServiceConfigSchema.optional(),
|
|
25
26
|
confluence: ServiceConfigSchema.optional(),
|
|
26
27
|
permissions: PermissionsConfigSchema.default({
|
|
27
|
-
mode: "
|
|
28
|
-
whitelist: [],
|
|
28
|
+
mode: "custom",
|
|
29
|
+
whitelist: ["jira_read", "confluence_read"],
|
|
29
30
|
blacklist: [],
|
|
30
31
|
}),
|
|
31
32
|
});
|