UNPKG

@0xbeedao/mcp-taskwarrior

Version:

A simple MCP Server that facilitates management of tasks in Taskwarrior

95 lines (94 loc) 2.87 kB
#!/usr/bin/env node /** * This is a simple MCP server that facilitates management of tasks in Taskwarrior. * * It provides 4 tools: * - add_task * - update_task * - delete_task * - list_tasks * * The add_task tool allows you to add a new task to Taskwarrior. * The update_task tool allows you to update an existing task in Taskwarrior. * The delete_task tool allows you to delete a task from Taskwarrior. * The list_tasks tool allows you to list all tasks in Taskwarrior. */ import { FastMCP } from "fastmcp"; import { TaskwarriorLib } from "taskwarrior-lib"; import { z } from "zod"; const server = new FastMCP({ name: "Taskwarrior", version: "1.0.0", }); const taskwarrior = new TaskwarriorLib(); server.addTool({ name: "add_task", description: "Add task to Taskwarrior", parameters: z.object({ uuid: z.string().optional(), description: z.string(), priority: z.enum(["H", "M", "L"]).optional(), project: z.string().optional(), start: z.string().optional(), end: z.string().optional(), due: z.string().optional(), tags: z.array(z.string()).optional(), }), execute: async (args) => { console.log(`Adding task: ${args.description}`); const task = { ...args }; console.log(taskwarrior.update([task])); return "Task added successfully"; }, }); server.addTool({ name: "update_task", description: "Update task in Taskwarrior", parameters: z.object({ uuid: z.string(), description: z.string(), priority: z.enum(["H", "M", "L"]).optional(), project: z.string().optional(), start: z.string().optional(), end: z.string().optional(), due: z.string().optional(), tags: z.array(z.string()).optional(), }), execute: async (args) => { console.log(`Updating task: ${args.description}`); const task = { ...args }; console.log(taskwarrior.update([task])); return `Task ${task.id} updated successfully`; }, }); server.addTool({ name: "list_tasks", description: "List tasks in Taskwarrior", parameters: z.object({ project: z.string().optional(), }), execute: async (args) => { console.log(`Listing tasks in project: ${args.project || "all"}`); const tasks = taskwarrior.load(args.project || ""); return JSON.stringify(tasks); }, }); server.addTool({ name: "delete_task", description: "Delete task in Taskwarrior", parameters: z.object({ uuid: z.string(), }), execute: async (args) => { console.log(`Deleting task: ${args.uuid}`); taskwarrior.del([{ uuid: args.uuid }]); return `Task ${args.uuid} deleted successfully`; }, }); server.start({ transportType: "stdio", });