{"name":"Muriel AI","description":"US drinking water compliance data for agents: published sample results from public water systems across 32 states (many updated daily, some back to the 1970s), notable events, trends, compliance statistics, and the federal drinking water standards and rules. Read-only. Each skill is one tool; send a data part {\"skill\": <id>, \"arguments\": {...}}. Results are published monitoring data, not compliance determinations.","version":"1.0.0","supportedInterfaces":[{"url":"https://murielai.io/a2a","protocolBinding":"JSONRPC","protocolVersion":"1.0"}],"provider":{"organization":"Muriel AI, Inc.","url":"https://murielai.io"},"documentationUrl":"https://murielai.io/developers#mcp-a2a","iconUrl":"https://murielai.io/static/brand/icon-512.png","capabilities":{"streaming":false,"pushNotifications":false,"extendedAgentCard":false},"securitySchemes":{"muriel_oauth":{"oauth2SecurityScheme":{"description":"Sign in with a Muriel account. Clients register dynamically; headless agents can use the verified-email flow in https://murielai.io/auth.md.","oauth2MetadataUrl":"https://murielai.io/.well-known/oauth-authorization-server","flows":{"authorizationCode":{"authorizationUrl":"https://murielai.io/oauth/authorize","tokenUrl":"https://murielai.io/oauth/token","refreshUrl":"https://murielai.io/oauth/token","scopes":{"muriel.read":"Read drinking water data and rules"},"pkceRequired":true}}}}},"securityRequirements":[{"schemes":{"muriel_oauth":{"list":["muriel.read"]}}}],"defaultInputModes":["application/json","text/plain"],"defaultOutputModes":["text/plain","application/json"],"skills":[{"id":"data_coverage","name":"Data coverage","description":"What sample-result data actually EXISTS -- overall, for a state, or for one water system: row counts, systems, distinct analytes, date range, and the share of rows with a usable numeric value. CALL THIS FIRST whenever a question depends on real results, and again before concluding that something was not detected. Coverage is very uneven: some states have no usable values at all and date windows range from decades to a few weeks.","tags":["drinking water","coverage"],"examples":["{\"skill\": \"data_coverage\", \"arguments\": {\"state\": \"CA\"}}"],"inputModes":["application/json","text/plain"],"outputModes":["text/plain","application/json"]},{"id":"find_water_system","name":"Find water system","description":"Find water systems by name or PWSID, with how many results each has and over what date range. Use this to turn a system name the user mentions into a PWSID before querying results.","tags":["drinking water","lookup"],"examples":["{\"skill\": \"find_water_system\", \"arguments\": {\"query\": \"Chicago\", \"state\": \"IL\"}}"],"inputModes":["application/json","text/plain"],"outputModes":["text/plain","application/json"]},{"id":"get_sample_results","name":"Get sample results","description":"Individual sample results, filtered by system, contaminant, state and date range. Returns the raw rows including the reported value, unit, non-detect flag and normalized mg/L value. The contaminant name is resolved through the analyte crosswalk; the resolution is returned so you can see whether it matched a federal standard.","tags":["drinking water","results"],"examples":["{\"skill\": \"get_sample_results\", \"arguments\": {\"pwsid\": \"IL0316000\", \"contaminant\": \"lead\", \"limit\": 20}}"],"inputModes":["application/json","text/plain"],"outputModes":["text/plain","application/json"]},{"id":"summarize_sample_results","name":"Summarize sample results","description":"Per-analyte summary for a system or state: number of results, how many have a usable value, non-detect count, date range, and min/max/mean in mg/L. Use this to see what a system has been sampling before drilling into one contaminant.","tags":["drinking water","results"],"examples":["{\"skill\": \"summarize_sample_results\", \"arguments\": {\"pwsid\": \"IL0316000\"}}"],"inputModes":["application/json","text/plain"],"outputModes":["text/plain","application/json"]},{"id":"rank_systems_by_size","name":"Rank systems by size","description":"THE tool for a question with no system in it -- 'tell me about arsenic exceedances in California', 'what's going on with water quality in Texas'. Returns one row per system and contaminant, ordered so the systems worth naming first come back first: acute contaminants ahead of everything, then the largest systems by service connections. Each row carries service_connections, population_served and size_band alongside the system's highest result, its sample count, its date range, and whether that highest value is above the federal limit.\nIt RANKS, it does not filter -- small systems are in the result, lower down. Lead with the large systems, then account for the rest ('and 43 smaller systems, serving 61,000 people between them, also had arsenic above the MCL'); never drop them.\nSet only_exceeding with a named contaminant to get just the systems whose highest result is over that contaminant's federal limit. max_mgl is a single highest sample, so a flagged row means one result was over, NOT that the system is in violation -- confirm any specific system with check_compliance_from_data.","tags":["drinking water","results","market"],"examples":["{\"skill\": \"rank_systems_by_size\", \"arguments\": {\"state\": \"CA\", \"contaminant\": \"nitrate\", \"only_exceeding\": true}}"],"inputModes":["application/json","text/plain"],"outputModes":["text/plain","application/json"]},{"id":"get_notable_events","name":"Get notable events","description":"Curated observations from comparing successive updates of a state's published results: notable value movements between a result and its prior (with delta and percent change), extreme values, and sample-point changes. Pre-summarized in plain language and small in volume, with severity info/watch/high -- high is rare, so 'show me anything high' returns a readable list. Use for 'what changed recently?' or 'anything worth looking at?'. These are automated observations, NOT regulatory findings.","tags":["drinking water","events"],"examples":["{\"skill\": \"get_notable_events\", \"arguments\": {\"state\": \"CA\", \"min_severity\": \"high\"}}"],"inputModes":["application/json","text/plain"],"outputModes":["text/plain","application/json"]},{"id":"get_record_changes","name":"Get record changes","description":"Row-level differences between consecutive updates: results that APPEARED, DISAPPEARED, or were AMENDED, each with its previous values alongside the new ones. Use to answer 'was this result revised or withdrawn?'. Amendments are rare and important -- a revised value can change a running annual average that was already reported. Disappearances are usually churn in the state's published dataset rather than a utility retracting anything.","tags":["drinking water","events"],"examples":["{\"skill\": \"get_record_changes\", \"arguments\": {\"state\": \"GA\", \"kind\": \"amended\"}}"],"inputModes":["application/json","text/plain"],"outputModes":["text/plain","application/json"]},{"id":"analyte_trend","name":"Analyte trend","description":"How a contaminant has changed over time at a system's sampling locations, or across a state. Answers 'is arsenic going up', 'has lead improved', 'what is the trend'. Reads a precomputed table of one change per system, facility, sample location, sample point and analyte, built from the full historical record -- some entries run decades. A wider scope counts how many locations rose against how many fell rather than averaging them. The reporting window is chosen from what each location actually holds: the whole record always, plus the most recent years when the record is long enough for the two to differ. For SEASONAL analytes -- TTHM, HAA5, their components, TOC -- it compares the same quarter across years (Q3 2026 against Q3 2025) and reports the locational running annual average, because these form faster in warm water and a quarter-to-quarter change measures the season rather than the system.","tags":["drinking water","trends"],"examples":["{\"skill\": \"analyte_trend\", \"arguments\": {\"contaminant\": \"nitrate\", \"pwsid\": \"CA1910067\"}}"],"inputModes":["application/json","text/plain"],"outputModes":["text/plain","application/json"]},{"id":"check_compliance_from_data","name":"Check compliance from data","description":"Compute the CORRECT compliance statistic for a contaminant at one system from its real results -- running annual average, locational running annual average, 90th percentile, or single-sample for acute contaminants -- and compare it to the federal standard. Refuses, with a reason, when the analyte has no federal standard mapped to it. Use this instead of eyeballing individual results.","tags":["drinking water","compliance"],"examples":["{\"skill\": \"check_compliance_from_data\", \"arguments\": {\"pwsid\": \"IL0316000\", \"contaminant\": \"TTHM\"}}"],"inputModes":["application/json","text/plain"],"outputModes":["text/plain","application/json"]},{"id":"check_monitoring_gaps","name":"Check monitoring gaps","description":"Candidate gaps between the monitoring obligations the source asserts for a system (analyte, sample point, required frequency) and the results this dataset holds. REQUIRES a pwsid or state. Every finding is tested against what this dataset could actually have shown for that system: a 3-year obligation cannot be assessed from a six-week collection window, and a system with no usable values cannot be assessed at all. Only 'assessable' findings are returned by default. A gap is a CANDIDATE to check against the primacy agency -- never a monitoring violation, and never proof the utility failed to sample.","tags":["drinking water","compliance"],"examples":["{\"skill\": \"check_monitoring_gaps\", \"arguments\": {\"pwsid\": \"IL0316000\"}}"],"inputModes":["application/json","text/plain"],"outputModes":["text/plain","application/json"]},{"id":"historical_depth","name":"Historical depth","description":"How far back the deep archive goes for a state or system, and how many results it holds, WITHOUT fetching any of them. Cheap. Use it to find out whether a long-range question can be answered before committing to deep_history_search, and to tell a user what record actually exists for their system.","tags":["drinking water","coverage","history"],"examples":["{\"skill\": \"historical_depth\", \"arguments\": {\"pwsid\": \"CA1910067\"}}"],"inputModes":["application/json","text/plain"],"outputModes":["text/plain","application/json"]},{"id":"deep_history_search","name":"Deep history search","description":"Search the DEEP HISTORICAL ARCHIVE as well as the current window. Every other results tool reads only what the daily pipeline publishes, which for most states is a rolling six-week window. This one also reads the reconstruction archive -- 81 million results reaching back as far as 1976 in California and 1980 in Illinois and Montana.\nUSE IT WHEN the question reaches further back than the last few weeks: a multi-year trend, 'has this ever been detected here', 'what did this system look like in 2015', or a long baseline. To put the archive in a FILE, use export_csv (source sample_results), which covers the archive by default and is not capped at this tool's 1,000 sample rows. Also use it when an ordinary results tool returns nothing for a period before the current window -- that is the tool being asked the wrong question, not an absence of sampling.\nDO NOT use it for 'what happened last month' or 'the latest result'; the ordinary tools are faster and the current window is what they cover. Rows come back marked `era`: 'recent' from the daily pipeline, 'historical' from the archive. The archive stops before the current window begins, so there is a gap between them in most states -- report it as a gap in the record, never as a period without sampling.","tags":["drinking water","results","history"],"examples":["{\"skill\": \"deep_history_search\", \"arguments\": {\"pwsid\": \"CA1910067\", \"analyte\": \"ARSENIC\", \"since\": \"1990-01-01\"}}"],"inputModes":["application/json","text/plain"],"outputModes":["text/plain","application/json"]},{"id":"lookup_standard","name":"Lookup standard","description":"Look up the exact federal standard for a contaminant: MCL or treatment technique or action level, MCLG, units, the averaging basis used for compliance, whether it is acute, and the CFR citation. Use whenever a specific numeric standard is involved. Accepts common aliases (TTHM, GenX, PCE, Pb, nitrate).","tags":["drinking water","rules"],"examples":["{\"skill\": \"lookup_standard\", \"arguments\": {\"contaminant\": \"arsenic\"}}"],"inputModes":["application/json","text/plain"],"outputModes":["text/plain","application/json"]},{"id":"evaluate_result","name":"Evaluate result","description":"Compare a reported laboratory result against the federal standard, with unit conversion (mg/L, ug/L, ppb, ng/L, ppt, pCi/L). Returns the verdict, percent of the standard, the correct averaging basis, and whether the contaminant is acute. Use this whenever the user gives you a measured number.","tags":["drinking water","rules"],"examples":["{\"skill\": \"evaluate_result\", \"arguments\": {\"contaminant\": \"nitrate\", \"value\": 12, \"unit\": \"mg/L\"}}"],"inputModes":["application/json","text/plain"],"outputModes":["text/plain","application/json"]},{"id":"resolve_analyte","name":"Resolve analyte","description":"Explain how a raw analyte name from the data maps to federal regulation: a standard, a component of an aggregate standard (chloroform -> TTHM), a secondary standard, a treatment-technique indicator, a known-unregulated contaminant with the reason, a parser artifact, or unmapped. Use when a name in the results looks unfamiliar.","tags":["drinking water","rules"],"examples":["{\"skill\": \"resolve_analyte\", \"arguments\": {\"analyte_name\": \"CHLOROFORM\"}}"],"inputModes":["application/json","text/plain"],"outputModes":["text/plain","application/json"]},{"id":"search_regulations","name":"Search regulations","description":"Search the drinking water compliance knowledge base: a curated federal reference (SDWA overview, full NPDWR standards, monitoring and reporting, Lead & Copper / LCRR / LCRI, disinfection byproducts, microbial rules, PFAS, violations and public notification) plus any documents the user has added to the documents/ folder (state regulations, sanitary surveys, lab reports, SOPs). Use this before answering any substantive regulatory question. Prefer several focused searches over one broad one.","tags":["drinking water","rules"],"examples":["{\"skill\": \"search_regulations\", \"arguments\": {\"query\": \"lead action level 90th percentile\"}}"],"inputModes":["application/json","text/plain"],"outputModes":["text/plain","application/json"]}]}