Jira Service Desk ACTION
Create Request
Creates a customer request (ticket) in a Jira Service Management service desk. This is the single tool for creating any kind of ticket (incident, service request, access request, hardware request, and so on). The kind of ticket is decided by
requestTypeId, not by the wording of the summary, so always pick the request type deliberately. Use List Sites to get cloudId, List Service Desks to get serviceDeskId, and List Request Types to choose the requestTypeId whose name and description match the user's intent. Call List Request Type Fields to see which fields that request type requires; pass anything beyond summary and description in additionalFieldValues, keyed by Jira field ID. Worked example: on service desk 1, request type 4 ("Onboard new employees") requires summary and also accepts a duedate, so call with Summary Joseph Wilson starts on September 1, Description Needs a laptop and an email account, and Additional Field Values { "duedate": "2026-09-01" }. Optionally attach one or more files at creation time via attachments; to add, replace, or delete attachments on a request that already exists, use Manage Request Attachment instead. Returns the created request including its issueKey and issueId. If attachments is set, the response also includes either an attachments array (on success) or an attachmentError string (if the request was created but the attachment step failed) — the request itself is never rolled back because of an attachment failure. See the documentation- Action
- Writes data
- OAuth
- SDK
- MCP
IMPLEMENTATION
Call this tool
Connect a user's Jira Service Desk account once, then configure and run Create Request from your backend or agent.
import { PipedreamClient } from "@pipedream/sdk"
const pd = new PipedreamClient({
projectId: process.env.PIPEDREAM_PROJECT_ID!,
clientId: process.env.PIPEDREAM_CLIENT_ID!,
clientSecret: process.env.PIPEDREAM_CLIENT_SECRET!,
projectEnvironment: "production",
})
const result = await pd.actions.run({
id: "jira_service_desk-create-request",
externalUserId: "{external_user_id}", // any stable ID for this user in your system
configuredProps: {
jira_service_desk: { authProvisionId: "apn_xxxxxxx" },
cloudId: "Cloud ID",
serviceDeskId: "Service Desk ID",
},
})
console.log(result)curl -X POST https://api.pipedream.com/v1/connect/{project_id}/actions/run \
-H "Content-Type: application/json" \
-H "X-PD-Environment: production" \
-H "Authorization: Bearer {access_token}" \
-d '{
"external_user_id": "{external_user_id}",
"id": "jira_service_desk-create-request",
"configured_props": {
"jira_service_desk": { "authProvisionId": "apn_xxxxxxx" },
"cloudId": "Cloud ID",
"serviceDeskId": "Service Desk ID"
}
}'// accessToken: mint a short-lived token with the Connect SDK — see the MCP guide
const transport = new StreamableHTTPClientTransport(
new URL("https://remote.mcp.pipedream.net/v3"),
{
requestInit: {
headers: {
Authorization: `Bearer ${accessToken}`,
"x-pd-project-id": "{project_id}",
"x-pd-environment": "production",
"x-pd-external-user-id": "{external_user_id}", // any stable ID for this user in your system
"x-pd-app-slug": "jira_service_desk",
},
},
},
)
const mcp = new Client({ name: "my-agent", version: "1.0.0" })
await mcp.connect(transport)
const { tools } = await mcp.listTools()
// listTools() hands your model this tool's input schema, so it can
// fill the arguments itself:
const result = await mcp.callTool({
name: "jira_service_desk-create-request",
arguments: {
cloudId: "Cloud ID",
serviceDeskId: "Service Desk ID",
},
})SCHEMA
Inputs
Pipedream supplies the connected account. Your application provides the operation-specific values below. Dynamic inputs are resolved against that user's account.
| Property | Type | Description |
|---|---|---|
cloudId Cloud ID | string | The Atlassian site (cloud) ID, e.g. 822faf0d-5427-420e-9016-999d3dc76918. Run List Sites to get the id of every site you can access. Required |
serviceDeskId Service Desk ID | string | The service desk to raise the request in. Use List Service Desks to find valid IDs (e.g. 1). Required |
requestTypeId Request Type ID | string | The request type that determines what kind of ticket this is. Use List Request Types to see the types this service desk offers and pick the one matching the user's intent (e.g. 8 for "Report a system problem"). Required |
summary Summary | string | One-line title of the request, e.g. Laptop won't boot after the latest update. Required by virtually every request type. Required |
description Description | string | Body of the request, as plain text. Optional |
additionalFieldValues Additional Field Values | object | Any other fields the chosen request type requires or accepts, as a JSON object of Jira field ID to value, e.g. { "duedate": "2026-09-01", "customfield_10052": "Laptop" }. Run List Request Type Fields for the exact fieldIds, which are required, and their schemas. Values that parse as JSON are converted (["a","b"] becomes a list, 5 becomes a number); to keep a numeric-looking value a string, wrap it in quotes ("\"123\""). Keys summary and description given here override the props above. Optional |
requestParticipants Request Participants | string[] | Atlassian account IDs to add as participants, e.g. ["5b10a2844c20165700ede21g"]. Run Find Users to turn each name or email address into an accountId; participants are often approvers or managers who are not customers of this desk, which is why this uses the site-wide search rather than Find Service Desk Customers. Not available to users who only have the Service Desk Customer permission, or if the feature is turned off for customers. Optional |
raiseOnBehalfOf Raise On Behalf Of | string | Atlassian account ID of the customer to raise this request for, e.g. 5b10a2844c20165700ede21g. Run Find Service Desk Customers with this same Service Desk ID to turn a name or email address into an accountId, which also confirms the person is a customer of this desk; fall back to Find Users if they are not found there. A desk that restricts who may be one of its customers can reject a reporter who is not, so if creation then fails on the reporter field, retry without this field and name the requester in the description instead. Never guess an ID, and never pass a name or email address here. Not available to users who only have the Service Desk Customer permission. Optional |
form Form | object | Answers to the form attached to the request type, as { "answers": { "<questionId>": { "text": "..." } } }. Omit any Jira field from additionalFieldValues when it is linked to a form answer here. For answers in ADF, also set isAdfRequest to true. Optional |
isAdfRequest Is ADF Request | boolean | Set to true to send rich-text fields (such as description) as Atlassian Document Format objects rather than plain text. Leave unset to send plain strings. When true, do not use the Description prop, which only sends plain text: pass the ADF object as a JSON string under the description key of additionalFieldValues instead. Marked experimental by Atlassian. Optional |
channel Channel | string | Extra information about the channel the request came in on. Marked experimental by Atlassian. Optional |
attachments Attachments | string[] | File(s) to attach to the request as it's created. Provide file URLs or paths to files in the /tmp directory (e.g. /tmp/myFile.pdf). Optional |
attachmentsPublic Attachments Public | boolean | Whether the attached file(s) are visible to the customer who raised the request. Defaults to true; set to false to attach internal-only files. Optional |
syncDir SyncDir | dir | Optional |
REFERENCE
Tool details
Behavior hints are published with the component in the Pipedream registry and surface as MCP tool annotations, so an agent can reason about a tool before it calls it.
- Registry key
- jira_service_desk-create-request
- Version
- 1.1.1
- App
- Jira Service Desk
- Authentication
- OAuth
- Read-only
- No
- Destructive
- No
- Open world
- Yes
- Source
- View on GitHub ↗