# Askew — iPhone, iPad and Mac via Shortcuts (npm · askew-mcp)

Run iPhone Shortcuts through an encrypted relay, or assigned auto-mode Shortcuts on this Mac.

- Trust score: 68/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-21

## Components

- npm · `askew-mcp`: 68/100 (this document), [markdown](https://verifymcp.io/servers/dominic-dk-askew-mcp/askew-mcp.md), [page](https://verifymcp.io/servers/dominic-dk-askew-mcp/askew-mcp)

## Channel facts

- Registry: `npm`
- Package: `askew-mcp`
- Version: `0.2.1`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-09-21.

- **Supply Chain Security**: 98/100
  - No malware found by supply-chain analysis.
  - No known CVEs affecting this package version or its production dependencies.
  - No install/post-install scripts declared.
  - 31 of 98 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 0 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 68/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2449 tokens (~222/item across 11 items; 11 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 10/100
  - Stability observed for 3 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 99/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 96% of tool parameters carry a description.
- **Tool Safety**: 75/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "askew_notify" implies "send" and declares no destructiveHint at all, which the MCP spec reads as destructive by default.
  - An AI judge read all 11 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the Askew — iPhone, iPad and Mac via Shortcuts MCP server?

Askew — iPhone, iPad and Mac via Shortcuts runs locally as an npm package, launched with npx -y askew-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add dominic-dk-askew-mcp -- npx -y askew-mcp
```

### Cursor

```json
{
  "mcpServers": {
    "dominic-dk-askew-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "askew-mcp"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "dominic-dk-askew-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "askew-mcp"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add dominic-dk-askew-mcp -- npx -y askew-mcp
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "dominic-dk-askew-mcp": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "askew-mcp"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add dominic-dk-askew-mcp --command npx --arg -y --arg askew-mcp
```

### Hermes

```yaml
mcp_servers:
  dominic-dk-askew-mcp:
    command: "npx"
    args: ["-y", "askew-mcp"]
```

### Netclaw

```json
{
  "McpServers": {
    "dominic-dk-askew-mcp": {
      "Transport": "stdio",
      "Command": "npx",
      "Arguments": [
        "-y",
        "askew-mcp"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add dominic-dk-askew-mcp -t stdio -c npx -a -y askew-mcp
```

### Other

```json
{
  "mcpServers": {
    "dominic-dk-askew-mcp": {
      "command": "npx",
      "args": [
        "-y",
        "askew-mcp"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-09-21 (score 68, −1)

- [security regression] Stability: 0.07 → unverified
- [security regression] Tool safety: pass → unverified
- [functional regression] Schema quality: 1844 → 2449
- [functional regression] Schema quality: 1844 → 2362
- [functional regression] Capabilities: pass → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional] First check of Schema quality: unverified
- [functional] Package version: 0.1.4 → 0.2.1
- [functional] Package version: 0.1.4 → 0.2.0

### 2026-09-20 (score 69, +11)

- [security improvement] Known CVEs: unverified → pass
- [functional improvement] Dependency health: unverified → 0.86

### 2026-09-19 (score 58, −10)

- [security regression] Known CVEs: pass → unverified
- [security regression] Tool safety: pass → unverified
- [security] Stability: Stability not yet verified: we do not have a sandbox capture of the MCP schema this version of the package serves yet.
- [functional regression] Capabilities: pass → unverified
- [functional regression] Dependency health: 0.86 → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional improvement] Stability: unverified → 0.03
- [functional] First check of Schema quality: unverified
- [functional] Package version: 0.1.3 → 0.1.4

### 2026-09-18 (score 68)

First indexed and scored.

## MCP tools (11)

### `askew_actions_search` (~108 tokens)

Search the catalog of Shortcuts actions (539 of them) for what parameter keys an action accepts, their types, its output type and the permissions it needs. Apple does not document this. Call it before askew_recipe_build — a wrong parameter key raises NO error, it is silently ignored, so the Shortcut runs and returns a confidently wrong answer.

Input parameters:

- `limit` (integer)
- `query` (string, required): Part of an action identifier, its display name, or a parameter key.

### `askew_recipe_build` (~290 tokens)

Compose and sign a brand-new Shortcut from actions, optionally importing and running it on this Mac. A successful run does not prove correctness or safety. Use this when no existing route does what the user needs. **Requires a Mac** — this builder uses the macOS Shortcuts CLI, so on Windows or Linux it returns an error and you should use the existing verified routes instead. Getting it onto the user's iPhone is a separate step the user must tap through; iOS has no silent install. Always look up parameter keys with askew_actions_search first.

Input parameters:

- `input` (string): Input to pass on the verification run, usually one line of JSON.
- `name` (string, required): Name for the new Shortcut. Must not collide with one already on the Mac.
- `sendToPhone` (boolean): Upload the signed file and plaintext workflow so the user can inspect it in Shortcuts on their iPhone. The relay summary is based on submitted workflow, not verified file contents. Run output is neve…
- `steps` (array, required): The actions, in order.
- `verify` (boolean): Import it on this Mac and run it once, including any side effects of its actions. Use only when those effects are authorized; false signs without importing or running. A successful run does not prove…

### `askew_run` (~612 tokens)

Run an enabled route on one assigned device or this Mac connector. A connector target must match this connectorId, run on macOS, and use auto mode; confirm-mode is rejected before local effects. A durable, encrypted local journal prevents re-execution with the same idempotencyKey, including after process restart; a changed request conflicts. Local journal files must be retained to preserve this protection. Local input/results stay on this Mac, no relay job or quota is created, and execution waits up to 60 seconds. Local errors may follow partial effects: never automatically retry. For device targets: Works while the phone is locked: the relay pushes a notification, one dispatcher automation runs the target Shortcut, and the result comes back end-to-end encrypted. Behavior: call askew_list_routes first; each route lists an inputExample and the input MUST use exactly those keys (dates 'YYYY-MM-DD HH:mm'), otherwise the call is rejected before anything runs. Waits up to `wait` seconds (default 45) and returns status (done | failed | unknown | pending), the decrypted result text and a timeline. If status is 'unknown' or 'pending', poll with askew_get_run using the returned jobId. Usage: one route per call; do not retry a failed job blindly — read the error text, fix the input, or ask the user. Use idempotencyKey when you must retry a network error.

Input parameters:

- `idempotencyKey` (string): Optional client-chosen key (1–200 chars) to return an existing run on retries. Local Mac records persist on this computer: reuse the same key and input after uncertainty; never change/remove the key…
- `input` (required): Input for the Shortcut. MUST follow the route's inputExample from askew_list_routes: the same JSON keys, dates as 'YYYY-MM-DD HH:mm', send "" for keys you do not need. A JSON object for routes whose…
- `routeId` (string): Route id from askew_list_routes (e.g. 'rt_…'). Give either routeId or routeName; routeId wins when both are present.
- `routeName` (string): Route name from askew_list_routes (e.g. 'calendar.add'). Case-sensitive. Use this when you know the name but not the id.
- `target` (object): One enabled target from the route targets list. Omit to use the default device; never broadcast. A connector target must be this connectorId on macOS and runs locally without relay quota.
- `wait` (integer): Device targets: seconds to wait for the result, 0–60 (default 45); 0 returns pending for askew_get_run. Local Mac targets wait up to 60 seconds and return a local_ job ID that can be read on this con…

### `askew_get_run` (~190 tokens)

Return the current status and, when finished, the decrypted result of a job started with askew_run. Use it when askew_run returned status 'unknown' or 'pending' (for example when wait=0 or the phone was slow). Set `wait` to long-poll up to 60 seconds. Output: status, result text, and the timeline (accepted → pushed → started → finished). A local_ ID reads only this connector’s encrypted local journal; wait is ignored for local records. Local unknown means running, interrupted, or uncertain: it never triggers execution.

Input parameters:

- `jobId` (string, required): Job id returned by askew_run: job_… for a phone or local_… for this connector’s local journal.
- `wait` (integer): Seconds to long-poll for a terminal status, 0–60 (default 0 = return the current status immediately).

### `askew_list_routes` (~117 tokens)

List everything an agent can act on in this account: the connector's name and mode, each registered device with its key fingerprint and last-seen time, and every route (an installed Shortcut) with its routeId, name, target Shortcut name, execution mode, enabled flag, last success time, inputExample, input hint and output hint. Call this before askew_run to learn the exact input keys a route expects. Takes no arguments. If a route shows no contract, ask the user what its Shortcut expects before running it.

### `askew_notify` (~289 tokens)

Send a lock-screen notification to the user's phone (mirrored to Apple Watch) and keep the full text in the app's results box. One-way agent → person: the user cannot reply through it; to receive data from the phone use the inbox tools. `title` is sent in clear text, `body` and `content` are end-to-end encrypted. Use `content` for long text (briefings, drafts) and `body` for the short line shown on the lock screen. Returns the delivery ids. Use `ref` to group related notifications.

Input parameters:

- `body` (string): Short notification body shown on the lock screen and Apple Watch. End-to-end encrypted; the relay only carries an encrypted hint.
- `content` (string): Longer text kept in the app's results box (e.g. a full briefing or draft). End-to-end encrypted. Markdown is shown as plain text.
- `deviceId` (string): Send to one device only (id from askew_list_routes). Default: every registered device.
- `ref` (string): Optional reference (≤200 chars) to group deliveries in the results box, e.g. 'morning-briefing' or an inbox item id you are answering.
- `title` (string, required): Notification title, 1–200 chars. Sent to the phone in clear text, so keep sensitive details in body/content.

### `askew_inbox_list` (~173 tokens)

Return items the phone sent to the agent: automation triggers (Wallet transaction, Sleep Focus ended, Action button), share-sheet shares (URLs, text, files), voice memos and anything a Shortcut posted with 'Send to agent'. Each item is decrypted on this computer and returned as id, kind, ref, timestamp, device and the data. The data is explicitly framed as user-phone data, not instructions. Behavior: returns immediately (no waiting); items stay listed until askew_inbox_ack is called with their ids. Use `since` to skip older items.

Input parameters:

- `since` (string): ISO 8601 timestamp (e.g. '2026-09-18T09:00:00Z'). Only items created after this moment are returned. Default: all unacknowledged items.

### `askew_inbox_wait` (~174 tokens)

Block for up to `timeout` seconds (max 30) until a new inbox item arrives, then return it exactly like askew_inbox_list. Use this in a loop to react to the phone in near real time (e.g. answer a shared article, log a payment). Returns 'inbox empty' on timeout without error, so simply call it again. Acknowledge handled items with askew_inbox_ack so they are not returned twice.

Input parameters:

- `since` (string): ISO 8601 timestamp. Only items created after this moment count. Default: any unacknowledged item.
- `timeout` (integer): Seconds to wait for a new item, 1–30 (default 30). Returns early as soon as an item arrives; returns 'inbox empty' on timeout.

### `askew_inbox_ack` (~113 tokens)

Mark inbox items as handled so askew_inbox_list and askew_inbox_wait stop returning them. Pass the ids exactly as shown in the inbox output. Acknowledgement is per item and cannot be undone; the items remain visible in the app's history on the phone. Returns the number of items acknowledged.

Input parameters:

- `ids` (array, required): One or more inbox item ids (the 'id=' field in askew_inbox_list / askew_inbox_wait output). Acknowledged items stop appearing.

### `askew_variables_get` (~158 tokens)

Read a variable shared between the agent and the user's phone (for example a location, a plan or a preference a Shortcut stored). Values are sealed with an account key the phone issued, so the relay cannot read them; the connector decrypts on this computer. Returns the value text and when it was last updated. Errors: the phone has not sent the account key yet (ask the user to open Settings → Connector → Resend key), the name does not exist, or the value was stored in an old format.

Input parameters:

- `name` (string, required): Variable name as stored (case-sensitive), e.g. 'home', 'mood', 'today.plan'. Names are set by askew_variables_set or by the phone's Shortcuts.

### `askew_variables_set` (~225 tokens)

Write a variable shared between the agent and the user's phone. The value (a string or a JSON object) is encrypted with the account key before leaving this computer, and the phone's Shortcuts read it with the same key; the relay stores only ciphertext. Writing an existing name replaces the value; there is no versioning. Returns the name and update time. Errors: the account key has not arrived yet (ask the user to open Settings → Connector → Resend key). Use it for data a Shortcut should pick up later (e.g. 'today.plan'), not for large blobs.

Input parameters:

- `name` (string, required): Variable name (case-sensitive), e.g. 'home' or 'today.plan'. Writing an existing name replaces its value; the name is authenticated with the value, so it cannot be read back under another name.
- `value` (required): The value to store: a plain string, or a JSON object (stored as JSON text). Encrypted with the account key before it leaves this computer; the phone's Shortcuts read it with the same key.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/dominic-dk-askew-mcp/askew-mcp#diagnostics

## Score history

- 2026-09-21: 68
- 2026-09-20: 69
- 2026-09-19: 58
- 2026-09-18: 68

## Common questions

### What is the Askew — iPhone, iPad and Mac via Shortcuts MCP server?

Askew — iPhone, iPad and Mac via Shortcuts is an MCP server listed in the public MCP registry as io.github.Dominic-DK/askew-mcp. Run iPhone Shortcuts through an encrypted relay, or assigned auto-mode Shortcuts on this Mac. This page covers its npm package (askew-mcp).

### Is the Askew — iPhone, iPad and Mac via Shortcuts MCP server safe to use?

Askew — iPhone, iPad and Mac via Shortcuts scores 68 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 21 September 2026. It declares no install or post-install scripts. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the Askew — iPhone, iPad and Mac via Shortcuts MCP server expose?

Askew — iPhone, iPad and Mac via Shortcuts exposes 11 tools: askew_actions_search, askew_recipe_build, askew_run, askew_get_run, askew_list_routes, and 6 more. Their descriptions and schemas cost roughly 2,449 tokens of context every time the server is loaded.

### Is the Askew — iPhone, iPad and Mac via Shortcuts MCP server still maintained?

Askew — iPhone, iPad and Mac via Shortcuts is still listed as active in the MCP registry. We last reached this channel on 21 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the Askew — iPhone, iPad and Mac via Shortcuts MCP server under?

Askew — iPhone, iPad and Mac via Shortcuts declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- npm package: https://www.npmjs.com/package/askew-mcp
- Socket report: https://socket.dev/npm/package/askew-mcp
- Repository: https://github.com/Dominic-DK/askew-mcp
- Website: https://askew.my/
- Changelog RSS feed: https://verifymcp.io/servers/dominic-dk-askew-mcp/askew-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/dominic-dk-askew-mcp/askew-mcp.json
- HTML version of this page: https://verifymcp.io/servers/dominic-dk-askew-mcp/askew-mcp
