Last updated

Harbor vs Arcade

Updated

Arcade and Harbor are direct competitors when the problem is letting agents use connected SaaS tools. Arcade is positioned around an OAuth-first, user-delegated model with an SDK and a public tool catalogue, and ships an MCP-compatible surface for its catalogue. Harbor is positioned around workspace tenancy, a Cloudflare-native runtime substrate, a typed `hrbr exec` execution layer, workspace state, artifacts, jobs, apps, workflows, and run / trace audit as first-class product objects. Pick by whether your application is shaped around per-user delegated tool calls or workspace-tenanted execution.

Pick Harbor if
you want agents to compose connected tools and workspace state inside traced runs, not just receive a user-delegated tool catalogue.
Pick Arcade if
you want an OAuth-first, user-delegated tools-for-agents platform with an established public tool catalogue and SDK.

Harbor vs Arcade: the honest take

Arcade (arcade.dev) positions itself as "the MCP runtime for production AI agents," with secure agent authorization, a large catalogue of pre-built tools, and governance for enterprise deployments. The product spans Arcade Cloud and on-premises MCP servers, exposes an SDK and tool-pattern library, and is built around an OAuth-first, user-delegated model where the end user signs in and the agent acts under their identity. Confirm the current catalogue size and plan names on arcade.dev/tools and arcade.dev/pricing at edit time.

Where Harbor is the better fit

Harbor inverts the tenancy boundary. The workspace — not an end-user profile — owns connected plugins, OAuth state, and exec run history. Multiple agents inside one workspace can share the same connected Linear, GitHub, or Slack surface under workspace controls. Harbor also ships a typed `hrbr exec` execution layer in a Cloudflare codemode Worker isolate, so agents can submit one block of TypeScript instead of chaining individual MCP tool calls through the model context. Exec requests create queryable run and span records persisted to D1.

Where Arcade is the better fit

Arcade leads when your application is naturally per-user: the end user signs in, consents through Arcade, and the agent acts under their identity. The catalogue covers many common SaaS APIs with managed OAuth flows already wired up, and Arcade publishes an on-premises MCP deployment option for teams that need the runtime inside their own perimeter. If your team wants an MCP-runtime-shaped product with a public tool catalogue and a managed-or-self-host deployment choice, Arcade is a more direct fit than wrapping the same connectors behind Harbor plugins. Confirm the current catalogue size, license terms, and pricing on arcade.dev at edit time.

Side-by-side

Where a winner is indicated, it reflects Harbor's view of which fit is better for an AI-agent control-plane use case. Where neither cell has a marker, the choice depends on context.

Comparison of Harbor and Arcade on workspace-scoped MCP control plane attributes.
AttributeHarborArcade
Workspace tenancyHarbor: apps/api schema. Arcade: docs.arcade.devHarbor's pick: Harbor.Workspace is the top-level isolation primitiveevery plugin connection, OAuth grant, run, and trace is bound to a workspace_idNot publicly disclosedArcade is framed around user-delegated tool calls; verify the workspace / project / tenant primitive on docs.arcade.dev
MCP server hosting modelHarbor: CLAUDE.md "MCP Mental Model". Arcade: docs.arcade.devHarbor's pick: Harbor.Consumes third-party MCP servers; exposes a protected Harbor MCP endpointHarbor installs third-party MCP servers as plugins; mcp.tryharbor.ai/mcp advertises protected-resource metadata for first-party Harbor accessExposes MCP-compatible surfaces for its tool catalogueArcade ships an MCP-compatible surface for its tools; verify the exact set of supported modes on docs.arcade.dev
Integration / plugin countHarbor: registry catalog (build-time). Arcade: arcade.dev149 registry entries / 135 unique provider familiesderived at build time from packages/sdk/registry-catalog/data/v1/catalog.jsonHarbor's pick: competitor.Cite live count at arcade.devArcade publishes a public tool catalogue on arcade.dev; record the live count at edit time rather than asserting a stale number
Deployment modelHarbor: apps/api Cloudflare Workers deploy. Arcade: arcade.dev/pricingHarbor's pick: tie.Hosted onlymanaged tryharbor.ai; first-party self-host is on the Enterprise roadmapHarbor's pick: tie.Hosted SaaSarcade.dev is a managed cloud product; confirm any self-host offering on docs.arcade.dev
Runtime substrateHarbor: apps/api/wrangler.jsonc. Arcade: arcade.devCloudflare Workers + D1 + KV + R2 + Vectorize + Workflows + Durable Objectsapps/api on Workers; runs persisted to D1; credential state is KV-backedNot publicly disclosedArcade runs a managed cloud product; the underlying substrate is not stated on arcade.dev
OAuth modelHarbor: apps/api/src/plugins/oauth/. Arcade: docs.arcade.devWorkspace-scoped authorization above provider consentprovider OAuth state is scoped to the workspace; route and policy checks constrain which actions execution can takeUser-delegated OAuth (per public framing)Arcade is positioned as OAuth-first with user-delegated auth; confirm per-tool revocation semantics on docs.arcade.dev
OSS licenseHarbor: github.com/zonko-ai. Arcade: github.com/ArcadeAISDK public on github.com/zonko-ai/harbor-sdkcontrol plane closed sourcePublic GitHub org at github.com/ArcadeAIverify the current SPDX identifier on the active Arcade repos before relying on a specific OSS classification
Pricing modelHarbor: tryharbor.ai/. Arcade: arcade.dev/pricingHarbor's pick: tie.Free + Workspace + Enterprise tiersWorkspace tier usage-based units not yet priced publiclyHarbor's pick: tie.Public pricing page at arcade.dev/pricingrecord the live plan names and units at edit time
Observability surfaceHarbor: apps/api/src/plugins/worker/. Arcade: docs.arcade.devHarbor's pick: Harbor.Runs + spans + workspace-scoped execution history, persisted to D1exec requests create run and span records for tool calls, sandbox output, plugin dispatch, and orbit access where applicableNot publicly disclosed as a first-class product objectverify whether Arcade surfaces runs / traces as a product object on docs.arcade.dev
Identity & inbound authHarbor: WorkOS dashboard + apps/api auth routes. Arcade: docs.arcade.devWorkOS / AuthKit for web sign-in; protected-resource metadata for Harbor MCPSAML / OIDC / SCIM available via WorkOS on EnterpriseNot publicly disclosed in fullverify IdP options for the Arcade dashboard (SAML / OIDC / SCIM tier availability) on arcade.dev / docs.arcade.dev
Sandbox / execution isolationHarbor: apps/api/src/plugins/worker/. Arcade: docs.arcade.devHarbor's pick: Harbor.Cloudflare codemode Worker isolate, separate from the Harbor API Workerprovider tokens are never exposed to executing code; credentials are dispatched host-sideNot publicly disclosedArcade executes tool calls server-side under user-delegated OAuth; the exact isolation boundary and credential-exposure model are not stated on arcade.dev
Durable workflow supportHarbor: harbor-workflows skill. Arcade: docs.arcade.devHarbor's pick: Harbor.step.* references can route hrbr exec through Cloudflare Workflowsthe API has workflow-mode routing for step.do / step.sleep / step.waitForEvent; treat exact product limits as implementation-specificNot publicly disclosedverify durable-execution primitives (retries with backoff, sleep, external-event resume) on docs.arcade.dev
Public docsHarbor: docs.tryharbor.ai. Arcade: docs.arcade.devHarbor's pick: tie.docs.tryharbor.ai with concept docs, guides, recipes; llms.txt publishedllms.txt is live; additional LLM-oriented docs should be verified when shippedHarbor's pick: tie.docs.arcade.dev with SDK + tool referencerecord llms.txt presence at edit time

Source · Harbor cells grounded in this repository (routes, schemas, registry catalog, and runtime bindings). Arcadecells grounded in the competitor's own public site and docs at www.arcade.dev. Cells we could not verify from a primary source are marked “Not publicly disclosed” rather than guessed.

What does Arcade do?

Arcade is a tools-for-agents platform aimed at developers building AI applications that need to call real SaaS APIs. Its public framing centres on an OAuth-first, user-delegated model with an SDK and a public tool catalogue, exposed through an MCP-compatible surface. The intended consumer is an application that acts on behalf of an end-user identity rather than a shared workspace tenancy.

Arcade has a public GitHub presence at github.com/ArcadeAI and a public pricing page at arcade.dev/pricing. Specific license terms, current plan names, and named customers should be confirmed against those pages at edit time rather than asserted from memory.

How does Harbor differ?

Harbor differs from Arcade in three structural ways. First, exec runs and traces are product objects: `hrbr exec` records runs with spans for tool calls, sandbox stdout/stderr, plugin dispatch, and `orbit` access where applicable. The audit story is built into the runtime, not bolted on at the log layer.

Second, Harbor is workspace-scoped: plugin connections, OAuth state, and run history live at the workspace boundary rather than a per-user delegation. Arcade is framed as OAuth-first with user-delegated auth; Harbor makes the workspace the tenancy primitive. Third, Harbor is Cloudflare-native: Workers, D1, KV-backed credential storage, R2, Vectorize, and Workflows are the substrate.

When should I pick Harbor over Arcade?

Pick Harbor when run / trace history is load-bearing — when your team needs to inspect or compare individual workspace executions and treat them as first-class objects, not just log lines.

Pick Harbor when workspace tenancy is the right abstraction for how your team thinks about access. Multiple agents sharing one workspace's connected Linear / GitHub / Slack credentials, with workspace-scoped policy around subsequent calls, is the Harbor model. If your team prefers per-user delegated OAuth flows instead, Arcade's posture is the better match.

Pick Harbor when Cloudflare-native operational characteristics matter to you, or when you want a typed `hrbr exec` runtime as the primary execution path rather than a series of MCP tool calls through the model context.

When should I pick Arcade over Harbor?

Pick Arcade when an OAuth-first, user-delegated tool-auth model is the abstraction you want. If your application primarily acts on behalf of an end-user identity rather than a shared workspace tenancy, Arcade's positioning aligns more directly. Pick Arcade when its specific tool catalogue or SDK ergonomics map onto your application shape more cleanly than wrapping the same tools behind Harbor's plugin / exec model.

Can I use both?

Yes. Harbor supports consuming third-party MCP servers as plugins. If Arcade exposes its tool catalogue over a compatible MCP server, you can install it into a Harbor workspace and call the same Arcade-managed tools through `hrbr exec` while keeping Harbor's workspace tenancy and run / trace history around the calls.

The reverse direction depends on Arcade-side client support for Harbor's protected MCP endpoint and should be verified for the specific flow. The two systems are not mutually exclusive; the MCP protocol is the boundary.

Frequently asked

How does Harbor authorization compare to Arcade?
Harbor scopes authorization at the workspace boundary: every plugin connection, every OAuth token, and every per-tool grant lives in a workspace, and revocation takes effect for subsequent calls. Arcade's public framing is OAuth-first with user-delegated auth — a different shape, anchored at end-user identity rather than workspace tenancy. The exact per-tool revocation semantics on the Arcade side should be verified against docs.arcade.dev before treating the comparison as binding.
Does Harbor record runs the way Arcade records logs?
Runs in Harbor are a first-class product object, not a side-effect log. Exec requests create runs with spans for tool calls, sandbox stdout/stderr, plugin dispatch, and orbit access where applicable. Runs are queryable and persisted to D1. Whether Arcade exposes an equivalent product surface is not stated publicly and should be verified on docs.arcade.dev.
Does Harbor have as many integrations as Arcade?
Harbor's registry catalogue exposes 149 registry entries covering 135 unique provider families (derived from packages/sdk/registry-catalog/data/v1/catalog.json). Arcade publishes its own tool catalogue on arcade.dev; record the live count at edit time before comparing.
Is Arcade open source?
Arcade has a public GitHub presence at github.com/ArcadeAI. The exact license terms vary per repository and should be confirmed against the active repo LICENSE files before relying on a specific OSS classification.
Can Harbor consume Arcade tools over MCP?
Yes, if Arcade exposes its tool catalogue over a compatible MCP server. Harbor supports consuming third-party MCP servers as plugins, so a compatible Arcade server can be installed into a Harbor workspace and invoked through `hrbr exec` like any other plugin.

Primary sources

These are the competitor-owned pages used to ground this comparison. We link primary sources instead of copying unsupported market claims.

See more comparisons

Ready to switch?

See pricing or review Harbor's security posture.