askew-mcp
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
**Let any AI agent use your iPhone.** askew-mcp is the local connector for Askew: an MCP server (stdio) that lets Claude Code, Claude Desktop, Cursor, Codex or any MCP client run Shortcuts on your iPhone, send you notifications, and read what your phone sends back. The iPhone can stay locked. The 0.2 series adds explicit device selection and assigned local Mac targets. Device job inputs, results and inbox items are sealed with your key before reaching the relay. Recipe uploads have a separate plaintext boundary described below.
> iPhone relay and local macOS targets; physical iPad background validation is pending. No Android. The Askew app is currently in waitlist at https://askew.my
**Full setup guide**: English · 한국어 · 中文 · 日本語
1. Get a connector key
In the Askew app on your iPhone: **Settings → Register device → allow notifications → New connector**. Copy the key (akc_…). It is shown once.
2. Add the connector to your agent
**Claude Code**
**Claude Desktop / Cursor / any MCP client** (claude_desktop_config.json, .cursor/mcp.json, …)
**Codex CLI** (~/.codex/config.toml)
The first authenticated tool call creates ~/.askew/connector.key (X25519 private key, mode 0600), registers the public key with the relay and prints a **fingerprint as six words** on stderr, like cider grove desert fever city burger. Open the app's connector screen and check that the same six words are there, then tap **확인함 / Verified**. That one check rules out a swapped relay. Until you do it the app shows the connector as unverified, and your agent is told to ask you for it.
3. Install the dispatcher on the phone
In the app's **Shortcuts** (단축어) tab, install the *Askew dispatcher* (share sheet → Shortcuts → Add), open it and turn on the **Automation** toggle at the top. With the phone unlocked, run one test push from *Settings → Checkup* and tap **Always Allow**. One toggle, one allow, once. Then add recipes (Calendar, Reminders, Notes, …) the same way and ask your agent:
> "Add dentist Thursday 3pm to my phone calendar."
Choose a device or this Mac
Call askew_list_routes and select one enabled targets entry. Omitting target uses the route's default device; there is no broadcast. The phone manages target assignments. To run an already installed Shortcut on this Mac, use:
Use that route's actual input contract. The connector ID must match the one printed by askew_list_routes; this process cannot execute on another Mac. The target and route must both be enabled. Local execution requires macOS, an authenticated relay connection to read assignments and the emergency-stop snapshot, and executionMode: "auto". A stopped account or a server missing the stop-state field blocks local execution. Stop is checked before dispatch; it cannot undo effects of an already running Shortcut.
Local askew_run resolves the exact Shortcut name to a unique installed identifier, runs once, and returns the result directly to the MCP client. Input and output stay on this Mac; it creates no server job, usage charge, server run history, or last-success update. wait applies only to device jobs: Mac execution waits up to 60 seconds and returns a local_… job ID. askew_get_run reads that ID from this connector’s local journal (without long-polling). A timeout/failure may follow partial effects; it never retries automatically. Mac sleep can prevent execution.
Confirm-mode routes require a human flow that this local executor does not implement, so they are rejected before running. For automatic Mac runs, supply a stable idempotencyKey (1–200 characters). The connector saves a durable reservation before dispatching. Repeating the same request returns the saved result; changed inputs, route, or Shortcut name conflict. An interrupted process or uncertain failure stays unknown and is never rerun with that key. Requests without a key are independent runs. Do not remove/change a key and blindly retry an uncertain attempt; inspect its effects first.