@softspark/jira-mcp 1.0.0 → 1.2.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,56 @@ Versioning follows [Semantic Versioning](https://semver.org/).
7
7
 
8
8
  ---
9
9
 
10
+ ## v1.2.0 -- Per-Instance Credentials & Jira API Migration (2026-04-14)
11
+
12
+ ### Added
13
+ - **Per-instance credentials** -- `set-credentials --url` flag allows different API tokens per Jira instance. Auto-migrates legacy Format A to Format B on first use.
14
+ - **Live Jira API smoke tests** -- post-release SOP now includes Phase 4 with 15 steps testing all MCP tools against the KAN sandbox project.
15
+ - **`validate_counts.py` in pre-commit SOP** -- added as Step 5 to catch README count drift before commit.
16
+
17
+ ### Changed
18
+ - **Search endpoint migrated** -- `/rest/api/3/search` → `/rest/api/3/search/jql` (Jira Cloud deprecated the old endpoint with HTTP 410).
19
+ - **`set-credentials` CLI** -- read-modify-write instead of overwrite. Preserves existing credentials when adding instance overrides.
20
+
21
+ ### Fixed
22
+ - **Jira Cloud 410 on sync/search** -- `sync_tasks` and `search_tasks` failed on instances where Jira had removed the legacy search endpoint.
23
+
24
+ ---
25
+
26
+ ## v1.1.0 -- Hardening & Market Readiness (2026-04-14)
27
+
28
+ ### Added
29
+ - **Boundary test suite** -- 96 new tests covering `server.ts` (25), `cli/index.ts` (27), and `JiraConnector` (44). Total: 509 tests across 51 files.
30
+ - **Retry/backoff for transient failures** -- `JiraConnector` retries 429 and 503 responses up to 3 times with exponential backoff (1s/2s/4s). Respects `Retry-After` header.
31
+ - **Count validation script** -- `scripts/validate_counts.py` verifies README counts match source code. Enforced in CI via `validate-counts` job.
32
+ - **Count validation in CI** -- new `validate-counts` job in `ci.yml` catches README drift before merge.
33
+ - **ADR-0001** -- documented "hardening before refactor" decision with alternatives and guardrails.
34
+ - **Hardening plan** -- full plan with success criteria and pre-mortem in `kb/planning/`.
35
+
36
+ ### Changed
37
+ - **server.ts refactored** -- 719 → 324 lines (-55%). Tool definitions extracted to `src/tools/definitions.ts`, argument helpers to `src/tools/args.ts`.
38
+ - **Major dependency upgrades** -- TypeScript 5 → 6, ESLint 9 → 10, zod 3 → 4, vitest 3 → 4, @types/node 22 → 25.
39
+ - **TypeScript 6 migration** -- added `types: ["node"]` and `ignoreDeprecations: "6.0"` to tsconfig.
40
+ - **zod 4 migration** -- `.default({})` replaced with factory function in `BulkOptionsSchema`.
41
+ - **vitest 4 migration** -- arrow function mocks replaced with regular function syntax for constructor compatibility.
42
+ - **Bundle size** -- 325KB → 520KB (due to zod 4, which is significantly larger).
43
+ - **README** -- "Zero runtime dependencies" corrected to "Minimal runtime dependencies". Test counts updated.
44
+ - **CONTRIBUTING.md** -- full CI workflow documented, `validate:counts` noted as maintainer-managed.
45
+ - **Coverage exclusions reduced** -- `server.ts` and `jira-connector.ts` removed from vitest exclusion list.
46
+
47
+ ### Security
48
+ - **Cache file permissions** -- all cache writes use `mode: 0o600` (owner-only). Prevents local privilege escalation on shared machines.
49
+ - **CWD config loading warning** -- stderr warning when `config.json` or `credentials.json` loaded from working directory instead of global config.
50
+ - **Error message truncation** -- Jira API error responses truncated to 200 characters to prevent information leakage.
51
+ - **`saveJsonFile` JSDoc** -- `@security` annotation warns against use for sensitive data.
52
+
53
+ ### Documentation
54
+ - **Hardcoded counts removed** from secondary docs (CLAUDE.md, kb/, rules/, copilot-instructions). Counts live only in README (single source of truth pattern from ai-toolkit).
55
+ - **KB docs updated** -- caching.md, architecture.md, configuration.md, troubleshooting/common-issues.md reflect security changes.
56
+ - **Release SOP updated** -- Step 4.5 (validate counts) and Step 3.2 (README "What's New" update) added.
57
+
58
+ ---
59
+
10
60
  ## v1.0.0 -- Initial Public Release (2026-04-14)
11
61
 
12
62
  ### MCP Tools (15)
@@ -27,7 +77,7 @@ Versioning follows [Semantic Versioning](https://semver.org/).
27
77
  - **`create_task`** -- create a new Jira issue with ADF description, assignee, labels, epic link
28
78
  - **`search_tasks`** -- search Jira issues with raw JQL (no caching)
29
79
 
30
- ### CLI Commands (17)
80
+ ### CLI Commands (16)
31
81
 
32
82
  - **`jira-mcp`** / **`jira-mcp serve`** -- start MCP server (stdio transport)
33
83
  - **`jira-mcp config init`** -- initialize global config at `~/.softspark/jira-mcp/`
package/README.md CHANGED
@@ -4,20 +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.0.0-blue)](CHANGELOG.md)
7
+ [![version](https://img.shields.io/badge/version-1.1.0-blue)](CHANGELOG.md)
8
8
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE)
9
9
 
10
10
  ---
11
11
 
12
- ## What's New in v1.0.0
12
+ ## What's New in v1.2.0
13
13
 
14
- - **15 MCP tools** -- `update_task` for editing issues, `get_project_language` for AI language awareness.
15
- - **Language configuration** -- global `default_language` + per-project override. Supports: pl, en, de, es, fr, pt, it, nl.
16
- - **17 CLI commands** -- `config set-default`, `config set-language`, `config set-project-language` added.
17
- - **Zero runtime dependencies** -- built-in `fetch` client (Jira REST API v3), built-in ADF parsers. Self-contained 325KB bundle.
18
- - **Per-instance credentials** -- different username/token per Jira instance URL (Format A + Format B).
19
- - **Supply chain protection** -- `ignore-scripts=true`, no axios, no dynamic requires.
20
- - **413 tests** across 47 test files with strict TypeScript.
14
+ - **Per-instance credentials** -- `set-credentials --url` allows different API tokens per Jira instance. Auto-migrates legacy format.
15
+ - **Jira Cloud API migration** -- search endpoint updated to `/rest/api/3/search/jql` (old endpoint returns 410).
16
+ - **Live Jira smoke tests** -- post-release SOP tests all 15 MCP tools against a sandbox project.
17
+ - **518 tests** across 52 test files.
21
18
 
22
19
  See [CHANGELOG.md](CHANGELOG.md) for full details.
23
20
 
@@ -163,7 +160,7 @@ Or copy `rules/jira-mcp.md` to your ai-toolkit rules directory manually. The rul
163
160
  - **Sync before read** -- cache may be stale
164
161
  - **Status transitions** -- check valid transitions before changing status
165
162
  - **Time format** -- `"2h 30m"`, never days
166
- - **All 15 MCP tools** and **17 CLI commands** reference
163
+ - **All 15 MCP tools** and **16 CLI commands** reference
167
164
 
168
165
  ## Usage with Other MCP Clients
169
166
 
@@ -219,11 +216,11 @@ src/
219
216
 
220
217
  **Per-instance credentials** -- different API tokens per Jira instance URL. Single-credential format still works (backward compatible). See [Configuration](kb/reference/configuration.md).
221
218
 
222
- **Supply chain protection** -- `ignore-scripts=true`, no axios, no dynamic requires. Self-contained 325KB bundle, 1 runtime dep (commander).
219
+ **Supply chain protection** -- `ignore-scripts=true`, no axios, no dynamic requires. Self-contained 520KB bundle, 1 runtime dep (commander).
223
220
 
224
221
  **Typed error hierarchy** -- 15 error classes with machine-readable codes. Every tool returns structured `{ success, error, code }` responses. No stack traces leak to MCP clients.
225
222
 
226
- **Strict TypeScript** -- `strict: true`, no `any`, `readonly` interfaces, Zod validation at all boundaries, 413 tests across 47 test files. Self-contained 325KB package.
223
+ **Strict TypeScript** -- `strict: true`, no `any`, `readonly` interfaces, Zod validation at all boundaries, 518 tests across 52 test files. Self-contained 520KB package.
227
224
 
228
225
  ## Documentation
229
226