Why n8n's license is a problem for agencies
n8n switched to the Sustainable Use License (SUL) in 2022 and tightened it in 2025. The core clause prohibits using n8n to provide a commercial service to third parties without prior agreement from the vendor. For an agency, this covers virtually every use case: automating a client's workflows, reselling access to a shared instance, or billing setup hours on an instance hosted on a client's behalf. The SUL explicitly states: "You may not make the functionality of the Software available to third parties as a service." This wording covers multi-client internal SaaS scenarios, white-label dashboards, and integrations delivered under your own brand. The practical consequence: a serious agency must either negotiate a commercial license with n8n (variable cost and timelines) or find a truly open-source alternative. Activepieces targets exactly this gap: same visual flow builder paradigm, MIT license with no commercial use restriction, and a connector ecosystem covering common agency integrations.
What Activepieces' MIT license changes in practice
- Unrestricted client use — deploy Activepieces for each of your clients, bill your configuration hours, resell access: no clause prohibits it.
- Fork and customise — modify the source code, rebrand the interface, embed Activepieces in your own offering, without asking permission.
- No commercial license to negotiate — zero license cost, zero administrative delay, zero risk of terms changing at renewal.
- Full auditability — your client can inspect the code processing their data; a selling point for regulated sectors (legal, healthcare, finance).
- Community contributions — MIT attracts more contributors than SUL; the pace of new connectors benefits directly.
- Data portability — exporting flows as standard JSON is unrestricted; migration between instances or to a fork stays possible at any time.
- Multi-cloud hosting — choose your datacenter, cloud provider, or private datacenter without notifying the vendor.
System requirements before deployment
Activepieces runs two main services: a Node.js server and a PostgreSQL database. For an agency instance serving up to five simultaneous clients, plan for at least 2 vCPU and 4 GB RAM — the same baseline as n8n, but Activepieces includes a sandbox engine for custom pieces (TypeScript executed in an isolated worker) that consumes extra memory at peak. In production with sandbox mode enabled, 8 GB RAM allows processing complex flows without memory pressure. For storage, plan 20 GB minimum for execution logs and attachments; a separate volume for PostgreSQL will simplify backups. Ports to open inbound: 80 and 443 for the reverse proxy, 5432 closed to the public (local database). Activepieces does not require Redis in basic configuration; Redis becomes useful only when enabling distributed mode (multiple workers). Verify that Docker Engine ≥ 24 and Docker Compose ≥ 2.20 are installed: docker --version and docker compose version.
Deploy Activepieces with Docker Compose
Create the working directory
Connect to your VPS and create a dedicated directory:
mkdir -p /opt/activepieces && cd /opt/activepiecesDownload the official Compose file
Fetch
docker-compose.ymlfrom the official repository:curl -fsSL https://raw.githubusercontent.com/activepieces/activepieces/main/docker-compose.yml -o docker-compose.ymlCreate the environment file
Generate an encryption key and set the essential variables:
cp .env.example .env 2>/dev/null || touch .env
Then edit.envwith at minimum:AP_ENCRYPTION_KEY=$(openssl rand -hex 16)AP_JWT_SECRET=$(openssl rand -hex 32)AP_FRONTEND_URL=https://automations.yourdomain.comAP_POSTGRES_PASSWORD=$(openssl rand -hex 24)Start the containers
Launch the stack in the background:
docker compose up -d
Verify both services arehealthy:docker compose psConfigure the Nginx reverse proxy
Create
/etc/nginx/sites-available/activepieceswith the following block (adaptserver_name):server { listen 443 ssl; server_name automations.yourdomain.com; location / { proxy_pass http://127.0.0.1:8080; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; } }
Enable and reload:ln -s /etc/nginx/sites-available/activepieces /etc/nginx/sites-enabled/ && nginx -t && systemctl reload nginxObtain a TLS certificate
With Certbot:
certbot --nginx -d automations.yourdomain.com --non-interactive --agree-tos -m [email protected]Create the first admin account
Open
https://automations.yourdomain.comin your browser. The first-run wizard prompts you to create the admin account. Enter an email address and a strong password (≥ 16 characters).Check the version and enable updates
Check the deployed version in Settings → About. To update:
docker compose pull && docker compose up -d
Schedule this command as a weekly cron job to stay on a patched version.
Connecting an AI agent via MCP
MCP (Model Context Protocol) support reached general availability in Activepieces in March 2025, with the Streamable HTTP protocol added in December 2025. It exposes each Activepieces flow as an MCP tool callable by any compatible client — Claude Desktop, the Anthropic API with tools, or a GPT-4o agent via OpenAI's tools interface. In practice, an Activepieces flow becomes a tool your agent can invoke by name: create-crm-contact, send-slack-alert, sync-airtable-row. To enable MCP on a Docker instance, add to your .env: AP_MCP_ENABLED=true. After restarting (docker compose up -d), Activepieces generates an MCP endpoint at https://automations.yourdomain.com/api/v1/mcp. In Claude Desktop, add this server to your MCP configuration file with the URL and an Activepieces service account API key. The agent can then list available flows and trigger one with structured parameters, with no manual webhook setup required. For GPT-4o, the same endpoint is compatible with the OpenAI API tools schema: define the URL and API key in your chat.completions.create call and the model can invoke your automations as native functions.
The connector question: 280 or 500?
Activepieces offers around 280 official connectors versus roughly 500 for n8n — a real gap, worth acknowledging honestly. In practice, most agencies rarely use more than thirty connectors on a given instance: CRM, Slack, inbound webhooks, email, Google Sheets, Airtable, Notion. For these use cases, the Activepieces catalogue is complete. When a connector is missing, the TypeScript custom pieces SDK lets you write one in a few hours: the structure is documented, the sandbox worker manages the lifecycle, and the custom piece is versioned like any other code. The real question is not 'how many in the catalogue' but 'is the connector I need available today' — and for everyday agency integrations, the answer is yes.
Activepieces vs n8n vs Make — agency comparison
Scroll the table
| Activepieces | n8n | Make | |
|---|---|---|---|
| License | MIT — free commercial use | Sustainable Use License — third-party use restricted | Proprietary SaaS — no self-hosting |
| Native MCP support | Yes (GA March 2025, Streamable HTTP Dec. 2025) | No (experimental third-party plugins) | No |
| Connector count | ~280 official connectors + custom pieces SDK | ~500 official connectors | ~1,500 connectors (SaaS only) |
| Self-hosting | Docker Compose, Kubernetes, Railway | Docker, npm, Kubernetes | Not available |
| Self-hosted pricing | Free (MIT) | Free (fair-code) then commercial license for third-party use | Business plan minimum monthly subscription (no self-hosting option) / month minimum |
| Visual editor | Yes, drag-and-drop canvas | Yes, drag-and-drop canvas | Yes, scenario canvas |
| Custom code execution | TypeScript in sandboxed worker | JavaScript/Python in code node | No (HTTP modules only) |
Backing up Activepieces' PostgreSQL database
All configuration (flows, credentials, execution logs) lives in PostgreSQL. A daily backup suffices for most agencies. Add this line to your crontab (crontab -e):0 3 * * * docker exec activepieces-postgres pg_dump -U activepieces activepieces | gzip > /opt/backups/activepieces-$(date +%Y%m%d).sql.gz
Test the restore at least once on a development instance: gunzip -c activepieces-20261001.sql.gz | docker exec -i activepieces-postgres psql -U activepieces activepieces. Keep at least seven rolling backups and transfer them off the VPS (S3, Backblaze, rsync to a secondary server).
Troubleshooting — common errors
Error: ENCRYPTION_KEY is not set — the AP_ENCRYPTION_KEY variable is missing or empty in your .env. Generate a value with openssl rand -hex 16 and restart the stack. Do not reuse the same key across distinct instances: encrypted credentials would become unreadable on the other instance.
Connection refused on port 8080 — the activepieces container started but is not yet listening. Check the logs: docker compose logs activepieces --tail=50. The most common cause is PostgreSQL not ready: Activepieces waits for the database at startup, but a hard restart can leave PostgreSQL taking longer to come back online. Simply restart: docker compose restart activepieces.
MCP endpoint returns 401 — the AI agent is sending either an expired API key or a key linked to an account without MCP access permission. In Activepieces, go to Settings → API Keys, regenerate the service account key, and verify the account has the OPERATOR or ADMIN role on the relevant project.
Flow execution stuck on sandbox step — the sandbox worker is waiting for CPU resources. Check load with docker stats: if the activepieces container stays at 100% CPU for more than thirty seconds, your VPS is undersized for the volume of concurrent flows. Upgrade to 4 vCPU or limit parallelism in Activepieces project settings (Settings → Project → Max parallel executions).
Next steps and further resources
Your Activepieces instance is running and connected to your AI agents. The natural next step is to organise your flows by client project and set up a versioning system (JSON export + Git repository). If you manage multiple clients on one instance, explore Activepieces Workspaces, which provide separation of flows, credentials, and logs per client. To go further on the topics covered in this article, see our companion guides: [Install Activepieces on a VPS](/blog/installer-activepieces-vps) for a ground-up installation guide, [Install n8n on a VPS](/blog/installer-n8n-vps) to evaluate both solutions side by side, [Zapier vs n8n: cost and migration](/blog/zapier-vs-n8n-cout-migration-2026) for the full ROI calculation, and [Deploy a self-hosted MCP AI server on VPS](/blog/mcp-serveur-ia-auto-heberge-vps) to go deeper into multi-agent architecture.