Skip to main content
Glama

MCP Task Manager Server

by bsmi021
updateTaskTool.ts3.19 kB
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { McpError, ErrorCode } from "@modelcontextprotocol/sdk/types.js"; // Import the base schema shape for registration and the refined schema for validation/types import { TOOL_NAME, TOOL_DESCRIPTION, TOOL_PARAMS, UPDATE_TASK_BASE_SCHEMA, UpdateTaskArgs } from "./updateTaskParams.js"; import { TaskService, FullTaskData } from "../services/TaskService.js"; // Assuming TaskService is exported from index import { logger } from '../utils/logger.js'; import { NotFoundError, ValidationError } from "../utils/errors.js"; // Import custom errors /** * Registers the updateTask tool with the MCP server. * * @param server - The McpServer instance. * @param taskService - An instance of the TaskService. */ export const updateTaskTool = (server: McpServer, taskService: TaskService): void => { const processRequest = async (args: UpdateTaskArgs): Promise<{ content: { type: 'text', text: string }[] }> => { logger.info(`[${TOOL_NAME}] Received request with args:`, { ...args, dependencies: args.dependencies ? `[${args.dependencies.length} items]` : undefined }); // Avoid logging potentially large arrays try { // Call the service method to update the task // The service method now returns FullTaskData const updatedTask: FullTaskData = await taskService.updateTask({ project_id: args.project_id, task_id: args.task_id, description: args.description, priority: args.priority, dependencies: args.dependencies, }); // Format the successful response logger.info(`[${TOOL_NAME}] Successfully updated task ${args.task_id} in project ${args.project_id}`); return { content: [{ type: "text" as const, text: JSON.stringify(updatedTask) // Return the full updated task details }] }; } catch (error: unknown) { // Handle potential errors according to systemPatterns.md mapping logger.error(`[${TOOL_NAME}] Error processing request:`, error); if (error instanceof ValidationError) { // Validation error from service (e.g., no fields provided, invalid deps) throw new McpError(ErrorCode.InvalidParams, error.message); } else if (error instanceof NotFoundError) { // Project or task not found - Map to InvalidParams as per SDK limitations/convention throw new McpError(ErrorCode.InvalidParams, error.message); } else { // Generic internal error const message = error instanceof Error ? error.message : 'An unknown error occurred while updating the task.'; throw new McpError(ErrorCode.InternalError, message); } } }; // Register the tool with the server using the base schema's shape server.tool(TOOL_NAME, TOOL_DESCRIPTION, UPDATE_TASK_BASE_SCHEMA.shape, processRequest); logger.info(`[${TOOL_NAME}] Tool registered successfully.`); };

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/bsmi021/mcp-task-manager-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server