UNPKG

flyonui-mcp

Version:

FlyonUI MCP

147 lines (146 loc) 5.21 kB
#!/usr/bin/env node import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { z } from "zod"; import { apiClient } from "./utils/http-client.js"; // Create server instance const server = new McpServer({ name: "FlyonUI MCP Server", version: "1.0.0", }); /** * Helper function to create consistent response format */ const createResponse = (data) => ({ content: [ { type: "text", text: JSON.stringify(data, null, 2), } ], }); /** * Helper function to create error response */ const createErrorResponse = (message) => ({ content: [ { type: "text", text: JSON.stringify({ error: message }, null, 2), } ], isError: true, }); /** * A tool to get Instructions to follow for IDE agent to generate/create/update FlyonUI blocks. */ server.registerTool("get-instructions", { title: "Get Instructions for FlyonUI", description: "Retrieves Instructions for IDE agent to follow for creating/generating/updating FlyonUI blocks.", inputSchema: { type: z.string().min(1, "Type parameter is required"), }, }, async ({ type }) => { try { const url = `/instructions?path=${encodeURIComponent(type)}.md`; const response = await apiClient.get(url); if (response.status !== 200) { return createErrorResponse(`HTTP error! status: ${response.status}`); } return createResponse(response.data); } catch (error) { console.error("Error fetching instructions:", error); const message = error instanceof Error ? error.message : "Unknown error occurred"; return createErrorResponse(`Failed to fetch instructions: ${message}`); } }); /** * A tool to get the metadata of a block from a given URL. */ server.registerTool("get-block-metadata", { title: "Get Block Metadata", description: "Fetch the metadata of a block from a given URL. Use this tool to retrieve the block metadata from the authenticated URL.", inputSchema: {}, }, async () => { try { const url = `/instructions?path=block_metadata.json`; const response = await apiClient.get(url); if (response.status !== 200) { return createErrorResponse(`HTTP error! status: ${response.status}`); } return createResponse(response.data); } catch (error) { console.error("Error fetching block metadata:", error); const message = error instanceof Error ? error.message : "Unknown error occurred"; return createErrorResponse(`Failed to fetch block metadata: ${message}`); } }); /** * A tool to get the metadata of the block. */ server.registerTool("get-block-meta-content", { title: "Get Block Meta Content", description: "Fetch the content of the block metadata from the FlyonUI MCP server. Use this tool to retrieve the block metadata content.", inputSchema: { endpoint: z.string().min(1, "Endpoint parameter is required"), }, }, async ({ endpoint }) => { try { const url = `${endpoint}?type=json`; const response = await apiClient.get(url); if (response.status !== 200) { return createErrorResponse(`HTTP error! status: ${response.status}`); } return createResponse(response.data); } catch (error) { console.error("Error fetching block meta content:", error); const message = error instanceof Error ? error.message : "Unknown error occurred"; return createErrorResponse(`Failed to fetch block meta content: ${message}`); } }); /** * A tool to get the content of a block from a given URL. */ server.registerTool("get-block-content", { title: "Get Block Content", description: "Fetch the content of a block from a given URL. Use this tool to retrieve the code block content from the authenticated URL.", inputSchema: { endpoint: z.string().min(1, "Endpoint parameter is required"), type: z.string().min(1, "Type parameter is required"), }, }, async ({ endpoint, type }) => { try { const url = `${endpoint}?type=${encodeURIComponent(type)}`; const response = await apiClient.get(url); if (response.status !== 200) { return createErrorResponse(`HTTP error! status: ${response.status}`); } return createResponse(response.data); } catch (error) { console.error("Error fetching block content:", error); const message = error instanceof Error ? error.message : "Unknown error occurred"; return createErrorResponse(`Failed to fetch block content: ${message}`); } }); /** * Main function to start the server */ async function main() { try { const transport = new StdioServerTransport(); await server.connect(transport); console.error("FlyonUI MCP Server is running..."); } catch (error) { console.error("Failed to start server:", error); process.exit(1); } } main().catch((error) => { console.error("Fatal error in main():", error); process.exit(1); });