Skip to main content
Glama

Server Details

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

Status
Healthy
Last Tested
Transport
Streamable HTTP
URL

Glama MCP Gateway

Connect through Glama MCP Gateway for full control over tool access and complete visibility into every call.

MCP client
Glama
MCP server

Full call logging

Every tool call is logged with complete inputs and outputs, so you can debug issues and audit what your agents are doing.

Tool access control

Enable or disable individual tools per connector, so you decide what your agents can and cannot do.

Managed credentials

Glama handles OAuth flows, token storage, and automatic rotation, so credentials never expire on your clients.

Usage analytics

See which tools your agents call, how often, and when, so you can understand usage patterns and catch anomalies.

100% free. Your data is private.
Tool DescriptionsA

Average 4.6/5 across 5 of 5 tools scored.

Server CoherenceA
Disambiguation5/5

Each tool has a clearly distinct purpose: permit determination, credential gate check, requirements retrieval, usage info, and jurisdiction listing. No overlaps or confusion.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., determine_permit, get_usage, list_jurisdictions), making them predictable and readable.

Tool Count5/5

With 5 tools, the server is well-scoped for its domain of NPDES permit compliance, covering essential operations without unnecessary bloat.

Completeness4/5

The set covers permit determination, requirements, credential gates, jurisdiction info, and usage—leaving minor gaps like direct document submission or status tracking, but core workflows are well-supported.

Available Tools

5 tools
determine_permitDetermine which stormwater permit governs a siteA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
acresNoAlias for disturbedAcres.
stateYesTwo-letter state, territory or DC code, e.g. "CA".
endDateNoISO yyyy-mm-dd. Recorded on the determination.
activityYesRequired. Construction and industrial sites are governed by different permits and neither is assumed. "industrial" returns coverage "verify": EPA's Multi-Sector General Permit expired on 28 February 2026 and new operators cannot currently obtain coverage.
startDateNoISO yyyy-mm-dd. Recorded on the determination.
sectorCodeNoMSGP industrial sector code. Industrial sites only.
aridClimateNoArid, semi-arid or drought-stricken area, which may allow a reduced inspection frequency during the seasonally dry period.
onTribalLandNoEPA retains NPDES authority in Indian country even inside a state that runs its own programme.
disturbedAcresNoTOTAL acres the project will disturb over its life. This is what the 1-acre coverage threshold is measured against. `acres` is accepted as an alias.
federalFacilityNoEPA's permit covers federal facilities in some delegated states.
partOfLargerPlanNoWhether the project is part of a larger common plan of development or sale. Defaults to false. Send it explicitly: a half-acre lot inside a 40-acre subdivision IS covered, and this is the most commonly missed trigger in the permit.
dischargesToTier2WaterNoDischarges to a Tier 2, 2.5 or 3 water. Same tri-state handling as dischargesToImpairedWater.
dischargesToImpairedWaterNoDischarges to a sediment or nutrient impaired water. OMIT IT if you do not know: it is never assumed false, and the determination reports the answer as unknown instead. It changes both the inspection frequency and the stabilisation deadline.
maxDisturbedAcresAtOneTimeNoGreatest acreage disturbed AT ANY ONE TIME. A different quantity from disturbedAcres, and the one the stabilisation deadline actually turns on (2022 CGP Table 2): a project over five acres in total still gets the longer 14-day deadline if it phases the work so no more than five acres are open at once. OMIT IT if you do not know, and the determination assumes an unphased site and says so, rather than asserting phasing it was not told about.
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations indicate readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description reinforces this by stating 'Deterministic, no model in the path.' It transparently explains behavioral nuances: requirements are returned only when rules are available, empty lists indicate unread permits rather than no requirements, and physical site inspections are not performed. No contradiction.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is thorough and front-loaded with the core purpose. While it is relatively long, every sentence adds value by detailing outputs, edge cases, and usage instructions. It is well-organized and avoids redundancy, though minor trimming could improve conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 14 parameters, no output schema, and the tool's complexity, the description is remarkably comprehensive. It covers return fields, derivation, notices, limitations, and parameter interdependencies. It addresses edge cases like state permits lacking rules and the EPA permit expiration, ensuring agents have a complete understanding.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, providing a baseline of 3. However, the description adds substantial context beyond the schema: it clarifies that 'acres' is an alias for 'disturbedAcres', explains the significance of 'partOfLargerPlan' as a commonly missed trigger, and details the nuanced behavior of 'maxDisturbedAcresAtOneTime' regarding stabilization deadlines. This greatly aids parameter understanding.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description precisely states the tool's function: determining which NPDES stormwater permit governs a site and what it requires. It lists the specific outputs and clearly distinguishes from sibling tools like get_requirements and list_jurisdictions by focusing on permit identification and site-specific requirements.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit usage guidance: it is for construction or industrial sites, and includes critical instructions like always surfacing notices verbatim and not treating empty requirements as 'nothing required'. While it doesn't explicitly state when not to use it vs siblings, the description effectively implies its primary role and sets clear expectations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_credential_gateDoes this state need a credentialed plan preparer?A
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
acresNoAcres disturbed. Optional but worth sending: several states gate only above an acreage threshold, and without it a conditional state can only name the threshold rather than resolve it.
stateYesTwo-letter state, territory or DC code, e.g. "CA".
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already declare readOnlyHint, idempotentHint, and destructiveHint. The description adds transparency about cost ('Free, no API key needed'), behavioral rules for unknown states, and consequences for document status. This goes well beyond what annotations provide.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is moderately long but well-structured, starting with the core question, then detailing output semantics and edge cases. Every sentence adds information, though a slightly tighter focus could improve efficiency.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Without an output schema, the description fully explains return fields (gate, appliesToThisSite, documentStatus) and their meanings. It addresses edge cases (unknown states, null appliesToThisSite) and provides practical usage notes. Complete for a simple query tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with descriptions for both parameters. The description adds context, especially for the 'acres' parameter, explaining its optionality and practical significance for resolving thresholds. This adds value beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The title and description clearly state the tool answers whether a state requires a credentialed plan preparer. It distinguishes itself from siblings like determine_permit, get_requirements, get_usage, and list_jurisdictions by focusing on the credential gate, a unique function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains the tool's purpose and the meaning of its outputs ('gate', 'appliesToThisSite', 'documentStatus'), including the critical warning that 'unknown' must never be treated as open. It does not explicitly contrast with alternatives, but the function is distinct enough.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_requirementsGet the permit requirements for a siteA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
acresNoAlias for disturbedAcres.
stateYesTwo-letter state, territory or DC code, e.g. "CA".
endDateNoISO yyyy-mm-dd. Recorded on the determination.
activityYesRequired. Construction and industrial sites are governed by different permits and neither is assumed. "industrial" returns coverage "verify": EPA's Multi-Sector General Permit expired on 28 February 2026 and new operators cannot currently obtain coverage.
startDateNoISO yyyy-mm-dd. Recorded on the determination.
sectorCodeNoMSGP industrial sector code. Industrial sites only.
aridClimateNoArid, semi-arid or drought-stricken area, which may allow a reduced inspection frequency during the seasonally dry period.
onTribalLandNoEPA retains NPDES authority in Indian country even inside a state that runs its own programme.
disturbedAcresNoTOTAL acres the project will disturb over its life. This is what the 1-acre coverage threshold is measured against. `acres` is accepted as an alias.
federalFacilityNoEPA's permit covers federal facilities in some delegated states.
partOfLargerPlanNoWhether the project is part of a larger common plan of development or sale. Defaults to false. Send it explicitly: a half-acre lot inside a 40-acre subdivision IS covered, and this is the most commonly missed trigger in the permit.
dischargesToTier2WaterNoDischarges to a Tier 2, 2.5 or 3 water. Same tri-state handling as dischargesToImpairedWater.
dischargesToImpairedWaterNoDischarges to a sediment or nutrient impaired water. OMIT IT if you do not know: it is never assumed false, and the determination reports the answer as unknown instead. It changes both the inspection frequency and the stabilisation deadline.
maxDisturbedAcresAtOneTimeNoGreatest acreage disturbed AT ANY ONE TIME. A different quantity from disturbedAcres, and the one the stabilisation deadline actually turns on (2022 CGP Table 2): a project over five acres in total still gets the longer 14-day deadline if it phases the work so no more than five acres are open at once. OMIT IT if you do not know, and the determination assumes an unphased site and says so, rather than asserting phasing it was not told about.
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations declare readOnlyHint=true, idempotentHint=true, destructiveHint=false, which the description does not contradict. The description adds behavioral detail: 'free, no API key needed,' explains the meaning of an empty requirements array ('NOT that nothing is required'), and clarifies that the tool does not assume certain values (e.g., dischargesToImpairedWater is never assumed false). This exceeds the annotation baseline.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single paragraph that covers multiple aspects efficiently, front-loading the key output (requirements details). It is moderately concise but could be slightly more terse without losing meaning. The structure is logical, moving from output content to caveats to cost.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given 14 parameters (100% schema coverage), no output schema, and the presence of annotations, the description is thorough. It explains the output structure, param semantics, usage constraints, and even addresses edge cases (empty array meaning). This is complete for an AI agent to use the tool correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so baseline is 3. The description adds significant value by explaining relationships (e.g., 'disturbedAcres is the 1-acre coverage threshold measure'), usage nuances (e.g., 'maxDisturbedAcresAtOneTime: OMIT IT if you do not know'), and context for tricky parameters (e.g., partOfLargerPlan: 'most commonly missed trigger'). This goes well beyond the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool returns permit requirements (inspection frequency, deadlines, etc.) and distinguishes it from the sibling determine_permit by mentioning 'same engine and same parser as determine_permit, projected down.' It also explains what comes with the requirements (coverage verdict, eligibility screens, notices), making the purpose precise.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides context for when to use this tool (getting detailed requirements after a permit determination) and offers parameter-level guidance (e.g., 'OMIT IT if you do not know' for some fields). However, it does not explicitly contrast when to use get_requirements versus determine_permit or other siblings, leaving some ambiguity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_usageWhat this key is allowed to doA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide readOnlyHint, idempotentHint, destructiveHint. Description adds that it takes no arguments, is free, and requires no API key. It describes the output but does not explicitly state whether calling it consumes rate limits, which could be inferred as safe but is not confirmed.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three sentences: first describes output, second gives usage advice, third states no arguments and free. Concise, front-loaded, and each sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters and no output schema, the description provides essential usage advice and output description (tier, burst, allowance, billing). It could be more specific about output format or whether it reports current usage vs limits, but is generally complete for an agent's decision-making.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist and schema coverage is 100%. The description explicitly states 'Takes no arguments', confirming the absence of input, which is sufficient.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that this tool returns the credential's allowed usage: tier, burst, allowance, and billing. It also advises when to use it to avoid rate limits, and distinguishes it from sibling tools which deal with permits, gates, requirements, and jurisdictions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly advises to call at the start of a long task to pace usage, contrasting with encountering rate limit errors. Also notes it is free and requires no API key, offering clear guidance on when and how to use.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_jurisdictionsList every jurisdiction and its permitting authorityA
Read-onlyIdempotent
Inspect

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already provide read only and idempotent hints. The description adds valuable context: it takes no arguments, is free, requires no API key, and explains the critical behavior of including unverified jurisdictions with notes rather than omitting them. No contradictions.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single efficient paragraph, every sentence is informative and earned. It front-loads the core purpose and immediately clarifies an important edge case about unverified jurisdictions.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given no parameters and no output schema, the description is complete: it names the fields returned, explains the handling of unverified jurisdictions, and sets expectations about cost and authentication. No gaps remain.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With zero parameters and 100% schema coverage, the description correctly states 'Takes no arguments'. Baseline for 0 params is 4; no additional parameter info needed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description explicitly states the tool lists every jurisdiction (state, territory, DC) with NPDES authorization status, governing permit, agency details, and preparer-credential gate. It clearly distinguishes from siblings by focusing on a comprehensive list rather than specific permit determination or gate queries.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for obtaining a full coverage list and clarifies that unverified jurisdictions are included to avoid misinterpretation. However, it does not explicitly mention when to use alternatives like `determine_permit` or `get_credential_gate`, though the context makes it inferable.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Discussions

No comments yet. Be the first to start the discussion!

Related MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    ollect comprehensive environmental data from 80+ US federal sources (FEMA, EPA, USGS, NOAA, NRCS, USFWS, DOE, DOT, CDC, Census) for any US location. One tool returns flood zones, soils, wetlands, rainfall, water quality, contamination, seismic risk, infrastructure, ecology, energy, and demographics.
    3
    14
    6
    MIT
  • A
    license
    -
    quality
    D
    maintenance
    Provides programmatic access to municipal codes, ordinances, and zoning regulations from thousands of US cities and counties through the Municode digital library, enabling search, navigation, and retrieval of local government legal documents.
    6
    MIT

View all MCP Servers

Try in Browser

Your Connectors

Sign in to create a connector for this server.

Resources