omnifocus-mcp
Version:
Model Context Protocol (MCP) server that integrates with OmniFocus for AI assistant interaction
35 lines (34 loc) • 2.31 kB
JavaScript
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");
}