wsC2ArbOLkAKcPU6.mp4
The integration layer for AI agents. One catalog for every tool, shared across every agent you use.
npm install -g executor
executor webThis 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.
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 mcpExample mcp.json for Claude Code / Cursor:
{
"mcpServers": {
"executor": {
"command": "executor",
"args": ["mcp"]
}
}
}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.
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.
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").
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_123executor web # start 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
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 schemabun install
bun devThe dev server starts at http://127.0.0.1:4788.
Join the Discord: https://discord.gg/eF29HBHwM6
Visit executor.sh to learn more.
- Thank you to Crystian for providing the npm package name
executor.