from mcp.server.fastmcp import FastMCP
from dooray_mcp.controllers import task as task_controller
def register_task_tools(mcp: FastMCP) -> None:
@mcp.tool(
name="dooray_list_tasks",
description="List tasks from Dooray project with optional filtering",
)
async def dooray_list_tasks(
project_id: str,
page: int = 0,
size: int = 20,
workflow_class: str | None = None,
to_member_ids: str | None = None,
tag_ids: str | None = None,
milestone_ids: str | None = None,
due_date: str | None = None,
order: str = "-createdAt",
) -> str:
result = await task_controller.list_tasks(
project_id=project_id,
page=page,
size=size,
workflow_class=workflow_class,
to_member_ids=to_member_ids,
tag_ids=tag_ids,
milestone_ids=milestone_ids,
due_date=due_date,
order=order,
)
return result.content
@mcp.tool(
name="dooray_get_task",
description="Get detailed information about a specific task",
)
async def dooray_get_task(
project_id: str,
post_id: str,
) -> str:
result = await task_controller.get_task(
project_id=project_id,
post_id=post_id,
)
return result.content
@mcp.tool(
name="dooray_create_task",
description="Create a new task in a Dooray project",
)
async def dooray_create_task(
project_id: str,
subject: str,
body: str | None = None,
body_mime_type: str = "text/x-markdown",
to_member_ids: list[str] | None = None,
cc_member_ids: list[str] | None = None,
milestone_id: str | None = None,
tag_ids: list[str] | None = None,
due_date: str | None = None,
priority: str | None = None,
parent_post_id: str | None = None,
) -> str:
result = await task_controller.create_task(
project_id=project_id,
subject=subject,
body=body,
body_mime_type=body_mime_type,
to_member_ids=to_member_ids,
cc_member_ids=cc_member_ids,
milestone_id=milestone_id,
tag_ids=tag_ids,
due_date=due_date,
priority=priority,
parent_post_id=parent_post_id,
)
return result.content
@mcp.tool(
name="dooray_update_task",
description="Update an existing task",
)
async def dooray_update_task(
project_id: str,
post_id: str,
subject: str | None = None,
body: str | None = None,
body_mime_type: str = "text/x-markdown",
due_date: str | None = None,
priority: str | None = None,
milestone_id: str | None = None,
) -> str:
result = await task_controller.update_task(
project_id=project_id,
post_id=post_id,
subject=subject,
body=body,
body_mime_type=body_mime_type,
due_date=due_date,
priority=priority,
milestone_id=milestone_id,
)
return result.content
@mcp.tool(
name="dooray_set_task_workflow",
description="Change task workflow status",
)
async def dooray_set_task_workflow(
project_id: str,
post_id: str,
workflow_id: str,
) -> str:
result = await task_controller.set_task_workflow(
project_id=project_id,
post_id=post_id,
workflow_id=workflow_id,
)
return result.content
@mcp.tool(
name="dooray_set_task_done",
description="Mark a task as done",
)
async def dooray_set_task_done(
project_id: str,
post_id: str,
) -> str:
result = await task_controller.set_task_done(
project_id=project_id,
post_id=post_id,
)
return result.content