get_todo
Retrieve detailed todo checklist information including task context, completion status, assignee details, due dates, time tracking, and related attachments for specific items.
Instructions
Get specific todo checklist item details with full task context.
Returns detailed todo information including:
Checkbox item text and completion status
Parent task with project and client details
Assignee and team member information
Due date relative to parent task timeline
Time estimates vs actual completion time
Related comments and file attachments
Args: todo_id: The Productive todo ID
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| todo_id | Yes | Productive todo ID |
Implementation Reference
- tools.py:319-334 (handler)MCP tool handler that fetches a single todo item by ID from Productive API, applies response filtering, handles API errors via shared helper, and logs via context.async def get_todo(ctx: Context, todo_id: int) -> ToolResult: """Fetch a single todo by ID and sanitize the response.""" try: await ctx.info(f"Fetching todo with ID: {todo_id}") result = await client.get_todo(todo_id) await ctx.info("Successfully retrieved todo") filtered = filter_response(result) return filtered except ProductiveAPIError as e: await _handle_productive_api_error(ctx, e, f"todo {todo_id}") except Exception as e: await ctx.error(f"Unexpected error fetching todo: {str(e)}") raise e
- server.py:410-426 (registration)FastMCP tool registration for 'get_todo' including input schema via Annotated Field and docstring description. Delegates execution to tools.get_todo.@mcp.tool async def get_todo( ctx: Context, todo_id: Annotated[int, Field(description="Productive todo ID")], ) -> Dict[str, Any]: """Get specific todo checklist item details with full task context. Returns detailed todo information including: - Checkbox item text and completion status - Parent task with project and client details - Assignee and team member information - Due date relative to parent task timeline - Time estimates vs actual completion time - Related comments and file attachments """ return await tools.get_todo(ctx, todo_id)
- server.py:413-414 (schema)Input schema definition for the todo_id parameter using Pydantic Annotated and Field.todo_id: Annotated[int, Field(description="Productive todo ID")], ) -> Dict[str, Any]:
- productive_client.py:104-106 (helper)ProductiveClient method that performs the actual HTTP GET request to the Productive API endpoint /todos/{todo_id}.async def get_todo(self, todo_id: int) -> Dict[str, Any]: """Get todo by ID""" return await self._request("GET", f"/todos/{str(todo_id)}")