@stubbedev/atlassian-mcp 0.5.14 → 0.5.16

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 CHANGED
@@ -95,7 +95,11 @@ cannot get them wrong, and they need no prompting:
95
95
  components and fix versions, and Bitbucket reviewers are checked first; a bad
96
96
  one comes back with the valid options instead of an opaque 400.
97
97
  - **Markdown is converted to Jira wiki markup** on every Jira write (comments,
98
- descriptions, worklogs). Text that is already wiki markup is left alone.
98
+ descriptions, environments, worklogs): fenced code blocks in any style
99
+ (```` ``` ````/```` ```` ````/`~~~`, any info string), inline code, headings,
100
+ bold/bold-italic, strikethrough, links, autolinks and images, blockquotes
101
+ (`bq.`/`{quote}`), tables, and bullet or ordered lists (`-`/`*`/`+` and
102
+ `1.`/`1)`). Text that is already wiki markup is left alone.
99
103
  - **PR comment hygiene:** one reply per thread per author, no duplicate of a
100
104
  comment you already posted, no new top-level comment on a PR you authored
101
105
  (`asAuthor=true` to override), no tasks via `severity`, no emoji, and bare
@@ -113,6 +117,12 @@ cannot get them wrong, and they need no prompting:
113
117
  so reading the wrong branch is visible rather than silent.
114
118
  - **Tool annotations** (`readOnlyHint`, `destructiveHint`, `idempotentHint`) are
115
119
  published for every tool, so hosts can gate confirmation on metadata.
120
+ - **AI-written text is attributed.** Every Jira ticket description, Jira comment
121
+ (including worklog comments) and Bitbucket PR description / PR comment posted
122
+ through this server ends with a bold `[AI]` line, added after markdown→wiki
123
+ conversion so it never lands inside a code block, and skipped rather than
124
+ mangled when the text ends inside an open code fence. Disable with
125
+ `"markAIText": false` in the config file or `ATLASSIAN_MCP_MARK_AI_TEXT=false`.
116
126
 
117
127
  ## Setup
118
128
 
@@ -555,6 +565,7 @@ pure-Go implementation shell out to external binaries:
555
565
  | `ATLASSIAN_MCP_HTTP_TOKEN` | Bearer token for HTTP mode. Optional on loopback binds; **required** on non-loopback binds. | unset |
556
566
  | `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
567
  | `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` |
568
+ | `ATLASSIAN_MCP_MARK_AI_TEXT` | Set `false` to stop appending the bold `[AI]` attribution line to Jira/Bitbucket text this server posts. | `true` |
558
569
  | `ATLASSIAN_MCP_FFMPEG_PATH` | Path to `ffmpeg` binary. | npm: bundled `ffmpeg-static`; otherwise `ffmpeg` on `PATH` |
559
570
  | `ATLASSIAN_MCP_FFPROBE_PATH` | Path to `ffprobe` binary. | npm: bundled `ffprobe-static`; otherwise `ffprobe` on `PATH` |
560
571
  | `ATLASSIAN_MCP_TMP_TTL_DAYS` | Auto-saved attachments older than this are pruned. | `7` |
@@ -42,6 +42,11 @@
42
42
  "description": "Personal Access Token (PAT) for Bitbucket Server authentication"
43
43
  }
44
44
  }
45
+ },
46
+ "markAIText": {
47
+ "type": "boolean",
48
+ "default": true,
49
+ "description": "Append a bold [AI] attribution line to Jira ticket descriptions/comments and Bitbucket PR descriptions/comments posted through this server, so readers can tell AI writing from yours. Default true."
45
50
  }
46
51
  }
47
52
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@stubbedev/atlassian-mcp",
3
- "version": "0.5.14",
3
+ "version": "0.5.16",
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",
@@ -18,7 +18,7 @@
18
18
  "postinstall": "node scripts/postinstall.mjs",
19
19
  "build": "go build -o atlassian-mcp .",
20
20
  "test": "go test ./...",
21
- "smoke": "go build -o atlassian-mcp . && printf '%s\\n' '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\",\"params\":{}}' | ATLASSIAN_MCP_CONFIG=/nonexistent JIRA_URL=https://github.com JIRA_ACCESS_TOKEN=smoke BITBUCKET_URL=https://github.com BITBUCKET_ACCESS_TOKEN=smoke ./atlassian-mcp | node -e \"let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{try{const r=JSON.parse(d.trim());if(r.error)throw new Error('server error: '+r.error.message);const t=r.result?.tools;if(!Array.isArray(t)||!t.length)throw new Error('no tools in response');const bad=t.filter(x=>!x.name||!x.inputSchema);if(bad.length)throw new Error('malformed tools: '+bad.map(x=>x.name??'(unnamed)').join(', '));console.log('smoke OK — '+t.length+' tool(s): '+t.map(x=>x.name).join(', '))}catch(e){console.error('smoke FAIL:',e.message);process.exit(1)}})\"",
21
+ "smoke": "go build -o atlassian-mcp . && { printf '%s\\n' '{\"jsonrpc\":\"2.0\",\"id\":0,\"method\":\"initialize\",\"params\":{\"protocolVersion\":\"2025-06-18\",\"capabilities\":{},\"clientInfo\":{\"name\":\"npm-smoke\",\"version\":\"0\"}}}' '{\"jsonrpc\":\"2.0\",\"method\":\"notifications/initialized\"}' '{\"jsonrpc\":\"2.0\",\"id\":1,\"method\":\"tools/list\",\"params\":{}}'; sleep 3; } | ATLASSIAN_MCP_CONFIG=/nonexistent JIRA_URL=https://github.com JIRA_ACCESS_TOKEN=smoke BITBUCKET_URL=https://github.com BITBUCKET_ACCESS_TOKEN=smoke ./atlassian-mcp | node -e \"let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{try{const rs=d.trim().split('\\n').filter(Boolean).map(l=>JSON.parse(l));const err=rs.find(r=>r.error);if(err)throw new Error('server error: '+err.error.message);const t=rs.find(r=>r.id===1)?.result?.tools;if(!Array.isArray(t)||!t.length)throw new Error('no tools in response');const bad=t.filter(x=>!x.name||!x.inputSchema);if(bad.length)throw new Error('malformed tools: '+bad.map(x=>x.name??'(unnamed)').join(', '));console.log('smoke OK — '+t.length+' tool(s): '+t.map(x=>x.name).join(', '))}catch(e){console.error('smoke FAIL:',e.message);process.exit(1)}})\"",
22
22
  "preversion": "go vet ./... && npm run test && npm run smoke",
23
23
  "release:patch": "npm version patch && git push origin HEAD --follow-tags",
24
24
  "release:minor": "npm version minor && git push origin HEAD --follow-tags",