{"server":"swmm-analysis","version":"1.0.4 (engine Rev 23.2; generic CoC workflow Rev 28)","tools":[{"name":"upload_model","description":"Upload an EPA SWMM .inp model (raw text or base64) and create a session.\n\n    Returns a session_id used by every other tool, plus element counts.","parameters":{"inp_content":{"required":true,"default":null},"filename":{"required":false,"default":"model.inp"}},"rest":"POST /api/tool/upload_model"},{"name":"run_simulation","description":"Run the model in the crash-isolated OpenSWMM worker and build summaries.\n\n    Also runs the deterministic worker-vs-.rpt reconciliation cross-check.","parameters":{"session_id":{"required":true,"default":null}},"rest":"POST /api/tool/run_simulation"},{"name":"list_sessions","description":"List active sessions (id, model filename, simulated flag, age).","parameters":{},"rest":"POST /api/tool/list_sessions"},{"name":"close_session","description":"Delete a session and its working files.","parameters":{"session_id":{"required":true,"default":null}},"rest":"POST /api/tool/close_session"},{"name":"get_node_results","description":"Node result summary. Optional node_type filter (junction/storage/outfall);\n    sorted descending by sort_by column (default Depth Ratio).","parameters":{"session_id":{"required":true,"default":null},"node_type":{"required":false,"default":""},"sort_by":{"required":false,"default":"Depth Ratio"},"limit":{"required":false,"default":20}},"rest":"POST /api/tool/get_node_results"},{"name":"get_link_results","description":"Link result summary sorted descending by sort_by (default peak velocity).","parameters":{"session_id":{"required":true,"default":null},"sort_by":{"required":false,"default":"Peak Velocity (m/s)"},"limit":{"required":false,"default":20}},"rest":"POST /api/tool/get_link_results"},{"name":"get_subcatchment_results","description":"Subcatchment runoff summary.","parameters":{"session_id":{"required":true,"default":null},"limit":{"required":false,"default":30}},"rest":"POST /api/tool/get_subcatchment_results"},{"name":"get_timeseries","description":"Bounded time series for one object.\n\n    object_type: node|link|subcatchment. Variables — node: depth, flooding,\n    inflow, head, outflow, volume; link: flow, depth, velocity, volume,\n    capacity; subcatchment: runoff, rainfall, infil. Series longer than 200\n    points are decimated evenly (peaks preserved via max-in-bucket).","parameters":{"session_id":{"required":true,"default":null},"object_type":{"required":true,"default":null},"object_id":{"required":true,"default":null},"variable":{"required":true,"default":null}},"rest":"POST /api/tool/get_timeseries"},{"name":"query_results","description":"Execute a validated JSON retrieval plan against the bounded result DB.\n\n    Plan format: {\"actions\":[{\"type\":\"select\"|\"aggregate\",\"table\":...,\n    \"columns\":[...], \"filters\":[{\"column\",\"op\",\"value\"}], \"order_by\":[...],\n    \"limit\":N, \"aggregations\":[{\"agg\",\"column\"}]}]}. Use get_table_catalog\n    for table/column names. Read-only; invalid plans degrade gracefully.","parameters":{"session_id":{"required":true,"default":null},"plan":{"required":true,"default":null}},"rest":"POST /api/tool/query_results"},{"name":"get_table_catalog","description":"List queryable tables (results + complete tokenized INP) for query_results.","parameters":{"session_id":{"required":true,"default":null}},"rest":"POST /api/tool/get_table_catalog"},{"name":"calgary_screening","description":"Screen results against City-of-Calgary-style criteria.\n\n    Velocity screen (3.0 m/s advisory / 4.0 m/s critical), storage\n    classification (trap-low vs pond heuristics), and the criteria register.\n    SCREENING ONLY — thresholds must be confirmed by the responsible engineer.","parameters":{"session_id":{"required":true,"default":null}},"rest":"POST /api/tool/calgary_screening"},{"name":"preliminary_design_review","description":"Deterministic QA/QC findings register (topology, hydrology, screening)\n    merged with the worker-vs-.rpt reconciliation findings (RPT-###).","parameters":{"session_id":{"required":true,"default":null}},"rest":"POST /api/tool/preliminary_design_review"},{"name":"get_reconciliation","description":"Worker-vs-.rpt reconciliation detail: flagged links and continuity check.\n    For flagged links, .rpt values are authoritative for screening.","parameters":{"session_id":{"required":true,"default":null}},"rest":"POST /api/tool/get_reconciliation"},{"name":"run_scenario","description":"Clone the base model, apply controlled changes, re-simulate, compare.\n\n    conduit_diameter_overrides: {\"link_id\": new_diameter_m}. The base model is\n    never mutated; comparisons quote deterministic summary deltas.","parameters":{"session_id":{"required":true,"default":null},"scenario_name":{"required":true,"default":null},"conduit_diameter_overrides":{"required":false,"default":null},"rainfall_multiplier":{"required":false,"default":null}},"rest":"POST /api/tool/run_scenario"},{"name":"attach_figure","description":"Attach a client-generated figure (PNG/JPEG, base64) to the session so\n    generate_report embeds it in the AUDITED report instead of the client\n    rebuilding the document itself.\n\n    section: keyword matched against report Heading-1 titles (e.g. \"results\",\n    \"methodology\", \"site\"); the figure is placed at the end of that section.\n    Figures are labelled as client-attached illustrative material — they are\n    not server-verified outputs. Limits: PNG or JPEG, 5 MB decoded.","parameters":{"session_id":{"required":true,"default":null},"image_base64":{"required":true,"default":null},"caption":{"required":true,"default":null},"section":{"required":false,"default":"results"},"figure_name":{"required":false,"default":""}},"rest":"POST /api/tool/attach_figure"},{"name":"set_report_details","description":"Store site-specific narrative and project metadata for generate_report.\n\n    details keys — NARRATIVE (multi-line text; design_objectives lines become\n    bullets): introduction, site_description, design_objectives, methodology,\n    applicable_criteria. METADATA (single values): client, consultant,\n    consultant_file_no, subdivision_no, outline_plan_no,\n    development_permit_no, design_storm, prepared_by, checked_by,\n    municipality, contact_name, contact_email, legal_description,\n    construction_drawing_no, development_agreement_no.\n\n    Repeated calls merge (later values win); pass an empty string to clear a\n    key. Attribute provenance inside the text itself (model-derived vs\n    user-supplied vs inferred) — the server stores it verbatim. For a site\n    aerial/location image use attach_figure with section=\"site\".","parameters":{"session_id":{"required":true,"default":null},"details":{"required":true,"default":null}},"rest":"POST /api/tool/set_report_details"},{"name":"set_report_configuration","description":"Set project-specific City of Calgary SWMR criteria and evidence inputs.\n\n    Use this after upload and before generate_report. Supported configuration\n    includes major_link_ids, project-specific flow limits, storage/outfall/area\n    classifications, numerical screening thresholds, drawing_inventory,\n    applicable_reports, and checklist_overrides. Repeated calls merge; JSON\n    null removes a field. This configures deterministic screening and report\n    completeness—it does not establish municipal acceptance or professional\n    authentication.","parameters":{"session_id":{"required":true,"default":null},"configuration":{"required":true,"default":null}},"rest":"POST /api/tool/set_report_configuration"},{"name":"generate_report","description":"Generate the Calgary-style SWMR draft package (docx + audit zip).\n\n    include_model_appendix (default True) reproduces the model input (.inp)\n    and engine output (.rpt) as fixed-width listings in APPENDIX D, per the\n    Calgary SWMR checklist; very long files are middle-truncated in the docx\n    with the untruncated copies archived in the audit zip under model/.\n    Returns download paths served by this Space at /files/{session_id}/{name}.\n    The draft-readiness score honestly reflects missing project information.","parameters":{"session_id":{"required":true,"default":null},"project_name":{"required":true,"default":null},"client":{"required":false,"default":""},"consultant":{"required":false,"default":""},"prepared_by":{"required":false,"default":""},"outline_plan_no":{"required":false,"default":""},"include_model_appendix":{"required":false,"default":true}},"rest":"POST /api/tool/generate_report"}]}