@softspark/jira-mcp 1.14.5 → 1.16.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 CHANGED
@@ -7,6 +7,72 @@ Versioning follows [Semantic Versioning](https://semver.org/).
7
7
 
8
8
  ---
9
9
 
10
+ ## v1.16.0 -- Creator and reporter on every task read (2026-09-18)
11
+
12
+ `@softspark/confluence-mcp` has no behaviour change in this release; it is bumped
13
+ together with `@softspark/jira-mcp` per ADR-0002.
14
+
15
+ ### Added
16
+
17
+ - **`creator` and `reporter` in task reads.** `search_tasks`,
18
+ `get_task_details`, `sync_tasks` and `read_cached_tasks` now return who filed
19
+ an issue and who it is reported by. Until now the connector fetched `creator`
20
+ only for the `delete_task` ownership guard and never asked Jira for
21
+ `reporter`, so an agent asked "who raised this bug" had nothing to answer
22
+ from and went looking for a way around the server. Both fields hold the
23
+ email, or the display name when Atlassian privacy settings hide the email,
24
+ and `null` when Jira returns none. `reporter` is editable in Jira and can be
25
+ empty; `creator` never changes.
26
+ - The `search_tasks` and `get_task_details` tool descriptions name the fields a
27
+ result carries, so a client can tell what is available without a trial call.
28
+
29
+ ### Changed
30
+
31
+ - **Task cache rows carry `creator` and `reporter`.** The schema defaults both
32
+ to `null`, so a cache file written by an older version still loads and
33
+ `CACHE_VERSION` stays `1.0`. Rows cached before the upgrade read `null` until
34
+ the next `sync_tasks`.
35
+
36
+ ### Fixed
37
+
38
+ - `kb/reference/api.md` showed `get_task_details` answering in a plain-text
39
+ layout the tool never produced. The example is now the JSON it returns.
40
+
41
+ ## v1.15.0 -- Tempo worklogs and reports (2026-09-17)
42
+
43
+ `@softspark/confluence-mcp` has no behaviour change in this release; it is bumped
44
+ together with `@softspark/jira-mcp` per ADR-0002 and picks up the shared HTTP
45
+ client's Bearer support without using it.
46
+
47
+ ### Added
48
+
49
+ - **Tempo worklogs and reports.** Two new tools read Tempo Timesheets through
50
+ the Tempo Cloud REST API v4: `search_tempo_worklogs` lists worklogs in a date
51
+ range with issue keys and user names resolved, and `get_tempo_report` sums
52
+ hours by project, user and/or task in the order asked. Filters combine, so
53
+ "this person's hours on this project last month" is one call. Tempo v4
54
+ answers in numeric ids only, so every result is joined against Jira
55
+ (`issue/bulkfetch` for keys and summaries, `user/bulk` for names); an issue
56
+ the token cannot browse keeps its hours under `#<id>` rather than vanishing
57
+ from a total. A query past 50 000 worklogs fails instead of truncating.
58
+ - **`jira-mcp config set-tempo-token`** stores the Tempo token next to the Jira
59
+ credential, on the default entry or per instance with `--url`. The token is
60
+ read from `--token` or `TEMPO_API_TOKEN`. An instance override never inherits
61
+ the default's Tempo token, because a Tempo token is bound to one site.
62
+ `tempo_api_url` in config.json selects a region host (`api.eu.tempo.io`,
63
+ `api.us.tempo.io`); the global host is the default.
64
+ - **Bearer auth in the shared HTTP client.** `AtlassianHttpClient` takes a
65
+ `bearer_token` config alongside the Basic pair, so Tempo rides the same retry
66
+ and backoff loop as Jira and Confluence instead of a second `fetch` loop.
67
+ - Four error classes: `TempoConnectionError`, `TempoAuthenticationError`,
68
+ `TempoPermissionError` and `TempoNotConfiguredError`. The last one is raised
69
+ before any network call when a site has no token.
70
+
71
+ ### Fixed
72
+
73
+ - `config set-credentials` no longer drops a stored Tempo token when the Jira
74
+ token in the same slot is rotated.
75
+
10
76
  ## v1.14.5 -- Build and packaging documented (2026-09-10)
11
77
 
12
78
  No code change in either package. The one thing a consumer gets that 1.14.4 did
package/README.md CHANGED
@@ -4,18 +4,16 @@
4
4
 
5
5
  [![CI](https://github.com/softspark/jira-mcp/actions/workflows/ci.yml/badge.svg)](https://github.com/softspark/jira-mcp/actions/workflows/ci.yml)
6
6
  [![npm](https://img.shields.io/npm/v/@softspark/jira-mcp)](https://www.npmjs.com/package/@softspark/jira-mcp)
7
- [![version](https://img.shields.io/badge/version-1.14.5-blue)](CHANGELOG.md)
7
+ [![version](https://img.shields.io/badge/version-1.16.0-blue)](CHANGELOG.md)
8
8
  [![License: Apache 2.0](https://img.shields.io/badge/License-Apache_2.0-blue.svg)](LICENSE)
9
9
 
10
10
  ---
11
11
 
12
- ## What's New in v1.14.5
12
+ ## What's New in v1.16.0
13
13
 
14
- - No code change since 1.14.4; this release carries documentation of how the workspace builds and packages.
15
- - 1.14.4 is where this package started actually containing the `CHANGELOG.md` it had been listing in `files` since 1.12.0. The pattern resolved inside the package directory while the changelog sat at the repository root, so npm dropped it without a word.
16
- - Polish versions of all eight built-in comment templates ship with the package. Until now a templated comment was English on every project, including one configured for another language.
17
- - `jira-mcp template list-locales` shows which languages are available, and `jira-mcp template install-locale pl` installs them. Add `--keep-english` to keep the originals reachable as `<id>-en`.
18
- - Fixed in 1.14.1: `jira-mcp --help` now lists both new commands. 1.14.2 adds the test that would have caught it, on both binaries.
14
+ - **`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.
15
+ - 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()`.
16
+ - An existing task cache keeps loading. Rows cached before the upgrade read `null` for both fields until the next `sync_tasks`.
19
17
  - Released together with `@softspark/confluence-mcp` under one version. See the [changelog](CHANGELOG.md).
20
18
 
21
19
  ## Table of Contents
@@ -64,6 +62,16 @@ jira-mcp config add-project
64
62
 
65
63
  All configuration lives in `~/.softspark/jira-mcp/` (created by `jira-mcp config init`). This is the standard config directory for all SoftSpark open-source tools.
66
64
 
65
+ ### 3. Tempo (optional)
66
+
67
+ If the site runs Tempo Timesheets, create a Tempo API token (Tempo > Settings > API Integration) and store it next to the Jira credential:
68
+
69
+ ```bash
70
+ jira-mcp config set-tempo-token --token TEMPO_TOKEN
71
+ ```
72
+
73
+ That unlocks `search_tempo_worklogs` and `get_tempo_report`. Without it every other tool works as before. Sites pinned to a Tempo region set `tempo_api_url` in `config.json` (`https://api.eu.tempo.io/4` or `https://api.us.tempo.io/4`).
74
+
67
75
  ## CLI Commands
68
76
 
69
77
  | Command | Description |
@@ -84,6 +92,7 @@ All configuration lives in `~/.softspark/jira-mcp/` (created by `jira-mcp config
84
92
  | `jira-mcp config remove-project <key>` | Remove a project from config |
85
93
  | `jira-mcp config list-projects` | List all configured projects with language |
86
94
  | `jira-mcp config set-credentials` | Set API credentials |
95
+ | `jira-mcp config set-tempo-token` | Set the Tempo API token (default site or `--url <jira-url>`) |
87
96
  | `jira-mcp config set-default <key>` | Set default project |
88
97
  | `jira-mcp config set-language <lang>` | Set global default language |
89
98
  | `jira-mcp config set-project-language <key> <lang>` | Set language for a specific project |
@@ -114,6 +123,8 @@ All configuration lives in `~/.softspark/jira-mcp/` (created by `jira-mcp config
114
123
  | `add_templated_comment` | Add comment using a template or raw markdown | `task_key`, `template_id?`, `variables?`, `markdown?`, `user_approved` |
115
124
  | `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?`, `parent_key?`, `original_estimate?` |
116
125
  | `search_tasks` | Search Jira issues with JQL (no caching) | `jql`, `max_results?`, `project_key?` |
126
+ | `search_tempo_worklogs` | List Tempo worklogs in a date range, issue keys and user names resolved | `from`, `to`, `project_key?`, `task_key?`, `user_email?`, `limit?` |
127
+ | `get_tempo_report` | Sum Tempo hours by project, user and/or task | `from`, `to`, `group_by?`, `project_key?`, `task_key?`, `user_email?` |
117
128
 
118
129
  ## Comment Templates
119
130
 
@@ -195,15 +206,16 @@ Configuration is automatically loaded from `~/.softspark/jira-mcp/`. Run `jira-m
195
206
  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.):
196
207
 
197
208
  ```bash
198
- ai-toolkit rules add jira-mcp --path /path/to/jira-mcp/rules/jira-mcp.md
209
+ ai-toolkit add-rule https://raw.githubusercontent.com/softspark/jira-mcp/main/rules/jira-mcp.md
210
+ ai-toolkit update
199
211
  ```
200
212
 
201
- Or copy `rules/jira-mcp.md` to your ai-toolkit rules directory manually. The rules file covers:
213
+ 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:
202
214
  - **Language first** -- always check project language before writing comments/descriptions
203
215
  - **Sync before read** -- cache may be stale
204
216
  - **Status transitions** -- check valid transitions before changing status
205
217
  - **Time format** -- `"2h 30m"`, never days
206
- - **All 19 MCP tools** and **23 CLI commands** reference
218
+ - **All 21 MCP tools** and **24 CLI commands** reference
207
219
 
208
220
  ### AI Toolkit Hooks
209
221
 
@@ -246,11 +258,11 @@ src/
246
258
  create.ts Bulk task creation command
247
259
  create-monthly.ts Monthly admin task automation
248
260
  config/ Configuration loading and Zod validation
249
- connector/ Jira API client (built-in fetch, instance pool)
261
+ connector/ Jira and Tempo API clients (built-in fetch, instance pool)
250
262
  errors/ Typed error hierarchy
251
- operations/ Business logic (status, comments, time tracking)
263
+ operations/ Business logic (status, comments, time tracking, Tempo reports)
252
264
  templates/ File-backed comment/task template loading and registries
253
- tools/ MCP tool handlers (19 tools, one file per tool)
265
+ tools/ MCP tool handlers (21 tools, one file per tool)
254
266
  types/ Shared TypeScript types
255
267
  server.ts MCP server setup and tool registration
256
268
  cli.ts CLI entry point
@@ -272,11 +284,13 @@ src/
272
284
 
273
285
  **Per-instance credentials** -- different API tokens per Jira instance URL. Single-credential format still works (backward compatible). See [Configuration](kb/reference/configuration.md).
274
286
 
275
- **Supply chain protection** -- `ignore-scripts=true`, no axios, no dynamic requires. Self-contained 548KB library bundle, 1 runtime dep (commander).
287
+ **Tempo worklogs and reports** -- `search_tempo_worklogs` and `get_tempo_report` read Tempo Timesheets (Cloud REST API v4) for hours per project, user or task over a date range, with Tempo's numeric ids resolved to issue keys and names through Jira. Needs a Tempo API token (`jira-mcp config set-tempo-token`); nothing else depends on it. See [API Reference](kb/reference/api.md).
288
+
289
+ **Supply chain protection** -- `ignore-scripts=true`, no axios, no dynamic requires. Self-contained 561KB library bundle, 1 runtime dep (commander).
276
290
 
277
- **Typed error hierarchy** -- 26 error classes with machine-readable codes. Every tool returns structured `{ success, error, code }` responses. No stack traces leak to MCP clients.
291
+ **Typed error hierarchy** -- 30 error classes with machine-readable codes. Every tool returns structured `{ success, error, code }` responses. No stack traces leak to MCP clients.
278
292
 
279
- **Strict TypeScript** -- `strict: true`, no `any`, `readonly` interfaces, Zod validation at all boundaries, 991 tests across 80 test files.
293
+ **Strict TypeScript** -- `strict: true`, no `any`, `readonly` interfaces, Zod validation at all boundaries, 1093 tests across 85 test files.
280
294
 
281
295
  ## Documentation
282
296
 
@@ -284,7 +298,7 @@ src/
284
298
  |----------|-------------|
285
299
  | [Architecture](kb/reference/architecture.md) | System design and module overview |
286
300
  | [Local audit](kb/reference/audit.md) | JSON/SARIF formats, filesystem checks and hook permissions |
287
- | [API Reference](kb/reference/api.md) | All 19 MCP tools with schemas |
301
+ | [API Reference](kb/reference/api.md) | All 21 MCP tools with schemas |
288
302
  | [Configuration](kb/reference/configuration.md) | Config files, env vars, multi-instance |
289
303
  | [ADF Format](kb/reference/adf.md) | Atlassian Document Format conversion |
290
304
  | [Caching](kb/reference/caching.md) | Task, workflow, and user caching |