Create a Linear issue
Let your AI file Linear issues with an API key it never touches.
Create an issue in a Linear team via the GraphQL API. The personal API key rides the Authorization header and is resolved server-side at delivery; the team is 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 creates Linear issues with an API key it never touches. It sends a title, description, and optional priority through the pipe; FlurryPORT holds the personal API key server-side and calls Linear's GraphQL API at delivery.Setup in two steps
- Linear side. Settings, API keys, Create API key (the personal-key form; if you are asked for redirect URIs you have wandered into OAuth applications). Grant only Read plus Create issues.
- FlurryPORT side. Your AI requests secret setup and FlurryPORT emails you a secure page. Paste the key; the target team is fixed at install.
Credential custody
Stored encrypted, added server-side at delivery, scrubbed from stored responses. Minimal permissions on the key mean the pipe can file issues and nothing else.What to expect
GraphQL has one habit worth knowing: it answers 200 even on failure. The receipt is judged by the body, where success means issueCreate.success true and failures arrive as an errors array. Your AI reads the body and reports honestly either way.Install with your agent
npx flurryport mcp
Point your agent at the FlurryPORT MCP server (npx flurryport mcp) and ask it for the flurryport:linear-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_linear_create_issue- Create a Linear issue in the configured team. Input: title (required), description (optional, markdown), priority (optional, 0 none to 4 low).
Setup walkthrough
LINEAR_API_KEY: In Linear: Settings, API keys, Create API key (a personal key; if a form asks for redirect URIs you are in OAuth applications, the wrong form). Under Permissions choose Only select permissions and tick exactly 'Read' and 'Create issues' ('Write' is broader than you need). Under Team access, 'Only select teams' limited to the receiving team is the tight choice. Copy the key and paste it into the FlurryPORT secret page. It is sent as the Authorization header value, no Bearer prefix.
Intent schema
{
"type": "object",
"required": [
"title"
],
"properties": {
"title": {
"type": "string",
"maxLength": 255
},
"description": {
"type": "string",
"description": "Issue body, markdown supported. Sent as an empty string when omitted."
},
"priority": {
"type": "number",
"description": "0 none, 1 urgent, 2 high, 3 medium, 4 low. Sent as 0 when omitted."
}
}
}Install-time parameters
teamId- install-time: Team that receives the issues created by this install.
Transformation
{ "query": "mutation($input: IssueCreateInput!) { issueCreate(input: $input) { success issue { identifier url } } }", "variables": { "input": { "teamId": $install.teamId, "title": $body.title, "description": ($exists($body.description) ? $body.description : ""), "priority": ($exists($body.priority) ? $body.priority : 0) } } }Delivery target
POST https://api.linear.app/graphql
Placeholders like $secrets.NAME resolve server-side at delivery, never in the agent.
Gotchas
- GraphQL answers 200 even when the mutation fails: success is data.issueCreate.success true, and failures ride an errors array in the 200 body, so check the body, not the status.
- teamId is the team's UUID, never the short key like ENG.
- Priority numbers: 0 none, 1 urgent, 2 high, 3 medium, 4 low.
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 Jira Cloud issues with an API token it never touches.