Skip to main content
Glama

basecamp_list_todos

Retrieve active or archived tasks from a Basecamp todo list to track project progress and manage workflow.

Instructions

List todos in a todo list. Filter by status: 'active' or 'archived'.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
bucket_idYesBasecamp resource identifier
todolist_idYes
statusNoactive
completedNo

Implementation Reference

  • The asynchronous handler function that lists todos in a Basecamp todo list. It uses the Basecamp client to fetch paged todos, serializes assignees, and returns a structured JSON response with count and todo details.
    async (params) => {
      try {
        const client = await initializeBasecampClient();
        const todos = await asyncPagedToArray({
          fetchPage: client.todos.list,
          request: {
            params: {
              bucketId: params.bucket_id,
              todolistId: params.todolist_id,
            },
            query: { status: params.status, completed: params.completed },
          },
        });
    
        return {
          content: [
            {
              type: "text",
              text: JSON.stringify(
                {
                  count: todos.length,
                  todos: todos.map((t) => ({
                    id: t.id,
                    title: t.content,
                    completed: t.completed,
                    assignees: t.assignees.map(serializePerson),
                  })),
                },
                null,
                2,
              ),
            },
          ],
        };
      } catch (error) {
        return {
          content: [{ type: "text", text: handleBasecampError(error) }],
        };
      }
    },
  • Registers the 'basecamp_list_todos' tool on the MCP server, defining its title, description, input schema (using Zod), annotations, and references the handler function.
    server.registerTool(
      "basecamp_list_todos",
      {
        title: "List Basecamp Todos",
        description:
          "List todos in a todo list. Filter by status: 'active' or 'archived'.",
        inputSchema: {
          bucket_id: BasecampIdSchema,
          todolist_id: BasecampIdSchema,
          status: z.enum(["active", "archived"]).default("active").optional(),
          completed: z.enum(["true"]).optional(),
        },
        annotations: {
          readOnlyHint: true,
          destructiveHint: false,
          idempotentHint: true,
          openWorldHint: true,
        },
      },
      async (params) => {
        try {
          const client = await initializeBasecampClient();
          const todos = await asyncPagedToArray({
            fetchPage: client.todos.list,
            request: {
              params: {
                bucketId: params.bucket_id,
                todolistId: params.todolist_id,
              },
              query: { status: params.status, completed: params.completed },
            },
          });
    
          return {
            content: [
              {
                type: "text",
                text: JSON.stringify(
                  {
                    count: todos.length,
                    todos: todos.map((t) => ({
                      id: t.id,
                      title: t.content,
                      completed: t.completed,
                      assignees: t.assignees.map(serializePerson),
                    })),
                  },
                  null,
                  2,
                ),
              },
            ],
          };
        } catch (error) {
          return {
            content: [{ type: "text", text: handleBasecampError(error) }],
          };
        }
      },
    );
  • Input schema for the basecamp_list_todos tool, validating bucket_id, todolist_id (using BasecampIdSchema), status, and completed parameters.
    inputSchema: {
      bucket_id: BasecampIdSchema,
      todolist_id: BasecampIdSchema,
      status: z.enum(["active", "archived"]).default("active").optional(),
      completed: z.enum(["true"]).optional(),
    },
  • Reusable Zod schema for Basecamp IDs (number), used in basecamp_list_todos input schema for bucket_id and todolist_id.
    export const BasecampIdSchema = z
      .number()
      .describe("Basecamp resource identifier");
  • src/index.ts:63-63 (registration)
    Top-level call to registerTodoTools on the MCP server instance, which includes registration of basecamp_list_todos among other todo-related tools.
    registerTodoTools(server);

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/stefanoverna/basecamp-mcp'

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