How it fits together
- Descriptor: declare each dependency with an alias, the service that calls it,
httpormcp, and the operations it uses. - World: map the same alias to a synthetic tool version. See Worlds.
- Local plan: tell the CLI which environment variable receives the address.
- Your agent: reads the address from that variable instead of the real service’s URL.
Declare the dependency
Descriptor
configuration in the descriptor, for example {"name": "MAIL_MCP_URL", "phase": "runtime", "secret": false, "required": true}.
Route it in the local plan
Adddependency_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, setmcp_config_env on the service instead:
Local plan service
Point your agent at the address
Prefer a setting your agent already has, in this order:- The SDK’s base URL option.
- The MCP server configuration.
- Your framework’s routing for tools.
Call an HTTP dependency
For a dependency withprotocol: 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
Themcp 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.