Tool Server Protocol
Tool servers expose a standard HTTP API. Any service that implements this protocol can be used as a tool in the Simulation Lab. See the Tool Server Protocol reference for the full spec.Multi-Tool Composition
A workspace can include multiple tool servers. The agent sees a unified tool list. Tools are automatically namespaced by their server name (e.g.,email-env__send_email, chronos-server__create_event). Routing is handled transparently; the agent calls tools by name and the Simulation Lab forwards each call to the correct server.
Tool Definition Format
Each tool server is defined as a YAML file that maps directly to Docker Compose services. Here is the email tool as an example:docker-compose.yml.
For tools that are hosted externally and don’t need Docker services, use the tool_server_url field instead:
Built-in Toolsets
Below is a selection of out-of-the-box tools that come with Simulation Lab. We are continually adding more domain-specific tools as part of our roadmap.| Name | Category | Description |
|---|---|---|
Calendar | Productivity | CalDAV calendar (Baikal + Chronos MCP) |
Coding | Development | Sandboxed shell and filesystem (OpenHands) |
Email | Communication | Email sending/inbox via MailHog SMTP |
File Explorer | Development | Read, write, and list files |
Frappe HRMS | Enterprise | Full HR management system (Frappe HRMS) |
Google Workspace | Productivity | Drive, Docs, Sheets, Gmail, Calendar |
Nano Bananna Pro | Creative | Image generation and editing |
OpenTable | Lifestyle | Restaurant search, reservations, and cancellations |
Outlook | Communication | Email inbox, drafts, and sent items |
Playwright | Browser | Browser automation via Playwright MCP |
Rocket.Chat | Communication | Open source Slack-equivalent Team chat |
SEC Edgar | Finance | SEC EDGAR filings search |
Terminal | Development | Run shell commands |
Twelve Data | Finance | Market data |
Weather | Utilities | Forecasts by location |
WhatsApp | Communication | Messaging with contacts, groups, and messages |
Bring Your Own Tools
Simulation Lab supports three paths for integrating custom tools: MCP servers, env-local custom tool definitions, and custom CLI tools for coding environments.Custom MCP Servers
You can add custom MCP servers to any environment so the agent can call them alongside built-in tools. SimLab supports two MCP transport patterns:- URL-based — SimLab connects directly to an HTTP MCP endpoint. No extra container is added.
- Command-based — SimLab adds an
mcp-gatewaycontainer that starts your stdio MCP servers and exposes them over HTTP inside the environment.
Configuration format
Create amcp-servers.json file with a top-level mcpServers object. Each server must define exactly one of url or command:
| Field | Required | Description |
|---|---|---|
url | One of url or command | HTTP endpoint for URL-based servers |
command | One of url or command | Executable for command-based (stdio) servers |
args | No | Arguments passed to the command |
env | No | Environment variables (e.g. API keys) for command-based servers |
- Server names may contain only letters, numbers,
_, and-. - Names must not collide with built-in tool server names (e.g.
email,calendar).
Adding MCP servers to an environment
Pass your config atenv init:
environments/<env-name>/mcp-servers.json. For command-based servers, it also generates an mcp-gateway service in docker-compose.yml.
Managing API keys and env vars
For command-based servers, set secrets inenvironments/<env-name>/.env before running simlab env up.
If an env var name is used by only one MCP server, set it directly:
_ (e.g. my-docs becomes MY_DOCS).
Env-Local Custom Tool Definitions
For environment-specific tool servers that aren’t part of the built-in catalog, you can scaffold custom tool definitions under the environment’scustom-tools/ directory. These use the same YAML schema as built-in catalog tools.
Scaffold a custom tool
harbor-main to the tools list in env.yaml and regenerates the environment’s Docker Compose and related files.
Edit and regenerate
After editingcustom-tools/*.yaml, env.yaml, or mcp-servers.json, regenerate the environment:
simlab env up, simlab tasks run, or simlab tasks seed, and prompt to regenerate in interactive sessions.
Inspect a custom tool
Naming rules
- Custom tool names must not shadow built-in tool names.
- Env-local custom tool names must be unique within the environment.
- MCP server names must not conflict with either built-in or env-local tool names.

