Skip to the content.

sooperset/mcp-atlassian - security scan

Repository: sooperset/mcp-atlassian Commit scanned: 4067d1db4097755cc6add87f95fe3f0746c98c0b Scan date: 2026-07-10 Disclosure status: public — post-only (strict-norm: SECURITY.md requests private reporting; the criticals are public dep CVEs)

Summary

Severity Count
Critical 2
High 26
Medium 43
Low 0 (filtered at --min-severity medium)
Info 0

Total findings: 71 (0 novel code findings; the two criticals are reachable-in-OAuth-mode dependency CVEs)

mcp-atlassian is the popular (5.5k-star) MCP server for Jira and Confluence, supporting API tokens, PATs, and OAuth 2.0 across Cloud and Server/Data Center. It’s credential-dense by nature, so the two questions worth asking are the ones a scanner can’t answer directly: does it protect the tokens on the wire, and is the OAuth path safe? The TLS handling turns out to be correct-by-default; the residual is a pair of public dependency criticals that bite only in the optional multi-user OAuth mode.

Top findings

1. TLS verification is secure-by-default (the semgrep-blind check clears)

2. The two criticals are public dep CVEs, reachable only in OAuth-server mode

3. Everything else is lint, docs, and test fixtures

Patterns observed

The credential-server questions are the ones the scanner skips. semgrep produced 23 findings and not one of them was the thing that actually mattered for a token-forwarding server — the TLS-verification default. That had to be traced by hand (ssl.pyconfigure_ssl_verification → the ssl_verify config default), the same MCP completeness-sweep discipline the zotero-mcp and codex-lb scans used. The good news is it came back clean: verification on by default, CERT_NONE only for an explicit self-signed opt-in.

“Reachable” needs a deployment qualifier for a dual-mode server. The authlib and fastmcp criticals are genuinely reachable — but only in the multi-user OAuth deployment, not the single-user API-token mode most users run. This is the transport/deployment-reachability nuance the tradingview-mcp and OpenKB scans raised, applied to auth: the same lockfile is “two reachable criticals” for an OAuth operator and “two inert transitive CVEs” for a PAT user. The honest report states which.

Strict-norm, so post-only — and the criticals are public CVEs anyway. mcp-atlassian ships a real SECURITY.md that asks reporters to use GitHub’s private vulnerability reporting. Two things follow: no public “review” issue (policy), and no private advisory either — these are upstream authlib/fastmcp CVEs that any scanner surfaces and Dependabot would auto-PR, so a coordinated private disclosure adds nothing. The proportionate action is to document the reachable-in-OAuth-mode criticals and the missing Dependabot here, and credit the secure TLS default.

Notes on the tool

Disclosure timeline

Reproduce

git clone https://github.com/sooperset/mcp-atlassian /tmp/scan-target
python scanner/run_scan.py --repo /tmp/scan-target \
  --reports-dir ./reports/sooperset-mcp-atlassian \
  --min-severity medium --ignore-samples