Announcing CIMD support for MCP Client registration
Learn more

Make MCP vs Make API for AI Agents

Shri Mithran
Director of Marketing

Make hosts an MCP server that turns on-demand scenarios into typed tools, and it has a REST API that runs the same scenarios, manages the same data stores, and has a long track record. Both reach the same automations. They differ on timeouts, zones, plan gating, and who holds which credential. This guide compares what each path lets an agent do, the OAuth and API token paths each one puts you on, and how to run either across many customer organizations in production.

TL;DR

  • Make runs a hosted, stateless Streamable HTTP MCP server. With OAuth, every client uses one URL, https://mcp.make.com/v2. With an API key, the URL is zone-specific: https://<MAKE_ZONE>/mcp/v2. Any scenario that is active, uses on-demand scheduling, and has defined inputs and outputs becomes a typed tool, on every plan. Management tools for scenarios, executions, hooks, data stores, connections, teams, and organizations need a paid plan.
  • The Make API v2 is zone-specific (https://eu1.make.com/api/v2, eu2, us1, us2, plus Celonis zones). It authenticates with API tokens (Authorization: Token <token>) or OAuth 2.0 clients that Make reviews within 10 business days. Rate limits run from 60 requests per minute on Core to 1,000 on Enterprise, and POST /scenarios/{scenarioId}/run is exempt from them.
  • MCP scenario runs time out at 25 seconds over OAuth and 40 seconds with an API key. The scenario keeps running for up to 40 minutes, and the client gets back an executionId to poll. Long-running automations want the API's callbackUrl instead.
  • In a multi-tenant B2B agent, neither path removes per-user credential isolation. A Make API token or MCP grant runs every on-demand scenario the user can reach, across every organization they belong to, unless you narrow it.
  • Scalekit's makemcp connector proxies Make's own MCP server with 163 tools (79 read, 27 write, 57 destructive) and per-user OAuth stored in the token vault, so the MCP vs API decision doesn't change your auth infrastructure.

The decision your Make agent forces first

Your agent needs to act through Make. A customer's revenue team has spent three years building scenarios that sync HubSpot to NetSuite, enrich leads, and post to Slack, and your agent should call those scenarios instead of rebuilding them. Make hosts an MCP server that turns those scenarios into tools, and Claude and ChatGPT already connect to it. Make also has a REST API that runs the same scenarios, manages the same data stores, and has a long track record. Both reach the same automations. They differ on timeouts, zones, plan gating, and who holds which credential. Here's how to pick.

What Make MCP and Make API actually are

Make MCP

Make's MCP server is a cloud-hosted Model Context Protocol (MCP) server that Make operates, using stateless Streamable HTTP. Make announced it on May 16, 2025 as a gateway that "turns your Make scenarios into tools that AI agents can call upon." It replaced the earlier local @makehq/mcp-server npm package, which is now labeled legacy. Make's docs carry no beta label for the hosted server.

Two kinds of tools come out of it. Scenario run tools are generated from your own scenarios: a scenario becomes a tool when it is active, uses on-demand scheduling, and has scenario inputs and outputs defined. Those inputs become the tool's parameters, and the scenario description becomes the tool's description. Management tools cover scenarios, executions, hooks, data stores, data structures, connections, keys, folders, teams, organizations, and custom apps. Scenario run tools work on every plan; management tools need a paid plan.

Clients connect two ways. OAuth uses the universal https://mcp.make.com/v2 URL and a consent screen where the user picks an organization and scopes. An API key (Make calls it an MCP token) uses https://<MAKE_ZONE>/mcp/v2 with Authorization: Bearer <API_KEY>, or the key embedded in the path at https://<MAKE_ZONE>/mcp/u/<API_KEY>/v2. For curated sets of scenarios, Make also offers MCP toolboxes: dedicated servers with their own keys, where each tool can be marked Read only or Read & write.

Make API

The Make API is REST under /api/v2 on the zone that hosts the organization: https://eu1.make.com/api/v2, eu2, us1, us2, and the Celonis EU1 and US1 zones. It covers scenarios (run, create, update, start, stop, clone), blueprints, executions and logs, hooks (webhooks and mailhooks), data stores and their records, data structures, connections, keys, teams, organizations, templates, and custom apps. Make notes that most endpoints are reserved for paid plans.

Auth is an API token sent as Authorization: Token <token>, created in Profile > API access with explicit scopes, or an OAuth 2.0 client. OAuth uses global endpoints at https://www.make.com/oauth/v2/authorize and /oauth/v2/token, supports OpenID Connect, and requires PKCE for single-page and mobile apps. Clients aren't self-service. You submit a registration form and Make reviews it within 10 business days.

What your agent can actually do

Capability
Make MCP (mcp.make.com/v2)
Make API v2
Run an on-demand scenario with typed inputs
Yes: Each eligible scenario is its own tool
Yes
Wait for long-running scenarios
Limited: 25 s (OAuth) or 40 s (API key), then an execution ID to poll
Yes: Up to 40 s responsive, or async with a callback URL
List, read, and inspect scenarios
Yes
Yes
Create, update, activate scenarios
Yes
Yes
Execution history and results
Yes
Yes: Scenario logs endpoints
Data store records
Yes
Yes
Webhooks and mailhooks
Limited: No enable or disable tool
Yes: Full hook lifecycle
Ask an end user to authorize a connection
Yes: Returns an authorization URL
Limited: Connections endpoints exist, the guided request flow is MCP-only
Push events to your backend
No
Yes: Signed event subscriptions
Render results as chat widgets
Yes
No
Restrict access to specific scenarios
Yes: URL parameters; toolboxes
Limited: Scopes are per resource type, not per scenario
Works on the Free plan
Yes: Scenario run tools only
Limited: Most endpoints are paid-plan only

The two surfaces overlap almost completely on management, because Make's MCP management tools are a thin layer over the same API. Where they diverge is in what happens at the edges. MCP gives you typed scenario tools without writing a schema and a guided credential-request flow; the API gives you callbacks for long runs, event subscriptions, and complete hook control.

What the MCP path makes easier

The scenario-as-tool model is the reason Make MCP exists. A scenario named "Create NetSuite invoice" with inputs customer_id, amount, and currency shows up as a tool with those three parameters and the scenario's own description. On the API, your agent needs makemcp_scenarios_interface or its REST equivalent to read the input spec, then a schema you write, then POST /scenarios/{id}/run with a data object that matches it. Writing the schema is the hard part. Not the API call.

The tradeoff is that the scenario author now writes your tool descriptions. Make's docs tell you to write detailed scenario descriptions to improve results, which means a vague description in a customer's Make account becomes a wrong tool call in your agent. Tool names are also truncated to 56 characters by default (?maxToolNameLength accepts 32 to 160), so two scenarios with long, similar names can collide in ways the scenario builder never sees.

Scale matters too. Scalekit classifies 57 of the 163 tools as destructive, including makemcp_scenarios_delete, makemcp_organizations_delete, and makemcp_keys_delete. It also marks makemcp_scenarios_run as destructive, which is the honest classification: running a scenario can send email, charge a card, or delete records, and the tool schema can't tell you which.

The auth path each one puts you on

Make MCP: one URL for OAuth, zone URLs for keys

OAuth is the cleaner path. The user connects to https://mcp.make.com/v2, signs in to Make, picks an organization, and approves scopes. The "Run your scenarios" scope exposes every active on-demand scenario in that organization; management scopes cover the rest. Make's docs say "only OAuth allows you to restrict access to a specific Make organization," and the universal URL means your client never needs to know whether the customer is hosted in eu1 or us2. For narrower access, Make's guidance is to use a Teams plan or higher and assign the connecting user to specific teams.

The API key path trades consent for portability. The key needs the mcp:use scope for scenario tools, and by default it reaches every active on-demand scenario across every organization the user belongs to. You narrow that with one URL parameter: ?organizationId=, ?teamId=, or ?scenarioId[]= repeated for multiple scenarios. The levels are mutually exclusive, and they apply only to scenario tools; management tools ignore them. Make warns plainly that an API key is a secret. Putting it in the URL path, which is one of the two supported formats, puts it in every proxy log, client config file, and screenshot that captures that URL.

Make API: scoped tokens, reviewed OAuth clients, and zones

API tokens carry explicit scopes per resource: scenarios:read, scenarios:write, and scenarios:run; hooks:read and hooks:write; datastores:read and datastores:write; connections:read and connections:write; plus scopes for teams, organizations, keys, functions, templates, data structures, incomplete executions (dlqs:read), and custom apps (scope list). An agent that only reads execution history and runs scenarios needs scenarios:read and scenarios:run, not scenarios:write. Least privilege is available; it's just not the default when a user generates a token in a hurry.

Three details break naive implementations:

  • The base URL depends on the customer's zone. A token for an eu2 organization sent to us1.make.com fails. Store the zone with the credential, not in a global config.
  • OAuth clients need Make's approval. You can't register a client in an afternoon; the review takes up to 10 business days, and public clients must use PKCE.
  • Scopes are per resource type, not per scenario. scenarios:run on a token can run any active scenario the user can reach. If the agent should only call two scenarios, that restriction lives in your code.

Both paths still need per-user isolation

In a multi-tenant B2B agent, MCP's OAuth flow gives you a token per user, and direct API calls give you a credential per user. In neither case does the path itself solve storage, rotation, or revocation; those are infrastructure problems regardless of which path you choose.

Make adds one sharp edge. Make credentials reach downstream credentials. A Make user's token doesn't just read Make data; it runs scenarios that hold the customer's Salesforce, Stripe, and Gmail connections. The blast radius of one leaked Make token is every system those scenarios touch.

Recommended reading: OAuth vs API keys for AI agents

What you own in production

On the MCP path

Make hosts the server, generates scenario tools from scenario interfaces, and owns the management tool schemas. You own the OAuth grant per user, its storage and refresh, and the timeout behavior. Over OAuth, scenario run tools time out at 25 seconds and management tools at 30; with an API key, those limits are 40 and 60 seconds. A timed-out run keeps going for up to 40 minutes, and the response includes an executionId and scenarioId. Your agent then has to poll with makemcp_executions_get, which needs scenarios:read on the scenario's team. If the grant lacks that scope, the result is lost to the agent even though the scenario finished.

The tool list also changes when your customer changes Make. Activate a new on-demand scenario and a new tool appears; rename one and a tool name changes; switch a scenario to scheduled and its tool disappears. Your agent's tool surface is now partly owned by whoever builds scenarios in the customer's account.

On the API path

You own schemas, zones, retries, and the token lifecycle. Rate limits are per organization: 60 requests per minute on Core, 120 on Pro, 240 on Teams, and 1,000 on Enterprise (rate limiting). Exceeding them returns 429 with "Requests limit for organization exceeded, please try again later." The limit is shared by every token in the organization, so your agent competes with the customer's own scripts. You can read the current limit from license.apiLimit on GET /organizations/{organizationId}.

POST /scenarios/{scenarioId}/run is exempt from those request limits, but not from operations limits. If the organization or team is paused for exceeding its operations or data transfer allowance, the run returns 429 with code IM310. That's a billing state, not a transient error, and retrying with backoff just burns time. Route it to the customer.

For long runs, send responsive: false with a callbackUrl. Make posts the executionId and a statusUrl there when the run finishes. For change events, Make's event subscriptions deliver signed POST requests with a Webhook-Id that stays stable across retries, so dedupe on it. Hooks have their own rules: deleting a hook attached to a scenario requires confirmed=true, because the scenario stops working without it.

Schema drift and versioning

The API is versioned in the path (/api/v2), and changes arrive on Make's schedule. The MCP server has already moved once, from the local npm package to the hosted v2 endpoint, and its scenario tools change whenever a customer edits a scenario's inputs. On the API path, a change is something you adopt. On the MCP path, the tool list your agent sees can change between runs, for reasons nobody on your team controls.

When to use MCP, when to use the API

Use Make MCP when

  • An operations lead asks Claude or ChatGPT to "run the customer onboarding scenario for Acme with plan Pro" and the scenario's inputs already describe what it needs.
  • The agent is a Make co-pilot in Claude Code or Cursor that inspects failing executions with makemcp_executions_get-detail, reads blueprints, and proposes fixes while a human watches.
  • The workflow needs an end user to connect an app inside Make, which makemcp_credential-requests_create handles with a single authorization URL.
  • The customer is on Make's Free plan and only needs to expose a few on-demand scenarios, where scenario run tools are the only programmatic surface available.

Use the Make API when

  • The agent runs headless: a nightly job runs a reconciliation scenario with responsive: false and a callbackUrl, because it takes four minutes and the MCP path would time out at 25 seconds.
  • You need least privilege by scope, such as a token with scenarios:read and scenarios:run but no scenarios:write, across customers in eu1, eu2, us1, and us2.
  • The agent reacts to events: an event subscription tells your backend when a scenario changes, and the agent re-reads its interface before the next run.
  • The workflow is a deterministic pipeline that writes to data stores in bulk, where you control pg[limit] pagination and budget against 120 or 240 requests per minute.

The credential problem that exists on both paths

Both paths hand you a Make credential per user. Neither hands you a vault. A multi-tenant agent serving 60 customer organizations with 5 builders each holds 300 Make grants or tokens. Each is bound to one user, one zone, and one set of scopes. Each must be stored encrypted, kept out of logs and LLM context, refreshed if it's an OAuth grant, and revoked when a builder leaves or a customer churns.

The token type changes between paths; the problem doesn't. The tempting shortcut is one API token per customer, generated by an admin with every scope and pasted into the MCP URL path. That collapses 300 credentials into 60 secrets that run every scenario in every organization the admin belongs to, sit in plaintext in a URL, and carry the admin's access to every downstream system those scenarios connect to. Fewer secrets, a much larger blast radius per secret.

Scalekit's makemcp connector handles the OAuth flow against Make's MCP server, stores each user's tokens in the token vault, and refreshes them, so the MCP vs API decision doesn't change your auth infrastructure. Your agent passes an identifier; credentials never touch the agent runtime or the LLM context.

Recommended reading: why a token vault matters for AI agent workflows

How to connect a Make agent with Scalekit

Scalekit's makemcp connector is a vendor MCP connector: it routes your agent's tool calls to Make's own hosted MCP server through Scalekit. It exposes 163 tools: 79 read, 27 write, and 57 destructive. It authenticates with OAuth 2.1. Each user signs in to Make once, and Scalekit can use its own managed OAuth client, so you don't need to wait on Make's OAuth client review to get started.

Prerequisites and the connection name

In the Scalekit dashboard, go to AgentKit > Connections and create a Make MCP connection. The name you give it is the connection_name your code passes, and the string must match the dashboard exactly. This is the most common integration error. Copy SCALEKIT_ENVIRONMENT_URL, SCALEKIT_CLIENT_ID, and SCALEKIT_CLIENT_SECRET from Developers > API Credentials into .env.

pip install scalekit-sdk-python python-dotenv langchain-openai

Authorize each user once

get_or_create_connected_account returns the user's connected account. If it isn't ACTIVE, get_authorization_link returns a Make OAuth link. The user signs in, picks the Make organization, and approves scopes once; Scalekit stores and refreshes the tokens.

import os from dotenv import load_dotenv from scalekit import ScalekitClient load_dotenv() scalekit_client = ScalekitClient( env_url=os.environ["SCALEKIT_ENVIRONMENT_URL"], client_id=os.environ["SCALEKIT_CLIENT_ID"], client_secret=os.environ["SCALEKIT_CLIENT_SECRET"], ) actions = scalekit_client.actions CONNECTION_NAME = "makemcp" # must match the connection name in AgentKit > Connections identifier = "user_123" # your app's stable ID for this user account = actions.get_or_create_connected_account( connection_name=CONNECTION_NAME, identifier=identifier, ) if account.connected_account.status != "ACTIVE": link = actions.get_authorization_link( connection_name=CONNECTION_NAME, identifier=identifier, ) print("Authorize Make:", link.link) input("Press Enter after approving access in Make...") account = actions.get_or_create_connected_account( connection_name=CONNECTION_NAME, identifier=identifier, ) if account.connected_account.status != "ACTIVE": raise RuntimeError(f"Make is {account.connected_account.status}, not ACTIVE")

Retrieve the Make tools this user can call

This is not a catalog load. The agent asks for the tools this user's connected account is authorized to call, then narrows them to the six an operations agent needs. Loading all 163 would put makemcp_scenarios_delete, makemcp_organizations_delete, and the custom-app editing tools in front of a model whose job is to run one scenario and report on it. Those tools never reach the model, so it can't delete a scenario while trying to fix one.

tools = actions.langchain.get_tools( identifier=identifier, connection_names=[CONNECTION_NAME], tool_names=[ "makemcp_organizations_list", "makemcp_teams_list", "makemcp_scenarios_list", "makemcp_scenarios_interface", "makemcp_scenarios_run", "makemcp_executions_get", ], page_size=100, ) tool_map = {t.name: t for t in tools} print(sorted(tool_map))

Run the agent loop

The loop runs until the model stops requesting tools. Every call executes with this user's Make grant, in the organization they selected at consent, and sees only the teams they belong to.

from langchain_core.messages import HumanMessage, SystemMessage, ToolMessage from langchain_openai import ChatOpenAI llm = ChatOpenAI(model="gpt-4o").bind_tools(tools) messages = [ SystemMessage( "You operate Make scenarios. Use makemcp_organizations_list and makemcp_teams_list " "to find the team, makemcp_scenarios_list to find the scenario by name, and " "makemcp_scenarios_interface to read its inputs before running it. Run a scenario " "only when the user asks. If makemcp_scenarios_run returns an executionId without " "a result, check it once with makemcp_executions_get and report the status." ), HumanMessage( "In the Revenue Ops team, run the 'Create NetSuite invoice' scenario for " "customer_id ACME-0042, amount 1800, currency USD, and tell me whether it succeeded." ), ] while True: response = llm.invoke(messages) messages.append(response) if not response.tool_calls: print(response.content) break for tc in response.tool_calls: tool = tool_map.get(tc["name"]) if tool: result = tool.invoke(tc["args"]) else: result = f"Unknown tool: {tc['name']}" messages.append(ToolMessage(content=str(result), tool_call_id=tc["id"]))

Deterministic calls with execute_tool

For pipelines, skip the model. execute_tool runs one tool with a fixed input and returns data plus an execution_id you can log. This job runs a known scenario with fixed inputs, then reads the Make execution it produced. The scenario ID comes from your app's config for this customer, resolved once with makemcp_scenarios_list.

scenario_id = int(os.environ["MAKE_INVOICE_SCENARIO_ID"]) run = actions.execute_tool( tool_name="makemcp_scenarios_run", tool_input={ "scenarioId": scenario_id, "data": {"customer_id": "ACME-0042", "amount": 1800, "currency": "USD"}, "responsive": True, }, connection_name=CONNECTION_NAME, identifier=identifier, ) print(run.execution_id, run.data) # Store the Make executionId returned above, then read the final status make_execution_id = os.environ["MAKE_LAST_EXECUTION_ID"] execution = actions.execute_tool( tool_name="makemcp_executions_get", tool_input={"scenarioId": scenario_id, "executionId": make_execution_id}, connection_name=CONNECTION_NAME, identifier=identifier, ) print(execution.execution_id, execution.data)

Reading shared state works the same way. Many Make accounts keep lookup tables, such as a customer-to-region map, in data stores, and makemcp_data-store-records_list takes a dataStoreId and an optional limit:

records = actions.execute_tool( tool_name="makemcp_data-store-records_list", tool_input={"dataStoreId": int(os.environ["MAKE_CUSTOMER_MAP_STORE_ID"]), "limit": 100}, connection_name=CONNECTION_NAME, identifier=identifier, ) print(records.execution_id, records.data)

Two IDs show up here, and they're different. execution_id on the response is Scalekit's record of the tool call. The executionId inside data is Make's record of the scenario run. Log both.

Reaching the Make REST API through the same vault

Scalekit doesn't ship a prebuilt connector for the Make REST API. If you need callbackUrl runs, hook enable and disable, or event subscriptions, create a custom connector with API_KEY auth, a zone field that the proxy_url uses, and an auth_field_mutations rule that adds the Token prefix Make expects:

from scalekit.actions.types import CreateCustomProviderRequest provider = scalekit_client.actions.providers.create_custom_provider( request=CreateCustomProviderRequest( display_name="Make API", description="Make REST API v2 with a per-user API token", auth_patterns=[ { "type": "API_KEY", "display_name": "Make API token", "description": "Token from Profile > API access in Make", "fields": [ { "field_name": "zone", "label": "Make zone", "input_type": "text", "hint": "eu1.make.com, eu2.make.com, us1.make.com, or us2.make.com", "required": True, }, { "field_name": "api_key", "label": "API token", "input_type": "password", "hint": "Grant only scenarios:read and scenarios:run unless the agent needs more", "required": True, }, ], "auth_field_mutations": {"api_key": {"prefix": "Token "}}, }, ], # {{zone}} is Scalekit template syntax, filled per user from the "zone" field above proxy_url="https://{{zone}}/api/v2", proxy_enabled=True, ), ) print(provider)

Create a connection for it in AgentKit > Connections. Each user enters their zone and token once on the Scalekit-hosted page from get_authorization_link. If your product already collects Make tokens in its own settings page, write them from your backend instead, and make proxied calls with actions.request():

MAKE_API_CONNECTION = "make-api" # must match your custom connection name in AgentKit > Connections def connect_make_api_user(identifier: str, zone: str, api_token: str): response = actions.upsert_connected_account( connection_name=MAKE_API_CONNECTION, identifier=identifier, authorization_details={"static_auth": {"zone": zone, "api_key": api_token}}, ) if response.connected_account.status != "ACTIVE": raise RuntimeError(f"Make API is {response.connected_account.status}, not ACTIVE") return response.connected_account connect_make_api_user("user_123", "eu2.make.com", os.environ["MAKE_API_TOKEN_FOR_USER_123"]) run = actions.request( connection_name=MAKE_API_CONNECTION, identifier="user_123", method="POST", path=f"/scenarios/{os.environ['MAKE_RECONCILE_SCENARIO_ID']}/run", # relative to proxy_url body={ "data": {"period": "2026-10"}, "responsive": False, "callbackUrl": os.environ["MAKE_CALLBACK_URL"], }, ) print(run.status_code, run.json())

The zone lives on the connected account, next to the token, so the same code reaches a customer in eu2 and another in us1.

Multi-tool, multi-tenant Make agents on a virtual MCP server

The makemcp connector has 163 tools. At roughly 200 tokens each, that's about 32,000 tokens of tool definitions before the agent does any work, and a model choosing among makemcp_scenarios_get, makemcp_scenarios_interface, makemcp_show_scenarios_list, and makemcp_scenarios_list picks wrong more often than one choosing among two. Overreach is the bigger risk: 57 of those tools are destructive, and an agent that only reports on failed runs has no reason to hold makemcp_scenarios_delete. A Scalekit virtual MCP server declares exactly which tools an agent role can see, and session tokens keep each run bound to one user's connected accounts. Docs: set up a virtual MCP server.

Create the server once per agent role

from scalekit.actions.models.mcp_config import McpConfigConnectionToolMapping vmcp = actions.mcp.create_config( name="make-failed-run-reporter", description="Finds failed Make scenario executions and posts a summary to Slack", connection_tool_mappings=[ McpConfigConnectionToolMapping( connection_name="makemcp", tools=[ "makemcp_scenarios_list", "makemcp_executions_list", "makemcp_executions_get-detail", ], ), McpConfigConnectionToolMapping( connection_name="slack", tools=["slack_send_message"], ), ], ) print(vmcp.config.id, vmcp.config.mcp_server_url)

Mint a session token per user, per run

One server definition serves every user. Before each run, check that the user's accounts are active and mint a short-lived session token scoped to them. Any MCP client that speaks Streamable HTTP can connect; this example uses langchain-mcp-adapters (pip install langchain-mcp-adapters) and passes the token as a Bearer header.

import asyncio from datetime import timedelta from langchain_mcp_adapters.client import MultiServerMCPClient config_id = vmcp.config.id mcp_server_url = vmcp.config.mcp_server_url user_id = "user_123" accounts = actions.mcp.list_mcp_connected_accounts( config_id=config_id, identifier=user_id, include_auth_link=True, ) not_ready = [ a for a in accounts.connected_accounts if str(a.connected_account_status).upper() != "ACTIVE" ] for a in not_ready: print(f"{a.connection_name} is {a.connected_account_status}: {a.authentication_link}") if not_ready: raise RuntimeError("Connect the accounts above before starting this run") session_token = actions.mcp.create_session_token( mcp_config_id=config_id, identifier=user_id, expiry=timedelta(minutes=30), ).token async def load_tools(): client = MultiServerMCPClient( { "scalekit": { "transport": "streamable_http", "url": mcp_server_url, "headers": {"Authorization": f"Bearer {session_token}"}, } } ) return await client.get_tools() mcp_tools = asyncio.run(load_tools()) print([t.name for t in mcp_tools])

The agent sees four tools instead of 163 Make tools plus everything Slack exposes. The endpoint is static; the identity is per-user. Unlike a Make API key in a URL path, the session token expires in 30 minutes and carries no Make credential at all; Scalekit resolves the user's Make grant at call time.

Observability: every Make action tied to a user

Every execute_tool call returns an execution_id, and every execution is attributed to a connected account, which maps to one of your users and one customer. Make records its own side: each scenario run has an executionId, visible in the scenario's history. Logged together, the two answer the question customers actually ask: which agent run, for which user, triggered the scenario that sent 400 invoices.

A shared credential breaks that. If every user's agent runs on one admin's API token, Make attributes every run and every edit to that admin, every agent can reach every scenario the admin can, and your side can only prove that the shared token did it. Shared credentials are a single-user solution. They do not survive a second user.

Recommended reading: audit trails for agent auth

Which one to build against

If your agent is an assistant that runs a customer's existing on-demand scenarios, inspects executions, and helps builders debug while a human watches, Make's hosted MCP server is a good fit: scenarios become typed tools with no schema work, OAuth hides the zone, and scenario tools work even on the Free plan. If your agent runs unattended, waits on scenarios longer than 25 seconds, reacts to events, or needs per-scope least privilege across customers in several zones, build against the Make API and treat the scenario as a function you call with callbackUrl. Either way, you hold one Make credential per user that can run automations reaching every downstream system the customer has connected, and that's what needs production-grade infrastructure.

FAQs

Does Make have an official MCP server?

Yes. Make runs a hosted, stateless Streamable HTTP MCP server. With OAuth every client uses one URL, https://mcp.make.com/v2, and the user picks an organization and scopes at consent. With an API key the URL is zone-specific, https://<MAKE_ZONE>/mcp/v2. Any active scenario with on-demand scheduling and defined inputs and outputs becomes a typed tool on every plan; management tools need a paid plan.

Why do Make MCP scenario runs time out?

Scenario run tools time out at 25 seconds over OAuth and 40 seconds with an API key, and management tools at 30 and 60. The scenario keeps running for up to 40 minutes, and the client gets back an executionId to poll. Long-running automations belong on the API, where a run can be sent with responsive false and a callbackUrl that Make posts to when it finishes.

How does Make API authentication work?

With API tokens sent as Authorization: Token, created under Profile > API access with explicit scopes such as scenarios:read, scenarios:run, and scenarios:write, or with OAuth 2.0 clients that Make reviews within 10 business days. The base URL depends on the organization's zone, so a token for an eu2 organization fails against us1. Scopes are per resource type, not per scenario.

What are the Make API rate limits?

Per organization: 60 requests per minute on Core, 120 on Pro, 240 on Teams, and 1,000 on Enterprise, shared by every token in the organization. The scenario run endpoint is exempt from request limits but not from operations limits; a paused organization returns 429 with code IM310, which is a billing state rather than a transient error.

When should an agent use the Make API instead of MCP?

When it runs headless and a scenario takes longer than 25 seconds, when it needs per-scope least privilege such as read and run without write across customers in several zones, when it reacts to event subscriptions that report scenario changes, or when it writes to data stores in bulk and must budget against the organization's request limit.

How does Scalekit connect an AI agent to Make?

The makemcp connector routes tool calls to Make's hosted MCP server through Scalekit, exposing 163 tools with OAuth 2.1 and a managed OAuth client, so there is no wait for Make's client review. Each user signs in once and picks their organization, Scalekit stores and refreshes the tokens, a virtual MCP server narrows the tools per agent role, and every execution returns an execution_id next to Make's own executionId.

Build your Make agent with Scalekit

Browse the Scalekit Make MCP connector and the Make MCP connector docs with the full tool list. See Scalekit pricing, or talk to us.

No items found.
Agent
Auth Quickstart
On this page
Share this article
Scalekit
Run attribution

Acquire enterprise customers with
‍zero upfront cost.

Every feature unlocked. No hidden fees.