# Examples This page demonstrates end-to-end workflows using the OpenSWMM MCP Server tools, resources, and prompts. ## Example 1: Basic Simulation Workflow A minimal open-run-query-close workflow. ### 1. Open the model ``` Tool: lifecycle_open_model Arguments: inp_path: "/models/site_drainage.inp" session_id: "basic" ``` Response confirms 12 nodes, 11 links, 6 subcatchments, dynamic wave routing. ### 2. Run the simulation ``` Tool: lifecycle_run_simulation Arguments: session_id: "basic" ``` Progress reports stream from 0 % to 100 %. Final response shows 2880 steps completed, runoff continuity error of -0.012 %, routing continuity error of -0.008 %. ### 3. Check for flooding ``` Tool: analysis_get_flooding_summary Arguments: session_id: "basic" ``` Returns a sorted list of flooded nodes with peak overflow rates and total flood volumes. ### 4. Extract a time series ``` Tool: analysis_get_time_series Arguments: session_id: "basic" element_type: "node" element_id: "J3" variable: "depth" ``` Returns a `TimeSeries` object with timestamps and depth values for node J3 across all reporting periods. ### 5. Export results ``` Tool: analysis_export_results Arguments: session_id: "basic" output_path: "/models/results.csv" format: "csv" ``` ### 6. Close the session ``` Tool: lifecycle_close_model Arguments: session_id: "basic" ``` --- ## Example 2: What-If Scenario Analysis Compare a baseline simulation against an alternative with increased rainfall. ### 1. Run the baseline ``` Tool: lifecycle_open_model Arguments: inp_path: "/models/site_drainage.inp" session_id: "baseline" ``` ``` Tool: lifecycle_run_simulation Arguments: session_id: "baseline" ``` ### 2. Clone and modify ``` Tool: hotstart_clone_session Arguments: source_id: "baseline" target_id: "high_rain" ``` ``` Tool: forcing_set_rainfall_override Arguments: session_id: "high_rain" gage_id: "RG1" rainfall: 2.5 ``` ### 3. Run the alternative ``` Tool: lifecycle_run_simulation Arguments: session_id: "high_rain" ``` ### 4. Compare results ``` Tool: analysis_compare_scenarios Arguments: session_a: "baseline" session_b: "high_rain" element_type: "node" variable: "depth" ``` Returns per-element peak differences and summary statistics (mean, max, min of absolute differences). ### 5. Review flooding differences ``` Tool: analysis_get_flooding_summary Arguments: session_id: "baseline" ``` ``` Tool: analysis_get_flooding_summary Arguments: session_id: "high_rain" ``` Compare the two summaries to identify nodes with increased flooding. ### 6. Clean up ``` Tool: lifecycle_close_model Arguments: session_id: "baseline" ``` ``` Tool: lifecycle_close_model Arguments: session_id: "high_rain" ``` --- ## Example 3: Programmatic Model Building Create a simple drainage network entirely through the building tools. ### 1. Create an empty model ``` Tool: building_create_model Arguments: session_id: "new_model" ``` ### 2. Set simulation options ``` Tool: building_set_option Arguments: session_id: "new_model" option: "FLOW_UNITS" value: "CFS" ``` ``` Tool: building_set_option Arguments: session_id: "new_model" option: "ROUTING_MODEL" value: "DYNWAVE" ``` ### 3. Add nodes ``` Tool: building_add_node Arguments: session_id: "new_model" node_id: "J1" node_type: "junction" invert_elev: 100.0 max_depth: 6.0 x: 0.0 y: 100.0 ``` ``` Tool: building_add_node Arguments: session_id: "new_model" node_id: "J2" node_type: "junction" invert_elev: 95.0 max_depth: 6.0 x: 200.0 y: 100.0 ``` ``` Tool: building_add_node Arguments: session_id: "new_model" node_id: "OUT1" node_type: "outfall" invert_elev: 90.0 x: 400.0 y: 100.0 ``` ### 4. Add links ``` Tool: building_add_link Arguments: session_id: "new_model" link_id: "C1" link_type: "conduit" from_node: "J1" to_node: "J2" length: 200.0 roughness: 0.013 xsect_shape: "circular" xsect_geom1: 2.0 ``` ``` Tool: building_add_link Arguments: session_id: "new_model" link_id: "C2" link_type: "conduit" from_node: "J2" to_node: "OUT1" length: 200.0 roughness: 0.013 xsect_shape: "circular" xsect_geom1: 2.5 ``` ### 5. Add a subcatchment ``` Tool: building_add_subcatchment Arguments: session_id: "new_model" subcatch_id: "S1" area: 10.0 imperv_pct: 50.0 slope: 0.5 width: 500.0 outlet_node: "J1" ``` ### 6. Add a rain gage and time series ``` Tool: building_add_gage Arguments: session_id: "new_model" gage_id: "RG1" ``` ``` Tool: building_add_timeseries Arguments: session_id: "new_model" name: "design_storm" times: [0, 0.5, 1.0, 1.5, 2.0, 2.5, 3.0] values: [0.1, 0.5, 1.2, 2.0, 1.2, 0.5, 0.1] ``` ### 7. Validate and write ``` Tool: building_validate_model Arguments: session_id: "new_model" ``` ``` Tool: building_write_model Arguments: session_id: "new_model" output_path: "/models/new_drainage.inp" ``` ### 8. Open the new model and test ``` Tool: lifecycle_open_model Arguments: inp_path: "/models/new_drainage.inp" session_id: "test_run" ``` ``` Tool: lifecycle_run_simulation Arguments: session_id: "test_run" ``` Verify that the simulation completes with acceptable continuity errors.