@stubbedev/atlassian-mcp 0.5.17 → 0.5.18

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 +34 -24
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -548,28 +548,33 @@ For Bitbucket, a source that already appears in the description or comment text
548
548
  by the attachment markup — that works for URLs too, so writing `![the widget](https://…/shot.png)`
549
549
  and passing the same URL in `attachments` keeps your caption and swaps in the uploaded file.
550
550
 
551
- **Sandboxed hosts.** Claude Desktop runs extensions in an OS sandbox that blocks arbitrary
552
- filesystem paths but still allows outbound HTTPS, so local paths generally fail there while URL and
553
- `data:` sources work. The error for an unreadable path says so. This also applies to chaining with
554
- another MCP server: a screenshot another server saved to *its* temp directory is not reachable
555
- from this one under a sandbox, though it is when both run unsandboxed (as in Claude Code).
556
-
557
- > Files a user attaches to the chat itself still cannot be uploaded from these arguments: MCP has
558
- > no mechanism for passing conversation attachments to a server, and the model cannot re-emit image
551
+ **Confined hosts.** A host may run this server sandboxed, in which case a path it was not granted
552
+ comes back as a permission error while URL and `data:` sources keep working — neither needs the
553
+ filesystem. The startup log names the config file it read, or the error it got trying, which is the
554
+ quickest way to tell whether the filesystem is restricted on your setup. The same applies to
555
+ chaining with another MCP server: a screenshot another server wrote to *its* temp directory is only
556
+ reachable here if this process is allowed to read that path.
557
+
558
+ > Files a user attaches to the chat itself cannot be uploaded from these arguments: MCP has no
559
+ > mechanism for passing conversation attachments to a server, and the model cannot re-emit image
559
560
  > bytes it was shown. Use [`attach_files`](#the-upload-panel-mcp-apps) — the user re-picks or pastes
560
561
  > the file into a panel that uploads it directly — or give this server a URL or a readable path.
561
562
 
562
563
  ### The upload panel (MCP Apps)
563
564
 
564
- `attach_files` opens a file picker **inside the chat**. It exists because neither of the
565
- other routes works everywhere:
565
+ `attach_files` opens a file picker **inside the chat**. It exists for the file that has no
566
+ path to pass:
566
567
 
567
- - a local path needs this server to share a filesystem with the file, which a sandboxed
568
- host (Claude Desktop extensions) does not allow;
569
- - a file the user drops into the conversation never reaches an MCP server at all — the
570
- protocol has no client-to-server file transfer, and the model cannot re-emit bytes it
571
- was shown. [SEP-2631](https://github.com/modelcontextprotocol/modelcontextprotocol/issues/2631)
572
- would add one; it is still a draft.
568
+ - a screenshot the user pasted or dragged into the conversation is not on disk anywhere
569
+ this server could look, and MCP has no client-to-server file transfer to carry it — the
570
+ model cannot re-emit bytes it was shown.
571
+ [SEP-2631](https://github.com/modelcontextprotocol/modelcontextprotocol/issues/2631)
572
+ would add one; it is still a draft;
573
+ - and a local path only works if the server is both on the same machine *and* permitted to
574
+ read it, which a host that confines the server may not allow.
575
+
576
+ Where a readable path or a URL does exist, the `attachments` arguments remain the better
577
+ route — no user interaction at all.
573
578
 
574
579
  [MCP Apps](https://github.com/modelcontextprotocol/ext-apps) routes around both. The tool
575
580
  declares a `ui://` resource, the host renders it as an iframe, and that iframe is an
@@ -588,14 +593,19 @@ never fills in `files` and never sees the file contents. Files are capped at 12
588
593
  since the bytes ride the JSON-RPC channel as base64 — anything larger should go up by URL.
589
594
 
590
595
  Support is negotiated: hosts advertise MCP Apps through the `io.modelcontextprotocol/ui`
591
- extension at `initialize`. Where it is absent — **Claude Code today** — `attach_files`
592
- returns a plain instruction to use a path or URL instead, and every other tool behaves
593
- exactly as before.
594
-
595
- The panel is one self-contained HTML document, because the host serves it under
596
- `default-src 'none'`: no CDN, no second resource, no build step. The MCP Apps browser SDK
597
- is vendored into `ui/vendor/ext-apps.js` by `scripts/vendor-ext-apps.sh` (re-run it to
598
- bump the version) and spliced into the page when the resource is read.
596
+ extension at `initialize`. Where it is absent — **Claude Code today** — the whole surface is
597
+ hidden rather than merely degraded: `attach_files` is filtered out of `tools/list`, the
598
+ widget is filtered out of `resources/list`, and reading it is refused (a client that fetched
599
+ it anyway would take a few hundred KB of inlined SDK into its context for a page it cannot
600
+ draw). Such a host sees exactly the tools it saw before, and is told to ask for a path or
601
+ URL instead.
602
+
603
+ The panel is one self-contained HTML document (`ui/upload.html`, ~19 KB), because the host
604
+ serves it under `default-src 'none'`: no CDN, no second resource, no build step. It carries
605
+ its own ~2 KB MCP Apps bridge rather than the official browser SDK — a view only needs one
606
+ `ui/initialize` round trip, an `initialized` notification, `tool-input` notifications in and
607
+ `tools/call` requests out, and the SDK brings ~400 KB of zod to validate messages this page
608
+ already treats as untrusted. Bundling it with esbuild makes it larger, not smaller.
599
609
 
600
610
  ### Attachment decoding pipeline
601
611
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stubbedev/atlassian-mcp",
3
- "version": "0.5.17",
3
+ "version": "0.5.18",
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",