Prerequisites
- Connect your client through OneSignal MCP Server with your OneSignal account.
- Use an app with the required Journey tools enabled and account permissions for the requested action.
- Get your App ID with
list_apps. For an existing Journey, get its ID withlist_journeys.
Structure tool requests
Pass routing IDs and request metadata as tool arguments. Put Journey fields in the object for the operation:
Send objects and arrays as native JSON values, not JSON-encoded strings. For example, use
"body": {"name": "Welcome"}, not "body": "{\"name\":\"Welcome\"}".
The examples below show the tool name and its arguments, not the complete MCP protocol request. Replace YOUR_... placeholders with IDs and keys from your app.
Get the schema
Useget_journey_schema to retrieve the schema for the operation you plan to perform. You can reuse a schema you already retrieved for that operation.
document value to identify what the schema describes:
For
update_node, send only changed fields in patch. The schema describes the resulting node, so required unchanged fields do not need to appear in the patch.
Schema retrieval describes accepted JSON structure. It does not grant permission to write or replace the checks on the write request.
The HTTP schema endpoint is public and app-independent. It requires no authentication or App ID.
The MCP tool still requires app_id for authoring context and an authenticated MCP connection. The schema itself does not vary by app.
See Get Journey schema for the response contract. Use the Journey API reference for field definitions and document rules.
Create a draft
Callcreate_journey_draft with Journey fields inside body:
app_id and body as top-level arguments. Both are required. Put all Journey fields inside body. The outer app_id selects the app.
The result is a draft, even if you supply a schedule. To check available channels before you add message steps, call get_app_channel_availability with app_id.
See Create Journey for audience fields, step types, and local references with client_node_id.
Duplicate a Journey
Callduplicate_journey with the source ID. Use overrides to change fields on the copy:
Update a Journey or step
Read the Journey withget_journey before you update it. Copy its current concurrency_key unchanged into the tool arguments.
To rename a Journey, call update_journey:
id from get_journey as node_id. For example, update an existing Wait step with update_journey_node:
409 journey-stale, read the Journey again. Reassess your patch against the current Journey before another update.
Field edits support draft and scheduled Journeys. Active Journey edits require high-impact access and can affect people already in the flow. Archived and processing Journeys do not accept field edits through these tools.
See Update Journey for merge behavior, array replacement, and sending-step references. See Update Journey node for changes to an individual step.
Change Journey state
Useupdate_journey with a state-only patch. Send other field changes in a separate call:
draft, scheduled, active, or archived as the target state. OneSignal checks whether the transition is permitted.
To schedule a draft, first update schedule.start_at with a future UTC timestamp. Then send {"state": "scheduled"} in a separate patch with the returned concurrency key.
A processing result means activation is not yet complete. Processing Journeys reject updates, including state changes. Use get_journey to read the state after activation.
See Journey states for state requirements.
Delete a Journey
Calldelete_journey with app_id and journey_id. Deletion requires high-impact access. You do not need to archive the Journey first.
Deleting a Journey permanently removes it and its associated data. Review the target Journey before you approve deletion in your client.
Handle failed or uncertain writes
Read the result before you decide whether to send another write. MCP makes one attempt for each Journey write and does not automatically retry it.- Validation error: Correct the reported fields before another attempt.
- Stale concurrency key: Read the Journey again and reassess the change.
- Server error (5xx), unknown outcome, timeout, or malformed success: Read the saved Journey before another attempt. The write can succeed even if the client receives no usable receipt.
- Uncertain create or duplicate: Use
list_journeysto find the draft, then inspect it withget_journey. Repeating the call can create another draft.
get_journey to inspect the saved structure.
FAQ
Can I pass a REST request body directly as tool arguments?
No. Use the object for the tool:body for create, overrides for duplicate, or patch for updates. Keep routing IDs and the concurrency key outside that object. Create calls require both app_id and body; flat Journey fields are not accepted.
Do I need to include every field when I update a step?
No. Send only changed fields inpatch. For update_node, the returned schema describes the complete node after the patch, not the partial patch itself.
Why is a Journey tool missing from my client?
Tool discovery depends on MCP enablement for your app or account. Connect through the hosted OAuth endpoint. Each operation also requires the relevant OneSignal app permissions. See MCP troubleshooting.Related pages
OneSignal MCP Server
Connect your AI client and explore the available tools.
Get Journey schema
Retrieve the schema for a Journey authoring operation.