@thammarongg/jira-mcp 0.5.0 → 0.5.2

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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Thammarong G.
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # jira-mcp
2
2
 
3
+ [![npm version](https://img.shields.io/npm/v/@thammarongg/jira-mcp.svg)](https://www.npmjs.com/package/@thammarongg/jira-mcp)
4
+ [![license: MIT](https://img.shields.io/badge/license-MIT-blue.svg)](LICENSE)
5
+ [![node](https://img.shields.io/node/v/@thammarongg/jira-mcp.svg)](https://nodejs.org)
6
+
3
7
  An [MCP](https://modelcontextprotocol.io) (Model Context Protocol) server that exposes the Jira REST API to AI assistants — boards, sprints, epics, issues, JQL search, workflow transitions, comments, worklogs, projects, users, plus a generic passthrough tool for **any** Jira REST endpoint.
4
8
 
5
9
  Works with both **Jira Cloud** (REST API v3) and **Jira Data Center** (REST API v2), auto-detected from the base URL.
@@ -11,7 +15,7 @@ Once published to npm, any MCP client can run it via `npx` — no local build ne
11
15
  ### Interactive installer (all agents at once)
12
16
 
13
17
  ```bash
14
- npx -y @thammarongg/jira-mcp install
18
+ npx -y @thammarongg/jira-mcp@latest install
15
19
  ```
16
20
 
17
21
  Shows a menu — Select All or pick agents (Claude Code, OpenCode, Codex, Cursor,
@@ -29,12 +33,12 @@ Non-interactive (CI / scripting):
29
33
 
30
34
  ```bash
31
35
  # Jira Cloud
32
- npx -y @thammarongg/jira-mcp install --agents all \
36
+ npx -y @thammarongg/jira-mcp@latest install --agents all \
33
37
  --base-url https://your-org.atlassian.net \
34
38
  --email you@example.com --token xxx --yes
35
39
 
36
40
  # Jira Data Center (subset of agents)
37
- npx -y @thammarongg/jira-mcp install --agents claude-code,codex \
41
+ npx -y @thammarongg/jira-mcp@latest install --agents claude-code,codex \
38
42
  --base-url https://jira.yourcompany.com \
39
43
  --username you --token xxx --yes
40
44
  ```
@@ -47,12 +51,12 @@ Flags: `--agents all` or comma-separated ids/numbers (`claude-code`,
47
51
  ### CLI commands
48
52
 
49
53
  ```bash
50
- npx -y @thammarongg/jira-mcp update # refresh configured agents
51
- npx -y @thammarongg/jira-mcp update --agents codex
52
- npx -y @thammarongg/jira-mcp uninstall # choose configured agents interactively
53
- npx -y @thammarongg/jira-mcp uninstall --agents all --yes
54
- npx -y @thammarongg/jira-mcp --version
55
- npx -y @thammarongg/jira-mcp --help
54
+ npx -y @thammarongg/jira-mcp@latest update # refresh configured agents
55
+ npx -y @thammarongg/jira-mcp@latest update --agents codex
56
+ npx -y @thammarongg/jira-mcp@latest uninstall # choose configured agents interactively
57
+ npx -y @thammarongg/jira-mcp@latest uninstall --agents all --yes
58
+ npx -y @thammarongg/jira-mcp@latest --version
59
+ npx -y @thammarongg/jira-mcp@latest --help
56
60
  ```
57
61
 
58
62
  `update` is non-interactive and repairs every existing `jira` entry from that
@@ -61,7 +65,7 @@ removes only the `jira` entry, preserving the rest of each agent configuration;
61
65
  it accepts the same `--agents` selection grammar as `install` and asks for
62
66
  confirmation unless `--yes` is supplied.
63
67
 
64
- Running `npx -y @thammarongg/jira-mcp` bare in a terminal prints a status card
68
+ Running `npx -y @thammarongg/jira-mcp@latest` bare in a terminal prints a status card
65
69
  with the installed version, configured agents, and available commands. MCP
66
70
  clients pipe stdio, so the same bare command starts the MCP server for them;
67
71
  it expects `JIRA_*` environment variables, which is why running it bare
@@ -72,7 +76,7 @@ without those variables reports a missing `JIRA_BASE_URL`.
72
76
  ```bash
73
77
  claude mcp add jira --env JIRA_BASE_URL=https://your-org.atlassian.net \
74
78
  --env JIRA_EMAIL=you@example.com --env JIRA_API_TOKEN=xxx \
75
- -- npx -y @thammarongg/jira-mcp
79
+ -- npx -y @thammarongg/jira-mcp@latest
76
80
  ```
77
81
 
78
82
  ```json
@@ -81,7 +85,7 @@ claude mcp add jira --env JIRA_BASE_URL=https://your-org.atlassian.net \
81
85
  "mcpServers": {
82
86
  "jira": {
83
87
  "command": "npx",
84
- "args": ["-y", "@thammarongg/jira-mcp"],
88
+ "args": ["-y", "@thammarongg/jira-mcp@latest"],
85
89
  "env": {
86
90
  "JIRA_BASE_URL": "https://your-org.atlassian.net",
87
91
  "JIRA_EMAIL": "you@example.com",
@@ -98,7 +102,7 @@ claude mcp add jira --env JIRA_BASE_URL=https://your-org.atlassian.net \
98
102
  "mcp": {
99
103
  "jira": {
100
104
  "type": "local",
101
- "command": ["npx", "-y", "@thammarongg/jira-mcp"],
105
+ "command": ["npx", "-y", "@thammarongg/jira-mcp@latest"],
102
106
  "environment": {
103
107
  "JIRA_BASE_URL": "https://your-org.atlassian.net",
104
108
  "JIRA_EMAIL": "you@example.com",
@@ -284,3 +288,7 @@ node scripts/smoke.mjs # stdio handshake + tools/list smoke test
284
288
  - Epics: the Agile epic API (`/rest/agile/1.0/epic/...`) only understands company-managed epics and returns HTTP 400 on team-managed ("next-gen") projects. `get_epic`, `get_epic_issues`, and `move_issue_to_epic` detect that and fall back to the issue/search APIs, where an epic is an ordinary issue linked to its children by `parent`.
285
289
  - Jira Data Center exposes platform REST API v2/latest, not `/rest/api/3`. Leave `JIRA_API_VERSION` at its default (`2`) for DC; forcing `3` against a DC host is unsupported and causes the server to request unavailable `/rest/api/3/...` routes. Cloud-vs-DC endpoint routing is based on the detected deployment (`*.atlassian.net` is Cloud), while field representations are based on the selected API version.
286
290
  - `jira_api` paths must resolve under `/rest/` — paths that would escape it (e.g. via `..` segments) are rejected, and `?`/`#` must be passed via `query`.
291
+
292
+ ## License
293
+
294
+ [MIT](LICENSE) © Thammarong G.
package/dist/agents.js CHANGED
@@ -22,6 +22,11 @@ export function readPackageVersion() {
22
22
  return typeof version === "string" && version.length > 0 ? version : "0.0.0";
23
23
  }
24
24
  export const PKG = readPackageName();
25
+ // An unversioned npx package spec resolves the current project when the MCP
26
+ // client starts in this repository, but this package's own bin is not linked
27
+ // into node_modules/.bin. The explicit dist-tag forces npx to resolve the
28
+ // published package in every working directory.
29
+ export const PKG_SPEC = `${PKG}@latest`;
25
30
  export const PACKAGE_VERSION = readPackageVersion();
26
31
  export const claudeDesktopPath = platform() === "darwin"
27
32
  ? join(homedir(), "Library", "Application Support", "Claude", "claude_desktop_config.json")
@@ -296,7 +301,7 @@ function upsertCodex(path, env) {
296
301
  const block = [
297
302
  "[mcp_servers.jira]",
298
303
  'command = "npx"',
299
- `args = ["-y", ${tomlStr(PKG)}]`,
304
+ `args = ["-y", ${tomlStr(PKG_SPEC)}]`,
300
305
  `env = { ${Object.entries(env)
301
306
  .map(([key, value]) => `${key} = ${tomlStr(value)}`)
302
307
  .join(", ")} }`,
@@ -358,7 +363,7 @@ export function writeAgentConfig(agent, env) {
358
363
  reportEnvChanges(envOf(mcp.jira), env, agent.path);
359
364
  mcp.jira = {
360
365
  type: "local",
361
- command: ["npx", "-y", PKG],
366
+ command: ["npx", "-y", PKG_SPEC],
362
367
  environment: env,
363
368
  enabled: true,
364
369
  };
@@ -367,7 +372,7 @@ export function writeAgentConfig(agent, env) {
367
372
  return mergeJsonFile(agent.path, (object) => {
368
373
  const mcpServers = (object.mcpServers ??= {});
369
374
  reportEnvChanges(envOf(mcpServers.jira), env, agent.path);
370
- mcpServers.jira = { command: "npx", args: ["-y", PKG], env };
375
+ mcpServers.jira = { command: "npx", args: ["-y", PKG_SPEC], env };
371
376
  });
372
377
  }
373
378
  function removeJsonEntry(agent) {
package/dist/install.js CHANGED
@@ -1,4 +1,4 @@
1
- import { AGENTS, PKG, readAgentEnv, resolveAgents, writeAgentConfig } from "./agents.js";
1
+ import { AGENTS, PKG_SPEC, readAgentEnv, resolveAgents, writeAgentConfig } from "./agents.js";
2
2
  import { askPassword, makePrompter } from "./prompt.js";
3
3
  function parseFlags(argv) {
4
4
  const flags = {};
@@ -69,8 +69,8 @@ function printUsage() {
69
69
  console.log(`jira-mcp install — configure the jira MCP server in your agent(s)
70
70
 
71
71
  Usage:
72
- npx -y ${PKG} install
73
- npx -y ${PKG} install --agents all --base-url https://x.atlassian.net --email you@x.com --token xxx --yes
72
+ npx -y ${PKG_SPEC} install
73
+ npx -y ${PKG_SPEC} install --agents all --base-url https://x.atlassian.net --email you@x.com --token xxx --yes
74
74
 
75
75
  Options:
76
76
  --agents <list> Comma-separated agent ids or 'all': ${AGENTS.map((a) => a.id).join(", ")}
package/dist/uninstall.js CHANGED
@@ -1,4 +1,4 @@
1
- import { AGENTS, hasAgentEntry, removeAgentConfig, resolveAgents } from "./agents.js";
1
+ import { AGENTS, PKG_SPEC, hasAgentEntry, removeAgentConfig, resolveAgents } from "./agents.js";
2
2
  import { makePrompter } from "./prompt.js";
3
3
  function parseFlags(argv) {
4
4
  const flags = {};
@@ -26,8 +26,8 @@ function printUsage() {
26
26
  console.log(`jira-mcp uninstall — remove jira MCP entries
27
27
 
28
28
  Usage:
29
- npx -y @thammarongg/jira-mcp uninstall
30
- npx -y @thammarongg/jira-mcp uninstall --agents all --yes
29
+ npx -y ${PKG_SPEC} uninstall
30
+ npx -y ${PKG_SPEC} uninstall --agents all --yes
31
31
 
32
32
  Options:
33
33
  --agents <list> Comma-separated agent ids or 'all'
package/dist/update.js CHANGED
@@ -1,4 +1,4 @@
1
- import { AGENTS, hasAgentEntry, readAgentEnv, resolveAgents, writeAgentConfig } from "./agents.js";
1
+ import { AGENTS, PKG_SPEC, hasAgentEntry, readAgentEnv, resolveAgents, writeAgentConfig } from "./agents.js";
2
2
  function parseFlags(argv) {
3
3
  const flags = {};
4
4
  for (let i = 0; i < argv.length; i++) {
@@ -25,7 +25,7 @@ function printUsage() {
25
25
  console.log(`jira-mcp update — refresh existing jira MCP entries
26
26
 
27
27
  Usage:
28
- npx -y @thammarongg/jira-mcp update [--agents <list>]
28
+ npx -y ${PKG_SPEC} update [--agents <list>]
29
29
 
30
30
  Options:
31
31
  --agents <list> Comma-separated agent ids or 'all'
package/package.json CHANGED
@@ -1,7 +1,16 @@
1
1
  {
2
2
  "name": "@thammarongg/jira-mcp",
3
- "version": "0.5.0",
3
+ "version": "0.5.2",
4
4
  "description": "MCP server exposing the Jira REST API (boards, sprints, issues, JQL, and a generic passthrough) for Jira Cloud and Data Center",
5
+ "homepage": "https://github.com/thammarongg/jira-mcp#readme",
6
+ "repository": {
7
+ "type": "git",
8
+ "url": "git+https://github.com/thammarongg/jira-mcp.git"
9
+ },
10
+ "bugs": {
11
+ "url": "https://github.com/thammarongg/jira-mcp/issues"
12
+ },
13
+ "author": "Thammarong G. <thammrong@gmail.com>",
5
14
  "type": "module",
6
15
  "bin": {
7
16
  "jira-mcp": "dist/index.js"
package/skill/SKILL.md CHANGED
@@ -19,10 +19,10 @@ Code, OpenCode, Codex, Cursor, Claude Desktop, Gemini CLI; backs up existing
19
19
  files to `.bak`):
20
20
 
21
21
  ```bash
22
- npx -y @thammarongg/jira-mcp install
22
+ npx -y @thammarongg/jira-mcp@latest install
23
23
  ```
24
24
 
25
- Or non-interactive: `npx -y @thammarongg/jira-mcp install --agents all
25
+ Or non-interactive: `npx -y @thammarongg/jira-mcp@latest install --agents all
26
26
  --base-url https://your-org.atlassian.net --email you@example.com --token xxx
27
27
  --yes`. Required env vars:
28
28
 
@@ -40,12 +40,12 @@ reuses those credentials without prompting.
40
40
  The CLI also supports these maintenance commands:
41
41
 
42
42
  ```bash
43
- npx -y @thammarongg/jira-mcp update # refresh configured entries
44
- npx -y @thammarongg/jira-mcp update --agents codex
45
- npx -y @thammarongg/jira-mcp uninstall # choose entries to remove
46
- npx -y @thammarongg/jira-mcp uninstall --agents all --yes
47
- npx -y @thammarongg/jira-mcp --version
48
- npx -y @thammarongg/jira-mcp --help
43
+ npx -y @thammarongg/jira-mcp@latest update # refresh configured entries
44
+ npx -y @thammarongg/jira-mcp@latest update --agents codex
45
+ npx -y @thammarongg/jira-mcp@latest uninstall # choose entries to remove
46
+ npx -y @thammarongg/jira-mcp@latest uninstall --agents all --yes
47
+ npx -y @thammarongg/jira-mcp@latest --version
48
+ npx -y @thammarongg/jira-mcp@latest --help
49
49
  ```
50
50
 
51
51
  `update` is non-interactive and skips agents without a `jira` entry.
@@ -61,7 +61,7 @@ Claude Code one-liner:
61
61
  ```bash
62
62
  claude mcp add jira --env JIRA_BASE_URL=https://your-org.atlassian.net \
63
63
  --env JIRA_EMAIL=you@example.com --env JIRA_API_TOKEN=xxx \
64
- -- npx -y @thammarongg/jira-mcp
64
+ -- npx -y @thammarongg/jira-mcp@latest
65
65
  ```
66
66
 
67
67
  opencode (`opencode.json`):
@@ -71,7 +71,7 @@ opencode (`opencode.json`):
71
71
  "mcp": {
72
72
  "jira": {
73
73
  "type": "local",
74
- "command": ["npx", "-y", "@thammarongg/jira-mcp"],
74
+ "command": ["npx", "-y", "@thammarongg/jira-mcp@latest"],
75
75
  "environment": {
76
76
  "JIRA_BASE_URL": "https://your-org.atlassian.net",
77
77
  "JIRA_EMAIL": "you@example.com",