gov-data-mcp
This MCP server exposes 122 official US government open-data tools as agent-callable functions, with 12 dedicated high-traffic tools plus free catalog search/describe and a metered run-any-tool meta tool.
Screen a coordinate or address for environmental due diligence: EPA contamination, Phase I ESA ASTM E1527-21 records, 20-layer go/caution/no-go site verdict, wetlands, §404 surface water, drinking water quality, FEMA hazard risk, flood loss.
Evaluate energy/grid siting: nearest transmission line, substation, power plant, serving utility/ISO, interconnection queues across 7 ISOs, pipelines, solar/wind resources, orphaned wells.
Check FAA drone airspace: LAANC ceilings, Class B/C/D/E airspace, prohibited areas, TFRs, special use airspace, stadium TFRs, recreational flyer sites.
Run financial/compliance screening: FDIC/NCUA bank health, CRE concentration, sanctions lists, OIG/Medicaid exclusions, KYB, LEI ownership, SEC/PCAOB monitors.
Look up real estate, parcels, deeds, and leads: assessor owner of record, absentee owners, NYC deed transfers, landlord registries, liquor/business licenses, realtor rosters.
Verify professional licenses: 19 state boards, disciplinary actions, NPI cross-walk, OIG exclusion screen, newly licensed clinician feeds.
Search/describe/run any of the 122 catalog tools for other topics: health, labor, patents, securities, infrastructure, habitats, farmland, and more.
Use vertical presets (
phase1-esa,cre-leads,compliance) to narrow the exposed tools to one shelf while keeping the same catalog.Rely on honest failure behavior: every run reports
run_status, never turns a failed source into a clean negative, and zero rows only mean the source was reached and matched nothing.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@gov-data-mcpCheck environmental risk at 1200 Broadway, Denver"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
gov-data-mcp
122 US government open-data tools, as one MCP server.
EPA, FEMA, USGS, NOAA, FAA, USACE, FDIC, HUD, NRCS, HRSA, CMS, county assessor rolls and state licensing boards — all reachable as agent-callable tools, all reading directly from official government APIs and bulk files. No scraping, no HTML parsing, no rate-limit roulette.
mcp-name: io.github.malonestar/gov-data-mcp
npx gov-data-mcpInstall
You need a free Apify API token from console.apify.com/settings/integrations. Apify's free tier includes monthly platform credit that covers evaluating every tool here.
Claude Desktop / Claude Code / Cursor
{
"mcpServers": {
"gov-data": {
"command": "npx",
"args": ["-y", "gov-data-mcp"],
"env": { "APIFY_TOKEN": "apify_api_..." }
}
}
}Claude Desktop reads claude_desktop_config.json; Claude Code reads .mcp.json in your project; Cursor reads .cursor/mcp.json. The block is identical in all three.
Related MCP server: mcp-brasil
What you get
12 dedicated tools for the highest-traffic questions, callable directly:
Tool | Answers |
| 20-layer go / caution / no-go verdict for one coordinate |
| Phase I ESA database search at ASTM E1527-21 distances |
| Part 107 LAANC and airspace verdicts, batched |
| Nearest transmission line, substation, serving utility, ISO/RTO |
| Generator interconnection queues across 7 ISOs |
| Bank and credit-union health with real peer cohorts |
| County and census-tract natural-hazard risk |
| NWI wetlands within a radius, with decode columns |
| Clean Water Act §404 surface-water screen |
| SDWA violations, lead, PFAS occurrence |
| Assessor-roll owner of record for an address |
| 19 professional licensing boards across 9 states + OIG exclusions |
Plus three tools that reach the other 110:
search-gov-data-tools— find a tool by keyword, agency or topicdescribe-gov-data-tool— full input schema for any tool in the catalogrun-gov-data-tool— run any tool in the catalog
The catalog is bundled, so discovery costs nothing. Ask your agent "what government data tools do you have for flood risk?" and it will search all 122.
Vertical presets
The full server is the right default for a general-purpose agent. For an agent that serves one kind of buyer, a preset narrows the whole surface — the named tools and what search-gov-data-tools / describe-gov-data-tool / run-gov-data-tool can reach — to one shelf, and announces itself to the client under its own server name and description. Same package, same catalog, same release; nothing to install separately. Pass --preset <name> or set GOV_DATA_MCP_PRESET. An unknown preset name refuses to start rather than guessing. npx gov-data-mcp --list-presets prints the current list as JSON.
Preset | Server name | Tools | For |
|
| 11 + 3 meta | Phase I ESA — Environmental Due Diligence |
|
| 12 + 3 meta | CRE & Local Business Leads — Who Just Changed State |
|
| 12 + 3 meta | KYB, Sanctions & Financial Compliance Screening |
phase1-esa — Phase I ESA — Environmental Due Diligence
US government environmental records for Phase I Environmental Site Assessments and property due diligence: EPA Superfund / RCRA / UST / brownfield records at ASTM E1527-21 search distances, state tank and spill registries, historic land use from FRS SIC/NAICS, USGS historical topographic map coverage, NWI wetlands, Clean Water Act §404 surface water, RCRA corrective-action cleanups, orphaned wells, FEMA hazard risk and NFIP flood-loss history, plus a twenty-layer go / caution / no-go site verdict. Every tool reads the official source directly and reports what it could not check as null, never as clear.
11 tools: site-due-diligence-bundle · epa-contaminated-site-screener · historic-land-use-sic-contaminant-screener · state-tank-spill-registry-screener · usgs-historical-topo-records-review · epa-rcra-corrective-action-cleanup-monitor · orphaned-well-proximity-screener · fws-wetlands-proximity-screener · nhd-surface-water-404-screener · fema-nri-county-risk-profile · nfip-flood-loss-risk-screener — plus search-gov-data-tools, describe-gov-data-tool, run-gov-data-tool, scoped to this list.
Claude Desktop (claude_desktop_config.json), Claude Code (.mcp.json) and Cursor (.cursor/mcp.json) all take the same block:
{
"mcpServers": {
"gov-data-phase1-esa": {
"command": "npx",
"args": ["-y", "gov-data-mcp", "--preset", "phase1-esa"],
"env": { "APIFY_TOKEN": "apify_api_..." }
}
}
}Or, with the environment variable instead of the flag: "args": ["-y", "gov-data-mcp"] and "env": { "APIFY_TOKEN": "apify_api_...", "GOV_DATA_MCP_PRESET": "phase1-esa" }.
Command line: npx gov-data-mcp --preset phase1-esa
cre-leads — CRE & Local Business Leads — Who Just Changed State
Lead-generation feeds built from official state and county registers: new and pending liquor licenses, verified new business openings from Secretary of State and tax rosters, WARN layoff notices, newly licensed real estate agents, licensed childcare providers with contacts, parcel owner of record, absentee-owner lists, distressed-property signal stacks, NYC deed transfers and landlord registries, city business licenses and professional license verification. Delta modes return only what changed since the last run, so a scheduled agent pays for new leads, not the same roster twice.
12 tools: liquor-license-new-openings-tracker · sos-registry-monitor · warn-layoff-aggregator · realtor-license-roster-delta · childcare-provider-leads · parcel-owner-lookup · absentee-owner-lead-list-builder · distressed-property-signal-stacker · acris-deed-transfer-intel · nyc-landlord-registry-lead-list · city-business-license-leads · license-verifier — plus search-gov-data-tools, describe-gov-data-tool, run-gov-data-tool, scoped to this list.
Claude Desktop (claude_desktop_config.json), Claude Code (.mcp.json) and Cursor (.cursor/mcp.json) all take the same block:
{
"mcpServers": {
"gov-data-cre-leads": {
"command": "npx",
"args": ["-y", "gov-data-mcp", "--preset", "cre-leads"],
"env": { "APIFY_TOKEN": "apify_api_..." }
}
}
}Or, with the environment variable instead of the flag: "args": ["-y", "gov-data-mcp"] and "env": { "APIFY_TOKEN": "apify_api_...", "GOV_DATA_MCP_PRESET": "cre-leads" }.
Command line: npx gov-data-mcp --preset cre-leads
compliance — KYB, Sanctions & Financial Compliance Screening
Know-your-business and compliance screening from primary US government registers: company existence across Secretary of State registries, the Trade.gov Consolidated Screening List (OFAC SDN, BIS, State) as a delta, the DHS UFLPA Entity List, state Medicaid and HHS-OIG exclusion lists, professional license verification, GLEIF LEI ownership graphs, FDIC / NCUA institution health, FDIC structure changes, SEC investment-adviser registrations, PCAOB auditor engagements and SEC Regulation CF / A+ offering lifecycles. A screen that could not reach its source fails loudly rather than returning a clean sheet.
12 tools: kyb-company-verifier · consolidated-screening-list-delta · uflpa-entity-list-monitor · medicaid-exclusion-screener · license-verifier · gleif-ownership-graph · fdic-ncua-health-rollup · fdic-structure-change-delta-monitor · ria-registration-delta-monitor · pcaob-auditor-engagement-monitor · reg-cf-lifecycle-monitor · reg-a-plus-lifecycle-monitor — plus search-gov-data-tools, describe-gov-data-tool, run-gov-data-tool, scoped to this list.
Claude Desktop (claude_desktop_config.json), Claude Code (.mcp.json) and Cursor (.cursor/mcp.json) all take the same block:
{
"mcpServers": {
"gov-data-compliance": {
"command": "npx",
"args": ["-y", "gov-data-mcp", "--preset", "compliance"],
"env": { "APIFY_TOKEN": "apify_api_..." }
}
}
}Or, with the environment variable instead of the flag: "args": ["-y", "gov-data-mcp"] and "env": { "APIFY_TOKEN": "apify_api_...", "GOV_DATA_MCP_PRESET": "compliance" }.
Command line: npx gov-data-mcp --preset compliance
Example prompts
Screen 1200 Broadway, Denver CO for environmental risk under ASTM E1527-21 and tell me which findings fall inside the standard's search distance.
I'm siting a 40 MW solar project at 41.88, -93.10. Check grid proximity, prime farmland, wetlands, critical habitat and the interconnection queue, then tell me what would kill the project.
Can I fly a Part 107 mission at these six coordinates, and which ones need a DroneZone authorization rather than LAANC?
Which Texas banks show the 2006 CRE-concentration guidance flagged on both prongs?
How it works
Each tool is a published Apify Actor that this server invokes through the Apify API. The server starts the run, waits for a terminal state, and returns the rows.
Billing is to your own Apify account at each actor's published pay-per-result rate, listed on its Store page. Free-tier credit covers evaluation. A run that fails bills nothing beyond a fractional actor-start charge.
Every result carries the run_id and a console.apify.com URL, so any claim an agent makes from this server can be traced back to the exact run that produced it.
No Apify account? Agents can pay per run with x402
Every tool in this catalog is eligible for Apify's agentic payments: an agent with a funded Coinbase Agentic Wallet (USDC on Base, $1 minimum) buys a prepaid Apify token over the x402 protocol and uses it as APIFY_TOKEN — no account, no billing setup, no API key. The ready-made skill is apify.it/x402-awal:
npx -y awal auth login <email> # one-time wallet auth
npx awal x402 pay 'https://agi.apify.com/protocols/x402/prepaid-tokens?amount=5¤cy=usd' --max-amount 5000000 --json
# → returns a bearer token; export it as APIFY_TOKEN and start this server as usualThe prepaid balance is an absolute spending cap and expires after 14 days. Every tool here charges only per result — none pass platform usage through, none require full permissions, and none run in Standby mode, which are the three things that make an Actor ineligible. Prices are in the catalog (usdPer1000Results on every search hit), so an agent can see the cost before spending.
On honest answers
These actors are built around one rule: a failure must never be presentable as "nothing was found." That distinction matters most in exactly the cases people use this for — telling a buyer a property is clear of contamination, telling a pilot an airspace is uncontrolled, telling a lender a borrower is unlicensed.
So this server:
reports
run_statuson every call, and never attaches arowskey to a run that did not succeeddistinguishes "the run SUCCEEDED and the source genuinely matched nothing" from "the run failed" in the response text, explicitly
retries transient Apify 429/5xx, then fails loudly saying the platform failed and no conclusion should be drawn about the government source
treats an unknown tool name as a catalog miss, never as an empty result
The underlying actors carry the same discipline: per-source status on every row, null meaning not checked rather than checked and negative, live drift assertions that fail the run when an upstream silently truncates, and pagination guards on sources that answer HTTP 200 with a partial payload. Each actor's Store page documents the specific traps it defends against.
Coverage
122 tools, every one reading an official US government API or bulk file. The MCP server exposes 15 of them directly — twelve named tools plus search-gov-data-tools, describe-gov-data-tool and run-gov-data-tool, which reach the rest — because agents choose badly when handed more than about twenty tools.
Each entry links to its full input/output schema, pricing and worked examples.
Contamination & environmental due diligence (18)
epa-airtoxscreen-cancer-risk-screener · epa-contaminated-site-screener · epa-drinking-water-quality-screener · epa-ghgrp-emitter-screener · epa-impaired-waters-303d-screener · epa-nonattainment-air-permit-screener · epa-rcra-corrective-action-cleanup-monitor · epa-rcra-hazwaste-generator-rollup · epa-repowering-brownfield-to-solar-site-finder · epa-sole-source-aquifer-screener · epa-tri-facility-release-rollup · epa-tsca-cdr-chemical-site-screener · erns-nrc-release-incident-screener · fuds-defense-site-screener · historic-land-use-sic-contaminant-screener · site-due-diligence-bundle · state-tank-spill-registry-screener · usgs-historical-topo-records-review
Flood, fire, quake & ground hazard (13)
calfire-fhsz-screener · cbrs-coastal-barrier-screener · fema-nri-county-risk-profile · fema-repetitive-loss-flood-market-screener · karst-sinkhole-risk-screener · nfip-flood-loss-risk-screener · noaa-slr-inundation-threshold-screener · noaa-storm-events-peril-climatology · usace-levee-flood-risk-screener · usgs-bedrock-geology-lithology-screener · usgs-landslide-proximity-screener · usgs-seismic-design-screener · wildfire-asset-exposure-screener
Habitat, wetlands, protected & historic land (9)
blm-sage-grouse-siting-screener · fws-critical-habitat-screener · fws-wetlands-proximity-screener · nhd-surface-water-404-screener · noaa-efh-consultation-screener · nrhp-historic-place-screener · padus-protected-lands-screener · tribal-land-jurisdiction-screener · wild-scenic-river-proximity-screener
Energy siting, grid & pipelines (14)
blm-mining-claims · blm-solar-siting-area-screener · boem-offshore-wind-lease-tracker · cdfi-nmtc-lowincome-energy-bonus-screener · eia-v2-site-energy-economics · energy-corridor-368-screener · hifld-grid-proximity-screener · interconnection-queue-tracker · ira-energy-community-bonus-screener · nrel-pvwatts-solar-resource-scorer · ntad-gas-pipeline-proximity-screener · oil-gas-well-permits · orphaned-well-proximity-screener · uswtdb-turbine-proximity-screener
Farmland, soil & water (5)
ssurgo-soil-suitability-screener · usda-cdl-farmland-siting-screener · usgs-groundwater-depth-screener · usgs-nwis-streamflow-monitor · water-rights-availability-screener
Banking, lending & credit (9)
bank-enforcement-tracker · fdic-branch-network-churn-rollup · fdic-ncua-health-rollup · fdic-sod-deposit-market-share-rollup · fdic-structure-change-delta-monitor · fhlbank-membership-delta-monitor · hmda-fair-lending-disparity-rollup · sba-loan-portfolio-explorer · ucc-lapse-refinance-window
Securities, audit, pensions & sanctions (10)
adcvd-trade-remedy-tracker · consolidated-screening-list-delta · fec-campaign-finance-delta · pbgc-pension-failure-monitor · pcaob-auditor-engagement-monitor · reg-a-plus-lifecycle-monitor · reg-cf-lifecycle-monitor · ria-registration-delta-monitor · short-interest-ftd-monitor · uflpa-entity-list-monitor
Licensing, exclusion & workforce screening (10)
city-business-license-leads · gleif-ownership-graph · hrsa-clinician-workforce-monitor · hrsa-shortage-designation-monitor · kyb-company-verifier · license-verifier · liquor-license-new-openings-tracker · medicaid-exclusion-screener · realtor-license-roster-delta · sos-registry-monitor
Real estate, parcels, deeds & leads (9)
absentee-owner-lead-list-builder · acris-deed-transfer-intel · childcare-provider-leads · distressed-property-signal-stacker · hud-affordable-housing-explorer · hud-qct-lihtc-boost-screener · hud-section8-contract-expiration-monitor · nyc-landlord-registry-lead-list · parcel-owner-lookup
Infrastructure, transport & airspace (10)
bts-airline-ontime-delay-climatology · bts-db1b-fare-route-market-analytics · dod-mirta-military-installation-siting-screener · faa-drone-airspace-checker · fhwa-nbi-bridge-risk-monitor · gsa-site-scanning-auditor · national-tunnel-inventory-risk-monitor · nhtsa-vpic-vin-decoder · nid-dam-risk-monitor · ntad-fra-rail-crossing-risk-screener
Health, clinical & drug supply (7)
cdc-nndss-outbreak-monitor · clinical-trials-meta-search · cms-open-payments · cms-part-d-prescriber-delta · drug-shortage-delta-monitor · nadac-price-movers · usmin-mine-feature-proximity-screener
Patents, IP & company data (5)
ca-data-broker-registry-delta · npm-package-health-scorer · ptab-trial-tracker · sbom-vulnerability-rollup · uspto-patent-lapse-fto-monitor
Labor & enforcement (3)
dol-enforcement-rollup · osha-ita-injury-illness-establishment-monitor · warn-layoff-aggregator
Development
npm install
npm test # offline suite, no network
node tools/mutate.cjs # re-injects known defects, asserts the suite catches them
npm run catalog -- <apify-token> # regenerate src/catalog.json from the live APILicense
MIT
Available Tools
15 toolsdescribe-gov-data-toolARead-onlyIdempotent
Return the full input schema and documentation for any one of the 122 tools in the catalog. Call this before run-gov-data-tool so the input is correctly shaped. FREE: reads a catalog bundled with this server — no network call, no run, nothing charged.
| Name | Required | Description | Default |
|---|---|---|---|
| tool | Yes | The tool name, e.g. "noaa-slr-inundation-threshold-screener". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description adds genuinely new operational context: it is free, performs no network call, does not run anything, and charges nothing — useful cost/side-effect info beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and scope, then the sequencing rule, then the cost caveat. No filler; every sentence carries information an agent needs.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Although there is no output schema, the description explicitly says what is returned (full input schema and documentation), which covers the return-value gap. For a 1-parameter, annotation-rich tool this is complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% and the schema already documents the single 'tool' parameter with an example. The description still adds value by bounding the domain to the 122 tools in the bundled catalog, telling the agent the parameter must name a catalog member rather than an arbitrary string.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Return') and resource ('full input schema and documentation') over a well-defined scope (any one of the 122 catalog tools). This is clearly distinguishable from siblings like search-gov-data-tools (discovery) and run-gov-data-tool (execution).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says to call it before run-gov-data-tool 'so the input is correctly shaped', giving a concrete sequencing rule and the reason for it. It does not, however, contrast against search-gov-data-tools or state when describing is unnecessary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
epa-contaminated-site-screenerA
Phase I ESA & Environmental Due Diligence: EPA Database Search. Environmental due diligence by address: an environmental database report over EPA Superfund/NPL, RCRA CORRACTS/TSD/generators, TRI, UST, LUST, Brownfields, NPDES, AIR, TSCA and RMP, scored at ASTM E1527-21 search distances, plus on-site Superfund and AUL boundary checks. No API key. CHOOSE THIS for the ASTM E1527-21 Phase I records search at regulation distances around one or more properties. For a single combined verdict across twenty unrelated layers use site-due-diligence-bundle; for drinking-water quality use epa-drinking-water-quality-screener. Reads live from the official government source. COST AND SIDE EFFECTS: read-only with respect to the government source — it never writes to any external system — but each call starts a metered run on YOUR Apify account, billed $0.01 per result ($10 per 1,000). Lower on paid Apify plans, down to $3.00 per 1,000. Nothing is charged when a run fails. Store page: https://apify.com/malonestar/epa-contaminated-site-screener
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | "assets" (default) runs a multi-database Phase I ESA-style regulatory-records screen on your addresses/coordinates — one billable row per nearby EPA-listed site (across Superfund, RCRA, TRI, UST, LUST and Brownfields). "inventory" instead dumps the raw list of EPA SEMS/Superfund sites for the states you pick — one billable row per site. Example: "assets". | |
| assets | No | Locations to screen against EPA contaminated-site databases. Each item is EITHER {"address": "...", "label": "..."} (geocoded via the free Census geocoder) OR {"lat": <number>, "lon": <number>, "label": "...", "state": "<2-letter, OPTIONAL>"}. The "state" hint is no longer required with lat/lon — Superfund is now also screened spatially against the EPA FRS SEMS point layers, which need no state. Supplying "state" additionally pulls that state's full Envirofacts SEMS roster for wider non-NPL coverage. One dataset row (one billable check) is produced per site hit found within the radius; assets with no hits return a single "clear" row. If EVERY asset fails input validation the run FAILS and nothing is billed. Example: [{"lat":39.8037,"lon":-104.9986,"state":"CO","label":"Denver industrial parcel (lat/lon input)"},{"address":"5980 Lipan St, Denver, CO 80221","label":"Denver industrial parcel (address input)"}]. | |
| states | No | 2-letter US state codes (e.g. ["CO", "NJ"]) whose EPA SEMS/Superfund site records to list. Required when Mode = inventory. Ignored in assets mode (state is derived automatically per-asset). | |
| onlyNpl | No | Inventory mode only: when true, keep only sites currently on (or part of) the National Priorities List — the actual Superfund program sites. When false, include all SEMS site statuses. Default false. Applied by default if omitted: false. | |
| astmMode | No | Assets mode only. Adds ONE extra "astm_summary" row after each asset's normal rows, scoring this actor's databases against the ASTM E1527-21 Sec. 8.2.1 standard search distances. The refined table splits RCRA into its three real ASTM line items — CORRACTS 1.0 mi, TSD 0.5 mi, LQG/SQG/VSQG generators 0.25 mi — resolved from EPA ECHO, alongside NPL 1.0 mi, SEMS-CERCLIS 0.5 mi, LUST 0.5 mi, UST 0.25 mi and Brownfields 0.5 mi (TRI has no ASTM search distance and is excluded). Results come as flat CSV-safe columns (astm_npl_flag, astm_rcra_corracts_flag, ...) plus a nested object, with an astm_refined_verdict. Automatically widens the underlying fetch to 1 mile; your normal per-hit rows still respect radiusMiles unchanged. Screening aid only — not a substitute for an ASTM E1527-21 Phase I ESA. Default false. Example: true. Applied by default if omitted: false. | |
| programs | No | Which EPA program databases to include. The six defaults: SUPERFUND (NPL/SEMS), RCRA (hazardous-waste handlers, now classified into CORRACTS / TSD / generator), TRI (Toxics Release Inventory), UST (underground storage tanks), LUST (leaking USTs), BROWNFIELD (ACRES/FRS). Four additional opt-in programs come from the SAME EPA ECHO response at no extra upstream call: NPDES (Clean Water Act discharge permits), AIR (Clean Air Act permitted sources), TSCA (incl. PCB handlers), RMP (Risk Management Plan chemical-accident facilities). Leave EMPTY to screen the original six only — that keeps row counts and cost identical to previous versions. Ignored in inventory mode. Example: ["SUPERFUND","RCRA","TRI","UST","LUST","BROWNFIELD","NPDES","AIR","TSCA","RMP"]. | |
| maxResults | No | Safety cap on total dataset rows produced across the run: max site hits emitted (assets mode) or max SEMS site rows (inventory mode). Applied by default if omitted: 1000. | |
| radiusMiles | No | Distance from each asset within which EPA-listed sites are counted and reported across all selected programs. Accepts fractional miles (0.1-50) so you can screen at the ASTM E1527-21 standard search distances directly: 1.0 mi (NPL / RCRA CORRACTS), 0.5 mi (SEMS-CERCLIS, RCRA TSD, LUST, Brownfields), 0.25 mi (registered UST, RCRA generators). Default 1 mile covers the widest ASTM distance. Example: 1. | |
| onlyWithCoords | No | Inventory mode only: when true (default), drop SEMS records with no latitude/longitude. Coordinate coverage varies sharply by state — measured 2026-07: 3% of Texas SEMS records carry coordinates, 16% California, 48% Colorado, 60% New Jersey, 77% New York, while NPL-track records are ~96-100% geocoded everywhere. Set false to see the full raw roster including un-mappable rows. Example: true. | |
| includeBoundaries | No | Assets mode only. Runs two extra point-in-polygon queries per asset to answer "is this property ON a Superfund site?" (on_superfund_site, superfund_site_name, superfund_epa_url) and "is it inside a published EPA Superfund institutional-control / activity-and-use-limitation boundary?" (institutional_control_flag, institutional_control_description). These are true boundary intersections, not distance-to-centroid. Note EPA publishes ~2,114 NPL site polygons but only ~165 IC polygons nationally, so a false IC result means "not inside a published federal Superfund IC", NOT "no AUL exists". Adds no dataset rows and no billing. Default true. Example: true. | |
| maxHitsPerProgram | No | Assets mode only: cap on the number of nearest site hits reported per program per asset (keeps output and billing bounded near dense industrial areas). The nearest sites are kept. Default 50. Range 1-1000. Example: 10. Applied by default if omitted: 50. | |
| strictDataCompleteness | No | Assets mode only. Reserved for callers that must not accept partial coverage. Regardless of this setting, every row already carries programs_screened / programs_failed / data_complete, and an asset whose databases ALL failed is reported as result_type "error" — never as a "clear" result. If every database fails for every asset the run FAILS so nothing is billed. Default false. Applied by default if omitted: false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond annotations by disclosing cost and side effects: 'read-only with respect to the government source — it never writes to any external system — but each call starts a metered run on YOUR Apify account, billed $0.01 per result ($10 per 1,000).' It also notes 'Nothing is charged when a run fails.' This is rich behavioral context that annotations alone do not provide. The annotations say readOnlyHint=false, but the description clarifies it is read-only with respect to the government source while being a metered run on the user's account — this is not a contradiction, it's a nuanced disclosure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but every sentence earns its place: it covers purpose, usage, alternatives, cost, side effects, and store page. The key 'CHOOSE THIS' guidance is front-loaded after the initial definition. It is dense but not redundant. It loses one point for length — it could be tightened slightly without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (12 parameters, two modes, multiple EPA programs, ASTM distances, billing model), the description is remarkably complete. It covers cost, failure behavior, mode differences, parameter interactions, and even provides a store page link. There is no output schema, but the description explains what rows are produced (billable rows per site hit, 'clear' rows, astm_summary rows). Nothing critical is missing for an agent to select and invoke this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the baseline is 3. The description adds significant meaning beyond the schema: it explains the billing model per row, the difference between assets and inventory modes, the ASTM E1527-21 search distances, and the behavior of the 'state' hint with lat/lon. It also clarifies that 'programs' can be left empty to keep costs identical to previous versions. This is substantial added value over the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Phase I ESA & Environmental Due Diligence: EPA Database Search' and immediately explains it produces an environmental database report over a list of EPA programs. It also distinguishes itself from siblings by naming site-due-diligence-bundle and epa-drinking-water-quality-screener as alternatives. This is a clear, specific, and well-differentiated purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says 'CHOOSE THIS for the ASTM E1527-21 Phase I records search at regulation distances around one or more properties' and names alternatives: 'For a single combined verdict across twenty unrelated layers use site-due-diligence-bundle; for drinking-water quality use epa-drinking-water-quality-screener.' This gives clear when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
epa-drinking-water-quality-screenerA
EPA Drinking Water Quality Screener - Violations, Lead & PFAS. Screen any US coordinate for the public water system serving it: SDWA health-based violations, Lead & Copper Rule 90th-percentile results and UCMR5 PFAS detections - the evidence base behind the LCRI (Nov 1, 2027) and PFAS NPDWR (Apr 26, 2027) deadlines. Never clears a source that did not answer. CHOOSE THIS for public water-system quality: SDWA violations, lead 90th-percentile results and PFAS occurrence. It is NOT a property contamination screen — for soil and groundwater records at a site use epa-contaminated-site-screener. Reads live from the official government source. COST AND SIDE EFFECTS: read-only with respect to the government source — it never writes to any external system — but each call starts a metered run on YOUR Apify account, billed $0.012 per Drinking water screening result ($12 per 1,000). Lower on paid Apify plans, down to $3.60 per 1,000. Nothing is charged when a run fails. Store page: https://apify.com/malonestar/epa-drinking-water-quality-screener
| Name | Required | Description | Default |
|---|---|---|---|
| assets | No | Sites to screen, each {"lat": <number>, "lon": <number>, "label": "<your name for the site>"}. Each location is matched against EPA's mapped community water system service areas to identify the serving public water system. A location with no mapped service area returns an explicit NO_SERVICE_AREA row (likely a private well), never a false clear. Example: [{"lat":43.0125,"lon":-83.6875,"label":"Flint MI - lead action level exceedance"},{"lat":40.9793,"lon":-74.1165,"label":"Ridgewood NJ - PFAS detections"},{"lat":39.7392,"lon":-104.9903,"label":"Denver CO - control"}]. | |
| pwsids | No | Optional. Screen specific public water systems by 9-character EPA PWSID (for example ["MI0002310"]) without a coordinate lookup. Combined with any locations supplied above. Example: []. | |
| maxAssets | No | Safety cap on how many locations are screened in one run. Locations beyond the cap are reported in the log and not billed. Example: 250. | |
| includeLead | No | Fetch Lead and Copper Rule 90th-percentile tap results and join them to their monitoring periods, so the reported value is dated rather than undated. Example: true. | |
| includePfas | No | Screen the system against EPA's UCMR5 occurrence dataset (1.9 million results, 29 PFAS analytes plus lithium). Turn off for a faster run when PFAS is out of scope. Example: true. | |
| simulateOutage | No | Diagnostic seam for verifying failure behaviour. Forces one or all EPA sources to fail so you can confirm the actor reports the source as unavailable and never publishes a false clear. Leave as none for normal use. Example: "none". | |
| violationYears | No | How many years back counts as a recent health-based violation for the screening flags. The full violation history is still summarised regardless. Set 0 to disable the window. Example: 10. | |
| refreshPfasCache | No | Re-download and re-index the UCMR5 occurrence file even if the cached index already matches EPA's current published vintage. Normally unnecessary: the cache is keyed to the file's Last-Modified header and rebuilds itself whenever EPA republishes. Example: false. | |
| runBudgetSeconds | No | Total time budget for all upstream requests including retries. Requests stop rather than retry past this budget, so a long EPA outage fails loudly instead of hanging. Example: 900. | |
| includeViolations | No | Fetch the system's full Safe Drinking Water Act violation history from EPA SDWIS and roll it up (health-based, monitoring/reporting, treatment technique, Lead & Copper Rule, public-notification tier). Example: true. | |
| includeEnforcement | No | Fetch the system's SDWIS formal enforcement action history and report the count and most recent action. Example: true. | |
| maxViolationDetails | No | How many individual health-based violation records to include in the health_based_violation_details array on each row, newest first. Counts are never truncated. Example: 25. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: it explains that it is read-only against the government source but each call starts a metered, billable run on the caller's Apify account ($0.012/result, $3.60–$12 per 1,000, nothing charged on failure), and that it "never clears a source that did not answer." The readOnlyHint=false is thereby reconciled rather than contradicted (the write is run creation, not external mutation), and non-idempotency is implied by per-call metering.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with scope, then routing guidance, then cost/side effects, which is the right order. It is on the long side and the pricing breakdown plus store URL are somewhat promotional, but each block still earns its place for a paid, metered tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter tool with no output schema, the description covers the key semantic behaviors (NO_SERVICE_AREA row for unmapped locations, dated lead results, health_based_violation_details) and the cost model. Return-shape detail is partial but sufficient; nothing an agent needs to invoke correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the schema itself is exceptionally rich (examples, semantics, and rationale for each of the 12 params). The description adds no parameter-level detail, so this sits at the baseline 3 — the schema carries the full burden and does so adequately.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb+resource (screen any US coordinate for the public water system serving it) and enumerates the data domains: SDWA violations, Lead & Copper Rule 90th-percentile results, UCMR5 PFAS detections. It explicitly distinguishes itself from the sibling epa-contaminated-site-screener, so an agent can route without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
"CHOOSE THIS for public water-system quality" plus an explicit exclusion: "It is NOT a property contamination screen — for soil and groundwater records at a site use epa-contaminated-site-screener." This is the when/when-not/alternative pattern done cleanly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
faa-drone-airspace-checkerA
FAA Drone Airspace Checker - Batch LAANC & No-Fly Verdicts. Batch lat/lon to FAA UAS airspace verdicts at $0.02 per check: LAANC ceilings AND whether LAANC is actually offered, charted Class B/C/D/E surface areas, prohibited areas, national-defense TFR areas, special use airspace, NSUFR, stadium TFRs. Never reads clear when a layer did not answer. Reads live from the official government source. COST AND SIDE EFFECTS: read-only with respect to the government source — it never writes to any external system — but each call starts a metered run on YOUR Apify account, billed $0.02 per result ($20 per 1,000). Lower on paid Apify plans, down to $6.00 per 1,000. Nothing is charged when a run fails. Store page: https://apify.com/malonestar/faa-drone-airspace-checker
| Name | Required | Description | Default |
|---|---|---|---|
| layers | No | Which FAA airspace layers to check each point against. Defaults to all eight. laanc_grid = UAS Facility Map LAANC ceilings; class_airspace = charted Class A/B/C/D/E airspace (ALWAYS queried - it is the check that distinguishes uncontrolled airspace from controlled airspace that has no LAANC grid, so excluding it would force every verdict to INCONCLUSIVE); prohibited_areas = P-areas like P-56; national_defense_tfr = national defense airspace TFR areas; special_use_airspace = Restricted/MOA/Alert/Warning/Danger areas; part_time_nsufr = part-time national security UAS flight restrictions; stadiums = stadium game-day TFR proximity (3 NM); recreational_flyer_sites = FAA-listed fixed flying sites. Example: ["laanc_grid","class_airspace","prohibited_areas","national_defense_tfr","special_use_airspace","part_time_nsufr","stadiums","recreational_flyer_sites"]. | |
| points | Yes | Locations to check, in WGS84 decimal degrees. Each item is either an object like {"lat": 39.86, "lon": -104.67, "label": "Site A"} (label optional; latitude/longitude aliases accepted) or a "lat,lon" string like "39.86,-104.67". One result row is produced per point, and one Result event is charged per row. Example: [{"lat":39.86,"lon":-104.67,"label":"Denver Intl (KDEN) - Class B, LAANC ceiling 0 ft"},{"lat":40.8296,"lon":-73.9262,"label":"Yankee Stadium NYC - LAANC 300 ft + stadium TFR"},{"lat":42.1708,"lon":-72.6375,"label":"Westover ARB (KCEF) - Class D, LAANC NOT offered"},{"lat":38.9072,"lon":-101.05,"label":"Rural western Kansas - MOA overhead, floor 500 ft AGL"},{"lat":47.2,"lon":-108.6,"label":"Rura…(truncated). | |
| maxPoints | No | Safety cap on the number of points checked (and billed) in one run. Points beyond the cap are skipped with a warning. Applied by default if omitted: 500. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=false and idempotentHint=false, and the description explains exactly why: each call starts a metered Apify run billed $0.02/result, with nothing charged on failure, while remaining read-only toward the government source. It also discloses the 'never reads clear when a layer did not answer' verdict behavior — rich context beyond the structured hints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose and layer list, with cost/side-effect disclosure in a clearly labeled block. Dense and mostly earned, though the trailing store-page URL and repeated billing figures add minor bloat.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still conveys what each point yields (LAANC ceiling, whether LAANC is offered, prohibited/SUA/TFR status), the one-row-per-point billing model, and the safety cap. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so layers, points, and maxPoints are already fully documented in the schema, including the enum title mapping and the class_airspace caveat. The description adds no syntax or format detail beyond what the schema provides, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource — batch lat/lon converted to FAA UAS airspace verdicts — and enumerates the exact layers (LAANC ceilings, Class B/C/D/E, prohibited areas, TFRs, NSUFR, stadium TFRs). An agent knows precisely what this tool produces without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives strong in-tool guidance (defaults to all eight layers, why class_airspace cannot be excluded, cost per result) but never states when to choose this tool over its siblings like epa-contaminated-site-screener or other run-gov-data-tool entrants. Usage is implied by the domain rather than routed explicitly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fdic-ncua-health-rollupA
Bank & Credit-Union Financial Health API — FDIC/NCUA QoQ. Bank financial-stress screen on keyless FDIC data: capital ratios, CRE concentration (2006 guidance two-prong test), deposit runoff, ROA/ROE/NIM and asset quality per institution, with quarter-over-quarter deltas, peer-percentile scoring and health flags (deposit outflow, low ROA, rising NPL). Reads live from the official government source. COST AND SIDE EFFECTS: read-only with respect to the government source — it never writes to any external system — but each call starts a metered run on YOUR Apify account, billed $0.008 per result ($8 per 1,000). Lower on paid Apify plans, down to $2.40 per 1,000. Nothing is charged when a run fails. Store page: https://apify.com/malonestar/fdic-ncua-health-rollup
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | Every mode returns the SAME full field set — capital ratios, uninsured deposits, unrealized losses, CRE concentration, credit quality and quarter-over-quarter deltas. Mode changes the ordering only. snapshot = largest institutions first. delta = biggest quarter-over-quarter deposit move first (the headline run-risk signal). score = highest peer asset percentile first. stress = most health flags first, the triage view. Example: "stress". Applied by default if omitted: "snapshot". | |
| state | No | US state to scope the cohort, e.g. CA, TX, NY. Strongly recommended: it focuses the run and makes peer percentiles state-level. Empty = the entire country (slower; national peer scoring). Example: "TX". | |
| benchmark | No | Adds asset-weighted benchmark ratios and this bank's distance from them, in percentage points: benchmark_uninsured_deposit_ratio, benchmark_cre_to_tier1_pct, benchmark_unrealized_loss_to_equity_pct plus uninsured_vs_benchmark_pts, cre_vs_benchmark_pts, unrealized_vs_benchmark_pts. 'national' compares against all ~4,350 FDIC-insured banks; 'state' against the banks in your state. Costs exactly ONE extra request thanks to server-side aggregation — not a second full download. 'none' skips it. Example: "national". | |
| creGrowth | No | The 2006 interagency CRE guidance is TWO tests: construction >= 100% of capital, OR (CRE >= 300% of capital AND CRE grew >= 50% over 36 months). Leaving this on fetches the quarter from 12 quarters ago — one extra request — and fills cre_growth_36m_pct, cre_total_loans_36m_ago, cre_baseline_date and cre_guidance_prong, plus the cre_guidance_both_prongs flag. Turn it off to skip that request; the level tests still run. Example: true. | |
| maxAssets | No | Only include institutions with at most this many total assets, in thousands of dollars. 0 = no ceiling. Combine with minAssets to score within an asset-size peer band (e.g. community banks $250M–$1B). Applied by default if omitted: 0. | |
| minAssets | No | Only include institutions with at least this many total assets, in thousands of dollars (FDIC reports assets in $000s, so 1000000 = $1B). Use with maxAssets to build a peer band. 0 = no floor. Applied by default if omitted: 0. | |
| peerBasis | No | What counts as a 'peer' when computing peer_asset_percentile, peer_roa_percentile, peer_cre_percentile and peer_uninsured_percentile. 'cohort' scores against everything you pulled (a state cohort mixes a $27M agricultural bank with a $200B trust bank, so the percentile means little). 'business_line' uses the FDIC SPECGRP business-model peer group — the cut a bank examiner uses. 'asset_band' uses FFIEC-style size bands. 'community_bank' splits on the FDIC community-bank research flag. Groups with fewer than 5 institutions fall back to the full cohort rather than ranking a bank against two neighbours. Example: "business_line". Applied by default if omitted: "cohort". | |
| maxResults | No | Maximum number of institution-health records to return after filtering, scoring, and ranking. This is your cost cap: one record = one billable result. 500 covers a full mid-size state; TX has ~380 banks, CA ~180. Example: 500. Applied by default if omitted: 1000. | |
| priorItems | No | Optional. In delta mode, an array of institution rows from a previous run (each needs id, total_assets, total_deposits) to diff the current quarter against, instead of auto-fetching the prior quarter. Lets you compare two arbitrary runs. Applied by default if omitted: []. | |
| institutionType | No | Which institutions to include. 'bank' = FDIC-insured banks, fully supported, the only option that returns data today. 'credit_union' = NCUA — NOT AVAILABLE YET (ships in v1.3); selecting it alone fails the run immediately and bills nothing, rather than quietly handing back bank data. 'all' = runs the bank half now and picks up credit unions automatically the moment v1.3 lands. Example: "bank". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Well beyond the annotations, it discloses the metered-run billing model ($0.008/result, down to $2.40 per 1,000 on paid plans), that failed runs are not charged, that it is read-only with respect to the government source, and that credit_union selection fails immediately without billing. This is exactly the kind of side-effect and cost context annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, then a clearly labeled COST AND SIDE EFFECTS block, so the most decision-relevant facts come first. It is somewhat long and ends with a store-page URL, but every sentence carries actionable information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 10-parameter tool with no output schema, the description covers cost, side effects, feature availability and the returned metric families, which is what an agent needs to decide and invoke correctly. Return field shapes are left to the schema, which is acceptable given there is no output schema to lean on.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all ten parameters are already fully documented in the schema, including enum semantics, defaults and worked examples. The top-level description adds little parameter detail beyond the schema; baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence names a specific resource and domain (bank/credit-union financial health from FDIC/NCUA data) and enumerates the exact outputs: capital ratios, CRE concentration, deposit runoff, ROA/ROE/NIM, asset quality, QoQ deltas, peer percentiles and health flags. No sibling tool shares this domain, and an agent can tell precisely what it gets without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description supplies clear operating context: mode meanings with use-cases ('delta = the headline run-risk signal', 'stress = the triage view'), a recommendation to scope by state, and a cost-cap rationale for maxResults. It stops short of an explicit when-to-use/when-not statement versus other tools, but no near-alternative exists among the siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fema-nri-county-risk-profileA
FEMA NRI County Risk Profile — Asset Hazard Join. Join any asset (address, lat/lon, or county FIPS) to FEMA's National Risk Index hazard profile at county or census-tract resolution: composite risk score, expected annual loss, social vulnerability, resilience, and ranked top-3 hazards across all 18 FEMA perils. Reads live from the official government source. COST AND SIDE EFFECTS: read-only with respect to the government source — it never writes to any external system — but each call starts a metered run on YOUR Apify account, billed $0.006 per result ($6 per 1,000). Lower on paid Apify plans, down to $1.80 per 1,000. Nothing is charged when a run fails. Store page: https://apify.com/malonestar/fema-nri-county-risk-profile
| Name | Required | Description | Default |
|---|---|---|---|
| assets | No | Locations to profile. Each item is EITHER {fips:"08031"} (5-digit county FIPS), OR {state:"Colorado", county:"Denver"}, OR {lat:39.7392, lon:-104.9903} (geocoded via the keyless FCC Census Block API). Add an optional "label" to identify each asset in the output. Leave empty to run inventory mode instead (see states/counties below). Example: [{"state":"Colorado","county":"Denver","label":"Denver HQ"},{"lat":29.9511,"lon":-90.0715,"label":"New Orleans warehouse"}]. | |
| states | No | Used only when Assets is empty. Return full NRI risk profiles for these US states (2-letter postal codes or full names, e.g. CO or Colorado) at the resolution set above (county or tract). Leave empty (with Assets also empty) to return a small nationwide sample bounded by Max results. | |
| counties | No | Used only when Assets is empty. Narrows the States filter above to specific bare county names (no "County"/"Parish" suffix), e.g. Denver. Applies at both county and tract resolution. | |
| maxResults | No | Maximum number of output records (each is one billed result). In asset mode this caps the number of assets processed; in inventory mode it bounds the row count returned (there are ~3,144 US counties and ~85,000 US census tracts total). Example: 500. | |
| resolution | No | Geographic resolution to join against: "county" (default — ~3,144 US counties) or "tract" (~85,000 US census tracts, finer-grained). Tract resolution only applies to lat/lon assets (geocoded to a tract via the FCC Census Block API) and to inventory-mode states/counties pulls; fips or state+county assets carry no tract signal and always use county data. If a tract lookup misses or the tract service errors, the record gracefully falls back to its county profile with resolution_used="county" (never fails the run). Example: "county". |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint=false, idempotentHint=false, openWorldHint=true) are all reconciled explicitly: the description states the tool is read-only against the government source yet starts a metered run on the caller's Apify account at $0.006/result, and that failed runs are not charged. That is exactly the behavioral context an agent needs and cannot infer from the schema, including the graceful tract-to-county fallback that never fails the run.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded in the first sentence and the cost/side-effect block follows in a clearly labeled 'COST AND SIDE EFFECTS' segment, which is justified for a metered tool. It runs slightly long — the discounted-plan pricing ('down to $1.80 per 1,000') and the store URL are marginal — but nothing is genuinely wasted.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description still enumerates the returned fields and both operating modes, covers the resolution/fallback semantics, and discloses billing. An agent has everything needed to decide whether to call it and what to expect back.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents all five parameters thoroughly, including the assets format examples and the maxResults billing coupling. The description restates the asset types and modes but adds no syntax or format detail beyond what the schema provides, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource — join an asset to FEMA's National Risk Index hazard profile — and names the output dimensions (composite risk score, expected annual loss, social vulnerability, resilience, top-3 hazards). Scope (county/tract, 18 perils) is explicit, so an agent can distinguish it from the other gov-data siblings without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explains the two operating modes (asset mode when 'assets' is populated, inventory mode when it is empty) and how resolution interacts with each. It does not name competing sibling tools such as site-due-diligence-bundle or epa-contaminated-site-screener, so the routing guidance is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fws-wetlands-proximity-screenerA
USFWS Wetlands Proximity Screener - Section 404 Site Risk API. Wetland due-diligence API for site selection: per lat/lon site, wetland presence within radius, Cowardin classification codes/systems, wetland types, total acreage nearby and a Section 404 dredge-and-fill screening flag. USFWS National Wetlands Inventory open data. CHOOSE THIS for National Wetlands Inventory polygons and their decode columns within a radius. It does NOT answer Clean Water Act §404 jurisdiction — for surface-water features and relative permanence use nhd-surface-water-404-screener. The two are usually needed together. Reads live from the official government source. COST AND SIDE EFFECTS: read-only with respect to the government source — it never writes to any external system — but each call starts a metered run on YOUR Apify account, billed $0.008 per result ($8 per 1,000). Lower on paid Apify plans, down to $2.40 per 1,000. Nothing is charged when a run fails. Store page: https://apify.com/malonestar/fws-wetlands-proximity-screener
| Name | Required | Description | Default |
|---|---|---|---|
| assets | Yes | Sites to screen for wetlands. Each entry is an object { "lat": number, "lon": number, "label": "optional name" }. Also accepts "lat,lon" strings or [lat, lon] arrays. One dataset row (one billed result) is produced per asset, even when no wetland is found; a bad entry yields an ERROR row and the run continues. Example: [{"lat":36.3736,"lon":-89.385,"label":"Reelfoot Lake, TN - site inside a mapped lake"},{"lat":35.2216,"lon":-75.6913,"label":"Cape Hatteras, NC - estuarine tidal marsh"},{"lat":45.8918,"lon":-123.9615,"label":"Cannon Beach, OR - marine shoreline"},{"lat":47.5,"lon":-99,"label":"Prairie pothole, ND - farmed and drained wetlands"},{"lat":39.7392,"lon":-104.9903,"label":"Denver, CO - urban infill, n…(truncated). | |
| maxResults | No | Maximum number of assets processed in one run (1-2000). One result row is emitted (and billed) per asset. Default 500. Applied by default if omitted: 500. | |
| radiusMeters | No | Radius around each asset used for the wetland-presence check, in meters (10-5000). Screened as a TRUE circle. Default 300 (~984 ft, roughly a parcel-scale buffer). Example: 300. | |
| computeNearestDistance | No | When on (default), the actor measures the true distance and bearing to the nearest NWI wetland polygon instead of reporting a largest-acreage proxy. Costs up to ~10 small extra requests per site. Turn off for very large batches; nearest_wetland_* then falls back to the largest-acreage feature and nearest_basis says so. Example: true. | |
| nearestSearchRadiusMeters | No | How far out to look for the nearest wetland, in meters (up to 8000). Independent of the screening radius, so a site can correctly read 'no wetland within 300 m' and still report the closest one 1,391 m away. Default 1609 (1 mile). Raised automatically to at least the screening radius. Example: 1609. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing the billing model ($0.008/result, discounts to $2.40 per 1,000, no charge on failure) and reconciling the readOnlyHint=false with reality: read-only toward the government source, yet each call starts a metered Apify run. This is exactly the side-effect context the annotations flag but don't explain.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, then usage routing, then cost and side effects, so the ordering is sensible. The pricing passage and trailing store URL are somewhat verbose, but each block carries distinct, useful information, so it stays reasonably tight.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return-value burden and does so by listing the per-site outputs (presence, Cowardin codes, acreage, 404 flag). Combined with the radius/nearest-distance semantics surfaced in the schema, an agent has enough to call it correctly, though per-row failure behavior is only detailed in the schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents assets, maxResults, radiusMeters, computeNearestDistance and nearestSearchRadiusMeters in depth (including the true-circle screening and nearest-distance tradeoff). The description adds only the framing 'per lat/lon site' and output content, which is baseline value when the schema does the heavy lifting.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('wetland due-diligence API', 'USFWS Wetlands Proximity Screener - Section 404 Site Risk API') and enumerates the outputs (Cowardin codes/systems, wetland types, acreage, Section 404 screening flag). It names the sibling nhd-surface-water-404-screener and describes the boundary between them, so an agent can distinguish them without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'CHOOSE THIS for National Wetlands Inventory polygons... It does NOT answer Clean Water Act §404 jurisdiction — for surface-water features and relative permanence use nhd-surface-water-404-screener. The two are usually needed together.' This gives explicit when-to-use, when-not, the alternative, and a co-usage note.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
hifld-grid-proximity-screenerA
Transmission Line & Substation Distance API by Coordinates. For each lat/lon site: distance to the nearest transmission line (kV, owner, overhead/underground), nearest substation, nearest power plant, the serving utility and its ISO/RTO, plus generation and battery-storage MW nearby. Includes sub-100 kV. Data-center, renewable, BESS and EV siting. Reads live from the official government source. COST AND SIDE EFFECTS: read-only with respect to the government source — it never writes to any external system — but each call starts a metered run on YOUR Apify account, billed $0.01 per result ($10 per 1,000). Lower on paid Apify plans, down to $3.00 per 1,000. Nothing is charged when a run fails. Store page: https://apify.com/malonestar/hifld-grid-proximity-screener
| Name | Required | Description | Default |
|---|---|---|---|
| assets | Yes | Sites to screen for grid access. Each entry is an object { "lat": number, "lon": number, "label": "optional name" }. Also accepts "lat,lon" strings or [lat, lon] arrays. One dataset row (one billed result) is produced per asset; a bad entry yields an ERROR row and the run continues. Example: [{"lat":39.017,"lon":-77.46,"label":"Ashburn VA data center site"},{"lat":33.4484,"lon":-112.074,"label":"Phoenix AZ site"}]. | |
| eiaApiKey | No | Optional. A free EIA API key (https://www.eia.gov/opendata/register.php) enables the state industrial and commercial electricity price columns. Everything else works without it — leave this empty and those two columns are simply null. One lookup per distinct state, not per site. | |
| maxResults | No | Maximum number of assets processed in one run (1-2000). One result row is emitted (and billed) per asset. Default 500. Applied by default if omitted: 500. | |
| radiusMiles | No | Radius around each asset to search for transmission lines, substations and power plants, in miles (1-50). Features beyond this distance are ignored. Default 5. Example: 10. Applied by default if omitted: 5. | |
| minVoltageKv | No | Optional. Only count/consider transmission lines at or above this many kV. Since v1.2 the underlying layer includes sub-100 kV sub-transmission (69/46/34.5 kV), so values below 100 are now meaningful — leave empty to include every line, or set 115/230 to screen for high-voltage access only. Lines with an unknown voltage are excluded when this is set. Does not filter substations or power plants. | |
| skipErrorRows | No | When true, assets that could not be screened are logged but not written to the dataset, so you are not billed for them. Default false, which keeps every asset accounted for as an ERROR row. Note that a run in which EVERY asset fails always fails outright and bills nothing, regardless of this setting. Applied by default if omitted: false. | |
| includePlanned | No | Advanced/opt-in. Also check a 'planned transmission line' scratch layer that carries NO owner/voltage/status metadata. It is NOT an authoritative planned-line dataset — the planned_line_nearby flag is a low-confidence 'a planned-line geometry exists nearby' hint only. Default false. Applied by default if omitted: false. | |
| includeUtility | No | Also resolve which retail electric utility serves each site, its ownership type, holding company, customer count and summer peak, plus the balancing authority and ISO/RTO (PJM, ERCOT, CAISO, MISO, SPP, ISO-NE, NYISO). Where service territories overlap, the largest utility by summer peak load is reported as primary. On by default — one extra lookup per site. Example: true. | |
| simulateOutage | No | Diagnostic seam for verifying the reliability behaviour on demand rather than waiting for a real outage. "none" (default) is a genuine no-op. "primary" forces the primary line layer to appear down; "drift" forces the live drift gate to measure a truncated layer (the run then fails and bills nothing); "gate" forces the drift probes to be unreachable; "both" combines primary and gate. Leave as none for normal use. Applied by default if omitted: "none". | |
| includePowerPlants | No | Also report the nearest power plant (name, distance, fuel, technology, capacity MW, EIA plant code) plus total generation, battery-storage, solar and wind MW within the radius. Sourced from EIA's monthly plant inventory. On by default — set to false to skip and speed up large batches. Example: true. | |
| includeSubstations | No | Also report the nearest electric substation (name, distance, max/min voltage, connected line count) plus substations within the radius. On by default — set to false to skip substation screening and speed up large batches. Example: true. | |
| allowTruncatedLineFallback | No | The transmission-line answer comes from a national layer of 94,619 lines. If that layer is unavailable, the only backup is a 2023 copy that contains NO line below 100 kV — 44.8% of the US grid, and the sub-transmission most mid-size solar, BESS and EV-charging projects actually interconnect to. At Storm Lake IA it reports the nearest line 2.545 mi away at 161 kV when the truth is 0.649 mi at 69 kV. By default (false) such a run FAILS and bills nothing. Set true to receive rows instead, in which every complete-universe field (nearest_line_distance_miles, lines_within_radius, max_voltage_within_radius_kv, ...) is null, grid_tier reads DEGRADED, and only the nearest_ge100kv_line_* columns are populated. Applied by default if omitted: false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations: discloses metered billing ($0.01/result, $10/1k, down to $3/1k), that failed runs bill nothing, reads live from the official source, and explains the DEGRADED fallback behavior. The readOnlyHint=false annotation is not contradicted in spirit (writes happen to the agent's own Apify run storage, not external systems) but the description's 'read-only with respect to the government source' wording could be clearer about the run-storage side effect.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with purpose, but the description is long and the COST AND SIDE EFFECTS block plus the extensive allowTruncatedLineFallback narrative make it dense. Much of the cost detail is essential, but the store page URL and some repetition (e.g., billing rules restated) add noise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 12-parameter read tool with no output schema, the description covers billing, data sources, fallback behavior, and default-on vs off semantics well. It could more explicitly enumerate the returned columns or clarify the readOnlyHint=false annotation's meaning, but an agent has enough to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 meaningful semantics beyond the schema — notably the billing consequence of skipErrorRows, the low-confidence nature of includePlanned, and the DEGRADED fallback semantics of allowTruncatedLineFallback. This lifts it above baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (distance to transmission lines, substations, power plants by coordinates) with concrete output fields (kV, owner, overhead/underground, utility, ISO/RTO, MW nearby). Clearly distinguishable from siblings like interconnection-queue-tracker or fws-wetlands-proximity-screener, which cover different resources.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names intended use cases (data-center, renewable, BESS, EV siting) which implies when to use it, and the include* flags let an agent scope the screening. It does not, however, explicitly compare against sibling tools or state when NOT to use this one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
interconnection-queue-trackerA
US Interconnection Queue Tracker - 7 ISO Queues & Deltas API. Normalize US ISO/RTO generator interconnection queues (SPP, MISO, NYISO, CAISO, PJM, ERCOT, ISO-NE) into one schema and track new, withdrawn, status-change and COD-slip deltas. For renewables developers, land agents, and energy consultants. Keyless. Reads live from the official government source. COST AND SIDE EFFECTS: read-only with respect to the government source — it never writes to any external system — but each call starts a metered run on YOUR Apify account, billed $0.008 per result ($8 per 1,000). Lower on paid Apify plans, down to $2.40 per 1,000. Nothing is charged when a run fails. Store page: https://apify.com/malonestar/interconnection-queue-tracker
| Name | Required | Description | Default |
|---|---|---|---|
| isos | No | ISO/RTO codes to pull. Leave empty to pull ALL 7 live sources (SPP, MISO, NYISO, CAISO, PJM, ERCOT, ISO-NE) in one run. All 7 are keyless - no account or API key needed. An unrecognised code now FAILS the run before anything is billed, rather than being silently dropped (which used to fall through to "all seven"). Example: ["SPP"]. Applied by default if omitted: []. | |
| mode | No | snapshot = emit the current normalized queue, automatically annotated with monitor fields (is_new_since_last_run, status_changed, previous_status) vs. the actor's own self-managed KV snapshot, plus synthetic withdrawn and per-ISO iso_summary rows. delta = legacy manual mode: compare against a prior snapshot YOU supply (priorItems/priorKvKey) and emit only change rows (new / withdrawn / status_change / cod_slip). Applied by default if omitted: "snapshot". | |
| deltaOnly | No | Snapshot mode only. When true, suppress unchanged queue rows and emit ONLY new/status-changed rows, synthetic withdrawn rows, and one iso_summary roll-up row per ISO — ideal for a scheduled weekly/daily monitor run that only cares about what changed. When false (default), the full queue is emitted as before, PLUS the same withdrawn/iso_summary rows as free bonus monitoring signal. Applied by default if omitted: false. | |
| maxResults | No | Maximum number of queue records to fetch across ALL selected ISOs combined. The cap is applied in ISO order, so a low value truncates the last ISOs: any ISO that is cut short or never reached is marked iso_status=truncated / not_fetched on its iso_summary row and is excluded from withdrawn-project detection for that run. The default is deliberately low (500) so an unconfigured call cannot run away; raise it to about 20000 to pull the whole federation (~18,200 records). Applied by default if omitted: 500. | |
| priorItems | No | Delta mode: the prior run's unified queue items (the array of records this actor produced before). The diff is computed purely against these. Ignored in snapshot mode. Applied by default if omitted: []. | |
| priorKvKey | No | Delta mode alternative to priorItems: a key in this actor's key-value store holding the prior snapshot. When set, the current snapshot is also SAVED under this key so scheduled runs diff automatically against the previous run. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations give only the safety profile, and the description goes well beyond it: metered Apify run at $0.008/result with plan-based discounts, no charge on failed runs, invalid ISO codes fail before billing, snapshot mode writes to the actor's own KV store, and low maxResults truncates trailing ISOs and excludes them from withdrawn detection. This is exactly the operational context an agent needs before invoking a metered, stateful call.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the core purpose, then a clearly labelled COST AND SIDE EFFECTS block. The pricing paragraph is slightly repetitive (two price restatements) but each section is scannable and nothing important is buried.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description carries the return burden and largely does it — it names the emitted row types (new, withdrawn, status_change, cod_slip, iso_summary) and describes synthetic rows. It does not specify pagination or the shape of an individual queue record, which is the only notable gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the baseline is 3, but the description still adds value: the whole-federation size (~18,200 records) and the advice to raise maxResults to ~20000, plus that unrecognised ISOs now fail the run rather than silently falling back to all seven. It stops short of explaining priorItems/priorKvKey interaction in any detail beyond what the schema already says.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (normalize + track deltas) on a specific resource (US ISO/RTO interconnection queues) and enumerates the exact 7 sources covered. The sibling tools are other gov-data utilities, none of which touch interconnection queues, so an agent can route unambiguously without opening a schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Names an audience (renewables developers, land agents, energy consultants) and gives clear mode-selection context (snapshot vs. delta, deltaOnly for scheduled monitor runs). It never explicitly says when NOT to use it or names an alternative tool, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
license-verifierA
License Verification API — Nurses, MDs & OIG Exclusions. Primary source verification for US professional licenses. Search 19 state boards by name or license number: status, expiration, disciplinary actions. Cross-checks the NPPES NPI registry and screens the HHS-OIG exclusion list. Bulk roster screening. Newly licensed clinicians feed (roster-delta). Reads live from the official government source. COST AND SIDE EFFECTS: read-only with respect to the government source — it never writes to any external system — but each call starts a metered run on YOUR Apify account, billed $0.01 per result ($10 per 1,000). Lower on paid Apify plans, down to $3.00 per 1,000. Nothing is charged when a run fails. Store page: https://apify.com/malonestar/license-verifier
| Name | Required | Description | Default |
|---|---|---|---|
| city | No | City to filter licensees by. Not every board publishes a city column. | |
| mode | No | Leave empty for the classic lookup/roster behaviour. Set "roster-delta" for the newly-credentialed feed: every credential ORIGINALLY ISSUED in the last sinceDays on the selected boards, one row each, with NPI cross-walk and OIG screen. The first run seeds a named baseline and emits the window as event_type "inventory"; later runs emit only event_type "newly_licensed" (a credential absent from the baseline AND issued on/after the previous run minus 7 days). A run against unchanged data emits 0 rows and bills nothing. Boards with an original-issue date: WA (DOH), TX-BON, TX-LVN, TX-APRN, IL, CO, CT, DE, OR (CCB), WA-CPA, WA-CONTRACTOR, NY-NOTARY, NY-COS, NY-APPRAISER. In this mode maxResults is the TOTAL row cap for the run (newest credentials first). | |
| name | No | Full-name search that works across every board (handles combined name fields). Use this if lastName/firstName return nothing. | |
| roster | No | Batch mode: verify a whole roster of professionals in one run. Each item: {firstName, lastName, state (optional — omit to search every board), profession (optional), middleName (optional, improves scoring)}. Emits one verdict row per entry with verdict, match_score, match_tier, NPI cross-walk, OIG exclusion screen and board-action status. Capped at 200 entries per run. Every verdict row is billable, including NOT_FOUND and INCONCLUSIVE_SOURCE_ERROR — a verified negative is the deliverable. | |
| states | No | State codes or explicit board IDs. A bare state code searches EVERY board in that state - e.g. "TX" covers TDLR trades AND the Board of Nursing (RN, LVN, APRN). Use a hyphenated ID to target ONE board: IL-IDFPR, CT-DCP, CO-DORA, TX-TDLR, TX-BON (RN), TX-LVN, TX-APRN, OR-CCB, OR-BCD, NY-RACING (horse racing only), NY-RE, NY-COS, NY-NOTARY, NY-APPRAISER, WA-DOH (health professions), WA-CPA, WA-CONTRACTOR, DE-DPR, VT-DFS. States: CO, CT, DE, IL, NY, OR, TX, VT, WA. Example: ["WA"]. | |
| lastName | No | Licensee last name (partial match). Example: "Threlkeld". Applied by default if omitted: "". | |
| firstName | No | Licensee first name (partial match). Supplying it raises match confidence sharply — first + last name exact is the threshold for a confident verdict. Example: "Judson". Applied by default if omitted: "". | |
| npiLookup | No | For each roster entry, look the person up in the federal NPI registry and use their self-reported state license number to pin down the exact board record. This is what turns 125 same-name candidates into one verified match, and it returns NPI, taxonomy and practice address. Applied by default if omitted: true. | |
| sinceDays | No | roster-delta only. How many days back the original-issue-date window reaches (1-400). The seeding run emits this whole window as inventory; later runs emit only credentials issued since the previous run (minus a 7-day publication slack). A non-integer or out-of-range value fails the run before any request is made. Example: 30. | |
| maxResults | No | Maximum number of license records to return per board. Each returned row is billable, so start small. Example: 10. Applied by default if omitted: 200. | |
| statusOnly | No | Return only license number, type, status, expiration, provenance and the OIG exclusion flags. Handy for recurring renewal monitoring. NOTE: this is the SAME price per row as a full record — it returns less data, not cheaper data. Applied by default if omitted: false. | |
| licenseType | No | e.g. "Registered Nurse", "Real Estate", "Cosmetology", "Professional Engineer". Boards without a license-type column skip this filter and say so in the log and in unsupported_filters. | |
| professions | No | roster-delta only. Restrict to these professions, matched case-insensitively on the normalised profession (e.g. "Registered Nurse") or as a prefix of the board's raw credential type ("Registered Nurse" reaches "Registered Nurse License" and "Registered Nurse Temporary Practice Permit" but NOT "Advanced Registered Nurse Practitioner"). Examples: "Registered Nurse", "Licensed Practical Nurse", "Physician And Surgeon", "Dentist", "Pharmacist", "Physical Therapist". Omit for every profession the board publishes. Changing this filter starts a NEW delta baseline (the baseline is scoped by boards + professions). Example: ["Registered Nurse"]. | |
| businessName | No | Business or DBA name to search (partial match). | |
| licenseNumber | No | Exact license number to verify. The most precise search available — use it when you have it. | |
| checkDiscipline | No | Join the best-matching licensee against secondary board-action datasets: Delaware DPR disciplinary actions and the NYS Office of Professional Medical Conduct. A failed lookup is reported as unknown, never as 'no action on file'. Applied by default if omitted: true. | |
| onlyDisciplined | No | Return only licensees with a disciplinary history. Honoured by IL-IDFPR, CO-DORA, DE-DPR, WA-DOH, TX-BON and TX-LVN. Target those board IDs directly rather than a bare state code, or sibling boards that publish no disciplinary column will also return rows (they are reported in unsupported_filters). Applied by default if omitted: false. | |
| socrataAppToken | No | Optional free Socrata app token to raise rate limits. | |
| screenExclusions | No | Check every result against the federal HHS-OIG List of Excluded Individuals/Entities (83,000+ records, refreshed monthly). Matched on NPI first, then last+first+state. A surname-only hit is NEVER reported as an exclusion — it is flagged for review instead. Adds no per-row cost. Applied by default if omitted: true. | |
| rosterLimitPerBoard | No | How many candidate records to pull per board for each roster entry before scoring. Higher values reduce the chance of missing the right person for a common surname; candidates_truncated tells you when the cap was hit. Applied by default if omitted: 100. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations give only the generic safety profile (readOnlyHint=false, destructiveHint=false, idempotentHint=false, openWorldHint=true). The description goes well beyond them by disclosing the metering model — a billable run on the caller's Apify account at $0.01/result ($3-10 per 1,000), no charge on failure, per-row billing even for NOT_FOUND/INCONCLUSIVE and even for the cheaper-looking statusOnly output. This is exactly the kind of cost/side-effect disclosure annotations cannot carry.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the purpose and cost warning before the long capability list, and the COST AND SIDE EFFECTS block is clearly signposted. It is long, but with 20 parameters and multiple modes little of it is padding; the store URL and some marketing phrasing ('Nurses, MDs & OIG Exclusions') are the only borderline filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 20-parameter, zero-required, no-output-schema tool, the description covers mode selection, billing, default-applied values, failure behavior, and board-support caveats well. It stops short of describing the actual result/row shape (beyond 'verdict row', 'unsupported_filters', 'candidates_truncated'), which an agent would need since no output schema exists.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already carries most parameter meaning and the baseline is 3. The description adds genuinely new semantics: that statusOnly has the same per-row price despite returning less data, that every roster verdict row is billable including negatives, and that the delta baseline is scoped by boards + professions (changing a filter resets it).
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource (primary-source license verification across 19 state boards by name or license number) and enumerates the deliverable fields (status, expiration, disciplinary actions). It is immediately distinguishable from the sibling gov-data tools (parcel, EPA, FAA, HIFLD screeners), which serve entirely different domains.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It routes the agent explicitly: licenseNumber is 'the most precise search available — use it when you have it'; name should be used 'if lastName/firstName return nothing'; roster is for batch verification; roster-delta is for the newly-credentialed feed. It also explains when each mode returns nothing and bills nothing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
nhd-surface-water-404-screenerA
USGS NHD Surface Water & Section 404 Wetland Screener. Screen any lat/lon against USGS NHDPlus HR surface water. 94 fields: exact distance to the nearest perennial, intermittent and ephemeral reach, waterbody type and purpose, mean annual flow, stream order, HUC-8/10/12, a jurisdictional-likelihood call with its reasoning, and a Section 404/WOTUS flag. CHOOSE THIS for Clean Water Act §404 surface-water screening — streams, waterbodies and their relative permanence. For mapped wetland polygons use fws-wetlands-proximity-screener. Reads live from the official government source. COST AND SIDE EFFECTS: read-only with respect to the government source — it never writes to any external system — but each call starts a metered run on YOUR Apify account, billed $0.012 per Result ($12 per 1,000). Lower on paid Apify plans, down to $3.60 per 1,000. Nothing is charged when a run fails. Store page: https://apify.com/malonestar/nhd-surface-water-404-screener
| Name | Required | Description | Default |
|---|---|---|---|
| assets | Yes | Required. The list of sites to screen, in the standard [{lat, lon, label}] shape. Use decimal degrees (lon is negative in the USA). label is optional free text - it is echoed on every output row so you can join results back to your parcel list. Example: [{"lat":40.0143,"lon":-105.2829,"label":"Boulder CO parcel"}]. The four prefilled sites deliberately cover the range of outcomes: a creekside parcel 5 m from a perennial stream carrying 103 cfs (HIGH), a Louisiana site sitting inside an NHD swamp/marsh (HIGH, wetland-driven), an Arizona parcel inside a mapped desert wash (LOW - washes are reported but are not jurisdictional after Sackett), an upland Mojave parcel whose only nearby feature is an ephemeral reach (LOW), and an open-coast parcel at the mouth of Mobile Bay sitting on the Gulf of Mexico polygon (HIGH) - the coastal case that build 1.1.6 and earlier could not screen at all. Example: [{"lat":40.0143,"lon":-105.2829,"label":"Boulder CO - creekside redevelopment parcel"},{"lat":29.99091,"lon":-89.93323,"label":"New Orleans East LA - swamp/marsh adjacent site"},{"lat":33.42931,"lon":-111.98414,"label":"Tempe AZ - parcel inside a mapped desert wash"},{"lat":35.2,"lon":-115.9,"label":"Mojave NP CA - upland solar reference site"},{"lat":30.2481,"lon":-88.0783,"label":"Dauphin Islan…(truncated). | |
| maxResults | No | Upper bound on the number of assets screened, and therefore on the number of dataset rows produced. One asset always produces exactly one row, including sites that turn out to be far from any mapped water. Clamped to 1-10000. Example: 100. Applied by default if omitted: 1000. | |
| radiusMeters | No | How far around each site to look for NHD flowlines, waterbodies and water areas. 1000 m covers a typical Phase-I ESA adjacent-property review; widen to 3000 m for utility-scale solar, BESS or data-center siting. Clamped to 50-8000 m. Example: 1000. Applied by default if omitted: 1600. | |
| runBudgetSeconds | No | Optional. One time budget for the whole run, shared by the live drift checks (at most 90 s of it) and every site. If hydro.nationalmap.gov is slow and the budget runs out, the sites not yet reached are returned as rows with failure_kind "deadline" and null counts/flags instead of the run dragging on. Leave empty to use max(240, 90 + 30 x number of assets) seconds. Clamped to 30-3500; the run also always stops before its Apify timeout. Example: 240. | |
| includeNonNetworkFlowlines | No | Also query NHDPlus HR layer 4 (NonNetworkNHDFlowline) for isolated ditches, canals and disconnected reaches near the site. Leave on for a conservative wetland-delineation scope; turn off to save one request per asset. Note that layer 4 carries no NHDPlus value-added attributes, so a nearest reach found there has no mean annual flow, stream order or drainage area. Example: true. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite annotations already indicating readOnlyHint=false, the description adds valuable nuance: it clarifies that the tool is read-only with respect to the government source but triggers a metered Apify run, discloses exact billing ($0.012/Result), mentions discounts, and explains failure behavior (nothing charged on run failure, rows with failure_kind 'deadline' when budget exhausted). This level of transparency goes far beyond what annotations provide and fully informs the agent of side effects and costs.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but every sentence carries relevant information. It is front-loaded with the core purpose and output enumeration, then addresses cost, alternatives, and parameter specifics. The formatting is dense but not repetitive. A slight penalty for wall-of-text presentation that could be parsed more quickly with headers or bullet points, but it is appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 5 parameters, no output schema, and significant cost/side-effect nuances, the description is exceptionally complete. It explains the 94 output fields, the live source, failure modes, budget behavior, and even provides test sites covering the outcome range. Nothing an agent needs to invoke this tool correctly is missing, including how to interpret results and how to join them back to source data via the label field.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, but the description adds significant semantics: it explains the [{lat, lon, label}] shape, gives concrete decimal-degree examples, clarifies defaults and clamping (e.g., maxResults default 1000, radiusMeters default 1600), offers use-case guidance (1000 m for Phase-I ESA, 3000 m for utility-scale), and explains the implications of includeNonNetworkFlowlines (layer 4 lacks NHDPlus value-added attributes). This adds meaning well beyond the raw schema definitions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Screen any lat/lon against USGS NHDPlus HR surface water.' It specifies the exact resource (NHDPlus HR), the verb (screen), and enumerates the 94 output fields. It also explicitly distinguishes itself from the sibling fws-wetlands-proximity-screener by naming the alternative and its condition. This is a model of purpose clarity.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit when-to-use guidance: 'CHOOSE THIS for Clean Water Act §404 surface-water screening — streams, waterbodies and their relative permanence. For mapped wetland polygons use fws-wetlands-proximity-screener.' It also provides contextual advice for radiusMeters (typical ESA review vs. utility-scale projects) and explains the behavior of runBudgetSeconds. This leaves no ambiguity about when to select this tool over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parcel-owner-lookupA
Parcel Owner Lookup — Address to Owner & Assessor Record. Address to parcel ID, owner name, mailing address & assessed value from official assessor rolls: Chicago, Philadelphia, NYC + NC, NY State, WI, CO, MN, AR, MA, CT, VT statewide, Phoenix, Houston, Cleveland, Nashville & DC. Census fallback elsewhere. $0.02/lookup. Reads live from the official government source. COST AND SIDE EFFECTS: read-only with respect to the government source — it never writes to any external system — but each call starts a metered run on YOUR Apify account, billed $0.02 per Result ($20 per 1,000). Lower on paid Apify plans, down to $6.00 per 1,000. Nothing is charged when a run fails. Store page: https://apify.com/malonestar/parcel-owner-lookup
| Name | Required | Description | Default |
|---|---|---|---|
| addresses | Yes | US street addresses to resolve to a parcel + owner record, one per line (e.g. '1060 W Addison St, Chicago, IL'). Matched against the Cook County IL (Chicago), Philadelphia PA and New York City rolls, plus (v1.1) statewide rolls for North Carolina, New York State, Wisconsin, Colorado, Minnesota (opt-in counties), Arkansas, Massachusetts, Connecticut and Vermont and county rolls for Maricopa AZ (Phoenix), Harris TX (Houston), Cuyahoga OH (Cleveland), Nashville TN and Washington DC - routed by the Census-geocoded point's county. Addresses elsewhere fall back to Census geocoding (lat/lon only). Every input address yields exactly one output row; see lookup_status on each row. Example: ["1060 W Addison St, Chicago, IL","1234 Market St, Philadelphia, PA","350 5th Ave, New York, NY"]. | |
| maxResults | No | Maximum number of addresses to process (one output row per address). Extra addresses beyond this cap are skipped. Example: 10. Applied by default if omitted: 100. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only flag the generic profile (readOnlyHint=false, openWorldHint=true, idempotentHint=false, destructiveHint=false); the description explains why — each call starts a metered Apify run billed $0.02/result, with nothing charged on failure. It also discloses the read-only relationship to the government source and the one-row-per-address contract, which is materially useful beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Purpose is front-loaded, but the entry is bloated: a title restatement, an extensive jurisdiction list that repeats the schema parameter description verbatim, pricing marketing ('Low on paid Apify plans'), and a store-page URL. Several sentences do not earn their place for an agent deciding whether to call the tool.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by naming the returned fields, the one-row-per-address guarantee, and the lookup_status signal, plus cost/side-effect disclosure. A brief note on absent-coverage output shape would close the remaining gap, but the essentials are present for a 2-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already documents addresses (format, examples, routing/fallback) and maxResults (cap, default 100). The description adds no syntax or semantics beyond that, so the baseline of 3 applies; its coverage list largely duplicates the schema text.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific transformation — US street address → parcel ID, owner name, mailing address, assessed value — and identifies the authoritative source (official assessor rolls). It reads as a distinct lookup capability against the sibling gov-data tools, so an agent can select it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context for use: which jurisdictions are covered by direct assessor lookup, which fall back to Census geocoding (lat/lon only), and that every input yields exactly one row. There is no explicit 'do not use this when…' or named alternative tool, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run-gov-data-toolA
Run any one of the 122 catalog tools with the given input and return its rows. Call describe-gov-data-tool first to shape the input. COST AND SIDE EFFECTS: read-only with respect to the government source — it never writes to any external system — but each call starts a metered run on YOUR Apify account, billed per result row at the rate this tool reports. Call describe-gov-data-tool first to see the exact price before running anything. Nothing is charged when a run fails. A run that FAILS returns an error and no rows rather than an empty result, so a zero-row answer here always means the source was reached and genuinely matched nothing.
| Name | Required | Description | Default |
|---|---|---|---|
| tool | Yes | The tool name to run, e.g. "usgs-seismic-design-screener". | |
| input | Yes | Input object matching the schema returned by describe-gov-data-tool. | |
| maxItems | No | Maximum rows to return. Default 200. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond the annotations by disclosing cost semantics (metered run on YOUR Apify account, billed per result row, no charge on failure) and failure/empty-result semantics (a failed run returns an error and no rows, so zero rows means the source was genuinely reached and matched nothing). The careful phrasing 'read-only with respect to the government source' is consistent with the readOnlyHint=false annotation, which reflects the billing side effect rather than any external write, so there is 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose, then cost and side effects in a clearly labeled block, so an agent gets the critical cost warning early. Slightly penalized because 'Call describe-gov-data-tool first' is stated twice, which is a redundant repetition rather than a distinct point.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a meta-tool with a nested input object and no output schema, the description covers the essentials an agent needs: what is returned (rows), where cost comes from, and how to interpret failures versus empty results. It does not discuss the output shape of a successful row set beyond 'its rows', but that gap is minor given the variable nature of 122 underlying tools.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents tool, input, and maxItems (including the 1-1000 bounds and default 200). The description only adds the modeling hint that input should match the schema returned by describe-gov-data-tool, which is marginal value over the schema's own 'Input object matching the schema returned by describe-gov-data-tool' text. Baseline 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Run any one of the 122 catalog tools ... return its rows') and explicitly scopes itself against the sibling describe-gov-data-tool, which shapes the input. An agent can immediately tell this is the execution entry point versus the discovery/describe tools without opening any schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear prerequisites and sequencing: 'Call describe-gov-data-tool first to shape the input' and again to see pricing before running. It names the alternative tool and the condition that selects it, but offers no guidance on when NOT to run this (e.g., preferring a pre-bundled sibling like site-due-diligence-bundle) or awareness of the other 122 tools' direct-call pattern, so it stops just short of full when/when-not coverage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search-gov-data-toolsARead-onlyIdempotent
Search the full catalog of 122 US government data tools by keyword, agency, or topic (e.g. "wetlands", "FDIC", "flood", "drone airspace", "business licenses"). Returns matching tool names with descriptions. Use this first when the task is not covered by one of the dedicated tools above. FREE: reads a catalog bundled with this server — no network call, no run, nothing charged.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum number of results to return. Default 10. | |
| query | Yes | Keywords to match against tool name, title, description and category. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive and closed-world, so the bar is low, yet the description adds genuinely new operational context: it reads a catalog bundled with the server, makes no network call, triggers no run, and incurs no charge. That cost/latency disclosure is exactly the kind of trait annotations cannot express.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the purpose, then usage routing, then the cost note. Every sentence earns its place, though the final 'FREE: ... no network call, no run, nothing charged' clause is slightly redundant in its triple phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter read-only search with no output schema, the description covers purpose, routing, return shape ('matching tool names with descriptions'), and cost behavior. Nothing an agent needs to invoke it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so both query and limit are already documented in the schema, making 3 the baseline. The description's example keywords ('wetlands', 'FDIC', 'flood') and the phrase 'agency, or topic' add a little color about what query matches, but no syntax or limit behavior beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Specific verb (Search) plus a precisely scoped resource (the full catalog of 122 US government data tools) and the match dimensions (keyword, agency, topic). It also positions itself against the sibling set by telling the agent this is the fallback when no dedicated tool covers the task.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states 'Use this first when the task is not covered by one of the dedicated tools above,' which is clear routing guidance against the sibling tools. It stops short of naming a specific sibling (e.g. describe-gov-data-tool) or describing what to do when no match is returned, so it is strong but not exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
site-due-diligence-bundleA
Environmental Due Diligence Bundle: 20-Layer Site Scorecard. Environmental due diligence at $0.10 per property - one row per site, not per layer. Lat/lon plus radius returns a go/caution/no-go fatal-flaw verdict and 0-100 score across 20 federal layers: EPA contamination, FEMA flood, NWI wetlands, ESA habitat, karst, landslide, levee, dams, CBRS, pipelines. CHOOSE THIS when you want one combined go / caution / no-go verdict for a coordinate across many unrelated layers. It is NOT an ASTM records review: its contamination layer reads RCRA and TRI through ECHO only and omits coordinate-less Superfund records. For a contamination-first question use epa-contaminated-site-screener. Reads live from the official government source. COST AND SIDE EFFECTS: read-only with respect to the government source — it never writes to any external system — but each call starts a metered run on YOUR Apify account, billed $0.1 per result ($100 per 1,000). Lower on paid Apify plans, down to $30.00 per 1,000. Nothing is charged when a run fails. Store page: https://apify.com/malonestar/site-due-diligence-bundle
| Name | Required | Description | Default |
|---|---|---|---|
| assets | Yes | List of sites to run the full fatal-flaw scorecard on. Each item is an object with numeric lat and lon (WGS84 decimal degrees) and an optional label. One billable scorecard row is returned per successfully screened asset -- invalid coordinates are returned in a separate non-billable dataset. Example: [{"lat":29.7355,"lon":-95.2601,"label":"Houston Ship Channel parcel"}]. Example: [{"lat":29.7355,"lon":-95.2601,"label":"Houston Ship Channel industrial site, TX"},{"lat":44.29,"lon":-105.5,"label":"Gillette, WY greenfield (coal-country)"}]. | |
| maxAssets | No | Maximum number of assets to screen from the list (safety cap). Extra assets beyond this are ignored. Applied by default if omitted: 250. | |
| radiusMiles | No | Search radius in statute miles for the proximity layers (EPA contamination, ESA critical habitat, transmission grid, wildfire flag, landslide nearby-search, CWA 303(d) impaired waters, tank/spill registries, gas pipelines, NWI wetlands, NRHP historic resources, and NID dams). Point-in-polygon-only layers (protected lands, flood/NRI county, seismic, IRA energy community, karst, USACE levee, CalFire FHSZ, NAAQS nonattainment, CBRS) ignore this. Accepts 0.25 to 25; smaller means a tighter on-site screen. Example: 1. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations mark readOnlyHint=false and openWorldHint=true, and the description explains why by disclosing that each call starts a metered run on the caller's Apify account, billed $0.10 per result with tiered pricing, and that failed runs are not charged. It also clarifies the read-only scope ('never writes to any external system'), which is consistent with rather than contradicting the false readOnlyHint.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The text is dense and front-loaded: identity, then choose/not, then cost/side effects, then store link. Every sentence carries information, though the layer enumeration and pricing detail make it longer than strictly necessary.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description supplies the return shape ('go/caution/no-go fatal-flaw verdict and 0-100 score'), the cost model, the billing granularity, and the scope limitations like omitted coordinate-less Superfund records. Nothing an agent needs to call and interpret it correctly is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so the schema already documents all three parameters in depth; the baseline is 3. The description adds only marginal semantics (e.g. 'one row per site, not per layer' and 'smaller means a tighter on-site screen'), which does not meaningfully exceed what the parameter descriptions already provide.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource (environmental due diligence bundle producing a 20-layer site scorecard) and enumerates the concrete layers and verdict format. It clearly differentiates itself from the sibling epa-contaminated-site-screener and other point tools, so an agent can select it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'CHOOSE THIS when you want one combined go/caution/no-go verdict for a coordinate across many unrelated layers' and gives the when-not ('NOT an ASTM records review') plus the alternative ('For a contamination-first question use epa-contaminated-site-screener'). This is a complete when/when-not/alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
2 tool updates
v1.2.0- Changed
license-verifier3 fields changed- added
Input schema / properties / modeAdded value: +{ + "description": "Leave empty for the classic lookup/roster behaviour. Set \"roster-delta\" for the newly-credentialed feed: every credential ORIGINALLY ISSUED in the last sinceDays on the selected boards, one row each, with NPI cross-walk and OIG screen. The first run seeds a named baseline and emits the window as event_type \"inventory\"; later runs emit only event_type \"newly_licensed\" (a credential absent from the baseline AND issued on/after the previous run minus 7 days). A run against unchanged data emits 0 rows and bills nothing. Boards with an original-issue date: WA (DOH), TX-BON, TX-LVN, TX-APRN, IL, CO, CT, DE, OR (CCB), WA-CPA, WA-CONTRACTOR, NY-NOTARY, NY-COS, NY-APPRAISER. In this mode maxResults is the TOTAL row cap for the run (newest credentials first).", + "enum": [ + "roster-delta" + ], + "type": "string" +} - added
Input schema / properties / professionsAdded value: +{ + "description": "roster-delta only. Restrict to these professions, matched case-insensitively on the normalised profession (e.g. \"Registered Nurse\") or as a prefix of the board's raw credential type (\"Registered Nurse\" reaches \"Registered Nurse License\" and \"Registered Nurse Temporary Practice Permit\" but NOT \"Advanced Registered Nurse Practitioner\"). Examples: \"Registered Nurse\", \"Licensed Practical Nurse\", \"Physician And Surgeon\", \"Dentist\", \"Pharmacist\", \"Physical Therapist\". Omit for every profession the board publishes. Changing this filter starts a NEW delta baseline (the baseline is scoped by boards + professions). Example: [\"Registered Nurse\"].", + "items": { + "type": "string" + }, + "type": "array" +} - added
Input schema / properties / sinceDaysAdded value: +{ + "description": "roster-delta only. How many days back the original-issue-date window reaches (1-400). The seeding run emits this whole window as inventory; later runs emit only credentials issued since the previous run (minus a 7-day publication slack). A non-integer or out-of-range value fails the run before any request is made. Example: 30.", + "maximum": 400, + "minimum": 1, + "type": "integer" +}
- Changed
parcel-owner-lookup1 field changed- changed
Input schema / properties / addresses / descriptionPrevious value: -"US street addresses to resolve to a parcel + owner record, one per line (e.g. '1060 W Addison St, Chicago, IL'). v1 matches against the Cook County IL (Chicago), Philadelphia PA, and New York City assessment rolls; addresses outside those areas fall back to Census geocoding (lat/lon only). Every input address always yields exactly one output row — unmatched addresses come back with match_confidence 'none'. Example: [\"1060 W Addison St, Chicago, IL\",\"1234 Market St, Philadelphia, PA\",\"350 5th Ave, New York, NY\"]."New value: +"US street addresses to resolve to a parcel + owner record, one per line (e.g. '1060 W Addison St, Chicago, IL'). Matched against the Cook County IL (Chicago), Philadelphia PA and New York City rolls, plus (v1.1) statewide rolls for North Carolina, New York State, Wisconsin, Colorado, Minnesota (opt-in counties), Arkansas, Massachusetts, Connecticut and Vermont and county rolls for Maricopa AZ (Phoenix), Harris TX (Houston), Cuyahoga OH (Cleveland), Nashville TN and Washington DC - routed by the Census-geocoded point's county. Addresses elsewhere fall back to Census geocoding (lat/lon only). Every input address yields exactly one output row; see lookup_status on each row. Example: [\"1060 W Addison St, Chicago, IL\",\"1234 Market St, Philadelphia, PA\",\"350 5th Ave, New York, NY\"]."
2 tool updates
v1.1.3- Changed
epa-contaminated-site-screener1 field changed- changed
Input schema / properties / maxHitsPerProgram / descriptionPrevious value: -"Assets mode only: cap on the number of nearest site hits reported per program per asset (keeps output and billing bounded near dense industrial areas). The nearest sites are kept. Default 50. Range 1-1000. Example: 50."New value: +"Assets mode only: cap on the number of nearest site hits reported per program per asset (keeps output and billing bounded near dense industrial areas). The nearest sites are kept. Default 50. Range 1-1000. Example: 10. Applied by default if omitted: 50."
- Changed
nhd-surface-water-404-screener1 field changed- added
Input schema / properties / runBudgetSecondsAdded value: +{ + "description": "Optional. One time budget for the whole run, shared by the live drift checks (at most 90 s of it) and every site. If hydro.nationalmap.gov is slow and the budget runs out, the sites not yet reached are returned as rows with failure_kind \"deadline\" and null counts/flags instead of the run dragging on. Leave empty to use max(240, 90 + 30 x number of assets) seconds. Clamped to 30-3500; the run also always stops before its Apify timeout. Example: 240.", + "maximum": 3500, + "minimum": 30, + "type": "integer" +}
6 tool updates
v1.1.1- Removed
describe_gov_data_tool - Added
describe-gov-data-tool - Removed
run_gov_data_tool - Added
run-gov-data-tool - Removed
search_gov_data_tools - Added
search-gov-data-tools
15 tool updates
v1.0.2- First observed
describe_gov_data_tool - First observed
epa-contaminated-site-screener - First observed
epa-drinking-water-quality-screener - First observed
faa-drone-airspace-checker - First observed
fdic-ncua-health-rollup - First observed
fema-nri-county-risk-profile - First observed
fws-wetlands-proximity-screener - First observed
hifld-grid-proximity-screener - First observed
interconnection-queue-tracker - First observed
license-verifier - First observed
nhd-surface-water-404-screener - First observed
parcel-owner-lookup - First observed
run_gov_data_tool - First observed
search_gov_data_tools - First observed
site-due-diligence-bundle
TDQS
Scored across 15 tools
Most tools have clearly distinct domains, and the environmental due-diligence tools explicitly cross-reference one another with 'choose this for X, not Y' guidance. There is still some residual overlap between site-due-diligence-bundle and the individual EPA/wetlands/NHD screeners, so an agent must read descriptions carefully to avoid misselection.
All tool names use consistent kebab-case, with no camelCase or underscore mixing. The naming is not a uniform verb_noun pattern because domain tools are noun phrases while the three meta tools use verb prefixes, but it is predictable and readable.
15 tools is within a reasonable range for a broad government-data gateway with both dedicated workflows and catalog meta-tools. The count is slightly heavy because several environmental screeners are narrow and related, but each still has a defensible purpose.
The search -> describe -> run meta-tools provide access to a 122-tool catalog, so the server has a complete read-only lifecycle for discovering, shaping, and executing government-data queries. The dedicated tools cover common verticals, and no obvious operational dead end is present for the stated read-only purpose.
Maintenance
Related MCP Connectors
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
Agent-native MCP server over 49M+ US public and government records, privacy-first, always current.
Hosted MCP endpoint with realistic fake data for prototyping agents. 12 tools, no setup.
Free public MCP for AI agents — 193 tools, 44 workflows. No API key.
Related MCP Servers
- AlicenseBqualityDmaintenanceMCP server providing AI agents with access to German government open data. 12 tools across 6 categories: Autobahn traffic, DWD weather, NINA disaster warnings, SMARD energy market, Bundestag parliamentary data, and pollen forecasts. All APIs are free, no keys required.162MIT
- AlicenseAqualityCmaintenanceAn MCP server that connects AI agents to over 200 tools across 27 Brazilian public APIs, covering economic, legislative, transparency, and judicial data. It enables users to query and cross-reference extensive government datasets from sources like IBGE, the Central Bank, and the Brazilian Congress.71,785MIT
- AlicenseAqualityDmaintenanceMCP Server for accessing 36 Brazilian public data sources and 1 agent, enabling AI agents to query government data on economy, legislation, transparency, judiciary, elections, environment, health, and more.6MIT
- AlicenseNot gradedqualityDmaintenanceMCP server that connects AI agents to 28 Brazilian public APIs, providing tools to query government data on economy, legislation, transparency, judiciary, elections, environment, health, and more.MIT