UNPKG

templui-mcp-server

Version:

A Model Context Protocol (MCP) server for TemplUI components, providing AI assistants with access to component source code, documentation, demos, and metadata.

51 lines 2.06 kB
import { cache } from '../utils/cache.js'; import { logError, logInfo } from '../utils/logger.js'; let githubClient; export function setGitHubClient(client) { githubClient = client; } export async function handleGetComponentDemo({ componentName }) { try { logInfo(`Getting demo code for component: ${componentName}`); // Check cache first const cacheKey = `component-demo:${componentName}`; const cached = await cache.get(cacheKey); if (cached) { logInfo(`Returning cached demo for component: ${componentName}`); const demosText = cached.join('\n\n' + '='.repeat(80) + '\n\n'); return { content: [{ type: "text", text: `# Demo Examples for ${componentName}\n\n${demosText}` }] }; } // Fetch from GitHub const demos = await githubClient.getComponentDemo(componentName); if (demos.length === 0) { throw new Error(`No demo files found for component "${componentName}"`); } // Cache the result await cache.set(cacheKey, demos); // Format demos for display const demosText = demos.join('\n\n' + '='.repeat(80) + '\n\n'); logInfo(`Successfully fetched ${demos.length} demo(s) for component: ${componentName}`); return { content: [{ type: "text", text: `# Demo Examples for ${componentName}\n\nFound ${demos.length} demo file(s):\n\n${demosText}` }] }; } catch (error) { logError(`Failed to get demo for component "${componentName}"`, error); throw new Error(`Failed to get demo for component "${componentName}": ${error instanceof Error ? error.message : String(error)}`); } } export const schema = { componentName: { type: 'string', description: 'Name of the TemplUI component to get demo examples for' } }; //# sourceMappingURL=get-component-demo.js.map