basecamp_list_kanban_cards
Retrieve cards from a kanban column in Basecamp projects to track task progress and manage workflow visibility.
Instructions
List cards in a kanban column.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| bucket_id | Yes | Basecamp resource identifier | |
| column_id | Yes |
Implementation Reference
- src/tools/kanban.ts:297-338 (handler)The main handler function for the tool. It initializes the Basecamp client, fetches all kanban cards from the specified column using paged listing, serializes person data for creator and assignees, extracts relevant fields including steps status, formats as pretty JSON text content, and handles errors gracefully.async (params) => { try { const client = await initializeBasecampClient(); const cards = await asyncPagedToArray({ fetchPage: client.cardTableCards.list, request: { params: { bucketId: params.bucket_id, columnId: params.column_id }, query: {}, }, }); return { content: [ { type: "text", text: JSON.stringify( cards.map((c) => ({ id: c.id, title: c.title, due_on: c.due_on, url: c.app_url, comments_count: c.comments_count, created_at: c.created_at, creator: serializePerson(c.creator), assignees: c.assignees.map(serializePerson), steps: c.steps?.map((s) => ({ title: s.title, completed: s.completed, })), })), null, 2, ), }, ], }; } catch (error) { return { content: [{ type: "text", text: handleBasecampError(error) }], }; } },
- src/tools/kanban.ts:281-339 (registration)The server.registerTool call that defines and registers the 'basecamp_list_kanban_cards' tool, including its schema (requiring bucket_id and column_id), metadata annotations, title, description, and references the handler function.server.registerTool( "basecamp_list_kanban_cards", { title: "List Kanban Cards", description: "List cards in a kanban column.", inputSchema: { bucket_id: BasecampIdSchema, column_id: BasecampIdSchema, }, annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true, }, }, async (params) => { try { const client = await initializeBasecampClient(); const cards = await asyncPagedToArray({ fetchPage: client.cardTableCards.list, request: { params: { bucketId: params.bucket_id, columnId: params.column_id }, query: {}, }, }); return { content: [ { type: "text", text: JSON.stringify( cards.map((c) => ({ id: c.id, title: c.title, due_on: c.due_on, url: c.app_url, comments_count: c.comments_count, created_at: c.created_at, creator: serializePerson(c.creator), assignees: c.assignees.map(serializePerson), steps: c.steps?.map((s) => ({ title: s.title, completed: s.completed, })), })), null, 2, ), }, ], }; } catch (error) { return { content: [{ type: "text", text: handleBasecampError(error) }], }; } }, );
- src/index.ts:66-66 (registration)Top-level invocation of registerKanbanTools(server) in the main server file, which registers the kanban tools group including 'basecamp_list_kanban_cards'.registerKanbanTools(server);
- src/tools/kanban.ts:286-289 (schema)Input schema for the tool, using shared BasecampIdSchema for numeric IDs of bucket and column.inputSchema: { bucket_id: BasecampIdSchema, column_id: BasecampIdSchema, },