jira

Master Jira automation and integration using the atlassian MCP server. This skill enables programmatic access to Jira issues, projects, and metadata.

Safety Notice

This listing is imported from skills.sh public index metadata. Review upstream SKILL.md and repository scripts before running.

Copy this and send it to your AI assistant to learn

Install skill "jira" with this command: npx skills add zenobi-us/dotfiles/zenobi-us-dotfiles-jira

JIRA Skill

Master Jira automation and integration using the atlassian MCP server. This skill enables programmatic access to Jira issues, projects, and metadata.

[!CRITICAL] ⚠️ IMPORTANT - Parameter Passing:

Use function-call syntax (NOT flag syntax). Parameters go inside the function call, not as flags:

mcporter call 'atlassian.functionName(cloudId: "'$JIRA_CLOUD_ID'", issueIdOrKey: "PROJ-123", fields: ["key", "summary"])'

Key Rules:

  • Parameters are camelCase inside the function call

  • String values use double quotes: "value"

  • Array values use bracket notation: ["item1", "item2"]

  • Object values use object notation: {key: "value"}

  • Environment variables are interpolated outside quotes: "'$VAR'"

  • NO --flag syntax, NO JSON string escaping needed

Quick Setup

Get Ticket Summary (One-Shot)

The fastest way to get ticket information:

mise x node@20 -- ./scripts/get_ticket_summary.sh TICKET-123

Returns human-readable summary with:

  • Key, summary, type, status, priority, assignee

  • Created/updated timestamps

  • Full description

  • Linked resources (PRs, etc.)

  • Direct link to Jira

JSON output for parsing:

mise x node@20 -- ./scripts/get_ticket_summary.sh TICKET-123 --json

Returns structured JSON with ticket and remoteLinks objects.

Get Current User Info

mise x node@20 -- ./scripts/get_current_user.sh

Returns: accountId , displayName , email

Or get specific fields:

mise x node@20 -- ./scripts/get_current_user.sh --account-id mise x node@20 -- ./scripts/get_current_user.sh --email mise x node@20 -- ./scripts/get_current_user.sh --display-name

Get Cloud ID (Required for all operations)

export JIRA_CLOUD_ID=$(mise x node@20 -- ./scripts/get_cloud_id.sh) export JIRA_URL=$(mise x node@20 -- ./scripts/get_cloud_id.sh --url)

This sets up environment variables for all subsequent mcporter calls.

Core Operations

Search Issues

mise x node@20 -- mcporter call 'atlassian.searchJiraIssuesUsingJql(cloudId: "'$JIRA_CLOUD_ID'", jql: "assignee = currentUser() AND status = Open")'

With specific fields:

mise x node@20 -- mcporter call 'atlassian.searchJiraIssuesUsingJql(cloudId: "'$JIRA_CLOUD_ID'", jql: "assignee = currentUser()", fields: ["key", "summary", "status", "assignee"])'

With pagination:

mise x node@20 -- mcporter call 'atlassian.searchJiraIssuesUsingJql(cloudId: "'$JIRA_CLOUD_ID'", jql: "assignee = currentUser()", maxResults: 50)'

Returns: issues[] array with key , fields.summary , fields.status.name

Common JQL:

  • assignee = currentUser()

  • Issues assigned to you

  • status = Open

  • Filter by status

  • project = PROJ

  • Specific project

  • updated >= -7d

  • Updated in last 7 days

  • issuetype = Bug

  • Specific issue type

Get Issue Details

mise x node@20 -- mcporter call 'atlassian.getJiraIssue(cloudId: "'$JIRA_CLOUD_ID'", issueIdOrKey: "PROJ-123")'

With specific fields:

mise x node@20 -- mcporter call 'atlassian.getJiraIssue(cloudId: "'$JIRA_CLOUD_ID'", issueIdOrKey: "PROJ-123", fields: ["key", "summary", "status", "assignee", "description"])'

With expand for additional details:

mise x node@20 -- mcporter call 'atlassian.getJiraIssue(cloudId: "'$JIRA_CLOUD_ID'", issueIdOrKey: "PROJ-123", expand: ["changelog", "editmeta"])'

Returns: Full issue object with key , fields (summary, status, assignee, description, etc)

Get Issue Transitions

mise x node@20 -- mcporter call 'atlassian.getTransitionsForJiraIssue(cloudId: "'$JIRA_CLOUD_ID'", issueIdOrKey: "PROJ-123")'

Returns: List of available transitions with IDs and names for workflow state changes

Transition Issue to New Status

mise x node@20 -- mcporter call 'atlassian.transitionJiraIssue(cloudId: "'$JIRA_CLOUD_ID'", issueIdOrKey: "PROJ-123", transition: {id: "11"})'

With field updates:

mise x node@20 -- mcporter call 'atlassian.transitionJiraIssue(cloudId: "'$JIRA_CLOUD_ID'", issueIdOrKey: "PROJ-123", transition: {id: "11"}, fields: {assignee: {id: "USER_ID"}})'

Get Project Metadata

mise x node@20 -- mcporter call 'atlassian.getJiraProjectIssueTypesMetadata(cloudId: "'$JIRA_CLOUD_ID'", projectIdOrKey: "PROJ")'

Edit Jira Issue Fields

TODO: Add example for updating fields on an issue

Add Comment to Issue

mise x node@20 -- mcporter call 'atlassian.addCommentToJiraIssue(cloudId: "'$JIRA_CLOUD_ID'", issueIdOrKey: "PROJ-123", commentBody: "Your comment here")'

With GitHub permalink:

mise x node@20 -- mcporter call 'atlassian.addCommentToJiraIssue(cloudId: "'$JIRA_CLOUD_ID'", issueIdOrKey: "PROJ-123", commentBody: "See implementation details:\n\nhttps://github.com/owner/repo/blob/commit-hash/path/to/file.ts#L123")'

Returns: Comment object with id , body , author , created , updated

Create New Issue

TODO: Add example for creating a new issue

Get Issue Type Metadata

mise x node@20 -- mcporter call 'atlassian.getJiraIssueTypeMetaWithFields(cloudId: "'$JIRA_CLOUD_ID'", projectIdOrKey: "PROJ", issueTypeId: "10001")'

Get Related Links (PRs, Confluence, etc)

mise x node@20 -- mcporter call 'atlassian.getJiraIssueRemoteIssueLinks(cloudId: "'$JIRA_CLOUD_ID'", issueIdOrKey: "PROJ-123")'

Returns: remoteIssueLinks[] array with linked resources

Filter for GitHub PRs:

mise x node@20 -- mcporter call 'atlassian.getJiraIssueRemoteIssueLinks(cloudId: "'$JIRA_CLOUD_ID'", issueIdOrKey: "PROJ-123")' |
jq '.[]? | select(.type.name == "GitHub" or (.globalId | contains("github"))) | .object.url'

Helper Scripts

Script Purpose

./scripts/get_ticket_summary.sh

One-shot ticket summary - Get all ticket info in one call (human or JSON format)

./scripts/get_current_user.sh

Get authenticated user info (accountId, displayName, email)

./scripts/get_cloud_id.sh

Get Jira Cloud ID and URL

Common Issues & Solutions

Problem Solution

No cloud ID available Run ./scripts/get_cloud_id.sh to fetch and export it

Need current user info Use ./scripts/get_current_user.sh to fetch accountId, displayName, email

Search returns 0 results Verify JQL syntax. Try status = Open instead of status = "To Do" . Test queries in Jira UI first.

PR link not found in remoteIssueLinks

Not all PRs auto-link. Check if "Link" was created in GitHub/Jira.

Transition fails with "Cannot transition" Wrong transition ID. Always run getTransitionsForJiraIssue first to see valid transitions for current status.

"Invalid arguments" or command fails Use function-call syntax, NOT flag syntax. Parameters go inside functionName(param: value) not --param value

Arrays not working Use bracket notation inside function call: fields: ["key", "summary"] NOT --fields '["key","summary"]'

Objects not working Use object notation inside function call: transition: {id: "11"} NOT --transition '{"id":"11"}'

Discovering Function Parameters with Schema Introspection

The mcporter CLI can introspect the MCP server schema to discover correct parameters and their types.

List All Available Tools

mise x node@20 -- mcporter list atlassian --json | jq -r ".tools[].name"

Returns:

atlassianUserInfo getAccessibleAtlassianResources getConfluenceSpaces getConfluencePage getPagesInConfluenceSpace getConfluencePageFooterComments getConfluencePageInlineComments getConfluencePageDescendants createConfluencePage updateConfluencePage createConfluenceFooterComment createConfluenceInlineComment searchConfluenceUsingCql getJiraIssue editJiraIssue createJiraIssue getTransitionsForJiraIssue transitionJiraIssue lookupJiraAccountId searchJiraIssuesUsingJql addCommentToJiraIssue addWorklogToJiraIssue getJiraIssueRemoteIssueLinks getVisibleJiraProjects getJiraProjectIssueTypesMetadata getJiraIssueTypeMetaWithFields search fetch

Inspect a Specific Tool Schema

mise x node@20 -- mcporter list atlassian --json | jq '.tools[] | select(.name == "addCommentToJiraIssue")'

This returns the full JSON schema including:

  • inputSchema.properties

  • All available parameters with types and descriptions

  • inputSchema.required

  • Which parameters are mandatory

  • options

  • CLI-specific metadata for each parameter

Filter for just required parameters:

mise x node@20 -- mcporter list atlassian --json |
jq '.tools[] | select(.name == "addCommentToJiraIssue") | .inputSchema.required[]'

Get parameter descriptions:

mise x node@20 -- mcporter list atlassian --json |
jq '.tools[] | select(.name == "addCommentToJiraIssue") | .inputSchema.properties | to_entries[] | "(.key): (.value.description)"'

This introspection approach works for any tool - just change the tool name in the select() filter.

Tips

Setup once per session:

export JIRA_CLOUD_ID=$(mise x node@20 -- ./scripts/get_cloud_id.sh) export JIRA_URL=$(mise x node@20 -- ./scripts/get_cloud_id.sh --url)

Function-call syntax is the mcporter standard - use mcporter call 'func(param: value)' not flags

Always use getTransitionsForJiraIssue before transitioning - transition IDs vary by project workflow

Interpolate env vars outside the quotes: mcporter call 'func(cloudId: "'$VAR'")' works, but mcporter call 'func(cloudId: "$VAR")' does not

Use jq for JSON parsing in shell scripts

Use schema introspection when unsure about parameters - mcporter list atlassian --json | jq is your friend

See examples/ directory for full workflow examples

Source Transparency

This detail page is rendered from real SKILL.md content. Trust labels are metadata-based hints, not a safety guarantee.

Related Skills

Related by shared tags or category signals.

Coding

ast-grep-code-analysis

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

codemapper

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

subagent-driven-development

No summary provided by upstream source.

Repository SourceNeeds Review
Coding

test-driven-development

No summary provided by upstream source.

Repository SourceNeeds Review