@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 +21 -0
- package/README.md +21 -13
- package/dist/agents.js +8 -3
- package/dist/install.js +3 -3
- package/dist/uninstall.js +3 -3
- package/dist/update.js +2 -2
- package/package.json +10 -1
- package/skill/SKILL.md +10 -10
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
|
+
[](https://www.npmjs.com/package/@thammarongg/jira-mcp)
|
|
4
|
+
[](LICENSE)
|
|
5
|
+
[](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(
|
|
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",
|
|
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",
|
|
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,
|
|
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 ${
|
|
73
|
-
npx -y ${
|
|
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
|
|
30
|
-
npx -y
|
|
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
|
|
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.
|
|
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",
|