flyonui-mcp
Version:
FlyonUI MCP
147 lines (146 loc) • 5.21 kB
JavaScript
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);
});