Skip to main content
Glama

OmniFocus MCP Enhanced

by jqlts1
server.ts5.15 kB
#!/usr/bin/env node import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; // Import tool definitions import * as dumpDatabaseTool from './tools/definitions/dumpDatabase.js'; import * as addOmniFocusTaskTool from './tools/definitions/addOmniFocusTask.js'; import * as addProjectTool from './tools/definitions/addProject.js'; import * as removeItemTool from './tools/definitions/removeItem.js'; import * as editItemTool from './tools/definitions/editItem.js'; import * as batchAddItemsTool from './tools/definitions/batchAddItems.js'; import * as batchRemoveItemsTool from './tools/definitions/batchRemoveItems.js'; import * as getTaskByIdTool from './tools/definitions/getTaskById.js'; import * as getTodayCompletedTasksTool from './tools/definitions/getTodayCompletedTasks.js'; // Import perspective tools import * as getInboxTasksTool from './tools/definitions/getInboxTasks.js'; import * as getFlaggedTasksTool from './tools/definitions/getFlaggedTasks.js'; import * as getForecastTasksTool from './tools/definitions/getForecastTasks.js'; import * as getTasksByTagTool from './tools/definitions/getTasksByTag.js'; // Import ultimate filter tool import * as filterTasksTool from './tools/definitions/filterTasks.js'; // Import custom perspective tools import * as listCustomPerspectivesTool from './tools/definitions/listCustomPerspectives.js'; import * as getCustomPerspectiveTasksTool from './tools/definitions/getCustomPerspectiveTasks.js'; // Create an MCP server const server = new McpServer({ name: "OmniFocus MCP", version: "1.6.1" }); // Register tools server.tool( "dump_database", "Gets the current state of your OmniFocus database", dumpDatabaseTool.schema.shape, dumpDatabaseTool.handler ); server.tool( "add_omnifocus_task", "Add a new task to OmniFocus", addOmniFocusTaskTool.schema.shape, addOmniFocusTaskTool.handler ); server.tool( "add_project", "Add a new project to OmniFocus", addProjectTool.schema.shape, addProjectTool.handler ); server.tool( "remove_item", "Remove a task or project from OmniFocus", removeItemTool.schema.shape, removeItemTool.handler ); server.tool( "edit_item", "Edit a task or project in OmniFocus", editItemTool.schema.shape, editItemTool.handler ); server.tool( "batch_add_items", "Add multiple tasks or projects to OmniFocus in a single operation", batchAddItemsTool.schema.shape, batchAddItemsTool.handler ); server.tool( "batch_remove_items", "Remove multiple tasks or projects from OmniFocus in a single operation", batchRemoveItemsTool.schema.shape, batchRemoveItemsTool.handler ); server.tool( "get_task_by_id", "Get information about a specific task by ID or name", getTaskByIdTool.schema.shape, getTaskByIdTool.handler ); server.tool( "get_today_completed_tasks", "Get tasks completed today - view today's accomplishments", getTodayCompletedTasksTool.schema.shape, getTodayCompletedTasksTool.handler ); // Register perspective tools server.tool( "get_inbox_tasks", "Get tasks from OmniFocus inbox perspective", getInboxTasksTool.schema.shape, getInboxTasksTool.handler ); server.tool( "get_flagged_tasks", "Get flagged tasks from OmniFocus with optional project filtering", getFlaggedTasksTool.schema.shape, getFlaggedTasksTool.handler ); server.tool( "get_forecast_tasks", "Get tasks from OmniFocus forecast perspective (due/deferred tasks in date range)", getForecastTasksTool.schema.shape, getForecastTasksTool.handler ); server.tool( "get_tasks_by_tag", "Get tasks filtered by OmniFocus tags (labels like @home, @work, @urgent). Use this for tag-based filtering, NOT for custom perspective names. Tags are labels assigned to individual tasks.", getTasksByTagTool.schema.shape, getTasksByTagTool.handler ); // Ultimate filter tool - The most powerful task perspective engine server.tool( "filter_tasks", "Advanced task filtering with unlimited perspective combinations - status, dates, projects, tags, search, and more", filterTasksTool.schema.shape, filterTasksTool.handler ); // Custom perspective tools server.tool( "list_custom_perspectives", "List all custom perspectives defined in OmniFocus", listCustomPerspectivesTool.schema.shape, listCustomPerspectivesTool.handler ); server.tool( "get_custom_perspective_tasks", "Get tasks from a specific OmniFocus custom perspective by name. Use this when user refers to perspective names like '今日工作安排', '今日复盘', '本周项目' etc. - these are custom views created in OmniFocus, NOT tags. Supports hierarchical tree display of task relationships.", getCustomPerspectiveTasksTool.schema.shape, getCustomPerspectiveTasksTool.handler ); // Start the MCP server const transport = new StdioServerTransport(); // Use await with server.connect to ensure proper connection (async function() { try { await server.connect(transport); } catch (err) { console.error(`Failed to start MCP server: ${err}`); } })(); // For a cleaner shutdown if the process is terminated

Latest Blog Posts

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/jqlts1/omnifocus-mcp-enhanced'

If you have feedback or need assistance with the MCP directory API, please join our Discord server