@softspark/jira-mcp 1.14.4 → 1.15.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,57 @@ Versioning follows [Semantic Versioning](https://semver.org/).
7
7
 
8
8
  ---
9
9
 
10
+ ## v1.15.0 -- Tempo worklogs and reports (2026-09-17)
11
+
12
+ `@softspark/confluence-mcp` has no behaviour change in this release; it is bumped
13
+ together with `@softspark/jira-mcp` per ADR-0002 and picks up the shared HTTP
14
+ client's Bearer support without using it.
15
+
16
+ ### Added
17
+
18
+ - **Tempo worklogs and reports.** Two new tools read Tempo Timesheets through
19
+ the Tempo Cloud REST API v4: `search_tempo_worklogs` lists worklogs in a date
20
+ range with issue keys and user names resolved, and `get_tempo_report` sums
21
+ hours by project, user and/or task in the order asked. Filters combine, so
22
+ "this person's hours on this project last month" is one call. Tempo v4
23
+ answers in numeric ids only, so every result is joined against Jira
24
+ (`issue/bulkfetch` for keys and summaries, `user/bulk` for names); an issue
25
+ the token cannot browse keeps its hours under `#<id>` rather than vanishing
26
+ from a total. A query past 50 000 worklogs fails instead of truncating.
27
+ - **`jira-mcp config set-tempo-token`** stores the Tempo token next to the Jira
28
+ credential, on the default entry or per instance with `--url`. The token is
29
+ read from `--token` or `TEMPO_API_TOKEN`. An instance override never inherits
30
+ the default's Tempo token, because a Tempo token is bound to one site.
31
+ `tempo_api_url` in config.json selects a region host (`api.eu.tempo.io`,
32
+ `api.us.tempo.io`); the global host is the default.
33
+ - **Bearer auth in the shared HTTP client.** `AtlassianHttpClient` takes a
34
+ `bearer_token` config alongside the Basic pair, so Tempo rides the same retry
35
+ and backoff loop as Jira and Confluence instead of a second `fetch` loop.
36
+ - Four error classes: `TempoConnectionError`, `TempoAuthenticationError`,
37
+ `TempoPermissionError` and `TempoNotConfiguredError`. The last one is raised
38
+ before any network call when a site has no token.
39
+
40
+ ### Fixed
41
+
42
+ - `config set-credentials` no longer drops a stored Tempo token when the Jira
43
+ token in the same slot is rotated.
44
+
45
+ ## v1.14.5 -- Build and packaging documented (2026-09-10)
46
+
47
+ No code change in either package. The one thing a consumer gets that 1.14.4 did
48
+ not give them is this changelog entry, since 1.14.4 is what made `CHANGELOG.md`
49
+ reach the tarball in the first place.
50
+
51
+ ### Added
52
+
53
+ - **`kb/reference/build-and-packaging.md`**, covering the two npm behaviours that
54
+ fail without an error message here and cost a release each. `ignore-scripts` in
55
+ `.npmrc` disables every lifecycle script, not only install hooks, so a
56
+ `prebuild`, `pretest` or `prepack` in package.json looks right and never runs;
57
+ both were confirmed by adding a hook and watching nothing happen. And a `files`
58
+ pattern is matched inside the package directory, with anything matching nothing
59
+ dropped silently, which is what hid the missing changelog through six releases.
60
+
10
61
  ## v1.14.4 -- The changelog actually ships (2026-09-09)
11
62
 
12
63
  ### Fixed
package/README.md CHANGED
@@ -4,17 +4,17 @@
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.4-blue)](CHANGELOG.md)
7
+ [![version](https://img.shields.io/badge/version-1.15.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.4
12
+ ## What's New in v1.15.0
13
13
 
14
- - This package finally contains the `CHANGELOG.md` it has 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.
15
- - 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.
16
- - `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`.
17
- - 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
+ - **Tempo worklogs and reports.** `search_tempo_worklogs` lists Tempo Timesheets entries in a date range with issue keys and user names resolved; `get_tempo_report` sums hours by project, user and/or task. Filters combine, so "this person's hours on this project last month" is one call.
15
+ - Tempo REST API v4 answers in numeric ids only, so every result is joined against Jira. An issue the token cannot browse keeps its hours under `#<id>` instead of vanishing from a total.
16
+ - `jira-mcp config set-tempo-token` stores the Tempo token next to the Jira credential, per site with `--url`. Nothing else needs it: without a token the two Tempo tools answer `TEMPO_NOT_CONFIGURED` and every other tool works as before.
17
+ - Fixed: `config set-credentials` no longer drops a stored Tempo token when the Jira token is rotated.
18
18
  - Released together with `@softspark/confluence-mcp` under one version. See the [changelog](CHANGELOG.md).
19
19
 
20
20
  ## Table of Contents
@@ -63,6 +63,16 @@ jira-mcp config add-project
63
63
 
64
64
  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.
65
65
 
66
+ ### 3. Tempo (optional)
67
+
68
+ If the site runs Tempo Timesheets, create a Tempo API token (Tempo > Settings > API Integration) and store it next to the Jira credential:
69
+
70
+ ```bash
71
+ jira-mcp config set-tempo-token --token TEMPO_TOKEN
72
+ ```
73
+
74
+ 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`).
75
+
66
76
  ## CLI Commands
67
77
 
68
78
  | Command | Description |
@@ -83,6 +93,7 @@ All configuration lives in `~/.softspark/jira-mcp/` (created by `jira-mcp config
83
93
  | `jira-mcp config remove-project <key>` | Remove a project from config |
84
94
  | `jira-mcp config list-projects` | List all configured projects with language |
85
95
  | `jira-mcp config set-credentials` | Set API credentials |
96
+ | `jira-mcp config set-tempo-token` | Set the Tempo API token (default site or `--url <jira-url>`) |
86
97
  | `jira-mcp config set-default <key>` | Set default project |
87
98
  | `jira-mcp config set-language <lang>` | Set global default language |
88
99
  | `jira-mcp config set-project-language <key> <lang>` | Set language for a specific project |
@@ -113,6 +124,8 @@ All configuration lives in `~/.softspark/jira-mcp/` (created by `jira-mcp config
113
124
  | `add_templated_comment` | Add comment using a template or raw markdown | `task_key`, `template_id?`, `variables?`, `markdown?`, `user_approved` |
114
125
  | `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?` |
115
126
  | `search_tasks` | Search Jira issues with JQL (no caching) | `jql`, `max_results?`, `project_key?` |
127
+ | `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?` |
128
+ | `get_tempo_report` | Sum Tempo hours by project, user and/or task | `from`, `to`, `group_by?`, `project_key?`, `task_key?`, `user_email?` |
116
129
 
117
130
  ## Comment Templates
118
131
 
@@ -202,7 +215,7 @@ Or copy `rules/jira-mcp.md` to your ai-toolkit rules directory manually. The rul
202
215
  - **Sync before read** -- cache may be stale
203
216
  - **Status transitions** -- check valid transitions before changing status
204
217
  - **Time format** -- `"2h 30m"`, never days
205
- - **All 19 MCP tools** and **23 CLI commands** reference
218
+ - **All 21 MCP tools** and **24 CLI commands** reference
206
219
 
207
220
  ### AI Toolkit Hooks
208
221
 
@@ -245,11 +258,11 @@ src/
245
258
  create.ts Bulk task creation command
246
259
  create-monthly.ts Monthly admin task automation
247
260
  config/ Configuration loading and Zod validation
248
- connector/ Jira API client (built-in fetch, instance pool)
261
+ connector/ Jira and Tempo API clients (built-in fetch, instance pool)
249
262
  errors/ Typed error hierarchy
250
- operations/ Business logic (status, comments, time tracking)
263
+ operations/ Business logic (status, comments, time tracking, Tempo reports)
251
264
  templates/ File-backed comment/task template loading and registries
252
- tools/ MCP tool handlers (19 tools, one file per tool)
265
+ tools/ MCP tool handlers (21 tools, one file per tool)
253
266
  types/ Shared TypeScript types
254
267
  server.ts MCP server setup and tool registration
255
268
  cli.ts CLI entry point
@@ -271,11 +284,13 @@ src/
271
284
 
272
285
  **Per-instance credentials** -- different API tokens per Jira instance URL. Single-credential format still works (backward compatible). See [Configuration](kb/reference/configuration.md).
273
286
 
274
- **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).
275
290
 
276
- **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.
277
292
 
278
- **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.
279
294
 
280
295
  ## Documentation
281
296
 
@@ -283,7 +298,7 @@ src/
283
298
  |----------|-------------|
284
299
  | [Architecture](kb/reference/architecture.md) | System design and module overview |
285
300
  | [Local audit](kb/reference/audit.md) | JSON/SARIF formats, filesystem checks and hook permissions |
286
- | [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 |
287
302
  | [Configuration](kb/reference/configuration.md) | Config files, env vars, multi-instance |
288
303
  | [ADF Format](kb/reference/adf.md) | Atlassian Document Format conversion |
289
304
  | [Caching](kb/reference/caching.md) | Task, workflow, and user caching |