360 Secure SkillHub
360 安全技能中心

jira-ticket

按六个阶段把用户请求解析为 Jira 票单字段(项目、类型、标题、优先级、标签等),必要时先用网络检索补充背景,将描述组装为 ADF 文档,先校验项目与字段,再用 curl 调用 Jira REST API v3 创建 issue 并回报 issue key。需要 curl、jq 及 Jira 相关环境变量。

cehd5170
cehd5170
热度 46.87
最近更新 2026-05-11 17:34:20
分类:协作依赖:代码执行 / 第三方 API / MCP 服务应用场景:任务管理 / 研究 / API 集成 / 工作流

安装技能

复制下面的话术发给你的 Agent,它会通过 secure-skills 检索并安装该技能。

执行命令安装此 skill: npx secure-skills-cli add jira-ticket
Metadata
name
jira-ticket
description
Create Jira tickets with web-researched content. Use when asked to create, file, or open a Jira issue/ticket/story/bug/task, especially when the ticket content should be informed by web research or search results. Triggers on phrases like 'create a Jira ticket', 'file a Jira issue', 'open a bug in Jira', 'make a Jira story with research'.
user-invocable
true
metadata
{"openclaw":{"emoji":"🎫","requires":{"bins":["curl","jq"],"env":["JIRA_API_TOKEN","JIRA_EMAIL","JIRA_BASE_URL"]}}}

Jira Ticket Creator with Web Research

Create Jira tickets whose content is enriched by web search. Follow these phases in order.

Setup

Three environment variables are required:

All Jira API calls use Basic auth via curl -u and force HTTP/1.1:

curl --http1.1 -s -u "$JIRA_EMAIL:$JIRA_API_TOKEN" -H "Content-Type: application/json" "$JIRA_BASE_URL/rest/api/3/..."

Phase 1 — Parse Arguments

Parse the user's request to extract:

Field Required Description
project yes Jira project key (e.g. ENG, OPS)
issuetype no Task, Bug, Story, Epic (default: Task)
summary yes Short title for the ticket
search_query no Topic to web-search for enriching the description
priority no Highest, High, Medium, Low, Lowest (default: Medium)
assignee no Atlassian account email or ID
labels no Comma-separated labels
components no Comma-separated component names

If the user does not provide a project key, ask for it before proceeding.


Phase 2 — Web Research (if applicable)

If the user asked for research, or if the ticket would benefit from context (e.g. a bug report referencing an external API, a story about integrating a third-party service):

  1. Use the web_search tool to search for the relevant topic.
  2. Use the xurl tool or curl to fetch key pages for details.
  3. Extract the most relevant information: error descriptions, API docs, best practices, version notes, or solution approaches.

Compile findings into a structured summary:

### Research Summary
- **Source**: [URL]
- **Key findings**: ...
- **Relevant details**: ...

If no research is needed, skip to Phase 3.


Phase 3 — Compose Ticket Content

Build the ticket description in Atlassian Document Format (ADF). Combine:

  • The user's original request/context
  • Research findings from Phase 2 (if any)
  • Acceptance criteria (when creating Stories)
  • Steps to reproduce (when creating Bugs)

Keep the description concise and actionable.

ADF Structure

Jira API v3 uses ADF for the description field. Minimal example:

{
  "type": "doc",
  "version": 1,
  "content": [
    {
      "type": "paragraph",
      "content": [{ "type": "text", "text": "Description text here." }]
    }
  ]
}

For richer formatting (headings, bullet lists, links):

{
  "type": "doc",
  "version": 1,
  "content": [
    {
      "type": "heading",
      "attrs": { "level": 3 },
      "content": [{ "type": "text", "text": "Summary" }]
    },
    {
      "type": "bulletList",
      "content": [
        {
          "type": "listItem",
          "content": [
            {
              "type": "paragraph",
              "content": [{ "type": "text", "text": "Item one" }]
            }
          ]
        }
      ]
    },
    {
      "type": "paragraph",
      "content": [
        { "type": "text", "text": "Source: " },
        {
          "type": "text",
          "text": "link text",
          "marks": [{ "type": "link", "attrs": { "href": "https://example.com" } }]
        }
      ]
    }
  ]
}

Phase 4 — Validate Project and Fields

Before creating the ticket, verify the project exists and discover available fields:

# Verify project
curl --http1.1 -s -u "$JIRA_EMAIL:$JIRA_API_TOKEN" -H "Content-Type: application/json" \
  "$JIRA_BASE_URL/rest/api/3/project/$PROJECT_KEY" | jq '{key, name, id}'

# List available issue types for the project
curl --http1.1 -s -u "$JIRA_EMAIL:$JIRA_API_TOKEN" -H "Content-Type: application/json" \
  "$JIRA_BASE_URL/rest/api/3/project/$PROJECT_KEY/statuses" | jq '.[].name'

If the project or issue type is invalid, report the error and ask the user to correct it.


Phase 5 — Create the Ticket

curl --http1.1 -s -X POST \
  -u "$JIRA_EMAIL:$JIRA_API_TOKEN" \
  -H "Content-Type: application/json" \
  "$JIRA_BASE_URL/rest/api/3/issue" \
  -d '{
    "fields": {
      "project": { "key": "PROJECT_KEY" },
      "summary": "Ticket summary here",
      "issuetype": { "name": "Task" },
      "priority": { "name": "Medium" },
      "description": { ADF_OBJECT },
      "labels": ["label1", "label2"]
    }
  }'

Extract the response:

# Parse response for issue key and URL
ISSUE_KEY=$(echo "$RESPONSE" | jq -r '.key')
ISSUE_URL="$JIRA_BASE_URL/browse/$ISSUE_KEY"

If the API returns an error, display the error message and suggest corrections.


Phase 6 — Report

Present the result to the user:

  • Issue key: e.g. ENG-1234
  • URL: direct link to the ticket
  • Summary: the title that was set
  • Research included: yes/no, with sources listed

Notes

  • The Jira REST API v3 requires ADF for descriptions — plain text or markdown will be rejected.
  • Rate limits: Jira Cloud allows ~100 requests per minute per user.
  • The jira.yaml network policy preset in NemoClaw already allows *.atlassian.net, auth.atlassian.com, and api.atlassian.com on port 443.
  • To use this skill inside NemoClaw's sandbox, enable the Jira preset in your sandbox policy.

Examples

# Create a simple task
/jira-ticket ENG "Update API rate limiting docs"

# Create a bug with web research
/jira-ticket ENG --type Bug --search "Node.js fetch timeout ECONNRESET" "Fix intermittent ECONNRESET in payment service"

# Create a story with priority and labels
/jira-ticket PLATFORM --type Story --priority High --labels "q2,backend" "Add OAuth2 PKCE flow for mobile clients"