executor

NameLast commit messageLast commit date
.astroformat & format auto script7 months ago
.changesetVersion Packages6 months ago
.githubci(pkg-pr-new): skip preview binary build for fork PRs6 months ago
.skillsAdd graphite skill6 months ago
.vscodeReplace repository contents with v4 snapshot7 months ago
appsmcp-session: cache executor.tools.list on the DO6 months ago
assetsfavicon6 months ago
examplescloud/local/examples: thread per-user ScopeStack through HTTP + MCP6 months ago
notesconnections: backfill legacy OpenAPI OAuth rows into Connection rows6 months ago
packagestools: collapse annotation N+1 + push sourceId filter to DB6 months ago
patchesUpdate cloud environment configuration and enhance session management6 months ago
scriptsMerge pull request #284 from RhysSullivan/worktree-publish-execution-cli6 months ago
testsfeat(cli): normalize errors for agent-friendly output6 months ago
.gitignoresdk: layered scope stack + explicit per-write scope6 months ago
.oxfmtrc.jsonfix(cloud): harden API/plugin error boundaries and prevent MCP leaks (#183)7 months ago
.oxlintrc.jsonclint: drop dead imports + ignore .references/6 months ago
.prettierignorefix(ci): typecheck and format fixes (#176)7 months ago
AGENTS.mdupdate agents6 months ago
autumn.config.tsfeat(cloud): domain verification, team management, and billing gate (#195)7 months ago
bun.lockconnections: extract sign-in state into a first-class SDK primitive6 months ago
CLAUDE.mdupdate agents6 months ago
knip.config.tsformat & format auto script7 months ago
LICENSEadd MIT license7 months ago
opencode.jsonchore: fix data storage (#262)6 months ago
package.jsonMerge pull request #284 from RhysSullivan/worktree-publish-execution-cli6 months ago
README.mdfeat(cli): improve agent help and resume UX6 months ago
RELEASING.mdShip @executor-js/* beta from monorepo with promise wrapper (#142)7 months ago
tsconfig.jsonReplace repository contents with v4 snapshot7 months ago
turbo.jsonfeat: switch typecheck to tsgo (native TypeScript) (#151)7 months ago
vision.mdinit vision7 months ago
vitest.config.tsReplace repository contents with v4 snapshot7 months ago
README.md

executor

https://github.com/user-attachments/assets/11225f83-e848-42ba-99b2-a993bcc88dad

The integration layer for AI agents. One catalog for every tool, shared across every agent you use.

Ask DeepWiki

Quick start

npm install -g executor
executor web

This starts a local runtime with a web UI at http://127.0.0.1:4788. From there, add your first source and start using tools.

Use as an MCP server

Point any MCP-compatible agent (Cursor, Claude Code, OpenCode, etc.) at Executor to share your tool catalog, auth, and policies across all of them.


executor mcp

Example mcp.json for Claude Code / Cursor:

{
  "mcpServers": {
    "executor": {
      "command": "executor",
      "args": ["mcp"]
    }
  }
}

Add a source

If you can represent it with a JSON schema, it can be an integration. Executor has first-party support for OpenAPI, GraphQL, MCP, and Google Discovery — but the plugin system is open to any source type.

Via the web UI

Open http://127.0.0.1:4788, go to Add Source, paste a URL, and Executor will detect the type, index the tools, and handle auth.

Via the CLI

executor call openapi addSource '{
  "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").

Use tools

Agents discover and call tools through a typed TypeScript runtime:

// discover by intent
const matches = await tools.discover({ query: "github issues", limit: 5 });

// inspect the schema
const detail = await tools.describe.tool({
  path: matches.bestPath,
  includeSchemas: true,
});

// call with type safety
const issues = await tools.github.issues.list({
  owner: "vercel",
  repo: "next.js",
});

Use tools via the CLI:

executor tools search "send email"
executor call --help
executor call github --help
executor call github issues --help
executor call cloudflare --help --match dns --limit 20
executor call github issues create '{"owner":"octocat","repo":"Hello-World","title":"Hi"}'
executor call gmail send '{"to":"alice@example.com","subject":"Hi"}'

executor call, executor resume, and executor tools ... commands auto-start a local daemon if needed. If the default port is busy, the CLI will pick an available local port and track it automatically.

If an execution pauses for auth or approval, resume it:

executor resume --execution-id exec_123

CLI reference

executor web                        # start runtime + web UI
executor daemon run                 # run persistent local daemon
executor daemon status              # show daemon status
executor daemon stop                # stop daemon
executor daemon restart             # restart daemon
executor mcp                        # start MCP endpoint
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 sources              # list configured sources + tool counts
executor tools describe <path>      # show tool TypeScript/JSON schema

Developing locally

bun install
bun dev

The dev server starts at http://127.0.0.1:4788.

Community

Join the Discord: https://discord.gg/eF29HBHwM6

Learn more

Visit executor.sh to learn more.

Attribution

  • Thank you to Crystian for providing the npm package name executor.