@softspark/jira-mcp 1.8.1 → 1.10.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,31 @@ Versioning follows [Semantic Versioning](https://semver.org/).
7
7
 
8
8
  ---
9
9
 
10
+ ## v1.10.0 -- Remaining Estimate (2026-09-01)
11
+
12
+ ### Added
13
+
14
+ - **`remaining_estimate` in `update_task`** -- writes `timetracking.remainingEstimate`.
15
+ Jira keeps the two estimates independent: setting `original_estimate` on a parent
16
+ issue leaves its remaining estimate at the old value, so a report that sums
17
+ remaining still showed the pre-edit total. Setting one field does not disturb
18
+ the other, and both can be sent in a single call. Same format and day rejection
19
+ as `original_estimate`.
20
+
21
+ ## v1.9.0 -- Sub-tasks and Estimates (2026-09-01)
22
+
23
+ ### Added
24
+
25
+ - **`parent_key` in `create_task`** -- sets the Jira `parent` field so sub-tasks can be
26
+ created at all. `epic_key` resolves the Epic Link custom field, which is a different
27
+ field, so passing it for a sub-task made Jira answer with
28
+ `Issue type is a sub-task but parent issue key or id not specified`.
29
+ - **`original_estimate` in `create_task` and `update_task`** -- writes
30
+ `timetracking.originalEstimate`. Estimates could only be set by hand in the Jira UI
31
+ before; `log_task_time` logs work already done, which is a different field.
32
+ Accepts the same `"2h"` / `"30m"` / `"2h 30m"` format as `log_task_time` and rejects
33
+ days through the same parser.
34
+
10
35
  ## v1.8.1 -- Duplicate Detection (2026-08-03)
11
36
 
12
37
  ### 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.8.1-blue)](CHANGELOG.md)
7
+ [![version](https://img.shields.io/badge/version-1.10.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.8.1
12
+ ## What's New in v1.10.0
13
13
 
14
- - **Duplicate detection actually works now.** The lookup used `summary = "..."`, and Jira answers `=` on a text field with an empty result set rather than an error -- so it always reported "not found". `update_existing` never updated anything, and re-running a bulk config duplicated every task. Now a quoted `~` phrase with an exact comparison on the result.
15
- - **`status` takes a path, not just a name.** `"status": ["On hold", "Open"]` walks the transitions in order. Jira only ever exposes the transitions out of an issue's *current* status, so a target that is not directly reachable from the initial status was previously impossible to set -- which is exactly how workflows that gate `Open` behind a `Reopen` transition behave.
16
- - **Failed transitions stop being silent.** The old code caught every transition error and moved on: issue created, status ignored, run reports `failed: 0`. It now returns a `warning` naming the status that failed and listing what was reachable instead, surfaced per task and aggregated into `create_monthly_tasks` output.
17
- - **`TaskResult.warning`** -- new `string | null` field for problems that occur after the issue is already written. `formatBulkResult` prints it under the task line.
14
+ - **`update_task` sets the remaining estimate.** `remaining_estimate` writes `timetracking.remainingEstimate`. Jira holds the two estimates apart, so lowering a parent's original estimate left remaining untouched and any report summing remaining kept showing the old total.
15
+ - **Sub-tasks can be created.** `create_task` takes `parent_key`, which sets the Jira `parent` field. `epic_key` writes the Epic Link custom field instead, so a sub-task sent with it came back as `Issue type is a sub-task but parent issue key or id not specified`.
16
+ - **Original estimate is settable.** `create_task` and `update_task` take `original_estimate` and write `timetracking.originalEstimate`. `log_task_time` records work already done, which is a separate field.
17
+ - **One time format everywhere.** Estimates go through the same parser as `log_task_time`: `"2h"`, `"30m"`, `"2h 30m"`, and days are rejected.
18
18
 
19
19
  See [CHANGELOG.md](CHANGELOG.md) for full details.
20
20
 
@@ -98,7 +98,7 @@ All configuration lives in `~/.softspark/jira-mcp/` (created by `jira-mcp config
98
98
  | `sync_tasks` | Sync tasks from Jira to local cache | `project_key?`, `jql?` |
99
99
  | `read_cached_tasks` | Read tasks from cache without hitting Jira | `task_key?` |
100
100
  | `update_task_status` | Change task status via workflow transition | `task_key`, `status` |
101
- | `update_task` | Update existing issue fields (markdown → ADF) | `task_key`, `summary?`, `description?`, `priority?`, `labels?` |
101
+ | `update_task` | Update existing issue fields (markdown → ADF) | `task_key`, `summary?`, `description?`, `priority?`, `labels?`, `original_estimate?`, `remaining_estimate?` |
102
102
  | `add_task_comment` | Add a markdown comment (auto-converted to ADF) | `task_key`, `comment`, `user_approved` |
103
103
  | `delete_task` | Delete a task, only when the authenticated user is the task creator | `task_key`, `user_approved` |
104
104
  | `delete_comment` | Delete a comment, only when the authenticated user is the comment author | `task_key`, `comment_id`, `user_approved` |
@@ -111,7 +111,7 @@ All configuration lives in `~/.softspark/jira-mcp/` (created by `jira-mcp config
111
111
  | `list_comment_templates` | List available comment templates | `category?` |
112
112
  | `list_task_templates` | List available task templates for `create_task` | — |
113
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?` |
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?`, `parent_key?`, `original_estimate?` |
115
115
  | `search_tasks` | Search Jira issues with JQL (no caching) | `jql`, `max_results?`, `project_key?` |
116
116
 
117
117
  ## Comment Templates