Skip to main content
Glama

list_todos

Filter and paginate todos by status, priority, or tags to efficiently manage tasks. Supports advanced querying for tailored task lists.

Instructions

List todos with filtering and pagination

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results
offsetNoNumber of results to skip
priorityNoFilter by priority
statusNoFilter by completion statusall
tagsNoFilter by tags (OR logic)

Implementation Reference

  • Handler function for the 'list_todos' tool call. Validates input with ListTodosSchema, delegates to TodoService.listTodos, formats paginated results into MCP response.
    async handleListTodos(request: CallToolRequest): Promise<CallToolResult> { try { const sanitizedArgs = sanitizeInput(request.params.arguments); const validatedRequest = validateData(ListTodosSchema, sanitizedArgs); const result = this.todoService.listTodos({ ...validatedRequest, status: validatedRequest.status || "all", limit: validatedRequest.limit || 50, offset: validatedRequest.offset || 0, }); return { content: [ { type: "text", text: `📋 Encontrados ${result.todos.length} de ${result.total} todo(s)\n` + `📄 Página: ${Math.floor(result.offset / result.limit) + 1}\n` + `${ result.hasMore ? "➡️ Há mais resultados disponíveis" : "✅ Todos os resultados exibidos" }\n\n` + JSON.stringify(result.todos, null, 2), }, ], }; } catch (error) { const errorResponse = createErrorResponse(error, "listar todos"); return { content: [ { type: "text", text: `❌ ${errorResponse.error}\n${errorResponse.details || ""}`, }, ], }; } }
  • Zod input schema for 'list_todos' tool defining parameters: status, priority, tags, limit, offset with defaults and validation.
    export const ListTodosSchema = z.object({ status: z.enum(['all', 'completed', 'pending']).default('all'), priority: z.enum(['low', 'medium', 'high']).optional(), tags: z.array(z.string()).optional(), limit: z.number().int().min(1).max(100).default(50), offset: z.number().int().min(0).default(0) });
  • Tool registration in TOOL_DEFINITIONS array with name 'list_todos', description, and JSON schema matching ListTodosSchema.
    { name: "list_todos", description: "List todos with filtering and pagination", inputSchema: { type: "object", properties: { status: { type: "string", enum: ["all", "completed", "pending"], description: "Filter by completion status", default: "all", }, priority: { type: "string", enum: ["low", "medium", "high"], description: "Filter by priority", }, tags: { type: "array", items: { type: "string" }, description: "Filter by tags (OR logic)", }, limit: { type: "number", minimum: 1, maximum: 100, description: "Maximum number of results", default: 50, }, offset: { type: "number", minimum: 0, description: "Number of results to skip", default: 0, }, }, }, },
  • Core implementation in TodoService.listTodos: validates input, applies filters via getAllTodos, paginates results, returns structured TodoListResponse.
    listTodos(request: ListTodosRequest): TodoListResponse { // Validar entrada const validatedRequest = validateData(ListTodosSchema, request); const filters: TodoFilters = {}; if (validatedRequest.status !== undefined) { filters.status = validatedRequest.status; } if (validatedRequest.priority !== undefined) { filters.priority = validatedRequest.priority; } if (validatedRequest.tags !== undefined) { filters.tags = validatedRequest.tags; } const allFilteredTodos = this.getAllTodos(filters); const startIndex = validatedRequest.offset ?? 0; const limit = validatedRequest.limit ?? 50; const offset = validatedRequest.offset ?? 0; const endIndex = startIndex + limit; const paginatedTodos = allFilteredTodos.slice(startIndex, endIndex); const response: TodoListResponse = { todos: paginatedTodos, total: allFilteredTodos.length, limit: limit, offset: offset, hasMore: endIndex < allFilteredTodos.length }; return validateData(TodoSchema.array(), paginatedTodos).length > 0 ? response : { ...response, todos: [] }; }

Other Tools

Related 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/glaucia86/todo-list-mcp-server'

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