Home
Install¶
Other methods
deb, rpm and apk packages are attached to each [release](https://github.com/jjuanrivvera/atlassian-cli/releases/latest).Quickstart¶
atlassian init # site URL + credentials, verified before they are saved
atlassian doctor # config, credentials, connectivity, per-product licensing
# Jira
atlassian issues list --jql 'project = PP AND status = "In Progress"'
atlassian issues new --project PP --type Task --summary 'Rotate the signing key'
atlassian issues transition PP-1065 --to Done --resolution Fixed
atlassian issues comment PP-1065 --body 'Deployed. See the **runbook**.'
# Confluence
atlassian pages list --space-id 65537
atlassian pages new --space ENG --title Runbook --body @runbook.md
atlassian pages edit 123456 --body @runbook.md --message 'Add rollback steps'
# Jira Software
atlassian sprints list --board 42 --state active
atlassian sprints move 1234 --issue PP-1 --issue PP-2
# Jira Service Management
atlassian servicedesks queues 1
atlassian requests list --status OPEN_REQUESTS
# Both products at once
atlassian search 'signing key rotation'
What makes it different¶
The whole API, not a slice of it. The binary embeds a catalog generated from Atlassian's
own OpenAPI documents — 1,143 operations across Jira (616), Confluence v2 (218), Confluence v1
(130), Jira Software (105) and Jira Service Management (74). Everyday work has ergonomic
commands; everything else is one op call away, with parameters validated locally first:
$ atlassian op search sprint
ID PRODUCT METHOD PATH TAG SUMMARY
getAllSprints agile GET /rest/agile/1.0/board/{boardId}/sprint Board Get all sprints
createSprint agile POST /rest/agile/1.0/sprint Sprint Create sprint
swapSprint agile POST /rest/agile/1.0/sprint/{sprintId}/swap Sprint Swap sprint
…
$ atlassian op call getIssue
error: getIssue requires "issueIdOrKey"
try: atlassian op describe getIssue
That validation happens before anything is sent, from the embedded schema — no round trip, no guessing at a 400.
Markdown instead of ADF. Jira REST v3 models rich text as Atlassian Document Format and
rejects a plain string, which makes the raw API close to unusable from a shell. Pass text or
Markdown and it is converted; pass --body-adf when you need exact control. Reading goes the
other way, so a comment renders as text rather than 400 characters of nested JSON.
Versioning handled. Confluence rejects an update whose version number is not exactly
current+1. atlassian pages edit reads the current version and increments it, and resends the
existing body when only the title changes — otherwise the page is silently emptied.
Names instead of accountIds. Jira's write endpoints only accept opaque accountIds.
--assignee 'Juan Rivera', --assignee juan@example.com and --assignee me all resolve.
Data Center works. Personal access tokens, the v2 identity endpoint, self-hosted base URLs.
Built for agents. atlassian mcp serves the whole command tree as annotated MCP tools
over the same client, keyring and --dry-run. atlassian agent guard reads the live tree and
emits host safety config — irreversible operations blocked, writes gated, reads free. See
the comparison with Atlassian's own MCP server.
Output¶
Every command speaks table (default), json, yaml, csv and id:
atlassian issues list --jql 'project = PP' -o csv > issues.csv
atlassian issues list --jql 'project = PP' -o id | xargs -n1 atlassian issues get
atlassian projects list --jq '.[] | select(.projectTypeKey == "software") | .key'
CSV cells are neutralized against spreadsheet formula injection, and terminal escape sequences are stripped from API-supplied text before it reaches your terminal.
Multiple sites¶
A profile is a site, so the flag is --site:
atlassian init --name work --base-url https://acme.atlassian.net
atlassian init --name onprem --base-url https://jira.internal --deployment datacenter
atlassian issues list --site onprem --jql 'project = OPS'
atlassian config use work
Credentials go to the OS keyring — never to the config file. On a headless box, set
ATLASSIAN_KEYRING_PASSWORD for the AES-256-GCM encrypted-file store, or force it with
ATLASSIAN_KEYRING_BACKEND=file.
Safety¶
--dry-runprints the equivalentcurl, credential redacted, and sends nothing.- Deletes prompt, and refuse outright when stdin is not a terminal — pass
--yesto script them. - Only idempotent methods are ever retried; a POST is never re-sent, so a timeout cannot create a second issue.
Retry-Afteris honoured, and the rate limiter adapts to the quota headers Atlassian sends.- Ctrl-C cancels in-flight pagination and retry backoff.
Documentation¶
| Command reference | Every command, generated from the binary |
| Comparison | Against Atlassian's Rovo MCP server, acli and jira-cli |
| OAuth setup | Creating a developer app, if you need --method oauth2 |
| DECISIONS.md | Why the CLI behaves the way it does |
| AGENTS.md | Contributing, and the build gate |
License¶
MIT. Not affiliated with or endorsed by Atlassian.