Skip to main content
Glama

run_scenario_11422

List inventory items by triggering an automation workflow designed for AI systems, enabling seamless integration with your existing Make scenarios.

Instructions

Tool: List Inventory (Lists items in inventory.)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • Handler for CallToolRequestSchema. Matches tool names like 'run_scenario_11422' using regex, extracts scenario ID from name.substring(13), executes the scenario via make.scenarios.run, and returns output as text or error.
    server.setRequestHandler(CallToolRequestSchema, async request => { if (/^run_scenario_\d+$/.test(request.params.name)) { try { const output = ( await make.scenarios.run(parseInt(request.params.name.substring(13)), request.params.arguments) ).outputs; return { content: [ { type: 'text', text: output ? JSON.stringify(output, null, 2) : 'Scenario executed successfully.', }, ], }; } catch (err: unknown) { return { isError: true, content: [ { type: 'text', text: String(err), }, ], }; } } throw new Error(`Unknown tool: ${request.params.name}`); });
  • src/index.ts:37-57 (registration)
    Dynamic registration of tools in ListToolsRequestSchema handler. For each on-demand scenario, creates a tool 'run_scenario_<id>' (e.g., run_scenario_11422 for id=11422), generates description and inputSchema dynamically.
    server.setRequestHandler(ListToolsRequestSchema, async () => { const scenarios = await make.scenarios.list(teamId); return { tools: await Promise.all( scenarios .filter(scenario => scenario.scheduling.type === 'on-demand') .map(async scenario => { const inputs = (await make.scenarios.interface(scenario.id)).input; return { name: `run_scenario_${scenario.id}`, description: scenario.name + (scenario.description ? ` (${scenario.description})` : ''), inputSchema: remap({ name: 'wrapper', type: 'collection', spec: inputs, }), }; }), ), }; });
  • Remaps Make scenario input specification to JSON Schema object used as inputSchema for the dynamic tools.
    export function remap(field: Input): unknown { switch (field.type) { case 'collection': const required: string[] = []; const properties: unknown = (Array.isArray(field.spec) ? field.spec : []).reduce((object, subField) => { if (!subField.name) return object; if (subField.required) required.push(subField.name); return Object.defineProperty(object, subField.name, { enumerable: true, value: remap(subField), }); }, {}); return { type: 'object', description: noEmpty(field.help), properties, required, }; case 'array': return { type: 'array', description: noEmpty(field.help), items: field.spec && remap( Array.isArray(field.spec) ? { type: 'collection', spec: field.spec, } : field.spec, ), }; case 'select': return { type: 'string', description: noEmpty(field.help), enum: (field.options || []).map(option => option.value), }; default: return { type: PRIMITIVE_TYPE_MAP[field.type as keyof typeof PRIMITIVE_TYPE_MAP], default: field.default != '' && field.default != null ? field.default : undefined, description: noEmpty(field.help), }; } }
  • The Scenarios class run method that actually executes the scenario by POSTing to Make API /scenarios/{id}/run with input arguments.
    async run(scenarioId: number, body: unknown): Promise<ScenarioRunServerResponse> { return await this.#fetch<ScenarioRunServerResponse>(`/scenarios/${scenarioId}/run`, { method: 'POST', body: JSON.stringify({ data: body, responsive: true }), headers: { 'content-type': 'application/json', }, }); } }
  • Fetches the input interface/spec for a scenario, used to generate the tool's inputSchema.
    async ['interface'](scenarioId: number): Promise<ScenarioInteface> { return (await this.#fetch<ScenarioInterfaceServerResponse>(`/scenarios/${scenarioId}/interface`)).interface; }

Other Tools

Related Tools

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/integromat/make-mcp-server'

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