Skip to main content
Glama
get-task-details.ts4.87 kB
/** * Developed by eBrook Group. * Copyright © 2026 eBrook Group (https://www.ebrook.com.tw) */ /** * Get task details tool handler * Fetches and formats ClickUp task details */ import { ClickUpService } from "../services/clickup.js"; import { debug, error } from "../utils/logger.js"; import { sanitizeErrorResponse } from "../utils/error-sanitizer.js"; import type { AppConfig } from "../config/env.js"; import type { ClickUpTaskResponse } from "../types/index.js"; /** * Get task details tool handler * @param task_id - ClickUp task ID * @param _config - Application configuration (unused) * @param click_up_service - ClickUp service instance * @returns Tool execution result */ export async function handleGetTaskDetails( task_id: string, _config: AppConfig, click_up_service: ClickUpService ): Promise<{ content: Array<{ type: "text"; text: string }>; isError?: boolean }> { debug(`Fetching task details for: ${task_id}`); // Fetch task from ClickUp const task_res = await click_up_service.getTask(task_id); debug(`ClickUp API response status: ${task_res.status}`); if (task_res.status !== 200) { // Sanitized error message for client const error_msg = `Failed to fetch task ${task_id}. ${sanitizeErrorResponse(task_res.status, task_res.body)}`; // Full error details only in logs debug(`Full API error response: ${JSON.stringify(task_res.body)}`); error(error_msg); return { content: [ { type: "text", text: error_msg, }, ], isError: true, }; } const task = task_res.body as ClickUpTaskResponse; debug(`Successfully fetched task: ${task.name}`); // Format task details const details = click_up_service.formatTaskDetails(task); // Build formatted output const output_lines: string[] = []; output_lines.push("=".repeat(80)); output_lines.push(`📋 TASK DETAILS: ${details.name}`); output_lines.push("=".repeat(80)); output_lines.push(""); // Basic Information output_lines.push("📌 BASIC INFORMATION"); output_lines.push(` ID: ${details.id}`); if (details.custom_id) { output_lines.push(` Custom ID: ${details.custom_id}`); } output_lines.push(` Status: ${details.status}`); if (details.priority) { output_lines.push(` Priority: ${details.priority}`); } output_lines.push(` URL: ${details.url}`); output_lines.push(""); // Location output_lines.push("📍 LOCATION"); output_lines.push(` Space: ${details.space}`); output_lines.push(` Folder: ${details.folder}`); output_lines.push(` List: ${details.list}`); output_lines.push(""); // Description if (details.description) { output_lines.push("📝 DESCRIPTION"); output_lines.push(` ${details.description.substring(0, 500)}${details.description.length > 500 ? "..." : ""}`); output_lines.push(""); } // Team output_lines.push("👥 TEAM"); output_lines.push(` Creator: ${details.creator}`); if (details.assignees.length > 0) { output_lines.push(` Assignees: ${details.assignees.join(", ")}`); } else { output_lines.push(" Assignees: (none)"); } output_lines.push(""); // Time Information output_lines.push("⏰ TIME INFORMATION"); output_lines.push(` Created: ${new Date(parseInt(details.created_at)).toLocaleString()}`); output_lines.push(` Updated: ${new Date(parseInt(details.updated_at)).toLocaleString()}`); if (details.due_date) { output_lines.push(` Due Date: ${new Date(parseInt(details.due_date)).toLocaleString()}`); } if (details.time_estimate) { output_lines.push(` Estimated Time: ${details.time_estimate}`); } if (details.time_spent) { output_lines.push(` Time Spent: ${details.time_spent}`); } output_lines.push(""); // Tags if (details.tags.length > 0) { output_lines.push("🏷️ TAGS"); output_lines.push(` ${details.tags.join(", ")}`); output_lines.push(""); } // Custom Fields const custom_field_keys = Object.keys(details.custom_fields); if (custom_field_keys.length > 0) { output_lines.push("⚙️ CUSTOM FIELDS"); custom_field_keys.forEach((key) => { const value = details.custom_fields[key]; output_lines.push(` ${key}: ${JSON.stringify(value)}`); }); output_lines.push(""); } // Dependencies if (details.dependencies_count > 0) { output_lines.push("🔗 DEPENDENCIES"); output_lines.push(` Total Dependencies: ${details.dependencies_count}`); output_lines.push(""); } output_lines.push("=".repeat(80)); // Return formatted result return { content: [ { type: "text", text: output_lines.join("\n"), }, { type: "text", text: `\n📊 Raw Data (JSON):\n${JSON.stringify(details, null, 2)}`, }, ], isError: false, }; }

Latest Blog Posts

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/tangbodie/clickup-mcp'

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