@softspark/jira-mcp 1.15.0 → 1.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +73 -0
- package/README.md +13 -10
- package/dist/cli.js +43 -43
- package/dist/index.js +32 -32
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,79 @@ Versioning follows [Semantic Versioning](https://semver.org/).
|
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
+
## v1.16.1 -- Bad arguments stop answering UNKNOWN_ERROR (2026-09-18)
|
|
11
|
+
|
|
12
|
+
Both packages change in this release.
|
|
13
|
+
|
|
14
|
+
### Fixed
|
|
15
|
+
|
|
16
|
+
- **Argument checks answer `INVALID_INPUT`.** Every input check in both servers
|
|
17
|
+
raised a bare `Error`, and a tool response takes its `code` only from the
|
|
18
|
+
typed hierarchy, so "you passed both `content` and `storage`" came back as
|
|
19
|
+
`UNKNOWN_ERROR`. That code reads as "something broke", and an agent that sees
|
|
20
|
+
it stops or looks for a way around the server instead of fixing its call. 31
|
|
21
|
+
sites now raise `InvalidInputError`: a missing required argument, two
|
|
22
|
+
arguments that exclude each other, an update that names nothing to change, a
|
|
23
|
+
malformed time (`2d`) or Tempo date, an unknown `group_by`, category or
|
|
24
|
+
`position` value, a file over the upload limit, an unknown tool name. Nothing
|
|
25
|
+
reaches Atlassian when it is raised, and the messages are unchanged.
|
|
26
|
+
- **`TEMPLATE_MISSING_VAR` is real now.** `create_task`,
|
|
27
|
+
`add_templated_comment` and `create_page` answer it when a template is
|
|
28
|
+
rendered without a required variable. The class and its row in the API
|
|
29
|
+
reference had existed since templates shipped, but nothing raised it.
|
|
30
|
+
- **`add_page_inline_comment` answers `ANCHOR_NOT_FOUND`** when
|
|
31
|
+
`text_selection` is not in the page body, instead of `UNKNOWN_ERROR`. Found
|
|
32
|
+
in the 1.16.0 post-release run.
|
|
33
|
+
- A raw NUL byte in a string literal in `tempo-operations.ts` made git and grep
|
|
34
|
+
treat the file as binary: its diffs showed as `Bin` and searches skipped it
|
|
35
|
+
without saying so. It is now the escape `'\u0000'` behind a named constant.
|
|
36
|
+
Behaviour is identical.
|
|
37
|
+
- The README test count had been stale since 1.16.0.
|
|
38
|
+
|
|
39
|
+
### Added
|
|
40
|
+
|
|
41
|
+
- `packages/core/tests/typed-errors.test.ts` fails the build on a bare
|
|
42
|
+
`new Error(` anywhere a tool call can reach (`src/cli/` is exempt, a CLI error
|
|
43
|
+
goes to a terminal) and on a raw control byte in a source file. It found six
|
|
44
|
+
of the 31 sites on its first run, in the file grep could not read.
|
|
45
|
+
|
|
46
|
+
### Upgrade note
|
|
47
|
+
|
|
48
|
+
A client that matched on `UNKNOWN_ERROR` to detect a rejected call now sees
|
|
49
|
+
`INVALID_INPUT`, `TEMPLATE_MISSING_VAR` or `ANCHOR_NOT_FOUND` there.
|
|
50
|
+
`UNKNOWN_ERROR` is left for failures nobody anticipated.
|
|
51
|
+
|
|
52
|
+
## v1.16.0 -- Creator and reporter on every task read (2026-09-18)
|
|
53
|
+
|
|
54
|
+
`@softspark/confluence-mcp` has no behaviour change in this release; it is bumped
|
|
55
|
+
together with `@softspark/jira-mcp` per ADR-0002.
|
|
56
|
+
|
|
57
|
+
### Added
|
|
58
|
+
|
|
59
|
+
- **`creator` and `reporter` in task reads.** `search_tasks`,
|
|
60
|
+
`get_task_details`, `sync_tasks` and `read_cached_tasks` now return who filed
|
|
61
|
+
an issue and who it is reported by. Until now the connector fetched `creator`
|
|
62
|
+
only for the `delete_task` ownership guard and never asked Jira for
|
|
63
|
+
`reporter`, so an agent asked "who raised this bug" had nothing to answer
|
|
64
|
+
from and went looking for a way around the server. Both fields hold the
|
|
65
|
+
email, or the display name when Atlassian privacy settings hide the email,
|
|
66
|
+
and `null` when Jira returns none. `reporter` is editable in Jira and can be
|
|
67
|
+
empty; `creator` never changes.
|
|
68
|
+
- The `search_tasks` and `get_task_details` tool descriptions name the fields a
|
|
69
|
+
result carries, so a client can tell what is available without a trial call.
|
|
70
|
+
|
|
71
|
+
### Changed
|
|
72
|
+
|
|
73
|
+
- **Task cache rows carry `creator` and `reporter`.** The schema defaults both
|
|
74
|
+
to `null`, so a cache file written by an older version still loads and
|
|
75
|
+
`CACHE_VERSION` stays `1.0`. Rows cached before the upgrade read `null` until
|
|
76
|
+
the next `sync_tasks`.
|
|
77
|
+
|
|
78
|
+
### Fixed
|
|
79
|
+
|
|
80
|
+
- `kb/reference/api.md` showed `get_task_details` answering in a plain-text
|
|
81
|
+
layout the tool never produced. The example is now the JSON it returns.
|
|
82
|
+
|
|
10
83
|
## v1.15.0 -- Tempo worklogs and reports (2026-09-17)
|
|
11
84
|
|
|
12
85
|
`@softspark/confluence-mcp` has no behaviour change in this release; it is bumped
|
package/README.md
CHANGED
|
@@ -4,17 +4,19 @@
|
|
|
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.16.1
|
|
13
13
|
|
|
14
|
-
- **
|
|
15
|
-
-
|
|
16
|
-
-
|
|
17
|
-
-
|
|
14
|
+
- **A rejected call says so.** Every argument check used to answer `UNKNOWN_ERROR`, which reads as "something broke". They now answer `INVALID_INPUT`: a missing argument, `template_id` together with `markdown`, an update with nothing to change, a time like `2d`, a malformed Tempo date or `group_by`. Nothing reaches Jira, and the message names what to pass.
|
|
15
|
+
- A template rendered without a required variable answers `TEMPLATE_MISSING_VAR`, as the API reference always said it did.
|
|
16
|
+
- If a client matched on `UNKNOWN_ERROR` to detect a bad call, match on the new codes instead. `UNKNOWN_ERROR` is left for failures nobody anticipated.
|
|
17
|
+
- **From 1.16.0: `creator` and `reporter` on every task read.** `search_tasks`, `get_task_details`, `sync_tasks` and `read_cached_tasks` now say who filed an issue and who it is reported by. Before, neither field reached a response, so "who raised this bug" had no answer.
|
|
18
|
+
- Both hold the email, or the display name when Atlassian privacy settings hide the email, and `null` when Jira returns none. To filter by them, use JQL: `creator = "pm@example.com"` or `reporter = currentUser()`.
|
|
19
|
+
- An existing task cache keeps loading. Rows cached before the upgrade read `null` for both fields until the next `sync_tasks`.
|
|
18
20
|
- Released together with `@softspark/confluence-mcp` under one version. See the [changelog](CHANGELOG.md).
|
|
19
21
|
|
|
20
22
|
## Table of Contents
|
|
@@ -207,10 +209,11 @@ Configuration is automatically loaded from `~/.softspark/jira-mcp/`. Run `jira-m
|
|
|
207
209
|
If you use `@softspark/ai-toolkit`, register the Jira rules so that Claude Code automatically follows project conventions (language checks, sync-first workflow, time format, etc.):
|
|
208
210
|
|
|
209
211
|
```bash
|
|
210
|
-
ai-toolkit
|
|
212
|
+
ai-toolkit add-rule https://raw.githubusercontent.com/softspark/jira-mcp/main/rules/jira-mcp.md
|
|
213
|
+
ai-toolkit update
|
|
211
214
|
```
|
|
212
215
|
|
|
213
|
-
|
|
216
|
+
The URL form is re-fetched on every `ai-toolkit update`, so the rules follow releases. A local path works too (`ai-toolkit add-rule /path/to/jira-mcp/rules/jira-mcp.md`) but stays frozen at that copy. The rules file covers:
|
|
214
217
|
- **Language first** -- always check project language before writing comments/descriptions
|
|
215
218
|
- **Sync before read** -- cache may be stale
|
|
216
219
|
- **Status transitions** -- check valid transitions before changing status
|
|
@@ -288,9 +291,9 @@ src/
|
|
|
288
291
|
|
|
289
292
|
**Supply chain protection** -- `ignore-scripts=true`, no axios, no dynamic requires. Self-contained 561KB library bundle, 1 runtime dep (commander).
|
|
290
293
|
|
|
291
|
-
**Typed error hierarchy** --
|
|
294
|
+
**Typed error hierarchy** -- 32 error classes with machine-readable codes. Every tool returns structured `{ success, error, code }` responses. No stack traces leak to MCP clients.
|
|
292
295
|
|
|
293
|
-
**Strict TypeScript** -- `strict: true`, no `any`, `readonly` interfaces, Zod validation at all boundaries,
|
|
296
|
+
**Strict TypeScript** -- `strict: true`, no `any`, `readonly` interfaces, Zod validation at all boundaries, 1109 tests across 86 test files.
|
|
294
297
|
|
|
295
298
|
## Documentation
|
|
296
299
|
|