Autonomous Traffic Simulation Platform with Model Context Protocol
This server exhibits significant gaps in definition quality. While tool names are generally action-oriented (manage_network, control_simulation, query_state), most tools lack comprehensive parameter descriptions and output schema documentation. The tool descriptions are present but often generic (e.g., 'Manage SUMO network (generate, convert, or download OSM).' is only 56 chars and doesn't explain WHEN to use this vs. alternatives or what the output structure is). Parameters frequently lack type information or constraints, e.g., 'params' is typed as 'object' with a free-form description of optional fields rather than a structured schema. Error handling is absent from most tool definitions. The codebase shows well-intentioned organization (separate modules for network, route, signal, vehicle, RL tools) but the MCP tool registration lacks the rigor needed for reliable LLM invocation. Output schemas are not documented anywhere in the visible code. Of the 24 tools, only a handful have both description and schema; most are missing one or both critical elements.
Analyze FCD (Floating Car Data) output XML to compute basic statistics.
Control SUMO simulation (connect, step, disconnect).
Wrapper for duarouter. Computes routes from trips.
Resolve a sumo-rl built-in scenario directory to its .net.xml and .rou.xml files.
Get general simulation statistics.
Get the acceleration of a specific vehicle (m/s^2).
Get the lane ID of a specific vehicle.
Parameter 'params' defined as generic 'object' with no structured schema. Tools like manage_network, manage_demand, control_simulation accept optional parameters described only in free-form text ('Optional parameters including: spider (bool), grid (bool), ...'). This forces LLMs to guess at the exact parameter names and types, increasing errors.
No output schema documented for any tool. The code shows tools return strings (e.g., 'return netgenerate(...)') but LLMs have no structured definition of what fields they should expect. For tools like query_state or get_vehicles, the LLM cannot parse the response to extract vehicle IDs or other critical fields for chaining.
Inferred effective spec: <=2025-11-25.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | F | 44 | <=2025-11-25 | v2 |
| 2026-03-09 | F | 0 | - | v1 |
Get the (x, y) position of a specific vehicle.
Get the route (list of edge IDs) of a specific vehicle.
Get the speed of a specific vehicle (m/s).
Get the list of all active vehicle IDs.
List available built-in RL scenarios from sumo-rl package.
Manage traffic demand (random trips, OD matrix, routing).
Manage SUMO network (generate, convert, or download OSM).
Wrapper for SUMO netconvert. Converts OSM files to SUMO network files.
Wrapper for SUMO netgenerate. Generates abstract networks.
Wrapper for od2trips. Converts OD matrices to trips.
Wrapper for osmGet.py. Downloads OSM data.
Query SUMO simulation state and vehicle information.
Wrapper for randomTrips.py. Generates random trips for a given network.
Run a basic RL training session using Q-Learning (default) or other algorithms.
Run a SUMO simulation using the given configuration file.
Wrapper for tlsCoordinator.py. Optimizes traffic light coordination.
Wrapper for tlsCycleAdaptation.py. Adapts traffic light cycles based on traffic demand.
Tool descriptions lack WHEN to use guidance and are under 80 characters for most tools. Example: 'Analyze FCD (Floating Car Data) output XML to compute basic statistics.' (72 chars) doesn't explain what FCD is, when to call this vs. other analysis tools, or what stats are computed. Per baselines, A+ tools average 194 chars.
No error handling or recovery guidance in any tool definition. Tools that perform I/O or file operations (netconvert, netgenerate, osm_get, run_simple_simulation) could fail for many reasons (missing files, invalid parameters, external API errors). Descriptions provide no guidance on what to try if a call fails.
Parameters with enum-like constraints (e.g., action in manage_network, query_type in query_state) are defined as free-form strings. 'action' should be an enum with choices ['generate', 'convert', 'download_osm'], not a bare string. This prevents the LLM from discovering valid values without trial-and-error.
Tools that modify state (manage_network, manage_demand, control_simulation, run_simple_simulation, run_rl_training) do not declare their side effects in descriptions. The description should explicitly state 'This tool WRITES files' or 'This tool runs a simulation with side effects', enabling the LLM to understand retry semantics and idempotency.
Ambiguous tool names and overlapping responsibilities. For example, manage_demand combines three distinct actions (generate_random, convert_od, compute_routes) based on the 'action' parameter. Per pattern:tool, each action should be a separate tool so the agent can compose them. Similarly, manage_network combines generate, convert, and download into one tool.
Empty input schemas. Tools like get_vehicles, list_rl_scenarios, get_simulation_info are defined with empty input objects '{}', providing no parameter guidance. Even if parameters are optional, the schema should document available fields.