Jira Ticket Creator with Web Research
name: jira-ticket
by cehd5170 · published 2026-03-22
$ claw add gh:cehd5170/cehd5170-jira-ticket---
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:
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:
---
Notes
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"More tools from the same signal band
Order food/drinks (点餐) on an Android device paired as an OpenClaw node. Uses in-app menu and cart; add goods, view cart, submit order (demo, no real payment).
Sign plugins, rotate agent credentials without losing identity, and publicly attest to plugin behavior with verifiable claims and authenticated transfers.
The philosophical layer for AI agents. Maps behavior to Spinoza's 48 affects, calculates persistence scores, and generates geometric self-reports. Give your...