Askew

Ejecuta Atajos de Apple en tu iPhone, iPad o Mac desde cualquier cliente MCP (Claude Code, Claude Desktop, Cursor, Codex) a través de un relevo cifrado de extremo a extremo. El teléfono puede permanecer bloqueado.

Documentación

askew-mcp

askew-mcp MCP server npm

Permite que cualquier agente de IA use tu iPhone. askew-mcp es el conector local para Askew: un servidor MCP (stdio) que permite a Claude Code, Claude Desktop, Cursor, Codex o cualquier cliente MCP ejecutar Atajos en tu iPhone, enviarte notificaciones y leer lo que el teléfono envía de vuelta. El iPhone puede permanecer bloqueado. La serie 0.2 añade selección explícita de dispositivo y objetivos locales de Mac asignados. Las entradas, resultados y elementos de la bandeja de entrada de los trabajos del dispositivo están sellados con tu clave antes de llegar al relé. Las subidas de recetas tienen un límite de texto plano separado que se describe a continuación.

Relé de iPhone y objetivos locales de macOS; la validación física de iPad en segundo plano está pendiente. Sin Android. La aplicación Askew está actualmente en lista de espera en https://askew.my

Guía de configuración completa: Inglés · 한국어 · 中文 · 日本語

1. Obtén una clave de conector

En la aplicación Askew de tu iPhone: Configuración → Registrar dispositivo → permitir notificaciones → Nuevo conector. Copia la clave (akc_…). Solo se muestra una vez.

2. Añade el conector a tu agente

Claude Code

claude mcp add askew -s user -e ASKEW_CONNECTOR_KEY=akc_XXXX -- npx -y askew-mcp

Claude Desktop / Cursor / cualquier cliente MCP (claude_desktop_config.json, .cursor/mcp.json, …)

{
  "mcpServers": {
    "askew": {
      "command": "npx",
      "args": ["-y", "askew-mcp"],
      "env": { "ASKEW_CONNECTOR_KEY": "akc_XXXX" }
    }
  }
}

Codex CLI (~/.codex/config.toml)

[mcp_servers.askew]
command = "npx"
args = ["-y", "askew-mcp"]
env = { ASKEW_CONNECTOR_KEY = "akc_XXXX" }

La primera llamada de herramienta autenticada crea ~/.askew/connector.key (clave privada X25519, modo 0600), registra la clave pública con el relé e imprime una huella digital como seis palabras en stderr, como cider grove desert fever city burger. Abre la pantalla del conector en la aplicación y comprueba que aparecen las mismas seis palabras, luego toca 확인함 / Verificado. Esa única comprobación descarta un relé intercambiado. Hasta que lo hagas, la aplicación muestra el conector como no verificado y se le indica a tu agente que te lo pida.

npx -y askew-mcp fingerprint   # print this computer's six fingerprint words

3. Instala el despachador en el teléfono

En la pestaña Atajos (단축어) de la aplicación, instala el despachador de Askew (hoja de compartir → Atajos → Añadir), ábrelo y activa el interruptor de Automatización en la parte superior. Con el teléfono desbloqueado, ejecuta una prueba de envío desde Configuración → Comprobación y toca Permitir siempre. Un interruptor, un permiso, una vez. Luego añade recetas (Calendario, Recordatorios, Notas, …) de la misma manera y pide a tu agente:

"Añade dentista el jueves a las 3 p. m. a mi calendario del teléfono."

Elige un dispositivo o este Mac

Llama a askew_list_routes y selecciona una entrada habilitada de targets. Omitir target usa el dispositivo predeterminado de la ruta; no hay difusión. El teléfono gestiona las asignaciones de destino. Para ejecutar un Atajo ya instalado en este Mac, usa:

{"routeId":"route-id-from-list","target":{"kind":"connector","id":"this-connector-id"},"input":{"text":"hello"}}

Usa el contrato de entrada real de esa ruta. El ID del conector debe coincidir con el impreso por askew_list_routes; este proceso no puede ejecutarse en otro Mac. El destino y la ruta deben estar habilitados. La ejecución local requiere macOS, una conexión de relé autenticada para leer las asignaciones y la instantánea de parada de emergencia, y executionMode: "auto". Una cuenta detenida o un servidor sin el campo de estado de parada bloquea la ejecución local. La parada se comprueba antes del envío; no puede deshacer los efectos de un Atajo ya en ejecución.

askew_run local resuelve el nombre exacto del Atajo a un identificador instalado único, se ejecuta una vez y devuelve el resultado directamente al cliente MCP. La entrada y la salida permanecen en este Mac; no crea trabajo de servidor, cargo de uso, historial de ejecución del servidor ni actualización de último éxito. wait se aplica solo a trabajos de dispositivo: la ejecución en Mac espera hasta 60 segundos y devuelve un ID de trabajo local_…. askew_get_run lee ese ID del diario local de este conector (sin sondeo prolongado). Un tiempo de espera o fallo puede seguir a efectos parciales; nunca reintenta automáticamente. La suspensión del Mac puede impedir la ejecución.

Las rutas en modo de confirmación requieren un flujo humano que este ejecutor local no implementa, por lo que se rechazan antes de ejecutarse. Para ejecuciones automáticas en Mac, proporciona un idempotencyKey estable (1–200 caracteres). El conector guarda una reserva duradera antes del envío. Repetir la misma solicitud devuelve el resultado guardado; las entradas, la ruta o el nombre del Atajo cambiados entran en conflicto. Un proceso interrumpido o un fallo incierto permanece unknown y nunca se vuelve a ejecutar con esa clave. Las solicitudes sin clave son ejecuciones independientes. No elimines/cambies una clave y reintentes a ciegas un intento incierto; inspecciona primero sus efectos.

El historial local se almacena en local-runs/ junto a ASKEW_KEY_PATH (normalmente ~/.askew/local-runs), separado por identidad del conector y clave pública. Los registros, resultados y resúmenes de solicitudes están cifrados con la clave del conector; la entrada sin procesar no se conserva. Los archivos son privados para el usuario local del sistema operativo. Los registros se conservan hasta que se eliminan manualmente: eliminar el diario pierde la protección de reintento, y perder la clave privada pierde el acceso a resultados antiguos. Mantén la misma clave y diario al reiniciar. El historial local está disponible por ID de ejecución y no se sincroniza con el teléfono ni el relé.

Subida y revisión de recetas

La búsqueda/construcción local no necesita clave de conector ni conexión de relé. askew_recipe_build requiere macOS para firmar. Su verify: true predeterminado importa y ejecuta el nuevo Atajo en este Mac, lo que puede causar los efectos que sus acciones realicen; elige esto solo cuando esos efectos estén autorizados. verify: false firma sin importar ni ejecutar. Apple recibe el flujo de trabajo al firmar (documentación de Apple). Una ejecución exitosa no prueba corrección ni seguridad.

sendToPhone: true se conecta al relé solo después de una construcción exitosa. Esto sube el archivo firmado y el flujo de trabajo en texto plano, que puede contener datos personales literales o secretos. Esta vía está fuera del canal cifrado de trabajo/resultado/bandeja de entrada. No incrustes valores sensibles en una receta compartida. La salida de ejecución local se devuelve al cliente MCP pero nunca se sube como metadatos de receta. Los clientes antiguos que envían texto verifiedRun deben actualizarse.

El relé comprueba la estructura básica del archivo y proporciona sugerencias estáticas del flujo de trabajo enviado por separado. No verifica la firma del archivo ni establece que las sugerencias describan el archivo. Cada receta de agente permanece sin verificar. En Askew › Mis cosas, reconoce que inspeccionarás las acciones, permisos y destinos reales en Atajos antes de añadirla. Descargar un archivo no es confirmación de que se instaló.

Herramientas (11)

HerramientaQué hace
askew_actions_searchBusca 539 definiciones de acciones y claves de parámetros localmente
askew_recipe_buildConstruye/firma en macOS, opcionalmente instala/ejecuta localmente, opcionalmente sube para revisión manual en iPhone
askew_runEjecuta una ruta de dispositivo asignada a través del relé cifrado, o un destino de modo automático habilitado en este Mac localmente
askew_get_runEstado y resultado de un trabajo
askew_list_routesRutas, dispositivos, modo de conexión
askew_notifyNotificación al teléfono + caja de resultados (agente → persona, unidireccional). Con varios teléfonos/iPads, elige deviceId o pasa allDevices: true
askew_inbox_list / askew_inbox_wait / askew_inbox_ackLee lo que el teléfono envió (espera hasta 30 s), luego confirma
askew_variables_get / askew_variables_setVariables compartidas con el teléfono, selladas con la clave de la cuenta

Los elementos de la bandeja de entrada siempre vuelven marcados como datos enviados por el teléfono del usuario, no instrucciones.

Entorno

VariablePredeterminado
ASKEW_CONNECTOR_KEY—requerida para objetivos de Mac asignados/relé; opcional para búsqueda de acciones local y construcción de recetas
ASKEW_SERVERhttps://api.askew.myURL del relé (http://localhost:8787 para desarrollo local)
ASKEW_KEY_PATH~/.askew/connector.keydónde reside la clave privada

Requiere Node 22 o más reciente.

Privacidad

Las entradas de trabajo, resultados, cuerpos de notificaciones, elementos de bandeja de entrada y variables están cifrados de extremo a extremo (HPKE, X25519) entre este conector y el teléfono. Para estos canales, el relé almacena sobres cifrados y metadatos como nombres de ruta, marcas de tiempo y estado. Las ejecuciones locales en Mac mantienen su entrada/resultado en este ordenador. Los archivos de receta subidos y los literales de flujo de trabajo son texto plano; la salida de prueba de receta local está excluida. Detalles: https://askew.my/#privacy

Desarrollo

Fuente: https://github.com/Dominic-DK/askew-mcp (problemas y solicitudes de extracción bienvenidos). El conector es la única parte de Askew que tiene tu clave, por lo que es la parte que puedes leer.

git clone https://github.com/Dominic-DK/askew-mcp.git && cd askew-mcp
pnpm install
pnpm build          # tsc → dist/
pnpm test           # crypto, stdio/local relay mocks, target authorization; no real Shortcuts run
ASKEW_SERVER=http://localhost:8787 ASKEW_CONNECTOR_KEY=akc_XXXX pnpm dev   # run from source

src/crypto.ts es el formato completo del sobre: HPKE (X25519 + HKDF-SHA256 + ChaCha20-Poly1305) con el propósito vinculado como info, y una caja ChaCha20-Poly1305 con clave de la clave de cuenta para variables compartidas, con el nombre de la variable como AAD.


한국어

에이전트(Claude Code · Claude 데스크톱 · Cursor · Codex)가 아이폰을 도구로 쓰게 하는 로컬 커넥터입니다. 아이폰 앱 → 설정 → 새 커넥터 만들기 → 키(akc_…)를 복사한 뒤 위 명령 중 하나로 등록하세요. 첫 릴레이 도구 호출에 단어 6개가 찍힙니다(예: cider grove desert fever city burger). 앱 커넥터 화면에 같은 단어가 보이면 "확인함"을 누르세요. 한 번만 하면 됩니다. 그다음 앱 단축어 탭에서 디스패처를 설치(공유 시트 → 단축어 → 추가 → 자동화 토글 켜기 → 잠금 해제 상태 테스트 푸시 1회 "항상 허용")하면 잠긴 폰에서도 단축어가 돕니다. 0.2 소스에는 대상 기기 선택과 이 맥의 로컬 실행이 추가됐습니다. 아직 발행 전이며 iPad 백그라운드 동작은 실기기 검증이 남았습니다. 맥 대상은 폰에서 지정하고, 확인 후 실행·멱등 키는 로컬 실행에서 지원하지 않아 실행 전에 거절합니다. Android는 계획에 없습니다.