--- import Layout from "../layouts/Layout.astro"; import { AnimatedBeamDemo } from "../components/animated-beam-demo"; import { ContextBloatDemo } from "../components/context-bloat-demo"; // Imported so Vite emits it as a hashed build asset (served from /_astro/...); // the deploy pipeline does not pick up newly added /public files. import ycBackedBy from "../assets/yc-backed-by.svg?url"; import { getStars, formatStars } from "../lib/github"; const GH = "https://github.com/UsefulSoftwareCo/executor"; // Cloud sign-in. Same origin in prod: the cloud Worker owns executor.sh and // /api/* is app-owned (apps/cloud/src/app-paths.ts), so this hits the WorkOS // login flow directly. Returning users land here; new users use Get started. const SIGN_IN = "/api/auth/login"; const stars = await getStars(); // Copied to the clipboard by the "Set up with your agent" hero CTA. A visitor // pastes it into their coding agent (Claude, Cursor, ...) and the agent picks // the right form of Executor, installs it, connects over MCP, and gets a first // connection working. Keep in sync with the docs "Set up with your agent" // section (apps/docs/index.mdx). const setupPrompt = `Help me set up Executor and get my first connection working. Executor is an open source integration layer for AI agents: one place to configure every integration (MCP servers, OpenAPI specs, GraphQL APIs) and connect to them over MCP. Start by helping me pick the right form to run it in. Chat with me about it rather than jumping straight to a yes/no question, and recommend one. If I just want the fastest path, suggest Executor Cloud (free tier, nothing to install). All forms expose the same functionality, just packaged differently: Local (everything stays on my machine): - Desktop app: a native app for Mac, Windows, and Linux. Best for a regular desktop environment. - CLI (\`executor\`): best for a headless or server environment. Both run a local HTTP server as a background service that any MCP client can connect to. Hosted (use it from multiple agents, including cloud ones, with nothing running locally): - Executor Cloud: hosted, generous free tier, sign in and start immediately. - Self-hosted: a Docker image or a Cloudflare Worker. How to think about it: - Want all your data on your own machine? Go local: the desktop app for a regular environment, the CLI for a headless one. - Want to use it from multiple agents (including cloud agents like ChatGPT), or not run anything locally? Go hosted: Executor Cloud is the fastest start; the self-hosted Docker or Cloudflare versions give you full control. Terms you'll come across: - Integration: anything you add (an MCP server, an OpenAPI spec, a GraphQL API). - Connection: one configured instance of an integration. An integration can have many connections, and a connection doesn't have to be authenticated. - Policy: whether each tool is always allowed, requires approval, or is blocked. Policies start from a sensible default derived from the imported spec (for example, GET requests on an OpenAPI spec are allowed by default). Once you know which form I want: 1. Walk me through installing it. 2. Connect Executor to you over MCP. Most MCP clients only load servers at startup, so after adding it I may need to restart the client or open a new chat before the Executor tools appear. Tell me if that's needed and wait for me to do it before continuing. 3. Once the tools are available, help me add my first integration and get one tool working end to end. Docs: https://executor.sh/docs Source (and the place to start if something breaks): https://github.com/UsefulSoftwareCo/executor`; ---
{/* Graph-paper hero texture: grayscale (ink-masked), faded into the surface at the bottom. Part of the registry-grade language, not a colored effect. */}
{/* ─── NAV ─── */} {/* ─── HERO ─── */}

Connect any agent to everything.

Executor is an MCP gateway. Anything that speaks MCP, like Claude Code, Cursor, or Codex, points at one endpoint and reaches every tool you connect.

{/* ── CTA: For humans / For agents ── */}
{/* For humans: sign up or run it yourself */} {/* For agents: hand setup to a coding agent, or read the docs */}
Read docs
{/* Shadow lives here, not in the SVG: WebKit rasterizes SVG filter regions in at 1x, blurring the badge on mobile. */} Backed by Y Combinator
{/* ─── WEDGE ─── */}

Wiring tools to agents is fiddly, per-client, and easy to get wrong. Executor makes every tool, from any protocol, look the same: one name, one input schema, one output schema, so any agent can call any of them the same way.

{/* ─── NO CONTEXT BLOAT (interactive) ─── */}
Context efficiency

Thousands of tools, no bloat.

Connect everything you use and Executor still shows the model a single tool. It searches your catalog and loads a tool's schema only when the code actually calls it, so the prompt never balloons.

{/* ─── CAPABILITIES ─── */}
What you get

The model reasons. Executor handles the rest.

{/* One tool shape */}
01

One tool shape

MCP, OpenAPI, GraphQL, or a custom integration. Under the hood they all become a tool name, an input schema, and an output schema.

{/* Code-mode */}
02

Call it any way

Today it is a code-mode MCP. It could just as well be the Executor CLI, a one-off script, a gen-UI dashboard, or a reusable workflow. Same tools, every surface.

{/* Trace every call (coming soon) */}
Coming soon 03

Trace every call

One place to see every run and tool call. Audit any decision after the fact.

run_7421 1.42s
sentry.getIssue 184ms
github.searchCode 391ms
linear.createIssue 612ms
{/* Teams */}
04

Set up once, whole team has it

Per-user credentials and shared ones. No onboarding ritual, no toggling MCPs on and off mid-task.

{/* Destructive gating */}
05

Destructive actions pull you back in

Executor keeps the semantics it imported: GET vs DELETE for OpenAPI, destructiveHint for MCP, mutations for GraphQL. Agents auto-run the safe stuff and ask before the rest.

{/* Sandboxed */}
06

Sandboxed execution

Tool calls run in an isolated JavaScript sandbox. Secrets are injected host-side at call time and never enter the sandbox heap, so the agent and model never see a raw token.

{/* ─── FOUNDER NOTE (condensed) ─── */}
Why we built it

Your agent should be able to reach your company's resources in a way that isn't scary. Most setups make you choose between locked down and useless, or wide open and risky.

Executor doesn't care what you add. Once a tool is in that one shape, a name and two schemas, you can call it however you want and the same guardrails apply everywhere. That is the whole idea: make the safe path the easy path.

{/* ─── CHOOSE YOUR PATH ─── */}
Get started

Pick your path.

{/* Cloud (recommended: fastest start) */}

Cloud

executor.sh/cloud

Hosted Executor. Auth, sync, policies, and your whole team online in five minutes. Free tier to start.

Try Cloud →

Looking for self-hosted? →

{/* Desktop (native app, local) */}

Desktop

Mac · Windows · Linux

A native app that runs entirely on your machine. Your integrations, credentials, and sessions never leave the device. MIT licensed.

{/* CLI (headless / servers) */}

CLI

npm i -g executor

Run Executor as a background service and drive it from your terminal. Best for headless and server environments. MIT licensed.

Read the docs →

View source →

{/* ─── FAQ ─── */}

FAQ

Where does my code run, and what touches my credentials?
Tool calls run in an isolated JavaScript sandbox. Credentials are resolved host-side at call time and injected into the outbound request only. They never enter the sandbox heap, the code your agent wrote, the agent, or the model.
Can the agent or the model ever see a raw token?
No. Secrets stay host-side by design. The sandbox calls a tool by name; Executor attaches the credential to the real request outside the sandbox, so a token is never present in anything the model can read.
What can call Executor?
Any MCP client (Claude Code, Cursor, Codex, and others), the Executor CLI, or a native client you drop in. Because tools share one shape, the calling surface is interchangeable.
How does it know what is safe to auto-run?
Executor preserves the semantics of whatever it imported: GET vs DELETE for OpenAPI, destructiveHint for MCP, and mutations for GraphQL. That tells the agent what it can run on its own and what should pull you back into the loop.
Is it open source? Can I self-host?
Yes. Executor is MIT licensed and built on the SDK we publish to npm. Run the desktop app locally, self-host the server, or use the hosted cloud. Same code paths, different deployment.
{/* ─── PRICING ─── */}
Pricing

Start free, pay per member.

{/* Free */}
Get started

Free

For small teams getting started

$0 / month
Start free →
    {[ "Up to 3 members", "100,000 executions per month", "Unlimited integrations", ].map((f) => (
  • {f}
  • ))}
{/* Team */}
Recommended

Team

For growing organizations

$15 / member / month
Start free trial →
    {[ "14-day free trial, then $15 / member / month", "Unlimited executions", "Verified domains & join by team domain", ].map((f) => (
  • {f}
  • ))}
{/* Enterprise */}
Custom needs

Enterprise

For orgs with custom needs

Custom
Contact us →

Everything in Team, plus

    {[ "Self-hosted or dedicated cloud deployment support", "SSO / SAML & SCIM provisioning", "Audit logs for every tool call", "Dedicated support & onboarding", "Security reviews, DPA & SOC 2 on request", ].map((f) => (
  • {f}
  • ))}
{/* ─── FINAL CTA ─── */}

Connect your agent to everything.

or try Executor Cloud →

{/* ─── FOOTER ─── */}