Execute JavaScript over MCP tools
execRun JavaScript code to discover, compose, and invoke multiple MCP tools from various servers in a single execution, enabling complex workflows and orchestration.
Instructions
Run JavaScript to discover and compose upstream MCP tools in one call.
The code is an async function body: use top-level await and return a final value. Global APIs:
search(query, options?): ranked tool discovery by name and description. Use a short keyword query; if no result, rephrase or remove a term. Options: { server?, limit? }. Start here, then describe one result.
describe(name): full metadata and JSON input/output schemas for one normalized or unambiguous raw tool name.
ALL_TOOLS: frozen complete { name, server, tool, title?, description } inventory for deterministic enumeration when search is insufficient.
ALL_SERVERS: connection status for configured upstream servers.
tools.(args) or call(name, args): invoke a tool. Names are normalized as mcp____ and returned by search or ALL_TOOLS.
text(value), image(dataUrlOrMcpImage, detail?), emit(contentBlock): select MCP output blocks.
store(key, value), load(key), clearStore(key?): explicit JSON-only in-memory session state.
signal: AbortSignal for this execution.
Nested calls can be looped, branched, or run with Promise.all. Return a complete MCP CallToolResult to preserve all its text, image, audio, resource, structured content, error, and metadata fields. Otherwise returned values become text/JSON; use image() or emit() to select rich blocks.
This is ordinary host-authority Node JavaScript, not a security sandbox. process, require(), dynamic import(), fetch(), filesystem, network, environment, and child-process APIs have the same authority as this MCP server. node:vm supplies execution context and synchronous timeout control only. Standard output is reserved for MCP; console output is captured and returned.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes | Raw JavaScript function body. Use top-level await and return the final value. Do not wrap it in JSON or markdown fences. | |
| session_id | No | Optional in-memory store namespace. Defaults to default. | default |
| timeout_ms | No | Optional execution timeout. Defaults to the server setting. | |
| max_output_chars | No | Optional returned-text limit. Filter large results in code instead. |