Confluence Markdown Sync

VerifiedSafe

Sync Confluence wiki pages with local Markdown files. Pull pages for editing or push local Markdown edits back to an existing wiki page.

Sby Skills Guide Bot
DocumentationIntermediate
7/23/2026
Claude CodeCursorWindsurfCopilotCodex
#confluence#markdown#wiki-sync#mcp#attachments

Recommended for

Automated summary

Syncs Confluence wiki pages with local Markdown files through an MCP server, so pages can be read, edited and published back.

Strengths

  • Two-way sync with automatic attachment handling (images downloaded on pull, uploaded on push)
  • Front matter written by pull_page (page_id, title, space_key, version) lets push_page work without re-supplying the page ID
  • read_page gives an in-memory preview without writing anything to disk
  • URL-encoded attachment targets keep links intact through a Markdown parser round trip

Limitations

  • Creating brand-new pages is explicitly out of scope for this version
  • Requires the confluence-markdown-mcp server preconfigured with Atlassian credentials (email + API token or PAT)
  • Non-image file links are only uploaded when the <!--cm-attachment--> marker directly follows the link, which is easy to forget
  • No conflict detection or merge behaviour is described for concurrent edits of the same page
When to use it

Use it when a Confluence page needs to be pulled down as local Markdown, edited, and pushed back to the same existing page.

When not to use it

Avoid it for creating a new Confluence page, for bulk syncing many pages at once, or when Atlassian credentials and the MCP server are not available.

Security analysis

Safe
Quality score80/100

The skill is pure documentation for driving an MCP wiki-sync server. It handles API tokens but only via environment variables, contains no destructive, obfuscated, or exfiltrating instructions, and the only outbound data flow (page/attachment upload) is the tool's stated legitimate purpose.

Findings
  • •Reads Confluence credentials (CONFLUENCE_EMAIL/CONFLUENCE_API_TOKEN or CONFLUENCE_PAT) from environment variables; it never instructs the model to echo, log, or transmit them elsewhere.
  • •push_page uploads local Markdown files plus referenced images and marker-tagged attachments to the user's Confluence instance — expected for a sync tool, but it does move local file content off the machine.
  • •Relies on an external MCP server (confluence-markdown-mcp) for all network operations; no shell commands, curl|sh, rm -rf, base64 payloads, or safety-disabling instructions appear in the skill.
  • •Iframe embeds are restricted to http/https and dangerous attributes (onload, srcdoc, sandbox) are stripped, which is a sane safety posture.
How this analysis is made

Examples

Pull a page for editing
Pull Confluence page 123456 into ./docs so I can edit it locally, then show me the file path you got.
Push local edits back
Push my changes in docs/Release-Notes.md back to Confluence page 123456 and confirm the attachments uploaded correctly.
Read without writing
Use read_page to summarise Confluence page 987654 for me — don't write any files to disk.

name: confluence-markdown description: Sync Confluence wiki pages with local Markdown files through an MCP server. Use it to pull a page down for editing, or push local Markdown edits back to an existing wiki page. version: 0.2.0

confluence-markdown skill

This skill teaches an MCP-capable assistant how to work with the confluence-markdown-mcp server.

🇨🇳 中文版本见 skill.zh-CN.md。

When to use

Invoke this skill whenever the user wants to:

  • Read / fetch a Confluence wiki page for editing, summarisation or quotation (use pull_page with output_dir, or read_page if you only need the content).
  • Edit and publish local Markdown changes back to Confluence (use push_page with the exact path and page_id).
  • Preview a page inline – access the confluence://page/{page_id} resource.

Do not use it for creating brand-new pages; that is out of scope in the current version. Attachments referenced by the page (images and file links) are synchronised automatically in both directions — downloaded alongside the Markdown file on pull_page, and created / updated on push_page.

Prerequisites

The server reads credentials from environment variables. Confirm with the user that the following are set before the first call:

  • CONFLUENCE_BASE_URL – e.g. https://<tenant>.atlassian.net
  • CONFLUENCE_EMAIL + CONFLUENCE_API_TOKEN – Atlassian account email and API token for Basic auth
  • CONFLUENCE_PAT – Personal Access Token for Bearer auth

Optional:

  • CONFLUENCE_TIMEOUT – HTTP timeout in seconds (default 30)
  • CONFLUENCE_MARKDOWN_DIR – default root for relative output_dirs

Authentication is either/or: use email + API token for Basic auth, or set CONFLUENCE_PAT for Bearer auth. If both are present, the PAT is used.

Tools provided

pull_page(page_id: string, output_dir?: string)

Downloads a Confluence page. When output_dir is provided it must be a directory – the Markdown file name is generated automatically by the server from the page title (unsafe characters are stripped), so the caller should never pass a full file path. The resulting file contains YAML-style front matter (page_id, title, space_key, version) and the response includes markdown_preview plus the resolved path. Without output_dir, the full Markdown body is returned in markdown.

push_page(file_path: string, page_id?: string, title?: string)

Uploads a local Markdown file back to Confluence. The target page_id may be omitted if the file carries it in its front matter (which pull_page writes automatically). title defaults to the front-matter title or the page's current title.

Attachment upload rules on push:

  • Image references are uploaded automatically, for example ![image](attachments/example.png).
  • Ordinary file links are uploaded only when the link is immediately followed by <!--cm-attachment-->, for example [file](attachments/example.eml) <!--cm-attachment-->.
  • The marker must come after the link. <!--cm-attachment-->[file](...) is not recognised.
  • pull_page / read_page URL-encode Markdown attachment targets when the filename contains spaces, parentheses, or non-ASCII characters so the link survives a round trip through Markdown parsers.
  • URL-encoded local paths are decoded before matching and naming the attachment, so an encoded path and the decoded local filename stay in sync on upload and in the page body.

read_page(page_id: string)

Convenience wrapper around pull_page that never writes to disk – returns the Markdown body plus basic metadata.

Recommended workflow

  1. Ask the user for the Confluence page ID (and optional local path).
  2. Call pull_page with an output_dir; confirm the new file location (the filename is produced from the page title by the server).
  3. Propose Markdown edits; have the user review before uploading.
  4. Call push_page with the same file_path; display the returned new version.

Formatting guarantees

The server handles the following Confluence storage-format constructs when converting to Markdown, and reverses the process on upload:

| Storage format | Markdown | | --- | --- | | code macro (with language + CDATA) | Fenced code block ```lang | | info / note / warning / tip | > [!INFO] blockquote admonition | | <table> with <th>/<td> | Pipe table (first row as header) | | <ul>/<ol>/<li> (nested) | - / 1. list (2-space indent) | | <ac:task-list> with <ac:task> | - [ ] / - [x] task items | | <a> / <img> | [text](url) / ![alt](src) | | <span style="color: …; background-color: …"> | Same <span> verbatim | | <p style="text-align: left/right/center/justify"> | Same <p> verbatim | | Inline <u>, <s>/<del>, <ins>, <sub>, <sup>, <br> | Same tag verbatim | | html / html-bobswift macro (embedded <iframe>, e.g. drawio / diagrams.net) | Raw HTML body is unwrapped into a Markdown <iframe …></iframe> line; push re-wraps it in html-bobswift automatically | | Any other <ac:structured-macro> | HTML comment token that round-trips |

Because unknown macros are preserved as comments, do not delete them in an edit unless the user explicitly asks to remove that block.

drawio / iframe embeds

Confluence renders drawio / diagrams.net diagrams through an <iframe> inside an html-bobswift (or html) user macro. On pull the iframe is unwrapped onto a single Markdown line; on push the server re-wraps it in the same macro so Confluence can render it. Iframe src attributes are restricted to http / https URLs and non-allow-listed attributes (onload, srcdoc, sandbox, …) are dropped so unsafe embeds cannot leak through a round-trip.

Error handling

  • RuntimeError: Missing Confluence credentials... → remind the user to export the required environment variables.
  • ConfluenceError: (401 Unauthorized) → the API token or PAT is invalid, expired, or lacks permission.
  • ConfluenceError: (404 Not Found) → double-check the page_id.
  • FileNotFoundError on push_page → verify the absolute file path.

Always surface the returned version number after a push_page call so the user can confirm the update.

From the file to a first result

The download contains exactly the content displayed on this page. This copy may differ from the latest version in the source repository.

View the source and supporting files

This download contains SKILL.md only. Any scripts, references, templates and dependencies are not included. Get the required files from the source, preserving their directory structure, before continuing.

1. Download the file

Download SKILL.md

From the root of a test project, save the file as .skill-downloads/confluence-markdown-sync-mrx3y0iz/SKILL.md, or use the command below. This folder is for inspecting the skill before installation.

Command for macOS/Linux or WSL: requires a POSIX shell and curl. On Windows without WSL, use the download button and create the folder manually.

mkdir -p '.skill-downloads/confluence-markdown-sync-mrx3y0iz' && curl --fail --show-error --location 'https://skills-guides.com/api/skills/confluence-markdown-sync-mrx3y0iz/download' --output '.skill-downloads/confluence-markdown-sync-mrx3y0iz/SKILL.md.part' && mv '.skill-downloads/confluence-markdown-sync-mrx3y0iz/SKILL.md.part' '.skill-downloads/confluence-markdown-sync-mrx3y0iz/SKILL.md'

2. Check prerequisites

Read SKILL.md before using it. If it references scripts or external services, inspect them and prepare the required access in your test environment.

Original excerpt: Prerequisites

The server reads credentials from environment variables. Confirm with the user that the following are set before the first call:

  • CONFLUENCE_BASE_URL – e.g. https://<tenant>.atlassian.net
  • CONFLUENCE_EMAIL + CONFLUENCE_API_TOKEN – Atlassian account email and API token for Basic auth
  • CONFLUENCE_PAT – Personal Access Token for Bearer auth

Optional:

  • CONFLUENCE_TIMEOUT – HTTP timeout in seconds (default 30)
  • CONFLUENCE_MARKDOWN_DIR – default root for relative output_dirs

Authentication is either/or: use email + API token for Basic auth, or set CONFLUENCE_PAT for Bearer auth. If both are present, the PAT is used.

The platforms on this page are catalog indications. The paths below follow tool documentation; they do not prove this skill has been run in those tools. No minimum tool version is confirmed for this listing.

3. Load the skill

After inspection, copy the complete folder into your project using one of the commands below, then open a new tool session. The command stops if a folder with the same name already exists: compare the files before replacing it.

Claude Code
test -f '.skill-downloads/confluence-markdown-sync-mrx3y0iz/SKILL.md' && test -s '.skill-downloads/confluence-markdown-sync-mrx3y0iz/SKILL.md' && mkdir -p '.claude/skills' && test ! -e '.claude/skills/confluence-markdown' && cp -R '.skill-downloads/confluence-markdown-sync-mrx3y0iz' '.claude/skills/confluence-markdown'

Cursor
test -f '.skill-downloads/confluence-markdown-sync-mrx3y0iz/SKILL.md' && test -s '.skill-downloads/confluence-markdown-sync-mrx3y0iz/SKILL.md' && mkdir -p '.cursor/skills' && test ! -e '.cursor/skills/confluence-markdown' && cp -R '.skill-downloads/confluence-markdown-sync-mrx3y0iz' '.cursor/skills/confluence-markdown'

Codex
test -f '.skill-downloads/confluence-markdown-sync-mrx3y0iz/SKILL.md' && test -s '.skill-downloads/confluence-markdown-sync-mrx3y0iz/SKILL.md' && mkdir -p '.agents/skills' && test ! -e '.agents/skills/confluence-markdown' && cp -R '.skill-downloads/confluence-markdown-sync-mrx3y0iz' '.agents/skills/confluence-markdown'

OpenSkills

OpenSkills must already be installed. The local install/read procedure is checked with OpenSkills 1.5.0, which requires Node.js ≥ 20.6.0. Catalog slugs are not resolved automatically.

Official OpenSkills installation
openskills install './.skill-downloads/confluence-markdown-sync-mrx3y0iz'

openskills read 'confluence-markdown-sync-mrx3y0iz'

Reading should display the installed file content and its base directory. It does not run the skill or install its dependencies.

For an agent that reads AGENTS.md, then sync the index. This command changes AGENTS.md: review the diff before using it.

openskills sync

Manual method or another tool: attach SKILL.md to a conversation, or open it in an agent that can read files. Include any required supporting resources. No universal folder is recognized by every tool.

4. Try a first task

Use a short, synthetic input: an API endpoint, a small document or an interface brief. In a new conversation, attach the file or give the agent its path, then adapt this request:

Read .skill-downloads/confluence-markdown-sync-mrx3y0iz/SKILL.md and apply its instructions to this example: [describe a test input]. Identify any missing files, dependencies or access. Produce the result requested by the skill without inventing data or running unreviewed scripts.

Expected result: output matching the skill instructions, or a precise list of missing prerequisites. A read confirmation alone does not validate a first use. If an external resource is unavailable, that path remains untested.

Related skills