UNPKG

omnifocus-mcp

Version:

Model Context Protocol (MCP) server that integrates with OmniFocus for AI assistant interaction

86 lines (72 loc) 2.34 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'; // Create an MCP server const server = new McpServer({ name: "OmniFocus MCP", version: "1.0.0" }); // 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 ); // Start the MCP server const transport = new StdioServerTransport(); // Use await with server.connect to ensure proper connection (async function() { try { console.error("Starting MCP server..."); await server.connect(transport); console.error("MCP Server connected and ready to accept commands from Claude"); } catch (err) { console.error(`Failed to start MCP server: ${err}`); } })(); // For a cleaner shutdown if the process is terminated