jira-confluence-mcp
Facilitates the setup and hardening of Atlassian MCP servers for secure team connectivity.
Install
mkdir -p .claude/skills/jira-confluence-mcp && curl -L -o skill.zip "https://agentskills.codes/api/skills/download/12314" && unzip -o skill.zip -d .claude/skills/jira-confluence-mcp && rm skill.zipInstalls to .claude/skills/jira-confluence-mcp
Activation
This is the description your AI agent reads to decide when to run this skill — the better it matches your request, the more reliably it fires.
Install, configure, secure, and troubleshoot the mcp-atlassian MCP server (sooperset/mcp-atlassian) that connects an agent to Jira/Confluence — including AIR-GAPPED setup (mirror the prebuilt image by digest; no PyPI/git mirror) and internal-CA / TLS handling (mount the CA vs JIRA_SSL_VERIFY=false). Self-hosted Data Center first: the #1 gotcha is DC uses JIRA_PERSONAL_TOKEN (a PAT), NOT the Cloud username+API-token pattern. Covers `claude mcp add`, the env-var catalog, hardening (READ_ONLY_MODE, TOOLSETS/ENABLED_TOOLS, project filters, the v0.22 default-toolset change), Cloud-vs-DC tool/format divergence, and 401/403/field/rate-limit/SSL fixes. NOT a catalogue of the 72 tools — those self-document at runtime; this is the setup/ops knowledge invisible at call time.Key capabilities
- →Install the `mcp-atlassian` MCP server
- →Configure Jira and Confluence connections
- →Secure the MCP server with read-only mode and toolset filtering
- →Troubleshoot 401/403 errors and field-not-found issues
- →Handle air-gapped setup for `mcp-atlassian`
- →Manage internal-CA / TLS for self-hosted Jira
How it works
The skill guides the installation, configuration, and security hardening of the `mcp-atlassian` MCP server for Jira/Confluence. It covers air-gapped setups, TLS handling, environment variables, and troubleshooting common errors.
Inputs & outputs
When to use jira-confluence-mcp
- →Setting up jira MCP
- →Configuring confluence integration
- →Troubleshooting atlassian connection
- →Securing mcp-atlassian server
About this skill
jira-confluence-mcp — install, secure & operate the mcp-atlassian MCP server
Scope: getting sooperset/mcp-atlassian — the MCP server that gives an agent Jira/Confluence tools — connected, hardened, and debugged, including air-gapped. This is the setup/ops layer: the knowledge that is invisible at tool-call time.
Hard boundary — what this skill does NOT do. Once the server is connected, it self-documents its full tool set at runtime (72 at v0.21.1; v0.22.0/v0.23.0 added more — the live list is the count) (names, params, schemas) over the MCP protocol — so using the tools (jira_search, jira_create_issue, jira_transition_issue, …) needs no skill; just call them. For exhaustive tool/JQL/CQL docs, the project publishes an LLM-readable https://mcp-atlassian.soomiles.com/llms-full.txt — fetch it on demand instead of duplicating it here. Sibling skills: jira-cli (the jira CLI as an alternative execution path) and jira-best-practices (how to use Jira well — hierarchy, lean config). This skill is only the install/auth/hardening/air-gap/troubleshooting that those don't cover and the live MCP can't surface.
Self-hosted Data Center is the default here. Where Cloud differs, it's flagged.
The #1 gotcha: Data Center auth is a PAT, not username+token
Claude's base instinct is the Cloud pattern — and it fails on Data Center.
| Deployment | Required env vars |
|---|---|
| Data Center / Server | JIRA_URL + JIRA_PERSONAL_TOKEN (a Personal Access Token). No username. |
| Cloud | JIRA_URL + JIRA_USERNAME (email) + JIRA_API_TOKEN |
DC PATs: created at profile → Personal Access Tokens; max 10 per user; set an expiry. Full auth matrix (OAuth 2.0, BYOT, multi-cloud) + the complete env-var catalog: references/auth-config.md.
Enable Jira, Confluence, or both (the #1 setup miss)
mcp-atlassian runs a separate client per product, each gated on its own *_URL + auth. Supply only JIRA_* and you get only jira_* tools — Jira's vars do not carry over to Confluence (and vice-versa), and the missing product's tools just don't appear, with no error. To add Confluence:
| Cloud | Data Center | |
|---|---|---|
| URL | CONFLUENCE_URL=https://<site>.atlassian.net/wiki — note the /wiki (Jira is the bare domain) | its own host / context path, e.g. https://confluence.internal.company.com |
| Auth | CONFLUENCE_USERNAME + CONFLUENCE_API_TOKEN — the same email + token as Jira (Cloud API tokens are account-scoped; reuse the Jira values) | CONFLUENCE_PERSONAL_TOKEN (a PAT, like Jira) |
TOOLSETS=all/default already covers both products, so missing tools mean missing creds, not a toolset problem. After any env change, reconnect (/mcp → reconnect, or restart — env is read only at spawn) and verify with claude mcp list + the tool count. Symptom row: references/troubleshooting.md.
Install & connect (Claude Code)
uvx is the runner for a connected host; Docker/image is the path for production and air-gap. Add it to Claude Code with claude mcp add (the upstream docs only show Claude-Desktop/Cursor JSON):
# Data Center, Jira only (add CONFLUENCE_URL + CONFLUENCE_PERSONAL_TOKEN for Confluence too):
claude mcp add mcp-atlassian \
-e JIRA_URL=https://jira.internal.company.com \
-e JIRA_PERSONAL_TOKEN=<pat> \
-- uvx mcp-atlassian
# Cloud, BOTH products — same email + token; Confluence URL ends /wiki:
claude mcp add mcp-atlassian \
-e JIRA_URL=https://your-co.atlassian.net -e CONFLUENCE_URL=https://your-co.atlassian.net/wiki \
-e [email protected] -e [email protected] \
-e JIRA_API_TOKEN=<token> -e CONFLUENCE_API_TOKEN=<token> \
-- uvx mcp-atlassian
Other install methods (pip, uv, source) exist but pull from PyPI — see references/air-gapped.md for why that matters offline.
TLS / internal CA — add the CA or disable verification
Self-hosted Jira usually presents an internal-CA or self-signed cert. mcp-atlassian trusts the OS trust store by default (via truststore), so a CA already in the host's Windows/macOS/Linux store works with no config. Two fixes when it doesn't (e.g. inside a container, which only has the stock bundle):
- Preferred — trust the CA (keeps TLS verification on):
- uvx / host install: put the internal CA in the OS trust store (
update-ca-certificateson Linux), or point at a bundle withREQUESTS_CA_BUNDLE=/path/ca.pem/SSL_CERT_FILE=/path/ca.pem. - Docker: mount the CA in and refresh the bundle —
-v /etc/pki/internal-ca.crt:/usr/local/share/ca-certificates/internal-ca.crt:ro(Alpine image: the cert dir is/usr/local/share/ca-certificates/; the bundledpython:3.13-alpinewon't have the internal CA otherwise). - mTLS:
JIRA_CLIENT_CERT=/path/cert.pem+JIRA_CLIENT_KEY=/path/key.pem.
- uvx / host install: put the internal CA in the OS trust store (
- Escape hatch — skip verification (only when trusting the CA isn't practical):
JIRA_SSL_VERIFY=false(andCONFLUENCE_SSL_VERIFY=false). Disables cert checking for that service. Acceptable on a trusted internal network; flag it as a deliberate downgrade.- To fall back to the bundled
certifiCA instead of the OS store:MCP_ATLASSIAN_USE_SYSTEM_TRUSTSTORE=false.
The container-CA step is the most common air-gap surprise — a self-contained image still doesn't trust the internal CA. Full detail in references/air-gapped.md.
Air-gapped install (short version)
A full git mirror of the repo is NOT enough — the dependency wheels live on PyPI, not in git. If the environment can serve container images, the clean path is to mirror the prebuilt image by digest (it bakes Python + all deps in — no PyPI, no git needed at install or run):
# 1. resolve + mirror the prebuilt image, pinned by digest (supply-chain hygiene)
skopeo copy --all \
docker://ghcr.io/sooperset/mcp-atlassian:v0.23.0 \
docker://harbor.internal/mirror/mcp-atlassian:v0.23.0
# 2. connect (stdio needs -i); mount the internal CA so TLS verifies
claude mcp add mcp-atlassian \
-e JIRA_URL=https://jira.internal.company.com \
-e JIRA_PERSONAL_TOKEN=<pat> \
-- docker run -i --rm -e JIRA_URL -e JIRA_PERSONAL_TOKEN \
-v /etc/pki/internal-ca.crt:/usr/local/share/ca-certificates/internal-ca.crt:ro \
harbor.internal/mirror/mcp-atlassian@sha256:<digest>
Critical nuance: mirror the prebuilt image (no PyPI). Building the image from a git mirror still needs a PyPI index for uv sync plus the two base images mirrored. The 3-artifact-type breakdown, the build-from-source path, and digest-pinning are in references/air-gapped.md.
Hardening (do this by default)
The server exposes 72 write-capable tools; scope it deliberately.
READ_ONLY_MODE=true— disables all write tools regardless of other settings. Use for read/report-only agents.TOOLSETS— group-level control (15 Jira + 6 Confluence toolsets).TOOLSETS=default≈ 23 core tools; add extras likedefault,jira_agile.ENABLED_TOOLSallow-lists individual tools; the two intersect.JIRA_PROJECTS_FILTER/CONFLUENCE_SPACES_FILTER— limit blast radius to named projects/spaces.- Version gotcha — now shipped: v0.22.0 (2026-07-10) flipped the default from all-tools → 6 core toolsets only. On any build ≥ v0.22.0 you must set
TOOLSETS=allexplicitly to keep the old behaviour; unknown toolset names are silently ignored (all-unknown = fail-closed, zero tools). - ⚠ v0.22.0 also closed a critical transport hole. Before it, an unauthenticated
streamable-httprequest fell back to the operator's global credentials; now such requests get 401, with the old behaviour opt-in viaALLOW_GLOBAL_CRED_FALLBACK(default off). stdio deployments were never exposed. Do not set that variable to silence a post-upgrade 401 — it restores the vulnerability. v0.22.0 also confines attachment/content_filepaths to the server's working directory (use the newcontent_base64input instead of absolute paths). Seereferences/hardening.md.
Toolset tables + the read-only/filter mechanics: references/hardening.md.
Cloud vs Data Center divergence (so advice doesn't mislead)
| Aspect | Cloud | Data Center |
|---|---|---|
| Auth | username + API token / OAuth 3LO | PAT (JIRA_PERSONAL_TOKEN) / Application-Links OAuth |
| Content format | ADF | wiki markup (both auto-converted from Markdown by the tools) |
| User identifiers | accountId | username / userKey |
| Tools unavailable on DC | — | jira_batch_get_changelogs, proforma forms, confluence_get_page_views (Cloud-only APIs) |
| Custom field IDs | per-instance | per-instance — differ from Cloud; discover via jira_search_fields |
| Rate limit | ~100 req/min | instance-dependent |
Troubleshooting (pointer)
401 (PAT vs token), 403 (perms / READ_ONLY_MODE blocking writes), customfield_XXXXX not found (→ jira_search_fields), 429 (→ batch tools / ENABLED_TOOLS), SSL, timeouts, and verbose-logging/MCP Inspector debugging: references/troubleshooting.md.
What to read next
| File | Read when… |
|---|---|
references/air-gapped.md | Installing offline — the 3 artifact types, prebuilt-image mirror, build-from-source caveats, digest pinning, in-container CA |
references/auth-config.md | Choosing/setting auth (DC PAT, Cloud token, OAuth, BYOT, multi-cloud) + the full env-var catalog (SSL, proxy, headers, timeouts) |
references/hardening.md | Restricting tools — READ_ONLY_MODE, the 15+6 toolset tables, ENABLED_TOOLS, project/space filters, the v0.22 default change |
references/troubleshooting.md | A specific failure — 401/403, field-not-found, rate limits, SSL, timeouts, debug logging, MCP Inspector |
references/sources.md | Verifying/freshening a claim — per-row source + tier + verify date |
For tool usage and exhaustive refer
Content truncated.
When not to use it
- →For using the 72 tools once connected
- →For the `jira` CLI
- →For Jira/Confluence usage best practices
Limitations
- →Does not cover using the 72 tools once connected
- →Not for the `jira` CLI
- →Not for Jira/Confluence usage best practices
How it compares
This skill focuses on the setup, security, and operational aspects of integrating Jira/Confluence with an agent, providing specific guidance for air-gapped environments and internal CAs, unlike general usage instructions.
Compared to similar skills
jira-confluence-mcp side by side with the closest alternatives in the catalog.
| Skill | Installs | Updated | Safety | Difficulty |
|---|---|---|---|---|
| jira-confluence-mcp (this skill) | 0 | 2mo | Review | Advanced |
| freshservice-automation | 0 | 3mo | No flags | Intermediate |
| azure-devops-rest-api | 15 | 8mo | Review | Intermediate |
| upstash-qstash | 6 | 6mo | No flags | Intermediate |
Try saying
Example prompts that trigger this skill in your AI assistant.
You might also like
freshservice-automation
KevanPatira
Automate Freshservice ITSM tasks via Rube MCP (Composio): create/update tickets, bulk operations, service requests, and outbound emails. Always search tools first for current schemas.
azure-devops-rest-api
Tiberriver256
Guide for working with Azure DevOps REST APIs and OpenAPI specifications. Use this skill when implementing new Azure DevOps API integrations, exploring API capabilities, understanding request/response formats, or referencing the official OpenAPI specifications from the vsts-rest-api-specs repository.
upstash-qstash
davila7
Upstash QStash expert for serverless message queues, scheduled jobs, and reliable HTTP-based task delivery without managing infrastructure. Use when: qstash, upstash queue, serverless cron, scheduled http, message queue serverless.
sns
itsmostafa
AWS SNS notification service for pub/sub messaging. Use when creating topics, managing subscriptions, configuring message filtering, sending notifications, or setting up mobile push.
nginx-to-higress-migration
alibaba
Migrate from ingress-nginx to Higress in Kubernetes environments. Use when (1) analyzing existing ingress-nginx setup (2) reading nginx Ingress resources and ConfigMaps (3) installing Higress via helm with proper ingressClass (4) identifying unsupported nginx annotations (5) generating WASM plugins for nginx snippets/advanced features (6) building and deploying custom plugins to image registry. Supports full migration workflow with compatibility analysis and plugin generation.
deepgram-multi-env-setup
jeremylongshore
Configure Deepgram multi-environment setup for dev, staging, and production. Use when setting up environment-specific configurations, managing multiple Deepgram projects, or implementing environment isolation. Trigger with phrases like "deepgram environments", "deepgram staging", "deepgram dev prod", "multi-environment deepgram", "deepgram config".