get-task
Retrieve complete task details including content, status, assignees, attachments, and metadata from Dooray project management platform using task URLs or IDs.
Instructions
Get detailed information about a specific task.
This tool retrieves complete details of a task including its full body content, attachments, workflow status, assignees, and all metadata.
URL Pattern Recognition - Two formats supported:
Project-scoped URL: "https://nhnent.dooray.com/task/PROJECT_ID/TASK_ID"
Extract the first numeric ID after "/task/" as projectId (optional)
Extract the second numeric ID as taskId (required)
Example: "https://nhnent.dooray.com/task/1769381697328002548/4206132384174602537" → {"taskId": "4206132384174602537", "projectId": "1769381697328002548"}
Task-only URL: "https://nhnent.dooray.com/project/tasks/TASK_ID"
Extract the numeric ID after "/tasks/" as taskId
Example: "https://nhnent.dooray.com/project/tasks/4206132384174602537" → {"taskId": "4206132384174602537"}
IMPORTANT:
taskId is REQUIRED, projectId is OPTIONAL
The taskId is the unique identifier (ID) from the URL, NOT the sequential task number shown in the UI
You can fetch task details with just the taskId without knowing the projectId
When a specific task URL is provided, use this tool directly instead of calling get-project-list first
To find taskId from task descriptions, use get-task-list to search and get task IDs
Examples:
From URL pattern 1: {"taskId": "4206132384174602537", "projectId": "1769381697328002548"}
From URL pattern 2: {"taskId": "4206132384174602537"}
Just taskId: {"taskId": "789012345"}
With both IDs: {"taskId": "789012345", "projectId": "123456"}
Returns complete task information including:
Basic info: id, number, subject, taskNumber (PROJECT-CODE/NUMBER format)
Project: project object with id and code
Status: workflowClass (registered/working/closed), workflow (id and name), closed flag, priority
Dates: createdAt, updatedAt, dueDate, dueDateFlag
Content: body with mimeType (text/x-markdown or text/html) and content
Hierarchy: parent task information (id, number, subject) if this is a subtask
People: users object with from (creator), to (assignees), cc (watchers)
Organization: milestone (id, name), tags array (id, name)
Files: files array with attachments (id, name, size)
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| taskId | Yes | Task ID (unique identifier, REQUIRED) | |
| projectId | No | Project ID (optional, can be omitted) |
Implementation Reference
- src/tools/projects/get-task.ts:17-39 (handler)The handler function that implements the core logic of the 'get-task' tool. It fetches detailed task information via the projects API and returns it as formatted JSON or an error response.export async function getTaskHandler(args: GetTaskInput) { try { const result = await projectsApi.getTaskDetails(args.taskId, args.projectId); return { content: [ { type: 'text', text: JSON.stringify(result, null, 2), }, ], }; } catch (error) { return { content: [ { type: 'text', text: `Error: ${formatError(error)}`, }, ], isError: true, }; }
- src/tools/projects/get-task.ts:10-15 (schema)Zod schema for input validation of the get-task tool, requiring taskId and optionally projectId.export const getTaskSchema = z.object({ taskId: z.string().describe('Task ID (unique identifier)'), projectId: z.string().optional().describe('Project ID (optional)'), }); export type GetTaskInput = z.infer<typeof getTaskSchema>;
- src/index.ts:51-51 (registration)Registration of the 'get-task' tool in the central tool registry, mapping name to its handler and schema.'get-task': { handler: getTaskHandler, schema: getTaskSchema },
- src/index.ts:74-74 (registration)Inclusion of the getTaskTool in the list of available tools served by the MCP server.getTaskTool,
- src/tools/projects/get-task.ts:42-98 (schema)MCP tool specification including name, detailed description, and input schema for the get-task tool.export const getTaskTool = { name: 'get-task', description: `Get detailed information about a specific task. This tool retrieves complete details of a task including its full body content, attachments, workflow status, assignees, and all metadata. **URL Pattern Recognition - Two formats supported**: 1. **Project-scoped URL**: "https://nhnent.dooray.com/task/PROJECT_ID/TASK_ID" - Extract the first numeric ID after "/task/" as projectId (optional) - Extract the second numeric ID as taskId (required) - Example: "https://nhnent.dooray.com/task/1769381697328002548/4206132384174602537" → {"taskId": "4206132384174602537", "projectId": "1769381697328002548"} 2. **Task-only URL**: "https://nhnent.dooray.com/project/tasks/TASK_ID" - Extract the numeric ID after "/tasks/" as taskId - Example: "https://nhnent.dooray.com/project/tasks/4206132384174602537" → {"taskId": "4206132384174602537"} **IMPORTANT**: - **taskId is REQUIRED**, projectId is OPTIONAL - The taskId is the unique identifier (ID) from the URL, NOT the sequential task number shown in the UI - You can fetch task details with just the taskId without knowing the projectId - When a specific task URL is provided, use this tool directly instead of calling get-project-list first - To find taskId from task descriptions, use get-task-list to search and get task IDs Examples: - From URL pattern 1: {"taskId": "4206132384174602537", "projectId": "1769381697328002548"} - From URL pattern 2: {"taskId": "4206132384174602537"} - Just taskId: {"taskId": "789012345"} - With both IDs: {"taskId": "789012345", "projectId": "123456"} **Returns complete task information including:** - **Basic info**: id, number, subject, taskNumber (PROJECT-CODE/NUMBER format) - **Project**: project object with id and code - **Status**: workflowClass (registered/working/closed), workflow (id and name), closed flag, priority - **Dates**: createdAt, updatedAt, dueDate, dueDateFlag - **Content**: body with mimeType (text/x-markdown or text/html) and content - **Hierarchy**: parent task information (id, number, subject) if this is a subtask - **People**: users object with from (creator), to (assignees), cc (watchers) - **Organization**: milestone (id, name), tags array (id, name) - **Files**: files array with attachments (id, name, size)`, inputSchema: { type: 'object', properties: { taskId: { type: 'string', description: 'Task ID (unique identifier, REQUIRED)', }, projectId: { type: 'string', description: 'Project ID (optional, can be omitted)', }, }, required: ['taskId'], }, };