Available MCP Tools

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.

  • folder optional 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.
  • input optional 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.

  • folder optional Only list shortcuts in this folder.

list_shortcut_folders

Lists the folders in your Shortcuts library.

  • sort optional 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.
  • direction optional outgoing (shortcuts it runs), incoming (shortcuts that run it), or both. Defaults to both.
  • depth optional 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”.
  • context optional 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.
  • title optional A title shown in the app.
  • icon optional 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_id optional 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_shortcuts optional Shortcuts that pair well with it.
  • tags optional Free-form tags.
  • icon optional 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, icon optional 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.
  • field optional handlebars_body (the default), llm_instructions, description, name, data_schema, or sample_data.
  • replace_all optional 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_id optional A stored template. Either this or template.
  • template optional An inline template: its body and data schema.
  • data The data to render.
  • title optional A title for the page.
  • icon optional 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_id optional 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.
  • title optional Display title.
  • schedule optional A cron expression or a phrase such as every 2 hours.
  • icon optional A Lucide icon name.
  • badge optional A count or short text shown on the app’s tile.
  • badge_clears_on_open optional Clear the badge when the app is opened.
  • associated_jobs optional Shortcuts or AI tasks linked to the app.
  • id optional 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_jobs optional 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.
  • timeoutSeconds optional 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.
  • limit optional 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_id optional 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_workflow optional Also delete the app’s workflow.
  • delete_page optional 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.
  • timeoutSeconds optional 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.
  • index optional 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.

  • type optional 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_id optional 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.
  • description optional What the workflow does.
  • inputs optional JSON Schema of the inputs a run takes.
  • schedule optional A cron expression or a phrase.
  • run_immediately optional Run once after saving and report each step.
  • icon optional A Lucide icon name.
  • id optional 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, inputs optional 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_id optional The workflow. Either this or app_id.
  • app_id optional An app, to edit its bound workflow.
  • find The exact text to find.
  • replace The replacement. May be empty.
  • node_id optional Only search this step.
  • field optional With node_id: only this field of the step.
  • replace_all optional 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_id optional The workflow. Either this or app_id.
  • app_id optional An app, to edit its bound workflow.
  • upsert_nodes optional Steps to patch (by id) or add (with a type).
  • remove_fields optional Fields to drop from steps.
  • remove_node_ids optional Steps to remove, with their edges.
  • add_edges optional Edges to add.
  • remove_edges optional Edges to remove.
  • output_node_id optional 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.
  • inputs optional Run inputs matching the workflow’s inputs schema.
  • timeoutSeconds optional 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.

  • device optional 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.
  • input optional Input for the shortcut. Must match the shortcut’s Input Schema when it has one.
  • device optional 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.

  • device optional 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.
  • rate optional Speed from 0 (slowest) to 1 (fastest).
  • pitch optional From 0.5 (low) to 2 (high). 1 is normal.
  • language optional A language tag for the voice, such as en-US. Experimental.
  • device optional 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.
  • rate optional Speed from 0 (slowest) to 1 (fastest).
  • pitch optional From 0.5 (low) to 2 (high). 1 is normal.
  • language optional A language tag for the voice, such as en-US. Experimental.
  • device optional 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.

  • device optional 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.
  • device optional 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.
  • device optional 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.
  • windowing optional 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.
  • sideBySideWith optional The bundle id of a second app to open next to the first.
  • ratio optional How to split the screen when two apps open: half (the default) or two-thirds for the first app.
  • device optional 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.
  • enabled optional On or off, for focus, flashlight and lowPowerMode.
  • value optional A level from 0 to 1: the screen brightness for brightness, or how bright the flashlight shines for flashlight.
  • focus optional The name of the Focus to switch, for focus. Leave it out for Do Not Disturb.
  • device optional 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.

  • device optional 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.
  • shuffle optional Shuffle the songs. Off by default.
  • device optional 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.
  • value optional The volume from 0 to 1. Required for volume and refused for every other command.
  • device optional 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.
  • title optional A short title for the interview.
  • eyesFree optional 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, completionMessage optional 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.
  • targets optional 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.
  • url optional What tapping it opens: a page in Shortcuts Toolbox or a web URL. Defaults to the notification in the inbox.
  • actions optional Up to 4 Pushcut buttons, each with a label and what it does.
  • notification_id optional A stable ID. Sending again with the same ID replaces the earlier notification in the inbox and on your devices.
  • image_url optional An image shown with the Pushcut notification.
  • time_sensitive optional On by default, so Pushcut notifications break through Focus modes. Set to false for ones that can wait.
  • sender optional 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.
  • values optional Text for each slot in the layout, keyed by slot name.
  • content_name optional The layout to show. A family name such as sctb-list picks the version that fits the widget’s size.
  • theme optional A color preset for the whole widget.
  • on_tap optional What tapping the widget does.
  • devices optional 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.