basecamp_get_kanban_card
Retrieve comprehensive details for a specific kanban card in Basecamp projects using bucket and card identifiers to access task information.
Instructions
Get all details of a specific kanban card.
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| bucket_id | Yes | Basecamp resource identifier | |
| card_id | Yes |
Implementation Reference
- src/tools/kanban.ts:357-406 (handler)Handler function that initializes the Basecamp client, fetches the specific kanban card using bucket_id and card_id, serializes key fields including id, title, content, due_on, url, counts, timestamps, creator, assignees, and steps, then returns the data as a formatted JSON string in a text content block. Handles errors using handleBasecampError.async (params) => { try { const client = await initializeBasecampClient(); const response = await client.cardTableCards.get({ params: { bucketId: params.bucket_id, cardId: params.card_id, }, }); if (response.status !== 200 || !response.body) { throw new Error("Failed to fetch card"); } const card = response.body; return { content: [ { type: "text", text: JSON.stringify( { id: card.id, title: card.title, content: card.content, due_on: card.due_on, url: card.app_url, comments_count: card.comments_count, created_at: card.created_at, updated_at: card.updated_at, creator: serializePerson(card.creator), assignees: card.assignees.map(serializePerson), steps: card.steps?.map((s) => ({ id: s.id, title: s.title, completed: s.completed, })), }, null, 2, ), }, ], }; } catch (error) { return { content: [{ type: "text", text: handleBasecampError(error) }], }; } },
- src/tools/kanban.ts:343-356 (schema)Tool schema definition including title, description, input schema requiring bucket_id and card_id (validated via BasecampIdSchema), and annotations indicating read-only, non-destructive, idempotent behavior with open-world hint.{ title: "Get Kanban Card", description: "Get all details of a specific kanban card.", inputSchema: { bucket_id: BasecampIdSchema, card_id: BasecampIdSchema, }, annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true, }, },
- src/tools/kanban.ts:341-407 (registration)Registration of the basecamp_get_kanban_card tool using server.registerTool within the registerKanbanTools function, specifying the tool name, schema/configuration, and handler.server.registerTool( "basecamp_get_kanban_card", { title: "Get Kanban Card", description: "Get all details of a specific kanban card.", inputSchema: { bucket_id: BasecampIdSchema, card_id: BasecampIdSchema, }, annotations: { readOnlyHint: true, destructiveHint: false, idempotentHint: true, openWorldHint: true, }, }, async (params) => { try { const client = await initializeBasecampClient(); const response = await client.cardTableCards.get({ params: { bucketId: params.bucket_id, cardId: params.card_id, }, }); if (response.status !== 200 || !response.body) { throw new Error("Failed to fetch card"); } const card = response.body; return { content: [ { type: "text", text: JSON.stringify( { id: card.id, title: card.title, content: card.content, due_on: card.due_on, url: card.app_url, comments_count: card.comments_count, created_at: card.created_at, updated_at: card.updated_at, creator: serializePerson(card.creator), assignees: card.assignees.map(serializePerson), steps: card.steps?.map((s) => ({ id: s.id, title: s.title, completed: s.completed, })), }, null, 2, ), }, ], }; } catch (error) { return { content: [{ type: "text", text: handleBasecampError(error) }], }; } }, );