process.env.MASTRA_TELEMETRY_DISABLED = "1";
const { MCPClient } = await import("@mastra/mcp");
const apiKey = process.env.MAGIC_HOUR_API_KEY;
const projectId = process.env.MAGIC_HOUR_IMAGE_PROJECT_ID;
if (!apiKey || !projectId) {
throw new Error("Set MAGIC_HOUR_API_KEY and MAGIC_HOUR_IMAGE_PROJECT_ID.");
}
const mcp = new MCPClient({
servers: {
magic_hour: {
url: new URL("https://mcp.magichour.ai/"),
protocolVersion: "legacy",
allowedHosts: ["mcp.magichour.ai"],
requestInit: { headers: { Authorization: `Bearer ${apiKey}` } },
},
},
timeout: 15000,
});
try {
const { tools, errors } = await mcp.listToolsWithErrors({ perServerTimeoutMs: 15000 });
const accountTool = tools.magic_hour_account_retrieve;
const imageTool = tools.magic_hour_image_projects_retrieve_details;
if (
Object.keys(errors).length > 0 ||
typeof accountTool?.execute !== "function" ||
typeof imageTool?.execute !== "function"
) {
throw new Error("Magic Hour discovery did not return the required tools.");
}
console.log(`Discovered ${Object.keys(tools).length} tools.`);
const account = await accountTool.execute({}, { abortSignal: AbortSignal.timeout(15000) });
if (
!account ||
typeof account !== "object" ||
account.error ||
account.isError ||
typeof account.id !== "string" ||
typeof account.credits !== "number"
) {
throw new Error("Magic Hour authorization did not return an account.");
}
console.log("Magic Hour API authorization confirmed.");
const project = await imageTool.execute(
{ id: projectId },
{ abortSignal: AbortSignal.timeout(15000) },
);
if (
!project ||
typeof project !== "object" ||
project.error ||
project.isError ||
project.id !== projectId ||
project.status !== "complete"
) {
throw new Error("Saved image project is not complete; keep its ID and inspect its status.");
}
console.log("Saved image project is complete.");
} finally {
await mcp.disconnect();
}