UNPKG

@recraft-ai/mcp-recraft-server

Version:
139 lines (138 loc) 6.43 kB
#!/usr/bin/env node "use strict"; var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) { function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); } return new (P || (P = Promise))(function (resolve, reject) { function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } } function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } } function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); } step((generator = generator.apply(thisArg, _arguments || [])).next()); }); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; var _a; Object.defineProperty(exports, "__esModule", { value: true }); require("dotenv/config"); const api_1 = require("./api"); const RecraftApi_1 = require("./RecraftApi"); const stdio_js_1 = require("@modelcontextprotocol/sdk/server/stdio.js"); const GenerateImage_1 = require("./tools/GenerateImage"); const ImageToImage_1 = require("./tools/ImageToImage"); const index_js_1 = require("@modelcontextprotocol/sdk/server/index.js"); const types_js_1 = require("@modelcontextprotocol/sdk/types.js"); const RecraftServer_1 = require("./RecraftServer"); const path_1 = __importDefault(require("path")); const os_1 = __importDefault(require("os")); const CreateStyle_1 = require("./tools/CreateStyle"); const VectorizeImage_1 = require("./tools/VectorizeImage"); const RemoveBackground_1 = require("./tools/RemoveBackground"); const ReplaceBackground_1 = require("./tools/ReplaceBackground"); const CrispUpscale_1 = require("./tools/CrispUpscale"); const CreativeUpscale_1 = require("./tools/CreativeUpscale"); const GetUser_1 = require("./tools/GetUser"); const server = new index_js_1.Server({ name: 'mcp-recraft-server', version: '1.6.5', }, { capabilities: { tools: {}, } }); const remoteResultsStorage = process.env.RECRAFT_REMOTE_RESULTS_STORAGE === "1" || process.env.RECRAFT_REMOTE_RESULTS_STORAGE === "true"; let homeDir; try { homeDir = os_1.default.homedir(); } catch (error) { try { homeDir = os_1.default.tmpdir(); } catch (error) { homeDir = ""; } } if (process.env.IMAGE_STORAGE_DIRECTORY) { process.env.IMAGE_STORAGE_DIRECTORY = ((_a = process.env.IMAGE_STORAGE_DIRECTORY) !== null && _a !== void 0 ? _a : '').replace("${HOME}", homeDir); } if (!remoteResultsStorage && !process.env.IMAGE_STORAGE_DIRECTORY) { process.env.IMAGE_STORAGE_DIRECTORY = path_1.default.join(homeDir, ".mcp-recraft-server"); } const apiConfig = new api_1.Configuration({ basePath: process.env.RECRAFT_API_URL, accessToken: process.env.RECRAFT_API_KEY, headers: { 'X-Client-Type': 'mcp-recraft-server', } }); const api = (0, RecraftApi_1.createRecraftApi)(apiConfig); const recraftServer = new RecraftServer_1.RecraftServer(api, remoteResultsStorage ? undefined : process.env.IMAGE_STORAGE_DIRECTORY); server.setRequestHandler(types_js_1.ListToolsRequestSchema, () => __awaiter(void 0, void 0, void 0, function* () { return { tools: [ GenerateImage_1.generateImageTool, CreateStyle_1.createStyleTool, VectorizeImage_1.vectorizeImageTool, ImageToImage_1.imageToImageTool, RemoveBackground_1.removeBackgroundTool, ReplaceBackground_1.replaceBackgroundTool, CrispUpscale_1.crispUpscaleTool, CreativeUpscale_1.creativeUpscaleTool, GetUser_1.getUserTool, ], }; })); server.setRequestHandler(types_js_1.CallToolRequestSchema, (request) => __awaiter(void 0, void 0, void 0, function* () { try { recraftServer.initializeIfNeeded(); } catch (error) { return { content: [ { type: 'text', text: `Error initializing Recraft server: ${error}` } ], isError: true }; } const { params: { name: tool, arguments: args } } = request; switch (tool) { case GenerateImage_1.generateImageTool.name: return yield (0, GenerateImage_1.generateImageHandler)(recraftServer, args !== null && args !== void 0 ? args : {}); case CreateStyle_1.createStyleTool.name: return yield (0, CreateStyle_1.createStyleHandler)(recraftServer, args !== null && args !== void 0 ? args : {}); case VectorizeImage_1.vectorizeImageTool.name: return yield (0, VectorizeImage_1.vectorizeImageHandler)(recraftServer, args !== null && args !== void 0 ? args : {}); case ImageToImage_1.imageToImageTool.name: return yield (0, ImageToImage_1.imageToImageHandler)(recraftServer, args !== null && args !== void 0 ? args : {}); case RemoveBackground_1.removeBackgroundTool.name: return yield (0, RemoveBackground_1.removeBackgroundHandler)(recraftServer, args !== null && args !== void 0 ? args : {}); case ReplaceBackground_1.replaceBackgroundTool.name: return yield (0, ReplaceBackground_1.replaceBackgroundHandler)(recraftServer, args !== null && args !== void 0 ? args : {}); case CrispUpscale_1.crispUpscaleTool.name: return yield (0, CrispUpscale_1.crispUpscaleHandler)(recraftServer, args !== null && args !== void 0 ? args : {}); case CreativeUpscale_1.creativeUpscaleTool.name: return yield (0, CreativeUpscale_1.creativeUpscaleHandler)(recraftServer, args !== null && args !== void 0 ? args : {}); case GetUser_1.getUserTool.name: return yield (0, GetUser_1.getUserHandler)(recraftServer, args !== null && args !== void 0 ? args : {}); default: return { content: [ { type: 'text', text: `Unknown tool: ${tool}` } ], isError: true }; } })); const runServer = () => __awaiter(void 0, void 0, void 0, function* () { const transport = new stdio_js_1.StdioServerTransport(); yield server.connect(transport); console.error("Recraft MCP Server running on stdio"); }); runServer().catch(console.error);