shortcut-forge
Provides an MCP server and Python library for generating, linting, inspecting, and signing Apple Shortcuts, supporting actions for Apple Health, Reminders, Maps, Apple Intelligence, and 50+ step types.
Provides a GitHub Issue shortcut template to file an issue from your phone, integrating with GitHub's issue tracking.
Provides a Webhook Trigger shortcut template that POSTs JSON to Home Assistant, enabling automation triggers from iOS Shortcuts.
Integrates with iCloud Drive folders to drop JSON specs or unsigned shortcuts and retrieve signed .shortcut files for import on iPhone.
Generates signed .shortcut files that can be imported and run on iOS, including support for iOS 27 features like Stored Content and native Shortcuts actions.
Supports auto-signing of shortcuts on macOS via the shortcuts sign tool, with a launchd agent that watches folders and signs shortcuts automatically.
Provides a Webhook Trigger shortcut template that POSTs JSON to n8n, enabling integration with n8n workflows from iOS Shortcuts.
Provides a Webhook Trigger shortcut template that POSTs JSON to Zapier, enabling integration with Zapier workflows from iOS Shortcuts.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@shortcut-forgebuild a shortcut that logs my vitamins to Apple Health and avoids duplicates"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
The problem (you've probably said one of these)
"I asked ChatGPT for a shortcut and got fourteen steps to tap in by hand."
*"The file imported fine. Then: 'Choose a value for each parameter of this action.'"*
"iOS 27 can build a shortcut from a description, but only on my iPhone 15 Pro, one shortcut at a time, and I can't review or version what it changed."
"Every MCP server I found for Shortcuts only runs shortcuts I already have."
"Every time I fix the family shortcut, everyone has to download it again."
Apple Shortcuts is the most powerful automation layer on the iPhone, and still the hardest thing to get an AI to produce. The file format is undocumented, a structurally valid plist can still break on the device, and nothing catches the difference until you're staring at an error on your phone.
Related MCP server: ShortcutsBridge
The fix
shortcut-forge is an MCP server, a Claude plugin and a Python library that turns "make me a shortcut that…"
into a signed .shortcut file that has been checked against the ways shortcuts really fail on iPhone.
You: "Every time I take my vitamins, log them to Apple Health, tick off today's reminder
and set up tomorrow's, but never create duplicates."
Claude: → shortcut_library("supplements") → shortcut_from_template("supplement-tracker", …)
✓ 750 actions · 0 lint errors · signed on your Mac
→ ~/Downloads/shortcut-forge/Supplement Check.shortcut (AirDrop / iCloud Drive → tap → Add)Apple "Describe a Shortcut" (iOS 27) | Asking a chatbot | Other Shortcuts MCPs | shortcut-forge | |
Works from Claude, Codex, ChatGPT, Cursor… | – | ✓ | some | ✓ |
No new iPhone required | needs iPhone 15 Pro+ / Apple silicon | ✓ | ✓ | ✓ |
Output you can read, diff, version, review | – | text | varies | JSON spec + plist |
Checked against real on-device failures | n/a (native) | – | structure only | 15 semantic rules |
Signed and importable on iPhone | ✓ (native) | – | rarely | ✓ auto on macOS |
Updates without re-downloading | – | – | – | remote config + update check |
Shared, remixable library | – | – | – | ✓ 20+ entries |
Apple's built-in builder is great for quick personal one-liners and lives right in the app; use it. Reach for shortcut-forge when you want an AI you already use to build something bigger, reviewable and shareable.
Install
Claude Code (plugin = MCP server + skill + /shortcut command)
/plugin marketplace add Hyunki6040/shortcut-forge
/plugin install shortcut-forge@shortcut-forgeClaude Desktop: double-click shortcut-forge.mcpb from Releases, or:
{ "mcpServers": { "shortcut-forge": { "command": "uvx", "args": ["shortcut-forge", "mcp"] } } }OpenAI Codex
codex mcp add shortcut-forge -- uvx shortcut-forge mcpChatGPT, Gemini, any chatbot: connect over HTTP (shortcut-forge mcp --http) or, with no MCP at all, paste
prompts/LLM_PROMPT.md and drop the JSON it writes into the Mac watch folder (below).
Cursor, VS Code, Windsurf, Gemini CLI: see docs/CLIENTS.md.
Python / CLI
uv tool install shortcut-forge # or: pipx install shortcut-forge
shortcut-forge template supplement-tracker --signMac auto-signing: drop a spec, get a shortcut
iOS only imports signed shortcuts, and only a Mac can sign them. shortcut-forge makes that invisible:
shortcut-forge mac install-agent # launchd agent, starts at loginiCloud Drive/Shortcut Forge/ ← drop *.json specs or *.unsigned.shortcut (from any device or AI)
iCloud Drive/Shortcut Forge/Signed/ ← signed .shortcut appears in seconds → open it on your iPhone
iCloud Drive/Shortcut Forge/Failed/ ← anything that failed lint, with a .log explaining whyAsk ChatGPT on your phone for a spec, save it to Files, and the shortcut is ready on the same phone before you finish your coffee. In Claude Desktop / Claude Code on a Mac, signing happens inside the tool call.
What people build with it
From the Open Shortcut Library. Every one is a readable spec, lint-clean in CI.
Shortcut | What it does | |
🌤 | Your messy thoughts → a 3-line plan by Apple Intelligence → a reminder | |
🎯 | Blocks 25/50/90 min on your calendar from right now | |
✅ | Notes in, reminders out, summary on the clipboard | |
🌐 | Translate whatever you copied, result back on the clipboard | |
☕️ | One tap → Apple Health, warns past 400 mg | |
💸 | Amount + category → CSV in Stored Content → paste into your sheet | |
🅿️ | Save where you parked, open it in Maps later | |
📡 | POST JSON to n8n / Zapier / Home Assistant | |
🐙 | File an issue from your phone | |
🍱 | Reads options from a JSON URL: edit once, every phone updates, no reinstall | |
💊 | The real 1,073-action shortcut that started this project. Two people, ten time slots, alternate-day doses, Health + Reminders + Apple Intelligence |
…and more: mood journal, sleep diary, grocery list, weather voice brief, low-battery nudge, water log.
Built something? Share it → Tell your AI "submit this to the shortcut-forge library".
Use it
Plain language in any MCP client:
"Make a shortcut that asks how I slept and every Sunday has Apple Intelligence summarise the week."
"Start from the library's expense log, but in won and with my categories."
"Here's my exported shortcut. Why does it crash?" →
shortcut_lint+shortcut_inspect
Python: variables work in f-strings.
from shortcut_forge import Shortcut
sc = Shortcut("Hello", version="1.0.0")
name = sc.ask("What's your name?")
with sc.if_(name, "contains", "Claude") as br:
sc.notify("Hi twin", f"Nice to meet another Claude, {name}")
br.otherwise()
sc.notify("Hi", f"Welcome, {name}")
sc.storage_set("last_name", name) # iOS 27 Stored Content, done right
sc.health_log("Vitamin D", "50") # mcg → mg handled for you
sc.save("Hello.unsigned.shortcut")JSON (what the MCP tools and chatbots write): 50+ step types, plus a raw escape hatch for any action.
{"name": "Hello", "version": "1.0.0", "actions": [
{"ask": "What's your name?", "as": "name"},
{"if": ["{{name}}", "contains", "Claude"],
"then": [{"notify": "Hi twin", "body": "{{name}}"}],
"else": [{"notify": "Hi", "body": "Welcome, {{name}}"}]}
]}MCP tools
Tool | What it does |
| JSON spec → |
| Browse / fetch 20+ community shortcuts as starting points |
|
|
| 15 rules (SF000–SF014) for any unsigned shortcut, including ones exported from the app |
| Indented outline of a shortcut |
|
|
| Sign + |
| Package your shortcut + PR commands for the library |
| System prompt for chatbots without MCP |
| spec · pitfalls · lint-rules · health-types · templates · library · ios27 |
Field notes: why "it imported" isn't "it works"
We built a two-person tracker by having Claude generate the plist. It took more than a dozen import → run → screenshot rounds. Every failure was invisible at build time:
What we wrote | What the iPhone did | Rule |
Stored Content set from a variable | Saved nothing, no error | SF001 |
Health sample "77.4 mcg" of B12 | Logged 77,400,000 mcg (the unit string is read as grams) | SF003 |
| Comparison field empty → run aborted | SF005 |
Delete a stored key that isn't there | Error 16 | SF002 |
Mark found reminders as done | A picker popped up mid-run | SF007 |
Get Contents of URL on every run | Offline once → whole shortcut aborts | SF014 |
Create tomorrow's reminder | Duplicates on every run | builder |
The builder can't produce these; the linter catches them in any shortcut. Full notes: PITFALLS.md.
What is a .shortcut file?
A
.shortcutfile (not.shortor.shortcuts) is an Apple Shortcuts workflow: a binary property list (WFWorkflowActions,WFWorkflowIcon, …) where every action is an identifier likeis.workflow.actions.gettextplus parameters. Variables are "token strings" with UTF-16 offsets.Since iOS 15, shared shortcut files must be signed. A signed file is an Apple Encrypted Archive whose first bytes are
AEA1. Unsigned plists import on a Mac but iOS refuses them.Signing modes:
anyone(any device can import) orpeople-who-know-me(contacts only). Only macOS can sign (shortcuts sign), which is why shortcut-forge automates the Mac side..wflowwas the format of the old Workflow app that became Shortcuts; iCloud links (icloud.com/shortcuts/…) are snapshots created from the app and can't be generated or updated programmatically.
FAQ
Do I need a Mac? To sign, yes (Apple's rule). Building and linting run anywhere; the watch-folder agent lets
one Mac sign for every device you own.
Does my data leave my machine? No. The server runs locally; nothing is uploaded. Library shortcuts that use
remote_config fetch only the JSON URL they name.
Is this affiliated with Apple or Anthropic? No. It is an independent open-source project.
iOS 26 or older? Most actions work; Stored Content needs iOS 27 and Use Model needs Apple Intelligence (the
linter flags these as SF013).
Roadmap: the update problem (help wanted)
Today every shortcut fix means re-sign → re-share → everyone re-downloads and taps "Replace". v0.2 ships the first
answers (remote_config for data, update_check + publish for code, a signing watch folder). Next is a
Shortcut Hub: one-command publish to GitHub, a stable install URL that always serves the latest version,
settings that survive updates, a signing relay for teams, and an experimental loader pattern.
Read ROADMAP.md and pick something. Device reports from real iPhones are the most valuable
contribution of all.
Contributing
Share a shortcut → LIBRARY.md
Found a new way shortcuts break? Open a pitfall issue with the error screenshot and the smallest spec; it becomes a lint rule and a builder fix.
Code → CONTRIBUTING.md · agents read AGENTS.md
MIT licensed. Not affiliated with Apple Inc. or Anthropic. "Shortcuts" and "Siri" are trademarks of Apple Inc.
If shortcut-forge saved you a round of error screenshots, a ⭐ helps the next person find it.
Keywords: Apple Shortcuts MCP, iOS Shortcuts MCP server, Siri Shortcuts AI generator, create .shortcut file programmatically, sign shortcut macOS CLI, Claude Shortcuts, Codex Shortcuts, ChatGPT Shortcuts, iOS 27 Shortcuts Stored Content, Apple Health shortcut, shortcut library.
Available Tools
10 toolsshortcut_buildA
Build a .shortcut from a JSON spec ({"name": ..., "actions": [...]}) and lint it.
See shortcut_reference(topic="spec") for every step type. Set sign=true on macOS to produce an importable signed file. Returns paths, action count and lint findings (fix all errors).
| Name | Required | Description | Default |
|---|---|---|---|
| sign | No | ||
| spec | Yes | ||
| sign_mode | No | anyone | |
| output_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden and does substantial work: it discloses the write artifact (.shortcut file), the platform constraint on signing (macOS), the lint-pass behavior with 'fix all errors' guidance, and the return payload (paths, action count, lint findings). It stops short of covering overwrite behavior on an existing output_path or any credential requirements for signing.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, front-loaded with the core action and the spec shape, then reference pointer, then signing condition, then return values. Only blemish is a stray line break mid-sentence that slightly fragments the second thought; there is no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Returns are described, which compensates for the absent output schema, and the required spec parameter is illustrated. But for a mutating build tool with 0% schema coverage and no annotations, the missing semantics for sign_mode and output_path plus the lack of overwrite/error behavior leave real gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate; it explains the required spec object's top-level keys and the sign flag's macOS condition. However, sign_mode (a free-form string defaulting to "anyone" with no enum or description) and output_path are left entirely undefined, which is a meaningful gap on a signing-related parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb+resource: builds a .shortcut file from a JSON spec and lints it, with the spec shape sketched inline ({"name": ..., "actions": [...]}). An agent can distinguish it from shortcut_lint or shortcut_sign, though the fact that linting is bundled here (rather than deferring to the sibling shortcut_lint) is only implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives real conditional guidance: set sign=true on macOS for an importable signed file, and consult shortcut_reference(topic="spec") for step types. It does not say when to choose this over shortcut_from_template or the standalone shortcut_lint/shortcut_sign siblings, so no exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shortcut_from_templateC
Generate a shortcut from a ready-made template.
template: "supplement-tracker" (multi-user supplements -> Apple Health + self-maintaining reminders, 7-day Apple Intelligence report) or "water-log". config: template config; omit to get the example. Call shortcut_reference(topic="templates") to see each template's config shape.
| Name | Required | Description | Default |
|---|---|---|---|
| sign | No | ||
| config | No | ||
| template | Yes | ||
| sign_mode | No | anyone | |
| output_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It does not disclose whether generation writes a file, what output_path does, what signing means or when it is required, or what side effects occur. Only the template/config behavior is partially described.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is short, front-loaded, and free of filler. Its brevity is appropriate, though the space saved is not used to cover important missing parameter semantics.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a generation tool with five parameters, no annotations, no output schema, and 0% schema description coverage, the description is too thin. Missing sign, sign_mode, and output_path semantics leave an agent unable to call it correctly beyond the simplest template-only case.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description only covers template and config. The sign, sign_mode, and output_path parameters are completely undocumented in both schema and description, leaving three of five parameters without semantic guidance.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Generate a shortcut from a ready-made template.' That distinguishes it reasonably well from sibling shortcut_build by implying template-based rather than freeform construction, though it does not explicitly contrast the two.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives useful context for using config (omit it to get the example) and points to shortcut_reference for template config shapes. However, it does not say when to choose this over shortcut_build, nor does it mention any prerequisites or conditions for template use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shortcut_inspectB
Return an indented, human-readable outline of an unsigned .shortcut file.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations, so the description carries the full burden. 'Return ... outline' implies a read-only operation and 'unsigned' connotes a scope limit, adding some value, but it says nothing about error behavior for signed/missing files, or whether it parses or just dumps structure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler. Terse to the point of under-specification, but structurally clean.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Output schema exists so return values needn't be described, and the operation is simple with one param. Still, with zero annotation coverage and an undocumented path parameter, the definition leaves the agent to infer the file-path semantics on its own.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the only parameter ('path') is undocumented in both schema and description. The description never mentions what the path points to or what format it takes, so it adds no meaning beyond guessing from the tool name.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (return) and resource (indented, human-readable outline of an unsigned .shortcut file). The 'unsigned' qualifier implicitly separates it from shortcut_sign/lint siblings, though no sibling is named.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use, prerequisites, or alternatives. The word 'unsigned' hints that signed files are out of scope but never states what to do with them or why one would inspect rather than lint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shortcut_libraryA
Browse the community shortcut library (20+ ready shortcuts: productivity, health, money, dev, home...).
No slug: list entries matching query (name/description/tags). With slug: return its meta, its spec
(or template config) to use as a starting point, and the signed download link if published.
| Name | Required | Description | Default |
|---|---|---|---|
| slug | No | ||
| query | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations at all, the description must carry the full behavioral burden; it does disclose the per-mode return content and the conditional 'signed download link if published'. However, it never states that this is a read-only browse operation, whether auth is required for download links, or how large the list result can be.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short blocks, front-loaded with the resource and its scope, then the mode switch. Efficient overall, though the mid-sentence line breaks and the parenthetical '(or template config)' make it slightly denser than necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description is the only source of return-value information; it covers detail mode (meta, spec, download link) but says nothing about the shape of list results, result limits, or pagination. Adequate to call correctly, incomplete for interpreting results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description has to compensate, and it largely does: `query` is defined as matching name/description/tags, and `slug` is defined as switching from list mode to detail mode with a specific payload. It adds real meaning over the bare, undocumented schema properties.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Browse the community shortcut library') and gives concrete content scope (20+ ready shortcuts across categories). It implies a clear separation from siblings like shortcut_build/shortcut_inspect, but never names an alternative, so it stays short of a full 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly defines the two modes: no slug → list matching entries, with slug → fetch that entry's meta/spec/download link. That is clear operational context, but there is no statement about when to prefer a sibling tool (e.g. shortcut_inspect or shortcut_from_template) instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shortcut_lintB
Lint an unsigned .shortcut file against known on-device failure patterns (rules SF000-SF013).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations and no output schema, the description carries the full disclosure burden. It does not say whether linting is read-only or rewrites the file, what a result looks like (violation list vs pass/fail), or whether the referenced rules can be suppressed; only the rule-ID range hints at behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One front-loaded sentence with zero filler; the rule range is parenthetical and secondary in emphasis.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no annotations, no output schema, and an undocumented parameter, the definition leaves key questions open: is it read-only, does it modify or emit anything, what does a failure report look like, and are there prerequisites (e.g., platform or dependency on shortcut_reference rule data).
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% and the single 'path' parameter is undocumented in the schema. The description partially compensates by implying the path must point to an unsigned .shortcut file, but adds no format, relative-vs-absolute, or validation details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (lint) and resource (unsigned .shortcut file) plus the rule set (SF000-SF013), which lets an agent distinguish it from shortcut_build and shortcut_sign. It does not explicitly separate itself from the closest sibling, shortcut_inspect, leaving mild ambiguity between 'lint' and 'inspect'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The word 'unsigned' implies a precondition (lint before signing), which is useful implicit usage context. However, nothing states when to prefer shortcut_inspect, shortcut_reference, or shortcut_sign instead, and no exclusions are given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shortcut_llm_promptA
Return a copy-paste system prompt that teaches any chatbot (ChatGPT, Gemini...) to write specs.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It does convey that the tool only produces text (no mutation, no side effects implied by 'Return a copy-paste system prompt'), but says nothing about how the prompt is tailored, whether it varies, or what triggers different output.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with the verb and outcome up front and no filler. Nothing could be removed without losing meaning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema present and no parameters, the description need only establish intent, which it does. A short note on what the generated prompt targets (spec-writing) is given; the only minor gap is any hint about how the prompt is customized.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: it returns a copy-paste system prompt for teaching chatbots to write specs. That is clearly distinct from the sibling tools (build, inspect, sign, lint), though the description doesn't name a sibling to differentiate against explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied — call it when you want a prompt to hand to another LLM — but there is no explicit statement of when to use this versus e.g. shortcut_reference or shortcut_build, and no exclusions or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shortcut_publishC
macOS: build + sign + write manifest.json so installed copies can update themselves.
Adds a daily update check (spec.update_manifest = base_url/manifest.json) to the shortcut. Host the
two output files at base_url (GitHub raw/Pages/S3). Bump version for every release.
| Name | Required | Description | Default |
|---|---|---|---|
| spec | Yes | ||
| notes | No | ||
| version | Yes | ||
| base_url | Yes | ||
| output_dir | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden. It does reveal a meaningful side effect — that the emitted manifest injects spec.update_manifest into the shortcut, changing its runtime update behavior — but says nothing about whether existing output files are overwritten, where files are written, required signing credentials, or what is returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short paragraphs, front-loaded with the verb chain and the outcome. Dense and largely waste-free, though the hosting sentence drifts slightly into deployment advice rather than tool contract.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter mutation tool with a nested `spec` object, no annotations and no output schema, the description leaves major gaps: the two output files are never named, output_dir is unexplained, and the return value/error modes are unknown. It is not sufficient for an agent to call this correctly without reading the schema or guessing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across 5 parameters, so the description must compensate and only partially does. It clarifies `version` (must be bumped per release), `base_url` (hosting location) and the `spec` mutation via spec.update_manifest, but `notes` and especially `output_dir` — which determines where the two files land — are never explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific compound action (build + sign + write manifest.json) with a stated goal (self-updating installed copies), which is distinguishable from shortcut_build and shortcut_sign as the end-to-end publish step. It never explicitly says it subsumes those siblings, so the differentiation is implicit rather than stated.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Offers real operational guidance: host the two output files at base_url (GitHub raw/Pages/S3) and bump `version` for every release. It gives no guidance on when to choose this over calling shortcut_build and shortcut_sign separately, and no prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shortcut_referenceB
Docs for building shortcuts. topic: spec | pitfalls | lint-rules | health-types | templates | library | ios27.
| Name | Required | Description | Default |
|---|---|---|---|
| topic | No | spec |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden of behavioral disclosure. It implies a safe read-only reference lookup and lists topics, but does not explicitly state read-only behavior, permissions, or rate limits. For a low-risk docs tool this is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two compact sentences with zero waste. The purpose is front-loaded and the topic list follows immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one optional parameter and an output schema present, the description provides enough to call the tool correctly by listing topics. It stops short of explaining how topics map to results or when to prefer this over siblings, but the output schema reduces the need to describe return values.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does enumerate valid topic values (spec, pitfalls, lint-rules, health-types, templates, library, ios27), which is useful, but it does not explain what each topic returns or note the default value beyond what the schema shows.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states it provides documentation for building shortcuts and enumerates topic areas, making the resource clear. It does not explicitly differentiate itself from sibling tools like shortcut_llm_prompt or shortcut_build, but the topic list gives enough specificity to distinguish a reference lookup.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to use this tool versus alternatives such as shortcut_llm_prompt or shortcut_build. The phrase 'Docs for building shortcuts' implies a reference use case, but no conditions or exclusions are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shortcut_signB
Sign a .shortcut with the macOS shortcuts CLI so iOS can import it. mode: anyone | people-who-know-me.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | anyone | |
| path | Yes | ||
| output_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It mentions the macOS CLI dependency and signing purpose, but does not disclose side effects, permissions required, overwrite behavior for output_path, or what happens to the input file.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two concise sentences, front-loaded with the core action and purpose. Every sentence adds relevant context without waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 3-parameter tool with no annotations, no output schema, and 0% schema description coverage, the description is too sparse. It leaves key behavioral and parameter details unexplained, so an agent would need to infer how to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only names two mode values ('anyone | people-who-know-me') and does not explain the required path parameter or the output_path parameter, leaving most parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: sign a .shortcut using the macOS shortcuts CLI, with a clear purpose of enabling iOS import. It does not explicitly distinguish itself from siblings like shortcut_submit or shortcut_publish, so it falls short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'so iOS can import it' implies when to use this tool, but there is no explicit guidance on alternatives, prerequisites, or when not to use it. The mode options are named but not explained in terms of usage conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shortcut_submitC
Package a shortcut for the open-source library (github.com/Hyunki6040/shortcut-forge/library).
Validates the spec and metadata, lints it, and returns the exact files plus the git/gh commands to open
a pull request. Encourage the user to run it on their iPhone first and fill verified_on.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| slug | Yes | ||
| spec | Yes | ||
| tags | No | ||
| author | Yes | ||
| category | Yes | ||
| description | Yes | ||
| description_ko | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry the burden. It usefully clarifies that it does NOT actually open the PR but returns the git/gh commands to do so, and that it validates and lints. However, it omits auth requirements, whether spec/metadata are mutated or just checked, and return details.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and followed by the verification note. Efficient, though the out-of-schema `verified_on` reference undermines clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For an 8-param, 6-required tool with a nested spec object, zero schema descriptions, and no output schema, the description is thin on parameter meaning. It also references a field (`verified_on`) absent from the schema, which will confuse an agent trying to satisfy required inputs.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% across 8 parameters, so the description must compensate. It mentions spec and metadata vaguely, and even references a `verified_on` field that is not in the schema, while leaving slug, name, author, category, tags, description, and description_ko unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: packages a shortcut for a named library, validates/lints, and returns files plus git/gh commands. It distinguishes the workflow but does not differentiate from siblings like shortcut_publish or shortcut_lint, which overlap in scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Only guidance is to encourage the user to run it on their iPhone first and fill `verified_on`, which is a helpful workflow note but not a when/when-not comparison. It never states when to choose this over shortcut_publish or shortcut_lint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
v0.2.1- First observed
shortcut_build - First observed
shortcut_from_template - First observed
shortcut_inspect - First observed
shortcut_library - First observed
shortcut_lint - First observed
shortcut_llm_prompt - First observed
shortcut_publish - First observed
shortcut_reference - First observed
shortcut_sign - First observed
shortcut_submit
TDQS
Scored across 10 tools
Each tool targets a distinct stage of the shortcut authoring pipeline (build, template, inspect, sign, lint, reference, library, submit, publish, prompt), so selection is mostly obvious. The only real overlap is shortcut_publish, which internally performs build+sign and could be confused with shortcut_build/shortcut_sign, though its manifest/update purpose is spelled out.
Every tool uses the same snake_case `shortcut_` prefix with a clear verb or noun-suffix (build, inspect, sign, lint, publish, submit). The one prepositional name, shortcut_from_template, still fits the pattern and reads naturally.
Ten tools is squarely in the well-scoped range, and each one covers a genuinely different step (authoring, templating, validation, signing, distribution, docs, discovery). Nothing appears redundant or padded.
The authoring-to-publishing lifecycle is well covered: build, template, inspect, lint, sign, publish, submit, plus docs and a library. Minor gaps remain — there is no tool to decompile an existing .shortcut back into an editable spec, and no test/run simulation beyond linting, which agents must work around manually.
Maintenance
Related MCP Connectors
MCP connector that lets ChatGPT list, search, and run your Apple Shortcuts via a local Mac agent
Automate 1,000+ services from any MCP-compatible AI agent: build Applets, run actions and queries.
MCP server for your apps' tools and custom tools, plus hosted AI agents and approval-gated workflows
Build and run AI workflows, agents, data tables and 1000+ API integrations from any MCP client.
1
Related MCP Servers
- AlicenseAqualityCmaintenanceConnects LLMs to your macOS Shortcuts library, enabling interactive workflows, discovery, and management through AppleScript and CLI integration.311MIT
- AlicenseNot gradedqualityCmaintenanceMCP server that lets ChatGPT list, search, and run your Apple Shortcuts on your own Mac through a local agent and stateless relay.MIT
- AlicenseNot gradedqualityBmaintenanceEnables generation of Apple Shortcuts through schema-validated MCP tools for catalog navigation, control-flow construction, validation, and signing.MIT
- AlicenseNot gradedqualityBmaintenanceEnables ChatGPT or other remote MCP clients to create Apple Reminders and lists, Calendar events, and Notes on a Mac through an Apple Shortcut, with tunnel or self-hosted HTTPS/OAuth connectivity.MIT