executor README

The project's README from github.com/UsefulSoftwareCo/executor. As one markdown file: README.md.

Executor

Connect any agent to everything.

Executor is an open-source integration layer for AI agents. Configure every integration once (MCP servers, OpenAPI specs, GraphQL APIs) with authentication and per-tool policies, then use that one catalog from any MCP-compatible agent.

Website · Documentation · Discord

Executor demo

Why Executor

Every agent you use (Claude Code, Cursor, ChatGPT, and the rest) needs its own copy of every integration: the same API keys pasted in three places, the same MCP servers wired up again, no shared idea of what each tool is allowed to do.

Executor is the layer in between. Add a tool once, give it credentials once, set its policy once, and every agent shares it over MCP. Your integrations, auth, and policies live in one place instead of being scattered across each client.

How it works

  1. Add an integration: an MCP server, an OpenAPI spec, or a GraphQL API.
  2. Create a connection: one configured (optionally authenticated) instance of that integration. An integration can have many connections.
  3. Set policies: decide whether each tool is always allowed, needs approval, or is blocked.
  4. Point your agents at Executor over MCP. They all share the same catalog.

See Concepts for the full model.

Quick start

The fastest path is Executor Cloud: sign in, add an integration, and point your agents at the hosted MCP endpoint. Nothing to install.

To run it locally instead (Node.js 20+):

npm install -g executor   # or: pnpm add -g / bun add -g / yarn global add
executor install          # install the durable background service
executor web              # open the web UI in your browser

executor install keeps the service running across restarts. For a throwaway foreground runtime, use executor web --foreground. From the web UI, add your first integration and connect an agent.

Set up with your agent

Prefer to let your coding agent do the setup? Copy the setup prompt from the docs and paste it into Claude, Cursor, or any MCP-capable agent. It will help you pick how to run Executor, install it, connect over MCP, and get your first integration working end to end.

Ways to run

Every form exposes the same functionality, just packaged differently.

Form Best for Docs
Executor Cloud The fastest start. Use it from many agents (including cloud agents like ChatGPT) with nothing running locally. Free tier. Cloud
CLI A headless or server environment. Runs a local background service. CLI
Desktop app A regular desktop (Mac, Windows, Linux). The same runtime, as a native app. Desktop
Self-host (Docker) Your own infrastructure, full control. Docker
Self-host (Cloudflare) Deploy as a Cloudflare Worker. Cloudflare

Connect an agent over MCP

Add Executor to any MCP client (Claude Code, Cursor, OpenCode) with add-mcp, which detects the client and writes its config for you:

# Over HTTP (the running service serves a streamable-HTTP endpoint)
npx add-mcp http://127.0.0.1:4788/mcp --transport http --name executor

# Or over stdio, with the executor CLI on your PATH
npx add-mcp "executor mcp" --name executor

The Connect card in the web UI shows the exact command (and port, if it differs) already filled in. Most MCP clients only load servers at startup, so you may need to restart the client or open a new chat before the Executor tools appear.

Add an integration

From the web UI, click Add Integration, paste an OpenAPI, GraphQL, or MCP URL, and Executor detects the type, indexes the tools, and handles auth. Or add one from the CLI:

executor call executor openapi addIntegration '{
  "spec": "https://petstore3.swagger.io/api/v3/openapi.json",
  "namespace": "petstore",
  "baseUrl": "https://petstore3.swagger.io/api/v3"
}'

Use baseUrl when the OpenAPI document has relative servers entries (for example "/api/v3"). Confirm it is live with executor tools integrations.

Using tools

From the CLI

executor tools search "send email"      # find tools by intent
executor call github issues --help      # browse a namespace
executor call github issues create '{"owner":"octocat","repo":"Hello-World","title":"Hi"}'

executor call, executor resume, and executor tools ... auto-start the local daemon if needed, and pick a free port if the default is busy. If an execution pauses for auth or approval, resume it:

executor resume --execution-id exec_123

From your own code

Embed Executor with the TypeScript SDK (a Promise API; an Effect-native API is also available):

import { createExecutor } from "@executor-js/sdk/promise";
import { openApiPlugin } from "@executor-js/plugin-openapi/promise";

const executor = await createExecutor({ plugins: [openApiPlugin()] });

// add an integration, create a connection, then list and call tools
const tools = await executor.tools.list({ integration: "inventory" });
const schema = await executor.tools.schema(tools[0].address);

await executor.close();

See examples/ for runnable end-to-end scripts.

CLI reference

executor install                    # install/start the durable background service
executor web                        # open the running web UI
executor web --foreground           # start a temporary foreground runtime + web UI
executor daemon run                 # start persistent local daemon in background
executor daemon status              # show daemon status
executor daemon stop                # stop daemon
executor daemon restart             # restart daemon
executor mcp                        # start MCP endpoint (stdio)
executor call <path...> '{"k":"v"}' # invoke a tool by path segments
executor call <path...> --help      # browse namespaces/resources/methods
executor call <path...> --help --match "<text>" --limit <n> # narrow huge namespaces
executor resume --execution-id <id> # resume paused execution
executor tools search "<query>"     # search tools by intent
executor tools integrations         # list configured integrations + tool counts
executor tools describe <path>      # show tool TypeScript/JSON schema

Project layout

Executor is a Bun + Turborepo monorepo.

apps/
  cli/             the `executor` CLI and local background service
  desktop/         the desktop app (Mac, Windows, Linux)
  local/           the local runtime shared by the CLI and desktop
  cloud/           Executor Cloud (the hosted product)
  host-selfhost/   self-hosted server (Docker)
  host-cloudflare/ Cloudflare Worker deployment
  marketing/       the executor.sh site
  docs/            the docs at executor.sh/docs
packages/
  core/            contracts, plugin wiring, scopes, policies, SDK, API, CLI core
  kernel/          execution runtimes (QuickJS, Deno subprocess, dynamic worker)
  plugins/         integration and provider plugins (openapi, graphql, mcp, google,
                   microsoft, 1password, keychain, encrypted/file secrets, ...)
  hosts/           host adapters (MCP surface, Cloudflare)
  react/           shared React UI
  app/             the web app UI
examples/          runnable SDK examples
e2e/               full-stack end-to-end tests

Develop locally

bun install
bun run bootstrap   # idempotent: install deps, build required artifacts, fetch Playwright
bun run dev         # start the dev servers (defaults to http://127.0.0.1:4788)

bun run bootstrap is required in a fresh checkout: its build step produces artifacts the dev servers fail without. See RUNNING.md for dev servers, ports, and environment gotchas, and AGENTS.md for the contributor contract.

Tests

bun run test       # unit + integration suites
bun run test:e2e   # full-stack e2e: boots the cloud and self-host apps and drives them

The browser e2e scenarios need Playwright's Chromium once per machine: bunx playwright install chromium.

Community

Join the Discord. To learn more, visit executor.sh or Ask DeepWiki.

License

MIT

Attribution

References

As part of my coding process, I give my agent access to references to other codebases to understand patterns and how other people have implemented systems. A non-exhaustive list:

You are also encouraged to use this codebase as a reference to understand how it is implemented.

executor (UsefulSoftwareCo/executor)

Searching Database…

这是什么?一个面向 AI 代理的开源集成层:只需配置一次每个集成(MCP 服务器、OpenAPI 规范、GraphQL API),设置好鉴权和针对每个工具的策略,所有兼容 MCP 的代理就能共用同一套目录,不用各自维护一份。
它是托管服务、桌面应用,还是命令行工具?都是:同一个运行时既可以作为托管的 Executor Cloud 使用,也可以作为本地 CLI 后台服务运行,还提供支持 Mac、Windows 和 Linux 的原生桌面应用,或者用 Docker 或 Cloudflare Workers 自托管。
用本地或自托管版本需要装什么?云端什么都不用装。本地运行需要 Node.js 20+,代码库本身是一个 Bun + Turborepo 的 monorepo;自托管则面向 Docker 或 Cloudflare Worker。
接入代理时有什么要注意的坑?大多数 MCP 客户端只在启动时加载服务器,所以可能需要重启客户端或新开一个会话,Executor 的工具才会出现。因鉴权或审批而暂停的执行,可以用 'executor resume' 继续运行。
集成(integration)和连接(connection)有什么区别?集成是数据源——MCP 服务器、OpenAPI 规范或 GraphQL API。连接是它的一个已配置、可选鉴权的实例,一个集成可以有很多个连接。
用命令行能做什么?'executor call' 运行一个工具,'executor resume' 继续一次暂停的执行,'executor tools' 查看集成;这些命令会按需自动启动本地守护进程,如果默认端口被占用还会自动选一个空闲端口。
作者为什么要做这个?通常每个代理都要自己维护一份所有集成:同一批 API 密钥在三个地方反复粘贴,同一批 MCP 服务器反复接线,而且没法统一控制每个工具能做什么。Executor 把集成、鉴权和策略集中到一处。
Executor Cloud 免费吗?免费,它有免费套餐,也是最快上手的方式,包括从 ChatGPT 这类云端代理使用,本地什么都不用跑。CLI、桌面应用和自托管版本都按 MIT 许可证开源。
Size
116.8 MB
Stars
4.2K
Age
8mo
Commits · 90 Days