Skip to main content
Glama

get-task-list

Retrieve tasks from a Dooray project with filtering by assignee, status, due date, tags, and milestones, plus sorting options.

Instructions

Get list of tasks in a Dooray project with powerful filtering and sorting.

IMPORTANT: projectId is REQUIRED. This tool fetches tasks from a specific project.

Note: Returns compact response with essential fields only. For complete task details, use get-task.

URL Pattern Recognition: When given a Dooray URL like "https://nhnent.dooray.com/task/PROJECT_ID" or "https://nhnent.dooray.com/task/PROJECT_ID/TASK_ID", extract the PROJECT_ID (the first numeric ID after "/task/") and use it as the projectId parameter. When a URL is provided, use get-project for project info instead of get-project-list.

Member ID Filters (use organizationMemberId from get-my-member-info):

  • toMemberIds: Tasks assigned to specific members

  • ccMemberIds: Tasks where members are in CC

  • fromMemberIds: Tasks created by specific members

Workflow Filters:

  • postWorkflowClasses: ["backlog", "registered", "working", "closed"]

  • postWorkflowIds: Project-specific workflow IDs

Date Filters (flexible patterns):

  • "today" - Today's tasks

  • "thisweek" - This week's tasks

  • "prev-7d" - Last 7 days

  • "next-7d" - Next 7 days

  • ISO8601 range: "2021-01-01T00:00:00+09:00~2021-01-10T00:00:00+09:00"

Examples:

  1. All tasks in project: {"projectId": "123456"}

  2. Tasks assigned to me: {"projectId": "123456", "toMemberIds": ["my-org-member-id"]}

  3. Tasks in "working" status: {"projectId": "123456", "postWorkflowClasses": ["working"]}

  4. Tasks due today: {"projectId": "123456", "dueAt": "today"}

  5. Recent tasks (sorted by update time): {"projectId": "123456", "updatedAt": "prev-7d", "order": "-postUpdatedAt"}

  6. Tasks with specific milestone and tags: {"projectId": "123456", "milestoneIds": ["milestone123"], "tagIds": ["tag456"]}

Sorting:

  • Default: Tasks are sorted by most recently updated first (-postUpdatedAt)

  • Custom: Use order parameter with: postDueAt, postUpdatedAt, createdAt

  • Prefix with - for descending (e.g., "-createdAt")

Returns paginated task list with id, number, subject, status, priority, dueDate, assignees, tags, and milestone.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
projectIdYesProject ID (REQUIRED)
fromEmailAddressNoFilter by creator email address
fromMemberIdsNoFilter by creator member IDs
toMemberIdsNoFilter by assignee member IDs (organizationMemberId)
ccMemberIdsNoFilter by CC member IDs
tagIdsNoFilter by tag IDs
parentPostIdNoFilter by parent post ID (get subtasks)
postNumberNoFilter by specific task number
postWorkflowClassesNoFilter by workflow classes: backlog, registered, working, closed
postWorkflowIdsNoFilter by workflow IDs
milestoneIdsNoFilter by milestone IDs
subjectsNoFilter by task subject
createdAtNoFilter by creation date (today, thisweek, prev-7d, next-7d, or ISO8601 range)
updatedAtNoFilter by update date (today, thisweek, prev-7d, next-7d, or ISO8601 range)
dueAtNoFilter by due date (today, thisweek, prev-7d, next-7d, or ISO8601 range)
orderNoSort order: postDueAt, postUpdatedAt, createdAt (prefix with - for descending)
pageNoPage number (default: 0)
sizeNoItems per page (default: 20, max: 100)

Implementation Reference

  • The main handler function that fetches tasks using projectsApi.getTasks with provided filters, applies response filtering, and returns JSON or error.
    export async function getTaskListHandler(args: GetTaskListInput) {
      try {
        const result = await projectsApi.getTasks({
          projectId: args.projectId,
          fromEmailAddress: args.fromEmailAddress,
          fromMemberIds: args.fromMemberIds,
          toMemberIds: args.toMemberIds,
          ccMemberIds: args.ccMemberIds,
          tagIds: args.tagIds,
          parentPostId: args.parentPostId,
          postNumber: args.postNumber,
          postWorkflowClasses: args.postWorkflowClasses,
          postWorkflowIds: args.postWorkflowIds,
          milestoneIds: args.milestoneIds,
          subjects: args.subjects,
          createdAt: args.createdAt,
          updatedAt: args.updatedAt,
          dueAt: args.dueAt,
          order: args.order,
          page: args.page,
          size: args.size,
        });
    
        // Filter to compact response to reduce token usage
        const compactResult = filterPaginatedResponse(result, filterTaskForList);
    
        return {
          content: [
            {
              type: 'text',
              text: JSON.stringify(compactResult, null, 2),
            },
          ],
        };
      } catch (error) {
        return {
          content: [
            {
              type: 'text',
              text: `Error: ${formatError(error)}`,
            },
          ],
          isError: true,
        };
      }
    }
  • Zod schema used for input validation in the tool registry.
    export const getTaskListSchema = z.object({
      projectId: z.string().describe('Project ID (required)'),
      // Member filters
      fromEmailAddress: z.string().optional().describe('Filter by creator email address'),
      fromMemberIds: z.array(z.string()).optional().describe('Filter by creator member IDs (organizationMemberId)'),
      toMemberIds: z.array(z.string()).optional().describe('Filter by assignee member IDs (organizationMemberId)'),
      ccMemberIds: z.array(z.string()).optional().describe('Filter by CC member IDs (organizationMemberId)'),
      // Task filters
      tagIds: z.array(z.string()).optional().describe('Filter by tag IDs'),
      parentPostId: z.string().optional().describe('Filter by parent post ID (get subtasks)'),
      postNumber: z.number().optional().describe('Filter by specific task number'),
      postWorkflowClasses: z.array(z.string()).optional().describe('Filter by workflow classes: backlog, registered, working, closed'),
      postWorkflowIds: z.array(z.string()).optional().describe('Filter by workflow IDs defined in the project'),
      milestoneIds: z.array(z.string()).optional().describe('Filter by milestone IDs'),
      subjects: z.string().optional().describe('Filter by task subject (title)'),
      // Date filters (supports: today, thisweek, prev-Nd, next-Nd, or ISO8601 range like "2021-01-01T00:00:00+09:00~2021-01-10T00:00:00+09:00")
      createdAt: z.string().optional().describe('Filter by creation date (today, thisweek, prev-7d, next-7d, or ISO8601 range)'),
      updatedAt: z.string().optional().describe('Filter by update date (today, thisweek, prev-7d, next-7d, or ISO8601 range)'),
      dueAt: z.string().optional().describe('Filter by due date (today, thisweek, prev-7d, next-7d, or ISO8601 range)'),
      // Sorting
      order: z.string().optional().default('-postUpdatedAt').describe('Sort order: postDueAt, postUpdatedAt, createdAt (prefix with - for descending, e.g., -createdAt). Default: -postUpdatedAt (most recently updated first)'),
      // Pagination
      page: z.number().min(0).optional().describe('Page number (default: 0)'),
      size: z.number().min(1).max(100).optional().describe('Items per page (default: 20, max: 100)'),
    });
  • Tool specification object with name, detailed description, and JSON inputSchema used for tool listing.
    export const getTaskListTool = {
      name: 'get-task-list',
      description: `Get list of tasks in a Dooray project with powerful filtering and sorting.
    
    **IMPORTANT**: projectId is REQUIRED. This tool fetches tasks from a specific project.
    
    **Note**: Returns compact response with essential fields only. For complete task details, use get-task.
    
    **URL Pattern Recognition**:
    When given a Dooray URL like "https://nhnent.dooray.com/task/PROJECT_ID" or "https://nhnent.dooray.com/task/PROJECT_ID/TASK_ID", extract the PROJECT_ID (the first numeric ID after "/task/") and use it as the projectId parameter. When a URL is provided, use get-project for project info instead of get-project-list.
    
    **Member ID Filters** (use organizationMemberId from get-my-member-info):
    - toMemberIds: Tasks assigned to specific members
    - ccMemberIds: Tasks where members are in CC
    - fromMemberIds: Tasks created by specific members
    
    **Workflow Filters**:
    - postWorkflowClasses: ["backlog", "registered", "working", "closed"]
    - postWorkflowIds: Project-specific workflow IDs
    
    **Date Filters** (flexible patterns):
    - "today" - Today's tasks
    - "thisweek" - This week's tasks
    - "prev-7d" - Last 7 days
    - "next-7d" - Next 7 days
    - ISO8601 range: "2021-01-01T00:00:00+09:00~2021-01-10T00:00:00+09:00"
    
    **Examples**:
    1. All tasks in project:
       {"projectId": "123456"}
    
    2. Tasks assigned to me:
       {"projectId": "123456", "toMemberIds": ["my-org-member-id"]}
    
    3. Tasks in "working" status:
       {"projectId": "123456", "postWorkflowClasses": ["working"]}
    
    4. Tasks due today:
       {"projectId": "123456", "dueAt": "today"}
    
    5. Recent tasks (sorted by update time):
       {"projectId": "123456", "updatedAt": "prev-7d", "order": "-postUpdatedAt"}
    
    6. Tasks with specific milestone and tags:
       {"projectId": "123456", "milestoneIds": ["milestone123"], "tagIds": ["tag456"]}
    
    **Sorting**:
    - Default: Tasks are sorted by most recently updated first (-postUpdatedAt)
    - Custom: Use order parameter with: postDueAt, postUpdatedAt, createdAt
    - Prefix with - for descending (e.g., "-createdAt")
    
    Returns paginated task list with id, number, subject, status, priority, dueDate, assignees, tags, and milestone.`,
      inputSchema: {
        type: 'object',
        properties: {
          projectId: {
            type: 'string',
            description: 'Project ID (REQUIRED)',
          },
          fromEmailAddress: {
            type: 'string',
            description: 'Filter by creator email address',
          },
          fromMemberIds: {
            type: 'array',
            items: { type: 'string' },
            description: 'Filter by creator member IDs',
          },
          toMemberIds: {
            type: 'array',
            items: { type: 'string' },
            description: 'Filter by assignee member IDs (organizationMemberId)',
          },
          ccMemberIds: {
            type: 'array',
            items: { type: 'string' },
            description: 'Filter by CC member IDs',
          },
          tagIds: {
            type: 'array',
            items: { type: 'string' },
            description: 'Filter by tag IDs',
          },
          parentPostId: {
            type: 'string',
            description: 'Filter by parent post ID (get subtasks)',
          },
          postNumber: {
            type: 'number',
            description: 'Filter by specific task number',
          },
          postWorkflowClasses: {
            type: 'array',
            items: { type: 'string' },
            description: 'Filter by workflow classes: backlog, registered, working, closed',
          },
          postWorkflowIds: {
            type: 'array',
            items: { type: 'string' },
            description: 'Filter by workflow IDs',
          },
          milestoneIds: {
            type: 'array',
            items: { type: 'string' },
            description: 'Filter by milestone IDs',
          },
          subjects: {
            type: 'string',
            description: 'Filter by task subject',
          },
          createdAt: {
            type: 'string',
            description: 'Filter by creation date (today, thisweek, prev-7d, next-7d, or ISO8601 range)',
          },
          updatedAt: {
            type: 'string',
            description: 'Filter by update date (today, thisweek, prev-7d, next-7d, or ISO8601 range)',
          },
          dueAt: {
            type: 'string',
            description: 'Filter by due date (today, thisweek, prev-7d, next-7d, or ISO8601 range)',
          },
          order: {
            type: 'string',
            description: 'Sort order: postDueAt, postUpdatedAt, createdAt (prefix with - for descending)',
          },
          page: {
            type: 'number',
            description: 'Page number (default: 0)',
            minimum: 0,
          },
          size: {
            type: 'number',
            description: 'Items per page (default: 20, max: 100)',
            minimum: 1,
            maximum: 100,
          },
        },
        required: ['projectId'],
      },
    };
  • src/index.ts:43-64 (registration)
    Tool registry mapping tool names to handlers and schemas, including 'get-task-list'.
    const toolRegistry = {
      // Common tools
      'get-my-member-info': { handler: getMyMemberInfoHandler, schema: getMyMemberInfoSchema },
    
      // Projects tools
      'get-project-list': { handler: getProjectListHandler, schema: getProjectListSchema },
      'get-project': { handler: getProjectHandler, schema: getProjectSchema },
      'get-task-list': { handler: getTaskListHandler, schema: getTaskListSchema },
      'get-task': { handler: getTaskHandler, schema: getTaskSchema },
      'create-task': { handler: createTaskHandler, schema: createTaskSchema },
      'update-task': { handler: updateTaskHandler, schema: updateTaskSchema },
      'create-task-comment': { handler: createTaskCommentHandler, schema: createTaskCommentSchema },
      'get-task-comment-list': { handler: getTaskCommentListHandler, schema: getTaskCommentListSchema },
      'update-task-comment': { handler: updateTaskCommentHandler, schema: updateTaskCommentSchema },
      'get-milestone-list': { handler: getMilestoneListHandler, schema: getMilestoneListSchema },
      'get-tag-list': { handler: getTagListHandler, schema: getTagListSchema },
      'get-project-template-list': { handler: getProjectTemplateListHandler, schema: getProjectTemplateListSchema },
      'get-project-template': { handler: getProjectTemplateHandler, schema: getProjectTemplateSchema },
      'get-project-member-list': { handler: getProjectMemberListHandler, schema: getProjectMemberListSchema },
      'get-project-member-group-list': { handler: getProjectMemberGroupListHandler, schema: getProjectMemberGroupListSchema },
      'get-project-workflow-list': { handler: getProjectWorkflowListHandler, schema: getProjectWorkflowListSchema },
    };
  • src/index.ts:69-87 (registration)
    Array of tool objects used for list_tools request, including getTaskListTool.
    const tools = [
      getMyMemberInfoTool,
      getProjectListTool,
      getProjectTool,
      getTaskListTool,
      getTaskTool,
      createTaskTool,
      updateTaskTool,
      createTaskCommentTool,
      getTaskCommentListTool,
      updateTaskCommentTool,
      getMilestoneListTool,
      getTagListTool,
      getProjectTemplateListTool,
      getProjectTemplateTool,
      getProjectMemberListTool,
      getProjectMemberGroupListTool,
      getProjectWorkflowListTool,
    ];
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full burden of behavioral disclosure. It effectively describes key behaviors: the tool returns a paginated list with compact response fields, explains default sorting (-postUpdatedAt), and details filtering capabilities (member IDs, workflows, dates). It could improve by mentioning rate limits or authentication needs, but covers most operational aspects well.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (IMPORTANT, Note, URL Pattern Recognition, filters, examples, sorting) and uses bold for emphasis. While lengthy, every section adds practical value—no wasted sentences. It could be slightly more concise in the examples section, but overall efficiently conveys complex information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (18 parameters, no annotations, no output schema), the description is highly complete. It covers purpose, usage guidelines, parameter semantics with examples, and behavioral details like pagination and response format. The main gap is lack of explicit output schema details, but it describes the returned fields adequately for a list tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so the baseline is 3. The description adds significant value beyond the schema by explaining parameter semantics in context: it clarifies how to use member ID filters (linking to get-my-member-info), enumerates workflow classes, provides flexible date patterns with examples, and explains sorting options with prefixes. This compensates for the schema's technical descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Get list of tasks in a Dooray project with powerful filtering and sorting.' It specifies the resource (tasks), the scope (Dooray project), and distinguishes it from sibling tools like get-task (for complete details) and get-project (for project info from URLs).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use this tool vs alternatives: it directs users to get-task for complete task details, get-project for project info from URLs, and get-my-member-info for organizationMemberId. It also clarifies that projectId is REQUIRED and explains URL pattern recognition for extracting IDs.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

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/jhl8041/dooray-mcp'

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