@recraft-ai/mcp-recraft-server
Version:
MCP Server implementation for recraft.ai API
139 lines (138 loc) • 6.43 kB
JavaScript
;
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);