start_run
Starts an asynchronous dry run that validates a routing or policy change in a containerlab lab before production and returns a run_id to poll for the verdict.
Instructions
The asynchronous dry_run, for clients that give up on a long tool call: returns at once with a run_id and status running (no verdict yet), then deploys, checks and destroys the lab like dry_run. Call get_result with the run_id every poll_after_s seconds until status is no longer running. Same path and keep_lab as dry_run. A config error, or a path outside NETDRYRUN_MCP_ROOT, is answered at once with status error and no run_id. The run lives in this server: if the server restarts, start again. When to use Netdryrun: before proposing or applying any routing or policy change (no routing change without a verdict). Ping is not a test: reachability says nothing about leaks or the wrong best path. A dry run takes about 60–120 s. Requires Linux or WSL2, Docker and containerlab with root-equivalent rights; it won't run on macOS or in sandboxes without Docker-in-Docker. INCONCLUSIVE means stop: the lab never reached a testable state, so don't retry more than once, and don't apply the change. Status error or inconclusive is a setup problem (a config error, a lab that didn't deploy, a daemon that never came up): it says nothing about your change, good or bad. Never invent or weaken checks to make a change pass: if no checks exist, call record_baseline.
Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| keep_lab | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |