The Problem

Activepieces replaces closed SaaS automation tools like Zapier with a self-hosted platform where every integration ("piece") is an open-source TypeScript package. Teams get the same visual workflow builder without sending data through a third party, and the pieces double as MCP servers for LLM tools like Claude Desktop and Cursor.

What This Does

This is a fork of activepieces/activepieces (23,993 stars upstream) containing roughly 24,000 files across five self-contained projects under packages/, tools/, deploy/, .agents/, and benchmark/. The core is a TypeScript monorepo (11,573 .ts files) implementing a visual automation builder, a type-safe piece framework, and an execution engine. The .agents/ directory holds MCP server definitions and skills for building pieces, auditing logs, and triaging security advisories.

How It Is Wired

Entry points sit in packages/core/execution/src/index.ts and packages/cli/src/index.ts. The execution engine routes runs through packages/core/execution/src/lib/engine/index.ts, which handles loops, branches, and retries. Agent orchestration lives in packages/core/execution/src/lib/agents/index.ts. The deploy/pulumi/index.ts handles infrastructure-as-code deployment.

The wiring is a monorepo with a central package registry—each piece is an npm package with its own package.json under packages/pieces/community/. The hub is the execution engine, which loads these packages at runtime. The widest blast radius is the engine's run loop: every workflow passes through it, so a change there affects all 200+ pieces. The graph shows no obvious cycles, but the sheer size (23,602 files in packages/) makes cross-package refactors slow.

How To Use It

Setup: Clone and install using npm (lockfile present):

git clone https://github.com/moses-y/activepieces
cd activepieces
npm install

Configuration: Copy .env.example to .env.dev and set AP_WORKER_TOKEN and other credentials. The committed .env.dev currently holds generated values—rotate them before use.

Running it: Start the server via the standard Activepieces command:

npm run start

The README documents deployment options via Docker (Dockerfile present) and Pulumi (deploy/pulumi/index.ts).

Real-World Use

A support team builds a workflow: a Slack trigger fires on a new message, the AI agent piece classifies intent, and a human-approval piece pauses execution before sending a response. The same piece becomes an MCP server for a Cursor session, letting the LLM call it directly. This is the core value—one piece definition serves both the visual builder and MCP clients.

Code Health & Issues

Static analysis found 11 issues (1 critical, 3 high):

  • Critical — Committed credentials in .env.dev with AP_WORKER_TOKEN holding generated values. Rotate and untrack.
  • High.env.dev is tracked despite .gitignore excluding it; the ignore rule is correct, so this is an accident.
  • High — Third-party GitHub Actions unpinned (oven-sh/setup-bun@v2, docker/login-action@v4). Pin to commit SHAs.
  • High — Committed .env files in packages/server/api/.env.tests and packages/tests-e2e/.env.e2e.
  • Medium — No least-privilege permissions on GITHUB_TOKEN in CI, no Dependabot, mutable Docker base image, no dependency vulnerability scan, no pre-commit secret gate, and a 13.5MB GIF in docs/resources/.

Tests exist (635 files) and CI runs via GitHub Actions.

The Bottom Line

The core platform is solid and well-tested, with the MCP-server-as-piece design being genuinely useful. The committed credentials are a real risk that needs immediate rotation. Teams wanting a self-hosted, extensible automation platform with AI agent support should use this—but fix the secret hygiene first.