atlassian

star 3

Load this skill when reading from or writing to Jira Cloud or Confluence Cloud — searching issues, fetching a specific Jira issue or Confluence page, listing or performing workflow transitions, creating/updating issues, commenting on issues, publishing or updating Confluence pages, or understanding the atlassian MCP tools.

prismatic-koi By prismatic-koi schedule Updated 5/21/2026

name: atlassian description: Load this skill when reading from or writing to Jira Cloud or Confluence Cloud — searching issues, fetching a specific Jira issue or Confluence page, listing or performing workflow transitions, creating/updating issues, commenting on issues, publishing or updating Confluence pages, or understanding the atlassian MCP tools.

Atlassian Skill — Jira and Confluence via pi atlassian-mcp

When to load

Load this skill when:

  • Searching Jira issues with JQL (e.g. "find all open bugs in project FOO").
  • Fetching a specific Jira issue by key (e.g. "get the details of FOO-123").
  • Creating or updating Jira issues from postmortem notes, investigation summaries, etc.
  • Adding a comment to a Jira issue.
  • Transitioning an issue through a workflow (e.g. "move FOO-123 to In Progress").
  • Looking up available workflow transitions for a Jira issue.
  • Searching Confluence pages with CQL.
  • Fetching a specific Confluence page by ID.
  • Publishing a new Confluence page from a markdown document.
  • Updating an existing Confluence page (fetch-edit-push pattern).

Integration: pi atlassian-mcp extension

Atlassian operations are performed via the pi atlassian-mcp extension — a TypeScript extension bundled with pi that connects to mcp.atlassian.com using OAuth PKCE. Use the MCP tools listed below; there is no separate command-line surface.

Authentication

Authentication is via OAuth PKCE (not API tokens). Tokens are stored in ~/.pi/agent/atlassian-mcp-oauth.json and refreshed automatically on expiry.

To log in or re-authenticate, run /login-atlassian inside a pi session. This opens a browser-based authorization flow.

The ATLASSIAN_SITE, ATLASSIAN_EMAIL, and ATLASSIAN_API_TOKEN environment variables are not used by the pi MCP extension and are not forwarded into agent sandboxes.

cloudId — single-site vs multi-site setup

Most Atlassian MCP tools require a cloudId parameter (UUID identifying your Atlassian site). How you handle this depends on how the host is configured:

Single-site setup (default cloud ID configured)

If nx.programs.prism.pi.atlassian.defaultCloudId is set in the NixOS config (exposed as ATLASSIAN_DEFAULT_CLOUD_ID), the extension automatically injects the default cloud ID into every tool call that omits it. In this setup:

  • Do not pass cloudId on tool calls — it is injected automatically.
  • Do not call getCloudId or getAccessibleAtlassianResources first — those round-trips are unnecessary.
  • Tool descriptions will mark cloudId as optional and document the default.

Example for thankyoupayroll.atlassian.net (cloudId 08986a80-a6ed-4480-ae2d-4a439d50d71b):

getJiraIssue(issueIdOrKey: "PLAT-182")
# cloudId is omitted — the default is injected automatically

Multi-site setup (no default configured)

If no default is configured, cloudId is required on every call. Discover valid cloud IDs with:

getAccessibleAtlassianResources()
# or
getCloudId()  # if you have a site link or only an issue key

Then pass the UUID explicitly on each tool call.

Available tools (31 tools via OAuth)

The extension exposes the full Jira and Confluence CRUD surface:

Identity / discovery

  • atlassianUserInfo — who am I
  • getAccessibleAtlassianResources — list sites

Jira

  • getJiraIssue — fetch an issue by key
  • searchJiraIssuesUsingJql — JQL search
  • createJiraIssue — file a new issue
  • editJiraIssue — update issue fields
  • addCommentToJiraIssue — comment on an issue
  • getTransitionsForJiraIssue — list available transitions (falls back to REST API if upstream returns empty)
  • transitionJiraIssue — move an issue to a new status by transition ID
  • transitionJiraIssueByName — move an issue to a new status by transition name (preferred; resolves name to ID automatically)
  • getJiraIssueRemoteIssueLinks — remote links
  • getVisibleJiraProjects — list projects
  • getJiraProjectIssueTypesMetadata — issue type metadata for a project
  • getJiraIssueTypeMetaWithFields — field metadata for a specific issue type
  • lookupJiraAccountId — resolve a user to an account ID
  • addWorklogToJiraIssue — log time
  • getIssueLinkTypes — list issue link types
  • createIssueLink — link two issues

Confluence

  • getConfluencePage — fetch a page by ID
  • searchConfluenceUsingCql — CQL search
  • getConfluenceSpaces — list spaces
  • getPagesInConfluenceSpace — list pages in a space
  • getConfluencePageFooterComments — footer comments
  • getConfluencePageInlineComments — inline comments
  • getConfluenceCommentChildren — comment threads
  • getConfluencePageDescendants — child pages
  • createConfluencePage — publish a new page
  • updateConfluencePage — update an existing page
  • createConfluenceFooterComment — add a footer comment
  • createConfluenceInlineComment — add an inline comment

General

  • search — cross-product search
  • fetch — fetch an arbitrary Atlassian URL

Common patterns

Jira: search and fetch

# Search for open issues in a project
searchJiraIssuesUsingJql(jql: "project = FOO AND status != Done ORDER BY created DESC", maxResults: 20)

# Fetch a specific issue
getJiraIssue(issueKey: "FOO-123")

Jira: create an issue

createJiraIssue(
  projectKey: "FOO",
  issueType: "Task",
  summary: "Investigate memory leak in worker pool",
  description: "## What happened\n\nSaw OOM errors in production...",
)

Jira: comment and transition

# Comment
addCommentToJiraIssue(issueKey: "FOO-123", comment: "Confirmed fixed in staging.")

# Transition by name (preferred — no need to look up transition IDs)
transitionJiraIssueByName(issueIdOrKey: "FOO-123", transitionName: "In Progress")

# Or: list transitions, then transition by ID
getTransitionsForJiraIssue(issueKey: "FOO-123")
transitionJiraIssue(issueKey: "FOO-123", transitionId: "31")

The transitionJiraIssueByName tool resolves the transition name case-insensitively and calls through to transitionJiraIssue automatically. If the name matches no available transition, it returns an error listing the available names. getJiraIssue also returns a transitions array so you can see available transitions alongside the issue data.

Lifecycle: when to transition a ticket

A Jira board reflects reality only when agents keep ticket state in sync with actual work. Transition tickets at the right moments so humans can trust the board at a glance.

Mandatory transitions

1. When work starts → transition to In Progress

As soon as you begin acting on a ticket — first commit, first PR draft, first substantive investigation that produces output — transition it to In Progress:

# You have been asked to action PLAT-123. Before your first commit:
transitionJiraIssueByName(issueIdOrKey: "PLAT-123", transitionName: "In Progress")
# Now begin the work.

2. When work completes → transition to the terminal state

Once the work is done — PR merged, doc published, change deployed — transition the ticket to its closed state:

# PR has been merged. Transition the ticket:
transitionJiraIssueByName(issueIdOrKey: "PLAT-123", transitionName: "Done")

The terminal state name varies by project workflow. Done is the default; if it is not available, call getTransitionsForJiraIssue (or read the transitions array returned by getJiraIssue) to find the correct closed state for this project — Closed, Resolved, Complete, or similar.

Read-only interactions — keep the state as-is

When you are reading a ticket purely for context — gathering background, summarising the issue, or evaluating whether to action it — the ticket state stays exactly as it is. Transition only when you actually begin or finish work.

Coordinator / worker boundary

The coordinator that files a ticket and spawns a worker leaves the ticket in its initial state — the worker owns the In Progress transition at the moment it starts. After the PR merges, the coordinator verifies the ticket reached a terminal state and transitions it if the worker has not already done so.

Blocked or handed-off tickets (judgement call)

If you escalate, hand off to a human, or otherwise pause on a ticket before completion, add a comment explaining the situation and optionally transition to a suitable intermediate state (Blocked, In Review, etc.) based on what is available in the project workflow.


Confluence: fetch-edit-push

# 1. Find the page
searchConfluenceUsingCql(cql: 'space = ENG AND title = "Architecture Overview"', limit: 1)

# 2. Fetch its body
getConfluencePage(pageId: "123456789")

# 3. Push an update
updateConfluencePage(
  pageId: "123456789",
  title: "Architecture Overview",
  body: "<updated markdown content>",
)

Output slimming

The pi atlassian-mcp extension applies the same field-drop sets as the prism MCP proxy, removing verbose metadata (expand, self, iconUrl, avatarUrls, renderedFields, operations, etc.) so tool outputs are compact enough to fit in context.


Troubleshooting

  • "Not logged in" / auth error: run /login-atlassian in your pi session to complete the OAuth flow.
  • Token expired: the extension refreshes tokens automatically on each session_start. If refresh fails, /login-atlassian again.
  • Permission error on a specific tool: some Atlassian tools require admin scopes. Check whether your account has the necessary Jira/Confluence permissions.
  • Debug logging: set ATLASSIAN_MCP_DEBUG=1 in the environment to get MCP request/response logs on stderr.
Install via CLI
npx skills add https://github.com/prismatic-koi/nixos-config --skill atlassian
Repository Details
star Stars 3
call_split Forks 0
navigation Branch main
article Path SKILL.md
More from Creator
prismatic-koi
prismatic-koi Explore all skills →