Skip to main content
Glama
getCardContent.ts1.85 kB
import { z } from 'zod'; import { HeptabaseDataService } from '../services/HeptabaseDataService'; import { parseHeptabaseContentToMarkdown } from '../utils/contentParser'; export const getCardContentSchema = z.object({ cardId: z.string(), format: z.enum(['raw', 'markdown', 'json']).default('markdown') }); export async function getCardContentHandler( params: z.infer<typeof getCardContentSchema>, dataService: HeptabaseDataService ) { const result = await dataService.getCard(params.cardId); const card = result.card; if (!card) { throw new Error('Card not found'); } let content: string; let mimeType: string = 'text/plain'; switch (params.format) { case 'raw': content = card.content; mimeType = 'text/plain'; break; case 'json': const cardData = { id: card.id, title: card.title, content: JSON.parse(card.content), createdTime: card.createdTime, lastEditedTime: card.lastEditedTime, instances: result.instances.length }; content = JSON.stringify(cardData, null, 2); mimeType = 'application/json'; break; case 'markdown': default: content = `# ${card.title || 'Untitled'}\n\n`; content += parseHeptabaseContentToMarkdown(card.content); content += `\n\n---\n`; content += `Created: ${card.createdTime}\n`; content += `Last edited: ${card.lastEditedTime}\n`; content += `Card ID: ${card.id}\n`; if (result.instances.length > 0) { content += `\nAppears on ${result.instances.length} whiteboard(s)\n`; } mimeType = 'text/markdown'; break; } return { content: [{ type: 'resource', resource: { uri: `heptabase://card/${card.id}`, mimeType, text: content } }] }; }

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/LarryStanley/heptabase-mcp'

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