Back to list
zenobi-us

jira

by zenobi-us

my workstation setup for linux, windows and mac

25🍴 4📅 Jan 22, 2026

SKILL.md


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")'
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

ScriptPurpose
./scripts/get_ticket_summary.shOne-shot ticket summary - Get all ticket info in one call (human or JSON format)
./scripts/get_current_user.shGet authenticated user info (accountId, displayName, email)
./scripts/get_cloud_id.shGet Jira Cloud ID and URL

Common Issues & Solutions

ProblemSolution
No cloud ID availableRun ./scripts/get_cloud_id.sh to fetch and export it
Need current user infoUse ./scripts/get_current_user.sh to fetch accountId, displayName, email
Search returns 0 resultsVerify JQL syntax. Try status = Open instead of status = "To Do". Test queries in Jira UI first.
PR link not found in remoteIssueLinksNot 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 failsUse function-call syntax, NOT flag syntax. Parameters go inside functionName(param: value) not --param value
Arrays not workingUse bracket notation inside function call: fields: ["key", "summary"] NOT --fields '["key","summary"]'
Objects not workingUse 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

Score

Total Score

65/100

Based on repository quality metrics

SKILL.md

SKILL.mdファイルが含まれている

+20
LICENSE

ライセンスが設定されている

+10
説明文

100文字以上の説明がある

0/10
人気

GitHub Stars 100以上

0/15
最近の活動

1ヶ月以内に更新

+10
フォーク

10回以上フォークされている

0/5
Issue管理

オープンIssueが50未満

+5
言語

プログラミング言語が設定されている

+5
タグ

1つ以上のタグが設定されている

+5

Reviews

💬

Reviews coming soon