Announcing CIMD support for MCP Client registration
Learn more

Activepieces MCP vs Activepieces API for AI Agents

Activepieces, the open-source Zapier alternative, now runs an MCP server in every project and also exposes a REST API built for platform administration and embedded deployments. The two overlap on flows and runs. They differ on who the agent is acting as, which project it can reach, and what happens when you run your own instance. This guide compares what each path lets an agent do, the opposite identity models they carry, and how to run either across many customer projects in production.

TL;DR

  • Every Activepieces project can run its own MCP server at https://<your-instance>/mcp, switched on under Settings > MCP Server. It exposes 47 ap_* tools in seven categories that let an agent research pieces, build and edit flows step by step, test and publish them, inspect and retry runs, and run CRUD on tables. Separately, any flow that starts with the MCP piece's MCP Tool trigger becomes a tool that MCP clients can call.
  • The Activepieces REST API authenticates with a platform API key sent as Authorization: Bearer, and API keys exist only on the Platform and Enterprise editions. One key manages every project on the platform, and most calls take a projectId. It covers what MCP leaves out: projects, users, invitations, members, connections, global connections, variables, folders, templates, git sync, and project releases.
  • The two paths have opposite identity models. MCP uses per-user OAuth, and every operation stays inside the project the user authorized. The API key is an admin credential with no user attached and reach across every project. For a multi-tenant agent, that difference matters more than any tool count.
  • Use MCP when a person asks an agent to build, debug, or operate their own flows. Use the API, plus each flow's Catch Webhook URL, for provisioning tenants, deterministic run monitoring, and embedding Activepieces in your own product.
  • Scalekit's activepiecesmcp connector proxies the Activepieces MCP server with 44 tools and per-user OAuth 2.1 (registered through Dynamic Client Registration) stored in the token vault, so the MCP vs API decision doesn't change your auth infrastructure.

The decision your Activepieces agent forces first

Your agent needs to work with your users' automations: draft a flow from a sentence, explain why last night's run failed, retry it from the failed step, or switch off a flow that's spamming a Slack channel. Activepieces is the open-source Zapier alternative that keeps coming up in these conversations. Its Community Edition is MIT-licensed, it runs on Activepieces Cloud or on your own infrastructure, and it now ships an MCP server in every project. It also has a REST API built for platform administration and embedded deployments. The two overlap on flows and runs. They differ on who the agent is acting as, which project it can reach, and what happens when you run your own instance. Here's how to pick.

What Activepieces MCP and Activepieces API actually are

Activepieces MCP

Activepieces runs a Model Context Protocol (MCP) server per project. A project admin turns it on under Settings > MCP Server and copies the server URL, which has the form https://<your-instance>/mcp (or https://<your-instance>/<prefix>/mcp behind a reverse proxy). Authentication is OAuth: the client opens a browser on first use, and per the MCP server overview, "all operations are scoped to the authenticated project." The docs give setup steps for Claude.ai custom connectors, Claude Desktop, Cursor, and Windsurf. They don't carry a beta label or a launch date.

The tools reference lists 47 tools. The 21 Discovery tools are read-only and always on: ap_list_flows, ap_flow_structure, ap_research_pieces, ap_search_actions, ap_get_piece_props, ap_list_connections, ap_list_runs, ap_get_run, ap_find_records, and others. The other six categories can be switched on or off per project: Flow Management (ap_create_flow, ap_lock_and_publish, ap_change_flow_status, ap_delete_flow), Flow Building (ap_build_flow, ap_add_step, ap_update_step, ap_update_trigger), Router & Branching, Annotations, Tables, and Testing & Runs (ap_test_flow, ap_test_step, ap_retry_run, ap_run_action). The MCP tools are free, except ap_run_action, which costs one credit per call.

There is a second sense in which Activepieces "does MCP": flows as tools. The MCP piece has a trigger, MCP Tool, that "creates a tool that MCP clients can call to execute this flow," and an action, Reply to MCP Client, that returns the result. So a flow that reads a HubSpot deal, checks a Postgres table, and posts to Slack can become one callable tool.

Activepieces API

The REST API lives at https://cloud.activepieces.com/api on Cloud, or at <your-instance>/api when self-hosted. It uses one auth method: an API key generated in the Platform Dashboard and sent as Authorization: Bearer <key>. The docs say API keys are available "only in the Platform and Enterprise editions" at the moment. Endpoint groups cover projects, users, user invitations, project members, connections, global connections, variables, flows, flow runs, folders, templates, git repos, project releases, piece installation, and embedding origins. Every list endpoint uses seek pagination with limit and cursor.

What your agent can actually do

Capability
Activepieces MCP (project server)
Activepieces REST API
List and inspect flows
Yes
Yes
Build and edit flows
Yes
Limited: 26 operation types, no validation helpers
Publish, enable, disable
Yes
Yes
Find the right piece action or trigger
Yes
No
Test a flow or one step
Yes
No: Not in the published reference
List and read runs
Yes
Yes: Status, tag, date, and failed-step filters
Retry a failed run
Yes
No: Not in the published reference
Run one piece action without a flow
Yes
No
Tables and records
Yes: Full CRUD, up to 50 records per insert
No: Not in the published reference
Create connections (OAuth to Slack, Gmail)
Limited: Returns UI steps
Yes: Connections and global connections upsert
Projects, users, members, invitations
No: Bound to one project
Yes: Full CRUD at platform level
Git sync, releases, templates, variables
No
Yes
Start a flow from outside
Yes: Flows with the MCP Tool trigger
Yes: The flow's Catch Webhook URL

The MCP server is a flow builder's surface. It has everything a person needs to go from "when a Typeform comes in, add a row and ping sales" to a tested, published flow, without opening the canvas. The API is an operator's surface: it provisions projects, moves flows between environments with releases and git, and manages who belongs where. Neither is a superset. Retries, step tests, and tables are MCP-only in the published docs, and tenant administration is API-only.

What the MCP path makes easier

Building a flow over the raw API is a schema problem. Each step needs a piece name, a piece version, an action name, and an input object whose shape depends on the action. Many inputs are dropdowns whose options depend on the selected connection, such as a Slack channel list that only exists once you know which workspace. Getting one Slack step right means knowing the piece's property schema, resolving the channel ID, and wrapping it in an ADD_ACTION operation that targets the right parent step.

The MCP server does that work for the model. ap_search_actions maps "send a message to a channel" to the correct piece action. ap_get_piece_props returns the input schema. ap_resolve_property_chain resolves up to 10 dependent dropdowns in one call, ap_validate_step_config returns field-level errors before anything is saved, and ap_validate_flow checks structure before ap_lock_and_publish. Writing the schema is the hard part. Not the API call.

The tradeoff: Activepieces owns the tool list, and the project admin decides which categories are switched on. An agent that worked yesterday can lose Flow Building today because someone turned it off in settings.

The auth path each one puts you on

Activepieces MCP: per-user OAuth, one project per grant

The MCP server's OAuth flow ties every grant to one user and one project. Whatever that user can see in that project, the agent can see. Nothing outside it. Activepieces doesn't document scopes for the MCP grant, so the controls are the user's project role and the per-project tool category toggles. What the user can't do, the agent can't do.

Self-hosting changes the plumbing, not the model. The OAuth discovery documents live under /.well-known/oauth-*. If your instance sits behind a path prefix, set AP_FRONTEND_URL to the full public URL, and add a proxy rule that forwards host-root /.well-known/oauth-* paths for any MCP client that ignores the WWW-Authenticate header. Claude honors the header. Not every client does, and a missed rule shows up as a client that never reaches the consent screen.

If you embed Activepieces in your own product, there is a third option. Embeddable MCP lets your backend call generateMcpToken() for a 15-minute token scoped to the user's project, or run a full OAuth flow with PKCE: /authorize returns an authRequestId that expires after 10 minutes, /token issues a 15-minute access token and a refresh token, and /revoke ends it. Embedding is an Enterprise feature.

Activepieces API: one platform key, no user attached

The API key is a platform credential. It is created in the Platform Dashboard, it manages multiple projects, and it carries no user identity. GET /v1/flow-runs requires a projectId, and so does POST /v1/flows. That means the key can reach any project you pass it, and the only thing keeping an agent inside one customer's project is your code choosing the right ID.

The docs don't describe scopes, per-project keys, or expiry for API keys. They also don't offer OAuth for the REST API. For an agent, that adds up to three consequences:

  • No delegation. An action taken with the key is attributed to the platform, not to the person who asked the agent.
  • No least privilege. A key that can list runs can also delete projects and remove members.
  • Edition gate. On the Community Edition, there is no API key at all, so a self-hosted MIT deployment has the MCP path and webhooks, and no REST API automation.

Both paths still need per-user isolation

In a multi-tenant B2B agent, MCP gives you an OAuth grant per user, per project, and the direct API gives you a platform key per Activepieces platform. In neither case does the path itself solve storage, rotation, or revocation; those are infrastructure problems regardless of which path you choose.

Activepieces adds a specific edge. If your customers each run their own Activepieces (Cloud accounts or self-hosted instances), you hold one platform key per customer, each of which can do anything on that customer's platform. If they share one platform as projects on your instance, a single key reaches all of them. Either way, a leaked key is an admin compromise, not a user compromise.

Recommended reading: OAuth vs API keys for AI agents

What you own in production

On the MCP path

Activepieces hosts the server on Cloud, owns the tool schemas, and maps each tool call to internal operations. You own each user's OAuth grant and refresh token, and the project mapping: one grant reaches one project, and each project has its own MCP server, so a user who works in three projects needs three grants.

You also own the cost model. ap_run_action charges a credit per call, and any flow started by a tool call is billed as a normal flow run. An agent that "just tries the action to see what happens" in a loop spends the customer's credits.

Self-hosting adds one more item. ap_search_actions and ap_search_triggers need tool search: set AP_TOOL_SEARCH_ENABLED=true, provide an OpenAI key through AP_OPENAI_API_KEY or a platform AI provider, and run Postgres with pgvector. Without the key or pgvector, search falls back to keyword matching. The tools keep working, but they match more loosely, and each response reports the active mode. Cloud has semantic search enabled.

On the API path

You own schemas, pagination, retries, and the key lifecycle. Activepieces doesn't publish REST rate limits. Its limits page covers execution instead: a 10-minute flow run timeout, 1 GB worker memory, 30-day execution data retention, a 25 MB flow run log on Cloud (runs that exceed it end as LOG_SIZE_EXCEEDED), and 10 MB step files. Self-hosted instances override most of these through environment variables such as AP_FLOW_TIMEOUT_SECONDS and AP_MAX_FILE_SIZE_MB.

Starting flows from outside is HTTP, not REST. The Webhook piece gives a flow a unique Catch Webhook URL that accepts any HTTP method, and its Return Response action replies to the caller. Synchronous responses time out at 30 seconds, and payloads cap at 5 MB on Cloud and 25 MB by default when self-hosted. Each webhook URL is a capability with no user attached, so treat it like a secret.

Run monitoring is polling. GET /v1/flow-runs filters by status values such as FAILED, TIMEOUT, MEMORY_LIMIT_EXCEEDED, and QUOTA_EXCEEDED, by createdAfter, and by failedStepName. The published reference has no endpoint for subscribing to run events.

Schema drift and versioning

The REST API is at /v1 and changes with Activepieces releases, which ship often. On self-hosted instances, you choose when to upgrade. The MCP tool list changes with the server: the current reference has 47 tools, and Scalekit's connector currently exposes 44 of them. On Cloud, the MCP tool list your agent sees can change between runs. Self-hosted, it changes when you upgrade.

When to use MCP, when to use the API

Use Activepieces MCP when

  • An ops lead asks Claude or Cursor to "build a flow that adds every new Typeform response to the Leads table and posts high-value ones to #sales," and the agent uses ap_search_triggers, ap_build_flow, ap_test_flow, and ap_lock_and_publish while the user watches.
  • A user wants to know why a flow failed: ap_list_runs, ap_get_run, and ap_read_step_settings find the failed step, and ap_retry_run reruns it after a fix.
  • You want to give an agent a small, curated set of business actions as tools: build each as a flow with the MCP Tool trigger, so the agent calls "refund order" instead of five pieces.
  • You run the MIT Community Edition self-hosted, where there are no API keys, and need an agent that can still operate flows per user.

Use the Activepieces API when

  • You embed Activepieces in your SaaS and an agent provisions a project, members, and connections for every new customer during onboarding.
  • A headless monitor runs every 15 minutes, queries GET /v1/flow-runs with status=FAILED across customer projects, and opens tickets, with no person in the loop.
  • The workflow is deterministic: promote flows from staging to production through project releases or git sync, never through a model.
  • Your system needs to start a specific flow on an event from your backend, which is a POST to that flow's Catch Webhook URL with a 30-second synchronous budget.

The credential problem that exists on both paths

Both paths hand you a credential. Neither hands you a vault. A multi-tenant agent serving 60 customer teams, each with 5 users working in 2 projects, is 600 Activepieces OAuth grants on the MCP path. Each is bound to one user and one project, must be refreshed before expiry, stored encrypted, kept out of logs and LLM context, and removed when the user leaves. On the API path, the same 60 customers are 60 platform keys with no expiry and no scope, or one key for everyone if they share your instance.

The token type differs. The problem doesn't. And the tempting shortcut is worse here than with most tools. One platform API key behind your agent means every user's request runs as the platform, every project is in reach, and a prompt injection that convinces the model to call DELETE on a project has the authority to do it. Shared credentials are a single-user solution. They do not survive a second user.

Scalekit's activepiecesmcp connector handles the OAuth 2.1 flow, Dynamic Client Registration, token storage, and refresh for the MCP path, and a Scalekit custom connector can hold API keys in the token vault for the API path, 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 an Activepieces agent with Scalekit

Scalekit's activepiecesmcp connector is an MCP-path connector. It proxies the Activepieces MCP server and authenticates with OAuth 2.1 using Dynamic Client Registration, so there is no OAuth app to register with Activepieces first. It exposes 44 tools, all named activepiecesmcp_ap_*, covering discovery, flow management and building, branching, notes, tables, and testing and runs. Three tools from Activepieces' current reference are not in the connector's list: ap_list_folders, ap_move_flow_to_folder, and ap_set_project_context. Each connected account works in the project its user authorized.

Prerequisites and the connection name

Create an Activepieces MCP connection in AgentKit > Connections in the Scalekit dashboard. 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. In each Activepieces project your users will connect, a project admin must turn on the MCP server and enable the tool categories your agent needs.

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 is not ACTIVE, get_authorization_link returns the Activepieces OAuth link. The user signs in to Activepieces and approves 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 = "activepiecesmcp" # 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 Activepieces:", link.link) input("Press Enter after approving access in Activepieces...") account = actions.get_or_create_connected_account( connection_name=CONNECTION_NAME, identifier=identifier, ) if account.connected_account.status != "ACTIVE": raise RuntimeError(f"Activepieces is {account.connected_account.status}, not ACTIVE")

Retrieve the Activepieces 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 a run-debugging agent needs. Loading all 44 would put activepiecesmcp_ap_delete_flow, activepiecesmcp_ap_delete_table, and activepiecesmcp_ap_build_flow in front of a model whose job is to explain failures. Those tools never reach this model, so it cannot delete a flow while trying to fix one.

tools = actions.langchain.get_tools( identifier=identifier, connection_names=[CONNECTION_NAME], tool_names=[ "activepiecesmcp_ap_list_flows", "activepiecesmcp_ap_list_runs", "activepiecesmcp_ap_get_run", "activepiecesmcp_ap_flow_structure", "activepiecesmcp_ap_read_step_settings", "activepiecesmcp_ap_retry_run", ], 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 Activepieces grant and sees only the project they authorized.

from langchain_core.messages import HumanMessage, SystemMessage, ToolMessage from langchain_openai import ChatOpenAI llm = ChatOpenAI(model="gpt-4o").bind_tools(tools) messages = [ SystemMessage( "You debug Activepieces flows. Use activepiecesmcp_ap_list_runs to find failed " "runs, activepiecesmcp_ap_get_run to read the error and the failed step, and " "activepiecesmcp_ap_read_step_settings to inspect that step's configuration. " "Only retry a run when the user explicitly asks you to." ), HumanMessage( "The 'New Typeform lead to HubSpot' flow failed overnight. Find the failed runs, " "tell me which step broke and why, and suggest the fix." ), ] 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 pulls the 20 most recent failed runs in the user's project.

failed = actions.execute_tool( tool_name="activepiecesmcp_ap_list_runs", tool_input={"status": "FAILED", "limit": 20}, connection_name=CONNECTION_NAME, identifier=identifier, ) print(failed.execution_id, failed.data)

A kill switch is the other common pipeline: when a downstream system reports a flood, disable the flow that's causing it. activepiecesmcp_ap_change_flow_status takes a flowId and a status. The flow ID comes from your config for this customer, resolved once with activepiecesmcp_ap_list_flows.

flow_id = os.environ["ACTIVEPIECES_ALERTS_FLOW_ID"] disabled = actions.execute_tool( tool_name="activepiecesmcp_ap_change_flow_status", tool_input={"flowId": flow_id, "status": "DISABLED"}, connection_name=CONNECTION_NAME, identifier=identifier, ) print(disabled.execution_id, disabled.data)

Reaching the Activepieces API through the same vault

Scalekit doesn't ship a prebuilt connector for the Activepieces REST API. To call it, create a custom connector with API key auth, a bearer header, and proxy_url set to https://cloud.activepieces.com/api (or your instance's /api root). Each customer's admin enters their platform key once through Scalekit's hosted connect page, and it is stored as that customer's connected account credential. Then make proxied calls with actions.request():

AP_API_CONNECTION = "activepieces-api" # must match your custom connection name in AgentKit > Connections customer_id = "customer_acme" # one connected account per customer platform key runs = actions.request( connection_name=AP_API_CONNECTION, identifier=customer_id, method="GET", path="/v1/flow-runs", # relative to the connector's proxy_url query_params={ "projectId": os.environ["ACME_ACTIVEPIECES_PROJECT_ID"], "status": "FAILED", "limit": "50", }, ) print(runs.status_code, runs.json())

The key never reaches your agent, but it is still a platform-wide credential. Keep projectId in your own config per customer, never in model output.

If your customers run self-hosted Activepieces, their MCP server URL is on their own domain. Treat each instance as its own integration and register it as a custom MCP connector, following the same bring-your-own-connector path.

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

The activepiecesmcp connector has 44 tools, and seven of them can delete something: flows, steps, branches, tables, records, fields, and notes. At roughly 200 tokens each, the full set is about 8,800 tokens of tool definitions before the agent does any work, and a model choosing between activepiecesmcp_ap_build_flow, activepiecesmcp_ap_create_flow, and activepiecesmcp_ap_add_step picks wrong more often than one choosing among three read tools. A Scalekit virtual MCP server declares exactly which tools an agent role can see across connections, 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="activepieces-run-triage", description="Reads failed Activepieces runs and posts a triage summary to Slack", connection_tool_mappings=[ McpConfigConnectionToolMapping( connection_name="activepiecesmcp", tools=[ "activepiecesmcp_ap_list_runs", "activepiecesmcp_ap_get_run", "activepiecesmcp_ap_flow_structure", ], ), 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 44, and none of them can delete anything. The endpoint is static; the identity is per-user. Activepieces' own per-project toggles work at category level: Discovery is always on, and turning on Testing & Runs for ap_retry_run also turns on ap_run_action. The virtual MCP server draws the line at the individual tool.

Observability: every Activepieces 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. When a customer asks which agent run disabled their invoice flow at 2:14 a.m., the answer is a lookup, not an investigation. Activepieces sees the change arrive under that user's grant, and your execution log shows which agent run and which prompt led there.

A platform API key breaks that chain on the Activepieces side. Every change made with it belongs to the platform, not a person, and audit logs are a paid admin control in Activepieces to begin with. The agent's own execution log becomes the only record of who asked for what.

Recommended reading: audit trails for agent auth

Which one to build against

If your agent helps people build, debug, and operate their own automations, from Claude, Cursor, or your product's assistant, use Activepieces MCP. It has the schema-heavy tools (piece search, property resolution, validation, step tests, retries) that would take months to rebuild on the REST API, and every grant is bounded by one user and one project. If your agent provisions tenants, moves flows between environments, or monitors runs across customers with no person in the loop, use the API, and accept that you are holding an admin key on an edition that has one.

Many production agents need both: MCP for the user-facing work, the API for the platform plumbing. Either way, you hold one credential per user or per customer platform, and that's what needs production-grade infrastructure.

FAQs

Does Activepieces have an MCP server?

Yes, one per project. A project admin turns it on under Settings > MCP Server, and the URL has the form https://<your-instance>/mcp. Authentication is OAuth in the browser, and every operation is scoped to the project the user authorized. It exposes 47 tools in seven categories, with the 21 discovery tools always on and the other categories switchable per project. Separately, any flow that starts with the MCP Tool trigger becomes a tool MCP clients can call.

What can the Activepieces REST API do that MCP cannot?

Platform administration: projects, users, invitations, members, connections, global connections, variables, folders, templates, git sync, and project releases. It is the path for provisioning tenants and moving flows between environments. It authenticates with a platform API key sent as a Bearer token, available only on the Platform and Enterprise editions, that manages every project and carries no user identity.

Why is the Activepieces API key a risk for multi-tenant agents?

Because it is an admin credential with reach across every project you pass it. There is no delegation, so actions are attributed to the platform rather than the person who asked; there is no least privilege, so a key that lists runs can also delete projects; and there is no scope or expiry documented. A leaked key is an admin compromise, not a user compromise.

Can an agent use Activepieces on the Community Edition?

Yes, through MCP and webhooks. The MIT-licensed Community Edition has no API keys, so there is no REST API automation there, but each project's MCP server still works with per-user OAuth, and flows can be started from outside through their Catch Webhook URL or exposed as tools with the MCP Tool trigger.

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

When you embed Activepieces in your SaaS and provision a project, members, and connections per customer, when a headless monitor queries failed runs across customer projects every few minutes, when flows are promoted between environments through releases or git sync, or when your backend must start a specific flow on an event. Building, debugging, testing, and retrying flows belong on MCP.

How does Scalekit connect an AI agent to Activepieces?

The activepiecesmcp connector proxies the Activepieces MCP server with 44 tools and per-user OAuth 2.1 registered through Dynamic Client Registration, so no app registration is needed. Each user authorizes once, Scalekit stores and refreshes the tokens, a virtual MCP server draws the line at the individual tool rather than the category, and every execution returns an execution_id attributed to that user. The REST API's platform key can live in a custom connector alongside it.

Build your Activepieces agent with Scalekit

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

No items found.
On this page
Share this article
Scalekit
Tool-level scope

Acquire enterprise customers with
‍zero upfront cost.

Every feature unlocked. No hidden fees.