This page lists every tool an MCP client, such as Claude Desktop or Cursor, gets from Shortcuts Toolbox.
There are 52 built-in tools, grouped by what they do. To connect
a client, see MCP Server Setup.
Some tools need a little setup in the app first, like switching on a device or adding a Pushcut API key.
Each tool says what it needs. Inputs marked optional can be left out.
Find and run shortcuts
By default your shortcuts are not listed as separate tools. The client asks for the list with list_enabled_shortcuts and runs one by name with run_enabled_shortcut. A shortcut is on that list only when its AI settings meet three conditions: Hide from AI is off, it has an AI tool description, and Enable for Chat/MCP is on. A shortcut with Expose as its own tool turned on also appears as a tool of its own. Its name is shortcut_ plus the shortcut’s name in lower case with underscores, so Things Task PATCH becomes shortcut_things_task_patch. Its arguments come from the shortcut’s Input Schema: one argument per property, or a single input argument when there is no object schema. Its Output Schema is listed as the tool’s output. When the shortcut’s Runs on setting is Either, the tool also takes an optional device argument. The tool list updates as soon as the setting changes. Both settings are described under Shortcut Management.
list_enabled_shortcuts
Lists the shortcuts the client may run, with the AI tool description of each one. Each entry also carries the shortcut’s inputSchema and outputSchema when it has them, and ownTool when the shortcut is exposed as its own tool, so the client knows to call that tool instead.
folderoptional Only list shortcuts in this folder.
run_enabled_shortcut
Runs one shortcut on your Mac and returns its output. When the shortcut has an Input Schema, the input is checked against it first. Input that does not match is refused with a list of the fields that failed, and the shortcut does not run.
shortcut_name The shortcut to run.
inputoptional Input for the shortcut: text, a number, an object, or a list. Empty text if left out. Must match the shortcut’s Input Schema when it has one.
Needs: The shortcut must be on the list_enabled_shortcuts list.
list_all_shortcuts
Lists the name of every shortcut that is not hidden from AI, including ones that are not enabled for Chat/MCP. It is for browsing your library. It does not make those shortcuts runnable.
folderoptional Only list shortcuts in this folder.
list_shortcut_folders
Lists the folders in your Shortcuts library.
sortoptional Set to true to sort the folders alphabetically.
Look inside shortcuts
These tools read your library and never run anything. They work on any shortcut that is not hidden from AI. When a shortcut has Contents is private turned on, its contents stay hidden.
get_shortcut_details
Returns a summary of one or more shortcuts: description, action count, comments and TODOs, inputs and outputs, the Input Schema and Output Schema if the shortcut has them, the shortcuts and apps it uses, and its settings. A schema comment that could not be parsed shows up as a warning here. It leaves out the step-by-step actions to keep the result small.
shortcut_names A list of shortcut names.
Needs: For a shortcut with private contents, you get a short note instead of the details.
get_shortcut_workflow
Returns every action inside one or more shortcuts, step by step. The result can be large, so ask only for the shortcuts you need to read in full.
shortcut_names A list of shortcut names.
Needs: Contents is private must be off for the shortcut.
get_shortcut_dependency_graph
Shows which shortcuts a shortcut runs, and which shortcuts run it. In the app’s chat this draws the dependency graph. Over MCP you get the two lists as text.
shortcut_name The shortcut to look at.
directionoptionaloutgoing (shortcuts it runs), incoming (shortcuts that run it), or both. Defaults to both.
depthoptional How many levels the drawn graph expands, from 1 to 10. The text lists always show direct links only.
find_shortcuts_using_app
Finds the shortcuts that use actions from an app, as in “which shortcuts use Things?” Matching is loose and checks both the app name and its bundle ID.
app An app name or bundle ID, such as Music Harbor.
Hand a task to the AI
Give the Shortcuts Toolbox AI a whole job instead of calling tools one at a time. It runs the same way as an AI task.
perform_task
Hands a plain-language task to the Shortcuts Toolbox AI. The AI picks the shortcuts and tools it needs, runs them, and returns the result.
task What to do, such as “Get my unread email and sort it by topic”.
contextoptional The format you want back, such as JSON, HTML, or plain text.
Needs: A default AI model chosen in Settings → AI Providers. The AI can run shortcuts that have Enable for AI Task Assistant turned on.
Make web pages
Save reports and dashboards as pages you can open later.
create_html_page
Saves a complete HTML page, such as a report or dashboard, and returns its URL. Saved pages appear on the Webpages tab in the app.
html_content A complete HTML document with its styles included.
page_id Required. A real ID saves the page, and reusing the ID replaces the earlier version. The text <NONE> returns a one-off preview that is not saved.
titleoptional A title shown in the app.
iconoptional A Lucide icon name, such as newspaper, shown next to the page in the sidebar.
Templates
A template is a Handlebars page layout with a JSON Schema for the data it shows. Web mini-apps render a template with fresh data. The client can write templates, change them a few lines at a time, and preview them; every save answers with a render check and a screenshot of the template filled with its sample data.
fetch_templates
Lists the stored templates with their description, instructions for the AI, and data schema. Fetching one by id also returns its full Handlebars body and sample data.
template_idoptional A template id. Leave it out to list every template.
define_template
Saves a new template: a Handlebars body styled with Tailwind, a JSON Schema for its data, sample data, and guidance for the AI on when to use it. The reply includes a screenshot of the template rendered with the sample data.
name Display name. The id is made from it.
description What the template shows, for people.
llm_instructions When and how an AI should use the template.
handlebars_body The complete HTML page as a Handlebars template.
data_schema JSON Schema of the data the template renders.
sample_data Example data matching the schema, used for previews.
suggested_shortcutsoptional Shortcuts that pair well with it.
tagsoptional Free-form tags.
iconoptional A Lucide icon name.
edit_template
Replaces whole fields of a template, keeping the rest. The version is bumped.
id The template to change.
name, description, llm_instructions, handlebars_body, data_schema, sample_data, suggested_shortcuts, tags, iconoptional Any field to replace.
replace_in_template
Changes part of a template with an exact-text find-and-replace, like an editor would, instead of resending the whole body. The text must occur exactly once unless replace_all is set, so an edit never lands in the wrong place. The reply includes a fresh render check and screenshot.
id The template to change.
find The exact text to find, including whitespace.
replace The replacement. May be empty.
fieldoptionalhandlebars_body (the default), llm_instructions, description, name, data_schema, or sample_data.
replace_alloptional Replace every occurrence.
render_template
Renders a stored template, or a one-off template sent inline, with the data you give and saves the result as a page. Use the page id <NONE> for a preview that is not saved.
page_id The page to write, or <NONE>.
template_idoptional A stored template. Either this or template.
templateoptional An inline template: its body and data schema.
data The data to render.
titleoptional A title for the page.
iconoptional A Lucide icon name for the page.
delete_template
Deletes a template. Refused while an app or a workflow still renders it; the reply names them.
id The template to delete.
Web mini-apps
An app is a page that renders a template with data fetched by a workflow: shortcuts, AI steps, tool calls, and plain field mapping. The client can create apps, change their pipeline, render them, read their render history, schedule them, and delete them. An app’s pipeline is its bound workflow, so the workflow tools below also work on it through app_id.
fetch_webpage_apps
Lists the apps with their template, page, schedule, and last render. Fetching one by id returns the full record.
app_idoptional An app id. Leave it out to list every app.
define_webpage_app
Creates an app from a template, a page id, and a data pipeline. The pipeline becomes the app’s workflow with a render step added at the end; the app is rendered once right away and the reply includes a screenshot. A schedule registers the recurring render.
template_id The template to render.
page_id The page the app writes on every render.
generation_graph The data pipeline: nodes and edges, without a render step.
titleoptional Display title.
scheduleoptional A cron expression or a phrase such as every 2 hours.
iconoptional A Lucide icon name.
badgeoptional A count or short text shown on the app’s tile.
badge_clears_on_openoptional Clear the badge when the app is opened.
associated_jobsoptional Shortcuts or AI tasks linked to the app.
idoptional An explicit app id.
Needs: A template, from fetch_templates or define_template.
edit_webpage_app
Changes an app in place: its template, page, title, icon, badge, schedule, or whole pipeline. Pass schedule: null to cancel the recurring render. For smaller pipeline changes use replace_in_workflow or update_workflow_nodes with the app id.
id The app to change.
template_id, page_id, generation_graph, title, schedule, icon, badge, badge_clears_on_open, associated_jobsoptional Any field to replace.
render_app_now
Runs the app’s workflow now, waits for it, and reports the run and the page it wrote.
app_id The app to render.
timeoutSecondsoptional How long to wait, up to 300. Default 90.
get_app_render_runs
The app’s recent renders: when they ran, whether they succeeded, and any error.
app_id The app.
limitoptional How many runs, up to 50. Default 5.
fetch_webpages
Lists the saved pages, including the ones apps render, or returns one page with its HTML.
page_idoptional A page id or file id.
delete_webpage_app
Deletes an app with its trigger links, badge, and scheduled render. The app’s workflow and page are kept unless asked.
id The app to delete.
delete_workflowoptional Also delete the app’s workflow.
delete_pageoptional Also delete the app’s rendered page.
run_app_associated_job
Runs one of the app’s associated jobs now, a shortcut or AI task linked to the app beyond its render, and waits for the result.
app_id The app.
index The job’s position in the app’s associated jobs list, from 0.
timeoutSecondsoptional How long to wait, up to 300. Default 90.
remove_app_associated_job
Removes one associated job, or all of them, and cancels their schedules. The app’s own render schedule is not touched.
app_id The app.
indexoptional The job to remove. Leave it out to remove every associated job.
Workflows
A workflow is a graph of steps run in order: run a shortcut, prompt an AI model, call a tool, map fields, run code, ask you a question, wait for an approval, and more. Every save checks the whole graph and refuses a broken one, so a client can edit safely. Read get_workflow_node_spec first; it describes every step type.
get_workflow_node_spec
The fields, rules, and placeholders of every step type, plus edges, the output node, and run inputs.
typeoptional One step type. Leave it out for all of them.
fetch_workflows
Lists the workflows with their step count, whether they end in a page, and any open issues. Fetching one by id returns its full graph.
workflow_idoptional A workflow id. Leave it out to list every workflow.
define_workflow
Saves a new workflow from a complete graph. It is not run unless asked, since workflows can run shortcuts. A schedule runs it on an interval.
name Display name. The id is made from it.
generation_graph The complete graph: nodes, edges, and the output node.
descriptionoptional What the workflow does.
inputsoptional JSON Schema of the inputs a run takes.
scheduleoptional A cron expression or a phrase.
run_immediatelyoptional Run once after saving and report each step.
iconoptional A Lucide icon name.
idoptional An explicit workflow id.
Needs: Every AI step names a configured, enabled provider and model.
edit_workflow
Replaces whole fields of a workflow, including the entire graph, keeping the rest.
id The workflow to change.
name, description, icon, generation_graph, inputsoptional Any field to replace.
replace_in_workflow
Changes text inside a workflow with an exact-text find-and-replace: a prompt, a code step, a tool argument, a mapping, a label, the name or description. It can be narrowed to one step or one field of a step. Replacing a step id with replace_all also updates its edges and placeholders, which renames the step.
workflow_idoptional The workflow. Either this or app_id.
app_idoptional An app, to edit its bound workflow.
find The exact text to find.
replace The replacement. May be empty.
node_idoptional Only search this step.
fieldoptional With node_id: only this field of the step.
replace_alloptional Replace every occurrence.
update_workflow_nodes
Changes part of a workflow’s graph without resending it: patch some fields of a step, add a step, drop fields, remove steps, add or remove edges, and set the output node. An app’s workflow keeps its render step.
workflow_idoptional The workflow. Either this or app_id.
app_idoptional An app, to edit its bound workflow.
upsert_nodesoptional Steps to patch (by id) or add (with a type).
remove_fieldsoptional Fields to drop from steps.
remove_node_idsoptional Steps to remove, with their edges.
add_edgesoptional Edges to add.
remove_edgesoptional Edges to remove.
output_node_idoptional The new output step.
run_workflow_now
Runs a workflow now, waits for it, and reports its status, output or error, and failed steps. A run that stops at a question or approval is reported as waiting.
workflow_id The workflow to run.
inputsoptional Run inputs matching the workflow’s inputs schema.
timeoutSecondsoptional How long to wait, up to 300. Default 90.
delete_workflow
Deletes a standalone workflow with its trigger links and memory. An app’s workflow is deleted through delete_webpage_app instead.
id The workflow to delete.
Your iPhone and iPad
These tools reach your iPhone or iPad through Pushcut. The Shortcuts Toolbox - Device shortcut on the device picks up each request and sends the answer back to your Mac. The device must be online, and unlocked for anything that opens an app or a URL, takes a screenshot, or changes a Focus.
Before you start
The Shortcuts Toolbox - Device shortcut is installed. It is optional and on the helper list in Getting Started. Install it on your Mac and iCloud syncs it to your devices; its Pushcut notification automation comes with it.
Pushcut is connected in Settings → Pushcut, with an API key from the Pushcut app.
The device is switched on in Settings → Remote Execution. Test it there, then turn on its Enabled switch. Devices that are switched off are hidden from clients completely.
REMOTE_RUN_CALLBACK_BASE_URL is set to an address your device can reach your Mac at.
Optional: pick a default device on the Remote Execution page. Every tool here has an optional device input, and leaving it out uses the default device.
list_remote_devices
Lists the devices that are switched on for remote use, with each device’s name and key. Pass a name or key as the device input of the other tools.
No inputs.
ping_remote_device
Checks that a device can receive requests, without running anything. Returns how many seconds the device took to answer. If it does not answer within 30 seconds, you get an error: the device is locked, offline, or its automation did not fire.
deviceoptional A device name, or a key like pushcut:iPhone. Leave it out to use the default device.
run_remote_shortcut
Runs a shortcut on the device instead of your Mac and returns its output. It gives up after 30 seconds if the device never picks up the request. Otherwise it waits up to 20 minutes for the result. You can change both limits on the Remote Execution page. When the shortcut has an Input Schema, the input is checked against it first, and input that does not match is refused with a list of the fields that failed.
shortcut_name The shortcut to run on the device.
inputoptional Input for the shortcut. Must match the shortcut’s Input Schema when it has one.
deviceoptional A device name, or a key like pushcut:iPhone. Leave it out to use the default device.
Needs: The shortcut must be enabled for Chat/MCP, and its Run on remote device switch must be on. That switch is on the shortcut’s page.
get_device_info
Reports live status from the device: location and address, battery level and charging, Wi-Fi network, Focus mode, the app in front, whether it is locked, OS version, and more. Fields the device does not send come back empty.
deviceoptional A device name, or a key like pushcut:iPhone. Leave it out to use the default device.
speak_on_device
Speaks text aloud on the device and waits until it finishes. Good for spoken summaries and alerts.
text What to say.
rateoptional Speed from 0 (slowest) to 1 (fastest).
pitchoptional From 0.5 (low) to 2 (high). 1 is normal.
languageoptional A language tag for the voice, such as en-US. Experimental.
deviceoptional A device name, or a key like pushcut:iPhone. Leave it out to use the default device.
ask_on_device
Speaks one question aloud on the device, listens for your spoken reply, and returns what you said as text. One question, one reply. For several questions, or questions with choices, use interview_user. Errors when the device does not answer or no reply comes back in time.
text The question to ask.
rateoptional Speed from 0 (slowest) to 1 (fastest).
pitchoptional From 0.5 (low) to 2 (high). 1 is normal.
languageoptional A language tag for the voice, such as en-US. Experimental.
deviceoptional A device name, or a key like pushcut:iPhone. Leave it out to use the default device.
read_device_clipboard
Returns what is on the device’s clipboard. Text comes back as text. Images and files come back as a data URL.
deviceoptional A device name, or a key like pushcut:iPhone. Leave it out to use the default device.
write_device_clipboard
Puts text on the device’s clipboard so you can paste it there. Text only for now.
text The text to copy.
deviceoptional A device name, or a key like pushcut:iPhone. Leave it out to use the default device.
open_url_on_device
Opens a URL on the device, in Safari or in the app that owns its scheme. The device must be unlocked.
url The URL to open.
deviceoptional A device name, or a key like pushcut:iPhone. Leave it out to use the default device.
open_app_on_device
Opens an app on the device by its bundle id. On iOS 27 it can also place the window. With sideBySideWith set, it opens the two apps side by side instead. The device must be unlocked. If you do not know an app’s bundle id, ask rather than guess.
app The app’s bundle id, such as com.apple.mobilesafari.
windowingoptional Where to place the window on iOS 27: Full Screen, Left, Right, Top, Bottom, a corner (Top Leading, Top Trailing, Bottom Leading, Bottom Trailing), or a third (Left Third, Middle Third, Right Third). Corners and thirds work only on iPad and Mac. On an iPhone they are refused with an error.
sideBySideWithoptional The bundle id of a second app to open next to the first.
ratiooptional How to split the screen when two apps open: half (the default) or two-thirds for the first app.
deviceoptional A device name, or a key like pushcut:iPhone. Leave it out to use the default device.
set_device_setting
Switches one of the device’s settings: a Focus, the flashlight, the screen brightness, or Low Power Mode. Changing a Focus needs the device unlocked.
setting Which setting: focus, flashlight, brightness, or lowPowerMode.
enabledoptional On or off, for focus, flashlight and lowPowerMode.
valueoptional A level from 0 to 1: the screen brightness for brightness, or how bright the flashlight shines for flashlight.
focusoptional The name of the Focus to switch, for focus. Leave it out for Do Not Disturb.
deviceoptional A device name, or a key like pushcut:iPhone. Leave it out to use the default device.
get_device_screenshot
Takes a screenshot of the device’s screen and returns it as an image. Use it to see what is on the screen, for example to check that an app opened. The device must be unlocked.
deviceoptional A device name, or a key like pushcut:iPhone. Leave it out to use the default device.
play_music_on_device
Plays an album, a playlist, a song or an artist on the device by name. It looks in your library first, then in the Apple Music catalog. Playlists come from your library only. Returns the song that started and where it came from. If nothing matches, you get an error.
kind What to play: album, playlist, song, or artist.
name The name to look for.
shuffleoptional Shuffle the songs. Off by default.
deviceoptional A device name, or a key like pushcut:iPhone. Leave it out to use the default device.
control_music_on_device
Controls the music on the device: pause, resume, skip to the next or previous song, set the volume, or tell you what is playing.
command One of pause, resume, next, previous, volume, or now_playing.
valueoptional The volume from 0 to 1. Required for volume and refused for every other command.
deviceoptional A device name, or a key like pushcut:iPhone. Leave it out to use the default device.
Ask you questions
Let a client ask you a set of questions on your phone and get all the answers back in one go. This is handy when the client needs details or decisions only you have.
interview_user
Asks you a list of questions on your iPhone or iPad by running the “Shortcuts Toolbox - Interview User” shortcut there. You can skip questions that are not required and go back to change an answer. The call waits until you finish, then returns every answer.
surface The device to ask on, written device: plus the device key. The client is told which devices are available.
questions The questions, asked in order. Every question names its type: text, pick one, pick several, number, date and time, a 1 to 10 scale, photo, or location. A question can be required, can check the answer against a pattern, a date range or a plain-English rule (asking again when it fails, up to 8 tries), can start with a suggested answer, can show a page or image first, and can be asked only when an earlier answer matches.
titleoptional A short title for the interview.
eyesFreeoptional Set to true for voice mode. Questions are spoken and you answer by dictation. Useful when you cannot look at the screen, such as while driving.
completionTitle, completionMessageoptional The notification shown when you finish.
Needs: Clients only see this tool when a device is switched on in Settings → Remote Execution, the “Shortcuts Toolbox - Interview User” shortcut is installed from Getting Started, and that shortcut has Run on remote device turned on. REMOTE_RUN_CALLBACK_BASE_URL must be set too. Over MCP, interviews always run on a device, never in the app’s chat or on your Mac.
Notifications
Every notification lands in the Shortcuts Toolbox inbox and can also go to your devices through Pushcut or web push. Dismissing it in the inbox clears it from your Pushcut devices too. A web push notification can’t be cleared remotely.
send_notification
Sends a notification to the inbox and to any devices you name. On Pushcut it can carry an image and up to 4 buttons. A button can open a page in Shortcuts Toolbox, open any URL, run a shortcut on your Mac, start an AI task on your Mac, or run a shortcut on the phone.
title The notification title.
text The notification body.
targetsoptional Devices besides the inbox, like pushcut:My iPhone or webpush:iPhone. Leave it out for the default device from the Remote Execution settings. Pass an empty list for the inbox only.
urloptional What tapping it opens: a page in Shortcuts Toolbox or a web URL. Defaults to the notification in the inbox.
actionsoptional Up to 4 Pushcut buttons, each with a label and what it does.
notification_idoptional A stable ID. Sending again with the same ID replaces the earlier notification in the inbox and on your devices.
image_urloptional An image shown with the Pushcut notification.
time_sensitiveoptional On by default, so Pushcut notifications break through Focus modes. Set to false for ones that can wait.
senderoptional Who the inbox says it is from, like a workflow name.
Needs: Pushcut targets need a Pushcut API key in Settings → Pushcut. Web push targets need notifications turned on in the Home Screen app in Settings → Web Push. A button that runs a shortcut on your Mac needs that shortcut to be enabled in Shortcuts Toolbox, the same switch scheduling uses.
list_notification_targets
Lists the devices a notification can go to, on every channel, and the default device.
No inputs.
Needs: Nothing. A channel that isn’t set up lists no devices.
Pushcut widgets
Update your Pushcut home-screen widgets. These tools need a Pushcut API key in Settings → Pushcut.
list_pushcut_widgets
Lists your Pushcut widgets and the layouts that can be shown on them. For each widget you get its size, the layouts that fit it, whether the AI may change its content or swap its layout, and any standing instructions you wrote for it.
No inputs.
Needs: Widgets and layouts are set up in Settings → Pushcut.
update_pushcut_widget
Changes what a Pushcut widget shows. It can fill in text, symbols, links, images, and colors, or swap the widget to another layout. Five ready-made layout families come with the app: sctb-text, sctb-list, sctb-stats, sctb-hero, and sctb-image.
widget_name The widget, as named by list_pushcut_widgets.
valuesoptional Text for each slot in the layout, keyed by slot name.
content_nameoptional The layout to show. A family name such as sctb-list picks the version that fits the widget’s size.
themeoptional A color preset for the whole widget.
on_tapoptional What tapping the widget does.
devicesoptional Pushcut device names to update. Leave it out to update every device.
Needs: Each widget has its own permissions in Settings → Pushcut. Writing values, a theme, or a tap action needs writing allowed. Showing a different layout needs swapping allowed. The widget must also have a size set.
Tools from your other MCP servers
If you connect other MCP servers to Shortcuts Toolbox as a client, their tools can come through this same
endpoint. Turn on Expose MCP Client Tools over MCP Server in
Settings → MCP Aggregator. Each server also has its own
Expose Tools via MCP Server switch, so you can leave some servers out.
These tools are named after the server you added. A tool called search from a server you named
notes shows up as notes_search. If a tool’s name already starts with the
server name, it keeps its name. The list updates on its own as servers connect and disconnect. See
MCP Client & Aggregation to set this up.
Choose which tools a client sees
Add include or exclude to the MCP server URL to give one client a shorter tool
list. Both take tool names separated by commas. A * matches any run of characters and a
? matches one character. include keeps only the tools that match, then
exclude removes any that match.
# everything except two connected servers
https://your-server/api/mcp?exclude=devonthink_*,readwise_*
# only the shortcut tools
https://your-server/api/mcp?include=list_*,run_enabled_shortcut,get_shortcut_*,shortcut_*
A tool that is filtered out is missing from that client’s list, and calls to it are refused. The
filter covers the built-in tools and the tools from your other servers alike.
Every tool call a client makes is recorded in the Audit Log with its input
and result. The in-app AI Chat has a few more tools that need you in the
loop, such as scheduling jobs and changing a shortcut’s AI settings. Those are not available over
MCP.