@stubbedev/atlassian-mcp 0.5.0 → 0.5.1

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.
Files changed (2) hide show
  1. package/README.md +44 -0
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -254,6 +254,48 @@ instead of `npx`. On these paths `ffmpeg`/`ffprobe` must be available on `PATH`
254
254
  (or set `ATLASSIAN_MCP_FFMPEG_PATH` / `ATLASSIAN_MCP_FFPROBE_PATH`); the npm
255
255
  wrapper bundles them automatically.
256
256
 
257
+ ### Running as an HTTP server (shared / behind a proxy)
258
+
259
+ By default the server speaks MCP over **stdio** (one process per client, launched
260
+ by your editor). It can instead run as a long-lived **Streamable HTTP** server that
261
+ many clients share — useful behind a reverse proxy:
262
+
263
+ ```bash
264
+ atlassian-mcp --http # binds 127.0.0.1:7337
265
+ atlassian-mcp --http 127.0.0.1:9000 # custom address
266
+ ATLASSIAN_MCP_HTTP=1 atlassian-mcp # same, via env
267
+ ```
268
+
269
+ - Single endpoint `POST /mcp` (JSON-RPC) plus an optional `GET /mcp` SSE stream that
270
+ carries server→client requests (`roots/list`, elicitation). The server is **stateful**:
271
+ `initialize` mints a session and returns an `Mcp-Session-Id` header, which the client
272
+ **must** echo on every subsequent request and on the SSE stream. Requests with a
273
+ missing/unknown/expired session id get **HTTP 404** so the client re-initializes
274
+ (standard MCP-client behaviour). Each connected client/worktree is an isolated session.
275
+ - **Auth:** on a loopback bind no token is needed. Binding a non-loopback address
276
+ **requires** `ATLASSIAN_MCP_HTTP_TOKEN` (sent by clients as `Authorization: Bearer …`);
277
+ the server refuses to start otherwise. Terminate TLS at your proxy.
278
+ - **`GET /healthz`** is an unauthenticated liveness probe (returns `ok`) for proxies/load
279
+ balancers. Idle sessions are evicted after 1h.
280
+
281
+ **Repo context comes from the client, not the server's working directory.** Tools that
282
+ need a repo (the `git_*` tools, `get_dev_context`, `start_work`, `complete_work`, and
283
+ Bitbucket project/repo auto-detection) resolve it in this order: an explicit `repoPath`
284
+ argument → the client's **MCP workspace roots** (the server asks via `roots/list`, caches
285
+ per session, and refreshes on `notifications/roots/list_changed`) → the process cwd (stdio
286
+ only). So one shared HTTP server handles many worktrees: each client's own workspace drives
287
+ its calls. When a session exposes **several** roots (multiple worktrees), a tool with no
288
+ `repoPath` uses the first git-repo root; pass `repoPath` (an absolute path, or a worktree
289
+ name/basename that matches one of the roots) to target a specific worktree. For Bitbucket,
290
+ passing `projectKey`+`repoSlug` explicitly skips repo detection entirely. The repos must be
291
+ reachable on the server's host (the git tools run `git` locally).
292
+
293
+ Client config for an already-running HTTP server (Claude Code example):
294
+
295
+ ```bash
296
+ claude mcp add --transport http atlassian http://127.0.0.1:7337/mcp
297
+ ```
298
+
257
299
  ### Attachment decoding pipeline
258
300
 
259
301
  The attachment tools (`jira_get_attachment`, `bitbucket_get_attachment`) decode binary attachments into model-readable content before returning them:
@@ -287,6 +329,8 @@ pure-Go implementation shell out to external binaries:
287
329
 
288
330
  | Variable | Purpose | Default |
289
331
  | --- | --- | --- |
332
+ | `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) |
333
+ | `ATLASSIAN_MCP_HTTP_TOKEN` | Bearer token for HTTP mode. Optional on loopback binds; **required** on non-loopback binds. | unset |
290
334
  | `ATLASSIAN_MCP_FFMPEG_PATH` | Path to `ffmpeg` binary. | npm: bundled `ffmpeg-static`; otherwise `ffmpeg` on `PATH` |
291
335
  | `ATLASSIAN_MCP_FFPROBE_PATH` | Path to `ffprobe` binary. | npm: bundled `ffprobe-static`; otherwise `ffprobe` on `PATH` |
292
336
  | `ATLASSIAN_MCP_TMP_TTL_DAYS` | Auto-saved attachments older than this are pruned. | `7` |
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stubbedev/atlassian-mcp",
3
- "version": "0.5.0",
3
+ "version": "0.5.1",
4
4
  "description": "MCP server for self-hosted Jira and Bitbucket (Go, distributed as a prebuilt binary)",
5
5
  "license": "MIT",
6
6
  "type": "module",