{
  "schema_version": "2026-09",
  "name": "stormwaterplanning.us",
  "title": "Stormwater Planning Training (stormwaterplanning.us)",
  "description": "Self-paced online stormwater training aligned with the Clean Water Act, NPDES, and EPA's Construction General Permit: 7-hour Qualified SWPPP Practitioner (QSP) field training and 7-hour Qualified SWPPP Preparer training, in English and Spanish, with a certificate of completion issued by HAZWOPER OSHA Training, LLC. Not California QSP/QSD status and not EPA or state approval.",
  "version": "1.1.0",
  "last_updated": "2026-09-29",
  "homepage": "https://stormwaterplanning.us/",
  "documentation_url": "https://stormwaterplanning.us/ai-agents/",
  "icon_url": "https://stormwaterplanning.us/images/spct-logo.png",
  "serverInfo": {
    "name": "stormwaterplanning.us",
    "title": "Stormwater Planning Training (stormwaterplanning.us)",
    "version": "1.1.0"
  },
  "provider": {
    "name": "HAZWOPER OSHA Training, LLC",
    "url": "https://hazwoper-osha.com/"
  },
  "contact": {
    "email": "info@hazwoper-osha.com",
    "phone": "1-866-429-6742"
  },
  "transport": {
    "type": "webmcp",
    "description": "Tools are registered in the browser via navigator.modelContext by https://stormwaterplanning.us/js/webmcp.js on every page. Every tool is read-only and is also backed by the static HTTPS endpoint in its 'endpoint' field, so agents without WebMCP can fetch the same data directly.",
    "script_url": "https://stormwaterplanning.us/js/webmcp.js"
  },
  "capabilities": {
    "tools": {
      "listChanged": false
    },
    "resources": {}
  },
  "authentication": {
    "type": "none"
  },
  "resources": [
    {
      "uri": "https://stormwaterplanning.us/llms.txt",
      "name": "llms.txt",
      "mimeType": "text/markdown",
      "description": "Concise site summary for AI agents."
    },
    {
      "uri": "https://stormwaterplanning.us/llms-full.txt",
      "name": "llms-full.txt",
      "mimeType": "text/markdown",
      "description": "Complete catalog, FAQ and policy context."
    },
    {
      "uri": "https://stormwaterplanning.us/openapi.json",
      "name": "OpenAPI",
      "mimeType": "application/json",
      "description": "OpenAPI 3.1 description of the read-only endpoints."
    },
    {
      "uri": "https://stormwaterplanning.us/sitemap.xml",
      "name": "Sitemap",
      "mimeType": "application/xml",
      "description": "Every indexable page."
    },
    {
      "uri": "https://stormwaterplanning.us/api/courses.json",
      "name": "Courses",
      "mimeType": "application/json",
      "description": "Course records, roles and pricing."
    },
    {
      "uri": "https://stormwaterplanning.us/api/resources.json",
      "name": "Resources",
      "mimeType": "application/json",
      "description": "Guides and policies with review dates."
    },
    {
      "uri": "https://stormwaterplanning.us/api/faq.json",
      "name": "FAQ",
      "mimeType": "application/json",
      "description": "Every published FAQ answer with its source page."
    },
    {
      "uri": "https://stormwaterplanning.us/api/policy.json",
      "name": "Credential policy",
      "mimeType": "application/json",
      "description": "What the certificate is and is not, and agent rules."
    },
    {
      "uri": "https://stormwaterplanning.us/api/jurisdictions.json",
      "name": "lookup_state_permit",
      "mimeType": "application/json",
      "description": "Data behind lookup_state_permit."
    }
  ],
  "policies": {
    "read_only": true,
    "agent_rules": [
      "Do not invent prices, course hours, certificate validity periods, availability, discounts, or regulatory claims; use only the values in these files.",
      "Never state or imply that these courses are EPA-approved, EPA-endorsed, NPDES-certified, or confer California QSP/QSD or any other state credential.",
      "Stormwater requirements depend on the permitting authority. Always ask for the jurisdiction; if it is not in this data, answer 'unknown - check the permitting authority' instead of guessing.",
      "Training guidance only; it is not legal or compliance advice.",
      "If a question is not answered by these files, say so and route the person to info@hazwoper-osha.com or 1-866-429-6742.",
      "Agents may look things up; checkout, payment, enrollment, account, certificate issuance, and contact submissions are never performed by the published tools."
    ],
    "excluded_actions": [
      "checkout or payment",
      "enrollment",
      "account access",
      "certificate issuance",
      "contact or lead form submission"
    ],
    "browser_only_actions": [
      {
        "name": "start_checkout",
        "description": "Registered in the page only. Opens the checkout page pre-filled with a course and seat count; the person must enter their own billing and card details and click Pay. Never exposed as an unauthenticated endpoint and never submits a payment."
      }
    ],
    "privacy_policy_url": "https://stormwaterplanning.us/privacy-policy/"
  },
  "tools": [
    {
      "name": "list_courses",
      "title": "List courses",
      "description": "List the training courses sold on stormwaterplanning.us as factual records: id, title, canonical URL, duration_hours, price_usd, languages, audience, standards, credential_type and validity_period. Use it for catalog, price, or length questions. All filters are optional and combine with AND. Returns only published courses; never infer availability, dates, or discounts that aren't in the result.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "properties": {
          "role": {
            "type": "string",
            "enum": [
              "field",
              "preparer"
            ],
            "description": "Only courses recommended for this job role. field = inspects construction sites, installs or maintains BMPs, keeps on-site stormwater records (supervisor, superintendent, inspector, field crew); preparer = writes or revises SWPPP documents and designs BMPs (engineer, environmental consultant, compliance manager)."
          },
          "level": {
            "type": "string",
            "enum": [
              "document",
              "field"
            ],
            "description": "Course level."
          },
          "language": {
            "type": "string",
            "enum": [
              "en",
              "es"
            ],
            "description": "Course language (every course is offered in both)."
          },
          "max_price_usd": {
            "type": "number",
            "minimum": 0,
            "maximum": 10000,
            "description": "Maximum single-seat price in USD."
          }
        },
        "additionalProperties": false,
        "examples": [
          {},
          {
            "language": "es",
            "max_price_usd": 200
          }
        ]
      },
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "oneOf": [
          {
            "type": "object",
            "required": [
              "courses"
            ],
            "properties": {
              "courses": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "id",
                    "title",
                    "url",
                    "duration_hours",
                    "price_usd",
                    "currency",
                    "languages",
                    "credential_type"
                  ],
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "title": {
                      "type": "string"
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "summary": {
                      "type": "string"
                    },
                    "audience": {
                      "type": "string"
                    },
                    "level": {
                      "type": "string"
                    },
                    "track": {
                      "type": "string"
                    },
                    "duration_hours": {
                      "type": "number",
                      "minimum": 0
                    },
                    "price_usd": {
                      "type": "number",
                      "minimum": 0
                    },
                    "currency": {
                      "type": "string",
                      "enum": [
                        "USD"
                      ]
                    },
                    "languages": {
                      "type": "array",
                      "items": {
                        "type": "string",
                        "enum": [
                          "en",
                          "es"
                        ]
                      }
                    },
                    "format": {
                      "type": "string"
                    },
                    "standards": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "credential_type": {
                      "type": "string"
                    },
                    "credential_issuer": {
                      "type": "string"
                    },
                    "validity_period": {
                      "type": [
                        "object",
                        "null"
                      ],
                      "properties": {
                        "months": {
                          "type": "integer",
                          "minimum": 1
                        },
                        "iso8601": {
                          "type": "string"
                        }
                      }
                    },
                    "access_period": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "ceu": {
                      "type": "number"
                    },
                    "alignment": {
                      "type": "string"
                    },
                    "enroll_url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "other_formats_url": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  }
                }
              },
              "bulk_pricing_note": {
                "type": [
                  "string",
                  "null"
                ]
              },
              "last_updated": {
                "type": "string"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "error"
            ],
            "properties": {
              "error": {
                "type": "object",
                "required": [
                  "code",
                  "message"
                ],
                "properties": {
                  "code": {
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  }
                }
              }
            }
          }
        ]
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "title": "List courses"
      },
      "endpoint": {
        "method": "GET",
        "url": "https://stormwaterplanning.us/api/courses.json"
      }
    },
    {
      "name": "get_course",
      "title": "Get course details",
      "description": "Get one course record plus related resources and FAQ answers. Provide course_id (preferred) or the course's canonical URL. Returns an error with code 'not_found' instead of guessing when nothing matches exactly.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "properties": {
          "course_id": {
            "type": "string",
            "enum": [
              "qsp",
              "preparer"
            ],
            "description": "Course id from list_courses."
          },
          "url": {
            "type": "string",
            "format": "uri",
            "maxLength": 300,
            "description": "Canonical course page URL on stormwaterplanning.us."
          }
        },
        "additionalProperties": false,
        "examples": [
          {
            "course_id": "qsp"
          },
          {
            "url": "https://stormwaterplanning.us/qualified-swppp-preparer-training/"
          }
        ]
      },
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "oneOf": [
          {
            "type": "object",
            "required": [
              "course"
            ],
            "properties": {
              "course": {
                "type": "object",
                "required": [
                  "id",
                  "title",
                  "url",
                  "duration_hours",
                  "price_usd",
                  "currency",
                  "languages",
                  "credential_type"
                ],
                "properties": {
                  "id": {
                    "type": "string"
                  },
                  "title": {
                    "type": "string"
                  },
                  "url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "summary": {
                    "type": "string"
                  },
                  "audience": {
                    "type": "string"
                  },
                  "level": {
                    "type": "string"
                  },
                  "track": {
                    "type": "string"
                  },
                  "duration_hours": {
                    "type": "number",
                    "minimum": 0
                  },
                  "price_usd": {
                    "type": "number",
                    "minimum": 0
                  },
                  "currency": {
                    "type": "string",
                    "enum": [
                      "USD"
                    ]
                  },
                  "languages": {
                    "type": "array",
                    "items": {
                      "type": "string",
                      "enum": [
                        "en",
                        "es"
                      ]
                    }
                  },
                  "format": {
                    "type": "string"
                  },
                  "standards": {
                    "type": "array",
                    "items": {
                      "type": "string"
                    }
                  },
                  "credential_type": {
                    "type": "string"
                  },
                  "credential_issuer": {
                    "type": "string"
                  },
                  "validity_period": {
                    "type": [
                      "object",
                      "null"
                    ],
                    "properties": {
                      "months": {
                        "type": "integer",
                        "minimum": 1
                      },
                      "iso8601": {
                        "type": "string"
                      }
                    }
                  },
                  "access_period": {
                    "type": [
                      "string",
                      "null"
                    ]
                  },
                  "ceu": {
                    "type": "number"
                  },
                  "alignment": {
                    "type": "string"
                  },
                  "enroll_url": {
                    "type": "string",
                    "format": "uri"
                  },
                  "other_formats_url": {
                    "type": [
                      "string",
                      "null"
                    ]
                  }
                }
              },
              "related_resources": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "id",
                    "title",
                    "url",
                    "topics",
                    "source"
                  ],
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "title": {
                      "type": "string"
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "summary": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "topics": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "audience": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "jurisdiction": {
                      "type": "string"
                    },
                    "source": {
                      "type": "string"
                    },
                    "official_source": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "last_reviewed": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "last_updated": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  }
                }
              },
              "faq": {
                "type": "array",
                "items": {
                  "type": "object"
                }
              }
            }
          },
          {
            "type": "object",
            "required": [
              "error"
            ],
            "properties": {
              "error": {
                "type": "object",
                "required": [
                  "code",
                  "message"
                ],
                "properties": {
                  "code": {
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  }
                }
              }
            }
          }
        ]
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "title": "Get course details"
      },
      "endpoint": {
        "method": "GET",
        "url": "https://stormwaterplanning.us/api/courses.json"
      }
    },
    {
      "name": "recommend_course",
      "title": "Recommend a course",
      "description": "Recommend the right SWPPP / stormwater course for a job role, with the reason and caveats. For training guidance only: it is not legal or compliance advice and cannot designate anyone as competent or qualified. Jurisdiction is required because stormwater credentials differ by permitting authority; pass 'unknown' if the person hasn't said.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "properties": {
          "role": {
            "type": "string",
            "enum": [
              "field",
              "preparer"
            ],
            "description": "field = inspects construction sites, installs or maintains BMPs, keeps on-site stormwater records (supervisor, superintendent, inspector, field crew); preparer = writes or revises SWPPP documents and designs BMPs (engineer, environmental consultant, compliance manager)."
          },
          "work_context": {
            "type": "string",
            "maxLength": 500,
            "description": "Optional free text about the job, used only to add caveats; it never changes the published course facts."
          },
          "jurisdiction": {
            "type": "string",
            "minLength": 2,
            "maxLength": 60,
            "description": "US state name or two-letter code (e.g. 'California' or 'CA'). Use 'unknown' if the person hasn't said."
          }
        },
        "additionalProperties": false,
        "required": [
          "role",
          "jurisdiction"
        ],
        "examples": [
          {
            "role": "field",
            "jurisdiction": "CA"
          }
        ]
      },
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "oneOf": [
          {
            "type": "object",
            "required": [
              "recommended",
              "caveats"
            ],
            "properties": {
              "role": {
                "type": "string"
              },
              "recommended": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "course_id",
                    "title",
                    "url"
                  ],
                  "properties": {
                    "course_id": {
                      "type": "string"
                    },
                    "title": {
                      "type": "string"
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "duration_hours": {
                      "type": "number"
                    },
                    "price_usd": {
                      "type": "number"
                    },
                    "reason": {
                      "type": "string"
                    }
                  }
                }
              },
              "caveats": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "decision_guide_url": {
                "type": "string",
                "format": "uri"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "error"
            ],
            "properties": {
              "error": {
                "type": "object",
                "required": [
                  "code",
                  "message"
                ],
                "properties": {
                  "code": {
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  }
                }
              }
            }
          }
        ]
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "title": "Recommend a course"
      },
      "endpoint": {
        "method": "GET",
        "url": "https://stormwaterplanning.us/api/courses.json"
      }
    },
    {
      "name": "list_resources",
      "title": "List guides and resources",
      "description": "List first-party guides, standards summaries, policies and employer resources published on stormwaterplanning.us, each with canonical URL, summary, jurisdiction, official source link where one exists, and last_reviewed / last_updated dates. Filters are optional. Prefer the official_source link for legal text.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "properties": {
          "topic": {
            "type": "string",
            "enum": [
              "course_selection",
              "regulations",
              "state_permits",
              "california",
              "inspections",
              "bmps",
              "swppp_preparation",
              "credentials",
              "policies",
              "company"
            ],
            "description": "Topic filter."
          },
          "audience": {
            "type": "string",
            "enum": [
              "all",
              "employer",
              "field",
              "preparer"
            ],
            "description": "Audience filter ('all' = general audience)."
          },
          "jurisdiction": {
            "type": "string",
            "maxLength": 60,
            "description": "Optional text filter on jurisdiction, e.g. 'California'. Resources for all US jurisdictions are always included."
          }
        },
        "additionalProperties": false,
        "examples": [
          {
            "topic": "course_selection"
          }
        ]
      },
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "oneOf": [
          {
            "type": "object",
            "required": [
              "resources"
            ],
            "properties": {
              "resources": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "id",
                    "title",
                    "url",
                    "topics",
                    "source"
                  ],
                  "properties": {
                    "id": {
                      "type": "string"
                    },
                    "title": {
                      "type": "string"
                    },
                    "url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "summary": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "topics": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "audience": {
                      "type": "array",
                      "items": {
                        "type": "string"
                      }
                    },
                    "jurisdiction": {
                      "type": "string"
                    },
                    "source": {
                      "type": "string"
                    },
                    "official_source": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "last_reviewed": {
                      "type": [
                        "string",
                        "null"
                      ]
                    },
                    "last_updated": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  }
                }
              }
            }
          },
          {
            "type": "object",
            "required": [
              "error"
            ],
            "properties": {
              "error": {
                "type": "object",
                "required": [
                  "code",
                  "message"
                ],
                "properties": {
                  "code": {
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  }
                }
              }
            }
          }
        ]
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "title": "List guides and resources"
      },
      "endpoint": {
        "method": "GET",
        "url": "https://stormwaterplanning.us/api/resources.json"
      }
    },
    {
      "name": "answer_faq",
      "title": "Answer from the FAQ",
      "description": "Find the published FAQ answers on stormwaterplanning.us that best match a question and return them verbatim with their source URL. If nothing matches well, it says so and gives the support contact; do not fill the gap with your own answer presented as the site's.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "properties": {
          "question": {
            "type": "string",
            "minLength": 3,
            "maxLength": 300,
            "description": "The person's question in plain language."
          },
          "course_id": {
            "type": "string",
            "enum": [
              "qsp",
              "preparer"
            ],
            "description": "Optional: prefer answers about this course."
          },
          "max_results": {
            "type": "integer",
            "minimum": 1,
            "maximum": 5,
            "default": 3,
            "description": "How many answers to return (1-5)."
          }
        },
        "additionalProperties": false,
        "required": [
          "question"
        ],
        "examples": [
          {
            "question": "Is this training OSHA certified?"
          }
        ]
      },
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "oneOf": [
          {
            "type": "object",
            "required": [
              "matches",
              "match_quality"
            ],
            "properties": {
              "matches": {
                "type": "array",
                "items": {
                  "type": "object",
                  "required": [
                    "question",
                    "answer",
                    "source_url"
                  ],
                  "properties": {
                    "question": {
                      "type": "string"
                    },
                    "answer": {
                      "type": "string"
                    },
                    "source_url": {
                      "type": "string",
                      "format": "uri"
                    },
                    "course_id": {
                      "type": [
                        "string",
                        "null"
                      ]
                    }
                  }
                }
              },
              "match_quality": {
                "type": "string",
                "enum": [
                  "strong",
                  "weak",
                  "none"
                ]
              },
              "support": {
                "type": "object"
              },
              "note": {
                "type": "string"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "error"
            ],
            "properties": {
              "error": {
                "type": "object",
                "required": [
                  "code",
                  "message"
                ],
                "properties": {
                  "code": {
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  }
                }
              }
            }
          }
        ]
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "title": "Answer from the FAQ"
      },
      "endpoint": {
        "method": "GET",
        "url": "https://stormwaterplanning.us/api/faq.json"
      }
    },
    {
      "name": "get_credential_policy",
      "title": "Get credential and claims policy",
      "description": "Return exactly what the certificate is and is not (e.g. not a government certification or approval), who issues it, what employers remain responsible for, and the rules agents must follow when describing this training. Call this before making any certification, approval or accreditation statement.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "properties": {},
        "additionalProperties": false,
        "examples": [
          {}
        ]
      },
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "oneOf": [
          {
            "type": "object",
            "required": [
              "credential",
              "agent_rules"
            ],
            "properties": {
              "credential": {
                "type": "object",
                "required": [
                  "credential_type",
                  "issuer",
                  "is",
                  "is_not"
                ]
              },
              "agent_rules": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              }
            }
          },
          {
            "type": "object",
            "required": [
              "error"
            ],
            "properties": {
              "error": {
                "type": "object",
                "required": [
                  "code",
                  "message"
                ],
                "properties": {
                  "code": {
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  }
                }
              }
            }
          }
        ]
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "title": "Get credential and claims policy"
      },
      "endpoint": {
        "method": "GET",
        "url": "https://stormwaterplanning.us/api/policy.json"
      }
    },
    {
      "name": "get_certificate_verification_info",
      "title": "How to verify a certificate",
      "description": "Explain how an employer can verify a stormwaterplanning.us certificate of completion and where to do it. This tool does not look up individual certificates.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "properties": {},
        "additionalProperties": false,
        "examples": [
          {}
        ]
      },
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "oneOf": [
          {
            "type": "object",
            "required": [
              "verification_tool"
            ],
            "properties": {
              "verification_tool": {
                "type": "string",
                "format": "uri"
              },
              "what_you_need": {
                "type": "string"
              },
              "what_it_confirms": {
                "type": "string"
              },
              "more_info": {
                "type": [
                  "string",
                  "null"
                ]
              }
            }
          },
          {
            "type": "object",
            "required": [
              "error"
            ],
            "properties": {
              "error": {
                "type": "object",
                "required": [
                  "code",
                  "message"
                ],
                "properties": {
                  "code": {
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  }
                }
              }
            }
          }
        ]
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "title": "How to verify a certificate"
      },
      "endpoint": {
        "method": "GET",
        "url": "https://stormwaterplanning.us/api/policy.json"
      }
    },
    {
      "name": "get_price_quote",
      "title": "Get a price quote",
      "description": "Calculate the price for a number of seats in one course, including the published automatic bulk discount. Read-only arithmetic on published prices; it does not reserve seats or start a purchase.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "properties": {
          "course": {
            "type": "string",
            "enum": [
              "qsp",
              "preparer"
            ],
            "description": "Course id."
          },
          "seats": {
            "type": "integer",
            "minimum": 1,
            "maximum": 1000,
            "description": "Number of seats (1-1000)."
          }
        },
        "additionalProperties": false,
        "required": [
          "course",
          "seats"
        ],
        "examples": [
          {
            "course": "qsp",
            "seats": 12
          }
        ]
      },
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "oneOf": [
          {
            "type": "object",
            "required": [
              "course",
              "seats",
              "price_per_seat_usd",
              "total_usd"
            ],
            "properties": {
              "course": {
                "type": "string"
              },
              "seats": {
                "type": "integer"
              },
              "discount_percent": {
                "type": "number"
              },
              "price_per_seat_usd": {
                "type": "number"
              },
              "total_usd": {
                "type": "number"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "error"
            ],
            "properties": {
              "error": {
                "type": "object",
                "required": [
                  "code",
                  "message"
                ],
                "properties": {
                  "code": {
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  }
                }
              }
            }
          }
        ]
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "title": "Get a price quote"
      },
      "endpoint": {
        "method": "GET",
        "url": "https://stormwaterplanning.us/api/courses.json",
        "note": "Compute from pricing.discount_tiers or pricing.per_seat_price_table."
      }
    },
    {
      "name": "search_site_content",
      "title": "Search site content",
      "description": "Keyword search over stormwaterplanning.us's full agent context (FAQ answers, course curriculum, credentials and compliance notes, state permit guidance, policies) and return the most relevant sections as text.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "properties": {
          "query": {
            "type": "string",
            "minLength": 2,
            "maxLength": 200,
            "description": "What to look for, e.g. \"BMP inspection\" or \"California QSD\"."
          }
        },
        "additionalProperties": false,
        "required": [
          "query"
        ],
        "examples": [
          {
            "query": "refund policy"
          }
        ]
      },
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "oneOf": [
          {
            "type": "object",
            "required": [
              "results"
            ],
            "properties": {
              "results": {
                "type": "array",
                "items": {
                  "type": "string"
                }
              },
              "full_context_url": {
                "type": "string",
                "format": "uri"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "error"
            ],
            "properties": {
              "error": {
                "type": "object",
                "required": [
                  "code",
                  "message"
                ],
                "properties": {
                  "code": {
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  }
                }
              }
            }
          }
        ]
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "title": "Search site content"
      },
      "endpoint": {
        "method": "GET",
        "url": "https://stormwaterplanning.us/llms-full.txt"
      }
    },
    {
      "name": "lookup_state_permit",
      "title": "Look up state stormwater permit",
      "description": "Permitting authority, construction stormwater permit link, and training/inspector requirement for one US state. Jurisdiction is required. States this site hasn't summarized return found=false with the answer 'unknown - check the permitting authority' instead of a guess.",
      "inputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "properties": {
          "jurisdiction": {
            "type": "string",
            "minLength": 2,
            "maxLength": 60,
            "description": "US state name or two-letter code, e.g. 'Washington' or 'WA'."
          }
        },
        "additionalProperties": false,
        "required": [
          "jurisdiction"
        ],
        "examples": [
          {
            "jurisdiction": "CA"
          },
          {
            "jurisdiction": "Ohio"
          }
        ]
      },
      "outputSchema": {
        "$schema": "http://json-schema.org/draft-07/schema#",
        "type": "object",
        "oneOf": [
          {
            "type": "object",
            "required": [
              "found",
              "disclaimer"
            ],
            "properties": {
              "found": {
                "type": "boolean"
              },
              "jurisdiction": {
                "type": [
                  "object",
                  "null"
                ]
              },
              "answer": {
                "type": "string"
              },
              "disclaimer": {
                "type": "string"
              }
            }
          },
          {
            "type": "object",
            "required": [
              "error"
            ],
            "properties": {
              "error": {
                "type": "object",
                "required": [
                  "code",
                  "message"
                ],
                "properties": {
                  "code": {
                    "type": "string"
                  },
                  "message": {
                    "type": "string"
                  }
                }
              }
            }
          }
        ]
      },
      "annotations": {
        "readOnlyHint": true,
        "destructiveHint": false,
        "idempotentHint": true,
        "openWorldHint": false,
        "title": "Look up state stormwater permit"
      },
      "endpoint": {
        "method": "GET",
        "url": "https://stormwaterplanning.us/api/jurisdictions.json"
      }
    }
  ]
}
