Skip to main content
During a drill, your agent calls simulated versions of the services it depends on. Each drill gets its own local address for each simulated service. Your agent never receives a Firedrill token. The address is the only thing it needs.

How it fits together

  1. Descriptor: declare each dependency with an alias, the service that calls it, http or mcp, and the operations it uses.
  2. World: map the same alias to a synthetic tool version. See Worlds.
  3. Local plan: tell the CLI which environment variable receives the address.
  4. Your agent: reads the address from that variable instead of the real service’s URL.

Declare the dependency

Descriptor
Also add the variable name to the service’s configuration in the descriptor, for example {"name": "MAIL_MCP_URL", "phase": "runtime", "secret": false, "required": true}.

Route it in the local plan

Add dependency_env to the service that makes the calls:
Local plan service
The service must be launched fresh for each drill (mode: launch, per_drill: true), or be the process the jsonl-process.v1 driver starts. Every synthetic dependency must be routed.

Use an MCP configuration file

If your agent loads MCP servers from a config file, set mcp_config_env on the service instead:
Local plan service
The variable receives the path of a private file like this:

Point your agent at the address

Prefer a setting your agent already has, in this order:
  1. The SDK’s base URL option.
  2. The MCP server configuration.
  3. Your framework’s routing for tools.
Do not use proxies, custom certificate authorities or DNS overrides. The plan refuses them.

Call an HTTP dependency

For a dependency with protocol: http, route it with "url": "invoke", for example to MAIL_INVOKE_URL. Then send a POST:
The simulated service’s status and body come back unchanged.

Call an MCP dependency

The mcp address is a Streamable HTTP MCP server. tools/list returns the simulated service’s tools and tools/call runs them. Connect with any MCP client library.

Errors your agent may see

Pick a synthetic tool

tools save adds a catalog tool to your workspace. tools runnable lists the saved versions you can use in a world. tools definitions show <version-id> prints the contract digest the world needs. See Synthetic tools.

Build a world

Map each dependency to a tool version.

Synthetic tools

See which services are available.