atlassian
It edits a real page without losing what it does not understand
Ask for a ticket and it gets raised, after the project key, the issue type and the required fields have been checked against your Jira - so the create call is right the first time rather than coming back as a 400 nobody can read. The same install reads and writes Confluence pages, over the REST API with an API token rather than through an MCP server. The part that matters is the edit: a Confluence update replaces the whole body, so anything the tool failed to understand on the way in is gone on the way out. This one carries through what it does not recognise, then proves it can reproduce the page exactly before it writes, and refuses rather than saving a version that quietly lost something.
Install atlassian
Add the DBHQ marketplace, once
/plugin marketplace add dbhq-uk/marketplaceInstall the skill
/plugin install atlassian@dbhq
Both commands work in Claude Code and in Codex. The marketplace is a public repository you can read first: dbhq-uk/marketplace (external site)
What it is good at
Looking before it creates an issue
A create call fails when the project key, the issue type name or a required field is wrong, and issue type names are per-project: Task in one project may be Story or Work Item in another. The skill reads the projects, types and required fields first, which costs one call and saves a confusing 400.
Showing a bulk create before sending it
--dry-run prints the exact payload for every issue and sends nothing. A real batch paces itself at five requests a second to stay inside Jira's limit and reports created and failed counts at the end.
Writing a body Atlassian will accept
The REST API wants Atlassian Document Format rather than a string, which is the detail that turns a two-line script into an afternoon. You author in a small HTML dialect and the conversion happens locally, so panels, status lozenges and task lists survive instead of collapsing to plain paragraphs.
Proving it can reproduce a page before it edits one
An update replaces the whole body, so anything the tool failed to understand on the way in is gone on the way out. Before writing, it converts the live page out and back and compares the result against what the server holds. If a single node differs it refuses and names the type. Measured against a real site it reproduces every page sampled: the oldest, the newest, and a plain alphabetical sweep. The check runs before every write.
Carrying through what it does not recognise
Atlassian's format is wider than any converter's vocabulary, and every macro on a page is a node this one has never heard of. Rather than dropping them or giving up, it carries each one through untouched, so changing a paragraph leaves the macros, colours, images and inline comments around it byte for byte as they were.
Refusing a stale edit rather than overwriting one
You pass the version your change was based on. Re-reading the page immediately before writing looks like a safeguard and is the opposite of one - it makes the version number current at the instant of the write, which is exactly what stops the clash being noticed. Passing the base version is what lets somebody else's edit be caught instead of buried.
Publishing a repository's markdown to a space
A folder of documentation goes up as Confluence pages, which is the job that otherwise gets done by hand once and then never again. Pages are created and updated, so a second run is a refresh rather than a pile of duplicates.
Keeping the token off the command line
curl reads the site, the credentials and the method from a config file at mode 600, so the token never appears in ps output or in shell history. Setup verifies it against your site before writing anything, so a wrong token costs you nothing.
What it does not do
It creates and reads only
There is no delete, no bulk transition and no project or space administration. A partial bulk failure leaves the created issues in place, because the same constraint means there is nothing to roll back with. Anything destructive stays a human job in the Atlassian UI.
Cloud, not Server or Data Center
It speaks the Cloud REST API against an Atlassian-hosted site and authenticates with an API token. A self-hosted Jira or Confluence is a different API and a different auth model, and is not supported.
It would rather refuse an edit than save a lossy one
When a page contains something the converter cannot reproduce exactly, the write is refused and the node type is named. Reading is unaffected and so is publishing a new page; it is editing an existing one that is gated. A refusal you can act on beats a saved version that quietly lost a macro, and the alternative every other tool picks is the second one.
It wants a Unix shell
It is bash calling curl and jq, so on Windows it wants WSL rather than a native shell.
Read it before you install it
Every line is public and MIT licensed. The README is the long version of this page, including the parts that are still rough.