Create a Jira issue

flurryport:jira-create-issuedeliveryv1first-partysha256:968d5430e1f6Needs: read/write agent token

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

  1. 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.
  2. 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

  1. 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

Where this fits

Related recipes

flurryport:azure-devops-managedelivery

Create and update Azure DevOps work items in one batched pipe: priority, state, tags, and sprint included.

flurryport:azure-devops-querydelivery

Query Azure DevOps work items with WIQL and read the matching ids back, without your AI ever holding the PAT.

flurryport:azure-devops-readdelivery

Read fields for a batch of Azure DevOps work items by id: title, state, tags, priority, iteration.

flurryport:azure-devops-workitemdelivery

Let your AI file Azure DevOps work items (bugs, tasks) the model never holds credentials for.

flurryport:github-create-issuedelivery

Let your AI file GitHub issues with a fine-grained PAT it never touches.

flurryport:linear-create-issuedelivery

Let your AI file Linear issues with an API key it never touches.