Skip to main content
Glama

AgentSUMO

An Agentic Framework for Interactive Simulation Scenario Generation in SUMO via Large Language Models

PyPI tests arXiv Docs License: MIT Python 3.10+ MCP Registry

Documentation · Installation · Tools · Schema · Tutorials


Overview

AgentSUMO lets non-expert stakeholders design, execute, and analyze SUMO traffic simulations through natural-language interaction. The Planner Agent translates abstract policy questions into executable simulation plans, drives them via the Model Context Protocol (MCP), and surfaces results through a web dashboard.

  • Conversational scenario design — describe a policy question, get a runnable simulation

  • Policy experiments — road closures, lane reductions, signal optimization, demand changes

  • Cross-scenario analysis — SQL-based comparison across runs, with auto-generated HTML reports

  • Web dashboard — geospatial visualization, time-series charts, and trip replay

Related MCP server: SUMO-MCP-Server

Demo

Web interface: conversational planning panel, scenario list, and live simulation status.

Geospatial visualization: per-edge metrics, congestion overlays, and trip replay on the 2.5D basemap.

Architecture

User (natural language)
    |
    v
Planner Agent (Claude LLM, Interactive Planning Protocol)
    |
    +--> AgentSUMO MCP Client --> AgentSUMO MCP Server (PyPI: agentsumo-mcp) --> SUMO
    |
    +--> SQLite MCP Client    --> SQLite MCP Server (Anthropic, open source)  --> simulations.db
    |
    +--> Filesystem MCP Client --> Filesystem MCP Server (Anthropic, open source) --> additional XML files

The reasoning layer (Planner Agent) lives in this repository. The execution layer (agentsumo-mcp) is published to PyPI and installed automatically as a dependency.

Tool Layer

The AgentSUMO MCP Server exposes 26 tools grouped into five capability categories that follow the simulation workflow. Full reference at agentsumo.readthedocs.io/.../tools.

Category

Purpose

Representative tools

Scenario Generation

Build a baseline SUMO simulation: OSM → network → trips → routes → run

osm_extract, net_convert, trip_generate, route_generate, sumo_runner

Policy Experimentation

Apply infrastructure, demand, and signal-control interventions

edge_edit_tool, reduce_lanes_tool, vehicle_generation_tool, flow_generation_tool, tls_offset_tool, tls_adaptation_tool

Result Analysis

Convert SUMO XML output to SQLite and render HTML reports

xml_to_sqlite_tool, simulation_report_tool

Visualization

Render networks, highlighted edges, and per-edge metric heatmaps

visualize_net_tool, visualize_edge_tool, visualize_policy_target_tool, visualize_edgedata_tool

Utility Functions

Network statistics, routing, road-name ↔ edge-id resolution, OD-coordinate validation, web-search grounding

network_summary_tool, route_analysis_tool, validate_od_coordinates_tool, web_search_tool

Installation

Requirements

  • Python 3.10 or later

  • SUMO 1.24 or later (locally installed, with SUMO_HOME set)

  • Anthropic Claude API key (bring-your-own-key)

  • Mapbox access token (used by the web map renderer)

1. Install SUMO

macOS

brew install sumo

Or download the installer from the Eclipse SUMO downloads page.

Windows — Download the installer from the Eclipse SUMO downloads page.

Linux (Ubuntu/Debian)

sudo add-apt-repository ppa:sumo/stable
sudo apt-get update
sudo apt-get install sumo sumo-tools sumo-doc

2. Set up the Python environment

Install uv:

# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh

# Windows (PowerShell)
powershell -c "irm https://astral.sh/uv/install.ps1 | iex"

Clone the repository, create a virtual environment, and install AgentSUMO:

git clone https://github.com/mw-jeong/AgentSUMO
cd AgentSUMO

# Create a Python 3.12 venv
uv venv --python 3.12

# Activate the venv
source .venv/bin/activate              # macOS / Linux
# .venv\Scripts\activate               # Windows

# Install AgentSUMO and all dependencies
# (this also pulls agentsumo-mcp from PyPI as a dependency)
uv pip install -e .

3. Configure environment variables

AgentSUMO reads API keys and the SUMO path from environment variables. The easiest way is a .env file at the project root:

cp .env.example .env

Open .env in your editor and fill in:

ANTHROPIC_API_KEY (required) — Claude API key that drives the Planner Agent. Get one at the Anthropic Console.

ANTHROPIC_API_KEY=sk-ant-api03-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

MAPBOX_TOKEN (required for the web UI) — used to render the basemap. Get one at the Mapbox access tokens page.

MAPBOX_TOKEN=pk.eyJ1Ijoixxxxxxxxxxxxxxxxxx

SUMO_HOME (required) — absolute path to your local SUMO installation. The directory must contain bin/sumo (or bin/sumo.exe on Windows).

# macOS (Homebrew)
SUMO_HOME=/opt/homebrew/share/sumo

# macOS (Eclipse SUMO installer)
SUMO_HOME=/Library/Frameworks/EclipseSUMO.framework/Versions/<version>/EclipseSUMO  # e.g. 1.24.0; use the directory name installed under Versions/

# Windows
SUMO_HOME=C:\Program Files (x86)\Eclipse\Sumo

# Linux
SUMO_HOME=/usr/share/sumo

AGENTSUMO_MCP_OUTPUT_BASE (optional) — override the base directory where the MCP server writes simulation outputs (networks, trips, results). Defaults to the current working directory.

AGENTSUMO_MCP_OUTPUT_BASE=/path/to/your/output/dir

4. Run

# Web interface (opens at http://localhost:8000)
python web.py

# CLI mode
python chat.py

# Clean up simulation outputs
python clean.py

Project Structure

AgentSUMO/
├── agentsumo/
│   ├── agent/        # Planner Agent (Claude orchestrator + prompts)
│   ├── client/       # MCP clients (AgentSUMO, SQLite, Filesystem)
│   └── core/         # Configuration
├── agentsumo_mcp/    # AgentSUMO MCP Server source (also published to PyPI)
│   └── defaults/     # Packaged fixtures (e.g., vehicle_types.add.xml)
├── packaging/mcp/    # PyPI build configuration for agentsumo-mcp
├── web/              # Web interface (FastAPI + Jinja2 templates)
├── docs/             # Sphinx documentation source
├── tests/            # Unit tests
├── assets/           # README images
├── output/           # Runtime artifacts (auto-populated; 8 categories tracked
│                     #   via .gitkeep — simulations/, networks/, trips/,
│                     #   analysis/, reports/, uploads/, visualizations/, additional/)
├── chat.py           # CLI entry point
├── web.py            # Web server entry point
└── .env.example      # Environment variable template

Use the MCP Server Standalone

The AgentSUMO MCP Server can be used independently from this framework with any MCP-compatible LLM client (Claude Desktop, OpenAI tool clients, Gemini, local LLMs):

pip install agentsumo-mcp

Or via uvx without installing:

uvx agentsumo-mcp

The server is registered in the official MCP Registry under io.github.mw-jeong/agentsumo-mcp.

Troubleshooting

SUMO path error — Verify SUMO_HOME in your .env. The directory must contain bin/sumo (or bin/sumo.exe on Windows).

API key error — Verify ANTHROPIC_API_KEY in your .env is set to a valid Claude API key. The Planner Agent will refuse to start without it.

Dependency error — Re-resolve dependencies:

uv pip install -e . --upgrade

Legacy token files (deprecated, scheduled for removal in 0.2.0) — AgentSUMO still falls back to claude_api.txt and mapbox_token.txt at the project root when the corresponding environment variables are missing, but those code paths now emit a DeprecationWarning at import time. Use the .env workflow for new installations.

Documentation

Full documentation lives at agentsumo.readthedocs.io.

  • Installation — SUMO, Python 3.10+, environment setup

  • Tools — reference for all MCP tools

  • Schemasimulations.db ER diagram and column reference

  • Tutorials — walkthroughs of the paper case studies

Citation

If you use AgentSUMO in academic work, please cite:

@article{jeong2025agentsumo,
  title         = {AgentSUMO: An Agentic Framework for Interactive Simulation Scenario Generation in SUMO via Large Language Models},
  author        = {Jeong, Minwoo and Chang, Jeeyun and Yoon, Yoonjin},
  journal       = {arXiv preprint arXiv:2511.06804},
  year          = {2025},
  url           = {https://arxiv.org/abs/2511.06804}
}

License

MIT. See LICENSE.


Developed at

&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;

Available Tools

26 tools
analyze_road_details_toolA
Analyze detailed road information (lanes, speed limits, length, etc.).

This tool provides comprehensive analysis of road segments including:
- Number of lanes per segment
- Speed limits (km/h)
- Road length and width
- Statistical summary (averages, min/max)

USE CASES:
1. "Show lane count and speed limit for the 500m segment of Teheran-ro near Gangnam Station"
2. "Analyze current road state to compare before and after policy application"
3. "Road capacity analysis (lane count x length)"

Args:
    net_file: Network file path
    target_road_name: Road name (e.g., "테헤란로", "Teheran-ro")
    reference_location: Reference point (e.g., "강남역", "Gangnam Station")
    radius_km: Radius in km (e.g., 0.5 for 500m)
    include_lane_details: Whether to include per-lane information

Returns:
    Dict with detailed road analysis including:
    - segments: List of segment details
    - statistics: Overall statistics (avg lanes, speed, length)
    - summary: Human-readable summary
    - filtering: Location filtering info (if applied)

EXAMPLE:
analyze_road_details_tool(
    net_file="gangnam_station.net.xml",
    target_road_name="테헤란로",
    reference_location="강남역",
    radius_km=0.5
)
-> Returns: Detailed analysis of Teheran-ro segments within 500m of Gangnam Station
ParametersJSON Schema
NameRequiredDescriptionDefault
net_fileYes
radius_kmNo
target_road_nameYes
reference_locationNo
include_lane_detailsNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses that the tool analyzes road details and returns a dictionary with segments, statistics, and summary. It is clear that the tool is read-only and non-destructive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with sections for description, use cases, args, returns, and example. It is slightly verbose, but every sentence adds value. A bit more conciseness could improve clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (5 parameters, 0% schema coverage, no output schema), the description is remarkably complete. It explains all parameters, return values, and provides a comprehensive example.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, but the description provides detailed parameter explanations in the Args section, including types, examples, and defaults. This adds significant meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it analyzes detailed road information such as lanes, speed limits, length, and provides comprehensive analysis including segments and statistics. It distinguishes itself from sibling tools like 'edge_edit_tool' by focusing on analysis rather than modification.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides three specific use cases and an example, giving clear context for when to use the tool. However, it does not explicitly state when not to use or mention alternatives, which prevents a perfect score.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

edge_edit_toolA
Delete specific road segments from the network file.

⚠️🚨 CRITICAL: After using this tool, you MUST regenerate trips and routes!
Route files contain explicit edge lists - if those edges are deleted, the route file becomes INVALID!
Workflow: edge_edit → trip_generate → route_generate → sumo_runner (REQUIRED!)

🌟 REALISTIC USAGE: Specify reference_location + radius_km for partial road closure!

Three modes (priority order):
1. edge_ids: Delete exact edges (most precise, but requires knowing edge IDs)
2. target_road_name + reference_location + radius_km: Delete road segments near a location (REALISTIC!)
3. target_road_name only: Delete entire road (extreme scenario, use with caution!)

Examples:
    # REALISTIC: Block 300m of Teheran-ro near Gangnam Station (construction scenario)
    edge_edit_tool(
        net_file="gangnam_station.net.xml",
        target_road_name="테헤란로",
        reference_location="강남역",
        radius_km=0.3
    )
    # Then: trip_generate → sumo_runner (MUST regenerate trip!)

    # EXTREME: Block entire Teheran-ro (unrealistic!)
    edge_edit_tool(
        net_file="gangnam_station.net.xml",
        target_road_name="테헤란로"
    )
    # Then: trip_generate → sumo_runner (MUST regenerate trip!)

Args:
    net_file: Network file path
    route_file: Route file path (optional, but will be invalidated after edge deletion)
    output_dir: Output directory for results
    target_road_name: Road name to delete from network (e.g., '테헤란로')
    edge_ids: Specific edge IDs to delete (list, optional)
    reference_location: Reference point for partial deletion (str, optional, e.g., "강남역")
    radius_km: Radius in km around reference (float, optional, e.g., 0.3)

Returns:
    Dict with status, net_file, and requires_reroute=True (indicating trip regeneration needed)
ParametersJSON Schema
NameRequiredDescriptionDefault
edge_idsNo
net_fileYes
radius_kmNo
output_dirNooutput/networks
route_fileNo
target_road_nameNo
reference_locationNo

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but the description fully compensates by disclosing critical behavior: deletion invalidates route files, requires rerun of trip_generate, and returns requires_reroute=True. Includes clear warnings and workflow requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-organized with bold warnings, sections for modes, bulleted examples, and parameter list. Every sentence adds value without redundancy. Critical information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite 7 parameters and no output schema, the description covers all necessary context: modes, prerequisites, workflow, example outputs, and return value indicating required rerun. Completely sufficient for correct tool invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage. The description explains all 7 parameters, including defaults, optionality, and usage in different modes. Examples illustrate parameter combinations for realistic and extreme scenarios.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states 'Delete specific road segments from the network file' with three distinct modes (edge_ids, target_road_name+location+radius, target_road_name only), clearly distinguishing use cases. It includes realistic examples and contrasts with extreme scenarios.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly provides when to use each mode (priority order) and realistic vs extreme use. Warns that after deletion, trips and routes must be regenerated, and specifies the workflow: edge_edit → trip_generate → route_generate → sumo_runner.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

flow_generation_toolA
Generate a SUMO flow from source to destination.

Two ways to specify locations:
1. Place names (source/dest) — uses geocoding to find coordinates
2. Direct coordinates (source_lat/lon, dest_lat/lon) — skips geocoding.
   Use this when coordinates are already known (e.g., from map O/D selection).

Two ways to specify vehicle count (exactly one required):
1. vehs_per_hour — rate-based generation (SUMO <flow vehsPerHour="N">)
2. number — total vehicle count over [begin,end] (SUMO <flow number="N">)

Safety parameters applied: departLane="free", departPos="random_free", departSpeed="random"

IMPORTANT: When calling multiple times for multi-OD scenarios, pass the previous call's
route_file output as the next call's route_file input to accumulate all flows in one file.

Args:
    route_file: Route file path (pass previous output for chained calls)
    net_file: Network file path
    source: Source location place name (e.g., "Madison Square Garden")
    dest: Destination location place name (e.g., "Lincoln Tunnel")
    begin: Start time in seconds (default: 0.0)
    end: End time in seconds (default: 3600.0)
    vehs_per_hour: Vehicles per hour — mutually exclusive with number
    number: Total vehicle count — mutually exclusive with vehs_per_hour
    flow_id: Flow ID (auto-generated if None)
    output_dir: Output directory for results
    use_geocoding: Use geocoding for place name resolution (default: True)
    search_radius: Search radius in km for nearest edge (default: 0.3)
    source_lat: Source latitude (WGS84) — use with source_lon for coordinate mode
    source_lon: Source longitude (WGS84) — use with source_lat for coordinate mode
    dest_lat: Destination latitude (WGS84) — use with dest_lon for coordinate mode
    dest_lon: Destination longitude (WGS84) — use with dest_lat for coordinate mode

Examples:
    Place name mode (geocoding):
    flow_generation_tool(route_file="r.rou.xml", net_file="n.net.xml",
        source="Madison Square Garden", dest="Lincoln Tunnel",
        begin=0, end=1800, vehs_per_hour=260)

    Coordinate mode (from map selection):
    flow_generation_tool(route_file="r.rou.xml", net_file="n.net.xml",
        source_lat=40.7505, source_lon=-73.9934,
        dest_lat=40.7580, dest_lon=-73.9855,
        begin=0, end=3600, number=200)
ParametersJSON Schema
NameRequiredDescriptionDefault
endNo
destNo
beginNo
numberNo
sourceNo
flow_idNo
dest_latNo
dest_lonNo
net_fileYes
output_dirNooutput/trips
route_fileYes
source_latNo
source_lonNo
search_radiusNo
use_geocodingNo
vehs_per_hourNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses important behaviors such as geocoding usage, safety parameter defaults, and the chaining mechanism. However, it does not specify the return value or output format, which is a gap given no output schema. Overall, it provides good transparency for inputs and internal behavior.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized with sections (purpose, modes, safety, chaining, parameters, examples). Each sentence adds value, and the structure allows quick scanning. It is appropriately sized for the tool's complexity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (16 parameters, no output schema, no annotations), the description covers most aspects including parameter roles and chaining. It lacks explicit mention of the return value and error handling, but overall it is sufficiently complete for an AI agent to use effectively.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description compensates excellently by explaining each parameter in the 'Args:' block, including defaults, mutual exclusivity, and usage in examples. It adds significant meaning beyond the bare schema definitions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool generates a SUMO flow from source to destination, distinguishing two location modes and two vehicle count modes. It is specific about the resource (SUMO flow) and operation (generate), effectively differentiating from sibling tools like trip_generate or route_generate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on how to specify locations (place names vs coordinates) and vehicle count (vehs_per_hour vs number), including when to use coordinate mode. It also explains chaining for multi-OD scenarios. However, it does not explicitly compare to sibling tools or state when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_edge_ids_from_road_name_toolA
Convert road name to SUMO edge IDs using edge.getName().

IMPORTANT: Use this when user asks questions with road names (e.g., "What is the density of Teheran-ro?")

This tool maps human-readable road names to SUMO's technical edge IDs,
enabling SQL queries based on road names.

Args:
    road_name: Road name (e.g., "테헤란로", "강남대로", "9th Avenue")
    net_file: Network file path used in simulation.
              When working with DB data, get this from:
              SELECT net_file FROM simulations WHERE simulation_id = '<your_sim_id>'

Returns:
    List[str]: List of edge IDs matching the road name

Example workflow:
    1. User asks: "What is the density of Teheran-ro?"

    2. Get net_file from DB (if using DB data):
       read_query("SELECT net_file FROM simulations WHERE simulation_id = 'baseline'")
       → "/path/to/network.net.xml"

    3. Convert road name to edge IDs:
       get_edge_ids_from_road_name_tool(
           road_name="테헤란로",
           net_file="/path/to/network.net.xml"  # Use actual path from step 2
       )
       → ["375049565#11", "375049565#12", "375049565#13", ...]

    4. Use in SQL query:
       read_query("SELECT AVG(density) FROM edge_metrics WHERE edge_id IN ('375049565#11', '375049565#12', ...)")

    5. Present results with road name (not edge IDs)

Note:
    - Returns all edge segments for the given road name
    - Raises ValueError if road name not found
ParametersJSON Schema
NameRequiredDescriptionDefault
net_fileYes
road_nameYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses that the tool returns all edge segments for a road name, raises ValueError if not found, and returns a list of strings. It does not mention side effects or authentication, but for a read-only mapping tool, this is sufficient. The description is transparent about core behaviors.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with sections (title, important note, args, returns, example workflow, note). The example workflow is detailed but useful. It could be slightly more concise, but every part serves a purpose.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 2 parameters, no output schema, and no annotations, the description is thorough: explains both parameters, return type, error handling, and provides a full workflow showing integration with other tools (DB queries, read_query). It gives the agent all necessary context for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description fully compensates. For 'road_name', it provides examples like '테헤란로' and states it's a road name. For 'net_file', it explains the network file path and gives a specific SQL query to retrieve it from the DB. This adds significant meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Convert road name to SUMO edge IDs using edge.getName().' It explains the mapping from human-readable road names to technical edge IDs, and distinguishes itself from sibling tools like get_road_names_tool by focusing on conversion rather than listing names.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says 'Use this when user asks questions with road names' and provides a complete example workflow showing exactly how and when to use the tool. It lacks an explicit statement of when not to use it or mention of alternatives, but the guidance is strong.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_road_names_toolA
Convert SUMO edge IDs to actual road names using edge.getName().

IMPORTANT: Use this after congestion analysis to show human-readable road names!

This tool maps SUMO's technical edge IDs to real-world street names,
making analysis results much more understandable and actionable.

Args:
    edge_ids: List of SUMO edge IDs to convert (e.g., ["194926855#1", "420901920#0"])
    net_file: Network file path used in simulation.
              When working with DB data, get this from:
              SELECT net_file FROM simulations WHERE simulation_id = '<your_sim_id>'

Returns:
    Dict mapping edge_id → road_name

Example workflow:
    1. SQL query for Top 10 density:
       read_query("SELECT edge_id, avg_density FROM edge_metrics ORDER BY avg_density DESC LIMIT 10")
       → ["194926855#1", "1030139836#1", ...]

    2. Get net_file from DB (if using DB data):
       read_query("SELECT net_file FROM simulations WHERE simulation_id = 'baseline'")
       → "/path/to/network.net.xml"

    3. Convert to road names:
       get_road_names_tool(
           edge_ids=["194926855#1", "1030139836#1", ...],
           net_file="/path/to/network.net.xml"  # Use actual path from step 2 or user-provided
       )
       → {"194926855#1": "9th Avenue", "1030139836#1": "Broadway", ...}

    4. Present results:
       "Top 10 Congested Roads:
        1. 9th Avenue: 800 veh/km
        2. Broadway: 731 veh/km
        ..."

Note:
    - Returns "Unnamed Road" if road name not set in network
ParametersJSON Schema
NameRequiredDescriptionDefault
edge_idsYes
net_fileYes

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It discloses that the tool maps edge IDs to road names, returns 'Unnamed Road' if not set, and provides example inputs/outputs. However, it does not mention authorization needs or whether it modifies data (it appears read-only, but not stated).

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured, starting with a clear purpose, then an important note, parameter details, return info, and an example workflow. Every sentence adds value; no extraneous content. It is appropriately sized for the tool's simplicity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has only 2 parameters and no output schema, the description fully covers its usage: explains both parameters, return format (dict mapping), provides a detailed workflow example, and notes the 'Unnamed Road' behavior. It is complete and self-contained.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema has 0% description coverage, so the description must compensate. It explains edge_ids as 'List of SUMO edge IDs to convert' with examples, and net_file as 'Network file path used in simulation' with a SQL hint for DB users. This adds substantial meaning beyond the raw schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'Convert SUMO edge IDs to actual road names using edge.getName().' It clearly defines the tool's purpose as mapping technical edge IDs to human-readable names, distinguishing it from siblings like get_edge_ids_from_road_name_tool which does the reverse.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes an 'IMPORTANT' note stating 'Use this after congestion analysis to show human-readable road names!' providing clear context for when to use the tool. It also gives an example workflow showing its role after data queries, but does not explicitly exclude alternative scenarios.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

net_convertA
[Step 2/5] Convert OSM data to SUMO network format (.net.xml).

Converts the raw .osm file from osm_extract() into a SUMO-compatible
road network using netconvert. Applies road type filtering and UTM projection.

Previous step: osm_extract() to get .osm file and bbox.
Next step: trip_generate() to create traffic demand on this network.

=== PARAMETERS ===
- osm_file (REQUIRED): Path to .osm file (from osm_extract result)
- city_en: English name for output file naming (auto-derived from osm_file if omitted)
- bbox: Bounding box [west, south, east, north] for boundary trimming.
  Pass the bbox from osm_extract result to trim roads at area boundaries.
  If omitted, roads may extend beyond the intended area.

=== RETURNS ===
- net_file: Path to generated .net.xml file (pass to trip_generate and sumo_runner)
ParametersJSON Schema
NameRequiredDescriptionDefault
bboxNo
city_enNo
osm_fileYes
output_dirNooutput/networks

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses conversion details (road type filtering, UTM projection) and consequence of omitting bbox (roads extending beyond area). No annotations are provided, so description carries the burden, but it omits side effects like file overwriting or error scenarios.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with clear sections (step, description, parameters, returns). Every sentence adds value, though some could be merged. No redundant information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers pipeline context, parameter usage, and return value. Given the tool's moderate complexity and presence of output schema, the description is complete enough for agent use. Missing error handling or performance notes, but not critical.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description compensates with a dedicated PARAMETERS section explaining osm_file, city_en, and bbox. output_dir is not explained, though it has a default. Overall, adds significant meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it converts OSM data to SUMO network format, identifies its role as step 2/5, and distinguishes it from sibling tools like osm_extract and trip_generate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit pipeline context (previous/next steps), explains when to use bbox parameter (to trim roads), and mentions auto-derivation for city_en. However, it lacks explicit guidance on when to avoid using this tool or alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

network_summary_toolA
Get a comprehensive summary of a SUMO network.

Use when user asks about the network, its size, or what roads are included.
Returns edge count, junction count, total road length, bounding box, and road name list.

Args:
    net_file: Path to the SUMO network file (.net.xml)

Returns:
    Dict with network statistics and road names
ParametersJSON Schema
NameRequiredDescriptionDefault
net_fileYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden. It discloses the return values: 'edge count, junction count, total road length, bounding box, and road name list.' It implies read-only behavior (summary) and does not hide side effects. It could mention file validity requirements, but overall transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise: three short paragraphs. The first sentence states the purpose, the second gives usage guidance, and the third lists arguments and returns. Every sentence adds value; no redundant or vague wording.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The tool is simple (1 parameter, no output schema), and the description covers its purpose, usage, input, and output. It could mention that the net_file must exist and be valid, but that is implicit. For a lightweight summary tool, it is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate. It adds meaning by stating 'Path to the SUMO network file (.net.xml)' for the single parameter net_file, clarifying it is a file path and specifying the expected format. This goes beyond the schema's bare type 'string'.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's function: 'Get a comprehensive summary of a SUMO network.' It specifies the verb 'Get' and the resource 'comprehensive summary of a SUMO network.' The usage guidance explicitly says 'Use when user asks about the network, its size, or what roads are included,' distinguishing it from sibling tools like visualize_net_tool or get_road_names_tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit when-to-use guidance: 'Use when user asks about the network, its size, or what roads are included.' While it does not explicitly list when not to use or alternatives, the context of sibling tools makes it clear that this tool is for summaries, not for conversion or visualization.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

osm_extractA
[Step 1/5] Extract OpenStreetMap (OSM) road network data for a given area.

This is the FIRST step in the simulation pipeline. It downloads or extracts
raw OSM data (.osm file) for the specified geographic area.

Next step: Use net_convert() to convert the .osm file to SUMO .net.xml format.

=== AREA SPECIFICATION (priority order) ===
1. bbox: Direct coordinates [west, south, east, north]
   Example: [127.015, 37.490, 127.040, 37.506]
2. od_data_file: Auto-compute bbox from OD CSV coordinate columns
   (use column_mapping if columns are not named O_lon, O_lat, D_lon, D_lat)
3. zone_shp_file: Auto-compute bbox from shapefile geometry bounds
4. city + radius: Geocode city name and use radius in KILOMETERS (not meters!)
   Example: city="Gangnam Station", radius=1.5

=== PARAMETERS ===
- city_en (REQUIRED): English name for file naming. Example: "gangnam", "manhattan_midtown"
- bbox: [west, south, east, north] bounding box coordinates
- city: City/location name for geocoding (e.g., "강남역", "Times Square")
- radius: Radius in km (used with city parameter)
- od_data_file: Path to OD CSV file (bbox auto-computed from coordinate ranges)
- zone_shp_file: Path to zone shapefile (bbox auto-computed from geometry)
- column_mapping: Column name mapping for non-standard OD CSV files.
  Keys are standard names, values are actual column names in the CSV.
  Example: {"O_lon": "pickup_lng", "O_lat": "pickup_lat", "D_lon": "dropoff_lng", "D_lat": "dropoff_lat"}

=== PIPELINE CONTEXT ===
RandomOD:     osm_extract(bbox/city+radius) → net_convert → trip_generate → route_generate → sumo_runner
RealOD-coord: osm_extract(od_data_file, column_mapping) → net_convert → trip_generate → route_generate → sumo_runner
RealOD-zone:  osm_extract(zone_shp_file) → net_convert → trip_generate → route_generate → sumo_runner

=== RETURNS ===
- osm_file: Path to extracted .osm file (pass to net_convert)
- bbox: Computed bounding box (pass to net_convert for boundary trimming)
- tag: File naming tag derived from city_en
ParametersJSON Schema
NameRequiredDescriptionDefault
bboxNo
cityNo
radiusNo
city_enYes
output_dirNooutput/networks
od_data_fileNo
zone_shp_fileNo
column_mappingNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description bears full burden. It discloses that the tool downloads/extracts raw OSM data, returns osm_file, bbox, and tag, and describes the pipeline. It doesn't mention destructive actions, authentication, or rate limits, but these are less relevant for a simulation data extraction tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is slightly verbose with some redundancy (pipeline context appears twice), but it is well-structured with sections and front-loaded with the step number and purpose. Every section adds value, though some trimming could improve conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (8 parameters, nested objects, multiple area specification methods), the description is thorough. It explains return values, pipeline context, examples, and parameter dependencies. The output schema is provided, so return values are clear.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description adds extensive meaning: it explains all area specification methods, required/optional parameters, usage examples, and purpose of each parameter. This compensates fully for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it extracts OSM road network data for a given area and is the first step in the simulation pipeline. It distinguishes itself from siblings by referencing next steps like net_convert and providing a pipeline context, making the purpose specific and differentiated.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a detailed priority order for area specification (bbox, od_data_file, zone_shp_file, city+radius) with examples, indicating when each method is appropriate. While it doesn't explicitly state when not to use the tool, the context of being the first pipeline step implies usage conditions.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

reduce_lanes_toolA
Reduce lanes on road segments with two modes.

✅ Trip file can be reused - edges still exist, only lane count changed.
Workflow: reduce_lanes → sumo_runner (reuse existing trip file)

**MODE 1: Relative Reduction (RECOMMENDED for most policies)**
- reduce_by: Reduce N lanes from each segment
- Example: reduce_by=1 → 5→4, 3→2, 2→1, 1→1 (balanced reduction)

**MODE 2: Absolute Reduction (for special cases)**
- remain_lanes: Set all segments to N lanes
- Example: remain_lanes=1 → 5→1, 3→1, 2→1, 1→1 (extreme reduction)

REALISTIC USAGE: Use reference_location + radius_km for localized lane reduction!

Examples:
    # BALANCED POLICY: Reduce 1 lane from each segment
    reduce_lanes_tool(
        net_file="gangnam_station.net.xml",
        target_road_name="테헤란로",
        reference_location="강남역",
        radius_km=0.5,
        reduce_by=1  # Each segment: 5→4, 3→2, 2→1, 1→1
    )
    # Then: sumo_runner (reuse trip file - no trip_generate needed!)

    # EXTREME POLICY: Set all segments to 1 lane
    reduce_lanes_tool(
        net_file="gangnam_station.net.xml",
        target_road_name="테헤란로",
        reference_location="강남역",
        radius_km=0.5,
        remain_lanes=1  # All segments: 5→1, 3→1, 2→1, 1→1
    )
    # Then: sumo_runner (reuse trip file - no trip_generate needed!)

Args:
    net_file: Network file path
    route_file: Route file path (optional, can be reused after this tool)
    output_dir: Output directory for results
    target_road_name: Road name to reduce lanes (e.g., '테헤란로')
    edge_ids: Specific edge IDs (optional)
    reference_location: Reference point (optional, e.g., "강남역")
    radius_km: Radius in km (optional, e.g., 0.5)
    reduce_by: Number of lanes to reduce from each segment (RECOMMENDED!)
    remain_lanes: Number of lanes to remain (ABSOLUTE - use with caution)
ParametersJSON Schema
NameRequiredDescriptionDefault
edge_idsNo
net_fileYes
radius_kmNo
reduce_byNo
output_dirNooutput/networks
route_fileNo
remain_lanesNo
target_road_nameNo
reference_locationNo

TDQS

A4.2/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It explains that edges still exist and only lane count changes, that trip files can be reused, and provides examples of reduction behavior. However, it does not disclose what happens if reduce_by exceeds existing lanes, whether the operation is reversible, or any resource/permission requirements.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with sections, bullet points, and examples, making it easy to scan. It is detailed but not excessively verbose. The examples are particularly helpful. However, the length could be slightly reduced by merging some duplicate points (e.g., the workflow note appears twice).

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers usage and modes well but lacks information about the output (e.g., what files are produced, return value). With no output schema, the agent may not know what to expect after invocation. Error handling or edge cases (e.g., invalid road name, insufficient lanes) are also not addressed.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema coverage, the description adds significant meaning: it explains reduce_by and remain_lanes with examples, gives default for output_dir, and clarifies optional parameters like route_file (can be reused). However, some parameters like edge_ids and route_file receive minimal explanation beyond the args list.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Reduce lanes on road segments' and distinguishes between two modes (relative and absolute). It is specific about the resource (road segments) and verb (reduce lanes), and the context of sibling tools (e.g., edge_edit_tool, speed_limit_edit_tool) implies this is unique for lane reduction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit usage context: it recommends Mode 1 over Mode 2, suggests using reference_location and radius_km for localized reduction, and gives a workflow hint (reduce_lanes → sumo_runner with reusable trip file). However, it does not explicitly state when NOT to use this tool (e.g., if lanes cannot be reduced below 1) or provide alternatives beyond the workflow suggestion.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

route_analysis_toolA
Analyze the optimal route between two locations in the network.

Accepts place names (e.g., "강남역", "Gangnam Station") or road names (e.g., "테헤란로").

TWO ROUTING MODES:
1. "distance" (default): Shortest path by edge length. Works without simulation data.
2. "traveltime": Optimal path using actual simulation results (edgedata XML) as edge weights.
   Requires weight_file (edgedata XML from a previous simulation).
   Can also use other attributes: "density", "CO2_abs", etc.

Use cases:
- "What is the shortest path from Gangnam Station to Samseong Station?" -> routing_mode="distance"
- "What is the optimal path based on actual travel time?" -> routing_mode="traveltime", weight_file=edgedata.xml
- "What is the lowest-CO2 path?" -> routing_mode="traveltime", weight_attribute="CO2_abs"
- "How does the path change after a road closure?" -> compare_net_file + compare_weight_file

In web mode, use [SHOW_ROUTE:edges|color|net_file_name] marker to visualize the result.
Always include net_file_name from the result so routes render on the correct network.

Args:
    net_file: Network file path
    origin: Origin location (place name, landmark, or road name)
    destination: Destination location (place name, landmark, or road name)
    routing_mode: "distance" (default, edge length) or "traveltime" (simulation-weighted)
    weight_file: Edgedata XML file for weighted routing (required when routing_mode="traveltime").
                 Use the netstate/edgedata file from simulation output.
    weight_attribute: Attribute to use as edge weight (default: "traveltime").
                     Other options: "density", "CO2_abs", "fuel_abs", etc.
    compare_net_file: Optional second network for before/after route comparison
    compare_weight_file: Optional edgedata for the comparison network

Returns:
    Dict with route edges, distance, time, road names.
    If comparison provided, includes both routes and diff.
ParametersJSON Schema
NameRequiredDescriptionDefault
originYes
net_fileYes
destinationYes
weight_fileNo
routing_modeNodistance
compare_net_fileNo
weight_attributeNotraveltime
compare_weight_fileNo

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It explains that distance mode works without simulation data, and traveltime requires weight_file. It also describes return format and web visualization marker. Could be improved by explicitly stating no side effects or limitations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with sections, but somewhat long. However, given the tool's complexity (8 parameters, two modes, comparison feature), all content is necessary and front-loaded. Minor redundancy could be trimmed, but overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Despite no output schema, the description describes the return dict (route edges, distance, time, road names) and comparison results. It covers all parameters, modes, and special instructions for web mode, making the tool fully understandable without additional context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description adds extensive meaning to all 8 parameters: explains defaults, required vs optional, formats, and usage context (e.g., weight_file required when routing_mode='traveltime'). This fully compensates for lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: analyzing optimal routes between two locations. It specifies input types (place names, road names) and two routing modes (distance and traveltime), distinguishing it from sibling tools like network_summary_tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit use cases with examples, explains when to use each routing mode, and mentions comparison scenarios. Includes guidance for web mode marker, making it easy for an agent to decide when and how to invoke the tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

route_generateA
[Step 4/5] Generate routes from trips using SUMO's duarouter.

Assigns shortest-path routes to each trip based on the road network.
Converts trips.xml → routes.rou.xml which is required for simulation.

Previous step: trip_generate() to get .trips.xml file.
Next step: sumo_runner() to run the simulation with net_file and route_file.

=== PARAMETERS ===
- net_file (REQUIRED): Path to SUMO network file (.net.xml, from net_convert)
- trip_file (REQUIRED): Path to trip file (.trips.xml, from trip_generate)

=== RETURNS ===
- route_file: Path to generated .rou.xml file (pass to sumo_runner)
ParametersJSON Schema
NameRequiredDescriptionDefault
net_fileYes
trip_fileYes
output_dirNooutput/trips

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden. It states that routes are assigned using shortest-path and that the output is a .rou.xml file. It does not disclose potential side effects, resource usage, or error conditions. Basic behavioral traits are implied but insufficient.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, well-structured with sections for step context, parameters, and returns. Every sentence adds value without redundancy. The workflow markers are efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's role in a pipeline, the description adequately covers purpose, parameters, and return value. It connects to sibling tools. The only gap is the undocumented output_dir parameter. The presence of an output schema (context signal) does not affect the score as it is not shown.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description must compensate. It explains net_file and trip_file with provenance (from net_convert and trip_generate). The third parameter output_dir is not mentioned, though it has a default. The description adds meaningful context beyond the schema, but missing one parameter prevents a higher score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states 'Generate routes from trips using SUMO's duarouter' and explains the conversion from trips.xml to routes.rou.xml. It distinguishes the tool from siblings by referencing the workflow steps (trip_generate and sumo_runner).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear workflow context: 'Previous step: trip_generate()' and 'Next step: sumo_runner()'. This tells the agent when to use the tool. However, it does not explicitly mention alternatives or scenarios where the tool should not be used.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

simulation_report_toolA
Generate a comprehensive HTML simulation analysis report from SQLite database.

This is the FINAL deliverable of a simulation analysis session.
It summarizes ALL scenarios in the database with KPIs, comparisons, congestion analysis, and emissions.

The report is a standalone dark-themed HTML file that can be:
- Viewed in the web interface (click from file tree)
- Opened in any browser
- Shared as a file

IMPORTANT — Before calling this tool:
1. Query the database (read_query) to understand the simulation results
2. Write an executive_summary (1-2 paragraphs, English, professional tone) that covers:
   - Context: what area was studied and what problem was investigated
   - Key findings: most significant results from scenario comparison
   - Risks/concerns: any metrics that worsened or areas of concern
   - Recommendation: what action should urban stakeholders take based on the analysis
   Focus on insights useful for urban decision-makers (policymakers, planners, city officials).
   Do NOT list raw numbers — interpret them.

Args:
    db_path: Path to SQLite database file
    executive_summary: LLM-generated executive summary for urban stakeholders (English, 1-2 paragraphs)
    output_dir: Output directory for report files

Returns:
    Dict with report_file path and metadata
ParametersJSON Schema
NameRequiredDescriptionDefault
db_pathYes
output_dirNooutput/reports
executive_summaryNo

TDQS

A5/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description fully explains the tool's behavior: it generates a standalone dark-themed HTML file with KPIs, comparisons, congestion analysis, and emissions. It also describes output usage (view in web interface, browser, share). No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a title, overview, bullet-point prerequisites, and args/returns section. It is concise yet comprehensive, with no redundant information. The most important information is front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description explains the return type (dict with file path and metadata) and the report's nature (HTML, dark-themed). It covers all aspects: input requirements, output, and file characteristics. The tool is a simple reporting tool, and the description is complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema coverage, the description includes an 'Args' section with clear explanations for each parameter: db_path (path to database), executive_summary (LLM-generated summary with specific content), output_dir (output directory with default). This adds significant meaning beyond schema names.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states it generates a comprehensive HTML simulation analysis report from SQLite database, which is a specific verb+resource. It distinguishes itself from sibling tools like visualize_* and analysis tools by being the final deliverable summarizing all scenarios.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly provides an 'IMPORTANT' section detailing prerequisites: query the database and write an executive summary before calling the tool. This clearly guides when and how to use the tool, making it the final step in analysis.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

speed_limit_edit_toolA
Modify speed limits on specific road segments (supports partial application).

✅ Trip file can be reused - edges still exist, only speed limit changed.
Workflow: speed_limit_edit → sumo_runner (reuse existing trip file)

REALISTIC USAGE: Use reference_location + radius_km for localized speed limit changes!

Examples:
    # REALISTIC: Reduce speed to 40km/h on 500m of Teheran-ro near Gangnam Station
    speed_limit_edit_tool(
        net_file="gangnam_station.net.xml",
        target_road_name="테헤란로",
        reference_location="강남역",
        radius_km=0.5,
        new_speed_kmph=40.0
    )
    # Then: sumo_runner (reuse trip file - no trip_generate needed!)

Args:
    net_file: Network file path
    route_file: Route file path (optional, can be reused after this tool)
    output_dir: Output directory for results
    target_road_name: Road name (e.g., '테헤란로')
    edge_ids: Specific edge IDs (optional)
    reference_location: Reference point (optional, e.g., "강남역")
    radius_km: Radius in km (optional, e.g., 0.5)
    new_speed_kmph: New speed limit in km/h (e.g., 40.0)
ParametersJSON Schema
NameRequiredDescriptionDefault
edge_idsNo
net_fileYes
radius_kmNo
output_dirNooutput/networks
route_fileNo
new_speed_kmphNo
target_road_nameNo
reference_locationNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses non-destructive behavior: 'Trip file can be reused - edges still exist, only speed limit changed.' No annotations provided, so description carries burden. Could mention if modifications are reversible or output file location, but overall transparency is good.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with sections: workflow, realistic usage, examples, and Args list. Front-loaded with purpose. Every sentence adds value, no fluff. Appropriate length for a complex tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers main use cases, workflow, and parameter details. With 8 parameters and no output schema, description provides enough context for typical usage. However, it could explicitly mention what the tool outputs (e.g., modified net file) to be fully complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% description coverage, but description adds brief yet useful parameter explanations with example values (e.g., reference_location='강남역'). Clarifies optionality and usage for all parameters, compensating for schema gaps.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Explicitly states 'Modify speed limits on specific road segments' with a specific verb and resource. Distinguishes from siblings like edge_edit_tool by focusing on speed limits and mentioning partial application and reuse of trip files.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a clear workflow (speed_limit_edit → sumo_runner) and realistic usage advice (use reference_location and radius_km). Examples show how to call the tool and interpret parameters. Explicitly states when to reuse trip file, guiding against unnecessary regeneration.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

sumo_runnerA
[Step 5/5] Run SUMO traffic simulation using TraCI.

Executes the simulation with the generated network and routes.
Captures vehicle position frames for post-simulation replay visualization.

Previous step: route_generate() to get .rou.xml file.

=== PARAMETERS ===
- net_file (REQUIRED): SUMO network file (.net.xml, from net_convert)
- route_file: Route file (.rou.xml, from route_generate) — preferred over trip_file
- trip_file: Trip file (.trips.xml) — use only if route_file is unavailable
- duration: Simulation duration in seconds (default: 3600 = 1 hour)
- additional_files: List of additional XML files (e.g., traffic light programs)
- policy_type: Set to "baseline" to exclude additional files

=== RETURNS ===
- output_files: List of result file paths [tripinfo, edgedata, edgedata_emission]
- summary_xml: Path to summary.xml file. ALWAYS pass this to xml_to_sqlite_tool(summary_xml=...) for dashboard time-series charts.
- replay_file: JSON file for web visualization replay
- simulation_time: Wall-clock execution time in seconds
ParametersJSON Schema
NameRequiredDescriptionDefault
durationNo
net_fileYes
trip_fileNo
output_dirNooutput/simulations
route_fileNo
policy_typeNo
additional_filesNo

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It mentions capturing frames and returning files and execution time, but does not discuss computational cost, potential side effects, or required permissions. The description adds some context but lacks depth for a simulation tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is structured with sections for purpose, execution, parameters, and returns. It is fairly concise given the complexity, though it could be slightly tighter by removing redundancy in parameter descriptions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the 7 parameters, no schema descriptions, and no output schema, the description is quite complete. It explains each parameter, lists return values, and even advises on next steps. The only missing piece is the output_dir parameter explanation and more detail on return file formats.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description compensates by explaining each parameter's purpose, format, and relationships (e.g., route_file preferred over trip_file). However, the output_dir parameter is not described in the description, which is a minor gap.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool 'Run SUMO traffic simulation using TraCI' with a specific verb and resource. It distinguishes from sibling tools which are preprocessing or analysis, as no other sibling runs the simulation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates the previous step (route_generate()) and provides guidance on when to use route_file vs trip_file. It implies usage as the final simulation step but does not explicitly state when not to use or mention alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tls_adaptation_toolB
Run SUMO tlsCycleAdaptation.py to optimize traffic light cycles and generate an additional XML file.

Args:
    net_file: Network file path (tag will be extracted from filename)
    route_file: Route file path
    output_dir: Output directory for results
ParametersJSON Schema
NameRequiredDescriptionDefault
net_fileYes
output_dirNooutput/simulations
route_fileYes

TDQS

B3.1/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description carries full burden but provides minimal behavioral detail. It only states the tool runs a script and generates output, omitting side effects, error conditions, permissions, or performance considerations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with a one-sentence purpose followed by a clear Args list. It is front-loaded and avoids unnecessary words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description lacks important context: no output schema, no description of the generated XML file's name or content, no mention of system dependencies (SUMO), and no error handling information. This is insufficient for an agent to safely invoke the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description adds brief explanations for each parameter beyond the schema titles (e.g., 'tag will be extracted from filename' for net_file). However, it does not elaborate on constraints, default behavior, or format requirements, and schema coverage is 0%.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states it runs a specific script (tlsCycleAdaptation.py) to optimize traffic light cycles and generates an XML file. This clearly identifies the verb and resource, and distinguishes it from sibling tools like tls_offset_tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. It does not mention prerequisites, context, or when not to use it.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

tls_offset_toolC
Run SUMO tlsCoordinator.py to optimize traffic light offsets and generate an additional XML file.

Args:
    net_file: Network file path (tag will be extracted from filename)
    route_file: Route file path
    output_dir: Output directory for results
ParametersJSON Schema
NameRequiredDescriptionDefault
net_fileYes
output_dirNooutput/simulations
route_fileYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must carry the full burden. It mentions running an external script and generating an XML file but omits details like potential side effects, execution time, or permissions. It does not disclose whether input files are modified.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is short with a single line of purpose followed by a bullet list of arguments. It is efficient with no redundant information, though the structure could be slightly improved by merging into a paragraph.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool runs an external script and generates output, the description is incomplete. It does not explain what the generated XML file contains, dependencies (e.g., SUMO installation), or any side effects. Lack of output schema also reduces completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must add meaning. It provides brief context for each parameter (e.g., tag extraction for net_file, output directory for results). However, it lacks format constraints or further explanation, leaving gaps for a 3-parameter tool.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states it runs a SUMO script to optimize traffic light offsets and generate an XML file. The verb 'optimize' and resource 'traffic light offsets' are clear, but it doesn't explicitly distinguish from the sibling tls_adaptation_tool, which may have overlapping functionality.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives (e.g., tls_adaptation_tool). Prerequisites or context (e.g., after route generation) are not mentioned.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

trip_generateA
[Step 3/5] Generate trip demand (trips.xml) for SUMO simulation.

Creates origin-destination trip definitions. This tool ONLY generates trips —
route assignment is done separately by route_generate().

Previous step: net_convert() to get .net.xml file.
Next step: route_generate() to assign routes to trips.

=== THREE MODES ===

1. RandomOD — Random trip generation:
   - trip_type: "RandomOD"
   - traffic_condition (REQUIRED): "light" | "medium" | "heavy"
     * light: ~20% of edge count (rural, off-peak)
     * medium: ~80% of edge count (typical urban)
     * heavy: ~150% of edge count (rush hour, dense urban)

2. RealOD-coordinate — Real OD from coordinate CSV:
   - trip_type: "RealOD", od_type: "coordinate"
   - od_data_file: Path to CSV file
   - Default columns: O_lon, O_lat, D_lon, D_lat, O_time_relative
   - Use column_mapping if your CSV has different column names

3. RealOD-zone — Real OD from zone CSV + shapefile:
   - trip_type: "RealOD", od_type: "zone"
   - od_data_file: Path to OD CSV file
   - zone_shp_file: Path to zone shapefile (.shp)
   - Default columns: h3_lv9_O, h3_lv9_D, O_time_relative
   - Default shapefile ID column: h3_indx
   - Use column_mapping to override any of these

=== COLUMN MAPPING ===
For non-standard CSV files, provide column_mapping to map standard names to actual column names.

Coordinate mode mapping keys:
  "O_lon", "O_lat", "D_lon", "D_lat", "O_time_relative"
Zone mode mapping keys:
  "zone_O", "zone_D", "O_time_relative", "zone_id_column"

Example: {"O_lon": "pickup_lng", "O_lat": "pickup_lat", "D_lon": "dropoff_lng", "D_lat": "dropoff_lat", "O_time_relative": "start_sec"}

=== RETURNS ===
- trip_file: Path to generated .trips.xml file (pass to route_generate)
- trip_count: Number of trips generated
ParametersJSON Schema
NameRequiredDescriptionDefault
od_typeNo
net_fileYes
trip_typeYes
output_dirNooutput/trips
od_data_fileNo
zone_shp_fileNo
column_mappingNo
traffic_conditionNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It transparently describes what the tool does (generates trips, not routes), mentions column mapping, and lists return values (trip_file, trip_count). It could be improved by noting potential errors or performance considerations, but it is generally clear.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is relatively long but well-structured with sections (modes, column mapping, returns). It is front-loaded with the purpose and then goes into details. It could be slightly more concise, but the structure aids readability.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 8 parameters (2 required) and an output schema, the description is fairly complete. It explains modes, column mapping, return values, and workflow steps. It could include default values for output_dir or clarify that net_file must come from net_convert, but overall it is comprehensive.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the tool description explains 6 out of 8 parameters in detail: traffic_condition with values, column_mapping with examples, od_type, trip_type, od_data_file, zone_shp_file. It adds meaning beyond the schema by explaining default columns and mapping keys. However, net_file and output_dir are not explained, and output_dir's default is only in the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Generate trip demand (trips.xml) for SUMO simulation' and distinguishes from sibling tool route_generate by explaining that route assignment is done separately. It also breaks down three distinct modes with specific use cases, making the purpose unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit context: previous step net_convert, next step route_generate. It explains when to use each of the three modes (RandomOD, RealOD-coordinate, RealOD-zone). However, it does not explicitly state when NOT to use this tool or mention alternatives beyond route_generate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

validate_od_coordinates_toolA
Validate a list of coordinates against the SUMO network.

Use this BEFORE generating flows to check which coordinates are within the network
and find the nearest edges. Essential for agentic OD planning — lets you verify
destinations are reachable before proposing them to the user.

Args:
    net_file: SUMO network file path (.net.xml)
    coordinates: List of coordinate dicts, each with:
        - lat (float): Latitude (WGS84)
        - lon (float): Longitude (WGS84)
        - label (str, optional): Human-readable label (e.g., "Lincoln Tunnel")
    search_radius: Search radius in km for nearest edge (default: 0.5)

Returns:
    Dict with:
        - network_bbox: [min_lon, min_lat, max_lon, max_lat]
        - results: List of validation results per coordinate:
            - label, lat, lon
            - in_network: bool
            - nearest_edge: edge ID (or null)
            - distance_m: distance to nearest edge in meters (or null)
            - status: "ok" | "out_of_network" | "no_edge_found"

Example:
    validate_od_coordinates_tool(
        net_file="manhattan.net.xml",
        coordinates=[
            {"lat": 40.7505, "lon": -73.9934, "label": "MSG"},
            {"lat": 40.7425, "lon": -74.0099, "label": "Holland Tunnel"},
            {"lat": 40.7060, "lon": -73.9969, "label": "Brooklyn Bridge"}
        ]
    )
ParametersJSON Schema
NameRequiredDescriptionDefault
net_fileYes
coordinatesYes
search_radiusNo

TDQS

A4.6/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, but the description details the tool's behavior: it validates coordinates, returns network inclusion status, nearest edge, and distance. It does not disclose side effects, but as a validation tool it is likely read-only. The description is comprehensive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (Args, Returns, Example), front-loaded purpose, and no unnecessary sentences. Every part earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 3 parameters, no output schema, and no annotations, the description fully explains input format, output structure, and provides an example. It leaves no gaps for an agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description thoroughly documents all parameters: net_file (SUMO network file), coordinates (list of dicts with lat, lon, label), and search_radius (default 0.5 km). It adds significant meaning beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it validates coordinates against a SUMO network, checks network inclusion, and finds nearest edges. The verb 'validate' with resource 'coordinates' is specific, and it distinguishes from siblings by stating 'Use this BEFORE generating flows'.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly says 'Use this BEFORE generating flows' and 'Essential for agentic OD planning', providing clear context. No when-not-to-use or alternatives are mentioned, but the use case is well-defined.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vehicle_generation_toolA
Add vehicles from source to destination with optimal path calculation.

SUPPORTS TWO MODES:

1. Road Name Mode:
   - Use exact road names (e.g., '테헤란로', '강남대로')
   - Set use_geocoding=False (default)

2. Location Mode (Recommended):
   - Use any location name or place (e.g., '강남역', '코엑스', 'Gangnam Station, Seoul')
   - Uses geocoding to find coordinates, then finds nearest edges
   - Set use_geocoding=True
   - Automatically validates if location is within network bounds

IMPORTANT NOTES:
- Location Mode validates coordinates against network bounds (1km buffer)
- If location is outside network, you'll get a clear error with network bbox info
- Search radius is 300m by default (sufficient for most cases)

Args:
    route_file: Route file path
    net_file: Network file path
    source_location: Source location (road name OR place name)
    destination_location: Destination location (road name OR place name)
    vehicle_id: Vehicle ID prefix (default: "genveh_0")
    depart_time: Departure time in seconds (default: 0.0)
    depart_time_range: Departure time range [min, max] in seconds (optional)
    vehicle_count: Number of vehicles to generate (default: 1)
    output_dir: Output directory for results
    use_geocoding: If True, use location-based mode with geocoding (default: False)
    search_radius: Search radius in km for nearest edge (default: 0.3 = 300m)

Examples:
    Road name mode:
    vehicle_generation_tool(
        route_file="routes.rou.xml",
        net_file="gangnam.net.xml",
        source_location="테헤란로",
        destination_location="강남대로",
        use_geocoding=False
    )

    Location mode (RECOMMENDED):
    vehicle_generation_tool(
        route_file="routes.rou.xml",
        net_file="gangnam.net.xml",
        source_location="강남역",
        destination_location="코엑스",
        use_geocoding=True,
        vehicle_count=20
    )
ParametersJSON Schema
NameRequiredDescriptionDefault
net_fileYes
output_dirNooutput/trips
route_fileYes
vehicle_idNogenveh_0
depart_timeNo
search_radiusNo
use_geocodingNo
vehicle_countNo
source_locationYes
depart_time_rangeNo
destination_locationYes

TDQS

A4.4/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description discloses key behaviors like coordinate validation and error messages, but it does not mention whether files are created or overwritten, or any side effects. With no annotations, the description carries the full burden, and it falls short of fully disclosing behavioral traits.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with clear sections (purpose, modes, important notes, args, examples). It is front-loaded with the core purpose and efficiently uses bullet points and code blocks. No unnecessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (11 parameters, two modes, no output schema) and lack of annotations, the description is remarkably complete. It covers modes, parameters, validation, examples, and error handling, making it fully actionable for an AI agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Since the input schema has 0% description coverage, the description effectively explains all parameters with defaults, meanings, and examples. It provides clear semantics for complex parameters like use_geocoding and search_radius, enabling correct usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Add vehicles from source to destination with optimal path calculation.' It then elaborates with two distinct modes (Road Name and Location), making it easy to understand the tool's unique functionality relative to sibling tools.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on when to use each mode (e.g., 'Location Mode (Recommended)') and offers important notes on validation and error handling. However, it lacks direct comparisons with sibling tools, leaving some ambiguity about when alternatives might be more appropriate.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

vehicle_type_edit_toolC
Reassign vehicle types in the route file according to the electric_ratio.

Args:
    route_file: Route file path
    electric_ratio: Ratio of electric vehicles (0.0 to 1.0)
    output_dir: Output directory for results
ParametersJSON Schema
NameRequiredDescriptionDefault
output_dirNooutput/trips
route_fileYes
electric_ratioYes

TDQS

C2.9/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must fully disclose behavior. It states the tool reassigns vehicle types but does not indicate whether the input file is modified in place, whether it produces output files (though 'output_dir' implies output), or any side effects. No mention of required permissions, data formats, or error conditions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is very short (one line purpose plus parameter list) without extraneous text. It front-loads the purpose. However, as a result it omits necessary detail, so it could be slightly longer to improve completeness without losing conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness2/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 3 parameters, no output schema, and no annotations, the description is too brief. It does not explain the output file structure, whether multiple files are generated, or how electric_ratio is applied (e.g., stochastic assignment?). A user would need to infer or test behavior. Completeness is low given the complexity.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so the description must add meaning beyond parameter titles. The description lists the parameters but only adds a bit of context: electric_ratio gets a range ('0.0 to 1.0') which is not in schema. route_file and output_dir merely repeat the parameter titles. This is marginally helpful but insufficient to fully understand parameter usage.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description states the action ('reassign vehicle types') and the data source ('route file') and the criterion ('electric_ratio'). It clearly distinguishes from sibling editing tools like edge_edit_tool or speed_limit_edit_tool. However, it lacks specificity on what 'reassign' entails (e.g., modifies file or creates new one) and the exact nature of the output.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance on when to use this tool versus alternatives like vehicle_generation_tool or flow_generation_tool. No conditions, prerequisites, or exclusions are mentioned. The agent must infer usage from name alone.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

visualize_edgedata_toolA
🎨 Visualize SUMO edgedata with flexible scaling modes for comparison.

⚠️ IMPORTANT: Only use when user EXPLICITLY requests heatmap/visualization!
- User says "show heatmap", "visualize density", "show congestion map" → Use this
- User asks "which road is congested?" -> Do NOT use; answer with text from SQL query

**SCALE MODES:**

1. **'auto'** (default): Dynamic scale from current file
   - Best for: Single simulation analysis
   - Scale: Optimized for current data range

2. **'unified'**: Consistent scale across multiple files
   - Best for: Policy comparison (before/after)
   - Requires: comparison_files parameter
   - Example: Compare baseline vs policy A vs policy B

3. **'fixed'**: User-defined fixed scale
   - Best for: Standardized reports, academic papers
   - Requires: min_value and max_value parameters
   - Example: Always use [0, 100] for all simulations

**USE CASES:**

# Single simulation analysis (auto scale)
visualize_edgedata_tool(..., scale_mode="auto")
→ Optimized color contrast for this simulation

# Policy comparison (unified scale)
visualize_edgedata_tool(
    edgedata_file="after.xml",
    scale_mode="unified",
    comparison_files=["before.xml"]
)
→ Same colors mean same values across both

# Standardized scale (fixed)
visualize_edgedata_tool(..., scale_mode="fixed", min_value=0, max_value=100)
→ All simulations use [0, 100] scale

Args:
    net_file: Path to the SUMO network file (.net.xml)
    edgedata_file: Path to the SUMO edgeData output file (.xml)
    attribute: Attribute to visualize (e.g., 'density', 'speed', 'CO2_abs')
    output_dir: Output directory for visualization files
    scale_mode: Scale mode ('auto' | 'unified' | 'fixed')
    comparison_files: List of files for unified scale (for 'unified' mode)
    min_value: Minimum value for fixed scale (for 'fixed' mode)
    max_value: Maximum value for fixed scale (for 'fixed' mode)
ParametersJSON Schema
NameRequiredDescriptionDefault
net_fileYes
attributeNodensity
max_valueNo
min_valueNo
output_dirNooutput/visualizations
scale_modeNoauto
edgedata_fileYes
comparison_filesNo

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It explains scale modes and parameters clearly, but does not explicitly state whether the tool is read-only or any side effects. However, as a visualization tool, this is reasonable.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with sections, but slightly verbose due to repeated examples. Front-loaded with purpose and warnings. Every part is justified.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With 8 parameters, no output schema, and no annotations, the description provides comprehensive coverage: all parameters explained, use cases, scale modes, and examples. It fully compensates for the lack of structured metadata.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description's 'Args' section explains all 8 parameters with context, default values, and examples. This adds significant meaning beyond the schema's bare types.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it visualizes SUMO edgedata with flexible scaling modes. It distinguishes from siblings like visualize_net_tool by explicitly focusing on edgedata and visualization.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use (user requests heatmap/visualization) and when-not-to-use (answer textually to 'which road is congested?'), with alternative approaches. Also includes use cases for each scale mode.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

visualize_edge_toolA
Visualize a SUMO network file with selected edges highlighted and save as PNG image.

Only use when user EXPLICITLY requests edge visualization!
- User says "show edge details", "visualize this road" → Use this
- User asks "which road is congested?" → Do NOT use, answer with text

Args:
    net_file: Path to the SUMO network file (.net.xml)
    road_name: Name of the road to highlight
    output_dir: Output directory for visualization files
ParametersJSON Schema
NameRequiredDescriptionDefault
net_fileYes
road_nameYes
output_dirNooutput/visualizations

TDQS

A3.9/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must disclose behavioral traits. It states the tool highlights edges and saves a PNG, which implies file creation, but does not mention side effects like overwriting behavior, required file permissions, or whether the network file is modified. Basic transparency, but missing details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is front-loaded with the purpose, followed by bullet-point usage guidelines and an args list. It is relatively concise, though the args section is somewhat redundant with the schema (justified by lack of schema descriptions). Minor room for trimming.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 3 parameters, no output schema, and no annotations, the description covers the basics: what it does, when to use, and parameter meanings. However, it omits output file naming, return value (if any), and prerequisites (e.g., net_file must exist). Incomplete for full context.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage, but the description's Args section adds one-line explanations for all three parameters (net_file, road_name, output_dir), which adds meaning beyond the schema. However, the descriptions are minimal (e.g., road_name format not specified), so not a perfect score.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states 'Visualize a SUMO network file with selected edges highlighted and save as PNG image,' providing a specific verb and resource. However, it does not explicitly differentiate between sibling tools like visualize_edgedata_tool or visualize_net_tool, leaving some ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance with examples of when to use ('show edge details', 'visualize this road') and when not to use ('which road is congested?' → answer with text). This strongly aids the agent in correct invocation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

visualize_net_toolA
Visualize a SUMO network file and save as PNG image.

⚠️ IMPORTANT: Only use when user EXPLICITLY requests visualization!
- User says "show network map", "visualize network" → Use this
- User asks about simulation results → Do NOT use, answer with text

Args:
    net_file: Path to the SUMO network file (.net.xml)
    output_dir: Output directory for visualization files
ParametersJSON Schema
NameRequiredDescriptionDefault
net_fileYes
output_dirNooutput/visualizations

TDQS

A3.8/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries full burden for behavioral disclosure. It states the tool visualizes and saves a PNG, but fails to mention whether it is read-only, modifies any files, requires network connectivity, or has side effects like creating directories. The destructive hint and read-only hint are absent, leaving the agent unsure of safety.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (6 lines) with a clear hierarchy: single-sentence purpose, usage warning, and parameter list. Every sentence adds value, and the warning is front-loaded for quick agent comprehension.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema and 0% schema coverage, the description should provide more context about the tool's output (e.g., file path or success message) and error handling. While it covers usage and parameters, it omits result details, making it incomplete for an agent to understand the full tool behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The schema has 0% description coverage (only titles), so the description's Args section adds crucial meaning: it clarifies that net_file expects a '.net.xml' path and output_dir is the directory for visualization files. This fills a significant gap, though it doesn't explain the default behavior of output_dir.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action ('Visualize a SUMO network file and save as PNG image'), specifying the resource as a SUMO network file. While it doesn't explicitly differentiate from sibling visualization tools like visualize_edge_tool, the tool name ('net_tool') and the focus on 'network file' provide adequate distinction.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit, actionable guidance: 'Only use when user EXPLICITLY requests visualization!' with concrete examples of when to use ('show network map', 'visualize network') and when not to use ('questions about simulation results'). This is exemplary for guiding an AI agent.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

visualize_policy_target_toolA
Visualize policy target area using SUMO's built-in visualization.

Only use when user EXPLICITLY requests to preview policy area!
- User says "show me which roads will be affected" → Use this
- User just wants to apply policy → Do NOT use, proceed with policy tool

This tool helps visualize which road segments will be affected by a policy
before actually applying it. Essential for confirming policy target area!

VISUALIZATION:
- Shows ONLY the selected road segments within the specified radius
- Uses SUMO's standard plot_net_selection.py for consistent styling
- Clean, focused view of the policy target area

USE CASES:
1. "Show me which part of 테헤란로 near 강남역 within 300m will be affected"
2. "Visualize policy target before deleting road segments"
3. "Preview lane reduction area before applying"

REALISTIC WORKFLOW:
Step 1: Use this tool to visualize policy area
Step 2: Confirm the target area is correct
Step 3: Apply policy using edge_edit_tool/reduce_lanes_tool/speed_limit_edit_tool

Args:
    net_file: Network file path
    target_road_name: Road name (e.g., "테헤란로", "Teheran-ro")
    reference_location: Reference point (e.g., "강남역", "Gangnam Station")
    radius_km: Radius in km (e.g., 0.3 for 300m)
    output_dir: Output directory

Returns:
    PNG file showing selected road segments only

EXAMPLE:
visualize_policy_target_tool(
    net_file="gangnam_station.net.xml",
    target_road_name="테헤란로",
    reference_location="강남역 교차로",
    radius_km=0.3
)
-> Shows: Only the 300m segment of Teheran-ro near Gangnam Station (selected segments)
ParametersJSON Schema
NameRequiredDescriptionDefault
net_fileYes
radius_kmNo
output_dirNooutput/visualizations
target_road_nameYes
reference_locationNo

TDQS

A4.5/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. Describes that it uses SUMO's standard plot_net_selection.py, shows only selected segments, and returns a PNG. Implies non-destructive behavior, but does not explicitly state it does not modify the network. Minor gap.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is somewhat lengthy but well-structured with sections (purpose, usage, visualization details, use cases, workflow, args, returns, example). Each section adds value, and the purpose is front-loaded. Could be slightly trimmed without losing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 5 parameters, 0% schema coverage, no output schema, and multiple sibling visualization tools, the description covers purpose, usage, parameters, return type, and example. Lacks error/performance info but is complete for typical use. Adequate for selecting and invoking the tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0% (all parameters have no descriptions), but the description adds meaning to each parameter through use cases, example, and explanation (e.g., radius_km in km, reference_location as reference point). The example shows how to call the tool, compensating for schema deficiency.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool visualizes policy target area using SUMO's built-in visualization, distinguishes from siblings (e.g., visualize_net_tool) by specifying it shows only selected road segments within a radius, and provides a specific verb+resource combo.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use (user explicitly requests to preview policy area) and when not to use (do not use if user just wants to apply policy). Provides a realistic workflow with steps, making it clear when to invoke this tool versus alternatives.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

web_search_toolA
Search the web using DuckDuckGo. Use this to look up real-world information
that helps with simulation scenario design.

Useful for:
- Venue/facility capacity (e.g., "Madison Square Garden capacity")
- Geographic/infrastructure info (e.g., "bridges connecting Manhattan to Brooklyn")
- Traffic patterns and event schedules
- Road/highway specifications
- Any factual information needed to set realistic simulation parameters

Args:
    query: Search query string. Be specific for better results.
    max_results: Number of results to return (default: 5, max: 10)

Returns:
    List of search results, each with title, url, and snippet.
ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
max_resultsNo

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It states the tool is read-only (search, look up) and returns a list of results, but does not disclose potential rate limits, authentication needs, or that it does not modify any state. For a search tool, this is acceptable but not exhaustive.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise (about 10 lines) with a clear structure: purpose sentence, bullet list of use cases, then Args and Returns. Every sentence adds value; no fluff.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no output schema, the description details the return format (list with title, url, snippet). It provides sufficient context for an AI agent to decide when to use this tool versus siblings. Missing explicit mention of search engine limitations or privacy, but adequate overall.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, yet the description adds meaningful explanations: 'query: Search query string. Be specific for better results.' and 'max_results: Number of results to return (default: 5, max: 10)'. This compensates well for the lack of schema descriptions.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the verb 'search', the resource 'the web using DuckDuckGo', and the context 'simulation scenario design'. It lists specific use cases (venue capacity, geographic info, traffic patterns) which clearly distinguish it from sibling tools that are all simulation-related.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides clear when-to-use guidance with specific examples (venue capacity, geographic info, etc.) and advises on query specificity. However, it does not explicitly state when NOT to use it, though the context of sibling tools implies it is only for external factual lookups.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

xml_to_sqlite_toolA
Convert SUMO XML results to SQLite database for advanced SQL-based analysis.

IMPORTANT: This enables detailed queries that summary statistics cannot answer:
- Top N queries (e.g., "What are the top 10 roads by density?")
- Specific edge analysis (e.g., "What is the congestion level at the Gangnam Station intersection?")
- Comparative analysis (e.g., "How did density change before and after the policy?")
- Temporal analysis (e.g., "How does speed vary across times of day?")
- Road-level aggregation (e.g., "What is the average congestion across all of Teheran-ro?")

DATABASE SCHEMA (IMPORTANT):
- simulations: (simulation_id, created_at, vehicle_count, net_file, route_file, description)
- edge_info: (simulation_id, edge_id, road_name, length, num_lanes, speed_limit)
  * Network topology from .net.xml — enables road-level analysis
  * road_name: Human-readable street name (e.g., "테헤란로", "9th Avenue")
  * length: Edge length in meters
  * num_lanes: Number of lanes
  * speed_limit: Speed limit in km/h
- vehicle_info: (simulation_id, vehicle_id, vehicle_type, fuel_type, origin_edge, destination_edge, origin_road, destination_road)
  * Per-vehicle metadata from tripinfo + network — enables OD and fleet analysis
  * vehicle_type: SUMO vType (e.g., "passenger", "truck")
  * fuel_type: Classified from emissionClass — "gasoline", "diesel", "electric", "unknown"
  * origin_edge / destination_edge: First/last edge IDs
  * origin_road / destination_road: Human-readable road names (from edge_info)
- trips: (simulation_id, trip_id, duration, routeLength, waitingTime, timeLoss, depart, arrival, ...)
- edge_metrics: (simulation_id, edge_id, interval_begin, interval_end, speed, density, waitingTime,
                 timeLoss, occupancy, entered, left, ...)
  * PRIMARY KEY: (simulation_id, edge_id, interval_begin)
- network_state: (simulation_id, time, running, halting, waiting, meanSpeed, meanSpeedRelative, ...)
  * Network-wide time-series from summary.xml — 1 row per simulation second
  * Enables temporal analysis: congestion onset, performance curves, before/after comparison
  * PRIMARY KEY: (simulation_id, time)

KEY: Table name is 'edge_metrics', NOT 'edgedata'!

=== ROAD-LEVEL ANALYSIS WITH edge_info ===
For road-level congestion analysis (instead of edge-level), JOIN edge_info:

-- Road-level weighted density (RECOMMENDED for congestion ranking)
SELECT ei.road_name,
       ROUND(SUM(em.density * ei.length) / SUM(ei.length), 2) AS weighted_density,
       ROUND(SUM(ei.length), 1) AS total_length_m
FROM edge_metrics em
JOIN edge_info ei ON em.simulation_id = ei.simulation_id AND em.edge_id = ei.edge_id
WHERE em.simulation_id = '1_baseline' AND ei.road_name IS NOT NULL
GROUP BY ei.road_name
ORDER BY weighted_density DESC LIMIT 10;

-- Filter out micro-segments (< 10m)
WHERE ei.length > 10

-- Query by road name (NO need for get_edge_ids_from_road_name_tool!)
WHERE ei.road_name = '테헤란로'

DESIGN: Single unified DB with simulation_id for comparative studies
- Same network's simulations → Same DB file
- Different simulations → Different simulation_ids in same DB
- Enables SQL JOIN for before/after comparison

Args:
    tripinfo_xml: Path to tripinfo XML file
    edgedata_xml: Path to edgedata XML file
    edgedata_emission_xml: Path to edgedata emission XML file
    output_dir: Output directory for database (default: output/analysis)
    simulation_id: REQUIRED — NEVER leave as None!
        Format: "{N}_{scenario_name}" where N is the sequential number.
        - Check current simulations in context to determine N.
        - Use short, descriptive English names.
        - Examples: "1_baseline", "2_road_closure_teheran", "3_lane_reduction_gangnam",
          "4_tls_optimize_seocho", "5_speed_limit_gangnam"
    net_file: Path to network (.net.xml) file used in this simulation
    route_file: Path to route (.rou.xml) file used in this simulation
    description: REQUIRED — NEVER leave as None!
        Human-readable English description of the scenario.
        Displayed in the UI for scenario comparison.
        Always describe WHAT was changed and WHERE.
        Examples:
        - "Baseline simulation (Gangnam Station 1km)"
        - "Road closure on Teheran-ro near Gangnam Station (500m)"
        - "Lane reduction on Gangnam-daero (3 to 2 lanes)"
        - "Signal timing optimization at Seocho-daero intersection"
        - "Speed limit reduced to 30km/h on Teheran-ro"
    summary_xml: Path to summary XML file from sumo_runner result's top-level "summary_xml" field.
        IMPORTANT: Always provide this! Without it, dashboard time-series charts will be empty.

Returns:
    Dict with db_file, simulation_id, and metadata

Examples:
    # After sumo_runner returns result with metadata.absolute_summary:
    xml_to_sqlite_tool(
        tripinfo_xml="gangnam_tripinfo.xml",
        edgedata_xml="gangnam_edgedata.xml",
        edgedata_emission_xml="gangnam_emission.xml",
        simulation_id="1_baseline",
        description="Baseline simulation (Gangnam Station 1km)",
        summary_xml="/path/to/gangnam_summary.xml"
    )
ParametersJSON Schema
NameRequiredDescriptionDefault
net_fileNo
output_dirNooutput/analysis
route_fileNo
descriptionNo
summary_xmlNo
edgedata_xmlYes
tripinfo_xmlYes
simulation_idNo
edgedata_emission_xmlYes

TDQS

A4.9/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It fully discloses the database schema, table structures, keys, and design philosophy. Warns about table name 'edge_metrics' not 'edgedata'. Describes return format and provides examples.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-organized with sections (IMPORTANT, DATABASE SCHEMA, ROAD-LEVEL ANALYSIS, Args, Returns, Examples) but is quite lengthy. Every section adds value, but it could be more concise without losing clarity.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's complexity (9 parameters, no output schema, no annotations), the description is highly complete. It covers schema, SQL examples, parameter details, usage guidelines, and references to sibling tools.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description must compensate. It thoroughly explains each parameter: tripinfo_xml, edgedata_xml, etc., including format, required values, and important notes. Provides formatting examples for simulation_id and description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Convert SUMO XML results to SQLite database for advanced SQL-based analysis.' It distinguishes from siblings by emphasizing SQL-based queries and explicitly stating that road-level analysis does not require get_edge_ids_from_road_name_tool.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit when-to-use guidelines: for advanced queries beyond summary statistics. Gives examples of query types. Warns about required parameters (simulation_id and description must never be None). Explicitly tells when not to use a sibling tool: 'NO need for get_edge_ids_from_road_name_tool!'

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 26 tool updatesv0.1.0
    • First observedanalyze_road_details_tool
    • First observededge_edit_tool
    • First observedflow_generation_tool
    • First observedget_edge_ids_from_road_name_tool
    • First observedget_road_names_tool
    • First observednet_convert
    • First observednetwork_summary_tool
    • First observedosm_extract
    • First observedreduce_lanes_tool
    • First observedroute_analysis_tool
    • First observedroute_generate
    • First observedsimulation_report_tool
    • First observedspeed_limit_edit_tool
    • First observedsumo_runner
    • First observedtls_adaptation_tool
    • First observedtls_offset_tool
    • First observedtrip_generate
    • First observedvalidate_od_coordinates_tool
    • First observedvehicle_generation_tool
    • First observedvehicle_type_edit_tool
    • First observedvisualize_edge_tool
    • First observedvisualize_edgedata_tool
    • First observedvisualize_net_tool
    • First observedvisualize_policy_target_tool
    • First observedweb_search_tool
    • First observedxml_to_sqlite_tool

TDQS

A3.7/5.0
Disambiguation4/5

Most tools have distinct purposes, especially the pipeline steps (osm_extract, net_convert, etc.) and editing tools (edge_edit_tool, reduce_lanes_tool). However, multiple visualization tools (visualize_net_tool, visualize_edge_tool, visualize_policy_target_tool, visualize_edgedata_tool) and two vehicle generation tools (vehicle_generation_tool, flow_generation_tool) could cause some confusion despite clear usage instructions.

Naming Consistency3/5

The naming is mostly snake_case, but there is inconsistency: core pipeline tools omit the '_tool' suffix (e.g., net_convert, trip_generate) while many utility and editing tools include it (e.g., edge_edit_tool, xml_to_sqlite_tool). This mix of naming conventions slightly reduces predictability.

Tool Count3/5

With 26 tools, the server is quite extensive for a single domain. While each tool has a clear role, the count feels high for an MCP server, potentially overwhelming agents. A more focused set (e.g., 15-20 tools) might be more manageable.

Completeness5/5

The tool set covers the entire simulation workflow: data extraction, network conversion, demand generation (with multiple modes), routing, simulation execution, network editing (edges, lanes, speed, TLS), vehicle type editing, analysis (route, road details, SQL database), visualization, reporting, and web search. There are no obvious gaps for the stated purpose of traffic simulation with SUMO.

Maintenance

ActivityInactive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Connects LLMs to Eclipse SUMO traffic simulation, enabling AI agents to automate traffic network generation, demand modeling, signal optimization, simulation execution, and real-time TraCI control through natural language.
    52
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Enables natural language-driven creation and execution of autonomous-vehicle scenarios in the CARLA simulator, with validated primitives and replay support.
    7
    1
    MIT
  • F
    license
    Not graded
    quality
    B
    maintenance
    Enables natural language interaction with OpenStudio building energy simulation, allowing creation, querying, and modification of models, running EnergyPlus simulations, and analyzing results.
    31
    -

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/urban-ai-institute/kra35-prismx-agentsumo'

If you have feedback or need assistance with the MCP directory API, please join our Discord server