UNPKG

omnifocus-mcp

Version:

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

35 lines (34 loc) 2.31 kB
import { ResourceTemplate } from "@modelcontextprotocol/sdk/server/mcp.js"; import { readInbox } from './inbox.js'; import { readToday } from './today.js'; import { readFlagged } from './flagged.js'; import { readStats } from './stats.js'; import { readProject, listProjects, completeProjectName } from './project.js'; import { readPerspective, listAllPerspectives, completePerspectiveName } from './perspective.js'; export function registerResources(server, logger) { // Fixed resources server.resource("inbox", "omnifocus://inbox", { description: "Current OmniFocus inbox items", mimeType: "application/json" }, async (uri) => readInbox(logger)); server.resource("today", "omnifocus://today", { description: "Today's agenda — tasks due today, planned for today, and overdue items", mimeType: "application/json" }, async (uri) => readToday(logger)); server.resource("flagged", "omnifocus://flagged", { description: "All flagged OmniFocus items", mimeType: "application/json" }, async (uri) => readFlagged(logger)); server.resource("stats", "omnifocus://stats", { description: "Quick OmniFocus database statistics overview", mimeType: "application/json" }, async (uri) => readStats(logger)); // Template resources server.resource("project", new ResourceTemplate("omnifocus://project/{name}", { list: async () => { const projects = await listProjects(); return { resources: projects }; }, complete: { name: async (value) => completeProjectName(value) } }), { description: "Tasks in a specific OmniFocus project", mimeType: "application/json" }, async (uri, variables) => readProject(uri, variables, logger)); server.resource("perspective", new ResourceTemplate("omnifocus://perspective/{name}", { list: async () => { const perspectives = await listAllPerspectives(); return { resources: perspectives }; }, complete: { name: async (value) => completePerspectiveName(value) } }), { description: "Items visible in a named OmniFocus perspective", mimeType: "application/json" }, async (uri, variables) => readPerspective(uri, variables, logger)); logger.info("resources", "Registered 4 fixed resources and 2 resource templates"); }