omnifocus-mcp
omnifocus-mcp
Un servidor MCP para OmniFocus que expone toda la API de JavaScript de Omni Automation a los clientes de LLM.
Solo macOS. Requiere que OmniFocus se esté ejecutando en la misma máquina. Toda la implementación ejecuta fragmentos OmniJS dentro de OmniFocus mediante osascript -l JavaScript — sin generación de cadenas de AppleScript ni limitaciones del diccionario de scripting.
Requisitos previos
macOS (Omni Automation solo está disponible en macOS; el servidor no se iniciará en otras plataformas)
OmniFocus instalado y en ejecución
Node.js ≥ 20
Related MCP server: OmniFocus MCP Server
Instalación
El paquete se publica en npm como @scardis/omnifocus-mcp.
Mediante npx (sin necesidad de instalar)
Añádelo a la configuración de tu cliente MCP (p. ej., Claude Desktop claude_desktop_config.json):
{
"mcpServers": {
"omnifocus": {
"command": "npx",
"args": ["-y", "@scardis/omnifocus-mcp"]
}
}
}Desde el código fuente
git clone https://github.com/steveardis/omnifocus-mcp.git
cd omnifocus-mcp
npm install
npm run buildLuego configura tu cliente MCP:
{
"mcpServers": {
"omnifocus": {
"command": "node",
"args": ["/absolute/path/to/omnifocus-mcp/dist/server.js"]
}
}
}Herramientas disponibles
Lectura
Herramienta | Descripción |
| Proyectos con filtrado opcional por status, folderId y flagged. Por defecto excluye los estados done/dropped. Límite (100 por defecto). |
| Detalle completo del proyecto por ID estable. |
| Tareas acotadas por |
| Detalle completo de la tarea por ID estable — incluye fechas de defer/planned/due, etiquetas, regla de repetición y parentTaskId. |
| Carpetas con filtro opcional de status. Límite (200 por defecto). |
| Detalle completo de la carpeta por ID estable, incluidos los IDs de carpetas y proyectos hijos. |
| Etiquetas con filtro opcional de status. Límite (200 por defecto). |
| Detalle completo de la etiqueta por ID estable, incluidos los IDs de etiquetas hijas. |
| Resuelve un nombre en candidatos de ID estable — nunca desambigua silenciosamente; devuelve todas las coincidencias. |
Escritura
Herramienta | Descripción |
| Crea una tarea en inbox, en un proyecto o como subtarea. Admite fechas de defer/planned/due, etiquetas, flagged, minutos estimados y reglas de repetición. |
| Edita cualquier campo de la tarea. Pasa |
| Marca una tarea como completada. |
| Marca una tarea como descartada. |
| Elimina permanentemente una tarea y todas sus subtareas. |
| Crea un proyecto, opcionalmente dentro de una carpeta. Admite tipo, status, intervalo de revisión y etiquetas. |
| Edita los campos de un proyecto. |
| Marca un proyecto como completado. |
| Marca un proyecto como descartado. |
| Elimina permanentemente un proyecto y todas sus tareas. |
| Crea una carpeta, opcionalmente anidada. |
| Cambia el nombre de una carpeta. |
| Elimina permanentemente una carpeta y todo su subárbol. |
| Crea una etiqueta, opcionalmente anidada. |
| Edita el nombre o el status de una etiqueta. |
| Elimina permanentemente una etiqueta y sus etiquetas hijas. |
| Mueve una tarea a un proyecto o conviértela en subtarea de otra tarea. |
| Mueve un proyecto a una carpeta o al nivel superior. |
Modelo de direccionamiento
Cada entidad devuelta por este servidor incluye un campo id estable (id.primaryKey de OmniFocus). Usa este ID en las llamadas posteriores en lugar de los nombres. Los nombres pueden ser ambiguos; los IDs no.
Si tienes un nombre pero no un ID, usa resolve_name. Devuelve una lista — si se devuelven varios candidatos, inspecciona el campo path y pide al usuario que desambigüe antes de continuar con cualquier operación de escritura.
Comparación con otros servidores MCP de OmniFocus
Existen dos alternativas destacables: themotionmachine/OmniFocus-MCP y jqlts1/omnifocus-mcp-enhanced (un fork de la anterior con herramientas adicionales).
API de scripting. Las alternativas usan el diccionario de scripting de JXA o AppleScript para controlar OmniFocus. Este servidor realiza una única llamada JXA — Application('OmniFocus').evaluateJavascript() — y ejecuta toda la lógica como OmniJS (Omni Automation) dentro de OmniFocus. Esto da acceso a toda la superficie de la API de Omni Automation (reglas de recurrencia, intervalos de revisión, perspectivas, forecast, archivos adjuntos, automatización de URLs, etc.) en lugar del más limitado diccionario de scripting.
Inyección de argumentos. Las alternativas construyen comandos de osascript mediante interpolación de cadenas, lo que puede fallar con apóstrofos, comillas, barras invertidas y caracteres Unicode en los nombres. Este servidor serializa todos los argumentos con JSON.stringify en un literal de JS.
Direccionamiento de entidades. Las alternativas direccionan las entidades principalmente por nombre. Este servidor devuelve un id estable (id.primaryKey) para cada entidad y proporciona resolve_name para asignar un nombre a candidatos de ID — devolviendo todas las coincidencias con rutas completas en lugar de elegir una silenciosamente cuando los nombres son ambiguos.
CRUD completo. Este servidor permite crear, editar, completar, descartar, eliminar y mover tareas, proyectos, carpetas y etiquetas, además de reglas de repetición y la fecha planned de OmniFocus 4.
Desarrollo
# Type-check without building
npm run typecheck
# Run unit tests (no OmniFocus required)
npm test
# Build
npm run buildPruebas
Pruebas unitarias (no requieren OmniFocus)
npm testPruebas de integración
⚠️ Las pruebas de integración se ejecutan contra tu base de datos real de OmniFocus.
Cada ejecución de pruebas crea una carpeta temporal de nivel superior llamada
__MCP_TEST_<uuid>__y la elimina al finalizar. Si una ejecución se interrumpe antes de la finalización, ejecuta el script de limpieza:npm run test:cleanup-fixtures
⚠️ Advertencia sobre la sincronización: De forma predeterminada, las pruebas de integración se niegan a ejecutarse si la sincronización de OmniFocus está activada, para evitar que los datos de prueba se propaguen a tus otros dispositivos. Desactiva primero la sincronización de OmniFocus o establece
MCP_TEST_ALLOW_SYNC=1para optar por participar (los datos de prueba se sincronizarán):# Default (refuses if sync enabled) npm run test:integration # With sync enabled (use carefully) MCP_TEST_ALLOW_SYNC=1 npm run test:integration
Limpiar datos de prueba obsoletos
npm run test:cleanup-fixturesEsto elimina cualquier carpeta __MCP_TEST_*__ y los proyectos/etiquetas __mcp_*__ huérfanos que hayan quedado en OmniFocus tras ejecuciones de pruebas interrumpidas.
Contribuciones
¡Las contribuciones son bienvenidas! A continuación te explicamos cómo empezar:
Haz un fork y clona el repositorio
Instala las dependencias:
npm installEjecuta las pruebas unitarias (no se necesita OmniFocus):
npm testEjecuta las pruebas de integración (requiere macOS + OmniFocus):
npm run test:integration
Antes de enviar un PR
npm run typecheck— debe pasar sin erroresnpm test— todas las pruebas unitarias deben pasarnpm run test:integration— todas las pruebas de integración deben pasar (solo macOS)Mantén los cambios enfocados: una funcionalidad o corrección por PR
Descripción general de la arquitectura
El servidor ejecuta fragmentos OmniJS dentro de OmniFocus mediante osascript -l JavaScript. Cada herramienta tiene tres capas:
Esquema (
src/schemas/shapes.ts) — esquemas Zod para la validación de entrada y el análisis de salida.Fragmento (`src/snippets/*.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Manage tasks, Focus Zone, notes, projects, and task history from compatible AI assistants.
Manage Superlist tasks and lists in plain language from any MCP-compatible AI agent.
Give your AI agents the tools to build, manage, and run automation workflows.
Read and write your Teleprompter.com scripts and folders: list, create, update, and organize.
Related MCP Servers
- FlicenseNot gradedqualityBmaintenanceEnables AI-powered task management in OmniFocus with support for project reviews, planned dates, repeating tasks, custom perspectives, hierarchical subtasks, and advanced filtering. Perfect for Claude AI integration with comprehensive CRUD operations for tasks, projects, and folders.2
- AlicenseAqualityDmaintenanceEnables comprehensive management of OmniFocus on macOS through 17 specialized tools for projects, tasks, and organization. Users can create, update, and filter items or navigate the interface using natural language via the Model Context Protocol.216MIT
- AlicenseAqualityBmaintenanceEnables AI assistants to read and write to OmniFocus database, allowing natural language task management, project creation, and GTD workflows.41MIT
- AlicenseAqualityBmaintenanceGives MCP-compatible AI assistants full, typed access to OmniFocus on macOS, enabling task management, project manipulation, inbox processing, and more via natural language.100501MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/steveardis/omnifocus-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server