Skip to main content
Glama
index_not_good_20250401095009.ts7.28 kB
#!/usr/bin/env node import { Server } from "@modelcontextprotocol/sdk/server/index.js"; import { StdioServerTransport } from "@modelcontextprotocol/sdk/server/stdio.js"; import { CallToolRequestSchema, ListToolsRequestSchema, Tool, } from "@modelcontextprotocol/sdk/types.js"; const READ_SCENARIO_BLUEPRINT_TOOL: Tool = { name: "read_make_dot_com_scenario_blueprint", description: "Reads the JSON blueprint of a Make.com scenario. Returns the complete blueprint structure including flow, connections, and metadata.", inputSchema: { type: "object", properties: { scenario_id: { type: "number", description: "Scenario ID to retrieve the blueprint for", }, draft: { type: "boolean", description: "If true, retrieves the draft version. If false, retrieves the live version.", default: false, }, }, required: ["scenario_id"], }, }; const LIST_SCENARIOS_TOOL: Tool = { name: "list_make_dot_com_scenarios", description: "Lists all available Make.com scenarios with their IDs, names, and scheduling types.", inputSchema: { type: "object", properties: {}, }, }; const DESCRIBE_MAKE_MODULE_TOOL: Tool = { name: "describe_make_dot_com_module", description: "Describes the configuration and parameters of a module inside a Make.com scenario.", inputSchema: { type: "object", properties: { scenario_id: { type: "number", description: "ID of the scenario containing the module", }, module_id: { type: "number", description: "ID of the module to describe", }, draft: { type: "boolean", description: "If true, retrieve from the draft version", default: false, }, }, required: ["scenario_id", "module_id"], }, }; const CREATE_SCENARIO_TOOL: Tool = { name: "create_make_dot_com_scenario", description: "Creates a new Make.com scenario with optional folder and description", inputSchema: { type: "object", properties: { name: { type: "string", description: "Name of the new scenario" }, folderId: { type: "number", description: "Folder ID to create scenario in" }, description: { type: "string", description: "Optional scenario description" }, }, required: ["name"], }, }; const UPDATE_SCENARIO_TOOL: Tool = { name: "update_make_dot_com_scenario", description: "Updates a Make.com scenario's name, description, or scheduling.", inputSchema: { type: "object", properties: { scenario_id: { type: "number", description: "ID of the scenario to update" }, name: { type: "string", description: "New name of the scenario" }, description: { type: "string", description: "New description of the scenario" } }, required: ["scenario_id"], }, }; const CHECK_MODULE_TOOL: Tool = { name: "check_make_dot_com_module_data", description: "Checks whether a module in a Make.com scenario has required configuration fields populated.", inputSchema: { type: "object", properties: { scenario_id: { type: "number", description: "Scenario ID containing the module" }, module_id: { type: "number", description: "Module ID to verify" }, draft: { type: "boolean", default: false }, }, required: ["scenario_id", "module_id"], }, }; const UPDATE_MODULE_PARAMS_TOOL: Tool = { name: "update_module_parameters", description: "Updates specific parameters of a module inside a Make.com scenario blueprint.", inputSchema: { type: "object", properties: { scenario_id: { type: "number", description: "ID of the scenario containing the module" }, module_id: { type: "number", description: "ID of the module to update" }, parameters: { type: "object", description: "Key-value pairs of parameters to update on the module", additionalProperties: true, }, draft: { type: "boolean", default: false }, }, required: ["scenario_id", "module_id", "parameters"], }, }; const server = new Server( { name: "mcp-server-make-dot-com", version: "0.1.0", }, { capabilities: { tools: {}, }, } ); const MAKE_API_KEY = process.env.MAKE_DOT_COM_API_KEY!; const MAKE_BASE_URL = process.env.MAKE_DOT_COM_BASE_URL || "eu2.make.com"; const MAKE_TEAM_ID = process.env.MAKE_DOT_COM_TEAM_ID; if (!MAKE_API_KEY) { console.error("Error: MAKE_DOT_COM_API_KEY environment variable is required"); process.exit(1); } if (!MAKE_TEAM_ID) { console.error("Error: MAKE_DOT_COM_TEAM_ID environment variable is required"); process.exit(1); } async function getScenarioBlueprint( scenarioId: number, draft: boolean = false ): Promise<any> { const url = `https://${MAKE_BASE_URL}/api/v2/scenarios/${scenarioId}/blueprint?includeDraft=${draft}&teamId=${MAKE_TEAM_ID}`; const response = await fetch(url, { headers: { Authorization: `Token ${MAKE_API_KEY}`, "Content-Type": "application/json", Accept: "application/json", }, }); if (!response.ok) { throw new Error( `Make.com API error: ${response.status} ${response.statusText}\n${await response.text()}` ); } const data = await response.json(); return data.response.blueprint; } async function updateModuleParameters( scenarioId: number, moduleId: number, parameters: Record<string, unknown>, draft: boolean = false ): Promise<string> { const blueprint = await getScenarioBlueprint(scenarioId, draft); const mod = blueprint.flow.find((m: any) => m.id === moduleId); if (!mod) throw new Error("Module not found"); mod.parameters = { ...mod.parameters, ...parameters }; const response = await fetch(`https://${MAKE_BASE_URL}/api/v2/scenarios/${scenarioId}/blueprint?teamId=${MAKE_TEAM_ID}`, { method: "PUT", headers: { Authorization: `Token ${MAKE_API_KEY}`, "Content-Type": "application/json", Accept: "application/json", }, body: JSON.stringify({ blueprint }), }); if (!response.ok) throw new Error(`Make.com API error: ${response.status}\n${await response.text()}`); return `✅ Module parameters updated for module ${moduleId}`; } server.setRequestHandler(ListToolsRequestSchema, async () => ({ tools: [ READ_SCENARIO_BLUEPRINT_TOOL, LIST_SCENARIOS_TOOL, DESCRIBE_MAKE_MODULE_TOOL, CREATE_SCENARIO_TOOL, UPDATE_SCENARIO_TOOL, CHECK_MODULE_TOOL, UPDATE_MODULE_PARAMS_TOOL, ], })); server.setRequestHandler(CallToolRequestSchema, async (request) => { const { name, arguments: args } = request.params; if (name === UPDATE_MODULE_PARAMS_TOOL.name) { if ( !args || typeof args.scenario_id !== "number" || typeof args.module_id !== "number" || typeof args.parameters !== "object" || args.parameters === null ) { throw new Error("Invalid arguments for update_module_parameters"); } const draft = typeof args.draft === "boolean" ? args.draft : false; const result = await updateModuleParameters( args.scenario_id, args.module_id, args.parameters as Record<string, unknown>, draft ); return { content: [{ type: "text", text: result }] }; } throw new Error(`Unknown tool: ${name}`); });

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/sparxHub/mcp-makesync'

If you have feedback or need assistance with the MCP directory API, please join our Discord server