Skip to main content
Glama
presenter.ts2.43 kB
import { stringify as toYaml } from "yaml"; import { renderMarkdownTemplate } from "./markdownRenderer.js"; export type PresenterFormat = "json" | "yaml" | "markdown"; export const DEFAULT_PRESENTER_FORMAT: PresenterFormat = "yaml"; export interface PresenterPayload { text: string; detailLevel?: string; structured?: unknown; context?: Record<string, unknown>; template?: string; } export function presentStructuredData( payload: PresenterPayload, format: PresenterFormat = DEFAULT_PRESENTER_FORMAT, ): string { switch (format) { case "json": return JSON.stringify(resolveStructured(payload), null, 2); case "yaml": return toYaml(resolveStructured(payload)); case "markdown": return formatMarkdown(payload, format); default: return toYaml(resolveStructured(payload)); } } function resolveStructured(payload: PresenterPayload): unknown { if (payload.structured !== undefined) { return payload.structured; } return { mode: payload.detailLevel, text: payload.text, ...(payload.context ?? {}), }; } function formatMarkdown( payload: PresenterPayload, requestedFormat: PresenterFormat, ): string { const context = { ...(payload.context ?? {}) } as Record<string, unknown>; const inferredTitle = payload.detailLevel ? `${payload.detailLevel.charAt(0).toUpperCase()}${payload.detailLevel.slice(1)}` : "Response"; const effectiveTemplate = payload.template ?? (payload.detailLevel === "detailed" ? "detailedPayload" : "default"); const payloadFormat = (context.payloadFormat as PresenterFormat | undefined) ?? (requestedFormat === "markdown" ? DEFAULT_PRESENTER_FORMAT : requestedFormat); const resolveStructuredText = () => { if (typeof payload.structured === "string") return payload.structured; if (payload.structured === undefined) return payload.text ?? ""; return payloadFormat === "json" ? JSON.stringify(payload.structured, null, 2) : toYaml(payload.structured); }; let bodyText = payload.text?.trim() ?? ""; if (!bodyText) { bodyText = resolveStructuredText(); } if (effectiveTemplate === "detailedPayload") { context.title ??= inferredTitle; context.payload ??= resolveStructuredText(); context.payloadFormat ??= payloadFormat; } if (effectiveTemplate === "default" && !("title" in context)) { context.title = inferredTitle; } return renderMarkdownTemplate(effectiveTemplate, { ...context, text: bodyText, }); }

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/8beeeaaat/touchdesigner-mcp'

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