Files
kan/packages/mcp/src/tools/checklist.ts
Morfixx 81b67df9e3 feat: kan mcp server (#485)
* feat: kan mcp server initial attempt

* fix: card was missing options and added default fallbacks

* fix: label creating with better information for colors and presets
2026-06-10 09:10:22 +01:00

84 lines
3.0 KiB
TypeScript

import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
import { z } from "zod";
import { kanRequest } from "../client.js";
export function registerChecklistTools(server: McpServer): void {
server.tool(
"create_checklist",
"Add a checklist to a card",
{
cardPublicId: z.string().describe("The card's public ID"),
name: z.string().describe("Checklist name"),
},
async ({ cardPublicId, name }) => {
const data = await kanRequest("POST", `/cards/${cardPublicId}/checklists`, { name });
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
},
);
server.tool(
"update_checklist",
"Rename a checklist",
{
checklistPublicId: z.string().describe("The checklist's public ID"),
name: z.string().describe("New checklist name"),
},
async ({ checklistPublicId, name }) => {
const data = await kanRequest("PUT", `/checklists/${checklistPublicId}`, { name });
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
},
);
server.tool(
"delete_checklist",
"Delete a checklist and all its items",
{ checklistPublicId: z.string().describe("The checklist's public ID") },
async ({ checklistPublicId }) => {
const data = await kanRequest("DELETE", `/checklists/${checklistPublicId}`);
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
},
);
server.tool(
"create_checklist_item",
"Add an item to a checklist",
{
checklistPublicId: z.string().describe("The checklist's public ID"),
title: z.string().describe("Item title"),
},
async ({ checklistPublicId, title }) => {
const data = await kanRequest("POST", `/checklists/${checklistPublicId}/items`, { title });
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
},
);
server.tool(
"update_checklist_item",
"Update a checklist item's title, completion status, or position",
{
checklistItemPublicId: z.string().describe("The checklist item's public ID"),
title: z.string().optional().describe("New item title"),
isCompleted: z.boolean().optional().describe("Mark item as completed or not"),
index: z.number().int().optional().describe("New position index"),
},
async ({ checklistItemPublicId, title, isCompleted, index }) => {
const data = await kanRequest("PATCH", `/checklists/items/${checklistItemPublicId}`, {
title,
isCompleted,
index,
});
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
},
);
server.tool(
"delete_checklist_item",
"Delete a checklist item",
{ checklistItemPublicId: z.string().describe("The checklist item's public ID") },
async ({ checklistItemPublicId }) => {
const data = await kanRequest("DELETE", `/checklists/items/${checklistItemPublicId}`);
return { content: [{ type: "text", text: JSON.stringify(data, null, 2) }] };
},
);
}