Create a Jira issue
Let your AI file Jira Cloud issues with an API token it never touches.
Create an issue in a Jira Cloud project via the REST v3 API. The Basic credential (base64 of email:api_token) rides the Authorization header and is resolved server-side at delivery; the site, project, and issue type are fixed at install.
The credential never enters the model context: it lives in the FlurryPORT secret store, deliveries are signed server-side, and every send returns a receipt your agent can quote.
What this is
Your AI files Jira Cloud issues with an API token it never touches. The AI sends a summary and description; the pipe holds the Basic credential server-side, wraps your text into the Atlassian Document Format the v3 API demands, and returns Jira's answer as a receipt.Setup in two steps
- Atlassian side. Create an API token at id.atlassian.com (Security, API tokens). If you use scoped tokens, grant a broad scope set: issue create resolves projects and issue types through reads, so write-only scopes fail with a misleading error. Team-managed projects need the -software scope variants.
- FlurryPORT side. Your AI requests secret setup and FlurryPORT emails you a secure page. Paste the credential there; site, project, and issue type are fixed at install.
Credential custody
Stored encrypted, resolved server-side at delivery, scrubbed from stored responses. The AI composes issues; it never holds the token that files them.What to expect
Success is 201 with the new issue key in the receipt. The most common failure is a scope problem wearing a disguise: Jira answers 'project does not exist or you do not have permission' when the token simply cannot read createmeta. The gotchas list carries the exact fix.Install with your agent
npx flurryport mcp
Point your agent at the FlurryPORT MCP server (npx flurryport mcp) and ask it for the flurryport:jira-create-issue recipe. Works from AI clients that can run a local process: desktop apps and terminal agents. Web-only chat clients cannot reach a local MCP server; open a desktop client instead.
Tools your agent gains
flry_jira_create_issue- Create a Jira issue in the configured site/project. Input: summary (required), description (required, plain text).
Setup walkthrough
JIRA_EMAIL_TOKEN: Create an API token at id.atlassian.com/manage-profile/security/api-tokens. On the scopes screen pick the Jira app and grant a BROAD scope set: the issue-write scopes (write:issue:jira AND write:issue:jira-software for team-managed/Scrum projects) PLUS the project/issue-type/field READ scopes. The create endpoint resolves the project and issue type via reads, so a write-only token returns a misleading 'project doesn't exist or you don't have permission' 400 (and createmeta shows zero projects) even for a site admin on a project that exists. Basic auth wants base64 of your-email:token, NOT the raw token: printf 'you@example.com:YOUR_TOKEN' | base64 (printf, not echo, whose newline 401s it). Paste the base64 into the FlurryPORT secret page; the recipe sends it as Authorization: Basic <value>.
Intent schema
{
"type": "object",
"required": [
"summary",
"description"
],
"properties": {
"summary": {
"type": "string",
"maxLength": 255
},
"description": {
"type": "string",
"description": "Plain-text issue description; wrapped into Atlassian Document Format by the recipe."
}
}
}Install-time parameters
site- install-time: Jira Cloud site subdomain; materialized into the API URL.
projectKey- install-time: Project that receives the issues created by this install.
issueType- install-time: Issue type; must match a type the project offers.
Transformation
{ "fields": { "project": { "key": $install.projectKey }, "issuetype": { "name": $install.issueType }, "summary": $body.summary, "description": { "type": "doc", "version": 1, "content": [ { "type": "paragraph", "content": [ { "type": "text", "text": $body.description } ] } ] } } }Delivery target
POST https://$install.site.atlassian.net/rest/api/3/issue
Placeholders like $secrets.NAME resolve server-side at delivery, never in the agent.
Gotchas
- REST v3 requires the description in Atlassian Document Format, not a plain string; the transformation wraps your text into a minimal ADF paragraph for you.
- Basic auth is base64(email:api_token), not the raw token; building it with echo adds a trailing newline that 401s, so use printf.
- Scoped API tokens need a BROAD scope set: create resolves the project and issue type via reads, so a token with only issue-write scopes returns a misleading 'project does not exist' 400 and an empty createmeta, even for a site admin.
- Team-managed (default Scrum) projects need the -software scope variants.
- issueType and projectKey are case-sensitive; success is 201 with the created key.
Where this fits
Related recipes
Create and update Azure DevOps work items in one batched pipe: priority, state, tags, and sprint included.
Query Azure DevOps work items with WIQL and read the matching ids back, without your AI ever holding the PAT.
Read fields for a batch of Azure DevOps work items by id: title, state, tags, priority, iteration.
Let your AI file Azure DevOps work items (bugs, tasks) the model never holds credentials for.
Let your AI file GitHub issues with a fine-grained PAT it never touches.
Let your AI file Linear issues with an API key it never touches.