get-tasks-by-day
Retrieve tasks scheduled for a specific date from Sunsama, with options to filter by completion status to focus on pending or finished work.
Instructions
Get tasks for a specific day with optional filtering by completion status
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| completionFilter | No | Filter tasks by completion status. 'all' returns all tasks, 'incomplete' returns only incomplete tasks, 'completed' returns only completed tasks. Defaults to 'all' | |
| day | Yes | ||
| timezone | No | Timezone string (e.g., 'America/New_York'). If not provided, uses user's default timezone |
Implementation Reference
- src/tools/task-tools.ts:55-76 (handler)The primary handler for the 'get-tasks-by-day' tool. Fetches tasks for a given day (resolving timezone if needed), applies completion filtering, trims response data, and formats as TSV.export const getTasksByDayTool = withTransportClient({ name: "get-tasks-by-day", description: "Get tasks for a specific day with optional filtering by completion status", parameters: getTasksByDaySchema, execute: async ( { day, timezone, completionFilter = "all" }: GetTasksByDayInput, context: ToolContext, ) => { // If no timezone provided, get the user's default timezone let resolvedTimezone = timezone; if (!resolvedTimezone) { resolvedTimezone = await context.client.getUserTimezone(); } const tasks = await context.client.getTasksByDay(day, resolvedTimezone); const filteredTasks = filterTasksByCompletion(tasks, completionFilter); const trimmedTasks = trimTasksForResponse(filteredTasks); return formatTsvResponse(trimmedTasks); }, });
- src/schemas.ts:15-26 (schema)Zod input schema validating parameters for get-tasks-by-day: required 'day' (YYYY-MM-DD), optional 'timezone', optional 'completionFilter'.export const getTasksByDaySchema = z.object({ day: z.string().regex( /^\d{4}-\d{2}-\d{2}$/, "Day must be in YYYY-MM-DD format", ), timezone: z.string().optional().describe( "Timezone string (e.g., 'America/New_York'). If not provided, uses user's default timezone", ), completionFilter: completionFilterSchema.optional().describe( "Filter tasks by completion status. 'all' returns all tasks, 'incomplete' returns only incomplete tasks, 'completed' returns only completed tasks. Defaults to 'all'", ), });
- src/main.ts:33-44 (registration)Final MCP server registration of all tools (including get-tasks-by-day) by iterating allTools and calling server.registerTool with name, schema, and execute function.allTools.forEach((tool) => { server.registerTool( tool.name, { description: tool.description, inputSchema: "shape" in tool.parameters ? tool.parameters.shape : tool.parameters, }, tool.execute, ); });
- src/tools/task-tools.ts:406-409 (registration)Local registration of getTasksByDayTool within the taskTools array, which is later spread into allTools.export const taskTools = [ // Query tools getTasksBacklogTool, getTasksByDayTool,
- src/utils/task-filters.ts:29-49 (helper)Helper function used in the handler to filter fetched tasks by completion status (all, incomplete, completed).export function filterTasksByCompletion(tasks: Task[], filter: CompletionFilter): Task[] { // Validate filter parameter if (!["all", "incomplete", "completed"].includes(filter)) { throw new Error(`Invalid completion filter: ${filter}. Must be 'all', 'incomplete', or 'completed'.`); } switch (filter) { case "all": return tasks; // No filtering - return all tasks case "incomplete": return tasks.filter(task => !task.completed); case "completed": return tasks.filter(task => task.completed); default: // TypeScript exhaustiveness check - should never reach here throw new Error(`Unhandled completion filter: ${filter satisfies never}`); } }