# Basinwise MCP server

Determines which NPDES stormwater permit governs a US site and its requirements, cited to source.

## Links
- Registry page: https://www.getdrio.com/mcp/io-github-maxbeech-basinwise
- Website: https://basinwise.vercel.app/developers/mcp

## Install
- Endpoint: https://basinwise.vercel.app/api/mcp
- Auth: Not captured

## Setup notes
- Remote endpoint: https://basinwise.vercel.app/api/mcp

## Tools
- determine_permit (Determine which stormwater permit governs a site) - Determine which NPDES stormwater permit governs a construction or industrial site, and what that permit requires of it. Returns coverage ("required", "not_required" or "verify") with the reason, the governing permit and the version the answer was computed against, the jurisdiction and its permitting authority, the permit's eligibility screens, the requirements that attach to THIS site (each with the permit section it came from and a `because` explaining why it applies here rather than in general), the step-by-step derivation, and `notices`. ALWAYS surface `notices` verbatim to the user: it carries the preparer-credential warning, any coverage gap, and the fact that we do not perform the physical site inspections the permit requires. Deterministic, no model in the path. Requirements come back ONLY where we hold the governing permit's rules; where a state permit is identified but unread, `requirements` is empty and a notice says so rather than substituting the federal permit's numbers, so never treat an empty list as "nothing required". Free, no API key needed. Endpoint: https://basinwise.vercel.app/api/mcp
- get_requirements (Get the permit requirements for a site) - The requirements for a site: inspection frequency, stabilisation deadlines, Notice of Intent and Notice of Termination deadlines, corrective-action windows, record retention and buffer rules, each citing the permit section it came from. Same engine and same parser as determine_permit, projected down. The coverage verdict, the eligibility screens and the notices come with it, because a requirement list detached from whether coverage is triggered at all is a half-answer. An empty `requirements` array with a notice means we have not read that jurisdiction's permit, NOT that nothing is required. Free, no API key needed. Endpoint: https://basinwise.vercel.app/api/mcp
- get_credential_gate (Does this state need a credentialed plan preparer?) - Whether a state requires a credentialed preparer (California's Qualified SWPPP Developer, and the analogous credential elsewhere) to prepare or sign a stormwater pollution prevention plan, and whether that requirement bites for a site of this size. This is the answer that decides whether a generated document is the operator's deliverable or a DRAFT for a credentialed person to review and sign, so `documentStatus` states that consequence in plain language on every response. `gate` is "open", "gated", "conditional" or "unknown"; a state we have not verified returns "unknown" and must never be treated as open. `appliesToThisSite` is null when the trigger is an acreage threshold you did not give acres for, or a plan-scope test we cannot resolve from site facts. Free, no API key needed. Endpoint: https://basinwise.vercel.app/api/mcp
- list_jurisdictions (List every jurisdiction and its permitting authority) - Every state, territory and DC we hold a row for: NPDES authorisation status, the governing permit and its number, the agency name and URL, and the preparer-credential gate. Jurisdictions we have NOT verified are listed with confidence "unverified" and a note naming the agency to confirm with, rather than being omitted, because a jurisdiction missing from a coverage list reads as "no permit applies" and that is never what it means. Takes no arguments. Free, no API key needed. Endpoint: https://basinwise.vercel.app/api/mcp
- get_usage (What this key is allowed to do) - What the credential on this connection is allowed to do: the tier it resolves to (anonymous, sandbox, test key, or a live key on a plan), the per-minute burst, the daily or monthly allowance, and whether calls bill. Call it once at the start of a long task to pace yourself, rather than discovering the ceiling as a rate_limited error halfway through. Takes no arguments. Free, no API key needed. Endpoint: https://basinwise.vercel.app/api/mcp

## Resources
Not captured

## Prompts
Not captured

## Metadata
- Owner: io.github.maxbeech
- Version: 1.0.0
- Runtime: Streamable Http
- Transports: HTTP
- License: Not captured
- Language: Not captured
- Stars: Not captured
- Updated: Jul 22, 2026
- Source: https://registry.modelcontextprotocol.io
