@stubbedev/atlassian-mcp 0.5.11 → 0.5.12
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/README.md +186 -24
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -156,12 +156,23 @@ BITBUCKET_URL=https://bitbucket.example.com
|
|
|
156
156
|
BITBUCKET_ACCESS_TOKEN=your-bitbucket-personal-access-token
|
|
157
157
|
```
|
|
158
158
|
|
|
159
|
-
Config is resolved in this order: `--config <path>` CLI arg → `ATLASSIAN_MCP_CONFIG` env var → `~/.atlassian-mcp.json` → `$XDG_CONFIG_HOME/atlassian-mcp/config.json` (default `~/.config/atlassian-mcp/config.json`) → `.atlassian-mcp.json` in cwd → environment variables.
|
|
159
|
+
Config is resolved in this order: `--config <path>` CLI arg → `ATLASSIAN_MCP_CONFIG` env var → `~/.atlassian-mcp.json` → `$XDG_CONFIG_HOME/atlassian-mcp/config.json` (default `~/.config/atlassian-mcp/config.json`) → `.atlassian-mcp.json` in cwd → environment variables. A leading `~` in the first two is expanded by the server, so a client that spawns it without a shell still resolves the path. Within a file, per-field: a value in the config file wins, environment variables fill the gaps.
|
|
160
160
|
|
|
161
161
|
### 2. Connect to your AI tool
|
|
162
162
|
|
|
163
163
|
No cloning or building required — just point your tool at `npx @stubbedev/atlassian-mcp@latest` and it will install and run automatically.
|
|
164
164
|
|
|
165
|
+
CLI-driven clients need one line:
|
|
166
|
+
|
|
167
|
+
```bash
|
|
168
|
+
claude mcp add atlassian -- npx -y @stubbedev/atlassian-mcp@latest # Claude Code
|
|
169
|
+
codex mcp add atlassian -- npx -y @stubbedev/atlassian-mcp@latest # Codex CLI / IDE / app
|
|
170
|
+
code --add-mcp '{"name":"atlassian","command":"npx","args":["-y","@stubbedev/atlassian-mcp@latest"]}' # VS Code
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
Desktop apps: **Claude Desktop** installs a one-click [`.mcpb` bundle](#claude-desktop) —
|
|
174
|
+
no Node, no JSON. Everything else takes a config file; see below.
|
|
175
|
+
|
|
165
176
|
> Note: `--prefer-online` can break MCP startup in some clients. Keep the command simple and use the update steps below when you want to refresh.
|
|
166
177
|
|
|
167
178
|
---
|
|
@@ -174,6 +185,66 @@ claude mcp add atlassian -- npx -y @stubbedev/atlassian-mcp@latest --config ~/.a
|
|
|
174
185
|
|
|
175
186
|
---
|
|
176
187
|
|
|
188
|
+
#### Claude Desktop
|
|
189
|
+
|
|
190
|
+
**One-click (recommended).** Grab the `.mcpb` bundle for your platform from the
|
|
191
|
+
[latest release](https://github.com/stubbedev/atlassian-mcp/releases/latest) —
|
|
192
|
+
`atlassian-mcp_darwin_arm64.mcpb` (Apple Silicon), `atlassian-mcp_darwin_amd64.mcpb`
|
|
193
|
+
(Intel Mac), `atlassian-mcp_windows_amd64.mcpb` — then **double-click it**, drag it onto the
|
|
194
|
+
Claude Desktop window, or use **Settings → Extensions → Advanced settings → Install
|
|
195
|
+
Extension…**. The install dialog asks for Jira/Bitbucket URL and token (tokens are stored
|
|
196
|
+
by Claude Desktop, not in a file) plus **Repository**, the working tree the git and PR tools
|
|
197
|
+
default to. Leaving URL/token blank reuses an existing `~/.atlassian-mcp.json`.
|
|
198
|
+
|
|
199
|
+
The bundle carries the binary, so there is no Node, no `npx`, no `PATH` to fix and no JSON
|
|
200
|
+
to edit. [MCP Bundles](https://github.com/modelcontextprotocol/mcpb) are a Claude Desktop
|
|
201
|
+
feature today; other clients use the config files below.
|
|
202
|
+
|
|
203
|
+
**Manual config.** Claude Desktop is a GUI app: it launches the server with a minimal
|
|
204
|
+
`PATH`, no shell, and `/` as the working directory. So `command` must be an **absolute
|
|
205
|
+
path** (a bare `npx` fails with `spawn npx ENOENT`), a `.env` file or relative
|
|
206
|
+
`--config` path never resolves, and nothing expands `~` for you — the server expands a
|
|
207
|
+
leading `~` in `--config` / `ATLASSIAN_MCP_CONFIG` itself, but a client that inserts `~`
|
|
208
|
+
anywhere else will not. Config file:
|
|
209
|
+
|
|
210
|
+
- macOS: `~/Library/Application Support/Claude/claude_desktop_config.json`
|
|
211
|
+
- Windows: `%APPDATA%\Claude\claude_desktop_config.json`
|
|
212
|
+
|
|
213
|
+
```json
|
|
214
|
+
{
|
|
215
|
+
"mcpServers": {
|
|
216
|
+
"atlassian": {
|
|
217
|
+
"command": "/absolute/path/to/atlassian-mcp",
|
|
218
|
+
"env": {
|
|
219
|
+
"JIRA_URL": "https://jira.example.com",
|
|
220
|
+
"JIRA_ACCESS_TOKEN": "your-jira-personal-access-token",
|
|
221
|
+
"BITBUCKET_URL": "https://bitbucket.example.com",
|
|
222
|
+
"BITBUCKET_ACCESS_TOKEN": "your-bitbucket-personal-access-token",
|
|
223
|
+
"ATLASSIAN_MCP_REPO_ROOT": "/Users/you/code/my-repo"
|
|
224
|
+
}
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
```
|
|
229
|
+
|
|
230
|
+
To keep `npx`, set `command` to the absolute path of your launcher (`which npx`, e.g.
|
|
231
|
+
`/opt/homebrew/bin/npx`) with `"args": ["-y", "@stubbedev/atlassian-mcp@latest"]`.
|
|
232
|
+
|
|
233
|
+
`ATLASSIAN_MCP_REPO_ROOT` is what makes `get_dev_context`, `git_get_context`,
|
|
234
|
+
`start_work`, `complete_work` and Bitbucket repo auto-detection usable here: a desktop app
|
|
235
|
+
has no workspace, so it advertises no MCP roots and there is no useful cwd to fall back to.
|
|
236
|
+
Comma-separate several worktrees (first git repo wins); a per-call `repoPath` still
|
|
237
|
+
overrides it.
|
|
238
|
+
|
|
239
|
+
On Windows, Git is frequently absent from a GUI app's `PATH`. The server probes the usual
|
|
240
|
+
install locations before giving up; set `ATLASSIAN_MCP_GIT_PATH` if yours lives elsewhere.
|
|
241
|
+
|
|
242
|
+
Server stderr is logged to `~/Library/Logs/Claude/mcp-server-atlassian.log` (macOS) or
|
|
243
|
+
`%APPDATA%\Claude\logs\mcp-server-atlassian.log` (Windows) — read that first when a
|
|
244
|
+
connection fails.
|
|
245
|
+
|
|
246
|
+
---
|
|
247
|
+
|
|
177
248
|
#### Cursor
|
|
178
249
|
|
|
179
250
|
Add to `~/.cursor/mcp.json` (global) or `.cursor/mcp.json` (project-only):
|
|
@@ -237,34 +308,116 @@ Add to `opencode.json` in your project root (or `~/.config/opencode/opencode.jso
|
|
|
237
308
|
"mcp": {
|
|
238
309
|
"atlassian": {
|
|
239
310
|
"type": "local",
|
|
240
|
-
"command": ["npx", "-y", "@stubbedev/atlassian-mcp@latest", "--config", "/home/you/.atlassian-mcp.json"]
|
|
311
|
+
"command": ["npx", "-y", "@stubbedev/atlassian-mcp@latest", "--config", "/home/you/.atlassian-mcp.json"],
|
|
312
|
+
"environment": { "ATLASSIAN_MCP_REPO_ROOT": "/home/you/code/my-repo" }
|
|
241
313
|
}
|
|
242
314
|
}
|
|
243
315
|
}
|
|
244
316
|
```
|
|
245
317
|
|
|
318
|
+
`environment` also accepts the `JIRA_*` / `BITBUCKET_*` variables if you would rather not
|
|
319
|
+
keep a config file. Set `"type": "remote"` with `"url"` and `"headers"` to point at a
|
|
320
|
+
shared [HTTP server](#running-as-an-http-server-shared--behind-a-proxy) instead.
|
|
321
|
+
|
|
322
|
+
---
|
|
323
|
+
|
|
324
|
+
#### Codex (CLI, IDE extension, app)
|
|
325
|
+
|
|
326
|
+
One command — it writes the config for all three:
|
|
327
|
+
|
|
328
|
+
```bash
|
|
329
|
+
codex mcp add atlassian -- npx -y @stubbedev/atlassian-mcp@latest
|
|
330
|
+
```
|
|
331
|
+
|
|
332
|
+
Or edit `~/.codex/config.toml` directly (`.codex/config.toml` in a trusted project for a
|
|
333
|
+
project-scoped server). Note the TOML table name is `mcp_servers`, with an underscore:
|
|
334
|
+
|
|
335
|
+
```toml
|
|
336
|
+
[mcp_servers.atlassian]
|
|
337
|
+
command = "npx"
|
|
338
|
+
args = ["-y", "@stubbedev/atlassian-mcp@latest", "--config", "/home/you/.atlassian-mcp.json"]
|
|
339
|
+
|
|
340
|
+
# Optional — instead of a config file, and to pin the repo for the git/PR tools:
|
|
341
|
+
[mcp_servers.atlassian.env]
|
|
342
|
+
JIRA_URL = "https://jira.example.com"
|
|
343
|
+
JIRA_ACCESS_TOKEN = "…"
|
|
344
|
+
ATLASSIAN_MCP_REPO_ROOT = "/home/you/code/my-repo"
|
|
345
|
+
```
|
|
346
|
+
|
|
347
|
+
Codex picks the transport from the keys present: `command` means stdio, `url` means
|
|
348
|
+
streamable HTTP. To share one [HTTP server](#running-as-an-http-server-shared--behind-a-proxy):
|
|
349
|
+
|
|
350
|
+
```toml
|
|
351
|
+
[mcp_servers.atlassian]
|
|
352
|
+
url = "http://127.0.0.1:7337/mcp"
|
|
353
|
+
bearer_token_env_var = "ATLASSIAN_MCP_HTTP_TOKEN"
|
|
354
|
+
```
|
|
355
|
+
|
|
356
|
+
---
|
|
357
|
+
|
|
358
|
+
#### VS Code / GitHub Copilot
|
|
359
|
+
|
|
360
|
+
```bash
|
|
361
|
+
code --add-mcp '{"name":"atlassian","command":"npx","args":["-y","@stubbedev/atlassian-mcp@latest"]}'
|
|
362
|
+
```
|
|
363
|
+
|
|
364
|
+
Or commit `.vscode/mcp.json` with a `servers` object of the same shape to share it with the
|
|
365
|
+
repo.
|
|
366
|
+
|
|
246
367
|
---
|
|
247
368
|
|
|
248
|
-
####
|
|
369
|
+
#### Any other MCP-compatible tool
|
|
370
|
+
|
|
371
|
+
Most clients accept the Claude Desktop shape — an `mcpServers` object keyed by name, with
|
|
372
|
+
`command`, `args` and `env`:
|
|
373
|
+
|
|
374
|
+
```json
|
|
375
|
+
{
|
|
376
|
+
"mcpServers": {
|
|
377
|
+
"atlassian": {
|
|
378
|
+
"command": "npx",
|
|
379
|
+
"args": ["-y", "@stubbedev/atlassian-mcp@latest"],
|
|
380
|
+
"env": {
|
|
381
|
+
"JIRA_URL": "https://jira.example.com",
|
|
382
|
+
"JIRA_ACCESS_TOKEN": "…",
|
|
383
|
+
"BITBUCKET_URL": "https://bitbucket.example.com",
|
|
384
|
+
"BITBUCKET_ACCESS_TOKEN": "…",
|
|
385
|
+
"ATLASSIAN_MCP_REPO_ROOT": "/home/you/code/my-repo"
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
```
|
|
391
|
+
|
|
392
|
+
LM Studio uses exactly that shape in its own `mcp.json` (edit it from the app's plugin
|
|
393
|
+
panel); Cherry Studio, Witsy, Jan and 5ire have in-app MCP dialogs with the same fields.
|
|
249
394
|
|
|
250
|
-
|
|
395
|
+
Goose is the exception — its `~/.config/goose/config.yaml` uses `extensions:` with `cmd`
|
|
396
|
+
rather than `command`:
|
|
251
397
|
|
|
252
398
|
```yaml
|
|
253
|
-
|
|
399
|
+
extensions:
|
|
254
400
|
atlassian:
|
|
255
|
-
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
|
|
260
|
-
|
|
401
|
+
enabled: true
|
|
402
|
+
type: stdio
|
|
403
|
+
cmd: npx
|
|
404
|
+
args: ["-y", "@stubbedev/atlassian-mcp@latest"]
|
|
405
|
+
envs:
|
|
406
|
+
ATLASSIAN_MCP_REPO_ROOT: /home/you/code/my-repo
|
|
261
407
|
```
|
|
262
408
|
|
|
409
|
+
Every GUI client brings the caveats from the [Claude Desktop](#claude-desktop) section:
|
|
410
|
+
absolute `command` path, no usable cwd, no MCP roots — so set `ATLASSIAN_MCP_REPO_ROOT`.
|
|
411
|
+
|
|
263
412
|
---
|
|
264
413
|
|
|
265
|
-
####
|
|
414
|
+
#### ChatGPT (desktop / web) — not supported
|
|
266
415
|
|
|
267
|
-
|
|
416
|
+
ChatGPT connectors accept **remote HTTPS MCP servers only** (streamable HTTP or SSE, with
|
|
417
|
+
OAuth or no auth); it cannot spawn a local stdio server. This server's `--http` mode speaks
|
|
418
|
+
the right protocol, but making it work would mean exposing an endpoint that reaches your
|
|
419
|
+
self-hosted Jira/Bitbucket to OpenAI's servers, and ChatGPT offers no place for the static
|
|
420
|
+
bearer token this server uses. Use a client from the list above.
|
|
268
421
|
|
|
269
422
|
### Updating existing installs
|
|
270
423
|
|
|
@@ -281,7 +434,9 @@ Then restart your MCP client.
|
|
|
281
434
|
### Install without npm
|
|
282
435
|
|
|
283
436
|
The server is a single static Go binary. The `npx` path above downloads the prebuilt
|
|
284
|
-
binary for your platform on first run; these alternatives skip Node entirely
|
|
437
|
+
binary for your platform on first run; these alternatives skip Node entirely — as does the
|
|
438
|
+
[`.mcpb` bundle](#claude-desktop) for Claude Desktop, and the per-platform binaries
|
|
439
|
+
attached to every [release](https://github.com/stubbedev/atlassian-mcp/releases/latest):
|
|
285
440
|
|
|
286
441
|
```bash
|
|
287
442
|
# Go toolchain — installs to $GOBIN / $GOPATH/bin
|
|
@@ -292,9 +447,11 @@ nix run github:stubbedev/atlassian-mcp -- --config ~/.atlassian-mcp.json
|
|
|
292
447
|
```
|
|
293
448
|
|
|
294
449
|
Then point your MCP client's `command` at the resulting `atlassian-mcp` binary
|
|
295
|
-
instead of `npx`. On these paths `
|
|
296
|
-
|
|
297
|
-
|
|
450
|
+
instead of `npx`. On these Node-free paths (`go install`, Nix, a release binary or the
|
|
451
|
+
`.mcpb` bundle) `ffmpeg`/`ffprobe` must be available on `PATH` for video and
|
|
452
|
+
animated-image attachments (or set `ATLASSIAN_MCP_FFMPEG_PATH` /
|
|
453
|
+
`ATLASSIAN_MCP_FFPROBE_PATH`); the npm wrapper bundles them automatically. Everything
|
|
454
|
+
else — still images, PDF text, JSON/text — is pure Go and needs nothing extra.
|
|
298
455
|
|
|
299
456
|
### Running as an HTTP server (shared / behind a proxy)
|
|
300
457
|
|
|
@@ -324,9 +481,10 @@ ATLASSIAN_MCP_HTTP=1 atlassian-mcp # same, via env
|
|
|
324
481
|
**Repo context comes from the client, not the server's working directory.** Tools that
|
|
325
482
|
need a repo (`git_get_context`, `get_dev_context`, `start_work`, `complete_work`, and
|
|
326
483
|
Bitbucket project/repo auto-detection) resolve it in this order: an explicit `repoPath`
|
|
327
|
-
argument → a **root pinned via request header** (see below) →
|
|
328
|
-
|
|
329
|
-
|
|
484
|
+
argument → a **root pinned via request header** (see below) → **`ATLASSIAN_MCP_REPO_ROOT`**
|
|
485
|
+
(comma-separated for several worktrees — the only workspace signal a GUI desktop client
|
|
486
|
+
can give) → the client's **MCP workspace roots** (the server asks via `roots/list`, caches
|
|
487
|
+
per session, and refreshes on `notifications/roots/list_changed`) → the process cwd (stdio
|
|
330
488
|
only). So one shared HTTP server handles many worktrees: each client's own workspace drives
|
|
331
489
|
its calls. When a session exposes **several** roots (multiple worktrees), a tool with no
|
|
332
490
|
`repoPath` uses the first git-repo root; pass `repoPath` (an absolute path, or a worktree
|
|
@@ -384,8 +542,8 @@ pure-Go implementation shell out to external binaries:
|
|
|
384
542
|
- **`ffmpeg` + `ffprobe`** — video and animated-image frame sampling. The npm wrapper bundles
|
|
385
543
|
[`ffmpeg-static`](https://www.npmjs.com/package/ffmpeg-static) /
|
|
386
544
|
[`ffprobe-static`](https://www.npmjs.com/package/ffprobe-static) and injects their paths, so the
|
|
387
|
-
npx install path is zero-config. On
|
|
388
|
-
`ffprobe`) or set the env vars below.
|
|
545
|
+
npx install path is zero-config. On every Node-free path (`go install`, Nix, release binary,
|
|
546
|
+
`.mcpb` bundle), install `ffmpeg` (it provides `ffprobe`) or set the env vars below.
|
|
389
547
|
- **`pdftoppm` (poppler) or `mutool` (MuPDF)** — only needed to rasterize *scanned* PDFs that have no
|
|
390
548
|
extractable text. If neither is on `PATH`, such PDFs are saved to disk instead.
|
|
391
549
|
|
|
@@ -395,6 +553,8 @@ pure-Go implementation shell out to external binaries:
|
|
|
395
553
|
| --- | --- | --- |
|
|
396
554
|
| `ATLASSIAN_MCP_HTTP` | Run as a Streamable HTTP server instead of stdio. `1`/`true` → `127.0.0.1:7337`; or set an explicit `host:port`. Same as `--http`. | unset (stdio) |
|
|
397
555
|
| `ATLASSIAN_MCP_HTTP_TOKEN` | Bearer token for HTTP mode. Optional on loopback binds; **required** on non-loopback binds. | unset |
|
|
556
|
+
| `ATLASSIAN_MCP_REPO_ROOT` | Default workspace root(s) for the git/PR tools, comma-separated. `file://` URIs, absolute paths, `~/…` and Windows drive paths all work. Needed by clients that expose no MCP roots (desktop apps). Overridden by a `repoPath` argument or a root header. | unset |
|
|
557
|
+
| `ATLASSIAN_MCP_GIT_PATH` | Path to the `git` executable. Only needed when `git` is off the host app's `PATH`; the server already probes the usual install locations. | `git` on `PATH` |
|
|
398
558
|
| `ATLASSIAN_MCP_FFMPEG_PATH` | Path to `ffmpeg` binary. | npm: bundled `ffmpeg-static`; otherwise `ffmpeg` on `PATH` |
|
|
399
559
|
| `ATLASSIAN_MCP_FFPROBE_PATH` | Path to `ffprobe` binary. | npm: bundled `ffprobe-static`; otherwise `ffprobe` on `PATH` |
|
|
400
560
|
| `ATLASSIAN_MCP_TMP_TTL_DAYS` | Auto-saved attachments older than this are pruned. | `7` |
|
|
@@ -409,8 +569,10 @@ This package is published to npm as `@stubbedev/atlassian-mcp`.
|
|
|
409
569
|
Use semantic versioning for releases. Breaking tool-surface changes should bump the minor version while `<1.0.0` (for example `0.0.x` -> `0.1.0`).
|
|
410
570
|
|
|
411
571
|
On a pushed `v*` tag, `.github/workflows/publish.yml` cross-compiles the Go binary for 14
|
|
412
|
-
OS/arch targets,
|
|
413
|
-
|
|
572
|
+
OS/arch targets, packs six of them into `.mcpb` bundles for one-click desktop install
|
|
573
|
+
(`packaging/mcpb/pack.sh`, macOS/Windows/Linux × amd64/arm64), attaches everything to a
|
|
574
|
+
GitHub release, and publishes the npm wrapper (which downloads the matching binary on
|
|
575
|
+
install). `just bundle` builds a bundle for the host platform locally.
|
|
414
576
|
|
|
415
577
|
Release flow (`just` drives it; it refuses to run on a dirty tree):
|
|
416
578
|
|