@softspark/jira-mcp 1.2.0 → 1.4.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/CHANGELOG.md +30 -0
- package/README.md +53 -16
- package/dist/cli.js +47 -117
- package/dist/index.js +48 -125
- package/hooks/jira-mcp-hooks.json +15 -0
- package/package.json +3 -1
- package/templates-system/comments/blocker-notification.md +26 -0
- package/templates-system/comments/bug-report.md +28 -0
- package/templates-system/comments/deployment-note.md +24 -0
- package/templates-system/comments/handoff-transition.md +28 -0
- package/templates-system/comments/review-request.md +26 -0
- package/templates-system/comments/sprint-update.md +24 -0
- package/templates-system/comments/status-update.md +24 -0
- package/templates-system/comments/time-log-summary.md +19 -0
- package/templates-system/task-templates/bug-task.md +31 -0
- package/templates-system/task-templates/default-task.md +23 -0
- package/templates-system/task-templates/review-follow-up.md +23 -0
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,36 @@ Versioning follows [Semantic Versioning](https://semver.org/).
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
## v1.4.0 -- Delete Tools & Error Hardening (2026-04-15)
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- **`delete_task` tool** -- delete a Jira issue with ownership enforcement (creator only) and explicit user approval guard.
|
|
14
|
+
- **`delete_comment` tool** -- delete a comment with ownership enforcement (author only) and explicit user approval guard.
|
|
15
|
+
- **Markdown table support in ADF** -- `markdownToAdf()` now converts markdown tables to ADF table nodes.
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
- **Narrowed cache cleanup catch blocks** -- `deleteTask()` and `logTime()` now catch only `TaskNotFoundError` and `CacheNotFoundError` instead of swallowing all exceptions. Unexpected I/O or corruption errors propagate.
|
|
19
|
+
|
|
20
|
+
### Fixed
|
|
21
|
+
- **Silent cache errors** -- cache I/O failures during post-delete and post-worklog cleanup were silently ignored, leaving stale entries without any signal.
|
|
22
|
+
|
|
23
|
+
## v1.3.0 -- File-Backed Templates & Approval Hooks (2026-04-15)
|
|
24
|
+
|
|
25
|
+
### Added
|
|
26
|
+
- **File-backed template catalog** -- ship built-in comment and single-task templates as physical markdown files under `templates-system/`.
|
|
27
|
+
- **Template management CLI** -- add `jira-mcp template add/list/show/remove` for global user overrides in `~/.softspark/jira-mcp/templates/`.
|
|
28
|
+
- **Task templates for `create_task`** -- add `list_task_templates` and template-based issue creation with variable rendering.
|
|
29
|
+
- **Comment approval hook manifest** -- ship `hooks/jira-mcp-hooks.json` for ai-toolkit `inject-hook` flows that preview and gate Jira comment writes.
|
|
30
|
+
|
|
31
|
+
### Changed
|
|
32
|
+
- **Template loading model** -- resolve active templates from system files plus global user overrides, with user files winning on `id` collisions.
|
|
33
|
+
- **Configuration init** -- create dedicated template directories for comments, single-task templates, and bulk task configs.
|
|
34
|
+
- **README validation** -- exclude internal tool helpers from MCP tool counts and refresh counts to match the current source tree.
|
|
35
|
+
|
|
36
|
+
### Fixed
|
|
37
|
+
- **Comment write safety** -- require explicit `user_approved=true` before `add_task_comment` and `add_templated_comment` can mutate Jira.
|
|
38
|
+
- **Comment preview flow** -- render templated comment previews before execution so approval can target the exact outgoing markdown.
|
|
39
|
+
|
|
10
40
|
## v1.2.0 -- Per-Instance Credentials & Jira API Migration (2026-04-14)
|
|
11
41
|
|
|
12
42
|
### Added
|
package/README.md
CHANGED
|
@@ -4,17 +4,17 @@
|
|
|
4
4
|
|
|
5
5
|
[](https://github.com/softspark/jira-mcp/actions/workflows/ci.yml)
|
|
6
6
|
[](https://www.npmjs.com/package/@softspark/jira-mcp)
|
|
7
|
-
[](CHANGELOG.md)
|
|
8
8
|
[](LICENSE)
|
|
9
9
|
|
|
10
10
|
---
|
|
11
11
|
|
|
12
|
-
## What's New in v1.
|
|
12
|
+
## What's New in v1.4.0
|
|
13
13
|
|
|
14
|
-
-
|
|
15
|
-
- **
|
|
16
|
-
- **
|
|
17
|
-
- **
|
|
14
|
+
- **`delete_task` and `delete_comment` tools** -- guarded destructive operations with ownership enforcement and explicit approval.
|
|
15
|
+
- **Markdown table support** -- `markdownToAdf()` converts tables to native ADF table nodes.
|
|
16
|
+
- **Hardened error handling** -- cache cleanup no longer swallows unexpected I/O errors.
|
|
17
|
+
- **561 tests** across 58 test files.
|
|
18
18
|
|
|
19
19
|
See [CHANGELOG.md](CHANGELOG.md) for full details.
|
|
20
20
|
|
|
@@ -74,6 +74,10 @@ All configuration lives in `~/.softspark/jira-mcp/` (created by `jira-mcp config
|
|
|
74
74
|
| `jira-mcp serve` | Start MCP server (explicit) |
|
|
75
75
|
| `jira-mcp create <path>` | Create tasks from config file (dry-run by default) |
|
|
76
76
|
| `jira-mcp create-monthly` | Create monthly admin tasks from built-in templates |
|
|
77
|
+
| `jira-mcp template add <type> <path>` | Install a template override from a local markdown file |
|
|
78
|
+
| `jira-mcp template list [type]` | List active comment/task templates |
|
|
79
|
+
| `jira-mcp template show <type> <id>` | Show the active template file content |
|
|
80
|
+
| `jira-mcp template remove <type> <id>` | Remove a user-installed template override |
|
|
77
81
|
| `jira-mcp config init` | Initialize global config at `~/.softspark/jira-mcp/` |
|
|
78
82
|
| `jira-mcp config add-project <key> <url>` | Add a Jira project to config |
|
|
79
83
|
| `jira-mcp config remove-project <key>` | Remove a project from config |
|
|
@@ -95,7 +99,9 @@ All configuration lives in `~/.softspark/jira-mcp/` (created by `jira-mcp config
|
|
|
95
99
|
| `read_cached_tasks` | Read tasks from cache without hitting Jira | `task_key?` |
|
|
96
100
|
| `update_task_status` | Change task status via workflow transition | `task_key`, `status` |
|
|
97
101
|
| `update_task` | Update existing issue fields (markdown → ADF) | `task_key`, `summary?`, `description?`, `priority?`, `labels?` |
|
|
98
|
-
| `add_task_comment` | Add a markdown comment (auto-converted to ADF) | `task_key`, `comment` |
|
|
102
|
+
| `add_task_comment` | Add a markdown comment (auto-converted to ADF) | `task_key`, `comment`, `user_approved` |
|
|
103
|
+
| `delete_task` | Delete a task, only when the authenticated user is the task creator | `task_key`, `user_approved` |
|
|
104
|
+
| `delete_comment` | Delete a comment, only when the authenticated user is the comment author | `task_key`, `comment_id`, `user_approved` |
|
|
99
105
|
| `reassign_task` | Reassign or unassign a task | `task_key`, `assignee_email?` |
|
|
100
106
|
| `get_task_statuses` | Get valid workflow transitions for a task | `task_key` |
|
|
101
107
|
| `get_task_details` | Get full details with description, comments, and language | `task_key` |
|
|
@@ -103,8 +109,9 @@ All configuration lives in `~/.softspark/jira-mcp/` (created by `jira-mcp config
|
|
|
103
109
|
| `log_task_time` | Log work time (`"2h 30m"` format, no days) | `task_key`, `time_spent`, `comment?` |
|
|
104
110
|
| `get_task_time_tracking` | Get time tracking info (estimate, spent, remaining) | `task_key` |
|
|
105
111
|
| `list_comment_templates` | List available comment templates | `category?` |
|
|
106
|
-
| `
|
|
107
|
-
| `
|
|
112
|
+
| `list_task_templates` | List available task templates for `create_task` | — |
|
|
113
|
+
| `add_templated_comment` | Add comment using a template or raw markdown | `task_key`, `template_id?`, `variables?`, `markdown?`, `user_approved` |
|
|
114
|
+
| `create_task` | Create a new Jira issue with explicit fields or a task template | `project_key`, `summary?`, `template_id?`, `variables?`, `description?`, `assignee_email?`, `labels?`, `epic_key?` |
|
|
108
115
|
| `search_tasks` | Search Jira issues with JQL (no caching) | `jql`, `max_results?`, `project_key?` |
|
|
109
116
|
|
|
110
117
|
## Comment Templates
|
|
@@ -130,6 +137,23 @@ Example with Claude Code:
|
|
|
130
137
|
|
|
131
138
|
The AI will use `add_templated_comment` with `template_id: "status-update"` automatically.
|
|
132
139
|
|
|
140
|
+
### File-Backed Overrides
|
|
141
|
+
|
|
142
|
+
System templates are shipped as markdown files. User overrides are loaded from:
|
|
143
|
+
|
|
144
|
+
```text
|
|
145
|
+
~/.softspark/jira-mcp/templates/comments/
|
|
146
|
+
~/.softspark/jira-mcp/templates/task-templates/
|
|
147
|
+
```
|
|
148
|
+
|
|
149
|
+
If a user file has the same `id` as a system template, the user file wins globally for all projects.
|
|
150
|
+
|
|
151
|
+
```bash
|
|
152
|
+
jira-mcp template add comment ./my-status-update.md
|
|
153
|
+
jira-mcp template add task ./my-bug-task.md
|
|
154
|
+
jira-mcp template list
|
|
155
|
+
```
|
|
156
|
+
|
|
133
157
|
## Usage with Claude Code
|
|
134
158
|
|
|
135
159
|
Add to your Claude Code MCP configuration (`~/.claude/claude_desktop_config.json` or project-level):
|
|
@@ -160,7 +184,19 @@ Or copy `rules/jira-mcp.md` to your ai-toolkit rules directory manually. The rul
|
|
|
160
184
|
- **Sync before read** -- cache may be stale
|
|
161
185
|
- **Status transitions** -- check valid transitions before changing status
|
|
162
186
|
- **Time format** -- `"2h 30m"`, never days
|
|
163
|
-
- **All
|
|
187
|
+
- **All 18 MCP tools** and **20 CLI commands** reference
|
|
188
|
+
|
|
189
|
+
### AI Toolkit Hooks
|
|
190
|
+
|
|
191
|
+
To require explicit user approval before Jira comment writes, inject the repo-owned hook manifest:
|
|
192
|
+
|
|
193
|
+
```bash
|
|
194
|
+
ai-toolkit inject-hook https://raw.githubusercontent.com/softspark/jira-mcp/main/hooks/jira-mcp-hooks.json
|
|
195
|
+
```
|
|
196
|
+
|
|
197
|
+
This installs a `PreToolUse` guard for `add_task_comment` and `add_templated_comment`. The hook blocks the tool call, shows the exact comment preview, and tells the agent to retry only after the user approves it with `user_approved=true`.
|
|
198
|
+
|
|
199
|
+
The MCP server still enforces `user_approved=true` at runtime, so the hook is UX guidance plus an extra safety layer rather than the only check.
|
|
164
200
|
|
|
165
201
|
## Usage with Other MCP Clients
|
|
166
202
|
|
|
@@ -187,14 +223,15 @@ src/
|
|
|
187
223
|
commands/
|
|
188
224
|
cache/ Cache management subcommands
|
|
189
225
|
config/ Config management subcommands
|
|
226
|
+
template/ File-backed template management subcommands
|
|
190
227
|
create.ts Bulk task creation command
|
|
191
228
|
create-monthly.ts Monthly admin task automation
|
|
192
229
|
config/ Configuration loading and Zod validation
|
|
193
230
|
connector/ Jira API client (built-in fetch, instance pool)
|
|
194
231
|
errors/ Typed error hierarchy
|
|
195
232
|
operations/ Business logic (status, comments, time tracking)
|
|
196
|
-
templates/
|
|
197
|
-
tools/ MCP tool handlers (
|
|
233
|
+
templates/ File-backed comment/task template loading and registries
|
|
234
|
+
tools/ MCP tool handlers (18 tools, one file per tool)
|
|
198
235
|
types/ Shared TypeScript types
|
|
199
236
|
server.ts MCP server setup and tool registration
|
|
200
237
|
cli.ts CLI entry point
|
|
@@ -208,7 +245,7 @@ src/
|
|
|
208
245
|
|
|
209
246
|
**Local caching** -- tasks synced to `~/.softspark/jira-mcp/cache/` with atomic writes (tmp + rename). Work offline with `read_cached_tasks`, sync on demand. Workflow and user caches for status validation and assignee resolution.
|
|
210
247
|
|
|
211
|
-
**
|
|
248
|
+
**File-backed templates** -- 8 built-in comment templates and built-in task templates are stored as markdown files, with global user overrides loaded from `~/.softspark/jira-mcp/templates/`. Both support `{{variable}}` interpolation and `{{#var}}...{{/var}}` conditional blocks. See [Templates Reference](kb/reference/templates.md).
|
|
212
249
|
|
|
213
250
|
**Language configuration** -- global `default_language` with per-project override. Supports: pl, en, de, es, fr, pt, it, nl. `get_project_language` tool and `language` field in `get_task_details` let AI assistants write content in the correct language. See [Configuration](kb/reference/configuration.md).
|
|
214
251
|
|
|
@@ -218,16 +255,16 @@ src/
|
|
|
218
255
|
|
|
219
256
|
**Supply chain protection** -- `ignore-scripts=true`, no axios, no dynamic requires. Self-contained 520KB bundle, 1 runtime dep (commander).
|
|
220
257
|
|
|
221
|
-
**Typed error hierarchy** --
|
|
258
|
+
**Typed error hierarchy** -- 20 error classes with machine-readable codes. Every tool returns structured `{ success, error, code }` responses. No stack traces leak to MCP clients.
|
|
222
259
|
|
|
223
|
-
**Strict TypeScript** -- `strict: true`, no `any`, `readonly` interfaces, Zod validation at all boundaries,
|
|
260
|
+
**Strict TypeScript** -- `strict: true`, no `any`, `readonly` interfaces, Zod validation at all boundaries, 558 tests across 58 test files. Self-contained 520KB package.
|
|
224
261
|
|
|
225
262
|
## Documentation
|
|
226
263
|
|
|
227
264
|
| Document | Description |
|
|
228
265
|
|----------|-------------|
|
|
229
266
|
| [Architecture](kb/reference/architecture.md) | System design and module overview |
|
|
230
|
-
| [API Reference](kb/reference/api.md) | All
|
|
267
|
+
| [API Reference](kb/reference/api.md) | All 18 MCP tools with schemas |
|
|
231
268
|
| [Configuration](kb/reference/configuration.md) | Config files, env vars, multi-instance |
|
|
232
269
|
| [ADF Format](kb/reference/adf.md) | Atlassian Document Format conversion |
|
|
233
270
|
| [Caching](kb/reference/caching.md) | Task, workflow, and user caching |
|