{"harvestedAt":"2026-10-24","catalogGeneratedAt":"2026-10-22T03:30:56.990Z","classes":[{"id":"search","label":"Search"},{"id":"get","label":"Get"},{"id":"list","label":"List"},{"id":"query","label":"Query"},{"id":"analyze","label":"Analyze"},{"id":"resolve","label":"Resolve"},{"id":"act","label":"Act"},{"id":"describe","label":"Describe"},{"id":"other","label":"Other"}],"categories":["government","public-data","research","utility"],"servers":[{"name":"art-institute-chicago-mcp-server","description":"Search the Art Institute of Chicago collection: artworks, artists, exhibitions, and audio guides via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://art-institute-chicago.caseyjhand.com/mcp","npm":"@cyanheads/art-institute-chicago-mcp-server","github":"https://github.com/cyanheads/art-institute-chicago-mcp-server","version":"0.2.0","requiredEnvVars":[],"prefix":"artic_","canvas":false,"mirror":false,"composesWith":["met-museum-mcp-server","smithsonian-mcp-server","wikidata-mcp-server"],"shade":0.0811,"tools":[0,1,2,3,4,5],"harvested":true},{"name":"arxiv-mcp-server","description":"Search arXiv, fetch paper metadata, and read full-text content via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://arxiv.caseyjhand.com/mcp","npm":"@cyanheads/arxiv-mcp-server","github":"https://github.com/cyanheads/arxiv-mcp-server","version":"1.7.0","requiredEnvVars":[],"prefix":"arxiv_","canvas":false,"mirror":false,"composesWith":[],"shade":0.2162,"tools":[6,7,8,9],"harvested":true},{"name":"astronomy-mcp-server","description":"What's in the sky, computed offline — planet and moon positions, rise/set, phases, eclipses, and seasons for any place and time via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://astronomy.caseyjhand.com/mcp","npm":"@cyanheads/astronomy-mcp-server","github":"https://github.com/cyanheads/astronomy-mcp-server","version":"0.4.2","requiredEnvVars":[],"prefix":"astronomy_","canvas":false,"mirror":false,"composesWith":["national-parks-mcp-server","nws-weather-mcp-server","open-meteo-mcp-server","openstreetmap-mcp-server","reference-data-mcp-server"],"shade":0.5405,"tools":[10,11,12,13,14,15,16],"harvested":true},{"name":"aviation-weather-mcp-server","description":"Fetch METARs, TAFs, PIREPs, domestic/international SIGMETs and CWAs from NWS AWC via MCP. AIRMETs not served. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://aviation-weather.caseyjhand.com/mcp","npm":"@cyanheads/aviation-weather-mcp-server","github":"https://github.com/cyanheads/aviation-weather-mcp-server","version":"0.6.0","requiredEnvVars":[],"prefix":"aviation_","canvas":false,"mirror":false,"composesWith":["nws-weather-mcp-server","openstreetmap-mcp-server","ourairports-mcp-server"],"shade":0.1569,"tools":[17,18,19,20,21],"harvested":true},{"name":"biorxiv-mcp-server","description":"Search and retrieve bioRxiv and medRxiv preprints — by DOI, date interval, or keyword — via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://biorxiv.caseyjhand.com/mcp","npm":"@cyanheads/biorxiv-mcp-server","github":"https://github.com/cyanheads/biorxiv-mcp-server","version":"0.4.1","requiredEnvVars":[],"prefix":"biorxiv_","canvas":false,"mirror":false,"composesWith":[],"shade":0.5135,"tools":[22,23,24,25,26,27,28],"harvested":true},{"name":"bls-labor-mcp-server","description":"Fetch US Bureau of Labor Statistics data — CPI, unemployment, wages, JOLTS, and more via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://bls-labor.caseyjhand.com/mcp","npm":"@cyanheads/bls-labor-mcp-server","github":"https://github.com/cyanheads/bls-labor-mcp-server","version":"0.6.0","requiredEnvVars":[],"prefix":"bls_","canvas":true,"mirror":true,"composesWith":[],"shade":0.8627,"tools":[29,30,31,32,33,34],"harvested":true},{"name":"bluesky-mcp-server","description":"Search posts, profiles, feeds, threads, and trending topics on Bluesky via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://bluesky.caseyjhand.com/mcp","npm":"@cyanheads/bluesky-mcp-server","github":"https://github.com/cyanheads/bluesky-mcp-server","version":"0.5.2","requiredEnvVars":[],"prefix":"bsky_","canvas":false,"mirror":false,"composesWith":["gdelt-mcp-server","hn-mcp-server","wikidata-mcp-server"],"shade":0.451,"tools":[35,36,37,38,39,40,41,42,43],"harvested":true},{"name":"brapi-mcp-server","description":"A collaborative BrAPI v2.1 workspace for multi-agent research via MCP. Search studies, germplasm, genotypes, and more across Breedbase, T3, Sweetpotatobase, and any BrAPI v2-compliant server.","category":"research","endpoint":"https://brapi.caseyjhand.com/mcp","npm":"@cyanheads/brapi-mcp-server","github":"https://github.com/cyanheads/brapi-mcp-server","version":"0.10.1","requiredEnvVars":[],"prefix":"brapi_","canvas":true,"mirror":false,"composesWith":[],"shade":0.7568,"tools":[44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65],"harvested":true},{"name":"browser-compat-mcp-server","description":"Browser compatibility and Baseline status for any web feature — offline, from MDN's browser-compat-data, web-features, and caniuse. STDIO or Streamable HTTP.","category":"utility","endpoint":"https://browser-compat.caseyjhand.com/mcp","npm":"@cyanheads/browser-compat-mcp-server","github":"https://github.com/cyanheads/browser-compat-mcp-server","version":"0.2.1","requiredEnvVars":[],"prefix":"browsercompat_","canvas":false,"mirror":false,"composesWith":["iana-registries-mcp-server","reference-data-mcp-server","stackexchange-mcp-server"],"shade":0,"tools":[66,67,68,69,70],"harvested":true},{"name":"calculator-mcp-server","description":"Evaluate, simplify, and differentiate mathematical expressions via MCP. STDIO or Streamable HTTP.","category":"utility","endpoint":"https://calculator.caseyjhand.com/mcp","npm":"@cyanheads/calculator-mcp-server","github":"https://github.com/cyanheads/calculator-mcp-server","version":"0.5.1","requiredEnvVars":[],"prefix":"","canvas":false,"mirror":false,"composesWith":[],"shade":0.4286,"tools":[71],"harvested":true},{"name":"canada-parliament-mcp-server","description":"Track Canadian federal bills, MPs, House votes, and Hansard speeches via MCP. STDIO or Streamable HTTP.","category":"government","endpoint":"https://canada-parliament.caseyjhand.com/mcp","npm":"@cyanheads/canada-parliament-mcp-server","github":"https://github.com/cyanheads/canada-parliament-mcp-server","version":"0.1.2","requiredEnvVars":[],"prefix":"canparl_","canvas":false,"mirror":false,"composesWith":[],"shade":0.1667,"tools":[72,73,74,75,76,77,78,79],"harvested":true},{"name":"cdc-health-mcp-server","description":"Search and query CDC public health data — mortality, vaccinations, surveillance, behavioral risk (Socrata SODA API) via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://cdc.caseyjhand.com/mcp","npm":"@cyanheads/cdc-health-mcp-server","github":"https://github.com/cyanheads/cdc-health-mcp-server","version":"0.10.0","requiredEnvVars":[],"prefix":"cdc_","canvas":false,"mirror":false,"composesWith":[],"shade":0.7647,"tools":[80,81,82,83,84],"harvested":true},{"name":"census-mcp-server","description":"Query U.S. Census Bureau data, variables, and geography via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://census.caseyjhand.com/mcp","npm":"@cyanheads/census-mcp-server","github":"https://github.com/cyanheads/census-mcp-server","version":"0.6.2","requiredEnvVars":[],"prefix":"census_","canvas":false,"mirror":false,"composesWith":[],"shade":0.8039,"tools":[85,86,87,88,89,90,91,92],"harvested":true},{"name":"cern-inspire-mcp-server","description":"Search INSPIRE-HEP papers, authors, experiments, HEPData records; get citation metrics and BibTeX via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://cern-inspire.caseyjhand.com/mcp","npm":"@cyanheads/cern-inspire-mcp-server","github":"https://github.com/cyanheads/cern-inspire-mcp-server","version":"0.1.3","requiredEnvVars":[],"prefix":"cern_inspire_","canvas":false,"mirror":false,"composesWith":["arxiv-mcp-server","cern-opendata-mcp-server","crossref-mcp-server","datacite-mcp-server","openalex-mcp-server","orcid-mcp-server"],"shade":0.3514,"tools":[93,94,95,96,97,98,99,100],"harvested":true},{"name":"cern-opendata-mcp-server","description":"Search CERN Open Data, fetch records, files, analysis environments, CMS good-run lists, HLT paths via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://cern-opendata.caseyjhand.com/mcp","npm":"@cyanheads/cern-opendata-mcp-server","github":"https://github.com/cyanheads/cern-opendata-mcp-server","version":"0.2.1","requiredEnvVars":[],"prefix":"cern_opendata_","canvas":false,"mirror":false,"composesWith":["arxiv-mcp-server","cern-inspire-mcp-server","datacite-mcp-server","zenodo-mcp-server"],"shade":0.4054,"tools":[101,102,103,104,105,106,107],"harvested":true},{"name":"chembl-mcp-server","description":"Link compounds to protein targets, rank bioactivity (IC50/Ki/EC50), and look up drug mechanisms and indications over ChEMBL via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://chembl.caseyjhand.com/mcp","npm":"@cyanheads/chembl-mcp-server","github":"https://github.com/cyanheads/chembl-mcp-server","version":"0.4.0","requiredEnvVars":[],"prefix":"chembl_","canvas":true,"mirror":false,"composesWith":["openfda-mcp-server","protein-mcp-server","pubchem-mcp-server","pubmed-mcp-server","uniprot-mcp-server"],"shade":0.9459,"tools":[108,109,110,111,112,113,114],"harvested":true},{"name":"cisa-cybersecurity-mcp-server","description":"CISA Known Exploited Vulnerabilities with BOD 26-04 deadlines, SSVC prioritization, and the full ICS advisory corpus (CSAF) via MCP. Keyless. STDIO or Streamable HTTP.","category":"government","endpoint":"https://cisa-cybersecurity.caseyjhand.com/mcp","npm":"@cyanheads/cisa-cybersecurity-mcp-server","github":"https://github.com/cyanheads/cisa-cybersecurity-mcp-server","version":"0.3.2","requiredEnvVars":[],"prefix":"cisa_","canvas":false,"mirror":true,"composesWith":["nist-nvd-mcp-server","osv-advisory-mcp-server"],"shade":0.9167,"tools":[115,116,117,118,119,120,121],"harvested":true},{"name":"clinicaltrialsgov-mcp-server","description":"Search ClinicalTrials.gov trials, retrieve study details and results, and match patients to candidate trials via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://clinicaltrials.caseyjhand.com/mcp","npm":"clinicaltrialsgov-mcp-server","github":"https://github.com/cyanheads/clinicaltrialsgov-mcp-server","version":"2.10.0","requiredEnvVars":[],"prefix":"clinicaltrials_","canvas":false,"mirror":false,"composesWith":[],"shade":0.6486,"tools":[122,123,124,125,126,127,128],"harvested":true},{"name":"college-scorecard-mcp-server","description":"Search, compare, and analyze U.S. college data — costs, earnings, programs, and outcomes — via MCP. STDIO or Streamable HTTP.","category":"government","endpoint":"https://college-scorecard.caseyjhand.com/mcp","npm":"@cyanheads/college-scorecard-mcp-server","github":"https://github.com/cyanheads/college-scorecard-mcp-server","version":"0.4.0","requiredEnvVars":["SCORECARD_API_KEY"],"prefix":"scorecard_","canvas":false,"mirror":false,"composesWith":[],"shade":0.9583,"tools":[129,130,131,132,133,134,135,136,137],"harvested":true},{"name":"congressgov-mcp-server","description":"Access U.S. congressional data (bills, votes, members, committees) via MCP. STDIO or Streamable HTTP.","category":"government","endpoint":"https://congressgov.caseyjhand.com/mcp","npm":"@cyanheads/congressgov-mcp-server","github":"https://github.com/cyanheads/congressgov-mcp-server","version":"0.8.0","requiredEnvVars":[],"prefix":"congressgov_","canvas":false,"mirror":true,"composesWith":[],"shade":0.375,"tools":[138,139,140,141,142,143,144,145,146,147],"harvested":true},{"name":"courtlistener-mcp-server","description":"Search and retrieve US court opinions, federal dockets, judge records, citation networks, and oral arguments from CourtListener's 9M+ opinion corpus via MCP. STDIO or Streamable HTTP.","category":"government","endpoint":"https://courtlistener.caseyjhand.com/mcp","npm":"@cyanheads/courtlistener-mcp-server","github":"https://github.com/cyanheads/courtlistener-mcp-server","version":"0.8.0","requiredEnvVars":["COURTLISTENER_API_TOKEN"],"prefix":"courtlistener_","canvas":false,"mirror":false,"composesWith":[],"shade":0.25,"tools":[148,149,150,151,152,153,154,155,156,157,158,159,160,161],"harvested":true},{"name":"cpsc-recalls-mcp-server","description":"Search and retrieve US consumer product recalls from the CPSC (Consumer Product Safety Commission) via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://cpsc-recalls.caseyjhand.com/mcp","npm":"@cyanheads/cpsc-recalls-mcp-server","github":"https://github.com/cyanheads/cpsc-recalls-mcp-server","version":"0.2.2","requiredEnvVars":[],"prefix":"cpsc_","canvas":false,"mirror":false,"composesWith":["nhtsa-vehicle-safety-mcp-server","openfda-mcp-server"],"shade":0.4706,"tools":[162,163,164],"harvested":true},{"name":"crossref-mcp-server","description":"Resolve DOIs, search ~155M scholarly works, fetch references, and look up publishers via the Crossref REST API. STDIO or Streamable HTTP.","category":"research","endpoint":"https://crossref.caseyjhand.com/mcp","npm":"@cyanheads/crossref-mcp-server","github":"https://github.com/cyanheads/crossref-mcp-server","version":"0.4.2","requiredEnvVars":[],"prefix":"crossref_","canvas":false,"mirror":false,"composesWith":[],"shade":0.2432,"tools":[165,166,167,168,169,170,171],"harvested":true},{"name":"datacite-mcp-server","description":"Search DataCite datasets and software, fetch DOI metadata, trace relations, format citations via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://datacite.caseyjhand.com/mcp","npm":"@cyanheads/datacite-mcp-server","github":"https://github.com/cyanheads/datacite-mcp-server","version":"0.1.3","requiredEnvVars":[],"prefix":"datacite_","canvas":false,"mirror":false,"composesWith":["arxiv-mcp-server","crossref-mcp-server","openalex-mcp-server","orcid-mcp-server","zenodo-mcp-server"],"shade":0.2703,"tools":[172,173,174,175,176,177],"harvested":true},{"name":"devops-status-mcp-server","description":"Check vendor status pages, inspect SSL/TLS certificates, verify DNS propagation, and get incident-response playbooks via MCP. STDIO or Streamable HTTP.","category":"utility","endpoint":"https://devops-status.caseyjhand.com/mcp","npm":"@cyanheads/devops-status-mcp-server","github":"https://github.com/cyanheads/devops-status-mcp-server","version":"0.10.0","requiredEnvVars":[],"prefix":"devops_","canvas":false,"mirror":false,"composesWith":[],"shade":0.5714,"tools":[178,179,180,181,182,183,184],"harvested":true},{"name":"earthquake-mcp-server","description":"Search USGS and EMSC seismic data — real-time feeds, event queries, and earthquake counts via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://earthquake.caseyjhand.com/mcp","npm":"@cyanheads/earthquake-mcp-server","github":"https://github.com/cyanheads/earthquake-mcp-server","version":"0.4.0","requiredEnvVars":[],"prefix":"earthquake_","canvas":false,"mirror":false,"composesWith":[],"shade":0.4118,"tools":[185,186,187,188],"harvested":true},{"name":"eia-energy-mcp-server","description":"Browse and query the U.S. Energy Information Administration API v2 — electricity, petroleum, natural gas, coal, forecasts, and more via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://eia-energy.caseyjhand.com/mcp","npm":"@cyanheads/eia-energy-mcp-server","github":"https://github.com/cyanheads/eia-energy-mcp-server","version":"0.4.4","requiredEnvVars":["EIA_API_KEY"],"prefix":"eia_","canvas":true,"mirror":false,"composesWith":[],"shade":0.6863,"tools":[189,190,191,192,193,194],"harvested":true},{"name":"elevation-mcp-server","description":"Look up elevation worldwide, profile route ascent/descent, grid areas, check terrain line of sight via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://elevation.caseyjhand.com/mcp","npm":"@cyanheads/elevation-mcp-server","github":"https://github.com/cyanheads/elevation-mcp-server","version":"0.2.0","requiredEnvVars":[],"prefix":"elevation_","canvas":false,"mirror":false,"composesWith":["open-meteo-mcp-server","openstreetmap-mcp-server","usgs-water-mcp-server","wsdot-mcp-server"],"shade":0.1765,"tools":[195,196,197,198],"harvested":true},{"name":"ensembl-mcp-server","description":"Look up genes, fetch sequences, predict variant consequences, find orthologs, and retrieve cross-database xrefs from Ensembl REST via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://ensembl.caseyjhand.com/mcp","npm":"@cyanheads/ensembl-mcp-server","github":"https://github.com/cyanheads/ensembl-mcp-server","version":"0.6.1","requiredEnvVars":[],"prefix":"ensembl_","canvas":false,"mirror":false,"composesWith":["crossref-mcp-server","gnomad-genetics-mcp-server","pubchem-mcp-server","pubmed-mcp-server","uniprot-mcp-server"],"shade":0.7838,"tools":[199,200,201,202,203,204,205],"harvested":true},{"name":"epa-mcp-server","description":"Search and retrieve EPA environmental data: facility compliance (ECHO), toxic releases (TRI), Superfund sites, drinking water systems, environmental-justice screening (EJScreen), and real-time air quality (AirNow). STDIO or Streamable HTTP.","category":"government","endpoint":"https://epa.caseyjhand.com/mcp","npm":"@cyanheads/epa-mcp-server","github":"https://github.com/cyanheads/epa-mcp-server","version":"0.5.0","requiredEnvVars":[],"prefix":"epa_","canvas":false,"mirror":false,"composesWith":[],"shade":0.5833,"tools":[206,207,208,209,210,211,212,213,214],"harvested":true},{"name":"eur-lex-mcp-server","description":"Search EU legislation, CJEU case law, and treaties; traverse the CELLAR relationship graph; resolve EuroVoc concepts via MCP. STDIO or Streamable HTTP.","category":"government","endpoint":"https://eur-lex.caseyjhand.com/mcp","npm":"@cyanheads/eur-lex-mcp-server","github":"https://github.com/cyanheads/eur-lex-mcp-server","version":"0.19.0","requiredEnvVars":[],"prefix":"eurlex_","canvas":false,"mirror":false,"composesWith":["courtlistener-mcp-server","eurostat-mcp-server","wikidata-mcp-server"],"shade":0,"tools":[215,216,217,218,219,220,221],"harvested":true},{"name":"eurostat-mcp-server","description":"Search and query the Eurostat catalogue — EU economy, demography, trade, health, and NUTS regional data via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://eurostat.caseyjhand.com/mcp","npm":"@cyanheads/eurostat-mcp-server","github":"https://github.com/cyanheads/eurostat-mcp-server","version":"0.10.0","requiredEnvVars":[],"prefix":"eurostat_","canvas":true,"mirror":false,"composesWith":[],"shade":0.9804,"tools":[222,223,224,225,226,227,228,229],"harvested":true},{"name":"exchange-rates-mcp-server","description":"Convert currencies, get FX rates, and query historical ECB exchange rate data via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://exchange-rates.caseyjhand.com/mcp","npm":"@cyanheads/exchange-rates-mcp-server","github":"https://github.com/cyanheads/exchange-rates-mcp-server","version":"0.5.0","requiredEnvVars":[],"prefix":"fx_","canvas":true,"mirror":false,"composesWith":["worldbank-mcp-server"],"shade":0.8431,"tools":[230,231,232,233,234,235,236],"harvested":true},{"name":"faa-aircraft-registry-mcp-server","description":"Decode N-numbers to aircraft, engine, status, and owner; search the US civil aircraft registry by owner, type, or state; resolve active/deregistered/reserved status — offline via MCP. STDIO or Streamable HTTP.","category":"government","endpoint":"https://faa-aircraft-registry.caseyjhand.com/mcp","npm":"@cyanheads/faa-aircraft-registry-mcp-server","github":"https://github.com/cyanheads/faa-aircraft-registry-mcp-server","version":"0.1.12","requiredEnvVars":[],"prefix":"faa_","canvas":false,"mirror":true,"composesWith":["aviation-weather-mcp-server","ourairports-mcp-server"],"shade":0.2917,"tools":[237,238,239,240,241],"harvested":true},{"name":"faa-airmen-registry-mcp-server","description":"Search FAA airmen certificates, ratings, and informational medical records via MCP. STDIO or Streamable HTTP.","category":"government","endpoint":"https://faa-airmen-registry.caseyjhand.com/mcp","npm":"@cyanheads/faa-airmen-registry-mcp-server","github":"https://github.com/cyanheads/faa-airmen-registry-mcp-server","version":"0.2.0","requiredEnvVars":[],"prefix":"faa_airmen_","canvas":false,"mirror":true,"composesWith":["aviation-weather-mcp-server","faa-aircraft-registry-mcp-server"],"shade":0.5,"tools":[242,243,244,245,246,247],"harvested":true},{"name":"faa-traffic-delays-mcp-server","description":"Track FAA ground stops, delay programs, airport delays, the operations plan, and ATCSCC advisories via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://faa-traffic-delays.caseyjhand.com/mcp","npm":"@cyanheads/faa-traffic-delays-mcp-server","github":"https://github.com/cyanheads/faa-traffic-delays-mcp-server","version":"0.2.1","requiredEnvVars":[],"prefix":"faa_delays_","canvas":false,"mirror":false,"composesWith":["aviation-weather-mcp-server","ourairports-mcp-server"],"shade":0.0196,"tools":[248,249,250,251,252,253],"harvested":true},{"name":"faostat-mcp-server","description":"Global food & agriculture statistics from the UN FAOSTAT bulk-download corpus, served from a local SQLite mirror with a DataCanvas SQL surface, via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://faostat.caseyjhand.com/mcp","npm":"@cyanheads/faostat-mcp-server","github":"https://github.com/cyanheads/faostat-mcp-server","version":"0.4.0","requiredEnvVars":[],"prefix":"faostat_","canvas":true,"mirror":true,"composesWith":["eurostat-mcp-server","gbif-biodiversity-mcp-server","usda-mcp-server","worldbank-mcp-server"],"shade":0.8824,"tools":[254,255,256,257,258,259],"harvested":true},{"name":"fbi-crime-mcp-server","description":"Exposes the FBI Crime Data Explorer API — monthly UCR offense rates and counts by national, state, or agency scope, plus LEOKA officer-safety statistics via MCP. STDIO or Streamable HTTP.","category":"government","endpoint":"https://fbi-crime.caseyjhand.com/mcp","npm":"@cyanheads/fbi-crime-mcp-server","github":"https://github.com/cyanheads/fbi-crime-mcp-server","version":"0.3.0","requiredEnvVars":["FBI_API_KEY"],"prefix":"fbi_","canvas":false,"mirror":false,"composesWith":[],"shade":1,"tools":[260,261,262,263,264,265],"harvested":true},{"name":"fcc-broadband-mcp-server","description":"Access FCC broadband availability, coverage analysis, and digital divide data for US geographies and census blocks via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://fcc-broadband.caseyjhand.com/mcp","npm":"@cyanheads/fcc-broadband-mcp-server","github":"https://github.com/cyanheads/fcc-broadband-mcp-server","version":"0.3.0","requiredEnvVars":[],"prefix":"fcc_","canvas":false,"mirror":true,"composesWith":[],"shade":0.7059,"tools":[266,267,268,269,270,271,272,273,274],"harvested":true},{"name":"fcc-spectrum-mcp-server","description":"Search FCC radio licenses, find nearby licensed sites, and see who is licensed on a frequency via MCP. STDIO or Streamable HTTP.","category":"government","endpoint":"https://fcc-spectrum.caseyjhand.com/mcp","npm":"@cyanheads/fcc-spectrum-mcp-server","github":"https://github.com/cyanheads/fcc-spectrum-mcp-server","version":"0.2.0","requiredEnvVars":[],"prefix":"fcc_spectrum_","canvas":false,"mirror":true,"composesWith":["elevation-mcp-server","fcc-broadband-mcp-server","openstreetmap-mcp-server"],"shade":0.4167,"tools":[275,276,277,278,279],"harvested":true},{"name":"fdic-banks-mcp-server","description":"Search FDIC-insured banks, Call Report financials, peer rankings, failures, deposit market share via MCP. STDIO or Streamable HTTP.","category":"government","endpoint":"https://fdic-banks.caseyjhand.com/mcp","npm":"@cyanheads/fdic-banks-mcp-server","github":"https://github.com/cyanheads/fdic-banks-mcp-server","version":"0.2.0","requiredEnvVars":[],"prefix":"fdic_","canvas":true,"mirror":false,"composesWith":["secedgar-mcp-server","treasury-fiscaldata-mcp-server"],"shade":0.8333,"tools":[280,281,282,283,284,285,286,287,288],"harvested":true},{"name":"federal-regulations-mcp-server","description":"Search and trace US federal rules across the Federal Register (proposed/final rules and notices), the eCFR (codified, point-in-time CFR full text, locally mirrored), and Regulations.gov (rulemaking dockets and public comments) via MCP. STDIO or Streamable HTTP.","category":"government","endpoint":"https://federal-regulations.caseyjhand.com/mcp","npm":"@cyanheads/federal-regulations-mcp-server","github":"https://github.com/cyanheads/federal-regulations-mcp-server","version":"0.5.3","requiredEnvVars":[],"prefix":"regulations_","canvas":false,"mirror":true,"composesWith":["congressgov-mcp-server","courtlistener-mcp-server","usaspending-mcp-server"],"shade":0.125,"tools":[289,290,291,292,293,294,295],"harvested":true},{"name":"fema-mcp-server","description":"Query FEMA disaster declarations, public assistance grants, housing aid, and NFIP flood insurance claims via MCP. STDIO or Streamable HTTP.","category":"government","endpoint":"https://fema.caseyjhand.com/mcp","npm":"@cyanheads/fema-mcp-server","github":"https://github.com/cyanheads/fema-mcp-server","version":"0.4.1","requiredEnvVars":[],"prefix":"fema_","canvas":true,"mirror":false,"composesWith":["earthquake-mcp-server","nws-weather-mcp-server","reliefweb-mcp-server","usgs-water-mcp-server"],"shade":0.875,"tools":[296,297,298,299,300,301,302,303],"harvested":true},{"name":"first-epss-mcp-server","description":"Look up FIRST EPSS exploitation scores and daily history, find CVEs by score threshold, and prioritize CVEs with caller-supplied CVSS via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://first-epss.caseyjhand.com/mcp","npm":"@cyanheads/first-epss-mcp-server","github":"https://github.com/cyanheads/first-epss-mcp-server","version":"0.1.2","requiredEnvVars":[],"prefix":"epss_","canvas":false,"mirror":false,"composesWith":["cisa-cybersecurity-mcp-server","nist-nvd-mcp-server","osv-advisory-mcp-server"],"shade":0.098,"tools":[304,305,306,307,308],"harvested":true},{"name":"gbif-biodiversity-mcp-server","description":"Search GBIF species taxonomy, occurrence records, datasets, and publishers via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://gbif-biodiversity.caseyjhand.com/mcp","npm":"@cyanheads/gbif-biodiversity-mcp-server","github":"https://github.com/cyanheads/gbif-biodiversity-mcp-server","version":"0.7.5","requiredEnvVars":[],"prefix":"gbif_","canvas":false,"mirror":false,"composesWith":[],"shade":0.5946,"tools":[309,310,311,312,313,314,315,316,317,318,319,320,321],"harvested":true},{"name":"gdelt-mcp-server","description":"Search and analyze global news coverage and US television transcripts from the GDELT Project's real-time APIs via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://gdelt.caseyjhand.com/mcp","npm":"@cyanheads/gdelt-mcp-server","github":"https://github.com/cyanheads/gdelt-mcp-server","version":"0.7.0","requiredEnvVars":[],"prefix":"gdelt_","canvas":false,"mirror":false,"composesWith":[],"shade":0.6275,"tools":[322,323,324,325,326,327,328,329,330],"harvested":true},{"name":"geonames-mcp-server","description":"Search GeoNames places, walk admin hierarchies, reverse geocode, get postal codes and country info via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://geonames.caseyjhand.com/mcp","npm":"@cyanheads/geonames-mcp-server","github":"https://github.com/cyanheads/geonames-mcp-server","version":"0.1.3","requiredEnvVars":[],"prefix":"geonames_","canvas":false,"mirror":false,"composesWith":["census-mcp-server","earthquake-mcp-server","open-meteo-mcp-server","openstreetmap-mcp-server","ourairports-mcp-server","reference-data-mcp-server"],"shade":0.5882,"tools":[331,332,333,334,335,336,337,338],"harvested":true},{"name":"gnomad-genetics-mcp-server","description":"Ancestry allele frequencies, LoF constraint, variant lists, and coverage from gnomAD, joined with ClinVar clinical significance via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://gnomad-genetics.caseyjhand.com/mcp","npm":"@cyanheads/gnomad-genetics-mcp-server","github":"https://github.com/cyanheads/gnomad-genetics-mcp-server","version":"0.4.1","requiredEnvVars":[],"prefix":"gnomad_","canvas":true,"mirror":false,"composesWith":["clinicaltrialsgov-mcp-server","ensembl-mcp-server","openfda-mcp-server","pubmed-mcp-server","uniprot-mcp-server"],"shade":1,"tools":[339,340,341,342,343,344,345],"harvested":true},{"name":"grantsgov-mcp-server","description":"Search Grants.gov federal funding opportunities, read full records (eligibility, awards, deadlines, attachments), and decode filter codes via MCP. STDIO or Streamable HTTP.","category":"government","endpoint":"https://grantsgov.caseyjhand.com/mcp","npm":"@cyanheads/grantsgov-mcp-server","github":"https://github.com/cyanheads/grantsgov-mcp-server","version":"0.1.3","requiredEnvVars":[],"prefix":"grantsgov_","canvas":false,"mirror":false,"composesWith":["federal-regulations-mcp-server","nonprofit-explorer-mcp-server","usaspending-mcp-server"],"shade":0.7917,"tools":[346,347,348],"harvested":true},{"name":"gutenberg-mcp-server","description":"Search, browse, and read 78,000+ public-domain books from Project Gutenberg with full plain-text retrieval and offset/limit chunking via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://gutenberg.caseyjhand.com/mcp","npm":"@cyanheads/gutenberg-mcp-server","github":"https://github.com/cyanheads/gutenberg-mcp-server","version":"0.2.0","requiredEnvVars":[],"prefix":"gutenberg_","canvas":false,"mirror":true,"composesWith":["libofcongress-mcp-server","openlibrary-mcp-server","wikidata-mcp-server","wikipedia-mcp-server"],"shade":0,"tools":[349,350,351,352],"harvested":true},{"name":"hn-mcp-server","description":"Browse Hacker News feeds, threads, and user profiles with full-text search via MCP. STDIO or Streamable HTTP.","category":"utility","endpoint":"https://hn.caseyjhand.com/mcp","npm":"@cyanheads/hn-mcp-server","github":"https://github.com/cyanheads/hn-mcp-server","version":"0.5.22","requiredEnvVars":[],"prefix":"hn_","canvas":false,"mirror":false,"composesWith":[],"shade":0.7143,"tools":[353,354,355,356],"harvested":true},{"name":"iana-registries-mcp-server","description":"Look up IANA ports, media types, HTTP status codes and fields, URI schemes, enterprise numbers, and BCP 47 language tags; check RFC status; search and read any IANA registry via MCP. STDIO or Streamable HTTP.","category":"utility","endpoint":"https://iana-registries.caseyjhand.com/mcp","npm":"@cyanheads/iana-registries-mcp-server","github":"https://github.com/cyanheads/iana-registries-mcp-server","version":"0.2.1","requiredEnvVars":[],"prefix":"iana_","canvas":false,"mirror":false,"composesWith":["browser-compat-mcp-server","nist-nvd-mcp-server","reference-data-mcp-server"],"shade":0.1429,"tools":[357,358,359,360,361,362,363,364,365,366],"harvested":true},{"name":"ilostat-mcp-server","description":"Search ILOSTAT labour indicators, query and compare series, build country profiles, run SQL via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://ilostat.caseyjhand.com/mcp","npm":"@cyanheads/ilostat-mcp-server","github":"https://github.com/cyanheads/ilostat-mcp-server","version":"0.2.0","requiredEnvVars":[],"prefix":"ilostat_","canvas":true,"mirror":false,"composesWith":["bls-labor-mcp-server","eurostat-mcp-server","faostat-mcp-server","imf-mcp-server","oecd-mcp-server","worldbank-mcp-server"],"shade":0.9216,"tools":[367,368,369,370,371,372,373,374],"harvested":true},{"name":"imf-mcp-server","description":"Query IMF SDMX 3.0 macroeconomic data — hundreds of dataflows across 190 countries, WEO projections, BOP, CPI, exchange rates, and national accounts via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://imf.caseyjhand.com/mcp","npm":"@cyanheads/imf-mcp-server","github":"https://github.com/cyanheads/imf-mcp-server","version":"0.4.4","requiredEnvVars":[],"prefix":"imf_","canvas":true,"mirror":false,"composesWith":["bls-labor-mcp-server","eurostat-mcp-server","treasury-fiscaldata-mcp-server","worldbank-mcp-server"],"shade":0.9608,"tools":[375,376,377,378,379],"harvested":true},{"name":"inaturalist-mcp-server","description":"Search wildlife sightings, read identification threads, rank species by area, chart phenology, and find look-alike taxa from iNaturalist via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://inaturalist.caseyjhand.com/mcp","npm":"@cyanheads/inaturalist-mcp-server","github":"https://github.com/cyanheads/inaturalist-mcp-server","version":"0.2.2","requiredEnvVars":[],"prefix":"inaturalist_","canvas":false,"mirror":false,"composesWith":["gbif-biodiversity-mcp-server","openstreetmap-mcp-server"],"shade":0.4324,"tools":[380,381,382,383,384,385,386,387,388,389],"harvested":true},{"name":"internet-archive-mcp-server","description":"Search the Wayback Machine and IA library (40M+ items), fetch archived snapshots, retrieve item metadata and full text via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://internet-archive.caseyjhand.com/mcp","npm":"@cyanheads/internet-archive-mcp-server","github":"https://github.com/cyanheads/internet-archive-mcp-server","version":"0.4.0","requiredEnvVars":[],"prefix":"ia_","canvas":false,"mirror":false,"composesWith":["gdelt-mcp-server","libofcongress-mcp-server","openlibrary-mcp-server","wikipedia-mcp-server"],"shade":0.0541,"tools":[390,391,392,393,394],"harvested":true},{"name":"interpro-mcp-server","description":"Search InterPro entries, map protein domains and functional sites, and find proteins by domain via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://interpro.caseyjhand.com/mcp","npm":"@cyanheads/interpro-mcp-server","github":"https://github.com/cyanheads/interpro-mcp-server","version":"0.1.1","requiredEnvVars":[],"prefix":"interpro_","canvas":false,"mirror":false,"composesWith":["ensembl-mcp-server","gnomad-genetics-mcp-server","protein-mcp-server","uniprot-mcp-server"],"shade":0.9189,"tools":[395,396,397,398,399,400],"harvested":true},{"name":"ioda-outages-mcp-server","description":"Investigate Internet outages with IODA events, alerts, and connectivity signals via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://ioda-outages.caseyjhand.com/mcp","npm":"@cyanheads/ioda-outages-mcp-server","github":"https://github.com/cyanheads/ioda-outages-mcp-server","version":"0.2.0","requiredEnvVars":[],"prefix":"ioda_","canvas":false,"mirror":false,"composesWith":["gdelt-mcp-server","reliefweb-mcp-server"],"shade":0.4314,"tools":[401,402,403,404,405,406],"harvested":true},{"name":"libofcongress-mcp-server","description":"Search LOC digital collections, browse Chronicling America newspapers with full OCR text, and look up LC Subject Headings via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://libofcongress.caseyjhand.com/mcp","npm":"@cyanheads/libofcongress-mcp-server","github":"https://github.com/cyanheads/libofcongress-mcp-server","version":"0.5.1","requiredEnvVars":[],"prefix":"libofcongress_","canvas":false,"mirror":false,"composesWith":[],"shade":0.1351,"tools":[407,408,409,410,411,412],"harvested":true},{"name":"medical-codes-mcp-server","description":"Decode, search, validate, and crosswalk US medical codes — ICD-10-CM, ICD-10-PCS, HCPCS Level II, RxNorm — over a bundled offline index via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://medical-codes.caseyjhand.com/mcp","npm":"@cyanheads/medical-codes-mcp-server","github":"https://github.com/cyanheads/medical-codes-mcp-server","version":"0.4.1","requiredEnvVars":[],"prefix":"medcode_","canvas":false,"mirror":false,"composesWith":["cdc-health-mcp-server","clinicaltrialsgov-mcp-server","openfda-mcp-server","pubmed-mcp-server"],"shade":0.8108,"tools":[413,414,415,416,417,418],"harvested":true},{"name":"met-museum-mcp-server","description":"Search the Metropolitan Museum of Art collection, browse it by department or update date, fetch full artwork records and open-access images via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://met-museum.caseyjhand.com/mcp","npm":"@cyanheads/met-museum-mcp-server","github":"https://github.com/cyanheads/met-museum-mcp-server","version":"0.9.0","requiredEnvVars":[],"prefix":"met_","canvas":false,"mirror":false,"composesWith":["smithsonian-mcp-server","wikidata-mcp-server","wikipedia-mcp-server"],"shade":0.027,"tools":[419,420,421,422],"harvested":true},{"name":"mitre-cwe-mcp-server","description":"Explore MITRE CWE weaknesses and CAPEC attack patterns, mitigations, code examples, and mappings via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://mitre-cwe.caseyjhand.com/mcp","npm":"@cyanheads/mitre-cwe-mcp-server","github":"https://github.com/cyanheads/mitre-cwe-mcp-server","version":"0.1.2","requiredEnvVars":[],"prefix":"cwe_","canvas":false,"mirror":false,"composesWith":["cisa-cybersecurity-mcp-server","nist-nvd-mcp-server","osv-advisory-mcp-server","pentest-mcp-server"],"shade":0.2353,"tools":[423,424,425,426,427,428,429],"harvested":true},{"name":"musicbrainz-mcp-server","description":"Search artists, releases, recordings, works, and labels; traverse relationships; resolve ISRC/ISWC/barcode; fetch cover art via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://musicbrainz.caseyjhand.com/mcp","npm":"@cyanheads/musicbrainz-mcp-server","github":"https://github.com/cyanheads/musicbrainz-mcp-server","version":"0.2.0","requiredEnvVars":[],"prefix":"musicbrainz_","canvas":false,"mirror":false,"composesWith":["wikidata-mcp-server","wikipedia-mcp-server"],"shade":0.3333,"tools":[430,431,432,433,434,435,436,437,438,439],"harvested":true},{"name":"nasa-power-mcp-server","description":"Query NASA POWER solar, wind, building, and agroclimatology data via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://nasa-power.caseyjhand.com/mcp","npm":"@cyanheads/nasa-power-mcp-server","github":"https://github.com/cyanheads/nasa-power-mcp-server","version":"0.2.0","requiredEnvVars":[],"prefix":"nasa_power_","canvas":true,"mirror":false,"composesWith":["eia-energy-mcp-server","faostat-mcp-server","open-meteo-mcp-server"],"shade":0.4902,"tools":[440,441,442,443,444,445,446,447],"harvested":true},{"name":"national-parks-mcp-server","description":"Plan US National Park Service trips — find parks, check alerts and closures, find campgrounds, browse things to do and events via the NPS Data API. STDIO or Streamable HTTP.","category":"government","endpoint":"https://national-parks.caseyjhand.com/mcp","npm":"@cyanheads/national-parks-mcp-server","github":"https://github.com/cyanheads/national-parks-mcp-server","version":"0.2.1","requiredEnvVars":["NPS_API_KEY"],"prefix":"nps_","canvas":false,"mirror":false,"composesWith":["nws-weather-mcp-server","open-meteo-mcp-server","openstreetmap-mcp-server","wikipedia-mcp-server"],"shade":0.7083,"tools":[448,449,450,451,452,453],"harvested":true},{"name":"nhtsa-vehicle-safety-mcp-server","description":"Decode VINs, search recalls, complaints, crash ratings, and investigations via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://nhtsa.caseyjhand.com/mcp","npm":"@cyanheads/nhtsa-vehicle-safety-mcp-server","github":"https://github.com/cyanheads/nhtsa-vehicle-safety-mcp-server","version":"0.10.0","requiredEnvVars":[],"prefix":"nhtsa_","canvas":false,"mirror":false,"composesWith":[],"shade":0.2745,"tools":[454,455,456,457,458,459,460],"harvested":true},{"name":"nist-nvd-mcp-server","description":"Search and audit CVEs by keyword, severity, CWE, CISA KEV status, and CPE via the NIST National Vulnerability Database. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://nist-nvd.caseyjhand.com/mcp","npm":"@cyanheads/nist-nvd-mcp-server","github":"https://github.com/cyanheads/nist-nvd-mcp-server","version":"0.3.2","requiredEnvVars":[],"prefix":"nvd_","canvas":false,"mirror":false,"composesWith":[],"shade":0.1373,"tools":[461,462,463,464,465],"harvested":true},{"name":"noaa-climate-mcp-server","description":"Search NOAA climate stations and datasets, fetch historical weather observations via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://noaa-climate.caseyjhand.com/mcp","npm":"@cyanheads/noaa-climate-mcp-server","github":"https://github.com/cyanheads/noaa-climate-mcp-server","version":"0.7.0","requiredEnvVars":["NOAA_CDO_TOKEN"],"prefix":"noaa_climate_","canvas":false,"mirror":false,"composesWith":[],"shade":0.5294,"tools":[466,467,468,469,470,471,472,473,474,475],"harvested":true},{"name":"noaa-marine-mcp-server","description":"Find NOAA tide stations and NDBC buoys, fetch tide predictions, water levels, tidal currents, and live buoy conditions via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://noaa-marine.caseyjhand.com/mcp","npm":"@cyanheads/noaa-marine-mcp-server","github":"https://github.com/cyanheads/noaa-marine-mcp-server","version":"0.6.1","requiredEnvVars":[],"prefix":"noaa_marine_","canvas":false,"mirror":false,"composesWith":["earthquake-mcp-server","nws-weather-mcp-server","open-meteo-mcp-server","wsdot-mcp-server"],"shade":0.0784,"tools":[476,477,478,479,480,481,482,483],"harvested":true},{"name":"noaa-spaceweather-mcp-server","description":"Query NOAA SWPC space weather: geomagnetic storm scales, Kp index, aurora forecasts, solar wind, solar activity, and alerts via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://noaa-spaceweather.caseyjhand.com/mcp","npm":"@cyanheads/noaa-spaceweather-mcp-server","github":"https://github.com/cyanheads/noaa-spaceweather-mcp-server","version":"0.3.2","requiredEnvVars":[],"prefix":"noaa_spaceweather_","canvas":false,"mirror":false,"composesWith":["earthquake-mcp-server","nws-weather-mcp-server"],"shade":0,"tools":[484,485,486,487,488,489],"harvested":true},{"name":"nonprofit-explorer-mcp-server","description":"Search and explore 1.8M+ US nonprofits, fetch Form 990 financials, and access IRS filing history via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://nonprofit-explorer.caseyjhand.com/mcp","npm":"@cyanheads/nonprofit-explorer-mcp-server","github":"https://github.com/cyanheads/nonprofit-explorer-mcp-server","version":"0.1.10","requiredEnvVars":[],"prefix":"nonprofit_","canvas":false,"mirror":false,"composesWith":["openfec-mcp-server","secedgar-mcp-server","usaspending-mcp-server"],"shade":0.5686,"tools":[490,491,492],"harvested":true},{"name":"npi-providers-mcp-server","description":"Search NPPES providers and resolve NUCC specialty codes via MCP over STDIO or Streamable HTTP.","category":"research","endpoint":"https://npi-providers.caseyjhand.com/mcp","npm":"@cyanheads/npi-providers-mcp-server","github":"https://github.com/cyanheads/npi-providers-mcp-server","version":"0.4.1","requiredEnvVars":[],"prefix":"npi_","canvas":false,"mirror":false,"composesWith":["cdc-health-mcp-server","clinicaltrialsgov-mcp-server","medical-codes-mcp-server","openfda-mcp-server"],"shade":0.8649,"tools":[493,494,495],"harvested":true},{"name":"nws-weather-mcp-server","description":"Get US weather forecasts, active alerts, and current observations via the National Weather Service API. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://nws.caseyjhand.com/mcp","npm":"@cyanheads/nws-weather-mcp-server","github":"https://github.com/cyanheads/nws-weather-mcp-server","version":"0.11.0","requiredEnvVars":[],"prefix":"nws_","canvas":false,"mirror":false,"composesWith":[],"shade":0.1176,"tools":[496,497,498,499,500,501,502,503,504,505],"harvested":true},{"name":"oecd-mcp-server","description":"Search, explore, and query 1,500+ OECD statistical datasets (national accounts, employment, trade, education, health) from the OECD SDMX API via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://oecd.caseyjhand.com/mcp","npm":"@cyanheads/oecd-mcp-server","github":"https://github.com/cyanheads/oecd-mcp-server","version":"0.4.0","requiredEnvVars":[],"prefix":"oecd_","canvas":true,"mirror":false,"composesWith":["eurostat-mcp-server","imf-mcp-server","un-comtrade-mcp-server","who-gho-mcp-server","worldbank-mcp-server"],"shade":1,"tools":[506,507,508,509,510,511,512],"harvested":true},{"name":"oeis-mcp-server","description":"Identify integer sequences by terms, search the OEIS, read formulas, programs, b-files, cross-refs via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://oeis.caseyjhand.com/mcp","npm":"@cyanheads/oeis-mcp-server","github":"https://github.com/cyanheads/oeis-mcp-server","version":"0.1.3","requiredEnvVars":[],"prefix":"oeis_","canvas":false,"mirror":false,"composesWith":["calculator-mcp-server","reference-data-mcp-server","wikipedia-mcp-server"],"shade":0.7297,"tools":[513,514,515,516,517,518],"harvested":true},{"name":"onebusaway-mcp-server","description":"Query stops, routes, real-time arrivals, vehicle positions, and schedules from OneBusAway transit APIs via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://onebusaway.caseyjhand.com/mcp","npm":"@cyanheads/onebusaway-mcp-server","github":"https://github.com/cyanheads/onebusaway-mcp-server","version":"0.2.1","requiredEnvVars":[],"prefix":"onebusaway_","canvas":false,"mirror":false,"composesWith":[],"shade":0.3529,"tools":[519,520,521,522,523,524,525,526,527,528,529,530,531,532,533,534],"harvested":true},{"name":"open-meteo-mcp-server","description":"Geocode places, fetch global weather forecasts, historical climate, marine conditions, air quality, and terrain elevation via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://open-meteo.caseyjhand.com/mcp","npm":"@cyanheads/open-meteo-mcp-server","github":"https://github.com/cyanheads/open-meteo-mcp-server","version":"0.4.1","requiredEnvVars":[],"prefix":"openmeteo_","canvas":true,"mirror":false,"composesWith":["gbif-biodiversity-mcp-server","noaa-climate-mcp-server","nws-weather-mcp-server","openstreetmap-mcp-server"],"shade":0.1961,"tools":[535,536,537,538,539,540,541,542,543,544,545],"harvested":true},{"name":"openalex-mcp-server","description":"Access the OpenAlex academic research catalog — 270M+ publications — via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://openalex.caseyjhand.com/mcp","npm":"@cyanheads/openalex-mcp-server","github":"https://github.com/cyanheads/openalex-mcp-server","version":"0.9.0","requiredEnvVars":[],"prefix":"openalex_","canvas":false,"mirror":false,"composesWith":[],"shade":0.1892,"tools":[546,547,548,549,550],"harvested":true},{"name":"openchargemap-mcp-server","description":"Find EV charging stations worldwide by location and connector from the global Open Charge Map registry — full station detail, reference-ID resolution, and community reliability check-ins via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://openchargemap.caseyjhand.com/mcp","npm":"@cyanheads/openchargemap-mcp-server","github":"https://github.com/cyanheads/openchargemap-mcp-server","version":"0.1.10","requiredEnvVars":["OPENCHARGEMAP_API_KEY"],"prefix":"openchargemap_","canvas":false,"mirror":false,"composesWith":["openstreetmap-mcp-server"],"shade":0.3922,"tools":[551,552,553,554],"harvested":true},{"name":"openfda-mcp-server","description":"Query FDA data on drugs, food, devices, and recalls via openFDA. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://openfda.caseyjhand.com/mcp","npm":"@cyanheads/openfda-mcp-server","github":"https://github.com/cyanheads/openfda-mcp-server","version":"0.8.1","requiredEnvVars":[],"prefix":"openfda_","canvas":true,"mirror":true,"composesWith":[],"shade":0.6078,"tools":[555,556,557,558,559,560,561,562,563,564,565,566,567,568],"harvested":true},{"name":"openfec-mcp-server","description":"Access FEC campaign finance data on candidates, money trails, and election filings via MCP. STDIO or Streamable HTTP.","category":"government","endpoint":"https://openfec.caseyjhand.com/mcp","npm":"@cyanheads/openfec-mcp-server","github":"https://github.com/cyanheads/openfec-mcp-server","version":"0.9.1","requiredEnvVars":[],"prefix":"openfec_","canvas":false,"mirror":false,"composesWith":[],"shade":0.625,"tools":[569,570,571,572,573,574,575,576,577,578,579,580],"harvested":true},{"name":"openfoodfacts-mcp-server","description":"Look up food products by barcode, search by keyword, tag, allergen, or nutrition filter, compare products side-by-side, and browse the canonical tag vocabulary via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://openfoodfacts.caseyjhand.com/mcp","npm":"@cyanheads/openfoodfacts-mcp-server","github":"https://github.com/cyanheads/openfoodfacts-mcp-server","version":"0.3.8","requiredEnvVars":[],"prefix":"off_","canvas":false,"mirror":false,"composesWith":["openfda-mcp-server","usda-mcp-server"],"shade":0.6667,"tools":[581,582,583,584],"harvested":true},{"name":"openlibrary-mcp-server","description":"Search books and authors, fetch editions, browse subjects, and resolve cover images from Open Library via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://openlibrary.caseyjhand.com/mcp","npm":"@cyanheads/openlibrary-mcp-server","github":"https://github.com/cyanheads/openlibrary-mcp-server","version":"0.3.1","requiredEnvVars":[],"prefix":"openlibrary_","canvas":false,"mirror":false,"composesWith":[],"shade":0.1622,"tools":[585,586,587,588,589,590,591,592,593,594],"harvested":true},{"name":"openstates-mcp-server","description":"Search bills, legislators, committees, and events across all 50 US states, DC, and 5 US territories via MCP. STDIO or Streamable HTTP.","category":"government","endpoint":"https://openstates.caseyjhand.com/mcp","npm":"@cyanheads/openstates-mcp-server","github":"https://github.com/cyanheads/openstates-mcp-server","version":"0.3.3","requiredEnvVars":["OPENSTATES_API_KEY"],"prefix":"openstates_","canvas":false,"mirror":false,"composesWith":[],"shade":0.3333,"tools":[595,596,597,598,599,600,601,602,603,604],"harvested":true},{"name":"openstreetmap-mcp-server","description":"Geocode, reverse geocode, and run Overpass spatial queries on OpenStreetMap data via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://openstreetmap.caseyjhand.com/mcp","npm":"@cyanheads/openstreetmap-mcp-server","github":"https://github.com/cyanheads/openstreetmap-mcp-server","version":"0.6.1","requiredEnvVars":[],"prefix":"openstreetmap_","canvas":false,"mirror":false,"composesWith":[],"shade":0.2941,"tools":[605,606,607,608,609,610],"harvested":true},{"name":"orcid-mcp-server","description":"Search and retrieve researcher profiles, works, affiliations, funding, and peer review records from the ORCID registry via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://orcid.caseyjhand.com/mcp","npm":"@cyanheads/orcid-mcp-server","github":"https://github.com/cyanheads/orcid-mcp-server","version":"0.3.3","requiredEnvVars":[],"prefix":"orcid_","canvas":false,"mirror":false,"composesWith":[],"shade":0.5676,"tools":[611,612,613,614,615,616,617,618,619],"harvested":true},{"name":"osv-advisory-mcp-server","description":"Query OSV.dev for package vulnerabilities, batch-audit dependency lists, and fetch full advisory records via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://osv-advisory.caseyjhand.com/mcp","npm":"@cyanheads/osv-advisory-mcp-server","github":"https://github.com/cyanheads/osv-advisory-mcp-server","version":"0.3.0","requiredEnvVars":[],"prefix":"osv_","canvas":false,"mirror":false,"composesWith":["nist-nvd-mcp-server"],"shade":0.2157,"tools":[620,621,622,623,624],"harvested":true},{"name":"ourairports-mcp-server","description":"Resolve airport codes (IATA/ICAO/GPS/local), search airports, find the nearest by coordinate, and look up runways, navaids, and radio frequencies from the bundled public-domain OurAirports dataset via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://ourairports.caseyjhand.com/mcp","npm":"@cyanheads/ourairports-mcp-server","github":"https://github.com/cyanheads/ourairports-mcp-server","version":"0.2.6","requiredEnvVars":[],"prefix":"ourairports_","canvas":false,"mirror":false,"composesWith":["aviation-weather-mcp-server","open-meteo-mcp-server","openstreetmap-mcp-server"],"shade":0.5098,"tools":[625,626,627,628,629,630],"harvested":true},{"name":"paleobiology-mcp-server","description":"Search fossil occurrences, resolve taxon fossil ranges, plot diversity through deep time, and look up the geologic time scale via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://paleobiology.caseyjhand.com/mcp","npm":"@cyanheads/paleobiology-mcp-server","github":"https://github.com/cyanheads/paleobiology-mcp-server","version":"0.4.0","requiredEnvVars":[],"prefix":"paleobiology_","canvas":true,"mirror":false,"composesWith":["gbif-biodiversity-mcp-server","gutenberg-mcp-server","openstreetmap-mcp-server","wikipedia-mcp-server"],"shade":0.6757,"tools":[631,632,633,634,635,636,637,638],"harvested":true},{"name":"pentest-mcp-server","description":"Offline methodology engine and payload workshop for authorized penetration testing, CTF, security research, and education via MCP. STDIO or Streamable HTTP.","category":"utility","endpoint":"https://pentest.caseyjhand.com/mcp","npm":"@cyanheads/pentest-mcp-server","github":"https://github.com/cyanheads/pentest-mcp-server","version":"0.2.0","requiredEnvVars":[],"prefix":"pentest_","canvas":false,"mirror":false,"composesWith":["nist-nvd-mcp-server"],"shade":1,"tools":[639,640,641,642,643,644,645],"harvested":true},{"name":"pharmacogenomics-guidelines-mcp-server","description":"Find pharmacogenomics guidelines, translate diplotypes, and retrieve prescribing recommendations via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://pharmacogenomics-guidelines.caseyjhand.com/mcp","npm":"@cyanheads/pharmacogenomics-guidelines-mcp-server","github":"https://github.com/cyanheads/pharmacogenomics-guidelines-mcp-server","version":"0.2.0","requiredEnvVars":[],"prefix":"pgx_","canvas":false,"mirror":false,"composesWith":["gnomad-genetics-mcp-server","medical-codes-mcp-server","openfda-mcp-server","pubmed-mcp-server"],"shade":0.973,"tools":[646,647,648,649,650,651],"harvested":true},{"name":"pokeapi-mcp-server","description":"Look up Pokémon, moves, abilities, items, natures, and type matchups from PokéAPI v2 via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://pokeapi.caseyjhand.com/mcp","npm":"@cyanheads/pokeapi-mcp-server","github":"https://github.com/cyanheads/pokeapi-mcp-server","version":"0.2.1","requiredEnvVars":[],"prefix":"pokeapi_","canvas":false,"mirror":false,"composesWith":["wikidata-mcp-server","wikipedia-mcp-server"],"shade":0.3725,"tools":[652,653,654,655,656,657,658],"harvested":true},{"name":"protein-mcp-server","description":"Federated protein structure & annotation across experimental (PDB) and predicted (AlphaFold) models via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://protein.caseyjhand.com/mcp","npm":"@cyanheads/protein-mcp-server","github":"https://github.com/cyanheads/protein-mcp-server","version":"0.8.7","requiredEnvVars":[],"prefix":"protein_","canvas":false,"mirror":false,"composesWith":[],"shade":0.8378,"tools":[659,660,661,662,663,664,665],"harvested":true},{"name":"pubchem-mcp-server","description":"Search the PubChem chemical database for compounds, properties, safety data, bioactivity, cross-references, and entity summaries via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://pubchem.caseyjhand.com/mcp","npm":"@cyanheads/pubchem-mcp-server","github":"https://github.com/cyanheads/pubchem-mcp-server","version":"0.7.0","requiredEnvVars":[],"prefix":"pubchem_","canvas":false,"mirror":false,"composesWith":[],"shade":0.7027,"tools":[666,667,668,669,670,671,672,673,674,675],"harvested":true},{"name":"pubmed-mcp-server","description":"Search PubMed/Europe PMC, fetch articles and full text (PMC/EPMC/Unpaywall), citations, MeSH terms via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://pubmed.caseyjhand.com/mcp","npm":"@cyanheads/pubmed-mcp-server","github":"https://github.com/cyanheads/pubmed-mcp-server","version":"2.10.22","requiredEnvVars":[],"prefix":"pubmed_","canvas":false,"mirror":false,"composesWith":[],"shade":0.4865,"tools":[676,677,678,679,680,681,682,683,684,685,686],"harvested":true},{"name":"reference-data-mcp-server","description":"Look up countries, timezones, periodic table elements, physical constants, units, HTTP status codes, and MIME types via MCP. STDIO or Streamable HTTP.","category":"utility","endpoint":"https://reference-data.caseyjhand.com/mcp","npm":"@cyanheads/reference-data-mcp-server","github":"https://github.com/cyanheads/reference-data-mcp-server","version":"0.1.17","requiredEnvVars":[],"prefix":"ref_","canvas":false,"mirror":false,"composesWith":[],"shade":0.2857,"tools":[687,688,689,690,691,692,693,694,695,696],"harvested":true},{"name":"reliefweb-mcp-server","description":"Search ReliefWeb humanitarian reports, disasters, jobs, training, and country profiles via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://reliefweb.caseyjhand.com/mcp","npm":"@cyanheads/reliefweb-mcp-server","github":"https://github.com/cyanheads/reliefweb-mcp-server","version":"0.2.3","requiredEnvVars":["RELIEFWEB_APP_NAME"],"prefix":"reliefweb_","canvas":false,"mirror":false,"composesWith":[],"shade":0.6471,"tools":[697,698,699,700,701,702,703,704,705,706,707],"harvested":true},{"name":"ris-austria-mcp-server","description":"Search Austrian consolidated federal & state law, court decisions, and the authentic Bundesgesetzblatt from the official RIS via MCP. Keyless. STDIO or Streamable HTTP.","category":"government","endpoint":"https://ris-austria.caseyjhand.com/mcp","npm":"@cyanheads/ris-austria-mcp-server","github":"https://github.com/cyanheads/ris-austria-mcp-server","version":"0.5.2","requiredEnvVars":[],"prefix":"ris_","canvas":false,"mirror":false,"composesWith":["courtlistener-mcp-server","eur-lex-mcp-server","wikidata-mcp-server"],"shade":0.0833,"tools":[708,709,710,711,712,713,714,715,716],"harvested":true},{"name":"sanctions-screening-mcp-server","description":"Screen names against the consolidated OFAC, EU, UK, and UN sanctions lists and resolve legal entities against GLEIF, fuzzy-matched offline over a local SQLite + FTS5 mirror. A screening aid, not a compliance determination.","category":"government","endpoint":"https://sanctions-screening.caseyjhand.com/mcp","npm":"@cyanheads/sanctions-screening-mcp-server","github":"https://github.com/cyanheads/sanctions-screening-mcp-server","version":"0.5.1","requiredEnvVars":[],"prefix":"sanctions_","canvas":false,"mirror":true,"composesWith":["nonprofit-explorer-mcp-server","openfec-mcp-server","secedgar-mcp-server","usaspending-mcp-server"],"shade":0.2083,"tools":[717,718,719,720,721,722,723],"harvested":true},{"name":"secedgar-mcp-server","description":"Query SEC EDGAR filings, XBRL financials, and company data via MCP. STDIO or Streamable HTTP.","category":"government","endpoint":"https://secedgar.caseyjhand.com/mcp","npm":"@cyanheads/secedgar-mcp-server","github":"https://github.com/cyanheads/secedgar-mcp-server","version":"0.15.13","requiredEnvVars":["EDGAR_USER_AGENT"],"prefix":"secedgar_","canvas":true,"mirror":true,"composesWith":[],"shade":0.4583,"tools":[724,725,726,727,728,729,730,731,732,733,734,735,736,737,738,739],"harvested":true},{"name":"smithsonian-mcp-server","description":"Search 14.5M Smithsonian Open Access objects across 20+ museums via MCP, and retrieve CC0 images for the 5.2M that carry openly-licensed media. STDIO or Streamable HTTP.","category":"research","endpoint":"https://smithsonian.caseyjhand.com/mcp","npm":"@cyanheads/smithsonian-mcp-server","github":"https://github.com/cyanheads/smithsonian-mcp-server","version":"0.3.9","requiredEnvVars":["SMITHSONIAN_API_KEY"],"prefix":"smithsonian_","canvas":false,"mirror":false,"composesWith":["wikidata-mcp-server","wikipedia-mcp-server"],"shade":0.1081,"tools":[740,741,742,743,744,745],"harvested":true},{"name":"socrata-mcp-server","description":"Search and query government open-data portals (Socrata SODA API) via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://socrata.caseyjhand.com/mcp","npm":"@cyanheads/socrata-mcp-server","github":"https://github.com/cyanheads/socrata-mcp-server","version":"0.3.0","requiredEnvVars":[],"prefix":"socrata_","canvas":true,"mirror":false,"composesWith":[],"shade":0.7255,"tools":[746,747,748,749,750,751],"harvested":true},{"name":"stackexchange-mcp-server","description":"Search Stack Exchange questions, fetch complete Q&A threads as clean markdown, browse tag FAQs, and look up user profiles via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://stackexchange.caseyjhand.com/mcp","npm":"@cyanheads/stackexchange-mcp-server","github":"https://github.com/cyanheads/stackexchange-mcp-server","version":"0.1.16","requiredEnvVars":[],"prefix":"stackexchange_","canvas":false,"mirror":false,"composesWith":["hn-mcp-server","nist-nvd-mcp-server"],"shade":0.0588,"tools":[752,753,754,755,756],"harvested":true},{"name":"toolkit-mcp-server","description":"Generate random IDs, QR codes, and hashes, encode and decode values, and geolocate IPs, plus gated network and system diagnostics, via MCP. STDIO or Streamable HTTP.","category":"utility","endpoint":"https://toolkit.caseyjhand.com/mcp","npm":"@cyanheads/toolkit-mcp-server","github":"https://github.com/cyanheads/toolkit-mcp-server","version":"2.3.3","requiredEnvVars":[],"prefix":"toolkit_","canvas":false,"mirror":false,"composesWith":[],"shade":0.8571,"tools":[757,758,759,760,761],"harvested":true},{"name":"treasury-fiscaldata-mcp-server","description":"Query US Treasury national debt, interest rates, exchange rates, and fiscal datasets via MCP.","category":"government","endpoint":"https://treasury-fiscaldata.caseyjhand.com/mcp","npm":"@cyanheads/treasury-fiscaldata-mcp-server","github":"https://github.com/cyanheads/treasury-fiscaldata-mcp-server","version":"0.2.0","requiredEnvVars":[],"prefix":"treasury_","canvas":true,"mirror":false,"composesWith":["congressgov-mcp-server","secedgar-mcp-server","usaspending-mcp-server","worldbank-mcp-server"],"shade":0.5417,"tools":[762,763,764,765,766,767,768],"harvested":true},{"name":"tvmaze-mcp-server","description":"Search TVmaze shows and people, next episodes in your timezone, episode guides, daily schedules, and credits via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://tvmaze.caseyjhand.com/mcp","npm":"@cyanheads/tvmaze-mcp-server","github":"https://github.com/cyanheads/tvmaze-mcp-server","version":"0.3.0","requiredEnvVars":[],"prefix":"tvmaze_","canvas":false,"mirror":false,"composesWith":[],"shade":0.2549,"tools":[769,770,771,772,773,774,775,776],"harvested":true},{"name":"uk-legislation-mcp-server","description":"Search and read UK legislation at any date, resolve citations, list amendments, track changes via MCP. STDIO or Streamable HTTP.","category":"government","endpoint":"https://uk-legislation.caseyjhand.com/mcp","npm":"@cyanheads/uk-legislation-mcp-server","github":"https://github.com/cyanheads/uk-legislation-mcp-server","version":"0.1.2","requiredEnvVars":[],"prefix":"uklaw_","canvas":false,"mirror":false,"composesWith":["courtlistener-mcp-server","eur-lex-mcp-server","ris-austria-mcp-server"],"shade":0.0417,"tools":[777,778,779,780,781,782],"harvested":true},{"name":"uk-police-crime-mcp-server","description":"Search UK street-level crime, police outcomes, stop and search, and neighbourhood teams from data.police.uk: England, Wales and Northern Ireland forces, plus British Transport Police (Scotland's only coverage), via MCP. STDIO or Streamable HTTP.","category":"government","endpoint":"https://uk-police-crime.caseyjhand.com/mcp","npm":"@cyanheads/uk-police-crime-mcp-server","github":"https://github.com/cyanheads/uk-police-crime-mcp-server","version":"0.2.0","requiredEnvVars":[],"prefix":"ukcrime_","canvas":false,"mirror":false,"composesWith":["fbi-crime-mcp-server","openstreetmap-mcp-server","uk-legislation-mcp-server"],"shade":0.75,"tools":[783,784,785,786,787,788],"harvested":true},{"name":"un-comtrade-mcp-server","description":"Access UN Comtrade international merchandise and services trade statistics — country lookups, HS commodity search, bilateral trade flows, balances, rankings, and data availability — via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://un-comtrade.caseyjhand.com/mcp","npm":"@cyanheads/un-comtrade-mcp-server","github":"https://github.com/cyanheads/un-comtrade-mcp-server","version":"0.2.0","requiredEnvVars":[],"prefix":"comtrade_","canvas":false,"mirror":false,"composesWith":[],"shade":0.9412,"tools":[789,790,791,792,793,794,795,796,797],"harvested":true},{"name":"unesco-heritage-mcp-server","description":"Search UNESCO World Heritage sites, intangible heritage, biosphere reserves, and Global Geoparks via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://unesco-heritage.caseyjhand.com/mcp","npm":"@cyanheads/unesco-heritage-mcp-server","github":"https://github.com/cyanheads/unesco-heritage-mcp-server","version":"0.2.1","requiredEnvVars":[],"prefix":"unesco_","canvas":false,"mirror":false,"composesWith":["gbif-biodiversity-mcp-server","national-parks-mcp-server","openstreetmap-mcp-server","paleobiology-mcp-server","wikidata-mcp-server"],"shade":0.3784,"tools":[798,799,800,801,802,803,804,805,806],"harvested":true},{"name":"unhcr-refugees-mcp-server","description":"Query UNHCR refugee, IDP, and stateless populations, asylum decisions, returns, and resettlement via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://unhcr-refugees.caseyjhand.com/mcp","npm":"@cyanheads/unhcr-refugees-mcp-server","github":"https://github.com/cyanheads/unhcr-refugees-mcp-server","version":"0.2.0","requiredEnvVars":[],"prefix":"unhcr_","canvas":true,"mirror":false,"composesWith":["eurostat-mcp-server","reliefweb-mcp-server","who-gho-mcp-server","worldbank-mcp-server"],"shade":0.7843,"tools":[807,808,809,810,811,812,813,814],"harvested":true},{"name":"uniprot-mcp-server","description":"Search UniProtKB by protein function, fetch curated records, map IDs across databases, and pull reference proteomes, taxonomy, and sequences via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://uniprot.caseyjhand.com/mcp","npm":"@cyanheads/uniprot-mcp-server","github":"https://github.com/cyanheads/uniprot-mcp-server","version":"0.2.6","requiredEnvVars":[],"prefix":"uniprot_","canvas":false,"mirror":false,"composesWith":["chembl-mcp-server","ensembl-mcp-server","protein-mcp-server","pubchem-mcp-server","pubmed-mcp-server"],"shade":0.8919,"tools":[815,816,817,818,819,820],"harvested":true},{"name":"us-drought-monitor-mcp-server","description":"Query U.S. Drought Monitor severity, DSCI, population, and drought duration via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://us-drought-monitor.caseyjhand.com/mcp","npm":"@cyanheads/us-drought-monitor-mcp-server","github":"https://github.com/cyanheads/us-drought-monitor-mcp-server","version":"0.1.2","requiredEnvVars":[],"prefix":"drought_","canvas":true,"mirror":false,"composesWith":["fema-mcp-server","noaa-climate-mcp-server","nws-weather-mcp-server","usgs-water-mcp-server"],"shade":0.549,"tools":[821,822,823,824,825,826,827],"harvested":true},{"name":"usaspending-mcp-server","description":"Access US federal award, recipient, agency, and spending analytics data from USAspending.gov via MCP. STDIO or Streamable HTTP.","category":"government","endpoint":"https://usaspending.caseyjhand.com/mcp","npm":"@cyanheads/usaspending-mcp-server","github":"https://github.com/cyanheads/usaspending-mcp-server","version":"0.5.0","requiredEnvVars":[],"prefix":"usaspending_","canvas":false,"mirror":false,"composesWith":[],"shade":0.6667,"tools":[828,829,830,831,832,833,834,835,836,837,838,839,840,841,842,843,844,845],"harvested":true},{"name":"usda-mcp-server","description":"Search foods, compare nutrients, and look up the full USDA FoodData Central database via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://usda.caseyjhand.com/mcp","npm":"@cyanheads/usda-mcp-server","github":"https://github.com/cyanheads/usda-mcp-server","version":"0.1.12","requiredEnvVars":["USDA_FDC_API_KEY"],"prefix":"usda_","canvas":false,"mirror":false,"composesWith":["faostat-mcp-server","openfoodfacts-mcp-server","who-gho-mcp-server"],"shade":0.7451,"tools":[846,847,848,849,850],"harvested":true},{"name":"usgs-water-mcp-server","description":"Query real-time and historical water data from ~8,000 USGS stream gages and groundwater wells via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://usgs-water.caseyjhand.com/mcp","npm":"@cyanheads/usgs-water-mcp-server","github":"https://github.com/cyanheads/usgs-water-mcp-server","version":"0.4.0","requiredEnvVars":[],"prefix":"water_","canvas":true,"mirror":false,"composesWith":["earthquake-mcp-server","epa-mcp-server","noaa-climate-mcp-server","nws-weather-mcp-server","open-meteo-mcp-server"],"shade":0.3137,"tools":[851,852,853,854,855,856,857,858],"harvested":true},{"name":"who-gho-mcp-server","description":"Query WHO Global Health Observatory data — 3,059 indicators across 194 member states with country, region, year, and sex filters via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://who-gho.caseyjhand.com/mcp","npm":"@cyanheads/who-gho-mcp-server","github":"https://github.com/cyanheads/who-gho-mcp-server","version":"0.3.6","requiredEnvVars":[],"prefix":"who_","canvas":false,"mirror":false,"composesWith":[],"shade":0.8235,"tools":[859,860,861,862,863,864],"harvested":true},{"name":"wikidata-mcp-server","description":"Search and fetch Wikidata entities, execute SPARQL queries, and resolve external identifiers via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://wikidata.caseyjhand.com/mcp","npm":"@cyanheads/wikidata-mcp-server","github":"https://github.com/cyanheads/wikidata-mcp-server","version":"0.2.0","requiredEnvVars":[],"prefix":"wikidata_","canvas":false,"mirror":false,"composesWith":[],"shade":0.4595,"tools":[865,866,867,868,869,870,871],"harvested":true},{"name":"wikipedia-mcp-server","description":"Search Wikipedia articles, read summaries and full text, target sections, find nearby pages, and list language editions via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://wikipedia.caseyjhand.com/mcp","npm":"@cyanheads/wikipedia-mcp-server","github":"https://github.com/cyanheads/wikipedia-mcp-server","version":"0.2.6","requiredEnvVars":[],"prefix":"wikipedia_","canvas":false,"mirror":false,"composesWith":[],"shade":0.2973,"tools":[872,873,874,875,876,877],"harvested":true},{"name":"worldbank-mcp-server","description":"Query 29,500+ World Bank development indicators for 200+ countries across 60+ years via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://worldbank.caseyjhand.com/mcp","npm":"@cyanheads/worldbank-mcp-server","github":"https://github.com/cyanheads/worldbank-mcp-server","version":"0.5.4","requiredEnvVars":[],"prefix":"worldbank_","canvas":false,"mirror":false,"composesWith":[],"shade":0.902,"tools":[878,879,880,881,882,883,884,885,886],"harvested":true},{"name":"worms-marine-taxa-mcp-server","description":"Resolve WoRMS marine species names; fetch classifications, synonyms, distributions, traits, and IDs via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://worms-marine-taxa.caseyjhand.com/mcp","npm":"@cyanheads/worms-marine-taxa-mcp-server","github":"https://github.com/cyanheads/worms-marine-taxa-mcp-server","version":"0.1.2","requiredEnvVars":[],"prefix":"worms_","canvas":false,"mirror":false,"composesWith":["gbif-biodiversity-mcp-server"],"shade":0.6216,"tools":[887,888,889,890,891,892,893,894],"harvested":true},{"name":"wsdot-mcp-server","description":"Query WA highway conditions, ferry schedules, vessel locations, toll rates, border waits, and alerts via MCP. STDIO or Streamable HTTP.","category":"public-data","endpoint":"https://wsdot.caseyjhand.com/mcp","npm":"@cyanheads/wsdot-mcp-server","github":"https://github.com/cyanheads/wsdot-mcp-server","version":"0.4.1","requiredEnvVars":["WSDOT_ACCESS_CODE"],"prefix":"wsdot_","canvas":false,"mirror":false,"composesWith":[],"shade":0.0392,"tools":[895,896,897,898,899,900,901,902,903,904,905,906],"harvested":true},{"name":"zenodo-mcp-server","description":"Search and resolve Zenodo datasets, software, and publications by DOI; trace versions and funding, list files, and preview text files via MCP. STDIO or Streamable HTTP.","category":"research","endpoint":"https://zenodo.caseyjhand.com/mcp","npm":"@cyanheads/zenodo-mcp-server","github":"https://github.com/cyanheads/zenodo-mcp-server","version":"0.1.3","requiredEnvVars":[],"prefix":"zenodo_","canvas":false,"mirror":false,"composesWith":["arxiv-mcp-server","biorxiv-mcp-server","crossref-mcp-server","datacite-mcp-server","openalex-mcp-server","orcid-mcp-server","pubmed-mcp-server","wikidata-mcp-server"],"shade":0.3243,"tools":[907,908,909,910,911,912],"harvested":true}],"tools":[{"name":"artic_search_artworks","server":0,"verb":"search","cls":"search","resolver":false,"title":"Search artworks","description":"Search the Art Institute of Chicago collection by text and structured filters, ranked by relevance or sorted by date. Text matches all words across titles, artists, descriptions, provenance, and other catalog fields. Filters combine with AND. Results reach the first 1,000 matches; narrow with filters for more. Set limit to 0 with facets to get only counts. Use artic_lookup_vocabulary for filter values and artic_get_artworks for full records.","input":[{"n":"query","t":"string"},{"n":"artist","t":"string"},{"n":"artist_id","t":"integer"},{"n":"department","t":"string"},{"n":"artwork_type","t":"string"},{"n":"style","t":"string"},{"n":"subject","t":"string"},{"n":"classification","t":"string"},{"n":"material","t":"string"},{"n":"technique","t":"string"},{"n":"theme","t":"string"},{"n":"place_of_origin","t":"string"},{"n":"gallery","t":"string"},{"n":"year_from","t":"integer"},{"n":"year_to","t":"integer"},{"n":"public_domain_only","t":"boolean"},{"n":"on_view_only","t":"boolean"},{"n":"has_image","t":"boolean"},{"n":"facets","t":"array<enum(7)>"},{"n":"sort","t":"enum(3)"},{"n":"page","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"artworks","t":"array<object>"},{"n":"facets","t":"object"},{"n":"page","t":"number"},{"n":"has_more","t":"boolean"},{"n":"next_page","t":"number"},{"n":"sort_applied","t":"enum(4)"},{"n":"license_text","t":"string"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"artic_get_artworks","server":0,"verb":"get","cls":"get","resolver":false,"title":"Get artworks","description":"Fetch full Art Institute of Chicago records for the first 10 artworks by id, returning deferred_ids for the rest: description, provenance, exhibition and publication history, dimensions, inscriptions, credit line, categorization, gallery, image URLs with rights status, and related multimedia. Long histories are opt-in through sections. Ids come from artic_search_artworks, artic_search_exhibitions, or artic_search_artists.","input":[{"n":"ids","t":"array<integer>","r":true},{"n":"sections","t":"array<enum(5)>"},{"n":"include_related_media","t":"boolean"}],"output":[{"n":"artworks","t":"array<object>"},{"n":"missing_ids","t":"array<number>"},{"n":"deferred_ids","t":"array<number>"},{"n":"license_text","t":"string"},{"n":"description_attribution","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"artic_search_artists","server":0,"verb":"search","cls":"search","resolver":false,"title":"Search artists","description":"Find artists, cultures, and organizations in the Art Institute of Chicago collection by name, or fetch them by id. Each result carries life dates, agent type, alternate names, how many of the museum's artworks credit them, and up to three of their works, the museum's highlighted works first. Pass an id to artic_search_artworks as artist_id to browse all of their works.","input":[{"n":"query","t":"string"},{"n":"ids","t":"array<integer>"},{"n":"artists_only","t":"boolean"},{"n":"born_from","t":"integer"},{"n":"born_to","t":"integer"},{"n":"page","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"artists","t":"array<object>"},{"n":"missing_ids","t":"array<number>"},{"n":"page","t":"number"},{"n":"deferred_ids","t":"array<number>"},{"n":"has_more","t":"boolean"},{"n":"next_page","t":"number"},{"n":"artists_only_applied","t":"boolean"},{"n":"license_text","t":"string"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"artic_search_exhibitions","server":0,"verb":"search","cls":"search","resolver":false,"title":"Search exhibitions","description":"Search Art Institute of Chicago exhibitions by text, date, artwork_id, or artist_id. Relationship filters cover recorded museum links; an absent link does not prove an artwork or artist never appeared in a show. Results carry dates, gallery, summary, web page, and listed artworks. Pass artwork ids to artic_get_artworks for full records.","input":[{"n":"artwork_id","t":"integer"},{"n":"artist_id","t":"integer"},{"n":"query","t":"string"},{"n":"when","t":"enum(4)"},{"n":"date_from","t":"string"},{"n":"date_to","t":"string"},{"n":"sort","t":"enum(3)"},{"n":"page","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"exhibitions","t":"array<object>"},{"n":"when_applied","t":"enum(4)"},{"n":"sort_applied","t":"enum(3)"},{"n":"page","t":"number"},{"n":"has_more","t":"boolean"},{"n":"next_page","t":"number"},{"n":"license_text","t":"string"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"artic_search_audio_guide","server":0,"verb":"search","cls":"search","resolver":false,"title":"Search audio guide","description":"Search the Art Institute of Chicago's mobile audio-guide stops by text, matching stop titles and transcripts. Returns each stop's title, MP3 URL, and transcript text. Stops carry no artwork id, so match a stop to a work by its title; for a known artwork, artic_get_artworks related_media lists the recordings linked to it. Some stops are in Spanish, and titles are sometimes internal file names. This content is for noncommercial educational and personal use only: keep the copyright notice and cite the Art Institute of Chicago.","input":[{"n":"query","t":"string","r":true},{"n":"page","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"stops","t":"array<object>"},{"n":"page","t":"number"},{"n":"has_more","t":"boolean"},{"n":"next_page","t":"number"},{"n":"license_text","t":"string"},{"n":"source_citation","t":"string"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"artic_lookup_vocabulary","server":0,"verb":"lookup","cls":"get","resolver":false,"title":"Look up collection vocabulary","description":"List the values of an Art Institute of Chicago collection vocabulary with how many artworks carry each, most common first, optionally narrowed by a substring. Each value passes to the artic_search_artworks filter of the same name exactly as listed (case is ignored). Counts here span the whole collection; for counts within a filtered set of artworks, request facets from artic_search_artworks.","input":[{"n":"vocabulary","t":"enum(10)","r":true},{"n":"contains","t":"string"},{"n":"public_domain_only","t":"boolean"},{"n":"limit","t":"integer"}],"output":[{"n":"vocabulary","t":"enum(10)"},{"n":"filter_param","t":"enum(10)"},{"n":"values","t":"array<object>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"arxiv_search_papers","server":1,"verb":"search","cls":"search","resolver":false,"title":"Arxiv Search Papers","description":"Search arXiv papers by query with category and sort filters. Returns paper metadata including title, authors, abstract, categories, and links.","input":[{"n":"query","t":"string","r":true},{"n":"category","t":"string"},{"n":"max_results","t":"integer"},{"n":"sort_by","t":"enum(3)"},{"n":"sort_order","t":"enum(2)"},{"n":"start","t":"integer"},{"n":"submitted_from","t":"string"},{"n":"submitted_to","t":"string"}],"output":[{"n":"papers","t":"array<object>"},{"n":"effectiveQuery","t":"string"},{"n":"totalFound","t":"number"},{"n":"totalFoundIsLowerBound","t":"const"},{"n":"pageStart","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"arxiv_get_metadata","server":1,"verb":"get","cls":"get","resolver":false,"title":"Arxiv Get Metadata","description":"Get full metadata for one or more arXiv papers by ID. Use when you have known IDs from citations, prior search results, or memory. Looks up 10 IDs per call; any further IDs come back in remaining_ids for the next call.","input":[{"n":"paper_ids","t":"array<string>","r":true}],"output":[{"n":"papers","t":"array<object>"},{"n":"totalSucceeded","t":"integer"},{"n":"not_found","t":"array<object>"},{"n":"remaining_ids","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"arxiv_read_paper","server":1,"verb":"read","cls":"get","resolver":false,"title":"Arxiv Read Paper","description":"Fetch the full text of an arXiv paper. Tries arxiv.org/html first, falls back to ar5iv.labs.arxiv.org, and falls back again to text extracted from the PDF when neither has an HTML render — check the source field to know which one answered. Page through long papers with start and max_characters, or pass max_characters null to get the entire body in one call. To read one section, take the outline from the first page (start 0) and pass an entry's start.","input":[{"n":"paper_id","t":"string","r":true},{"n":"max_characters","t":"integer"},{"n":"start","t":"integer"}],"output":[{"n":"paper_id","t":"string"},{"n":"title","t":"string"},{"n":"content","t":"string"},{"n":"source","t":"enum(3)"},{"n":"truncated","t":"boolean"},{"n":"start","t":"number"},{"n":"total_characters","t":"number"},{"n":"body_characters","t":"number"},{"n":"pdf_url","t":"string"},{"n":"abstract_url","t":"string"},{"n":"revision_unconfirmed","t":"const"},{"n":"outline","t":"array<object>"},{"n":"outline_continues_at","t":"integer"},{"n":"outline_omitted_levels","t":"array<integer>"},{"n":"error","t":"object"}]},{"name":"arxiv_list_categories","server":1,"verb":"list","cls":"list","resolver":false,"title":"Arxiv List Categories","description":"List arXiv category codes and names. Useful for discovering valid category filters for arxiv_search_papers. Lists subject classes only; arxiv_search_papers also accepts a bare archive code (the part before the dot, e.g. \"astro-ph\" or \"cs\") to search a whole archive at once.","input":[{"n":"group","t":"enum(8)"}],"output":[{"n":"categories","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"astronomy_get_sky_position","server":2,"verb":"get","cls":"get","resolver":false,"title":"astronomy-mcp-server: get sky position","description":"Compute the apparent topocentric position of one solar-system body (sun, moon, mercury through neptune, pluto) or a named bright star for an observer location and instant. Returns equatorial (RA/Dec), refraction-corrected horizontal (altitude/azimuth), and ecliptic coordinates, plus distance, apparent magnitude, angular diameter, phase angle, illuminated fraction, angular distance from the Sun, and the constellation it falls in. For a solar-system body it also returns that body card — classification, mean radius, naked-eye visibility — the same values served at astronomy://body/{body}, so a client without resource support does not need a second surface to reach them; a catalog star has no card and the field is absent. Positions are parallax- and aberration-corrected for the given observer; default elevation is 0 m and the default time is now. Supply `star` (e.g. \"Sirius\", \"Polaris\") instead of `body` to target a catalog star; `body` is ignored when `star` is set. Pass an IANA `timezone` to also receive the observer-local time. This server does not geocode — resolve a place name to latitude/longitude upstream first.","input":[{"n":"body","t":"enum(10)"},{"n":"star","t":"string"},{"n":"latitude","t":"number","r":true},{"n":"longitude","t":"number","r":true},{"n":"elevation","t":"number"},{"n":"time","t":"string"},{"n":"timezone","t":"string"}],"output":[{"n":"body","t":"string"},{"n":"body_metadata","t":"object"},{"n":"time_utc","t":"string"},{"n":"time_local","t":"string"},{"n":"equatorial","t":"object"},{"n":"horizontal","t":"object"},{"n":"ecliptic","t":"object"},{"n":"magnitude","t":"number"},{"n":"angular_diameter_arcsec","t":"number"},{"n":"phase_angle_degrees","t":"number"},{"n":"illuminated_fraction","t":"number"},{"n":"sun_elongation_degrees","t":"number"},{"n":"constellation","t":"object"},{"n":"error","t":"object"}]},{"name":"astronomy_get_rise_set","server":2,"verb":"get","cls":"get","resolver":false,"title":"astronomy-mcp-server: get rise/set times","description":"Compute rise, set, and culmination (transit) times for a body at an observer location, plus the maximum altitude at culmination. For the Sun, also returns the three twilight pairs (civil −6°, nautical −12°, astronomical −18°) so a single call answers \"when does the sun set and when is it truly dark.\" Each pair covers the night after the cycle's set (after its culmination when it has none) — dusk that evening, dawn the next morning — so the dawn listed beside a sunrise is the following day's. A depth a night never reaches (astronomical twilight around midsummer at mid-to-high latitudes) is null for that night. When `start` falls between sunset and sunrise, the first cycle opens at the next sunrise and `night_in_progress` carries the night already under way, dusk through dawn, including times before `start` that have passed; otherwise, for the dawn before a sunrise, read the previous cycle or start a day earlier. Searches forward from `start` (default today) and returns the next `count` cycles (default 1), up to 31 per call: a larger `count`, up to 366, returns the first 31 and a notice naming the exact `start` and `count` that continue the series, or saying no call can when the next cycle starts after 2100; a continuation started just past a sunset repeats in `night_in_progress` the night the last cycle of the previous call carried, while its cycles pick up without overlap. When the body is already above the horizon at `start`, the first cycle is the interval in progress: its `set` is the imminent one and its `rise` is null, since that rise precedes the search — so a set is never reported earlier than the rise beside it. Circumpolar or never-rises situations are reported as null rise/set fields with an explanatory note rather than an error — the fact is the answer. One cycle covers one day: a day the body neither rises nor sets on (polar night, midnight sun) is a cycle of its own, so consecutive cycles are consecutive days and each night appears in exactly one cycle. When `start` falls after the culmination of such a polar-night day, or after the last sunset before one, the first cycle is the rest of that day — rise, set, and transit null — carrying the twilight of that night, including times before `start` that have passed. Default elevation is 0 m; pass an IANA `timezone` for observer-local times. This server does not geocode — resolve coordinates upstream first.","input":[{"n":"body","t":"enum(10)","r":true},{"n":"latitude","t":"number","r":true},{"n":"longitude","t":"number","r":true},{"n":"elevation","t":"number"},{"n":"start","t":"string"},{"n":"count","t":"integer"},{"n":"timezone","t":"string"}],"output":[{"n":"body","t":"string"},{"n":"events","t":"array<object>"},{"n":"night_in_progress","t":"object"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"astronomy_get_moon_phase","server":2,"verb":"get","cls":"get","resolver":false,"title":"astronomy-mcp-server: get moon phase","description":"Report the Moon phase for an instant: illuminated fraction, phase name, synodic age in days since the new moon, phase longitude (the Moon–Sun ecliptic-longitude difference, 180° at full), and the next four quarter phases (new, first quarter, full, last quarter) with timestamps. Answers \"what is the moon phase tonight\" and \"when is the next full moon\" in one call without iteration. The time defaults to now; pass an IANA `timezone` to also receive observer-local timestamps. The phase is geocentric — no observer location is needed.","input":[{"n":"time","t":"string"},{"n":"timezone","t":"string"}],"output":[{"n":"time_utc","t":"string"},{"n":"time_local","t":"string"},{"n":"phase_longitude_degrees","t":"number"},{"n":"illuminated_fraction","t":"number"},{"n":"phase_name","t":"string"},{"n":"age_days","t":"number"},{"n":"next_quarters","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"astronomy_find_events","server":2,"verb":"find","cls":"search","resolver":false,"title":"astronomy-mcp-server: find sky events","description":"Search forward from a start time for the next occurrences of one sky-event class, selected by the `event` enum: solar_eclipse, lunar_eclipse, equinox, solstice, moon_quarter, opposition, conjunction, max_elongation, or perigee_apogee. Both eclipse classes take an optional observer (latitude and longitude together). solar_eclipse without one returns global eclipses — kind, peak time, obscuration, and for a total or annular eclipse the latitude/longitude where it is greatest; with one it returns only eclipses visible from that point, with local contact times, `local_visible`, and the Sun's altitude at each contact. lunar_eclipse returns geocentric contact times, the same instants everywhere on Earth; an observer adds `local_visible` and the Moon's altitude at each contact. Every other class is geocentric and ignores a location. The body-relative events (opposition, conjunction, max_elongation, perigee_apogee) require a `body`: opposition applies to the superior planets (mars through pluto), conjunction to any planet, max_elongation to mercury and venus, and perigee_apogee to the moon (perigee/apogee), earth, or a planet (perihelion/aphelion). conjunction with `body` alone is that planet's conjunction with the Sun. Add `body2` for a conjunction of two bodies — the Moon or a planet with another: the instant they share one ecliptic longitude seen from Earth's center, with their `separation_degrees` at that instant. That separation is not always their closest approach, since two planets can pass closer days or weeks away, and listings that time conjunctions by right ascension differ by hours, or by days for slow pairs. Returns the next `count` occurrences (default 1), up to 20 per call: a larger `count`, up to 200, returns the first 20 and a notice naming the exact `start` and `count` that continue the series. Searches stop at the end of 2100, the close of the supported span; when that leaves fewer than `count`, a notice says so. Start defaults to now; pass an IANA `timezone` for observer-local timestamps.","input":[{"n":"event","t":"enum(9)","r":true},{"n":"start","t":"string"},{"n":"count","t":"integer"},{"n":"body","t":"enum(11)"},{"n":"body2","t":"enum(9)"},{"n":"latitude","t":"number"},{"n":"longitude","t":"number"},{"n":"elevation","t":"number"},{"n":"timezone","t":"string"}],"output":[{"n":"events","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"astronomy_list_visible","server":2,"verb":"list","cls":"list","resolver":false,"title":"astronomy-mcp-server: list visible bodies","description":"The one-call \"what is up right now\" answer. For an observer location and instant, iterate every naked-eye solar-system body (and, with include_stars, the bundled bright stars), compute altitude and azimuth, keep those above the horizon, rank them brightest-and-highest first, and attach a plain-language visibility note to each, along with its angular distance from the Sun. The whole sky is gated by the Sun's altitude into daylight / civil / nautical / astronomical twilight / dark, returned alongside the list, and each note says when daylight, civil twilight, or the Sun's glare hides or dims that body. `time` is a single evaluation instant, not a window — for \"tonight\" pass a time after astronomical dusk (use astronomy_get_rise_set on the sun to find it). Default elevation 0 m; use min_altitude to skip objects grazing the horizon. This server does not geocode — resolve coordinates upstream first; pass an IANA timezone for observer-local times on each body.","input":[{"n":"latitude","t":"number","r":true},{"n":"longitude","t":"number","r":true},{"n":"elevation","t":"number"},{"n":"time","t":"string"},{"n":"timezone","t":"string"},{"n":"min_altitude","t":"number"},{"n":"include_stars","t":"boolean"}],"output":[{"n":"sky_condition","t":"enum(5)"},{"n":"sun_altitude_degrees","t":"number"},{"n":"total_count","t":"number"},{"n":"bodies","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"astronomy_get_ephemeris","server":2,"verb":"get","cls":"get","resolver":false,"title":"astronomy-mcp-server: get small-body ephemeris","description":"Fetch a time-series ephemeris for a small body (asteroid or comet) or spacecraft from JPL Horizons — RA/Dec, distance, and apparent magnitude over a span, optionally with observer-relative altitude/azimuth. This covers objects the in-process major-body set cannot. The designation is passed to Horizons verbatim, so it must be in a form Horizons resolves to a single record: a numbered asteroid takes a trailing-semicolon record lookup (e.g. \"433;\" for Eros, \"1;\" for Ceres), and a periodic comet takes the DES + closest-apparition form (e.g. \"DES=1P;CAP\" for Halley). Spacecraft take their negative SPK-ID. Anything else goes through the Horizons name search: a bare name matching nothing (e.g. \"433 Eros\") or several records (e.g. \"1P/Halley\") is rejected, but one matching a single object succeeds even when that object is not the one meant — \"Eros\" resolves to Kerberos, a moon of Pluto — so compare `target_name`, the object Horizons resolved, with the one intended. A major-body name matching several bodies (e.g. \"Mars\") is rejected with the ID number of each body it matched — pass one, such as \"499\" for the planet. `start` and `stop` are ISO 8601 UTC dates in the Gregorian calendar, extended before 1582, in years 0100 through 9999; `stop` must not be before `start`, and a `stop` equal to `start` returns the single row at that instant. `step` is a count plus a unit of m, h, d, mo, or y, such as \"1d\", \"1h\", or \"10m\". Supplying observer latitude/longitude yields topocentric coordinates and adds alt/az — supply both or neither. This is a gated, network-backed extension (JPL Horizons is keyless but rate-limited and best-effort); large spans truncate inline at 200 rows, and the truncation notice names the exact `start` to resume from — one step past the last row returned, because Horizons includes the start instant in its output — so re-calling from there continues the series without repeating a sample. Splitting the range into smaller adjacent spans works too; keep the same step either way so no sample is lost.","input":[{"n":"designation","t":"string","r":true},{"n":"latitude","t":"number"},{"n":"longitude","t":"number"},{"n":"elevation","t":"number"},{"n":"start","t":"string"},{"n":"stop","t":"string"},{"n":"step","t":"string"}],"output":[{"n":"designation","t":"string"},{"n":"target_name","t":"string"},{"n":"points","t":"array<object>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"dropped","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"astronomy_get_satellite_passes","server":2,"verb":"get","cls":"get","resolver":false,"title":"astronomy-mcp-server: get satellite passes","description":"Predict visible passes of a satellite (e.g. the ISS, NORAD 25544) over an observer in the next `days`. Identify the satellite by exactly one of `norad_id` or `name` — supplying both, or neither, is rejected. A few well-known common names resolve directly to their catalog numbers, ignoring case: ISS or International Space Station (25544), Hubble, Hubble Space Telescope, or HST (20580), and Tiangong, CSS, or Chinese Space Station (48274). Any other `name` is matched as a case-insensitive substring of CelesTrak's catalog names, so it resolves only when it picks out a single object: a broader query comes back with the matching objects and their catalog numbers to choose from. Either way the result echoes the query that resolved it as `resolved_from_name`. Fetches the object's current GP element set from CelesTrak, propagates it with SGP4 in-process, and returns each pass's rise, peak, and set times with azimuths and the peak elevation, plus the stretch of the pass visible to the naked eye: `visible_start_utc` through `visible_end_utc`, with the elevation and azimuth at each end. A pass is returned when that visible stretch — the satellite above the horizon and sunlit while the Sun is below −6° for the observer — reaches 10° elevation, wherever in the pass it falls. `sunlit` reports illumination at the peak instant, so it is false on a pass seen only before it enters Earth's shadow or after it leaves. Rise, set, and the visible-stretch edges are within 1 s of the true instants; the peak is the highest sample of a 30-second scan. Every returned pass rises in the requested window or in the 30 s before `start`: a pass up longer than that at `start` is omitted rather than reported with `start` as its rise, so back up `start` to see it, while a pass still up when the window ends is reported through its actual set. Searches at most 10 days per call: a larger `days`, up to 30, searches the first 10 and returns a notice naming the exact `start` and `days` that continue the search with no pass repeated or skipped, while that start stays within about a month of the element set's epoch. A `start` further than about a month from the element set's epoch is rejected as out of range on that distance alone, and an element set that will not propagate to a window inside that horizon is rejected as a reentry — so an empty `passes` means only that nothing was visible. CelesTrak publishes only current element sets, so in practice `start` must be within about a month of today. NORAD catalog numbers and catalog names are found at celestrak.org or heavens-above.com. This is a gated, network-backed extension (CelesTrak is keyless but rate-limited; element sets are cached briefly). Default elevation 0 m; pass an IANA timezone for observer-local pass times.","input":[{"n":"norad_id","t":"integer"},{"n":"name","t":"string"},{"n":"latitude","t":"number","r":true},{"n":"longitude","t":"number","r":true},{"n":"elevation","t":"number"},{"n":"days","t":"integer"},{"n":"start","t":"string"},{"n":"timezone","t":"string"}],"output":[{"n":"norad_id","t":"number"},{"n":"satellite_name","t":"string"},{"n":"resolved_from_name","t":"string"},{"n":"passes","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"aviation_find_stations","server":3,"verb":"find","cls":"search","resolver":false,"title":"Find Aviation Weather Stations","description":"Resolve an airport or weather reporting station by its identifier, or discover stations within a bounding box or US state. Returns all identifier variants (ICAO/IATA/FAA), coordinates, elevation, and available data types (METAR, TAF, SYNOP, etc.). A lookup matches the registry's own identifier, which for an airport is its 4-character ICAO ID (e.g., KSEA, KJFK, K0S9); buoys and mesonet sites carry identifiers of other shapes and resolve by those. At least one of station_ids, bbox, or state is required. limit bounds how many stations an area search returns without changing the area searched, and belongs to the bbox and state modes only.","input":[{"n":"station_ids","t":"array<string>"},{"n":"bbox","t":"object"},{"n":"state","t":"string"},{"n":"limit","t":"integer"}],"output":[{"n":"stations","t":"array<object>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"limited","t":"boolean"},{"n":"matched","t":"number"},{"n":"cap","t":"number"},{"n":"upstreamRows","t":"number"},{"n":"requested","t":"array<string>"},{"n":"returned","t":"array<string>"},{"n":"partial","t":"boolean"},{"n":"missing","t":"array<string>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"aviation_get_metar","server":3,"verb":"get","cls":"get","resolver":false,"title":"Get METAR Weather Observations","description":"Get current weather observations (METARs) for named airports, or survey every reporting station inside a geographic area. Returns decoded fields — wind direction/speed/gusts, visibility, ceiling with its kind (measured, or indefinite for vertical visibility into an obscuration), present weather, temperature, dewpoint, altimeter, cloud layers — plus the computed flight category (VFR/MVFR/IFR/LIFR) and the raw METAR string. Requires either station_ids (1–10 ICAO IDs, e.g., KSEA, KJFK, K0S9) or bbox (area survey) — not both. station_ids returns every observation inside the hours window; bbox returns the latest observation per station in the box, with flight_category keeping only the stations in the categories named (e.g., IFR and LIFR) and limit bounding how many stations come back. Use aviation_find_stations to resolve or verify an ICAO ID, or to discover nearby stations.","input":[{"n":"station_ids","t":"array<string>"},{"n":"bbox","t":"object"},{"n":"hours","t":"integer"},{"n":"limit","t":"integer"},{"n":"flight_category","t":"array<enum(4)>"}],"output":[{"n":"observations","t":"array<object>"},{"n":"requested","t":"array<string>"},{"n":"returned","t":"array<string>"},{"n":"partial","t":"boolean"},{"n":"missing","t":"array<string>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"surveyed","t":"number"},{"n":"limited","t":"boolean"},{"n":"matched","t":"number"},{"n":"cap","t":"number"},{"n":"upstreamRows","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"aviation_get_taf","server":3,"verb":"get","cls":"get","resolver":false,"title":"Get Terminal Aerodrome Forecast (TAF)","description":"Get the Terminal Aerodrome Forecast (TAF) for one or more airports. Returns each forecast period with valid times, surface wind, low-level wind shear, visibility, decoded weather conditions, cloud layers, and the vertical visibility into a forecast obscuration, plus the raw TAF string. TAFs cover the next 24–30 hours and are issued only for airports with scheduled commercial service; check data_types from aviation_find_stations to confirm TAF availability. Accepts 1–4 ICAO station IDs (e.g., KSEA, KJFK, K36U).","input":[{"n":"station_ids","t":"array<string>","r":true}],"output":[{"n":"forecasts","t":"array<object>"},{"n":"requested","t":"array<string>"},{"n":"returned","t":"array<string>"},{"n":"partial","t":"boolean"},{"n":"missing","t":"array<string>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"aviation_get_pireps","server":3,"verb":"get","cls":"get","resolver":false,"title":"Get Pilot Reports (PIREPs)","description":"Get recent Pilot Reports (PIREPs) near an airport or within a bounding box. Returns decoded turbulence, icing, and cloud reports with altitude, aircraft type, intensity, outside air temperature, wind aloft, flight weather, and the raw PIREP string. Requires either station_id (ICAO center point for radial search, e.g., KSEA) or bbox (area search) — not both. distance_nm belongs to the station_id search only, and altitude_min_ft must not exceed altitude_max_ft. min_intensity restricts the result to reports carrying a turbulence or icing layer at that intensity or above. limit bounds how many reports come back without changing what is searched, keeping the most recent. Coverage is US-centric; PIREPs are sparse and absence of reports does not imply smooth conditions.","input":[{"n":"station_id","t":"string"},{"n":"bbox","t":"object"},{"n":"distance_nm","t":"integer"},{"n":"hours","t":"integer"},{"n":"altitude_min_ft","t":"integer"},{"n":"altitude_max_ft","t":"integer"},{"n":"min_intensity","t":"enum(3)"},{"n":"limit","t":"integer"}],"output":[{"n":"pireps","t":"array<object>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"limited","t":"boolean"},{"n":"matched","t":"number"},{"n":"cap","t":"number"},{"n":"upstreamRows","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"aviation_get_advisories","server":3,"verb":"get","cls":"get","resolver":false,"title":"Get Active Aviation Advisories","description":"Get active domestic SIGMETs, international SIGMETs (including oceanic products), and Center Weather Advisories from the NWS Aviation Weather Center. Filter by advisory_type, hazard, or ordered bbox. Returns source coverage, decoded hazards/altitudes/movement, multipart geometry, and original bulletins; missing facts stay null. Independent source failures retain healthy results with partial coverage. AIRMET requests are rejected; this tool does not retrieve AIRMETs. Omit limit to return every available match; an explicit limit sorts results and discloses withheld matches.","input":[{"n":"advisory_type","t":"enum(5)"},{"n":"hazard","t":"enum(15)"},{"n":"bbox","t":"object"},{"n":"limit","t":"integer"}],"output":[{"n":"advisories","t":"array<object>"},{"n":"coverage","t":"array<object>"},{"n":"partial","t":"boolean"},{"n":"drawn","t":"number"},{"n":"matched","t":"number"},{"n":"returned","t":"number"},{"n":"unlocated","t":"number"},{"n":"total","t":"number"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"biorxiv_list_categories","server":4,"verb":"list","cls":"list","resolver":false,"title":"List bioRxiv/medRxiv Categories","description":"List valid subject category strings for bioRxiv and medRxiv — the categories the listing API actually filters on. Use these strings as the `category` filter in biorxiv_list_recent to narrow results to a specific field; case, and \"_\" or \"-\" in place of a space, do not matter there. Run this tool before filtering to get the current valid values.","input":[],"output":[{"n":"biorxiv","t":"array<string>"},{"n":"medrxiv","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"biorxiv_list_recent","server":4,"verb":"list","cls":"list","resolver":false,"title":"List Recent Preprints","description":"List preprints posted or revised within a date interval, optionally scoped to one server or a subject category. Returns 30 preprints per page (fixed by the API); pass `cursor` as an integer offset (0, 30, 60, …) to step through additional pages. Abstracts are omitted by default to keep the page small — pass include_abstract: true for the whole page (each row carries the latest-revision abstract of its preprint, whichever revision the row is), or call biorxiv_get_preprint (up to 10 DOIs per call) for a few. When server=\"both\" (default), per-server pagination state is returned separately — use each server's `cursor` field for independent advancement. One server failing under server=\"both\" does not abort the call: the other server's page is still returned and the failed one is named in `failed[]`, marking the result set as partial rather than complete. Every attempted server failing is a different case and does abort the call, with a retryable upstream_unavailable (or rate_limited) error — an empty page would otherwise be indistinguishable from an interval that genuinely holds nothing. Call biorxiv_list_categories for valid category strings; a server that answers a category filter with its unfiltered listing is left out with a notice, and invalid_category is raised when no server applied it. `funder` limits the listing to bioRxiv preprints funded by that organization, given its ROR ID; an ID api.biorxiv.org has no funder record for raises invalid_funder rather than returning an empty page.","input":[{"n":"start_date","t":"string","r":true},{"n":"end_date","t":"string","r":true},{"n":"server","t":"enum(3)"},{"n":"category","t":"string"},{"n":"funder","t":"string"},{"n":"cursor","t":"integer"},{"n":"include_abstract","t":"boolean"}],"output":[{"n":"preprints","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"failed","t":"array<object>"},{"n":"notice","t":"string"},{"n":"categoryNote","t":"string"},{"n":"error","t":"object"}]},{"name":"biorxiv_get_preprint","server":4,"verb":"get","cls":"get","resolver":false,"title":"Get Preprint by DOI","description":"Fetch full metadata, the abstract, all revision history, JATS XML full-text links, and published-journal DOI for one or more preprints by DOI. Each DOI returns all revisions in one response, with the abstract on the latest revision only — the API keeps one abstract per preprint. Each call looks up the first 10 distinct DOIs and returns the rest, never looked up, in unprocessed[] — pass that list as dois in another call to continue; a repeated DOI is looked up once and an unparseable entry is reported in failed[], so neither counts toward the 10. When server=\"both\" (default), each DOI is checked against both bioRxiv and medRxiv; the response includes which server the preprint was found on. Failed lookups are reported per-DOI in failed[] rather than aborting the batch, each carrying a reason (not_found, invalid_doi_format, upstream_unavailable, rate_limited) and a retryable flag; a rate_limited entry also carries the wait in seconds the origin asked for. preprints[], failed[], and unprocessed[] follow input order. DOIs must match the pattern 10.NNNN/…; a doi.org or article URL, a doi: label, and a trailing vN / .full suffix are stripped first, and results report the bare DOI.","input":[{"n":"dois","t":"array<string>","r":true},{"n":"server","t":"enum(3)"}],"output":[{"n":"preprints","t":"array<object>"},{"n":"failed","t":"array<object>"},{"n":"unprocessed","t":"array<string>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"biorxiv_get_published_version","server":4,"verb":"get","cls":"get","resolver":false,"title":"Get Published Journal Version","description":"Resolve a DOI to its preprint-to-journal crosswalk record — preprint DOI, journal DOI, journal name, published date, and corresponding author details — from either side: a preprint DOI (10.1101/ or 10.64898/) finds the journal article it was published as, and any other DOI is read as a journal article's and finds the bioRxiv or medRxiv preprint it was posted as. Use when biorxiv_get_preprint shows a `publishedJournalDoi` and you need the journal details, or when you hold a journal article and want its preprint. bioRxiv and medRxiv share their DOI prefixes, so server=\"both\" (the default) checks both in parallel and the response reports which server answered. When the crosswalk holds no record for a published preprint, the journal DOI still comes back from the preprint's own record, without journal name or date, and a notice says so. Returns a not-found error when no server holds the preprint, it lists no journal version, or no preprint is recorded for the journal DOI.","input":[{"n":"doi","t":"string","r":true},{"n":"server","t":"enum(3)"}],"output":[{"n":"preprintDoi","t":"string"},{"n":"server","t":"enum(2)"},{"n":"publishedDoi","t":"string"},{"n":"publishedJournal","t":"string"},{"n":"publishedDate","t":"string"},{"n":"preprintTitle","t":"string"},{"n":"preprintAuthors","t":"string"},{"n":"preprintCategory","t":"string"},{"n":"preprintDate","t":"string"},{"n":"preprintAbstract","t":"string"},{"n":"preprintAuthorCorresponding","t":"string"},{"n":"preprintAuthorCorrespondingInstitution","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"biorxiv_list_published_versions","server":4,"verb":"list","cls":"list","resolver":false,"title":"List Published Journal Versions","description":"List preprints that appeared as journal articles within a journal publication-date interval, each with its journal DOI, journal name, publication date, and preprint metadata — the same record biorxiv_get_published_version returns for one DOI. The dates filter on journal publication, not preprint posting, so most rows were posted months or years earlier; use biorxiv_list_recent for preprints posted in an interval. `publisher`, a journal DOI prefix such as 10.7554 for eLife, limits the listing to the bioRxiv preprints published under it; those rows carry no journal name, authors, or abstract, and a prefix api.biorxiv.org does not recognize raises invalid_publisher. Returns `limit` publications per server (default 25, up to 100 — the page api.biorxiv.org serves; a larger limit returns 100 and says so). Continue at the `nextCursor` a page returns rather than stepping `cursor` by a fixed amount; `limit: 100` walks an interval in the fewest calls. When server=\"both\" (default), per-server pagination state is returned separately, since one cursor can be past the end of one server and inside the other — to continue a single server, pass its `nextCursor` with `server` set to that server. One server failing under server=\"both\" does not abort the call: the other server's page is still returned and the failed one is named in `failed[]`. Every attempted server failing raises a retryable upstream_unavailable (or rate_limited) error rather than an empty page. Abstracts are omitted by default to keep the page small — pass include_abstract: true for the whole page. Every preprintDoi, 10.1101/ and 10.64898/ alike, is accepted by biorxiv_get_preprint and the other DOI tools.","input":[{"n":"start_date","t":"string","r":true},{"n":"end_date","t":"string","r":true},{"n":"server","t":"enum(3)"},{"n":"publisher","t":"string"},{"n":"cursor","t":"integer"},{"n":"limit","t":"integer"},{"n":"include_abstract","t":"boolean"}],"output":[{"n":"publications","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"failed","t":"array<object>"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"biorxiv_search_preprints","server":4,"verb":"search","cls":"search","resolver":false,"title":"Search Preprints by Keyword","description":"Search preprints by keyword and/or author using EuropePMC for relevance ranking, then enrich matching DOIs with full bioRxiv/medRxiv metadata. Provide a keyword query, an author name, or both — author maps to an EuropePMC AUTH: field query and is ANDed with the keyword query. Covers both servers by default. EuropePMC indexes new preprints within 1–2 days of posting; for preprints posted within the last day, prefer biorxiv_list_recent. Abstracts are included by default; include_abstract: false omits them from every result for a response about a third the size, and biorxiv_get_preprint returns the abstract for up to 10 DOIs per call. A EuropePMC rate limit (HTTP 429) fails the call with a retryable rate_limited error carrying the wait in seconds — a rate-limited metadata enrichment does not, and instead marks the affected record enrichment_error: \"rate_limited\".","input":[{"n":"query","t":"string"},{"n":"author","t":"string"},{"n":"server","t":"enum(3)"},{"n":"date_from","t":"string"},{"n":"date_to","t":"string"},{"n":"limit","t":"integer"},{"n":"include_abstract","t":"boolean"},{"n":"cursor_mark","t":"string"}],"output":[{"n":"preprints","t":"array<object>"},{"n":"partial_results","t":"boolean"},{"n":"totalCount","t":"number"},{"n":"nextCursorMark","t":"string"},{"n":"queryEcho","t":"object"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"biorxiv_get_fulltext","server":4,"verb":"get","cls":"get","resolver":false,"title":"Get Preprint Full Text","description":"Retrieve a preprint's full text as best-effort Markdown, extracted from its rendered HTML article page. Reads the latest version unless one is requested (the version input, or a vN suffix on the DOI), confirms it via the details API, then fetches and extracts the body — abstract, sections, inline citation labels, and the reference list. Table cells are not on the article page: each table appears as its caption, and omittedTables names it with the URL that serves its cells. bioRxiv and medRxiv share the 10.1101/ DOI prefix, so server=\"both\" (the default) resolves the DOI against both in parallel and the response reports which server answered. This is HTML-to-Markdown extraction, not structured JATS: section structure is approximate and not guaranteed. Long articles exceed a single response, so use offset and limit to page through them (the response reports totalChars, remainingChars, and hasMore); paging is cheap because the extracted article is cached per version for an hour after the first read, so only the first chunk pays for a fetch. Not every preprint has an extractable HTML page — some are PDF-only and some origins block programmatic access — in which case a fulltext_unavailable error routes you to biorxiv_get_preprint for the title, metadata, and current abstract. For a preprint that has been published in a journal, the journal's version may have richer full text elsewhere.","input":[{"n":"doi","t":"string","r":true},{"n":"version","t":"integer"},{"n":"server","t":"enum(3)"},{"n":"offset","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"doi","t":"string"},{"n":"server","t":"enum(2)"},{"n":"version","t":"string"},{"n":"title","t":"string"},{"n":"content","t":"string"},{"n":"contentFormat","t":"const"},{"n":"wordCount","t":"number"},{"n":"sourceUrl","t":"string"},{"n":"offset","t":"number"},{"n":"length","t":"number"},{"n":"totalChars","t":"number"},{"n":"remainingChars","t":"number"},{"n":"hasMore","t":"boolean"},{"n":"omittedTables","t":"array<object>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"bls_list_surveys","server":5,"verb":"list","cls":"list","resolver":false,"title":"List BLS Surveys","description":"List BLS survey programs with their abbreviation codes, full names, and metadata about calculation support and annual averages. Use to discover which survey covers a topic before calling bls_search_series; bls_search_series covers only the surveys in its offline index, and series in the others are fetched by SeriesID with bls_get_series. Optional category filter narrows results to prices, employment, wages, productivity, injuries, or time_use surveys.","input":[{"n":"category","t":"enum(6)"}],"output":[{"n":"surveys","t":"array<object>"},{"n":"total","t":"number"},{"n":"categoryFilter","t":"string"},{"n":"error","t":"object"}]},{"name":"bls_search_series","server":5,"verb":"search","cls":"search","resolver":false,"title":"Search BLS Series","description":"Search the BLS series catalog by natural language query, survey code, geographic area, or keywords to resolve cryptic SeriesIDs. Returns matching series with decoded components (survey, area, item, seasonal flag, and publication frequency for surveys that publish one series at several frequencies) and plain-language names, ranked by relevance and paged with limit and offset. Use this before bls_get_series when you have a concept but not a SeriesID. Operates offline against an index of the major surveys — no API quota consumed. Survey filter accepts the two-letter code of an indexed survey (CU, AP, CE, LN, LA, PC, WP, JT, EC, PR, MP, CW, CM, CI; OE only when the server sets BLS_CATALOG_INCLUDE_OES=true); series in other surveys are fetched by SeriesID with bls_get_series. Area filter accepts state names, MSA names, or FIPS area codes.","input":[{"n":"query","t":"string","r":true},{"n":"survey","t":"string"},{"n":"area","t":"string"},{"n":"seasonal_adjustment","t":"boolean"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"series","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"nextOffset","t":"number"},{"n":"capped","t":"boolean"},{"n":"catalogSize","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"surveyFilter","t":"string"},{"n":"areaFilter","t":"string"},{"n":"seasonalFilter","t":"boolean"},{"n":"limitApplied","t":"number"},{"n":"offsetApplied","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"bls_get_latest","server":5,"verb":"get","cls":"get","resolver":false,"title":"Get Latest BLS Observation","description":"Return the single most recent observation for one or more BLS series. Use for \"what is X right now\" questions — the current unemployment rate, the latest CPI reading, etc. Each series consumes one API query against the 500/day limit; for the current value of many series, bls_get_series with a 1-year window is more quota-efficient (one query for up to 50 series). Recommended limit: 10 series; maximum: 50.","input":[{"n":"series_ids","t":"array<string>","r":true}],"output":[{"n":"results","t":"array<object>"},{"n":"succeeded","t":"number"},{"n":"failed","t":"array<object>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"bls_get_series","server":5,"verb":"get","cls":"get","resolver":false,"title":"Get BLS Time-Series Data","description":"Fetch time-series data for 1–50 BLS series by SeriesID in a single API request (one query against the 500/day limit). Supports optional year range (up to 20 years per request) and BLS-computed period-over-period calculations (net change and percent change; a survey returns whichever it supports and silently omits the rest — CPI and PPI return percent change only, the inflation rate). BLS can publish a '-' missing-value sentinel; check observation.available before arithmetic. Set annual_average to add each year's annual-average row, which is that year's mean rather than an additional period. When the total observation count would exceed the inline context budget, results spill to a canvas dataframe and the response includes a dataset.name handle. Call bls_dataframe_describe with that name to inspect the dataframe schema, then use the name in bls_dataframe_query SQL. Use bls_search_series first if you need to resolve a concept to a SeriesID.","input":[{"n":"series_ids","t":"array<string>","r":true},{"n":"start_year","t":"integer"},{"n":"end_year","t":"integer"},{"n":"calculations","t":"boolean"},{"n":"annual_average","t":"boolean"}],"output":[{"n":"series","t":"array<object>"},{"n":"dataset","t":"object"},{"n":"spilled","t":"boolean"},{"n":"totalObservations","t":"number"},{"n":"availableObservations","t":"number"},{"n":"unavailableObservations","t":"number"},{"n":"seriesRequested","t":"number"},{"n":"startYearApplied","t":"number"},{"n":"endYearApplied","t":"number"},{"n":"calculationsApplied","t":"boolean"},{"n":"annualAverageApplied","t":"boolean"},{"n":"annualAverageRows","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"bls_dataframe_describe","server":5,"verb":"dataframe","cls":"query","resolver":false,"title":"Describe BLS Dataframes","description":"List canvas dataframes materialized by bls_get_series or by bls_dataframe_query register_as, with provenance (source tool, query parameters), TTL, row count, and column schema. Use before writing SQL to confirm column names and types. Lazy-sweeps expired tables before responding. Requires CANVAS_PROVIDER_TYPE=duckdb.","input":[{"n":"name","t":"string"}],"output":[{"n":"dataframes","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"bls_dataframe_query","server":5,"verb":"dataframe","cls":"query","resolver":false,"title":"Query BLS Dataframes","description":"Run a single-statement SELECT against the canvas dataframes registered by bls_get_series or by an earlier register_as. Read-only: writes, DDL, DROP, COPY, PRAGMA, ATTACH, and external-file table functions are rejected. System catalogs (information_schema, pg_catalog, sqlite_master, duckdb_*) are denied at the bridge layer — use bls_dataframe_describe to list available dataframes. Supports JOINs, aggregates, window functions, and CTEs. Optional register_as persists the result as a new dataframe with a fresh TTL for chained analysis. Canvas SQL operations consume zero BLS API quota. Requires CANVAS_PROVIDER_TYPE=duckdb.","input":[{"n":"sql","t":"string","r":true},{"n":"register_as","t":"string"},{"n":"preview","t":"integer"},{"n":"row_limit","t":"integer"}],"output":[{"n":"columns","t":"array<string>"},{"n":"row_count","t":"number"},{"n":"rows","t":"array<object>"},{"n":"registered_as","t":"string"},{"n":"expires_at","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"bsky_get_profile","server":6,"verb":"get","cls":"get","resolver":false,"title":"Get Bluesky Profile","description":"Fetch a Bluesky actor's public profile by handle (e.g. \"bsky.app\") or DID (e.g. \"did:plc:z72i7hdynmk6r22z27h6tvur\"). Returns displayName, handle, DID, bio, pronouns, website, ordered profile links, follower/following/post counts, avatar URL, moderation labels, pinned post AT-URI, and Bluesky verification — whether the account is verified or a trusted verifier, and who verified it. Use this as the first step to resolve a handle to a DID before calling tools that require a DID or AT-URI. Handles and DIDs are interchangeable as input, and \"@bsky.app\" or the account's bsky.app page (https://bsky.app/profile/bsky.app) work as-is.","input":[{"n":"actor","t":"string","r":true}],"output":[{"n":"did","t":"string"},{"n":"handle","t":"string"},{"n":"displayName","t":"string"},{"n":"description","t":"string"},{"n":"pronouns","t":"string"},{"n":"website","t":"string"},{"n":"links","t":"array<object>"},{"n":"avatar","t":"string"},{"n":"followersCount","t":"number"},{"n":"followsCount","t":"number"},{"n":"postsCount","t":"number"},{"n":"labels","t":"array<object>"},{"n":"indexedAt","t":"string"},{"n":"createdAt","t":"string"},{"n":"pinnedPostUri","t":"string"},{"n":"verification","t":"object"},{"n":"error","t":"object"}]},{"name":"bsky_search_actors","server":6,"verb":"search","cls":"search","resolver":false,"title":"Search Bluesky Actors","description":"Find Bluesky accounts by name or handle fragment. Returns ranked profiles with handle, DID, displayName, bio, pronouns when the account set them, and Bluesky verification status — which tells a verified account from a look-alike handle. Follower, following, and post counts and the website are not on this view — bsky_get_profile returns them for one account. Use before bsky_get_profile or bsky_get_author_feed when you have a name but not a confirmed handle. Supports cursor-based pagination for browsing beyond the first page of results.","input":[{"n":"query","t":"string","r":true},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"actors","t":"array<object>"},{"n":"cursor","t":"string"},{"n":"totalReturned","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"bsky_get_trending","server":6,"verb":"get","cls":"get","resolver":false,"title":"Get Bluesky Trending Topics","description":"Fetch the current real-time trending topics on Bluesky. Returns topics with display name, Bluesky's one-sentence summary of the story, post count, category (politics, sports, pop-culture, etc.), status, start time, and the representative accounts driving each topic — so \"who is talking about this\" needs no follow-up call. Entry point for \"what is Bluesky talking about right now\". Each trend is a feed: pass its feedUri to bsky_get_feed to read the trend's posts. Note: uses the app.bsky.unspecced.getTrends endpoint, which is not part of Bluesky's stable lexicon and may change without notice.","input":[{"n":"limit","t":"integer"}],"output":[{"n":"trends","t":"array<object>"},{"n":"totalReturned","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"bsky_search_feeds","server":6,"verb":"search","cls":"search","resolver":false,"title":"Search Bluesky Feeds","description":"Search metadata in the provider’s public feed catalog, without credentials. This searches feed names and descriptions, not post text, and does not enumerate every feed. Returns feeds in provider order with generator AT-URIs and creator identities; pass a feedUri to bsky_get_feed to read its posts. Uses app.bsky.unspecced.getPopularFeedGenerators, an unstable upstream API that may change or become unavailable. Continue with the returned opaque cursor and the same query.","input":[{"n":"query","t":"string","r":true},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"feeds","t":"array<object>"},{"n":"cursor","t":"string"},{"n":"totalReturned","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"bsky_get_feed","server":6,"verb":"get","cls":"get","resolver":false,"title":"Get Bluesky Feed","description":"Read the posts a Bluesky feed generator serves, in the order the feed ranks them. Accepts the feed's AT-URI (at://<handle-or-did>/app.bsky.feed.generator/<rkey>) or its bsky.app page (https://bsky.app/profile/<handle-or-did>/feed/<rkey>). Feeds come from the \"feedUri\" of each bsky_get_trending topic — the way to read what a trend is about — from bsky_search_feeds catalog results, from a quoted feed in a post (an embed with recordKind \"generator\"), or from a shared link; Discover is at://did:plc:z72i7hdynmk6r22z27h6tvur/app.bsky.feed.generator/whats-hot. Returns posts with full text, engagement counts, embeds, and AT-URIs for drilling into threads via bsky_get_post_thread. A post the feed pinned to its top carries \"pinned: true\"; a repost carries \"repostedBy\". Personalized feeds, which Bluesky serves only to a signed-in account, cannot be read here. Supports cursor pagination.","input":[{"n":"feed","t":"string","r":true},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"posts","t":"array<object>"},{"n":"cursor","t":"string"},{"n":"totalReturned","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"budgetCapped","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"bsky_get_author_feed","server":6,"verb":"get","cls":"get","resolver":false,"title":"Get Bluesky Author Feed","description":"Get a Bluesky user's recent feed ordered newest-first. Filter by post type: \"posts_with_replies\" (everything), \"posts_no_replies\" (excludes replies), \"posts_and_author_threads\" (posts the author started), \"posts_with_media\" (the actor's own posts with images or video — no link cards), or \"posts_with_video\" (the actor's own video posts). The first three include reposts, so items authored by other accounts appear alongside the actor's own writing — a \"repostedBy\" field marks those, and the \"author\" field always names who actually wrote the post; the two media filters return no reposts. Set include_pins to also get the post pinned to the profile, marked \"pinned\", first on the first page — in addition to \"limit\", and whether or not it matches the filter. Returns posts with full text, engagement counts, embeds, and AT-URIs for drilling into threads via bsky_get_post_thread. Because \"limit\" counts reposts too, a page from an account that reposts heavily holds far fewer of that account's own posts than the limit suggests; the enrichment fields report the split, so read \"originalPosts\" rather than the limit when you want the actor's own writing. Supports cursor pagination.","input":[{"n":"actor","t":"string","r":true},{"n":"filter","t":"enum(5)"},{"n":"include_pins","t":"boolean"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"posts","t":"array<object>"},{"n":"cursor","t":"string"},{"n":"totalReturned","t":"number"},{"n":"originalPosts","t":"number"},{"n":"reposts","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"budgetCapped","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"bsky_get_post_thread","server":6,"verb":"get","cls":"get","resolver":false,"title":"Get Bluesky Post Thread","description":"Fetch the conversation for a post by AT-URI — the parent chain upward and the reply tree downward. Enter the thread at any point and traverse the discussion. AT-URIs have the format \"at://<handle-or-did>/<collection>/<rkey>\" and are returned in the \"uri\" field of every post the other post-returning tools emit, such as bsky_get_feed and bsky_get_author_feed; a bsky.app post URL (https://bsky.app/profile/<handle-or-did>/post/<rkey>) works as-is. Returns the root post, parent chain, and nested replies with per-post author and engagement data. Replies only: quote posts are not part of a thread — read them with bsky_get_post_quotes. The response is often a fraction of the conversation: Bluesky holds replies back past a per-post limit and offers no way to page the rest, so a thread with thousands of replies commonly returns a few hundred. Any node returning fewer replies than its own replyCount carries \"truncated: true\" with \"unreturnedReplies\" and a \"truncationReason\" — \"depth\" means the reply tree ended there and fetching that node's AT-URI as its own thread continues below it, \"unavailable\" means no request closes the gap. Read \"unreturnedReplies\" as an upper bound on what is missing rather than a count of readable replies: Bluesky's counter also includes replies that have left the index, so a small difference often means nothing is left to fetch. The parent chain is disclosed the same way: when it stops at parent_height instead of at the start of the conversation, the topmost node carries \"parentChainTruncated: true\" and fetching its AT-URI as its own thread continues upward. The enrichment fields total the difference for the whole thread; check them before describing a conversation as complete or naming its first post. A thread that would pass this server's 48,000-byte response budget is cut between whole posts — the target kept first, then its parents nearest-first, then replies level by level — with \"budgetCapped: true\" and the cut marked where it happened: \"budgetOmittedReplyUris\" on the target and \"budgetOmittedReplies\" on a kept reply name the replies left out, \"budgetOmittedParents\" on the topmost parent the ancestors; fetching those AT-URIs as their own threads reads the rest. In the rendered text nothing is indented: a reply's author heading carries how far it sits below the top-level reply it descends from (\"### ↳2\"), and every post also names its own parent on a \"Reply to\" line.","input":[{"n":"uri","t":"string","r":true},{"n":"depth","t":"integer"},{"n":"parent_height","t":"integer"}],"output":[{"n":"thread","t":"object"},{"n":"threadgate","t":"object"},{"n":"totalReturned","t":"number"},{"n":"truncated","t":"boolean"},{"n":"parentChainTruncated","t":"boolean"},{"n":"unreturnedReplies","t":"number"},{"n":"budgetCapped","t":"boolean"},{"n":"budgetOmitted","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"bsky_get_post_quotes","server":6,"verb":"get","cls":"get","resolver":false,"title":"Get Bluesky Post Quotes","description":"Read the quote posts behind a Bluesky post's \"quoteCount\" — the posts that embed it with commentary of their own. Sort latest (default) is newest first; top is descending like count as ordered by Bluesky. On Bluesky this is where much of the reaction to a post lives; bsky_get_post_thread returns replies only. Accepts the post's AT-URI (at://<handle-or-did>/app.bsky.feed.post/<rkey>) from the \"uri\" field of any returned post, or its bsky.app URL (https://bsky.app/profile/<handle-or-did>/post/<rkey>); a handle costs one extra lookup. Returns each quote post with full text, author, engagement counts, and AT-URI. Each result's embed names the queried post by AT-URI and CID only — its text is not repeated on every result — and keeps any media the quoting post attached. \"quoteCount\" is an upper bound on what this returns: Bluesky's counter keeps quotes that have left the index. Supports cursor pagination.","input":[{"n":"uri","t":"string","r":true},{"n":"sort","t":"enum(2)"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"uri","t":"string"},{"n":"sort","t":"enum(2)"},{"n":"posts","t":"array<object>"},{"n":"cursor","t":"string"},{"n":"totalReturned","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"budgetCapped","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"bsky_get_follows","server":6,"verb":"get","cls":"get","resolver":false,"title":"Get Bluesky Social Graph","description":"Fetch the social graph edges for a Bluesky account — who follows them, or who they follow. Returns paginated actor profiles (handle, DID, displayName, bio, pronouns when set, and Bluesky verification status) plus a summary of the subject account. Follower, following, and post counts and the website are not on this view, for the listed accounts or the subject — bsky_get_profile returns them for one account. Accounts with large social graphs return only the first page; use cursor pagination to walk through the full list, or sort \"top\" to put the accounts Bluesky ranks most prominent first.","input":[{"n":"actor","t":"string","r":true},{"n":"direction","t":"enum(2)","r":true},{"n":"sort","t":"enum(2)"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"actors","t":"array<object>"},{"n":"subject","t":"object"},{"n":"cursor","t":"string"},{"n":"totalReturned","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"brapi_connect","server":7,"verb":"connect","cls":"act","resolver":false,"title":"Brapi Connect","description":"Open a connection to a BrAPI v2 server, authenticate, and return the full orientation envelope (server identity, capability profile, content summary, suggested next tools). Other BrAPI tools connect an alias the server has a URL configured for (a built-in or operator-configured alias, or `default` on a deployment with a default server) on first use; call this to connect any other server by `baseUrl`, to pass `auth`, or to re-point an alias. Supports multiple concurrent connections via named aliases. Credentials can be configured server-side and omitted from this call. When a request carries no MCP session on a deployment without per-user auth, aliases live in one namespace shared by every such caller: re-registering an alias re-points their later calls to it. Built-in known servers (callable with no `baseUrl` or `auth` — public BrAPI v2 endpoints): `bti-breedbase-demo`, `bti-cassava`, `bti-sweetpotato`. Operator-configured aliases on this deployment (credentials and/or baseUrl read from server env vars): `default`, `cassava`. Aliases are shortcuts only; any other BrAPI v2 server is reachable by passing `baseUrl` directly.","input":[{"n":"baseUrl","t":"string"},{"n":"auth","t":"object"},{"n":"alias","t":"string"}],"output":[{"n":"alias","t":"string"},{"n":"baseUrl","t":"string"},{"n":"server","t":"object"},{"n":"auth","t":"object"},{"n":"capabilities","t":"object"},{"n":"dialect","t":"object"},{"n":"content","t":"object"},{"n":"attribution","t":"object"},{"n":"nextToolSuggestions","t":"array<object>"},{"n":"notes","t":"array<string>"},{"n":"fetchedAt","t":"string"},{"n":"error","t":"object"}]},{"name":"brapi_build_phenotype_matrix","server":7,"verb":"build","cls":"analyze","resolver":false,"title":"Brapi Build Phenotype Matrix","description":"Pull observations across one or more studies and pivot them into a germplasm × trait matrix materialized as a canvas dataframe. Returns a dataframe handle (read it with brapi_dataframe_describe and brapi_dataframe_query) plus a summary of dimensions and aggregate method. Long-form output is suitable for downstream GROUP BY analysis by study, germplasm, or variable. A study whose pull fails is named in warnings and the rest still build the matrix; the call fails only when every study failed.","input":[{"n":"alias","t":"string"},{"n":"studies","t":"array<string>","r":true},{"n":"variables","t":"array<string>"},{"n":"germplasm","t":"array<string>"},{"n":"shape","t":"enum(2)"},{"n":"aggregate","t":"enum(4)"},{"n":"loadLimit","t":"integer"},{"n":"extraFilters","t":"object"}],"output":[{"n":"alias","t":"string"},{"n":"studies","t":"array<string>"},{"n":"coverage","t":"object"},{"n":"shape","t":"enum(2)"},{"n":"aggregate","t":"enum(4)"},{"n":"observationCount","t":"integer"},{"n":"germplasmCount","t":"integer"},{"n":"variableCount","t":"integer"},{"n":"variableLegend","t":"object"},{"n":"dataframe","t":"object"},{"n":"warnings","t":"array<string>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"brapi_server_info","server":7,"verb":"server","cls":"describe","resolver":false,"title":"Brapi Server Info","description":"Return the full orientation envelope for a BrAPI connection — server identity, capabilities, content counts, suggested finders, and notes. Pass forceRefresh to refetch the cached capability scan; pass an alias to read a non-default connection.","input":[{"n":"alias","t":"string"},{"n":"forceRefresh","t":"boolean"}],"output":[{"n":"alias","t":"string"},{"n":"baseUrl","t":"string"},{"n":"server","t":"object"},{"n":"auth","t":"object"},{"n":"capabilities","t":"object"},{"n":"dialect","t":"object"},{"n":"content","t":"object"},{"n":"attribution","t":"object"},{"n":"nextToolSuggestions","t":"array<object>"},{"n":"notes","t":"array<string>"},{"n":"fetchedAt","t":"string"},{"n":"error","t":"object"}]},{"name":"brapi_describe_filters","server":7,"verb":"describe","cls":"describe","resolver":false,"title":"Brapi Describe Filters","description":"List the valid filter names for a BrAPI endpoint (studies, germplasm, observations, variables, images, variants, locations) — companion lookup for the `extraFilters` passthrough on any `find_*` tool. Entries reflect the BrAPI v2.1 spec; individual servers may implement subsets.","input":[{"n":"endpoint","t":"enum(7)","r":true}],"output":[{"n":"endpoint","t":"string"},{"n":"filterCount","t":"integer"},{"n":"filters","t":"array<object>"},{"n":"specReference","t":"string"},{"n":"availableEndpoints","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"brapi_find_studies","server":7,"verb":"find","cls":"search","resolver":false,"title":"Brapi Find Studies","description":"Locate studies matching crop, trial type, season, location, or program. Enriches results with program/trial/location context in one call. results[] holds the leading matches up to loadLimit and a 24,000-byte budget; when it holds fewer rows than matched, the matched set is materialized as a dataframe — read it with brapi_dataframe_describe and brapi_dataframe_query (SQL).","input":[{"n":"alias","t":"string"},{"n":"crop","t":"string"},{"n":"trialTypes","t":"array<string>"},{"n":"seasons","t":"array<string>"},{"n":"locations","t":"array<string>"},{"n":"programs","t":"array<string>"},{"n":"trials","t":"array<string>"},{"n":"studyNames","t":"array<string>"},{"n":"active","t":"boolean"},{"n":"loadLimit","t":"integer"},{"n":"extraFilters","t":"object"}],"output":[{"n":"alias","t":"string"},{"n":"results","t":"array<object>"},{"n":"hasMore","t":"boolean"},{"n":"distributions","t":"object"},{"n":"dataframe","t":"object"},{"n":"totalCount","t":"integer"},{"n":"returnedCount","t":"integer"},{"n":"appliedFilters","t":"object"},{"n":"clientSideFilters","t":"object"},{"n":"refinementHint","t":"string"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"warnings","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"brapi_get_study","server":7,"verb":"get","cls":"get","resolver":false,"title":"Brapi Get Study","description":"Fetch a single study by DbId with its program, trial, and location records resolved where those lookups succeed. Response includes cheap observation/observation-unit/variable counts as drill-down signals.","input":[{"n":"studyDbId","t":"string","r":true},{"n":"alias","t":"string"}],"output":[{"n":"alias","t":"string"},{"n":"study","t":"object"},{"n":"program","t":"object"},{"n":"trial","t":"object"},{"n":"location","t":"object"},{"n":"observationCount","t":"integer"},{"n":"observationUnitCount","t":"integer"},{"n":"variableCount","t":"integer"},{"n":"warnings","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"brapi_find_germplasm","server":7,"verb":"find","cls":"search","resolver":false,"title":"Brapi Find Germplasm","description":"Find germplasm by name, synonym, accession number, PUI, crop, or free-text query. Matches across registered synonyms. results[] holds the leading matches up to loadLimit and a 24,000-byte budget; when it holds fewer rows than matched, the matched set is materialized as a dataframe — read it with brapi_dataframe_describe and brapi_dataframe_query (SQL) instead of paging row-by-row.","input":[{"n":"alias","t":"string"},{"n":"names","t":"array<string>"},{"n":"germplasmDbIds","t":"array<string>"},{"n":"germplasmPUIs","t":"array<string>"},{"n":"accessionNumbers","t":"array<string>"},{"n":"crops","t":"array<string>"},{"n":"synonyms","t":"array<string>"},{"n":"collections","t":"array<string>"},{"n":"genus","t":"string"},{"n":"species","t":"string"},{"n":"text","t":"string"},{"n":"loadLimit","t":"integer"},{"n":"extraFilters","t":"object"}],"output":[{"n":"alias","t":"string"},{"n":"results","t":"array<object>"},{"n":"hasMore","t":"boolean"},{"n":"distributions","t":"object"},{"n":"dataframe","t":"object"},{"n":"totalCount","t":"integer"},{"n":"returnedCount","t":"integer"},{"n":"appliedFilters","t":"object"},{"n":"refinementHint","t":"string"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"warnings","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"brapi_get_germplasm","server":7,"verb":"get","cls":"get","resolver":false,"title":"Brapi Get Germplasm","description":"Fetch a single germplasm by DbId with attributes and direct parents. Response companions report study count, direct parent count, and direct descendant count — signals for pedigree depth and observation coverage.","input":[{"n":"germplasmDbId","t":"string","r":true},{"n":"alias","t":"string"}],"output":[{"n":"alias","t":"string"},{"n":"germplasm","t":"object"},{"n":"parents","t":"array<object>"},{"n":"attributes","t":"array<object>"},{"n":"studyCount","t":"integer"},{"n":"directParentCount","t":"integer"},{"n":"directDescendantCount","t":"integer"},{"n":"warnings","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"brapi_walk_pedigree","server":7,"verb":"walk","cls":"analyze","resolver":false,"title":"Brapi Walk Pedigree","description":"Walk germplasm ancestry or descendancy as a deduplicated DAG with cycle detection and depth limits. leafCount counts graph terminals, confirmedLeafCount counts successfully verified leaves, and frontier records unresolved directions. Nodes and edges each fit loadLimit and a 24,000-byte preview budget; trimmed discovered graphs and already-fetched omitted relatives are staged for brapi_dataframe_describe and brapi_dataframe_query (SQL). Diagrams describe only the discovered graph, never unvisited relatives.","input":[{"n":"germplasmDbIds","t":"array<string>","r":true},{"n":"direction","t":"enum(3)"},{"n":"maxDepth","t":"integer"},{"n":"diagram","t":"enum(2)"},{"n":"loadLimit","t":"integer"},{"n":"alias","t":"string"}],"output":[{"n":"alias","t":"string"},{"n":"direction","t":"enum(3)"},{"n":"maxDepth","t":"integer"},{"n":"nodes","t":"array<object>"},{"n":"edges","t":"array<object>"},{"n":"depthReached","t":"integer"},{"n":"rootCount","t":"integer"},{"n":"leafCount","t":"integer"},{"n":"confirmedLeafCount","t":"integer"},{"n":"frontierCount","t":"integer"},{"n":"frontier","t":"array<object>"},{"n":"frontierDataframe","t":"object"},{"n":"knownOmittedRelativeCount","t":"integer"},{"n":"omittedRelativesDataframe","t":"object"},{"n":"cycleCount","t":"integer"},{"n":"deadEndCount","t":"integer"},{"n":"truncated","t":"boolean"},{"n":"warnings","t":"array<string>"},{"n":"diagram","t":"string"},{"n":"nodesDataframe","t":"object"},{"n":"edgesDataframe","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"brapi_germplasm_performance","server":7,"verb":"performance","cls":"analyze","resolver":false,"title":"Brapi Germplasm Performance","description":"Aggregate a single germplasm's observations across studies, returning per-variable statistics (n, mean, median, sd, min, max), contributing studies, seasons, and collection coverage. SGN/Breedbase uses advertised germplasm-scoped observation units with embedded measurements, including zeros. Other servers discover up to 200 studies before pulling per study. Pass studyDbIds to skip discovery and restrict collection to known studies. Per-study observation limits, page limits, failures, and incomplete scans appear in coverage and warnings. For the underlying matrix, use brapi_build_phenotype_matrix.","input":[{"n":"alias","t":"string"},{"n":"germplasmDbId","t":"string","r":true},{"n":"studyDbIds","t":"array<string>"},{"n":"variables","t":"array<string>"}],"output":[{"n":"alias","t":"string"},{"n":"germplasmDbId","t":"string"},{"n":"germplasmName","t":"string"},{"n":"studyCount","t":"integer"},{"n":"studyDbIds","t":"array<string>"},{"n":"coverage","t":"object"},{"n":"perVariable","t":"array<object>"},{"n":"warnings","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"brapi_find_variables","server":7,"verb":"find","cls":"search","resolver":false,"title":"Brapi Find Variables","description":"Find observation variables (traits) by name, trait class, ontology term, or free-text query. Free-text queries are ranked against every fetched row by PUI, name, synonym, and trait text; a candidate carries the ontology PUI of its row as termId when the row has one. results[] holds the leading rows up to loadLimit and a 24,000-byte budget; when it holds fewer rows than matched, the matched set is materialized as a dataframe — read it with brapi_dataframe_describe and brapi_dataframe_query (SQL).","input":[{"n":"alias","t":"string"},{"n":"variables","t":"array<string>"},{"n":"variableNames","t":"array<string>"},{"n":"variablePUIs","t":"array<string>"},{"n":"traitClasses","t":"array<string>"},{"n":"ontologies","t":"array<string>"},{"n":"studies","t":"array<string>"},{"n":"methods","t":"array<string>"},{"n":"scales","t":"array<string>"},{"n":"crop","t":"string"},{"n":"text","t":"string"},{"n":"loadLimit","t":"integer"},{"n":"extraFilters","t":"object"}],"output":[{"n":"alias","t":"string"},{"n":"studyCoverage","t":"array<object>"},{"n":"results","t":"array<object>"},{"n":"hasMore","t":"boolean"},{"n":"distributions","t":"object"},{"n":"ontologyCandidates","t":"array<object>"},{"n":"dataframe","t":"object"},{"n":"totalCount","t":"integer"},{"n":"returnedCount","t":"integer"},{"n":"appliedFilters","t":"object"},{"n":"refinementHint","t":"string"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"warnings","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"brapi_find_observations","server":7,"verb":"find","cls":"search","resolver":false,"title":"Brapi Find Observations","description":"Pull observation records filtered by study, germplasm, variable, season, or observation unit. Without a studies, trials, observationUnits, or observations anchor, a GET query first runs a one-row count probe and skips the bulk pull (warnings says so) when the probe fails or reports more than 5,000 matches. results[] holds the leading matches up to loadLimit and a 24,000-byte budget; when those bounds cut it short, the matched set is materialized as a dataframe — read it with brapi_dataframe_describe and brapi_dataframe_query (SQL).","input":[{"n":"alias","t":"string"},{"n":"studies","t":"array<string>"},{"n":"germplasm","t":"array<string>"},{"n":"variables","t":"array<string>"},{"n":"observationUnits","t":"array<string>"},{"n":"observations","t":"array<string>"},{"n":"seasons","t":"array<string>"},{"n":"programs","t":"array<string>"},{"n":"trials","t":"array<string>"},{"n":"observationLevels","t":"array<string>"},{"n":"timestampFrom","t":"string"},{"n":"timestampTo","t":"string"},{"n":"loadLimit","t":"integer"},{"n":"extraFilters","t":"object"}],"output":[{"n":"alias","t":"string"},{"n":"results","t":"array<object>"},{"n":"hasMore","t":"boolean"},{"n":"distributions","t":"object"},{"n":"dataframe","t":"object"},{"n":"totalCount","t":"integer"},{"n":"returnedCount","t":"integer"},{"n":"appliedFilters","t":"object"},{"n":"refinementHint","t":"string"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"warnings","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"brapi_find_images","server":7,"verb":"find","cls":"search","resolver":false,"title":"Brapi Find Images","description":"Filter images by observation unit, observation, study, descriptive ontology term, file name, or MIME type. Returns metadata only — use brapi_get_image to fetch bytes inline. results[] holds the leading matches up to loadLimit and a 24,000-byte budget; when it holds fewer rows than matched, the matched set is materialized as a dataframe — read it with brapi_dataframe_describe and brapi_dataframe_query (SQL).","input":[{"n":"alias","t":"string"},{"n":"images","t":"array<string>"},{"n":"observationUnits","t":"array<string>"},{"n":"observations","t":"array<string>"},{"n":"studies","t":"array<string>"},{"n":"imageFileNames","t":"array<string>"},{"n":"mimeTypes","t":"array<string>"},{"n":"descriptiveOntologyTerms","t":"array<string>"},{"n":"loadLimit","t":"integer"},{"n":"extraFilters","t":"object"}],"output":[{"n":"alias","t":"string"},{"n":"results","t":"array<object>"},{"n":"hasMore","t":"boolean"},{"n":"distributions","t":"object"},{"n":"dataframe","t":"object"},{"n":"totalCount","t":"integer"},{"n":"returnedCount","t":"integer"},{"n":"appliedFilters","t":"object"},{"n":"refinementHint","t":"string"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"warnings","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"brapi_get_image","server":7,"verb":"get","cls":"get","resolver":false,"title":"Brapi Get Image","description":"Fetch image bytes for up to 5 imageDbIds and return them inline as `type: image` content blocks. Falls back to the metadata `imageURL` when the server lacks dedicated image-content delivery or that request fails. No filesystem side-effects.","input":[{"n":"imageDbIds","t":"array<string>","r":true},{"n":"alias","t":"string"}],"output":[{"n":"alias","t":"string"},{"n":"images","t":"array<object>"},{"n":"errors","t":"array<object>"},{"n":"warnings","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"brapi_find_locations","server":7,"verb":"find","cls":"search","resolver":false,"title":"Brapi Find Locations","description":"Find research stations / field sites by country, abbreviation, type, location ID, or free-text. Countries filter by ISO 3166-1 alpha-3 code via countryCodes, or by free-form English country name via countryNames (resolved client-side to alpha-3 — \"Uganda\" → \"UGA\"). Optional bbox parameter restricts rows to a latitude/longitude window. When no first-page row falls inside it under the spec GeoJSON [lon, lat, alt] reading and a row carries a Point geometry, bbox is retried with axes swapped; if that matches, the swapped reading is used (non-conformant servers store [lat, lon, alt]) with a warning and `coordinateAxisOrder: \"swapped\"`. results[] holds the leading matches up to loadLimit and a 24,000-byte budget; when it holds fewer rows than matched, the matched set is materialized as a dataframe — read it with brapi_dataframe_describe and brapi_dataframe_query (SQL).","input":[{"n":"alias","t":"string"},{"n":"locations","t":"array<string>"},{"n":"locationNames","t":"array<string>"},{"n":"countryCodes","t":"array<string>"},{"n":"countryNames","t":"array<string>"},{"n":"locationTypes","t":"array<string>"},{"n":"abbreviations","t":"array<string>"},{"n":"bbox","t":"object"},{"n":"loadLimit","t":"integer"},{"n":"extraFilters","t":"object"}],"output":[{"n":"alias","t":"string"},{"n":"results","t":"array<object>"},{"n":"hasMore","t":"boolean"},{"n":"distributions","t":"object"},{"n":"dataframe","t":"object"},{"n":"coordinateAxisOrder","t":"enum(2)"},{"n":"totalCount","t":"integer"},{"n":"returnedCount","t":"integer"},{"n":"appliedFilters","t":"object"},{"n":"refinementHint","t":"string"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"warnings","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"brapi_find_variants","server":7,"verb":"find","cls":"search","resolver":false,"title":"Brapi Find Variants","description":"Find variant records by variant set, reference sequence, or genomic region (start/end, 0-based inclusive / exclusive per the BrAPI spec; servers may differ). results[] holds the leading matches up to loadLimit and a 24,000-byte budget; when it holds fewer rows than matched, the matched set is materialized as a dataframe — read it with brapi_dataframe_describe and brapi_dataframe_query (SQL).","input":[{"n":"alias","t":"string"},{"n":"variantSets","t":"array<string>"},{"n":"variants","t":"array<string>"},{"n":"references","t":"array<string>"},{"n":"referenceName","t":"string"},{"n":"start","t":"integer"},{"n":"end","t":"integer"},{"n":"loadLimit","t":"integer"},{"n":"extraFilters","t":"object"}],"output":[{"n":"alias","t":"string"},{"n":"results","t":"array<object>"},{"n":"hasMore","t":"boolean"},{"n":"distributions","t":"object"},{"n":"dataframe","t":"object"},{"n":"totalCount","t":"integer"},{"n":"returnedCount","t":"integer"},{"n":"appliedFilters","t":"object"},{"n":"refinementHint","t":"string"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"warnings","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"brapi_find_genotype_calls","server":7,"verb":"find","cls":"search","resolver":false,"title":"Brapi Find Genotype Calls","description":"Pull genotype calls for a germplasm × variant set. Filter to bound cost — at minimum, set `variantSetDbId` or `germplasmDbIds`. The upstream pull is capped by deployment policy; when the pull is truncated, narrow the filters. results[] holds the leading calls up to `loadLimit` and a 24,000-byte budget; when it holds fewer than were collected, every collected call is materialized as a dataframe — read it with brapi_dataframe_describe and brapi_dataframe_query (SQL) instead of paging row-by-row.","input":[{"n":"alias","t":"string"},{"n":"variantSetDbId","t":"string"},{"n":"variantSetDbIds","t":"array<string>"},{"n":"germplasmDbIds","t":"array<string>"},{"n":"callSetDbIds","t":"array<string>"},{"n":"variantDbIds","t":"array<string>"},{"n":"callFormat","t":"enum(4)"},{"n":"loadLimit","t":"integer"}],"output":[{"n":"alias","t":"string"},{"n":"results","t":"array<object>"},{"n":"hasMore","t":"boolean"},{"n":"callFormatting","t":"object"},{"n":"distributions","t":"object"},{"n":"dataframe","t":"object"},{"n":"truncated","t":"boolean"},{"n":"totalCount","t":"integer"},{"n":"returnedCount","t":"integer"},{"n":"appliedFilters","t":"object"},{"n":"notice","t":"string"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"warnings","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"brapi_export_genotype_matrix","server":7,"verb":"export","cls":"query","resolver":false,"title":"Brapi Export Genotype Matrix","description":"Pull genotype calls for a germplasm × variant set and pivot them into a matrix. `matrix-json` registers a wide canvas dataframe; `vcf-lite` adds VCF-subset text in `vcf`; `plink` adds .ped/.map text in `ped`/`map`. Text formats pull /variants metadata and convert zero-based BrAPI start to one-based positions; missing/invalid positions use `.`/`0`. Read the dataframe with brapi_dataframe_describe and brapi_dataframe_query (SQL). `variantColumnLegend` maps SQL-safe columns to original variant IDs.","input":[{"n":"alias","t":"string"},{"n":"germplasmDbIds","t":"array<string>"},{"n":"variantSetDbId","t":"string","r":true},{"n":"format","t":"enum(3)","r":true},{"n":"maxCalls","t":"integer"},{"n":"maxColumns","t":"integer"}],"output":[{"n":"alias","t":"string"},{"n":"format","t":"enum(3)"},{"n":"rowCount","t":"integer"},{"n":"columnCount","t":"integer"},{"n":"variantColumnLegend","t":"object"},{"n":"callFormatting","t":"object"},{"n":"dataframe","t":"object"},{"n":"vcf","t":"string"},{"n":"ped","t":"string"},{"n":"map","t":"string"},{"n":"truncated","t":"boolean"},{"n":"warnings","t":"array<string>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"brapi_dataframe_describe","server":7,"verb":"dataframe","cls":"query","resolver":false,"title":"Brapi Dataframe Describe","description":"Start here after a spillover. Lists dataframes (or describes one) with columns, row counts, and originating-source provenance. The dataframe name appears inline on every find_* response that spilled (`result.dataframe.tableName`) — pass it as `dataframe` to inspect schema and provenance before writing the first brapi_dataframe_query. On a shared HTTP endpoint without per-caller auth, listing without a name is available only where each MCP session has its own workspace, and never to a request without a session; pass a known name instead.","input":[{"n":"dataframe","t":"string"}],"output":[{"n":"tables","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"brapi_dataframe_query","server":7,"verb":"dataframe","cls":"query","resolver":false,"title":"Brapi Dataframe Query","description":"Run SQL across in-memory dataframes. Dataframes auto-populate when find_* tools spill (named `df_<uuid>`) — the dataframe name appears inline on every find_* response that spilled (`result.dataframe.tableName`), so the typical flow is find_* → read the name → query here. Use brapi_dataframe_describe to inspect schema and provenance for a known name. SELECT only — writes/DDL/COPY/PRAGMA/ATTACH/file-reads are rejected. Use SQL as the paging idiom: `LIMIT/OFFSET` to walk results, projection to trim columns, aggregation to summarize. Use `registerAs` to chain — the result lands as a new dataframe.","input":[{"n":"sql","t":"string","r":true},{"n":"registerAs","t":"string"},{"n":"preview","t":"integer"},{"n":"rowLimit","t":"integer"}],"output":[{"n":"rowCount","t":"integer"},{"n":"columns","t":"array<object>"},{"n":"rows","t":"array<object>"},{"n":"dataframe","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"brapi_raw_get","server":7,"verb":"raw","cls":"query","resolver":false,"title":"Brapi Raw Get","description":"Passthrough to BrAPI GET /{path} without foreign-key resolution. List results (result array or result.data) return a leading preview within loadLimit and a 24,000-byte budget on each serialized row representation; an oversized first row returns no inline rows. Omitted fetched rows remain in a dataframe readable with brapi_dataframe_describe and brapi_dataframe_query. Explicit params.page/pageSize fetches only that upstream page, staging it if trimmed. Non-list results and envelope siblings are preserved. Emits a suggestion when a curated tool covers the endpoint.","input":[{"n":"alias","t":"string"},{"n":"path","t":"string","r":true},{"n":"params","t":"object"},{"n":"loadLimit","t":"integer"}],"output":[{"n":"alias","t":"string"},{"n":"url","t":"string"},{"n":"path","t":"string"},{"n":"metadata","t":"object"},{"n":"result","t":"unknown"},{"n":"suggestion","t":"string"},{"n":"dataframe","t":"object"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"warnings","t":"array<string>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"brapi_raw_search","server":7,"verb":"raw","cls":"query","resolver":false,"title":"Brapi Raw Search","description":"Passthrough to BrAPI POST /search/{noun}, polling async search IDs. Sends loadLimit as the initial pageSize unless body.page/pageSize drives explicit paging. List previews fit loadLimit and a 24,000-byte budget on each serialized row representation; an oversized first row returns no inline rows. Every fetched row omitted inline stays in a dataframe readable with brapi_dataframe_describe and brapi_dataframe_query. Explicit paging fetches only the requested page, staging it if trimmed. Non-list results and envelope siblings are preserved; no distributions or foreign-key resolution.","input":[{"n":"alias","t":"string"},{"n":"noun","t":"string","r":true},{"n":"body","t":"object","r":true},{"n":"loadLimit","t":"integer"}],"output":[{"n":"alias","t":"string"},{"n":"noun","t":"string"},{"n":"kind","t":"enum(2)"},{"n":"searchResultsDbId","t":"string"},{"n":"metadata","t":"object"},{"n":"result","t":"unknown"},{"n":"suggestion","t":"string"},{"n":"dataframe","t":"object"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"warnings","t":"array<string>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"browsercompat_list_reference","server":8,"verb":"list","cls":"list","resolver":false,"title":"Browsercompat List Reference","description":"Enumerate the reference vocabulary this server uses: BCD namespaces, BCD browser ids, browserslist agent ids and their BCD counterparts, Baseline states, web-features groups, and ECMAScript snapshots. Use it to build valid inputs for the other tools and to see which target browsers can be evaluated.","input":[{"n":"topic","t":"enum(6)","r":true}],"output":[{"n":"topic","t":"string"},{"n":"entries","t":"array<object>"},{"n":"data_version","t":"object"},{"n":"attribution","t":"string"},{"n":"error","t":"object"}]},{"name":"browsercompat_get_feature","server":8,"verb":"get","cls":"get","resolver":false,"title":"Browsercompat Get Feature","description":"Get the compatibility record for one web feature: Baseline state and the date it crossed, deprecation and standards status, per-browser version added and removed with flags, vendor prefixes and partial-implementation notes — with every other support statement recorded for that browser, such as an earlier prefixed or flagged release, in other_statements — and the MDN and specification links. Accepts a BCD key such as css.selectors.has or a web-features id such as has; the response echoes which one it matched. A web-features id that spans several BCD keys, such as grid, returns web-features’ own feature-level release per Baseline core browser in feature_support and its compat_keys, 100 per page, in place of per-key fields. An unresolved feature returns found: false with guidance rather than an error.","input":[{"n":"feature","t":"string","r":true},{"n":"resolve","t":"boolean"},{"n":"include_runtimes","t":"boolean"},{"n":"subkeys_offset","t":"integer"},{"n":"compat_keys_offset","t":"integer"}],"output":[{"n":"found","t":"boolean"},{"n":"outcome","t":"enum(3)"},{"n":"resolved_as","t":"object"},{"n":"name","t":"string"},{"n":"description","t":"string"},{"n":"baseline","t":"object"},{"n":"status","t":"object"},{"n":"discouraged","t":"object"},{"n":"limiting_browser","t":"object"},{"n":"support","t":"array<object>"},{"n":"feature_support","t":"array<object>"},{"n":"mdn_url","t":"string"},{"n":"spec_urls","t":"array<string>"},{"n":"compat_keys","t":"array<string>"},{"n":"compat_keys_total","t":"integer"},{"n":"compat_keys_next_offset","t":"integer"},{"n":"subkeys","t":"object"},{"n":"guidance","t":"string"},{"n":"data_version","t":"object"},{"n":"baselineNotMapped","t":"string"},{"n":"runtimesExcluded","t":"string"},{"n":"error","t":"object"}]},{"name":"browsercompat_check_baseline","server":8,"verb":"check","cls":"analyze","resolver":false,"title":"Browsercompat Check Baseline","description":"Check whether web features are safe to ship: Baseline state and the date it crossed, the browser and version that limits support, whether the feature is deprecated or discouraged, and the share of tracked global traffic that requiring it would exclude. Evaluates up to 20 BCD keys or web-features ids per call; up to 100 may be sent, and entries past the 20th come back unevaluated in omitted_features for the next call.","input":[{"n":"features","t":"array<string>","r":true},{"n":"resolve","t":"boolean"}],"output":[{"n":"results","t":"array<object>"},{"n":"omitted_features","t":"array<string>"},{"n":"all_widely_available","t":"boolean"},{"n":"data_version","t":"object"},{"n":"totalCount","t":"number"},{"n":"attribution","t":"string"},{"n":"unresolvedNotice","t":"string"},{"n":"error","t":"object"}]},{"name":"browsercompat_search_features","server":8,"verb":"search","cls":"search","resolver":false,"title":"Browsercompat Search Features","description":"Find web features by plain name or keyword when the canonical key is unknown, across CSS, JavaScript, HTML, Web APIs, SVG, MathML, WebAssembly, and HTTP headers. Returns ranked matches with the BCD key, the web-features id, the Baseline state, a one-line support summary, and which field matched. Feed a result key into browsercompat_get_feature for the full record.","input":[{"n":"query","t":"string","r":true},{"n":"namespace","t":"enum(12)"},{"n":"baseline","t":"enum(4)"},{"n":"group","t":"string"},{"n":"snapshot","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"data_version","t":"object"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"nextOffset","t":"number"},{"n":"appliedFilters","t":"object"},{"n":"noMatchNotice","t":"string"},{"n":"offsetNotice","t":"string"},{"n":"error","t":"object"}]},{"name":"browsercompat_compare_support","server":8,"verb":"compare","cls":"analyze","resolver":false,"title":"Browsercompat Compare Support","description":"Compute whether a set of web features clears an explicit browserslist target query. Compares up to 20 features per call; up to 100 may be sent, and entries past the 20th come back unevaluated in omitted_features for the next call. Every call evaluates the whole query: each feature gets a verdict, the count of failing targets, those targets grouped into runs of consecutive query targets per browser in failing_ranges, and its own evaluated and unevaluated target counts with the share of tracked traffic each covers. The target rows behind those numbers — which release each target maps to, which targets were not evaluated and why, and the failing and unevaluated targets of each feature, a failing row carrying the prefix, alternative name, or flag behind its verdict — cover at most ten query targets per call; page through them with target_offset and target_limit, and the verdicts, coverage, and totals stay identical on every page. A target counts as evaluated only where compatibility data was read for it, so a feature clears only when every target in the query was evaluated and supports it, and is inconclusive otherwise — a query that includes a browser with no compatibility data, as \"defaults\" does, never clears. A BCD key is judged on its own per-browser support. A web-features id spanning several keys, such as grid, is judged on the release web-features lists for the feature as a whole in each Baseline core browser, as support_source says; its other browsers are not evaluated.","input":[{"n":"features","t":"array<string>","r":true},{"n":"targets","t":"string","r":true},{"n":"resolve","t":"boolean"},{"n":"target_offset","t":"integer"},{"n":"target_limit","t":"integer"}],"output":[{"n":"query_echo","t":"string"},{"n":"comparable_features","t":"integer"},{"n":"targets_resolved","t":"array<object>"},{"n":"targets_resolved_total","t":"integer"},{"n":"evaluated_targets_total","t":"integer"},{"n":"unchecked_targets","t":"array<object>"},{"n":"unchecked_targets_total","t":"integer"},{"n":"target_coverage_percent","t":"number"},{"n":"unchecked_coverage_percent","t":"number"},{"n":"results","t":"array<object>"},{"n":"omitted_features","t":"array<string>"},{"n":"all_clear","t":"boolean"},{"n":"data_version","t":"object"},{"n":"totalCount","t":"number"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"truncated","t":"boolean"},{"n":"nextOffset","t":"number"},{"n":"attribution","t":"string"},{"n":"uncheckedNotice","t":"string"},{"n":"offsetNotice","t":"string"},{"n":"error","t":"object"}]},{"name":"calculate","server":9,"verb":"calculate","cls":"analyze","resolver":false,"title":"Calculate","description":"Evaluate math expressions, simplify algebraic expressions, or compute symbolic derivatives. One expression per call. Supports arithmetic, trigonometry, statistics, matrices, complex numbers, units, and combinatorics.","input":[{"n":"expression","t":"string","r":true},{"n":"operation","t":"enum(3)"},{"n":"variable","t":"const|string"},{"n":"scope","t":"object"},{"n":"precision","t":"const|integer"},{"n":"numericType","t":"enum(3)"}],"output":[{"n":"result","t":"string"},{"n":"resultType","t":"string"},{"n":"expression","t":"string"},{"n":"operation","t":"enum(3)"},{"n":"scopeVars","t":"array<string>"},{"n":"precisionUsed","t":"number"},{"n":"unchanged","t":"boolean"},{"n":"error","t":"object"}]},{"name":"canparl_search_bills","server":10,"verb":"search","cls":"search","resolver":false,"title":"Canparl Search Bills","description":"Find House and Senate bills in one session by title, number, type, chamber, status, or indexed MP sponsor. Sponsor results are the OpenParliament-indexed subset; fetch a bill for its sponsor, stages, divisions, and statute citation. Omitted session means the verified current official session. Follow nextOffset with identical filters.","input":[{"n":"session","t":"string|object"},{"n":"titleContains","t":"string"},{"n":"billCode","t":"string"},{"n":"originatingChamber","t":"string"},{"n":"billType","t":"string"},{"n":"status","t":"string"},{"n":"sponsor","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"session","t":"string"},{"n":"total","t":"integer"},{"n":"bills","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"sponsorCoverage","t":"enum(2)"},{"n":"provenance","t":"array<object>"},{"n":"appliedFilters","t":"object"},{"n":"totalCount","t":"integer"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"canparl_get_bill","server":10,"verb":"get","cls":"get","resolver":false,"title":"Canparl Get Bill","description":"Read one House or Senate bill's official dossier. Large dossiers return an outline; re-call with one section and follow pagination.nextOffset for collections. Stages preserve nested records whole. Obtain billCode and session from canparl_search_bills; omitted session means the verified current official session.","input":[{"n":"session","t":"string|object"},{"n":"billCode","t":"string","r":true},{"n":"section","t":"string"},{"n":"offset","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"totalCount","t":"integer"},{"n":"kind","t":"enum(2)"},{"n":"sections","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"disclosure","t":"string"},{"n":"bill","t":"object"},{"n":"sponsor","t":"object"},{"n":"stages","t":"object"},{"n":"divisions","t":"array<object>"},{"n":"senateVoteDetails","t":"array<object>"},{"n":"publications","t":"array<object>"},{"n":"statute","t":"object"},{"n":"summary","t":"object"},{"n":"notes","t":"object"},{"n":"milestones","t":"object"},{"n":"webReferences","t":"array<object>"},{"n":"provenance","t":"array<object>"},{"n":"appliedFilters","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"canparl_search_members","server":10,"verb":"search","cls":"search","resolver":false,"title":"Canparl Search Members","description":"Find current House MPs by name, riding, province, or caucus. Set includeFormer for OpenParliament's historical name index; historical rows may contain only a name and slug. Follow nextOffset with identical filters and use detailLookup with canparl_get_member.","input":[{"n":"includeFormer","t":"boolean"},{"n":"name","t":"string"},{"n":"riding","t":"string"},{"n":"province","t":"string"},{"n":"party","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"total","t":"integer"},{"n":"members","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"provenance","t":"array<object>"},{"n":"totalCount","t":"integer"},{"n":"appliedFilters","t":"object"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"canparl_get_member","server":10,"verb":"get","cls":"get","resolver":false,"title":"Canparl Get Member","description":"Read one House MP by a returned OpenParliament slug or official current personId. Pass exactly one identifier from canparl_search_members detailLookup. Official profiles survive unavailable OpenParliament enrichment. Recent ballots come newest first from the official House member-votes feed when the member has one official personId, filterable by votesSession (default: the member's latest session) and votesBillCode; otherwise from OpenParliament. Sponsored bills and recent ballots are independently pageable; set their limits to zero for profile-only lookup.","input":[{"n":"slug","t":"string"},{"n":"personId","t":"string"},{"n":"sponsoredBills","t":"integer"},{"n":"billsOffset","t":"integer"},{"n":"recentVotes","t":"integer"},{"n":"votesOffset","t":"integer"},{"n":"votesSession","t":"string|object"},{"n":"votesBillCode","t":"string"}],"output":[{"n":"member","t":"object"},{"n":"memberships","t":"array<object>"},{"n":"sponsoredBills","t":"object"},{"n":"recentVotes","t":"object"},{"n":"openParliament","t":"object"},{"n":"provenance","t":"array<object>"},{"n":"appliedFilters","t":"object"},{"n":"shown","t":"object"},{"n":"cap","t":"object"},{"n":"truncated","t":"object"},{"n":"unavailable","t":"array<object>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"canparl_search_votes","server":10,"verb":"search","cls":"search","resolver":false,"title":"Canparl Search Votes","description":"Find recorded House divisions in one session by bill, result, document type, date, or subject. Return newest first and pass session plus number to canparl_get_vote. Omitted session resolves from the current official bill feed. Follow nextOffset with identical filters.","input":[{"n":"session","t":"string|object"},{"n":"billCode","t":"string"},{"n":"result","t":"string"},{"n":"documentType","t":"string"},{"n":"dateFrom","t":"string"},{"n":"dateTo","t":"string"},{"n":"subjectContains","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"session","t":"string"},{"n":"total","t":"integer"},{"n":"divisions","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"provenance","t":"array<object>"},{"n":"appliedFilters","t":"object"},{"n":"totalCount","t":"integer"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"canparl_get_vote","server":10,"verb":"get","cls":"get","resolver":false,"title":"Canparl Get Vote","description":"Read a recorded House division, its full official tally, party totals, and a page of individual ballots. Ballot, personId, party, and province filters affect the ballot page only; nonvoters are absent. Omitted session means the verified current official session. Follow nextOffset with identical filters.","input":[{"n":"session","t":"string|object"},{"n":"number","t":"integer","r":true},{"n":"party","t":"string"},{"n":"province","t":"string"},{"n":"ballot","t":"string"},{"n":"personId","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"division","t":"object"},{"n":"tally","t":"object"},{"n":"byParty","t":"array<object>"},{"n":"ballotsTotal","t":"integer"},{"n":"ballotsMatched","t":"integer"},{"n":"ballots","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"provenance","t":"array<object>"},{"n":"appliedFilters","t":"object"},{"n":"tallyMatchesBallots","t":"boolean"},{"n":"totalCount","t":"integer"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"canparl_search_speeches","server":10,"verb":"search","cls":"search","resolver":false,"title":"Canparl Search Speeches","description":"Find indexed House Hansard speeches by speaker, bill debated or mentioned, or date. contains scans at most 100 candidate speeches per call; follow nextOffset without changing filters until exhausted before drawing a negative conclusion.","input":[{"n":"politician","t":"string"},{"n":"billDebated","t":"object"},{"n":"mentionedBill","t":"object"},{"n":"dateFrom","t":"string"},{"n":"dateTo","t":"string"},{"n":"substantiveOnly","t":"boolean"},{"n":"contains","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"speeches","t":"array<object>"},{"n":"scanned","t":"integer"},{"n":"exhausted","t":"boolean"},{"n":"nextOffset","t":"integer"},{"n":"provenance","t":"array<object>"},{"n":"appliedFilters","t":"object"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"truncated","t":"boolean"},{"n":"excludedCommittees","t":"integer"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"canparl_list_reference","server":10,"verb":"list","cls":"list","resolver":false,"title":"Canparl List Reference","description":"List canonical session coverage and bill, division, and caucus vocabulary. Use source-specific terms when constructing filters. Omitted session means the verified current session for vocabulary. For topic sessions omit session; the entire global index is returned.","input":[{"n":"topic","t":"enum(6)","r":true},{"n":"session","t":"string|object"}],"output":[{"n":"topic","t":"enum(6)"},{"n":"session","t":"string"},{"n":"currentSession","t":"string"},{"n":"entries","t":"array<object>"},{"n":"provenance","t":"array<object>"},{"n":"appliedFilters","t":"object"},{"n":"totalCount","t":"integer"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"cdc_discover_datasets","server":11,"verb":"discover","cls":"search","resolver":false,"title":"Cdc Discover Datasets","description":"Search the CDC dataset catalog by keyword, category, or tag. Returns IDs, names, truncated descriptions, asset types, column counts, and update timestamps. The catalog also holds charts, maps, stories, files, and links; an entry whose columnCount is 0 is one of those and yields no data from the other tools. Use cdc_get_dataset_schema for the full column list of a chosen dataset.","input":[{"n":"domain","t":"enum(2)"},{"n":"query","t":"string"},{"n":"category","t":"string"},{"n":"tags","t":"array<string>"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"},{"n":"order","t":"enum(2)"}],"output":[{"n":"datasets","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"appliedFilters","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"cdc_get_dataset_schema","server":11,"verb":"get","cls":"get","resolver":false,"title":"Cdc Get Dataset Schema","description":"Fetch the column schema for a CDC dataset — names, data types, descriptions, row count, and last-updated timestamp. Returns the first 100 columns by default; wide datasets continue via column_offset. The dataset description is capped at 4,000 characters by default; pass full_description: true for the whole text. Get dataset IDs from cdc_discover_datasets.","input":[{"n":"domain","t":"enum(2)"},{"n":"datasetId","t":"string","r":true},{"n":"column_limit","t":"integer"},{"n":"column_offset","t":"integer"},{"n":"full_description","t":"boolean"}],"output":[{"n":"name","t":"string"},{"n":"description","t":"string"},{"n":"descriptionTruncated","t":"boolean"},{"n":"descriptionLength","t":"number"},{"n":"rowCount","t":"number"},{"n":"rowCountSource","t":"enum(2)"},{"n":"updatedAt","t":"string"},{"n":"columns","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"nextOffset","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"cdc_list_catalog_vocabulary","server":11,"verb":"list","cls":"list","resolver":false,"title":"List CDC Catalog Vocabulary","description":"List the controlled vocabularies cdc_discover_datasets' category and tags filters are matched against — every domain category and domain tag the CDC catalog publishes, each with the number of entries carrying it. Call it before filtering a search: a value the catalog does not carry matches nothing and returns an empty page, which is indistinguishable from a real value with no results. All categories come back whole; the tag vocabulary runs to roughly 1,600 values, so tags are ranked by entry count and returned one page at a time via tag_limit and tag_offset. Pass filter to narrow both vocabularies to the values whose words contain it.","input":[{"n":"domain","t":"enum(2)"},{"n":"filter","t":"string"},{"n":"tag_limit","t":"integer"},{"n":"tag_offset","t":"integer"}],"output":[{"n":"domain","t":"enum(2)"},{"n":"categories","t":"array<object>"},{"n":"tags","t":"array<object>"},{"n":"vocabularySize","t":"object"},{"n":"categoryCount","t":"number"},{"n":"tagCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"truncationCeiling","t":"number"},{"n":"nextOffset","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"cdc_query_dataset","server":11,"verb":"query","cls":"query","resolver":false,"title":"Cdc Query Dataset","description":"Execute a SoQL query against any CDC dataset. Supports filtering, aggregation, sorting, full-text search, and field selection. Use cdc_discover_datasets to find dataset IDs and cdc_get_dataset_schema to inspect columns before querying.","input":[{"n":"domain","t":"enum(2)"},{"n":"datasetId","t":"string","r":true},{"n":"search","t":"string"},{"n":"select","t":"string"},{"n":"where","t":"string"},{"n":"group","t":"string"},{"n":"having","t":"string"},{"n":"order","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"rows","t":"array<object>"},{"n":"rowCount","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"nextOffset","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"cdc_query_wonder","server":11,"verb":"query","cls":"query","resolver":false,"title":"Cdc Query Wonder","description":"Query CDC WONDER for national US mortality statistics — deaths, population, and crude/age-adjusted death rates — across its five mortality databases, selected with the database input: final underlying-cause data for 1999–2020 (the default) or 2018–2024, provisional data running from 2018 through the current year, and two multiple-cause databases covering the same two eras. Break results out by year, age group, sex, and/or race, and filter by ICD-10 cause of death, sex, age group, or year range; on a multiple-cause database, mcd_icd10 additionally matches a cause listed anywhere on the death certificate rather than only the one certified as underlying. Each database holds a different span of years (1999–2026 across all of them) and a request whose year_range falls outside the selected one's span is rejected with that span named. WONDER is a separate CDC system from the Socrata datasets the other cdc_* tools query. Data is national only — sub-national (state/county) breakdowns are not available through the API (CDC vital-statistics policy). Cause of death is a filter, not a grouping. Some measure cells come back as a CDC status token rather than a number — \"Suppressed\" (withheld for confidentiality), \"Unreliable\" (a rate from fewer than 20 deaths), or \"Not Applicable\" (no population denominator); those cells read null in rows and each one is listed in cellNotes with its token. CDC also drops whole rows before sending the table — strata with zero deaths, and strata whose death count is suppressed — so a stratum can be missing from rows entirely; messages carries CDC's statement whenever that happened. Each response is bounded by a 200,000-character budget counted over the whole result, so a broad grouping — one can run past two thousand rows — comes back a page at a time: the response reports the table's totalCount and a nextOffset to continue from, and limit takes smaller pages. Paging shapes the response only — WONDER is asked once either way, and the figures, caveats and hidden-row notices are the same on every page. CDC rejects requests made less than 15 seconds apart across all five databases, so calls are spaced automatically: calls made while another is running wait their turn and run one after another, each queued call adding about 16 seconds plus its own query time before it returns.","input":[{"n":"database","t":"enum(5)"},{"n":"group_by","t":"array<enum(4)>"},{"n":"cause_icd10","t":"const|string|array<const|string>"},{"n":"mcd_icd10","t":"const|string|array<const|string>"},{"n":"sex","t":"enum(3)"},{"n":"age_groups","t":"array<enum(12)>"},{"n":"year_range","t":"object"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"rows","t":"array<object>"},{"n":"rowCount","t":"number"},{"n":"database","t":"string"},{"n":"databaseTitle","t":"string"},{"n":"caveats","t":"array<string>"},{"n":"cellNotes","t":"array<object>"},{"n":"messages","t":"array<string>"},{"n":"suppressedCount","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"nextOffset","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"census_list_datasets","server":12,"verb":"list","cls":"list","resolver":false,"title":"List Census Datasets","description":"Browse available Census Bureau datasets with their supported vintage years. Use as the starting point when the right dataset is unknown — ACS5, ACS1, and their profile, subject, and comparison tables, population estimates, the decennial census files, and the business datasets (County Business Patterns, Economic Census, Nonemployer Statistics) serve different use cases. Pass the dataset_id value to the dataset parameter in other census tools. Each description names the predicates a dataset requires and the geography levels it publishes, both of which vary by dataset.","input":[{"n":"filter","t":"string"}],"output":[{"n":"datasets","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"filterApplied","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"census_list_geographies","server":12,"verb":"list","cls":"list","resolver":false,"title":"List Census Geography Levels","description":"List the geography levels available for a given Census dataset and year, along with the parent geographies each level requires. Use before querying to confirm that the target geography level exists — ACS1 omits many sub-state levels, and not all datasets support tracts or block groups. The geography_level values returned here are the valid inputs to the geography_level parameter in census_query_data and census_compare_geographies.","input":[{"n":"dataset","t":"string","r":true},{"n":"year","t":"number"}],"output":[{"n":"geography_levels","t":"array<object>"},{"n":"dataset","t":"string"},{"n":"year","t":"number"},{"n":"totalLevels","t":"number"},{"n":"error","t":"object"}]},{"name":"census_search_variables","server":12,"verb":"search","cls":"search","resolver":false,"title":"Search Census Variables","description":"Search Census variables by keyword across variable labels and concept groups, or look one up by its code. Returns variable codes with human-readable labels — use this to go from a concept like \"median household income\" to the variable code B19013_001E needed for data queries. A query that is one variable or table code, such as B19013_001E or B19013, returns that variable or the table's variables, in code order, ahead of any keyword matches; a code the dataset does not publish gets a notice naming the dataset that does, when one is confirmed. On ACS datasets it returns both estimate (E suffix) and margin-of-error (M suffix) codes so you can request both; the ACS comparison profiles (acs/acs5/cprofile, acs/acs1/cprofile) and the other dataset families publish no margins of error. Also use it to find the predicate codes a dataset filters on, such as NAICS2017 in cbp. Adding a word narrows the results, since every word must match; when totalMatches exceeds the limit, a more specific query reaches the rest — except past the limit of a table code, where a later variable's own code does.","input":[{"n":"query","t":"string","r":true},{"n":"dataset","t":"string"},{"n":"year","t":"number"},{"n":"limit","t":"integer"}],"output":[{"n":"variables","t":"array<object>"},{"n":"effectiveQuery","t":"string"},{"n":"dataset","t":"string"},{"n":"year","t":"number"},{"n":"totalMatches","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"census_get_variable","server":12,"verb":"get","cls":"get","resolver":false,"title":"Get Census Variable Metadata","description":"Fetch full metadata for one or more Census variable codes — label, concept group, predicate type, the table's universe, and margin-of-error sibling references. Use to confirm a variable code before building a query, or to look up what a known code means. On ACS datasets it returns estimate_code and moe_code sibling references so you can request both without a separate search, and a margin-of-error code carries attribute_of (its estimate) and attribute_type MARGIN_OF_ERROR; the ACS comparison profiles (acs/acs5/cprofile, acs/acs1/cprofile) and the other dataset families publish no margins of error and carry none of these fields. It also resolves the annotation and flag columns the data tools accept, such as B19013_001EA or EMP_F, naming the column each one belongs to, and predicate codes such as NAICS2017 or SEX, confirming a filter dimension exists in a dataset before a query uses it — for the values a dimension accepts rather than the dimension itself, call census_list_predicate_values.","input":[{"n":"variables","t":"array<string>","r":true},{"n":"dataset","t":"string"},{"n":"year","t":"number"}],"output":[{"n":"variables","t":"array<object>"},{"n":"dataset","t":"string"},{"n":"year","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"census_list_predicate_values","server":12,"verb":"list","cls":"list","resolver":false,"title":"List Census Predicate Values","description":"List the codes a Census filter dimension accepts, so a predicates map can be written without guessing. Answers the question left open when census_query_data or census_compare_geographies reports that a dimension was left unset. Which route a dimension takes depends on the vintage: NAICS and POPGROUP always publish a value list in the dataset dictionary, and on the current vintages EMPSZES, LFO, RCPSZES, TAXSTAT, and TYPOP publish none and are enumerated here against the live data endpoint instead. A dictionary value list is a classification shared across Census products rather than a list of what one dataset serves, and roughly half of its codes typically return no rows anywhere — those are checked against the dataset's own published rows and dropped, and the response source field says whether that check ran. The dictionary lists run to thousands of codes and are best narrowed with query. Pass the returned code as the dimension's value in predicates.","input":[{"n":"predicate","t":"string","r":true},{"n":"dataset","t":"string","r":true},{"n":"year","t":"number"},{"n":"query","t":"string"},{"n":"within_naics","t":"const|string"},{"n":"limit","t":"integer"}],"output":[{"n":"values","t":"array<object>"},{"n":"predicate","t":"string"},{"n":"predicate_label","t":"string"},{"n":"dataset","t":"string"},{"n":"year","t":"number"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"source","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"census_resolve_geography","server":12,"verb":"resolve","cls":"resolve","resolver":true,"title":"Resolve Census Geography","description":"Resolve a place name, ZIP code, or street address to Census FIPS identifiers. Converts names like \"King County, WA\", \"Seattle, WA\", or \"Seattle-Tacoma-Bellevue, WA\", and ZIPs like \"98109\", to the codes required by census_query_data and census_compare_geographies. Use before querying when you have a place name rather than raw FIPS codes — state_fips maps to parent_fips and fips_summary maps to geography_fips in downstream tools, and geography_type is itself the geography_level to query at.","input":[{"n":"name","t":"string","r":true},{"n":"geography_type","t":"enum(9)"},{"n":"county_fips","t":"string"}],"output":[{"n":"name","t":"string"},{"n":"geography_type","t":"string"},{"n":"state_fips","t":"string"},{"n":"county_fips","t":"string"},{"n":"tract_fips","t":"string"},{"n":"block_group_fips","t":"string"},{"n":"place_fips","t":"string"},{"n":"census_designated_place","t":"const"},{"n":"fips_summary","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"census_query_data","server":12,"verb":"query","cls":"query","resolver":false,"title":"Query Census Data","description":"Query a Census dataset for one or more variables at a specific geography. Accepts FIPS codes for the target geography — use census_resolve_geography to convert place names to FIPS when needed. On ACS datasets, labeled estimates and margin-of-error values are returned together (the comparison profiles publish no margins), and the negative sentinel values the Census writes for an estimate or margin of error it cannot publish are decoded into the meanings the Census gives them rather than passed through as raw numbers. A value cbp, ecnbasic, or nonemp withheld is stored as 0 beside a flag, and is reported as withheld, with the meaning of its flag, rather than as a zero. Pass geography_fips as \"*\" for every geography at the level within the parent: rows come back in GEOID order, up to limit per call (default 50, max 500), with totalCount giving how many matched and offset reaching the rest — the order is not a ranking, so use census_compare_geographies to rank. On the business datasets (cbp, ecnbasic, nonemp), pep/charv, dec/ddhca, dec/ddhcb, and acs/acs1/spp, use predicates to filter by industry, size class, or population group — a query that omits one is answered with a default the Census API picks, which is an all-categories total on some dimensions and a single category on others. Each row names the defaults that were applied in applied_filters, and census_list_predicate_values enumerates the codes a dimension accepts. Some dec/ddhca and dec/ddhcb tables split the population groups between them, publishing each group at a geography in only one table of the family, so where a result can be missing a group, a geography, or a value, the notice names the sibling tables to look in. One geography can also come back on more than one row: pep/charv publishes an April estimates base alongside its July estimate, and each row carries a record field saying which it is.","input":[{"n":"variables","t":"array<string>","r":true},{"n":"geography_level","t":"string","r":true},{"n":"geography_fips","t":"string","r":true},{"n":"parent_fips","t":"const|string"},{"n":"county_fips","t":"const|string"},{"n":"tract_fips","t":"const|string"},{"n":"predicates","t":"object"},{"n":"dataset","t":"string"},{"n":"year","t":"number"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"rows","t":"array<object>"},{"n":"totalRows","t":"number"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"dataset","t":"string"},{"n":"year","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"census_compare_geographies","server":12,"verb":"compare","cls":"analyze","resolver":false,"title":"Compare Census Geographies","description":"Compare one or more variables across multiple geographies at the same level — all counties in a state, all states nationally, or a named set of specific geographies — ranked on the value of one of them. Covers queries like \"compare median income across WA counties\" or \"which states have the most people below the poverty line.\" A count ranks geographies by size, not by rate, so to rank a rate, rank a published percentage: S1701_C03_001E (percent below the poverty level, dataset acs/acs5/subject), DP03_0128PE (the same percentage, acs/acs5/profile), or DP04_0047PE (percent of occupied housing units that are renter-occupied, acs/acs5/profile). Profile and subject tables reach tracts but not block groups. Omit within to compare all geographies nationally at the level. Suppressed values are decoded to human-readable labels rather than passed through as raw negative sentinels. On the business datasets (cbp, ecnbasic, nonemp), pep/charv, dec/ddhca, dec/ddhcb, and acs/acs1/spp, use predicates to rank within one industry, size class, or population group — a comparison that omits one ranks on a default the Census API picks, which is an all-categories total on some dimensions and a single category on others. Each row names the defaults that were applied in applied_filters, and census_list_predicate_values enumerates the codes a dimension accepts. Some dec/ddhca and dec/ddhcb tables split the population groups between them, publishing each group at a geography in only one table of the family, so a ranking on one of them leaves out the geographies whose group sits in a sibling table — the notice names those tables. A dataset that publishes several records per geography cannot be ranked until one is pinned: pep/charv publishes an April estimates base and a July estimate, so a comparison that pins neither fails with ambiguous_rows rather than giving every geography two ranks — pass predicates {\"MONTH\": \"7\"} for the July estimate.","input":[{"n":"variables","t":"array<string>","r":true},{"n":"geography_level","t":"string","r":true},{"n":"within","t":"const|string"},{"n":"within_county","t":"const|string"},{"n":"geographies","t":"array<string>"},{"n":"predicates","t":"object"},{"n":"dataset","t":"string"},{"n":"year","t":"number"},{"n":"sort_by","t":"string"},{"n":"sort_dir","t":"enum(2)"},{"n":"limit","t":"integer"}],"output":[{"n":"rows","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"sortVariable","t":"string"},{"n":"dataset","t":"string"},{"n":"year","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"cern_inspire_search_literature","server":13,"verb":"search","cls":"search","resolver":false,"title":"Search INSPIRE literature","description":"Search INSPIRE-HEP papers with INSPIRE query syntax or free text, filtered by document type, subject, and year, sorted by relevance, recency, or citations. Returns one page of papers with recid, title, first author, date, citation counts, arXiv ID, DOI, publication, and an abstract snippet; pass a recid to cern_inspire_get_paper for the full record or to cern_inspire_export_citations (\"recid:N\") for BibTeX. Empty recognized field clauses are invalid; other malformed syntax can widen or empty the match, so check an unexpectedly broad or empty result against cern_inspire_list_reference topic search_syntax. Only the first 10,000 results of a query are reachable.","input":[{"n":"query","t":"string","r":true},{"n":"sort","t":"enum(3)"},{"n":"document_types","t":"array<enum(13)>"},{"n":"subjects","t":"array<enum(18)>"},{"n":"year_from","t":"integer"},{"n":"year_to","t":"integer"},{"n":"page","t":"integer"},{"n":"size","t":"integer"}],"output":[{"n":"papers","t":"array<object>"},{"n":"page","t":"number"},{"n":"size","t":"number"},{"n":"hasMore","t":"boolean"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"nextPage","t":"number"},{"n":"appliedFilters","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"cern_inspire_get_paper","server":13,"verb":"get","cls":"get","resolver":false,"title":"Get INSPIRE paper","description":"Fetch one paper's full INSPIRE-HEP record by recid, arXiv ID, or DOI: authors with affiliations and identifiers, abstract, publication references, arXiv and DOI identifiers, keywords, subjects, citation counts, linked experiments, texkeys, and whether HEPData holds its numerical tables (record DOI, latest version, table count, hepdata.net link). Also returns ready-made literature queries for the papers citing it and for its references. Large collaboration papers can list thousands of authors; max_authors caps the list while authorCount gives the full number.","input":[{"n":"paper","t":"string","r":true},{"n":"max_authors","t":"integer"},{"n":"author_offset","t":"integer"}],"output":[{"n":"recid","t":"string"},{"n":"mergedFrom","t":"string"},{"n":"resolvedAs","t":"enum(3)"},{"n":"title","t":"string"},{"n":"alternateTitles","t":"array<string>"},{"n":"abstract","t":"string"},{"n":"abstractSource","t":"string"},{"n":"authorCount","t":"number"},{"n":"authorOffset","t":"integer"},{"n":"nextAuthorOffset","t":"integer"},{"n":"authors","t":"array<object>"},{"n":"collaborations","t":"array<string>"},{"n":"experiments","t":"array<object>"},{"n":"date","t":"string"},{"n":"preprintDate","t":"string"},{"n":"publicationDate","t":"string"},{"n":"publications","t":"array<object>"},{"n":"arxivId","t":"string"},{"n":"arxivCategories","t":"array<string>"},{"n":"dois","t":"array<string>"},{"n":"reportNumbers","t":"array<string>"},{"n":"keywords","t":"array<string>"},{"n":"subjects","t":"array<string>"},{"n":"documentTypes","t":"array<string>"},{"n":"refereed","t":"boolean"},{"n":"citeable","t":"boolean"},{"n":"core","t":"boolean"},{"n":"numberOfPages","t":"number"},{"n":"citationCount","t":"number"},{"n":"citationCountWithoutSelf","t":"number"},{"n":"texkeys","t":"array<string>"},{"n":"urls","t":"array<object>"},{"n":"licenses","t":"array<object>"},{"n":"inspireUrl","t":"string"},{"n":"citingQuery","t":"string"},{"n":"referencesQuery","t":"string"},{"n":"hepdata","t":"object"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"cern_inspire_export_citations","server":13,"verb":"export","cls":"query","resolver":false,"title":"Export INSPIRE citations","description":"Export INSPIRE-HEP's citation entries for the papers a literature query selects, as BibTeX or LaTeX \\bibitem entries (EU or US style), keyed by INSPIRE texkeys and ready to paste into a bibliography. Name specific papers with \"recid:451647 or arxiv:1207.7214 or doi:10.1016/…\", or export a topic, author, or citing set with any query cern_inspire_search_literature accepts. Up to 50 entries per page; page through larger sets (only the first 10,000 matches are reachable). Entries are INSPIRE's verbatim text (long author lists arrive abbreviated as \"First, Name and others\").","input":[{"n":"query","t":"string","r":true},{"n":"format","t":"enum(3)"},{"n":"document_types","t":"array<enum(13)>"},{"n":"subjects","t":"array<enum(18)>"},{"n":"year_from","t":"integer"},{"n":"year_to","t":"integer"},{"n":"sort","t":"enum(3)"},{"n":"page","t":"integer"},{"n":"size","t":"integer"}],"output":[{"n":"format","t":"enum(3)"},{"n":"page","t":"number"},{"n":"entries","t":"array<object>"},{"n":"appliedFilters","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"nextPage","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"cern_inspire_search_authors","server":13,"verb":"search","cls":"search","resolver":false,"title":"Search INSPIRE authors","description":"Find physicist profiles in INSPIRE-HEP by name, INSPIRE BAI, ORCID, INSPIRE ID, or author recid. Each profile carries its recid, BAI, ORCID, current and past positions, advisors, arXiv categories, links, awards, and a literatureQuery that selects the person's papers in cern_inspire_search_literature. A name returns ranked candidates (a bare surname can match tens of thousands of profiles, and a less-cited namesake can rank first), so confirm the person from positions and categories before passing a bai or recid to cern_inspire_get_citation_summary. An identifier matches exactly.","input":[{"n":"query","t":"string","r":true},{"n":"limit","t":"integer"}],"output":[{"n":"authors","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"matchedAs","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"cern_inspire_get_citation_summary","server":13,"verb":"get","cls":"get","resolver":false,"title":"Get INSPIRE citation summary","description":"Compute INSPIRE-HEP's citation summary for one author or for any literature query: h-index, citation totals, average citations per paper, and paper counts per citation bucket (0, 1–9, 10–49, 50–99, 100–249, 250–499, 500+), each for all citeable papers and for published papers, plus citations received per year. Pass exactly one of author (a BAI, ORCID, INSPIRE ID, or author recid — resolve a name with cern_inspire_search_authors first) or query (any INSPIRE literature query: a topic, collaboration, institution, or \"a <BAI>\"). Document type and subject filters narrow every figure. year_from and year_to narrow the summary to papers from those years, and exclude_self_citations recounts it without self-citations; any of them leaves out citations per year, which INSPIRE cannot narrow that way.","input":[{"n":"author","t":"string"},{"n":"query","t":"string"},{"n":"document_types","t":"array<enum(13)>"},{"n":"subjects","t":"array<enum(18)>"},{"n":"year_from","t":"integer"},{"n":"year_to","t":"integer"},{"n":"exclude_self_citations","t":"boolean"}],"output":[{"n":"target","t":"object"},{"n":"matchedRecords","t":"number"},{"n":"citeablePapers","t":"number"},{"n":"hIndex","t":"object"},{"n":"all","t":"object"},{"n":"published","t":"object"},{"n":"buckets","t":"object"},{"n":"citationsByYear","t":"array<object>"},{"n":"effectiveQuery","t":"string"},{"n":"appliedFilters","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"cern_inspire_search_experiments","server":13,"verb":"search","cls":"search","resolver":false,"title":"Search INSPIRE experiments","description":"Find experiments, collaborations, and facilities in INSPIRE-HEP (ATLAS, CMS, DUNE, Belle II, …) by name, accelerator, or INSPIRE legacy name (CERN-LHC-CMS); digits alone look up an experiment recid. Each record carries the accelerator, host institutions, collaboration and subgroups, classification, lifecycle dates (proposed, approved, started, completed, ongoing), INSPIRE's paper count, a description, and a literatureQuery to pass to cern_inspire_search_literature or cern_inspire_get_citation_summary for the experiment's papers.","input":[{"n":"query","t":"string","r":true},{"n":"limit","t":"integer"}],"output":[{"n":"experiments","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"cern_inspire_search_hepdata","server":13,"verb":"search","cls":"search","resolver":false,"title":"Search HEPData records","description":"Find HEPData measurement records by physics content — process, observable, energy, collaboration — when the paper is unknown, through INSPIRE-HEP's index of every HEPData submission. Each hit carries the paper recids (pass to cern_inspire_get_paper), collaborations, keywords (reactions such as \"P P --> TOP TOPBAR X\", observables, centre-of-mass energies), the HEPData record DOI (recordDoi, the citation for the data), latest version, table count, and hepdataUrl, the hepdata.net record page that holds the table values; this tool does not return the values themselves. Only the first 10,000 results of a query are reachable.","input":[{"n":"query","t":"string","r":true},{"n":"sort","t":"enum(2)"},{"n":"page","t":"integer"},{"n":"size","t":"integer"}],"output":[{"n":"records","t":"array<object>"},{"n":"page","t":"number"},{"n":"size","t":"number"},{"n":"hasMore","t":"boolean"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"nextPage","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"cern_inspire_list_reference","server":13,"verb":"list","cls":"list","resolver":false,"title":"INSPIRE reference vocabulary","description":"Decode the vocabulary the other cern_inspire tools take: INSPIRE search syntax (field operators, boolean logic, sort orders, the 10,000-result window, and how malformed queries behave), identifier forms (recid, arXiv, DOI, BAI, ORCID, INSPIRE ID, institution recid, texkey, HEPData DOIs), the document_types and subjects filter values, citation-summary buckets, and HEPData record versions and DOIs. Static content with no upstream call; use it to build a query or to recover from an empty or unexpectedly broad result.","input":[{"n":"topic","t":"enum(6)","r":true}],"output":[{"n":"topic","t":"enum(6)"},{"n":"entries","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"cern_opendata_search_records","server":14,"verb":"search","cls":"search","resolver":false,"title":"Search CERN Open Data Records","description":"Search the CERN Open Data Portal's datasets, software, environments, documentation and supplementary records with exact-vocabulary filters and an optional full-text query. The filters are experiment, record type, physics category, keyword, collision energy and type, file format, data-taking year, event count, availability, collection, and LHCb magnet polarity, stripping stream and stripping version. Returns compact hits with recids plus live facet counts. Each facet ignores its own filter, so its counts show the alternatives under the other filters. Filter values are exact upstream; common spellings are normalized, and cern_opendata_list_reference lists the vocabulary. Paging reaches the first 10,000 matches.","input":[{"n":"query","t":"string"},{"n":"type","t":"array<string>"},{"n":"experiment","t":"array<string>"},{"n":"collision_energy","t":"array<string>"},{"n":"collision_type","t":"array<string>"},{"n":"file_type","t":"array<string>"},{"n":"year_from","t":"integer"},{"n":"year_to","t":"integer"},{"n":"min_events","t":"integer"},{"n":"max_events","t":"integer"},{"n":"availability","t":"array<string>"},{"n":"collection","t":"array<string>"},{"n":"category","t":"array<string>"},{"n":"keywords","t":"array<string>"},{"n":"magnet_polarity","t":"array<string>"},{"n":"stripping_stream","t":"array<string>"},{"n":"stripping_version","t":"array<string>"},{"n":"sort","t":"enum(4)"},{"n":"limit","t":"integer"},{"n":"page","t":"integer"}],"output":[{"n":"hits","t":"array<object>"},{"n":"page","t":"number"},{"n":"has_more","t":"boolean"},{"n":"facets","t":"object"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"applied_filters","t":"object"},{"n":"error","t":"object"}]},{"name":"cern_opendata_get_records","server":14,"verb":"get","cls":"get","resolver":false,"title":"Get CERN Open Data Records","description":"Fetch full metadata for 1-20 records in one call, by recid, DOI, CMS dataset path (/Primary/Era/TIER) or documentation slug. Returns the description, run periods, collision and distribution details, related records, a software-environment summary, the license and a ready citation, plus what a record states of its variable dictionary, physics category, pile-up, keywords, and LHCb magnet polarity and stripping. Documentation and news pages include their markdown body in slices of at most 30,000 characters; body_offset with that one id reads on from where a slice stops. Each response holds to 64,000 bytes, except that the first record always comes back whole: records past the budget, and ids past the first 20, are listed under deferred, to pass back as ids. File lists are not included; use cern_opendata_list_files. Identifiers that do not resolve come back under missing with guidance; they do not fail the call.","input":[{"n":"ids","t":"array<string>","r":true},{"n":"body_offset","t":"integer"}],"output":[{"n":"records","t":"array<object>"},{"n":"missing","t":"array<object>"},{"n":"deferred","t":"array<string>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"cern_opendata_list_files","server":14,"verb":"list","cls":"list","resolver":false,"title":"List CERN Open Data Record Files","description":"List one record's files: its file indexes (groups of up to ~1,500 files) with their XRootD URI-list URLs, and per file the XRootD URI, HTTPS download URL, size, adler32 checksum and availability. Without index, returns the record's indexes and its regular files; with index, reads only that index and pages through its files. Files marked on demand sit on tape and must be requested on the record's portal page before download.","input":[{"n":"recid","t":"string","r":true},{"n":"index","t":"string"},{"n":"cursor","t":"string"},{"n":"limit","t":"integer"}],"output":[{"n":"recid","t":"string"},{"n":"title","t":"string"},{"n":"availability","t":"string"},{"n":"availability_details","t":"object"},{"n":"scope","t":"enum(2)"},{"n":"indexes","t":"array<object>"},{"n":"files","t":"array<object>"},{"n":"children","t":"array<string>"},{"n":"has_more","t":"boolean"},{"n":"next_cursor","t":"string"},{"n":"portal_url","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"cern_opendata_get_analysis_env","server":14,"verb":"get","cls":"get","resolver":false,"title":"Get CERN Open Data Analysis Environment","description":"Assemble what is needed to analyse a record: its container images, CMSSW release and global tag; the condition-data, VM and validated-run records for its run periods; example software that declares it works with the record; and quoted sections of the guides the record links (the first two are fetched). Container images, software and guide code are licensed separately from the CC0 data. Use cern_opendata_list_files for the record's files.","input":[{"n":"recid","t":"string","r":true}],"output":[{"n":"recid","t":"string"},{"n":"title","t":"string"},{"n":"type","t":"object"},{"n":"experiment","t":"array<string>"},{"n":"run_period","t":"array<string>"},{"n":"software","t":"object"},{"n":"environment_records","t":"array<object>"},{"n":"example_software","t":"array<object>"},{"n":"guides","t":"array<object>"},{"n":"other_links","t":"array<object>"},{"n":"separately_licensed","t":"const"},{"n":"license_note","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"cern_opendata_get_validated_runs","server":14,"verb":"get","cls":"get","resolver":false,"title":"Get CMS Validated Runs","description":"Get a CMS validated-run (good-run) list, which certifies the luminosity sections that are good for physics in each run. Select it by a CMS collision dataset recid, a validated-run list recid, or a run period such as Run2012B (give exactly one of recid and run_period). Choose the full validation or the muons-only variant, and narrow to a run range; a dataset recid defaults the range to the first and last run the dataset lists. Returns the runs with their luminosity-section ranges and the list file download URL. CMS only.","input":[{"n":"recid","t":"string"},{"n":"run_period","t":"string"},{"n":"variant","t":"enum(2)"},{"n":"run_min","t":"integer"},{"n":"run_max","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"matched_lists","t":"array<object>"},{"n":"list","t":"object"},{"n":"dataset","t":"object"},{"n":"summary","t":"object"},{"n":"run_bounds","t":"object"},{"n":"runs","t":"array<object>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"cern_opendata_search_trigger_paths","server":14,"verb":"search","cls":"search","resolver":false,"title":"Search CMS Trigger Paths","description":"Look up CMS High-Level Trigger paths by exact name (HLT_IsoMu24) or prefix pattern (HLT_IsoMu*), optionally for one data-taking year. Paths outside the HLT_ family, such as AlCa_EcalPi0, DST_ and DQM_ paths, output modules and HLTriggerFinalPath, are found by their own names, in the case given. Each match is a per-year path record parsed into the primary datasets its title names, the first and last run the path was seen online, per-version run ranges, the L1 seed, and links to the HLT menu records. Covers CMS open data from 2011-2016. Prescale factors are not returned: each HLT menu record holds a configuration file (cern_opendata_list_files with a menu_recid) whose PrescaleService block lists the prescale in each column of every path it prescales (a path it leaves out has prescale 1), and the CMS luminosity records (collection CMS-Luminosity-Information) hold prescale files that log which column applied by run and luminosity section.","input":[{"n":"path","t":"string","r":true},{"n":"year","t":"integer"},{"n":"limit","t":"integer"},{"n":"page","t":"integer"}],"output":[{"n":"page","t":"number"},{"n":"has_more","t":"boolean"},{"n":"triggers","t":"array<object>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"effectiveQuery","t":"string"},{"n":"error","t":"object"}]},{"name":"cern_opendata_list_reference","server":14,"verb":"list","cls":"list","resolver":false,"title":"List Reference Vocabulary","description":"Decode the vocabulary the other cern_opendata tools accept: experiments, record types, collision energies and types, file formats and data tiers, availability states, physics categories, LHCb magnet polarities and stripping streams and versions, identifier forms, query syntax, licensing, and the CMS run periods that have validated-run lists. Static and offline; omit topic for every table.","input":[{"n":"topic","t":"enum(12)"}],"output":[{"n":"topics","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"chembl_search_molecules","server":15,"verb":"search","cls":"search","resolver":false,"title":"chembl-search-molecules","description":"Discovery entry point for compounds. Find by name / ChEMBL ID / InChIKey with the default search_type=name (supply query), or run a structure search with search_type exact | similarity | substructure (supply structure as a SMILES). At least one of query or structure is required, and structure is required for the three structure modes. Returns ChEMBL ID, preferred name, canonical SMILES, formula, MW, AlogP, Lipinski violations, QED, max clinical phase, and the family parent_chembl_id on every row; only search_type=similarity adds a Tanimoto similarity percent. Chain molecule_chembl_id into chembl_get_bioactivities or chembl_get_drug_info. A salt often ranks ahead of its parent and carries a small share of the family's measurements, so check parent_chembl_id before chaining. A capped result carries nextCursor — pass it back as cursor with the same filters to read the next page.","input":[{"n":"query","t":"string"},{"n":"structure","t":"string"},{"n":"search_type","t":"enum(4)"},{"n":"similarity_threshold","t":"integer"},{"n":"max_phase_min","t":"integer"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"molecules","t":"array<object>"},{"n":"nextCursor","t":"string"},{"n":"totalCount","t":"number"},{"n":"totalCountCapped","t":"boolean"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"chembl_get_bioactivities","server":15,"verb":"get","cls":"get","resolver":false,"title":"chembl-get-bioactivities","description":"The flagship compound↔target bioactivity bridge: measurements for a molecule (target deconvolution / selectivity), a target (lead finding), or both together (how potently one compound hits one target). Supply at least one of molecule_chembl_id (from chembl_search_molecules) or target_chembl_id (from chembl_search_targets) — supplying both narrows to that compound–target pair, supplying neither is an error. A drug's measurements are often split across its salts and other alternate forms, so molecule_chembl_id reads that one form unless include_alternate_forms widens it to the whole family under its parent (a salt's ID included), every view, page, and spill reading the same family. Filter by standard_type (IC50/Ki/EC50/…), minimum potency pchembl_value_min, assay_type, organism, and variant (wild type, or one recorded mutant such as \"T315I\"). Each row carries its activity_comment and data_validity_comment, its assay variant, and its source document for citation. Not every measurement has a derivable pchembl_value, so potency_view picks which side of that split you get: the default \"potency_ranked\" returns the measurements that have one, most potent first (ChEMBL sorts the rest first otherwise, which is why they are not merged), and \"null_potency\" returns exactly the measurements that have none. totalCount is the honest full match count across both views either way. Mixing measurement types (IC50 vs Ki) is a scientific error — set standard_type to compare like with like. A popular target carries tens of thousands of rows: results spill to a DataCanvas table (call chembl_dataframe_describe for its columns, then chembl_dataframe_query for honest aggregates across the staged set), while an inline preview answers the immediate question. Each view stages its own table (bioactivities / bioactivities_null_potency), so running both against one canvas_id lets a UNION ALL rebuild the full set. A canvas is minted only when a view spills; pass its canvas_id back and every later non-cursor call re-stages the table of its view with its own rows, even when they fit inline or none match, so a successful call never leaves rows from an earlier query in it, and a spill that fails or is cancelled leaves the earlier table in place. The spill is bounded by a row cap (CHEMBL_MAX_SPILL_ROWS) and a time budget (CHEMBL_SPILL_DEADLINE_MS); when either stops it short of the view, truncated is true, truncated_by names the bound, and the table is a bounded slice, not the complete view. The inline rows are always capped at limit, so compare that against totalCount before treating them as the whole answer. Spilling needs the canvas, which is on unless the server sets CANVAS_PROVIDER_TYPE=none. Whenever a call stages nothing and rows remain past this page — the canvas is off, or the view fit inline with no canvas_id — nextCursor continues the view: pass it back as cursor, with the same filters and potency_view, for the next page. A cursor page is always returned inline and never staged, canvas or not.","input":[{"n":"molecule_chembl_id","t":"string"},{"n":"include_alternate_forms","t":"boolean"},{"n":"target_chembl_id","t":"string"},{"n":"standard_type","t":"string"},{"n":"pchembl_value_min","t":"number"},{"n":"potency_view","t":"enum(2)"},{"n":"assay_type","t":"string"},{"n":"organism","t":"string"},{"n":"variant","t":"string"},{"n":"limit","t":"integer"},{"n":"canvas_id","t":"string"},{"n":"cursor","t":"string"}],"output":[{"n":"activities","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"potency_view","t":"enum(2)"},{"n":"spilled","t":"boolean"},{"n":"canvas_id","t":"string"},{"n":"table_name","t":"string"},{"n":"staged_row_count","t":"number"},{"n":"truncated","t":"boolean"},{"n":"truncated_by","t":"enum(2)"},{"n":"canvasDisabled","t":"boolean"},{"n":"nextCursor","t":"string"},{"n":"appliedFilters","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"chembl_search_targets","server":15,"verb":"search","cls":"search","resolver":false,"title":"chembl-search-targets","description":"Resolve a protein/gene/UniProt accession to the ChEMBL target ID that chembl_get_bioactivities needs for the target→leads workflow. Supply at least one of accession (UniProt, e.g. P00533), gene_symbol (e.g. EGFR), or query (free-text name); filter further by organism and target_type. Returns each target with its type, organism, and component UniProt accessions + gene symbols. A UniProt accession from the uniprot/protein server is the most precise input. A capped result carries nextCursor — pass it back as cursor with the same filters to read the next page.","input":[{"n":"query","t":"string"},{"n":"accession","t":"string"},{"n":"gene_symbol","t":"string"},{"n":"organism","t":"string"},{"n":"target_type","t":"string"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"targets","t":"array<object>"},{"n":"nextCursor","t":"string"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"chembl_get_drug_info","server":15,"verb":"get","cls":"get","resolver":false,"title":"chembl-get-drug-info","description":"Pharmacology for a drug (molecule): mechanism(s) of action, the molecular target(s) it acts on, action type (inhibitor / agonist / …), first-approval year, and clinical indications with the max phase reached for each. Supply molecule_chembl_id (from chembl_search_molecules) — a parent or any of its salts and other alternate forms gives the same answer: ChEMBL often records a drug's mechanisms and approved indications on a salt, so both lists cover the whole family under parent_molecule_chembl_id. Each mechanism names the form it is recorded on, and each indication is listed once per MeSH/EFO pair at the highest phase any form reached, with the forms it is recorded on, each at its own phase. Distinct from the openfda server's label/adverse-event view — this is the curated mechanism-and-indication record. A mechanism's target_chembl_id chains into chembl_get_bioactivities for compounds hitting the same target. Each list carries its own retrieval state: an empty mechanisms or indications array means the molecule has none recorded only when the matching mechanisms_status / indications_status is \"complete\" — \"failed\" means the list was not retrieved (the request ran out of time or ChEMBL answered with an error, as the matching *_failure says) and the array says nothing about the molecule, and \"truncated\" means the page cap fetched fewer rows than ChEMBL holds, which the matching *_total_count reports.","input":[{"n":"molecule_chembl_id","t":"string","r":true}],"output":[{"n":"molecule_chembl_id","t":"string"},{"n":"parent_molecule_chembl_id","t":"string"},{"n":"pref_name","t":"string"},{"n":"max_phase","t":"number"},{"n":"first_approval","t":"number"},{"n":"mechanisms","t":"array<object>"},{"n":"mechanisms_total_count","t":"number"},{"n":"mechanisms_status","t":"enum(3)"},{"n":"mechanisms_failure","t":"enum(2)"},{"n":"indications","t":"array<object>"},{"n":"indications_total_count","t":"number"},{"n":"indications_rows_fetched","t":"number"},{"n":"indications_status","t":"enum(3)"},{"n":"indications_failure","t":"enum(2)"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"chembl_get_assay","server":15,"verb":"get","cls":"get","resolver":false,"title":"chembl-get-assay","description":"Assay provenance behind a bioactivity row: description, type (binding / functional / ADMET / toxicity), the target it measures, organism, and ChEMBL's 1–9 confidence score (9 = direct assay on the protein target, lower = homologous or indirect). Supply assay_chembl_id from a chembl_get_bioactivities row. Call this to judge whether two measurements are comparable before ranking them together.","input":[{"n":"assay_chembl_id","t":"string","r":true}],"output":[{"n":"assay_chembl_id","t":"string"},{"n":"description","t":"string"},{"n":"assay_type","t":"string"},{"n":"assay_type_description","t":"string"},{"n":"target_chembl_id","t":"string"},{"n":"organism","t":"string"},{"n":"confidence_score","t":"number"},{"n":"confidence_description","t":"string"},{"n":"error","t":"object"}]},{"name":"chembl_dataframe_query","server":15,"verb":"dataframe","cls":"query","resolver":false,"title":"chembl-dataframe-query","description":"Run a read-only SQL SELECT over the bioactivity rows chembl_get_bioactivities staged on a canvas — rank, group, dedupe, and aggregate across the FULL set, not the inline preview. Reference each staged table by the name chembl_get_bioactivities returned — bioactivities for its potency_ranked view, bioactivities_null_potency for null_potency; discover the staged tables and their columns with chembl_dataframe_describe. Compute honest aggregates here (e.g. SELECT molecule_chembl_id, MEDIAN(pchembl_value) AS med FROM bioactivities WHERE standard_type = 'IC50' GROUP BY 1 ORDER BY 2 DESC). Two independent bounds apply, each reported on its own field: truncated is true when the SQL result exceeded the canvas row cap, and rendered_rows says how many of the returned rows the markdown table holds once its character budget is reached (below row_count on a wide or long result). Page past either bound with SQL LIMIT/OFFSET — append e.g. LIMIT 500 OFFSET 500 and re-call; offsets reach rows beyond the canvas row cap. Unavailable when the server sets CANVAS_PROVIDER_TYPE=none.","input":[{"n":"canvas_id","t":"string","r":true},{"n":"sql","t":"string","r":true}],"output":[{"n":"rows","t":"array<object>"},{"n":"row_count","t":"number"},{"n":"rendered_rows","t":"number"},{"n":"truncated","t":"boolean"},{"n":"error","t":"object"}]},{"name":"chembl_dataframe_describe","server":15,"verb":"dataframe","cls":"query","resolver":false,"title":"chembl-dataframe-describe","description":"List the tables and columns staged on a canvas by chembl_get_bioactivities — inspect before calling chembl_dataframe_query to write correct SQL. Returns each table with its row count, kind (table | view), and column names + types. Unavailable when the server sets CANVAS_PROVIDER_TYPE=none.","input":[{"n":"canvas_id","t":"string","r":true}],"output":[{"n":"tables","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"cisa_list_reference","server":16,"verb":"list","cls":"list","resolver":false,"title":"cisa_list_reference","description":"Decode the vocabulary the other CISA tools take as input. Topics cover the BOD 26-04 remediation timeline table and what each tier means, the KEV record fields and their value domains, the SSVC decision points CISA publishes, the critical-infrastructure sector names as the advisory corpus spells them, advisory ID formats, CVSS severity bands, and the freshness of the data this server currently holds. Call this before constructing filters for cisa_search_kev or cisa_search_ics_advisories, and whenever another tool's recovery hint points here.","input":[{"n":"topic","t":"enum(7)","r":true}],"output":[{"n":"topic","t":"enum(7)"},{"n":"title","t":"string"},{"n":"summary","t":"string"},{"n":"entries","t":"array<object>"},{"n":"timelineTable","t":"array<object>"},{"n":"definitions","t":"array<object>"},{"n":"supersedes","t":"array<object>"},{"n":"sources","t":"object"},{"n":"error","t":"object"}]},{"name":"cisa_check_cve_status","server":16,"verb":"check","cls":"analyze","resolver":false,"title":"cisa_check_cve_status","description":"Check CVE IDs against the CISA Known Exploited Vulnerabilities catalog — up to 200 per call, served from a cached catalog snapshot at no upstream cost. Returns, per CVE, whether it is in KEV and if so the date added, the federal remediation due date, days remaining or days overdue, which binding operational directive the entry cites, the required action text, whether it is linked to ransomware campaigns, whether it falls in the three-day forensic-triage tier, CISA's own vendor and product labels, associated CWEs, and the reference URLs parsed from the entry's notes. A CVE that is not in KEV is a normal result, not an error. For a large batch, detail \"summary\" keeps only the triage fields — the deadline and overdue status, directive, ransomware and forensic-triage flags, and vendor and product labels — and drops the descriptive text, CWEs, and references, so a full batch stays compact. The CWE IDs returned chain directly into the cwe filter of cisa_search_kev and cisa_search_ics_advisories, and the parsed NVD reference gives the canonical record for scoring detail. For the reverse direction — which ICS advisories cover a CVE — pass it as cve to cisa_search_ics_advisories, or set inKev there to list the advisories covering any KEV CVE.","input":[{"n":"cveIds","t":"array<string>","r":true},{"n":"detail","t":"enum(2)"}],"output":[{"n":"results","t":"array<object>"},{"n":"foundCount","t":"integer"},{"n":"notFoundCount","t":"integer"},{"n":"catalog","t":"object"},{"n":"asOf","t":"string"},{"n":"summaryNote","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"cisa_search_kev","server":16,"verb":"search","cls":"search","resolver":false,"title":"cisa_search_kev","description":"Search the CISA Known Exploited Vulnerabilities catalog across every entry in the cached snapshot. Filter by vendor or product using CISA's own labels, by name substring, by CWE, by the date an entry was added, by due date, by overdue status, by ransomware linkage, by the three-day forensic-triage tier, or by which binding operational directive the entry cites. Results are paged and sortable by due date or date added. Vendor and product values are CISA's free-text labels, not CPE names — call cisa_list_reference for the field vocabulary before guessing one. The catalog records additions but carries no per-record modified timestamp, so dateAddedFrom answers \"what is new since D\" while a revised due date on an existing entry is not detectable from the feed.","input":[{"n":"vendorProject","t":"string"},{"n":"product","t":"string"},{"n":"nameContains","t":"string"},{"n":"cwe","t":"string"},{"n":"cveIdPrefix","t":"string"},{"n":"dateAddedFrom","t":"string"},{"n":"dateAddedTo","t":"string"},{"n":"dueBefore","t":"string"},{"n":"dueAfter","t":"string"},{"n":"overdue","t":"boolean"},{"n":"ransomware","t":"boolean"},{"n":"forensicTriage","t":"boolean"},{"n":"directive","t":"enum(3)"},{"n":"sortBy","t":"enum(2)"},{"n":"order","t":"enum(2)"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"results","t":"array<object>"},{"n":"cursor","t":"string"},{"n":"hasMore","t":"boolean"},{"n":"totalCount","t":"integer"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"catalog","t":"object"},{"n":"asOf","t":"string"},{"n":"appliedFilters","t":"object"},{"n":"snapshotCaveat","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"cisa_get_ssvc","server":16,"verb":"get","cls":"get","resolver":false,"title":"cisa_get_ssvc","description":"Fetch the SSVC decision points CISA publishes per CVE as a CVE Authorized Data Publisher — Exploitation, Automatable, and Technical Impact — along with the CVSS score and CWE CISA contributes where present, and compute the BOD 26-04 remediation timeline those values imply for the asset exposure you supply. The computed timeline applies CISA's published decision table to CISA's published decision points and your stated exposure; it is not a compliance determination and it is not CISA's own due-date assignment, which is reported separately when the CVE is in KEV and can differ. Not every CVE is enriched — a miss returns found false with guidance rather than an error. Call cisa_list_reference with topic ssvc_values for the decision-point vocabulary.","input":[{"n":"cveIds","t":"array<string>","r":true},{"n":"assetExposure","t":"enum(3)"}],"output":[{"n":"results","t":"array<object>"},{"n":"foundCount","t":"integer"},{"n":"notFoundCount","t":"integer"},{"n":"echo","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"cisa_search_ics_advisories","server":16,"verb":"search","cls":"search","resolver":false,"title":"cisa_search_ics_advisories","description":"Search the CISA industrial control system advisory corpus — every CSAF 2.0 advisory covering PLC, HMI, SCADA, building-automation, and medical-device products from 2010 onward. Filter by vendor, product, CVE, CWE, CVSS range, severity band, critical-infrastructure sector, advisory series, publication date, revision date, or whether an advisory covers a CVE in the CISA Known Exploited Vulnerabilities catalog, and run full-text search over advisory titles and product names. Sector filtering reaches only advisories that carry a sector note, which begins in 2017; the response reports how many documents a sector filter can never match. Returns advisory IDs for cisa_get_advisory, the CVEs each advisory covers and which of them are in KEV, and the source URL and attribution every advisory response carries.","input":[{"n":"q","t":"string"},{"n":"vendor","t":"string"},{"n":"product","t":"string"},{"n":"cve","t":"string"},{"n":"cwe","t":"string"},{"n":"inKev","t":"boolean"},{"n":"cvssMin","t":"number"},{"n":"cvssMax","t":"number"},{"n":"severity","t":"enum(5)"},{"n":"sector","t":"enum(17)"},{"n":"series","t":"enum(2)"},{"n":"publisher","t":"enum(2)"},{"n":"publishedFrom","t":"string"},{"n":"publishedTo","t":"string"},{"n":"revisedFrom","t":"string"},{"n":"revisedTo","t":"string"},{"n":"sortBy","t":"enum(4)"},{"n":"order","t":"enum(2)"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"results","t":"array<object>"},{"n":"cursor","t":"string"},{"n":"hasMore","t":"boolean"},{"n":"totalCount","t":"integer"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"appliedFilters","t":"object"},{"n":"mirror","t":"object"},{"n":"sectorCoverage","t":"string"},{"n":"cvssCoverage","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"cisa_get_advisory","server":16,"verb":"get","cls":"get","resolver":false,"title":"cisa_get_advisory","description":"Read one CISA industrial control system advisory: product definitions and relationship component references; per-CVE CVSS score, vector, and CWE; vendor remediations; sectors; and revision history. Large advisories return a section outline with byte sizes and vulnerability CVE IDs. Re-call with sections, cves for named vulnerabilities, or productIds for exact product definitions referenced by vulnerability status, scores, or remediations. Product IDs are case-sensitive; relationship selection does not expand components. Every response carries source URLs and attribution. Find advisory IDs with cisa_search_ics_advisories.","input":[{"n":"advisoryId","t":"string","r":true},{"n":"sections","t":"array<enum(7)>"},{"n":"cves","t":"array<string>"},{"n":"productIds","t":"array<string>"}],"output":[{"n":"found","t":"boolean"},{"n":"kind","t":"enum(2)"},{"n":"advisory","t":"object"},{"n":"summary","t":"object"},{"n":"products","t":"object"},{"n":"vulnerabilities","t":"array<object>"},{"n":"revisionHistory","t":"array<object>"},{"n":"references","t":"array<object>"},{"n":"acknowledgments","t":"array<object>"},{"n":"sections","t":"array<object>"},{"n":"outlineNotice","t":"string"},{"n":"guidance","t":"string"},{"n":"indexCheckpoint","t":"string"},{"n":"indexLastSyncedAt","t":"string"},{"n":"error","t":"object"}]},{"name":"cisa_get_alerts","server":16,"verb":"get","cls":"get","resolver":false,"title":"cisa_get_alerts","description":"List what CISA has published recently — its combined advisory feed, its alerts feed, or its ICS advisory feed. Each feed is a rolling window of exactly 30 items with no history, no pagination, and no date-range query, so the window's coverage varies from about a week to about two months depending on the feed. For ICS advisory history beyond the window, use cisa_search_ics_advisories, which covers the full corpus back to 2010.","input":[{"n":"feed","t":"enum(3)"},{"n":"limit","t":"integer"},{"n":"since","t":"string"}],"output":[{"n":"stale","t":"boolean"},{"n":"fetchedAt","t":"string"},{"n":"feed","t":"enum(3)"},{"n":"feedUrl","t":"string"},{"n":"feedTitle","t":"string"},{"n":"items","t":"array<object>"},{"n":"window","t":"object"},{"n":"windowCaveat","t":"string"},{"n":"effectiveQuery","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"clinicaltrials_search_studies","server":17,"verb":"search","cls":"search","resolver":false,"title":"Clinicaltrials Search Studies","description":"Search for clinical trial studies from ClinicalTrials.gov. Supports full-text and field-specific queries, status/phase/geographic filters, pagination, sorting, and field selection. Returns a compact per-study index by default; pass the fields parameter to get specific leaves at full fidelity — full study records are ~70KB each.","input":[{"n":"query","t":"string"},{"n":"conditionQuery","t":"string"},{"n":"interventionQuery","t":"string"},{"n":"locationQuery","t":"string"},{"n":"sponsorQuery","t":"string"},{"n":"titleQuery","t":"string"},{"n":"outcomeQuery","t":"string"},{"n":"statusFilter","t":"string|array<string>"},{"n":"phaseFilter","t":"string|array<string>"},{"n":"advancedFilter","t":"string"},{"n":"geoFilter","t":"string"},{"n":"nctIds","t":"string|array<string>"},{"n":"fields","t":"array<string>"},{"n":"sort","t":"string"},{"n":"pageSize","t":"integer"},{"n":"pageToken","t":"string"},{"n":"countTotal","t":"boolean"},{"n":"includeUnknownEnrollment","t":"boolean"}],"output":[{"n":"studies","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"nextPageToken","t":"string"},{"n":"requestedFields","t":"array<string>"},{"n":"pageExhausted","t":"boolean"},{"n":"searchCriteria","t":"object"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"error","t":"object"}]},{"name":"clinicaltrials_get_study_record","server":17,"verb":"get","cls":"get","resolver":false,"title":"Clinicaltrials Get Study Record","description":"Fetch a single clinical trial study by NCT ID from ClinicalTrials.gov. Returns the full study record including protocol details, eligibility criteria, outcomes, arms, interventions, contacts, and locations. Optional locationLimit / outcomeLimit / referenceLimit / nearLocation parameters trim locations, outcomes, and references — original totals are preserved in `filtersApplied` only when a cap actually trims the set.","input":[{"n":"nctId","t":"string","r":true},{"n":"locationLimit","t":"integer"},{"n":"outcomeLimit","t":"integer"},{"n":"referenceLimit","t":"integer"},{"n":"nearLocation","t":"object"}],"output":[{"n":"study","t":"object"},{"n":"filtersApplied","t":"object"},{"n":"resultsSummary","t":"object"},{"n":"error","t":"object"}]},{"name":"clinicaltrials_get_study_count","server":17,"verb":"get","cls":"get","resolver":false,"title":"Clinicaltrials Get Study Count","description":"Get total clinical trial study count from ClinicalTrials.gov matching a query, without fetching study data. Fast and lightweight. Use for quick statistics or to build breakdowns by calling multiple times with different filters (e.g., count by phase, count by status, count recruiting vs completed for a condition).","input":[{"n":"query","t":"string"},{"n":"conditionQuery","t":"string"},{"n":"interventionQuery","t":"string"},{"n":"locationQuery","t":"string"},{"n":"sponsorQuery","t":"string"},{"n":"titleQuery","t":"string"},{"n":"outcomeQuery","t":"string"},{"n":"statusFilter","t":"string|array<string>"},{"n":"phaseFilter","t":"string|array<string>"},{"n":"advancedFilter","t":"string"},{"n":"includeUnknownEnrollment","t":"boolean"}],"output":[{"n":"totalCount","t":"number"},{"n":"searchCriteria","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"clinicaltrials_get_field_values","server":17,"verb":"get","cls":"get","resolver":false,"title":"Clinicaltrials Get Field Values","description":"Discover valid values for ClinicalTrials.gov fields with study counts per value. Use to explore available filter options before building a search — e.g., valid OverallStatus, Phase, InterventionType, StudyType, or LeadSponsorClass values.","input":[{"n":"fields","t":"string|array<string>","r":true}],"output":[{"n":"fieldStats","t":"array<object>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"clinicaltrials_get_field_definitions","server":17,"verb":"get","cls":"get","resolver":false,"title":"Clinicaltrials Get Field Definitions","description":"Resolve valid field names from the ClinicalTrials.gov data model — the canonical PascalCase identifiers (OverallStatus, EnrollmentCount, LeadSponsorName) accepted by the `fields`, `advancedFilter`, and `sort` parameters of other tools, and as input to clinicaltrials_get_field_values. Select a mode: `\"search\"` — keyword search returning ranked matches (pass `query`, e.g. \"enrollment\", \"sponsor\", \"adverse events\"); `\"drill\"` — drill into a specific section by dot-notation path (pass `path`, e.g. \"protocolSection.designModule\"); `\"overview\"` — top-level summary of all sections (no additional args).","input":[{"n":"mode","t":"enum(3)","r":true},{"n":"query","t":"string"},{"n":"path","t":"string"},{"n":"limit","t":"integer"},{"n":"includeIndexedOnly","t":"boolean"}],"output":[{"n":"fields","t":"array<object>"},{"n":"totalFields","t":"number"},{"n":"resolvedPath","t":"string"},{"n":"searchQuery","t":"string"},{"n":"totalMatches","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"clinicaltrials_get_study_results","server":17,"verb":"get","cls":"get","resolver":false,"title":"Clinicaltrials Get Study Results","description":"Fetch clinical trial results data from ClinicalTrials.gov for completed studies — outcome measures with statistics, adverse events, participant flow, baseline characteristics, and results metadata (limitations & caveats, certain-agreement disclosure restrictions, results point of contact). Only available for studies where hasResults is true. Use clinicaltrials_search_studies first to find studies with results. Each call fetches up to 20 distinct NCT IDs and returns any further IDs in deferredNctIds for a follow-up call. A results-rich record can exceed 500KB per study in full mode — bound it with summary=true, narrower sections, or the outcomeLimit / adverseEventLimit caps; outcomeLimit / outcomeOffset also page summarized outcomes. A bounded list is resumable: outcomeOffset / seriousEventOffset / otherEventOffset start the next window, and each study's filtersApplied reports what was trimmed and the next offset for every list left short. A previous (alias) NCT ID resolves to its canonical study, named in canonicalNctId.","input":[{"n":"nctIds","t":"string|array<string>","r":true},{"n":"sections","t":"enum(5)|array<enum(5)>"},{"n":"summary","t":"boolean"},{"n":"outcomeLimit","t":"integer"},{"n":"adverseEventLimit","t":"integer"},{"n":"outcomeOffset","t":"integer"},{"n":"seriousEventOffset","t":"integer"},{"n":"otherEventOffset","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"studiesWithoutResults","t":"array<string>"},{"n":"fetchErrors","t":"array<object>"},{"n":"deferredNctIds","t":"array<string>"},{"n":"truncated","t":"boolean"},{"n":"error","t":"object"}]},{"name":"clinicaltrials_find_eligible","server":17,"verb":"find","cls":"search","resolver":false,"title":"Clinicaltrials Find Eligible","description":"Find candidate clinical trials for a patient profile. Provide age, sex, conditions, and location to get studies with their demographic limits, contact information, and recruiting locations. Candidates are matched on age, sex, location, recruitment status, and ClinicalTrials.gov's fuzzy condition search only — inclusion/exclusion criteria are not checked, and a candidate can exclude the requested condition, so review each one's criteria with clinicaltrials_get_study_record before treating it as a match. Results are re-ranked so studies whose own condition matches a requested condition surface above tangential matches from ClinicalTrials.gov's fuzzy condition search. Each candidate returns only the sites matching the requested location (capped by locationLimit), not the study's full registered site list — a large trial can register hundreds of sites worldwide. When none of a candidate's matched sites is recruiting, one recruiting site is added so an enrollable site is never hidden behind a closer closed one: the one nearest the matched sites by their published coordinates, in the requested country whenever a site there recruits, carrying distanceMi, or the first in match order when coordinates are missing. Fetch a study's complete record with clinicaltrials_get_study_record.","input":[{"n":"age","t":"integer","r":true},{"n":"ageUnit","t":"enum(4)"},{"n":"sex","t":"enum(3)","r":true},{"n":"conditions","t":"array<string>","r":true},{"n":"location","t":"object","r":true},{"n":"healthyVolunteer","t":"boolean"},{"n":"recruitingOnly","t":"boolean"},{"n":"maxResults","t":"integer"},{"n":"locationLimit","t":"integer"}],"output":[{"n":"studies","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"searchCriteria","t":"object"},{"n":"funnel","t":"object"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"error","t":"object"}]},{"name":"scorecard_lookup_cip","server":18,"verb":"lookup","cls":"get","resolver":false,"title":"Lookup CIP Code","description":"Search the Classification of Instructional Programs (CIP) taxonomy by keyword or partial name. Returns matching CIP codes with standard titles. Use this before passing cip_code filters to scorecard_search_programs or scorecard_get_programs when you know a program by name but not its code. Served entirely from embedded static data — no API call, no rate limit impact.","input":[{"n":"query","t":"string","r":true},{"n":"limit","t":"integer"}],"output":[{"n":"query","t":"string"},{"n":"results","t":"array<object>"},{"n":"totalMatches","t":"number"},{"n":"notice","t":"string"},{"n":"guidance","t":"string"},{"n":"queryContext","t":"object"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"scorecard_list_fields","server":18,"verb":"list","cls":"list","resolver":false,"title":"List Scorecard Fields","description":"Search the College Scorecard field catalog by keyword. Returns matching field paths, descriptions, data types, and whether each field supports API-side sorting. Use before passing custom field paths to the fields parameter on scorecard_get_school to find a supported path. Served entirely from embedded static data — no API call, no rate limit impact.","input":[{"n":"query","t":"string","r":true},{"n":"limit","t":"integer"}],"output":[{"n":"query","t":"string"},{"n":"results","t":"array<object>"},{"n":"totalMatches","t":"number"},{"n":"tip","t":"string"},{"n":"notice","t":"string"},{"n":"guidance","t":"string"},{"n":"queryContext","t":"object"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"scorecard_search_schools","server":18,"verb":"search","cls":"search","resolver":false,"title":"Search Schools","description":"Search and filter U.S. colleges and universities by name, location, type, size, and acceptance rate. Returns core identity and cost metrics. Use scorecard_get_school for profiles or scorecard_search_programs for program rankings. Geographic distance requires a U.S. ZIP; ZIP alone uses the provider default radius. State accepts comma-separated two-letter codes (e.g. WA,CA). Ownership: 1=public, 2=private nonprofit, 3=for-profit. Degree level: 0=non-degree, 1=certificate, 2=associate, 3=bachelor, 4=graduate.","input":[{"n":"query","t":"string"},{"n":"state","t":"string"},{"n":"ownership","t":"integer"},{"n":"degree_level","t":"integer"},{"n":"size_range","t":"object"},{"n":"acceptance_rate_range","t":"object"},{"n":"zip","t":"string"},{"n":"distance","t":"string"},{"n":"cip_code","t":"string"},{"n":"sort","t":"string"},{"n":"men_only","t":"boolean"},{"n":"women_only","t":"boolean"},{"n":"per_page","t":"integer"},{"n":"page","t":"integer"}],"output":[{"n":"total","t":"number"},{"n":"page","t":"number"},{"n":"per_page","t":"number"},{"n":"schools","t":"array<object>"},{"n":"query","t":"object"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"scorecard_get_school","server":18,"verb":"get","cls":"get","resolver":false,"title":"Get School Profile","description":"Institutional profiles for one or more school IDs. Accepts up to 1,000 elements, deduplicates normalized IDs, serves the first 100 distinct IDs, and reports missing and unprocessed IDs separately. Use scorecard_compare_schools for comparisons. Custom fields return requested paths and their JSON values in selected_fields, absent paths in absent_fields, and real identity; default profiles include costs, admissions, outcomes, aid, and completion rates.","input":[{"n":"id","t":"string|integer|array<string|integer>","r":true},{"n":"fields","t":"string"}],"output":[{"n":"schools","t":"array<object>"},{"n":"total_requested","t":"number"},{"n":"total_found","t":"number"},{"n":"missing_ids","t":"array<number>"},{"n":"unprocessed_ids","t":"array<number>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"scorecard_get_programs","server":18,"verb":"get","cls":"get","resolver":false,"title":"Get School Programs","description":"All field-of-study programs at one school with median earnings 1 year after the highest credential, cumulative Stafford/Grad PLUS debt, and IPEDS awards for each year of the pooled debt cohort. Institution-level 6/8/10-year earnings are available via scorecard_get_earnings. Null or absent earnings have unknown cause; suppressed=true requires an explicit provider privacy marker. Use scorecard_lookup_cip to find CIP codes by name.","input":[{"n":"id","t":"string|integer","r":true},{"n":"cip_code","t":"string"},{"n":"min_earnings","t":"number"},{"n":"credential_level","t":"integer"}],"output":[{"n":"school_id","t":"number"},{"n":"school_name","t":"string"},{"n":"programs","t":"array<object>"},{"n":"total","t":"number"},{"n":"suppressed_count","t":"number"},{"n":"unavailable_count","t":"number"},{"n":"query","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"scorecard_get_earnings","server":18,"verb":"get","cls":"get","resolver":false,"title":"Get School Earnings","description":"Institution-level earnings of federally aided undergraduate entrants working and not enrolled, regardless of completion. Reports medians at 6/8/10 years after entry, 6/10-year percentiles, and non-male/male 6-year medians. For graduate program earnings use scorecard_get_programs. years selects API data-file start years (1996–2025), including files without earnings observations. Per-metric availability and official cohort/measurement/dollar context accompany values; unknown metadata stays absent. No re-inflation is performed.","input":[{"n":"id","t":"string|integer","r":true},{"n":"years","t":"array<integer>"}],"output":[{"n":"school_id","t":"number"},{"n":"school_name","t":"string"},{"n":"current_availability","t":"object"},{"n":"current_context","t":"object"},{"n":"current","t":"object"},{"n":"trend","t":"array<object>"},{"n":"suppressed","t":"boolean"},{"n":"suppression_note","t":"string"},{"n":"error","t":"object"}]},{"name":"scorecard_search_programs","server":18,"verb":"search","cls":"search","resolver":false,"title":"Search Programs","description":"Find programs by CIP code across institutions, ranked by median earnings within the fetched school page. Accepts school-side filters (state, ownership, max cost). Minimum earnings is applied locally; totals and pagination count schools before local program filtering. Use scorecard_lookup_cip to convert program names to CIP codes. Returns school names and IDs alongside program earnings, cumulative Stafford/Grad PLUS debt, and IPEDS awards for follow-up calls to scorecard_get_school or scorecard_get_programs.","input":[{"n":"credential_level","t":"integer"},{"n":"cip_code","t":"string"},{"n":"program_name","t":"string"},{"n":"state","t":"string"},{"n":"ownership","t":"integer"},{"n":"max_net_price","t":"number"},{"n":"min_earnings","t":"number"},{"n":"max_debt","t":"number"},{"n":"per_page","t":"integer"},{"n":"page","t":"integer"}],"output":[{"n":"total","t":"number"},{"n":"page","t":"number"},{"n":"per_page","t":"number"},{"n":"programs","t":"array<object>"},{"n":"total_programs","t":"number"},{"n":"suppressed_count","t":"number"},{"n":"unavailable_count","t":"number"},{"n":"query","t":"object"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"scorecard_compare_schools","server":18,"verb":"compare","cls":"analyze","resolver":false,"title":"Compare Schools","description":"Side-by-side comparison of 2–5 schools with ordinal competition ranks within the selected set (ties share a rank). Topics: costs (tuition, net price by income bracket, debt), admissions (acceptance rate, SAT/ACT, enrollment), outcomes (completion, earnings, repayment), aid (Pell grants, federal loans, debt, repayment). Use scorecard_get_school for full profiles.","input":[{"n":"ids","t":"array<string|integer>","r":true},{"n":"topic","t":"enum(4)","r":true}],"output":[{"n":"schools","t":"array<object>"},{"n":"topic","t":"string"},{"n":"rows","t":"array<object>"},{"n":"summary","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"scorecard_value_analysis","server":18,"verb":"analysis","cls":"analyze","resolver":false,"title":"Value Analysis","description":"Analyze costs, debt, repayment progress, and earnings for one school. Returns debt-to-earnings and net-price-to-annual-earnings ratios alongside the source figures. family_income selects the applicable net-price bracket. Repayment progress is the share of borrowers paying down principal 3 years after entering repayment.","input":[{"n":"id","t":"string|integer","r":true},{"n":"family_income","t":"number"}],"output":[{"n":"school_id","t":"number"},{"n":"school_name","t":"string"},{"n":"family_income","t":"number"},{"n":"effective_net_price","t":"number"},{"n":"net_price_basis","t":"enum(3)"},{"n":"list_price","t":"number"},{"n":"net_price_overall","t":"number"},{"n":"net_price_for_income","t":"number"},{"n":"applicable_income_bracket","t":"string"},{"n":"median_debt","t":"number"},{"n":"repayment_progress_3yr","t":"number"},{"n":"graduation_rate","t":"number"},{"n":"earnings_6yr_median","t":"number"},{"n":"earnings_10yr_median","t":"number"},{"n":"debt_to_earnings_ratio","t":"number"},{"n":"net_price_to_annual_earnings","t":"number"},{"n":"data_notes","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"congressgov_bill_lookup","server":19,"verb":"lookup","cls":"get","resolver":false,"title":"Congress.gov Bill Lookup","description":"Browse and retrieve U.S. legislative bill data from Congress.gov. Discover bills by filtering on congress, bill type, and date range — there is no keyword search. Use 'list' to browse (requires congress, defaults to most-recently-updated first), 'get' for full bill detail (sponsor, policy area, CBO estimates, law info), or drill into a specific bill with 'actions', 'amendments', 'cosponsors', 'committees', 'subjects', 'summaries', 'text', 'titles', or 'related' (each requires congress + billType + billNumber). 'text' lists the published versions and their format URLs; 'content' then reads one version's actual text, a bounded character window at a time. 'summaries' takes an optional versionCode selector and returns each row's text a bounded character window at a time — a row past the window carries textTotalCharacters/textTruncated/textNextOffset, and characterOffset reads on from there.","input":[{"n":"operation","t":"enum(12)","r":true},{"n":"congress","t":"integer","r":true},{"n":"billType","t":"enum(8)"},{"n":"billNumber","t":"integer|string"},{"n":"fromDateTime","t":"string"},{"n":"toDateTime","t":"string"},{"n":"order","t":"enum(2)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"},{"n":"textVersionIndex","t":"integer"},{"n":"versionCode","t":"string"},{"n":"format","t":"enum(2)"},{"n":"characterOffset","t":"integer"},{"n":"characterLimit","t":"integer"}],"output":[{"n":"data","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"bill","t":"object"},{"n":"content","t":"object"},{"n":"effectiveQuery","t":"string"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"congressgov_enacted_laws","server":19,"verb":"enacted","cls":"other","resolver":false,"title":"Congress.gov Enacted Laws","description":"Browse enacted public and private laws from Congress.gov by congress and law type ('pub' for public laws, 'priv' for private). 'list' filters by enactment status and law type — the discovery path 'bill_lookup' does not offer. 'get' returns the origin bill record (sponsor, actions, summaries, text), with the public/private law citation on the bill's 'laws' array (e.g. {\"number\":\"118-2\",\"type\":\"Public Law\"}).","input":[{"n":"operation","t":"enum(2)","r":true},{"n":"congress","t":"integer","r":true},{"n":"lawType","t":"enum(2)"},{"n":"lawNumber","t":"integer|string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"data","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"law","t":"object"},{"n":"effectiveQuery","t":"string"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"congressgov_member_lookup","server":19,"verb":"lookup","cls":"get","resolver":false,"title":"Congress.gov Member Lookup","description":"Discover congressional members and their legislative activity. No name search. For 'list', filter by stateCode (optionally with district), by congress, or by both together (e.g., 118th Congress + CA, or CA district 12 in the 118th). Add currentMember=true to restrict to currently serving members. Once you have a bioguideId, use 'get' for full profile or 'sponsored'/'cosponsored' for their legislative portfolio.","input":[{"n":"operation","t":"enum(4)","r":true},{"n":"bioguideId","t":"string"},{"n":"congress","t":"integer"},{"n":"stateCode","t":"string"},{"n":"district","t":"integer"},{"n":"currentMember","t":"boolean"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"data","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"member","t":"object"},{"n":"effectiveQuery","t":"string"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"congressgov_committee_lookup","server":19,"verb":"lookup","cls":"get","resolver":false,"title":"Congress.gov Committee Lookup","description":"Browse congressional committees and their legislation, reports, and nominations. Committee codes follow the pattern chamber-prefix (h/s/j) + abbreviation + 2-digit number — use 'list' (with optional 'filter' for name→code resolution) to discover codes, then 'get' or drill into 'bills', 'reports', or 'nominations' ('nominations' is Senate-only). 'get' and sub-resources only need committeeCode (chamber is inferred from the prefix); pass chamber explicitly to override. The 'bills' sub-resource defaults to 'recent' order (newest update-date first); pass order='oldest' for ascending update-date order. Upstream omits bill titles from the 'bills' sub-resource — rows carry only {congress, billType, billNumber, actionDate, relationshipType, url}; chain 'congressgov_bill_lookup get' per row to retrieve titles and policy area.","input":[{"n":"operation","t":"enum(5)","r":true},{"n":"congress","t":"integer"},{"n":"chamber","t":"enum(3)"},{"n":"committeeCode","t":"string"},{"n":"filter","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"},{"n":"order","t":"enum(2)"}],"output":[{"n":"data","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"committee","t":"object"},{"n":"effectiveQuery","t":"string"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"congressgov_roll_votes","server":19,"verb":"roll","cls":"other","resolver":false,"title":"Congress.gov Roll Votes","description":"Retrieve U.S. congressional roll call votes and individual member voting positions for either chamber. Set 'chamber' to 'house' (default, from the Congress.gov API) or 'senate' (from the Senate's official LIS feed). Use 'list' to find votes by congress and session (newest first by default), 'get' for vote details (question, result, tallies, party breakdown, associated bill/nomination/amendment), or 'members' for how each member voted.","input":[{"n":"operation","t":"enum(3)","r":true},{"n":"chamber","t":"enum(2)"},{"n":"congress","t":"integer","r":true},{"n":"session","t":"integer","r":true},{"n":"voteNumber","t":"integer"},{"n":"order","t":"enum(2)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"data","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"vote","t":"object"},{"n":"effectiveQuery","t":"string"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"congressgov_senate_nominations","server":19,"verb":"senate","cls":"other","resolver":false,"title":"Congress.gov Senate Nominations","description":"Browse presidential nominations to federal positions and track the Senate confirmation process. Use 'list' to browse, 'get' for nomination detail, 'actions'/'committees'/'hearings' for confirmation pipeline data, or 'nominees' to retrieve individual appointees in a multi-nominee batch. Nominations use 'PN' (Presidential Nomination) numbering. Most nominations carry confirmation activity on the parent (e.g., PN1000); multi-part parents (e.g., PN851) carry no activity of their own — their actions, committees, hearings, and nominees live on partitioned children (PN851-1, PN851-2, …). 'get' on a parent that has no `nominees` array signals the partitioned form is needed for everything below it.","input":[{"n":"operation","t":"enum(6)","r":true},{"n":"congress","t":"integer","r":true},{"n":"nominationNumber","t":"string"},{"n":"ordinal","t":"integer"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"data","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"nomination","t":"object"},{"n":"effectiveQuery","t":"string"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"congressgov_bill_summaries","server":19,"verb":"bill","cls":"other","resolver":false,"title":"Congress.gov Bill Summaries","description":"Browse recent CRS (Congressional Research Service) bill summaries — plain-language summaries of bills at each legislative stage, useful for answering \"what's happening in Congress?\". The fromDateTime/toDateTime filters apply to the summary's update time, not the bill's action date, so results include recently rewritten summaries of older bills. Defaults to summaries updated in the last 7 days. Each item shows both the bill's action date and the summary update date. A page stops adding rows once it reaches a fixed response-character budget, and a summary longer than the per-row window arrives as an exact character window carrying textTotalCharacters/textTruncated/textNextOffset; pagination.nextOffset continues the page and a row's textNextOffset continues its text. For summaries of one specific bill — and to read a windowed summary to the end — use congressgov_bill_lookup with operation='summaries' instead.","input":[{"n":"congress","t":"integer"},{"n":"billType","t":"enum(8)"},{"n":"fromDateTime","t":"string"},{"n":"toDateTime","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"data","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"effectiveQuery","t":"string"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"congressgov_crs_reports","server":19,"verb":"crs","cls":"other","resolver":false,"title":"Congress.gov CRS Reports","description":"Browse and retrieve CRS (Congressional Research Service) reports — nonpartisan policy analyses by subject-matter experts at the Library of Congress, covering policy areas, legislative proposals, and legal questions. Report IDs use letter-number codes (e.g., R40097, RL33612, IF12345). Use 'list' to browse available reports or 'get' for full detail (authors, topics, summary, download formats).","input":[{"n":"operation","t":"enum(2)","r":true},{"n":"reportNumber","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"data","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"report","t":"object"},{"n":"effectiveQuery","t":"string"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"congressgov_committee_reports","server":19,"verb":"committee","cls":"other","resolver":false,"title":"Congress.gov Committee Reports","description":"Browse and retrieve committee reports from Congress.gov — reports accompany legislation reported out of committee and explain the bill's purpose, committee amendments, dissenting views, and the committee vote. Report types are 'hrpt' (House), 'srpt' (Senate), and 'erpt' (Executive). 'text' lists the published format URLs; 'content' then reads the report's actual text, a bounded character window at a time.","input":[{"n":"operation","t":"enum(4)","r":true},{"n":"congress","t":"integer","r":true},{"n":"reportType","t":"enum(3)"},{"n":"reportNumber","t":"integer"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"},{"n":"format","t":"enum(2)"},{"n":"characterOffset","t":"integer"},{"n":"characterLimit","t":"integer"}],"output":[{"n":"data","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"report","t":"object"},{"n":"text","t":"array<object>"},{"n":"content","t":"object"},{"n":"effectiveQuery","t":"string"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"congressgov_daily_record","server":19,"verb":"daily","cls":"other","resolver":false,"title":"Congress.gov Daily Record","description":"Browse the daily Congressional Record — floor speeches, debates, and legislative text published each day Congress is in session. Navigation is hierarchical: volumes (via 'list') → issues (via 'issues') → articles (via 'articles'). Use 'list' to find recent volumes, 'issues' to see what's in a volume, and 'articles' to access individual speeches and debate sections. 'articles' lists each article and its format URLs; 'content' then reads one article's actual text, a bounded character window at a time.","input":[{"n":"operation","t":"enum(4)","r":true},{"n":"volumeNumber","t":"integer|string"},{"n":"issueNumber","t":"integer|string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"},{"n":"articleIndex","t":"integer"},{"n":"format","t":"enum(2)"},{"n":"characterOffset","t":"integer"},{"n":"characterLimit","t":"integer"}],"output":[{"n":"data","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"content","t":"object"},{"n":"effectiveQuery","t":"string"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"courtlistener_search_opinions","server":20,"verb":"search","cls":"search","resolver":false,"title":"Search Court Opinions","description":"Full-text search across 9M+ written US court opinions with field-level filtering. Returns opinion cluster summaries with case metadata, citations, matched text snippets, and the individual opinion variants filed in each case. Supports CourtListener field syntax (caseName:\"roe v wade\", court_id:scotus, judge:\"Alito\") and boolean operators (AND, OR, NOT). Use courtlistener_lookup_courts to find court IDs. CourtListener publishes free-tier limits of 5 req/min, 50/hr, 125/day; actual limits vary by token tier.","input":[{"n":"q","t":"string","r":true},{"n":"court","t":"string"},{"n":"filed_after","t":"string"},{"n":"filed_before","t":"string"},{"n":"status","t":"enum(7)"},{"n":"order_by","t":"enum(4)"},{"n":"page_size","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"page_sizing","t":"object"},{"n":"results","t":"array<object>"},{"n":"next_cursor","t":"string"},{"n":"totalCount","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"courtlistener_get_opinion","server":20,"verb":"get","cls":"get","resolver":false,"title":"Get Court Opinion","description":"Fetch text and metadata for an opinion cluster by cluster ID. Returns majority, concurrence and dissent variants with raw HTML and readable plain text, variants_completion for source coverage, and docket_enrichment. Oversized selections return outline then page responses; continue retrieval.next_cursor as cursor with the unchanged ID/sections selection until null. Obtain cluster IDs from courtlistener_search_opinions, courtlistener_lookup_citation, or docket results.","input":[{"n":"cursor","t":"string"},{"n":"cluster_id","t":"integer","r":true},{"n":"sections","t":"array<string>"}],"output":[{"n":"retrieval","t":"object"},{"n":"variants_completion","t":"object"},{"n":"docket_enrichment","t":"object"},{"n":"cluster_id","t":"number"},{"n":"case_name","t":"string"},{"n":"case_name_full","t":"string"},{"n":"court","t":"string"},{"n":"court_id","t":"string"},{"n":"date_filed","t":"string"},{"n":"docket_id","t":"number"},{"n":"docket_number","t":"string"},{"n":"judges","t":"string"},{"n":"citations","t":"array<string>"},{"n":"cite_count","t":"number"},{"n":"precedential_status","t":"string"},{"n":"syllabus","t":"string"},{"n":"posture","t":"string"},{"n":"kind","t":"enum(3)"},{"n":"opinions","t":"array<object>"},{"n":"sections","t":"array<object>"},{"n":"retrieval_notice","t":"string"},{"n":"error","t":"object"}]},{"name":"courtlistener_get_citations","server":20,"verb":"get","cls":"get","resolver":false,"title":"Get Citation Network","description":"Retrieve the citation network for an opinion cluster. Supports two directions: \"cited_by\" (opinions that cite this one — measures precedential influence) and \"citing\" (opinions this one cites — reveals the authority chain relied on). This is the primary tool for tracing legal precedent chains. Note: the free tier supports shallow traversal — following 1–2 hops of a single case is practical; deep multi-hop analysis burns through the daily budget quickly.","input":[{"n":"cluster_id","t":"integer","r":true},{"n":"direction","t":"enum(2)"},{"n":"court","t":"string"},{"n":"filed_after","t":"string"},{"n":"page_size","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"page_sizing","t":"object"},{"n":"source_variants_completion","t":"object"},{"n":"observed_total","t":"number"},{"n":"total_is_partial","t":"boolean"},{"n":"source_cluster_id","t":"number"},{"n":"source_case_name","t":"string"},{"n":"direction","t":"enum(2)"},{"n":"results","t":"array<object>"},{"n":"next_cursor","t":"string"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"courtlistener_lookup_citation","server":20,"verb":"lookup","cls":"resolve","resolver":true,"title":"Lookup Legal Citation","description":"Resolve legal citations (e.g., \"410 U.S. 113\", \"93 S. Ct. 705\") to opinion cluster IDs and case metadata. Enables workflows that start from a known citation rather than a search query. CourtListener extracts every citation it finds in the submitted text, so passing a passage returns one entry per citation, each with its own resolution status — an unresolved or ambiguous citation is reported in the results, not raised as an error. Supports standard US reporter formats. Costs one request against CourtListener's per-citation quota, plus one ordinary request per distinct docket whose court is resolved — max_court_lookups bounds that second half (default 4, set 0 to skip court resolution entirely). CourtListener meters this endpoint by citations submitted rather than by call, so a long passage spends proportionally more of that quota. Requires authentication — uses the CourtListener /citation-lookup/ endpoint.","input":[{"n":"citation","t":"string","r":true},{"n":"max_court_lookups","t":"integer"}],"output":[{"n":"matches","t":"array<object>"},{"n":"queriedCitation","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"courtlistener_search_dockets","server":20,"verb":"search","cls":"search","resolver":false,"title":"Search Federal Court Dockets","description":"Search RECAP federal court dockets. Query terms match case name, docket number, party, and attorney names; filters narrow by party name, court, and filing date. RECAP is a crowd-sourced mirror of PACER (the federal court filing system) — coverage varies by court and date. Returns docket metadata with the parties, attorneys, and firms of record, plus up to 3 sample document entries per docket. Use courtlistener_lookup_courts to find court IDs.","input":[{"n":"q","t":"string","r":true},{"n":"court","t":"string"},{"n":"party_name","t":"string"},{"n":"filed_after","t":"string"},{"n":"filed_before","t":"string"},{"n":"page_size","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"page_sizing","t":"object"},{"n":"results","t":"array<object>"},{"n":"next_cursor","t":"string"},{"n":"coverage_note","t":"string"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"courtlistener_get_docket","server":20,"verb":"get","cls":"get","resolver":false,"title":"Get Docket","description":"Fetch full docket metadata and entry list for a single federal case by docket ID. Returns all available docket entries with document availability status. Documents with is_available=true have a RECAP-stored copy; others require a PACER account. Obtain docket IDs from courtlistener_search_dockets or from opinion results.","input":[{"n":"docket_id","t":"integer","r":true},{"n":"entries_page","t":"integer"},{"n":"entries_page_size","t":"integer"}],"output":[{"n":"page_sizing","t":"object"},{"n":"docket_id","t":"number"},{"n":"case_name","t":"string"},{"n":"case_name_full","t":"string"},{"n":"court","t":"string"},{"n":"court_id","t":"string"},{"n":"date_filed","t":"string"},{"n":"date_terminated","t":"string"},{"n":"docket_number","t":"string"},{"n":"pacer_case_id","t":"string"},{"n":"assigned_to","t":"string"},{"n":"referred_to","t":"string"},{"n":"cause","t":"string"},{"n":"jury_demand","t":"string"},{"n":"jurisdiction_type","t":"string"},{"n":"total_entries","t":"number"},{"n":"entries_page","t":"number"},{"n":"next_cursor","t":"string"},{"n":"entries","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"courtlistener_get_parties","server":20,"verb":"get","cls":"get","resolver":false,"title":"Get Parties","description":"Fetch a page of parties and their attorneys of record for a RECAP federal docket by docket ID. Returns each party's name, role (Plaintiff, Defendant, Petitioner, Respondent, etc.), and their attorneys with contact information, scoped to this docket. Costs one party request plus up to five attorney roster requests. A later roster page blocked by the local request budget returns fetched detail with capped resolution, unresolved IDs, and the remaining roster cursor. Obtain docket IDs from courtlistener_search_dockets or courtlistener_get_docket.","input":[{"n":"docket_id","t":"integer","r":true},{"n":"cursor","t":"string"},{"n":"page_size","t":"integer"}],"output":[{"n":"page_sizing","t":"object"},{"n":"attorney_resolution","t":"object"},{"n":"docket_id","t":"number"},{"n":"total_parties","t":"number"},{"n":"next_cursor","t":"string"},{"n":"parties","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"error","t":"object"}]},{"name":"courtlistener_search_judges","server":20,"verb":"search","cls":"search","resolver":false,"title":"Search Judges","description":"Search judge/person records by name, appointing president, court, political affiliation, or demographic. Returns biographical data, current position, and appointment summary. Use courtlistener_get_judge for full appointment history and education records.","input":[{"n":"q","t":"string","r":true},{"n":"appointer","t":"string"},{"n":"court","t":"string"},{"n":"political_affiliation","t":"enum(6)"},{"n":"page_size","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"page_sizing","t":"object"},{"n":"results","t":"array<object>"},{"n":"next_cursor","t":"string"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"courtlistener_get_judge","server":20,"verb":"get","cls":"get","resolver":false,"title":"Get Judge Profile","description":"Fetch full biographical profile for a single judge: positions on record — judicial appointments across all courts plus non-judicial roles — education, political affiliations, and ABA ratings. The position list is paginated upstream and walked under a page bound; the response reports whether it was truncated. Obtain person IDs from courtlistener_search_judges results.","input":[{"n":"person_id","t":"integer","r":true}],"output":[{"n":"person_id","t":"number"},{"n":"name","t":"string"},{"n":"gender","t":"string"},{"n":"dob","t":"string"},{"n":"dob_granularity","t":"string"},{"n":"dob_city","t":"string"},{"n":"dob_state","t":"string"},{"n":"dod","t":"string"},{"n":"dod_granularity","t":"string"},{"n":"fjc_id","t":"number"},{"n":"aba_ratings","t":"array<string>"},{"n":"political_affiliations","t":"array<object>"},{"n":"education","t":"array<object>"},{"n":"positions","t":"array<object>"},{"n":"positionsShown","t":"number"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"courtlistener_lookup_courts","server":20,"verb":"lookup","cls":"get","resolver":false,"title":"Lookup Courts","description":"List courts with optional filtering by jurisdiction type, active/inactive status, and scraper coverage. Primarily used to discover court IDs for use in search and filter parameters across all other courtlistener tools. Defaults to the active bench — the courts CourtListener still scrapes; pass status:'inactive' for historical courts or status:'any' for every court. A bundled snapshot returns the complete list of matching court IDs without paging whenever the filtered set fits the response budget, which covers the default bench and every jurisdiction filter. Full court records — names, citation strings, scraper status — come live from CourtListener at a fixed 20 rows per page, so pull those only when a court ID alone is not enough.","input":[{"n":"jurisdiction","t":"enum(22)"},{"n":"status","t":"enum(3)"},{"n":"has_opinion_scraper","t":"boolean"},{"n":"page","t":"integer"}],"output":[{"n":"page","t":"number"},{"n":"next_cursor","t":"string"},{"n":"courts","t":"array<object>"},{"n":"all_matching_court_ids","t":"array<string>"},{"n":"all_matching_court_ids_complete","t":"boolean"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"courtlistener_search_oral_arguments","server":20,"verb":"search","cls":"search","resolver":false,"title":"Search Oral Arguments","description":"Search appellate oral argument audio recordings — the largest public collection of oral argument audio. Returns recording metadata with two direct MP3 links per result (download_url at the originating court, local_path for CourtListener's durable copy), panel judge IDs, and transcript snippets where available. Panel judge IDs can be passed to courtlistener_get_judge for biographical context.","input":[{"n":"q","t":"string","r":true},{"n":"court","t":"string"},{"n":"argued_after","t":"string"},{"n":"argued_before","t":"string"},{"n":"page_size","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"page_sizing","t":"object"},{"n":"results","t":"array<object>"},{"n":"next_cursor","t":"string"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"courtlistener_get_oral_argument","server":20,"verb":"get","cls":"get","resolver":false,"title":"Get Oral Argument","description":"Fetch an oral argument recording by audio_id from courtlistener_search_oral_arguments. Returns case metadata, panel IDs, duration, MP3 URL, docket and available transcript. Oversized text or metadata returns outline then page responses; continue retrieval.next_cursor as cursor with the unchanged ID/sections selection until null. The argument date comes from search or the linked docket.","input":[{"n":"cursor","t":"string"},{"n":"id","t":"integer","r":true},{"n":"sections","t":"array<string>"}],"output":[{"n":"retrieval","t":"object"},{"n":"kind","t":"enum(3)"},{"n":"oral_argument_id","t":"number"},{"n":"case_name","t":"string"},{"n":"case_name_full","t":"string"},{"n":"docket_id","t":"number"},{"n":"duration_seconds","t":"number"},{"n":"download_url","t":"string"},{"n":"judges","t":"string"},{"n":"panel_ids","t":"array<number>"},{"n":"has_transcript","t":"boolean"},{"n":"transcript","t":"string"},{"n":"sections","t":"array<object>"},{"n":"retrieval_notice","t":"string"},{"n":"error","t":"object"}]},{"name":"courtlistener_search_financial_disclosures","server":20,"verb":"search","cls":"search","resolver":false,"title":"Search Financial Disclosures","description":"Search federal judicial financial disclosure filings — the annual reports judges file on investments, gifts, debts, outside positions, and income. Filter by judge (person ID from courtlistener_search_judges) and/or filing year; the year filter is applied to the fetched page only (CourtListener has no server-side year filter), so page through with cursor to reach a judge's filings for a year that fall on later pages. Returns per-filing metadata, category counts, itemized gifts, and a link to the source PDF. Line-item investments (often hundreds per filing, with coded values) are summarized as counts; the linked PDF carries the full itemization. Use this for judicial-ethics and recusal research after identifying a judge's person ID.","input":[{"n":"judge_id","t":"integer"},{"n":"year","t":"integer"},{"n":"page_size","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"page_sizing","t":"object"},{"n":"results","t":"array<object>"},{"n":"next_cursor","t":"string"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"courtlistener_get_financial_disclosure","server":20,"verb":"get","cls":"get","resolver":false,"title":"Get Financial Disclosure","description":"Fetch a judicial financial disclosure by disclosure_id from courtlistener_search_financial_disclosures. Returns metadata, counts and typed line items with coded values decoded to dollar ranges. Select categories or omit for all. Oversized selections return outline then page responses; continue retrieval.next_cursor as cursor with the unchanged ID/categories selection until null. Large individual row fields remain recoverable through text_chunks.","input":[{"n":"cursor","t":"string"},{"n":"disclosure_id","t":"integer","r":true},{"n":"categories","t":"array<enum(8)>"}],"output":[{"n":"retrieval","t":"object"},{"n":"disclosure_id","t":"number"},{"n":"person_id","t":"number"},{"n":"year","t":"number"},{"n":"report_type","t":"string"},{"n":"page_count","t":"number"},{"n":"has_been_extracted","t":"boolean"},{"n":"is_amended","t":"boolean"},{"n":"pdf_url","t":"string"},{"n":"counts","t":"object"},{"n":"kind","t":"enum(3)"},{"n":"investments","t":"array<object>"},{"n":"debts","t":"array<object>"},{"n":"positions","t":"array<object>"},{"n":"reimbursements","t":"array<object>"},{"n":"non_investment_incomes","t":"array<object>"},{"n":"spouse_incomes","t":"array<object>"},{"n":"agreements","t":"array<object>"},{"n":"gifts","t":"array<object>"},{"n":"sections","t":"array<object>"},{"n":"retrieval_notice","t":"string"},{"n":"error","t":"object"}]},{"name":"cpsc_search_recalls","server":21,"verb":"search","cls":"search","resolver":false,"title":"Search CPSC Recalls","description":"Search consumer product recalls from the CPSC (Consumer Product Safety Commission) — toys, electronics, furniture, appliances, children's products, tools, and clothing. Give at least one text filter or date bound; to browse the latest recalls without one, use cpsc_get_recent. Filters combine with AND, and a text filter matches records whose field contains every one of its words, in any order and case-insensitively. Start with title_search when you have a product in hand — CPSC titles carry the brand, product, and hazard phrasing. For hazard types (\"fire\", \"choking\", \"burn\"), use hazard_search, which matches hazard descriptions, product names, and remedy instructions. When manufacturer finds nothing, try importer, retailer, or distributor: many recalls name one of those as the responsible company. Page past limit with offset — total_found counts every match and has_more says whether more remain; a page returns fewer than limit recalls when it reaches the 64,000-byte response size budget. Pass a recall_number to cpsc_get_recall for the full record, including the complete description, all images, and incident reports. CPSC jurisdiction: consumer products only — food/drugs (FDA), motor vehicles/tires (NHTSA), boats (USCG), pesticides (EPA), and firearms (ATF) are covered by other agencies.","input":[{"n":"product_name","t":"string"},{"n":"manufacturer","t":"string"},{"n":"retailer","t":"string"},{"n":"importer","t":"string"},{"n":"distributor","t":"string"},{"n":"title_search","t":"string"},{"n":"description_search","t":"string"},{"n":"remedy","t":"string"},{"n":"hazard_search","t":"string"},{"n":"date_start","t":"const|string"},{"n":"date_end","t":"const|string"},{"n":"updated_start","t":"const|string"},{"n":"updated_end","t":"const|string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"recalls","t":"array<object>"},{"n":"total_found","t":"number"},{"n":"truncated","t":"boolean"},{"n":"offset","t":"number"},{"n":"has_more","t":"boolean"},{"n":"cpsc_jurisdiction","t":"string"},{"n":"source_note","t":"string"},{"n":"effectiveQuery","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"cpsc_get_recall","server":21,"verb":"get","cls":"get","resolver":false,"title":"Get CPSC Recall Detail","description":"Fetch the full record for one CPSC recall by recall number: hazard description, remedy instructions, every product variant, UPCs, incident and injury reports, images, and the official CPSC recall page URL. Get a recall number from cpsc_search_recalls or cpsc_get_recent. CPSC jurisdiction: consumer products only — food/drugs (FDA), motor vehicles/tires (NHTSA), boats (USCG), pesticides (EPA), and firearms (ATF) are covered by other agencies.","input":[{"n":"recall_number","t":"string","r":true}],"output":[{"n":"recall_number","t":"string"},{"n":"recall_date","t":"string"},{"n":"last_updated","t":"string"},{"n":"title","t":"string"},{"n":"description","t":"string"},{"n":"cpsc_url","t":"string"},{"n":"consumer_contact","t":"string"},{"n":"hazards","t":"array<object>"},{"n":"remedy_options","t":"array<string>"},{"n":"remedy_instructions","t":"string"},{"n":"products","t":"array<object>"},{"n":"upcs","t":"array<string>"},{"n":"injuries","t":"string"},{"n":"manufacturers","t":"array<string>"},{"n":"importers","t":"array<string>"},{"n":"retailers","t":"array<string>"},{"n":"distributors","t":"array<string>"},{"n":"manufacturer_countries","t":"array<string>"},{"n":"images","t":"array<object>"},{"n":"coordinated_recalls","t":"array<string>"},{"n":"data_quality_notes","t":"array<string>"},{"n":"cpsc_jurisdiction","t":"string"},{"n":"source_note","t":"string"},{"n":"error","t":"object"}]},{"name":"cpsc_get_recent","server":21,"verb":"get","cls":"get","resolver":false,"title":"Get Recent CPSC Recalls","description":"Fetch the most recent CPSC consumer product recalls, newest-first, from a window of the last N days (default 30, up to 365). Use for \"what's been recalled lately?\" or a product safety feed; to find recalls by product, brand, hazard, or an older date range, use cpsc_search_recalls. Page past limit with offset: narrowing days cannot page, because the window is anchored to today and shrinking it drops the oldest recalls rather than advancing past the newest. A page returns fewer than limit recalls when it reaches the 64,000-byte response size budget; has_more and the notice give the offset to continue from. Pass a recall_number to cpsc_get_recall for the full record. CPSC jurisdiction: consumer products only — food/drugs (FDA), motor vehicles/tires (NHTSA), boats (USCG), pesticides (EPA), and firearms (ATF) are covered by other agencies.","input":[{"n":"days","t":"integer"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"recalls","t":"array<object>"},{"n":"period","t":"object"},{"n":"total_found","t":"number"},{"n":"truncated","t":"boolean"},{"n":"offset","t":"number"},{"n":"has_more","t":"boolean"},{"n":"cpsc_jurisdiction","t":"string"},{"n":"source_note","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"crossref_get_work","server":22,"verb":"get","cls":"get","resolver":false,"title":"Get Work by DOI","description":"Resolves a DOI to its full Crossref metadata record: title, authors, editors, affiliations, abstract (when deposited), journal or container with the volume, issue, pages, and article number that locate the work in it, ISSNs and ISBNs, publication date, type, license, full-text links, and funder acknowledgements. The author list is paged: authorCount is the full deposited total, offset and limit select the page (25 authors by default), and when authors remain the response carries a nextOffset to pass back as offset — large-collaboration papers deposit thousands. Post-publication updates are relayed as Crossref records them: updatedBy names each correction, retraction, expression of concern, or new version issued against this work, with its notice DOI and whether the publisher or Retraction Watch recorded it, and updateTo names the works this record is itself a notice for. An absent updatedBy does not mean the work was never updated — coverage depends on those deposits. relations lists related identifiers, such as a preprint and its published version, grouped by relation type; only the Crossref-registered DOIs among them resolve through crossref_get_work. Outgoing references are reported as a count in referencesCount; the reference entries themselves come from crossref_get_references. The isReferencedByCount field reports the total incoming citation count from Crossref; the citing works themselves are not available through Crossref — use OpenAlex for citation graphs.","input":[{"n":"doi","t":"string","r":true},{"n":"offset","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"doi","t":"string"},{"n":"title","t":"string"},{"n":"subtitle","t":"string"},{"n":"type","t":"string"},{"n":"authors","t":"array<object>"},{"n":"authorCount","t":"number"},{"n":"offset","t":"number"},{"n":"editors","t":"array<object>"},{"n":"updatedBy","t":"array<object>"},{"n":"updateTo","t":"array<object>"},{"n":"relations","t":"array<object>"},{"n":"abstract","t":"string"},{"n":"isReferencedByCount","t":"number"},{"n":"referencesCount","t":"number"},{"n":"containerTitle","t":"string"},{"n":"volume","t":"string"},{"n":"issue","t":"string"},{"n":"page","t":"string"},{"n":"articleNumber","t":"string"},{"n":"issn","t":"array<string>"},{"n":"isbn","t":"array<string>"},{"n":"publisher","t":"string"},{"n":"published","t":"object"},{"n":"funders","t":"array<object>"},{"n":"licenses","t":"array<object>"},{"n":"links","t":"array<object>"},{"n":"url","t":"string"},{"n":"subject","t":"array<string>"},{"n":"language","t":"string"},{"n":"nextOffset","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"crossref_get_references","server":22,"verb":"get","cls":"get","resolver":false,"title":"Get Reference List","description":"Returns the outgoing reference list for a DOI — the works cited by this paper. Each reference includes the deposited citation string and, where Crossref has resolved it, a DOI you can look up with crossref_get_work. Results are paged: referenceCount is the full deposited total, and when more remain the response carries a nextOffset to pass back as offset. Reference list coverage varies by publisher; many older works and non-participating publishers have no indexed references. Incoming citations — the works that cite this paper — are not available through Crossref; use OpenAlex for that.","input":[{"n":"doi","t":"string","r":true},{"n":"offset","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"doi","t":"string"},{"n":"referenceCount","t":"number"},{"n":"offset","t":"number"},{"n":"references","t":"array<object>"},{"n":"nextOffset","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"crossref_search_works","server":22,"verb":"search","cls":"search","resolver":false,"title":"Search Works","description":"Searches the Crossref works index (~188M records) by free text and/or structured filters. The generic query matches loosely across all fields; scope precisely with the field-specific parameters queryTitle, queryAuthor, and queryContainerTitle, or resolve a known citation to its DOI with queryBibliographic — all combine with each other and with query. Use the filter parameter for structured filtering (object with hyphen-separated Crossref keys). Sort options: relevance, score, is-referenced-by-count, published, deposited, indexed, created. Each work returns at most authorLimit authors (25 by default) with authorCount reporting the full deposited total, since a single page of large-collaboration papers can carry tens of thousands of author entries; crossref_get_work pages the whole author list for any DOI whose list was cut. Post-publication updates ride each work as Crossref records them: updatedBy names each correction, retraction, expression of concern, or new version issued against it, and updateTo the works it is itself a notice for — an absent updatedBy does not mean the work was never updated. Offset-based paging is capped at ~10K results; use cursor=\"*\" to start cursor-based deep paging, then pass the nextCursor value from each response to continue. A walk with a query term and no sort runs by relevance, one with filters only in Crossref registration order. The walk ends on the page where nextCursor is absent — that page also carries a notice saying the list is exhausted. Cursor and offset cannot be combined.","input":[{"n":"query","t":"string"},{"n":"queryBibliographic","t":"string"},{"n":"queryTitle","t":"string"},{"n":"queryAuthor","t":"string"},{"n":"queryContainerTitle","t":"string"},{"n":"filter","t":"object"},{"n":"fields","t":"array<enum(19)>"},{"n":"rows","t":"integer"},{"n":"authorLimit","t":"integer"},{"n":"offset","t":"integer"},{"n":"cursor","t":"string"},{"n":"sort","t":"const|enum(11)"},{"n":"order","t":"const|enum(2)"}],"output":[{"n":"works","t":"array<object>"},{"n":"nextCursor","t":"string"},{"n":"totalResults","t":"number"},{"n":"returned","t":"number"},{"n":"truncated","t":"boolean"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"crossref_search_journals","server":22,"verb":"search","cls":"search","resolver":false,"title":"Search Journals","description":"Finds Crossref journal records by ISSN or title query. Provide issn for an exact single-journal lookup, or query for title-based search returning up to rows results. Title-query results page with offset — the nextOffset enrichment carries the value for the following page, up to offset + rows = 100000. Set include_works to true to also return a page of the matched journal's most recent works; that list pages two ways, in two orders. works_offset is the simple one: newest published first, capped ten times lower at works_offset + rows = 10000. works_cursor has no ceiling and reaches the whole works list, newest registered first — ordered by the date each DOI was registered with Crossref, since Crossref does not walk a publication-date sort by cursor: pass works_cursor=\"*\" on the first call, then chain the nextWorksCursor token from each response. The two cannot be combined, and a cursor walk always starts at the most recently registered work — it cannot resume from an offset. Returns journal metadata: title, publisher, ISSNs with their print or electronic form, subject areas, DOI counts (total, current, backfile), and per-category metadata deposit coverage — how completely the journal deposits abstracts, references, ORCIDs, funders, licenses, and similar metadata. An issn lookup also returns DOI counts by issued year.","input":[{"n":"query","t":"string"},{"n":"issn","t":"const|string"},{"n":"include_works","t":"boolean"},{"n":"rows","t":"integer"},{"n":"offset","t":"integer"},{"n":"works_offset","t":"integer"},{"n":"works_cursor","t":"string"}],"output":[{"n":"journals","t":"array<object>"},{"n":"recentWorks","t":"array<object>"},{"n":"journalCount","t":"number"},{"n":"journalsTotal","t":"number"},{"n":"nextOffset","t":"number"},{"n":"worksTotal","t":"number"},{"n":"nextWorksOffset","t":"number"},{"n":"nextWorksCursor","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"crossref_search_funders","server":22,"verb":"search","cls":"search","resolver":false,"title":"Search Funders","description":"Finds funders registered in the Crossref Funder Registry by name or funder DOI. Provide funder_doi for an exact single-funder lookup — the full DOI (\"10.13039/100000001\"), the bare registry ID (\"100000001\"), or either behind a doi: or https://doi.org/ prefix — or query for name-based search. Name-query results page with offset — the nextOffset enrichment carries the value for the following page, up to offset + rows = 100000. Set include_works to true to also return a page of the most recent works funded by the matched funder; that list pages two ways, in two orders. works_offset is the simple one: newest published first, capped ten times lower at works_offset + rows = 10000. works_cursor has no ceiling and reaches the whole funded-works list, newest registered first — ordered by the date each DOI was registered with Crossref, since Crossref does not walk a publication-date sort by cursor: pass works_cursor=\"*\" on the first call, then chain the nextWorksCursor token from each response. The two cannot be combined, and a cursor walk always starts at the most recently registered work — it cannot resume from an offset. This list also counts works funded by the funder's registry descendants, which a crossref_search_works filter on {\"funder\": \"10.13039/<id>\"} does not. Returns funder name, registry ID, country, and alternate names. The Funder Registry supersedes entries, and a deprecated one answers to the same names as its successor while carrying only a fraction of its works: such a record carries replacedBy with the superseding registry ID and the response carries a notice naming it. The replacement is never followed automatically — re-run with funder_doi set to that ID to get the current entry.","input":[{"n":"query","t":"string"},{"n":"funder_doi","t":"const|string"},{"n":"include_works","t":"boolean"},{"n":"rows","t":"integer"},{"n":"offset","t":"integer"},{"n":"works_offset","t":"integer"},{"n":"works_cursor","t":"string"}],"output":[{"n":"funders","t":"array<object>"},{"n":"fundedWorks","t":"array<object>"},{"n":"funderCount","t":"number"},{"n":"fundersTotal","t":"number"},{"n":"nextOffset","t":"number"},{"n":"fundedWorksTotal","t":"number"},{"n":"nextWorksOffset","t":"number"},{"n":"nextWorksCursor","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"crossref_get_member","server":22,"verb":"get","cls":"get","resolver":false,"title":"Get Member by ID","description":"Resolves a Crossref member ID to its publisher/organization record: primary name, alternate imprint names, owned DOI prefixes, registered DOI counts, a per-work-type breakdown, and per-category metadata deposit coverage. Members are the organizations that register DOIs with Crossref, so this answers \"what does this publisher publish, and how completely do they deposit metadata?\" Resolve a DOI prefix (e.g. \"10.1038\") to its member ID with crossref_get_prefix, then pass that ID here.","input":[{"n":"member_id","t":"integer","r":true}],"output":[{"n":"id","t":"number"},{"n":"primaryName","t":"string"},{"n":"names","t":"array<string>"},{"n":"location","t":"string"},{"n":"prefixes","t":"array<string>"},{"n":"counts","t":"object"},{"n":"worksByType","t":"array<object>"},{"n":"coverage","t":"array<object>"},{"n":"deposits","t":"boolean"},{"n":"depositsArticles","t":"boolean"},{"n":"error","t":"object"}]},{"name":"crossref_get_prefix","server":22,"verb":"get","cls":"get","resolver":false,"title":"Get Prefix Owner","description":"Resolves a DOI prefix — the registrant portion of a DOI, e.g. \"10.1038\" — to its owning Crossref member: the publisher name and numeric member ID. Answers \"who publishes DOIs starting with 10.1038?\" The Crossref prefix record carries only these three facts (no counts, coverage, or flags); the returned memberId chains directly into crossref_get_member for the full publisher record.","input":[{"n":"prefix","t":"string","r":true}],"output":[{"n":"prefix","t":"string"},{"n":"ownerName","t":"string"},{"n":"memberId","t":"number"},{"n":"error","t":"object"}]},{"name":"datacite_search_works","server":23,"verb":"search","cls":"search","resolver":false,"title":"Search DataCite works","description":"Search DataCite DOI metadata for datasets, software, samples, workflows, and other research outputs. Combine plain words (`text`) or OpenSearch query syntax (`query`) with filters for resource type, creator (ORCID iD or name), affiliation (ROR ID or name), affiliation country, funder (ROR ID, Crossref Funder ID, or name), subject, field of science, repository, provider, license, language, geographic place, publication-year range, and minimum citation count. Returns the total match count and compact rows — DOI, title, first creators, year, type, repository, licenses, and citation/view/download counts — plus optional top facet counts. Page numbers reach the first 10,000 ranked matches; pass cursor \"*\" to walk any result set in full, in registration order.","input":[{"n":"text","t":"string"},{"n":"query","t":"string"},{"n":"resource_types","t":"array<enum(34)>"},{"n":"creator","t":"string"},{"n":"affiliation","t":"string"},{"n":"affiliation_country","t":"string"},{"n":"funder","t":"string"},{"n":"include_child_funders","t":"boolean"},{"n":"subject","t":"string"},{"n":"fields_of_science","t":"array<enum(48)>"},{"n":"repository_ids","t":"array<string>"},{"n":"provider_ids","t":"array<string>"},{"n":"licenses","t":"array<string>"},{"n":"language","t":"string"},{"n":"place","t":"string"},{"n":"published_from","t":"integer"},{"n":"published_to","t":"integer"},{"n":"min_citations","t":"integer"},{"n":"sort","t":"enum(7)"},{"n":"limit","t":"integer"},{"n":"page","t":"integer"},{"n":"cursor","t":"string"},{"n":"include_facets","t":"boolean"}],"output":[{"n":"rankedCeilingReached","t":"boolean"},{"n":"works","t":"array<object>"},{"n":"nextPage","t":"number"},{"n":"nextCursor","t":"string"},{"n":"facets","t":"object"},{"n":"totalCount","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"sortApplied","t":"enum(7)"},{"n":"appliedFilters","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"datacite_get_work","server":23,"verb":"get","cls":"get","resolver":false,"title":"Get DataCite work","description":"Fetch the full deposited DataCite metadata for one DOI: titles, creators and contributors with ORCID iDs and ROR affiliations, publisher, dates, version, subjects, descriptions, funding, geolocations, rights, sizes and formats, related identifiers with their relation types, repository and provider, and citation, reference, version, part, view, and download counts. Long lists are capped with exact list/offset continuation recipes; select a list to retrieve later entries without losing the other metadata. datacite_trace_relations maps a bounded graph (at most 100 nodes and 1,000 edges). A DOI DataCite does not hold returns found: false naming the registration agency that does, or saying the DOI does not exist.","input":[{"n":"list","t":"enum(7)"},{"n":"offset","t":"integer"},{"n":"doi","t":"string","r":true}],"output":[{"n":"listPage","t":"object"},{"n":"found","t":"boolean"},{"n":"doi","t":"string"},{"n":"doiUrl","t":"string"},{"n":"landingUrl","t":"string"},{"n":"contentUrls","t":"array<string>"},{"n":"titles","t":"array<object>"},{"n":"creators","t":"array<object>"},{"n":"contributors","t":"array<object>"},{"n":"publisher","t":"object"},{"n":"publicationYear","t":"number"},{"n":"resourceTypeGeneral","t":"string"},{"n":"resourceType","t":"string"},{"n":"version","t":"string"},{"n":"language","t":"string"},{"n":"dates","t":"array<object>"},{"n":"subjects","t":"array<object>"},{"n":"descriptions","t":"array<object>"},{"n":"fundingReferences","t":"array<object>"},{"n":"geoLocations","t":"array<object>"},{"n":"rights","t":"array<object>"},{"n":"metadataLicense","t":"const"},{"n":"sizes","t":"array<string>"},{"n":"formats","t":"array<string>"},{"n":"alternateIdentifiers","t":"array<object>"},{"n":"relatedIdentifiers","t":"array<object>"},{"n":"relatedIdentifierCounts","t":"object"},{"n":"relatedItems","t":"array<object>"},{"n":"counts","t":"object"},{"n":"repository","t":"object"},{"n":"registered","t":"string"},{"n":"created","t":"string"},{"n":"updated","t":"string"},{"n":"schemaVersion","t":"string"},{"n":"registrationAgency","t":"string"},{"n":"missReason","t":"enum(4)"},{"n":"guidance","t":"string"},{"n":"truncatedLists","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"datacite_trace_relations","server":23,"verb":"trace","cls":"analyze","resolver":false,"title":"Trace DataCite relations","description":"Map the relation graph around one DOI — versions, parts, supplements, derivations, documentation, citations, references, and every other DataCite relation type — as nodes and directed edges that keep the relationType exactly as asserted and name each edge's source: the DOI's own metadata, other DataCite records that point at it, or DataCite Event Data (citation links harvested from Crossref and other sources). Accepts any DOI, including a journal article's DOI, to find the datasets and software it cites and those that cite, supplement, or derive from it. DataCite DOIs are hydrated with title, type, year, repository, and citation count; other identifiers stay leaf nodes. Depth 1 by default, at most 2, with a node cap (default 50, max 100) disclosed when it binds. An absent edge is not evidence that no relationship exists.","input":[{"n":"doi","t":"string","r":true},{"n":"depth","t":"integer"},{"n":"relation_types","t":"array<enum(39)>"},{"n":"event_offset","t":"integer"},{"n":"include_event_data","t":"boolean"},{"n":"max_nodes","t":"integer"}],"output":[{"n":"root","t":"object"},{"n":"nodes","t":"array<object>"},{"n":"edges","t":"array<object>"},{"n":"rootCounts","t":"object"},{"n":"coverage","t":"object"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"edgesFound","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"datacite_search_repositories","server":23,"verb":"search","cls":"search","resolver":false,"title":"Search DataCite repositories","description":"Find DataCite repository accounts by name or description text, field of science, repository type, certification (e.g. CoreTrustSeal), software platform, client type, or parent provider, or look up known repository IDs. Returns each repository's repositoryId — the value datacite_search_works takes in repository_ids — with its providerId, name, type, certificates, software, subjects, homepage, and re3data link. To rank repositories by how many works they hold on a topic, run datacite_search_works with that topic and include_facets: true; its repositories facet lists the top ten with counts.","input":[{"n":"query","t":"string"},{"n":"field_of_science","t":"enum(48)"},{"n":"repository_types","t":"array<enum(6)>"},{"n":"certificates","t":"array<enum(7)>"},{"n":"software","t":"string"},{"n":"client_type","t":"enum(4)"},{"n":"provider_id","t":"string"},{"n":"repository_ids","t":"array<string>"},{"n":"limit","t":"integer"},{"n":"page","t":"integer"}],"output":[{"n":"repositories","t":"array<object>"},{"n":"nextPage","t":"number"},{"n":"totalCount","t":"number"},{"n":"orderApplied","t":"const"},{"n":"appliedFilters","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"datacite_get_citation","server":23,"verb":"get","cls":"get","resolver":false,"title":"Get DataCite citation","description":"Render one DataCite DOI as a formatted citation in a CSL style and locale (APA in US English by default), or as a machine-readable record: CSL JSON, BibTeX, RIS, DataCite JSON or XML, Schema.org JSON-LD, Codemeta, or JATS. A style the upstream renderer does not support — an unknown id or a dependent journal style — is rejected instead of silently rendered as APA. Formatted text comes back as plain text alongside the upstream HTML markup. A DOI DataCite does not hold returns found: false naming the registration agency that does.","input":[{"n":"doi","t":"string","r":true},{"n":"format","t":"enum(9)"},{"n":"style","t":"string"},{"n":"locale","t":"string"}],"output":[{"n":"found","t":"boolean"},{"n":"doi","t":"string"},{"n":"format","t":"enum(9)"},{"n":"mediaType","t":"string"},{"n":"style","t":"string"},{"n":"locale","t":"string"},{"n":"citation","t":"string"},{"n":"citationHtml","t":"string"},{"n":"registrationAgency","t":"string"},{"n":"missReason","t":"enum(4)"},{"n":"guidance","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"datacite_list_reference","server":23,"verb":"list","cls":"list","resolver":false,"title":"DataCite reference vocabularies","description":"Look up the controlled vocabularies and identifier forms the other datacite_* tools accept: resource types, relation types with their inverses and groups, related-identifier types, date and contributor types, fields of science, common license ids, repository types, certificates, software platforms, client types, sort orders, query-syntax field paths, citation formats, verified citation styles and locales, accepted identifier forms (DOI, ORCID iD, ROR ID, Crossref Funder ID, country, language, repository, and provider ids), and coverage and rate-limit rules. Offline; makes no upstream request.","input":[{"n":"topic","t":"enum(18)","r":true}],"output":[{"n":"topic","t":"enum(18)"},{"n":"title","t":"string"},{"n":"entries","t":"array<object>"},{"n":"notes","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"devops_list_vendors","server":24,"verb":"list","cls":"list","resolver":false,"title":"Devops List Vendors","description":"List vendors in the built-in registry, optionally filtered by category or name search. Returns slug, display name, category, and status page URL for each entry. Use to discover the correct slug to pass to other tools, or to see which vendors are available before configuring a stack.","input":[{"n":"query","t":"string"},{"n":"category","t":"enum(8)"}],"output":[{"n":"vendors","t":"array<object>"},{"n":"total","t":"number"},{"n":"categories","t":"array<string>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"devops_status_check","server":24,"verb":"status","cls":"analyze","resolver":false,"title":"Devops Status Check","description":"Check the current health status for one or more vendors. Accepts registered vendor slugs (e.g., \"github\", \"aws\", \"gcp\", \"gitlab\") or raw Atlassian Statuspage base URLs. Registry entries are served by each vendor's native status API (Statuspage, Status.io, Slack, AWS Health, Google Cloud Service Health, Azure status, Azure DevOps status, Firehydrant) and normalized to one shape. Returns per-vendor operational indicator (none = all clear, minor, major, critical, maintenance = scheduled window), degraded components, and active incidents. Use mode: \"detailed\" for component lists and maintenance windows, narrowed with component_filter and bounded by component_limit. Batch-friendly — pass a list to check your full stack in one call; up to 20 vendors are checked per call, and any past the 20th come back in deferred_vendors to resend. A vendor that cannot be resolved or reached is reported in its own result row, so one bad entry never discards the rest. Every vendor with an active problem gets a pre-filled devops_suggest_action call in nextToolSuggestions.","input":[{"n":"vendors","t":"array<string>","r":true},{"n":"mode","t":"enum(2)"},{"n":"component_filter","t":"string"},{"n":"component_limit","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"deferred_vendors","t":"array<string>"},{"n":"summary","t":"object"},{"n":"nextToolSuggestions","t":"array<object>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"devops_get_incidents","server":24,"verb":"get","cls":"get","resolver":false,"title":"Devops Get Incidents","description":"Fetch incident history and scheduled maintenance windows for a vendor. Returns full incident timeline — each investigator update, affected components, and resolution. Filter by status to focus on active incidents (use before deploy), resolved history (for postmortem), or upcoming maintenance windows, and narrow further with match (words in the title or affected component names) and since/until (a start-date range) — all applied before paging, so totals count only what they keep. Page through long histories with limit + offset — a truncated result discloses the total and returns the value to page with in nextOffset. Each response is held to 64,000 bytes per surface: a page can stop short of limit at that budget (the paging fields and notice say so), and an incident too large on its own keeps only its newest updates, with updates_omitted counting the rest — full_updates: true returns them all. Some vendor feeds cap their own history: when upstreamCeiling is present the vendor API returned everything it will serve, and older incidents are not reachable at a higher offset. On Atlassian Statuspage vendors, since (a date) also reads the status page's quarterly history archive back to that date, or 24 months back at most, where the page publishes one — not on a vendor that covers only part of a shared page, such as \"sendgrid\"; those records are marked source: \"history\" and carry the title, impact, start and end times, and final update message only. An empty result, or a history read that stopped short of since, explains itself in notice.","input":[{"n":"vendor","t":"string","r":true},{"n":"filter","t":"enum(4)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"},{"n":"since","t":"const|string"},{"n":"until","t":"const|string"},{"n":"match","t":"string"},{"n":"full_updates","t":"boolean"}],"output":[{"n":"vendor","t":"string"},{"n":"name","t":"string"},{"n":"incidents","t":"array<object>"},{"n":"total_returned","t":"number"},{"n":"statuspage_url","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"totalCount","t":"number"},{"n":"nextOffset","t":"number"},{"n":"upstreamCeiling","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"devops_watch_stack","server":24,"verb":"watch","cls":"analyze","resolver":false,"title":"Devops Watch Stack","description":"Check the health of a named vendor stack — a saved list of vendors representing your infrastructure dependencies. On the first call, provide vendors to define the stack; subsequent calls can omit vendors to reuse the saved list. Stacks are saved per authenticated caller, or per local server process; a shared deployment that does not authenticate callers saves nothing, so there vendors is required on every call and the response says so. Up to 20 vendors are saved per stack and checked per call; use several stack names for a larger set. Returns a unified health snapshot with an aggregate rollup plus per-vendor detail. A vendor that cannot be resolved or reached is reported in its own row and left out of the saved stack, so one bad entry never discards the sweep. Every vendor with an active problem gets a pre-filled devops_suggest_action call in nextToolSuggestions. Ideal for morning status checks or pre-deploy sweeps. Multiple stacks can coexist (e.g., \"production\", \"staging\").","input":[{"n":"vendors","t":"array<string>"},{"n":"stack_name","t":"string"},{"n":"mode","t":"enum(2)"},{"n":"component_filter","t":"string"},{"n":"component_limit","t":"integer"}],"output":[{"n":"stack_name","t":"string"},{"n":"health","t":"enum(6)"},{"n":"summary","t":"object"},{"n":"vendors","t":"array<object>"},{"n":"deferred_vendors","t":"array<string>"},{"n":"stack_persisted","t":"boolean"},{"n":"omitted_vendors","t":"array<string>"},{"n":"checked_at","t":"string"},{"n":"nextToolSuggestions","t":"array<object>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"persistence_notice","t":"string"},{"n":"error","t":"object"}]},{"name":"devops_check_certs","server":24,"verb":"check","cls":"analyze","resolver":false,"title":"Devops Check Certs","description":"Inspect SSL/TLS certificate health for one or more domains by performing a real TLS handshake. Works for any internet-accessible domain — no vendor registry required. Reports days to expiry (flagged at < 30 days warning and < 7 days critical), certificate subject and SANs, issuer, hostname coverage, chain-trust verification, TLS protocol version negotiated (flags TLS 1.0/1.1 as insecure — a server offering only those is still inspected), cipher suite, and HSTS presence when the port answers HTTP. The handshake completes even for a certificate clients would reject, so a broken certificate is reported rather than hidden behind a connection error: a hostname mismatch surfaces in cert.hostname_verification_error and a chain-trust failure (self-signed, untrusted root) in cert.authorization_error, both status \"critical\". Non-HTTP TLS ports (IMAPS 993, SMTPS 465, DNS over TLS 853) are graded the same way, with HSTS reported as not checked. If a domain fails to connect at all, check devops_check_dns first — the name may not resolve. When a certificate fails to issue or renew, run devops_check_dns with record_types [\"CAA\"] to see which certificate authorities the domain allows.","input":[{"n":"domains","t":"array<string>","r":true},{"n":"port","t":"integer"},{"n":"timeout_ms","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"deferred_domains","t":"array<string>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"devops_check_dns","server":24,"verb":"check","cls":"analyze","resolver":false,"title":"Devops Check Dns","description":"Resolve DNS records for one or more domains across multiple public resolvers and compare what each resolver returned. Works for any domain — no vendor registry required. Reports records found (A/AAAA/CNAME/MX/TXT/NS/CAA/SOA), resolution latency per resolver, and a typed outcome per resolver and record type so \"the domain does not exist\" (nxdomain), \"the resolver could not answer\" (servfail), and \"no record of this type\" (nodata) stay distinguishable. Resolver disagreements are reported without asserting a cause: partial_resolution (some resolvers answered, others returned nothing) points at a real propagation or resolver problem, while value_variation (every resolver answered with different values) is the normal steady state for anycast and geo-steered domains. Pair with devops_check_certs when a domain resolves but TLS to it is failing.","input":[{"n":"domains","t":"array<string>","r":true},{"n":"record_types","t":"array<enum(8)>"},{"n":"resolvers","t":"array<string>"},{"n":"timeout_ms","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"deferred_domains","t":"array<string>"},{"n":"deferred_resolvers","t":"array<string>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"devops_suggest_action","server":24,"verb":"suggest","cls":"search","resolver":false,"title":"Devops Suggest Action","description":"Return an incident-response playbook tailored to a vendor degradation, with pre-filled follow-up tool calls. Synthesizes category-specific guidance (cloud, CDN, dev-platform, auth, etc.) from built-in incident knowledge and the provided context. Use after devops_status_check or devops_get_incidents surfaces a problem to determine what to investigate next.","input":[{"n":"vendor","t":"string","r":true},{"n":"incident_summary","t":"string"},{"n":"affected_components","t":"array<string>"},{"n":"your_domain","t":"string"},{"n":"vendor_indicator","t":"enum(5)"}],"output":[{"n":"vendor","t":"string"},{"n":"vendor_category","t":"string"},{"n":"guidance","t":"string"},{"n":"diagnostics_summary","t":"object"},{"n":"nextToolSuggestions","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"earthquake_get_feed","server":25,"verb":"get","cls":"get","resolver":false,"title":"Get USGS Earthquake Feed","description":"Fetch a USGS pre-computed real-time earthquake feed by magnitude tier and time window. These feeds are CDN-cached by USGS and faster and more available than the query API — use them for \"what's happening now\" queries. \"all\" includes microseisms (M<1); \"significant\" is a USGS curation based on magnitude, felt reports, and PAGER impact estimates. \"hour\" returns 0–10 events typically; \"month\" can exceed 10,000 for the \"all\" tier, so results are returned a page at a time: count is the page size, totalCount the whole feed, and nextCursor the input for the following page. The cursor is opaque and must be passed back verbatim — unlike earthquake_search_events, these feeds retain the first-read generation for up to 15 minutes, subject to capacity eviction and restart. Pages fit a 24,000-byte result budget and can be smaller than limit. An expired cursor requires a fresh first read. For historical or filtered queries, use earthquake_search_events instead.","input":[{"n":"magnitude_tier","t":"enum(5)"},{"n":"time_window","t":"enum(4)"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"count","t":"number"},{"n":"generated_at","t":"string"},{"n":"events","t":"array<object>"},{"n":"feed_url","t":"string"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"nextCursor","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"earthquake_search_events","server":25,"verb":"search","cls":"search","resolver":false,"title":"Search Earthquakes","description":"Search USGS or independent global EMSC seismic catalogs by time, magnitude, depth, area and source-specific filters. Both include non-tectonic events; event_type=\"earthquake\" excludes them on USGS. Circle and independently optional box edges intersect. Unsupported EMSC filters appear in ignoredFilters. Size queries with earthquake_count_events. Accepts limit through 20,000, fetches at most 100 candidates, and returns a 24,000-byte page. Continue with offset=nextOffset and unchanged filters/order. totalCount is the full match total when known; countUnavailable marks a failed count lookup, so the total is unknown. Paging can retrieve matches beyond 20,000.","input":[{"n":"start_time","t":"string"},{"n":"end_time","t":"string"},{"n":"min_magnitude","t":"number"},{"n":"max_magnitude","t":"number"},{"n":"latitude","t":"number"},{"n":"longitude","t":"number"},{"n":"radius_km","t":"number"},{"n":"min_latitude","t":"number"},{"n":"max_latitude","t":"number"},{"n":"min_longitude","t":"number"},{"n":"max_longitude","t":"number"},{"n":"min_depth_km","t":"number"},{"n":"max_depth_km","t":"number"},{"n":"alert_level","t":"enum(4)"},{"n":"min_felt","t":"integer"},{"n":"min_significance","t":"integer"},{"n":"event_type","t":"string"},{"n":"magnitude_type","t":"string"},{"n":"product_type","t":"string"},{"n":"review_status","t":"string"},{"n":"source","t":"enum(2)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"},{"n":"order_by","t":"enum(4)"}],"output":[{"n":"count","t":"number"},{"n":"source","t":"enum(2)"},{"n":"events","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"countUnavailable","t":"boolean"},{"n":"truncated","t":"boolean"},{"n":"nextOffset","t":"number"},{"n":"notice","t":"string"},{"n":"ignoredFilters","t":"array<string>"},{"n":"queryEcho","t":"object"},{"n":"error","t":"object"}]},{"name":"earthquake_get_event","server":25,"verb":"get","cls":"get","resolver":false,"title":"Get Earthquake Event Detail","description":"Fetch detail for a specific earthquake by USGS event ID. Returns the same normalized event a search result carries, plus a projection of the analysis products only the single-event response holds: PAGER impact alert and report link, ShakeMap peak intensity and ground motion, DYFI felt-report totals, the moment-tensor focal mechanism, landslide and liquefaction alerts, origin quality (azimuthal gap, station count, location uncertainty), and finite-fault rupture dimensions. Product groups are omitted when no projected field is available — a small automatic event typically has no detail at all, while a large reviewed one has most of it. Event IDs appear in the \"id\" field of earthquake_get_feed and earthquake_search_events results. This tool accepts USGS event IDs only.","input":[{"n":"event_id","t":"string","r":true}],"output":[{"n":"event","t":"object"},{"n":"detail","t":"object"},{"n":"error","t":"object"}]},{"name":"earthquake_count_events","server":25,"verb":"count","cls":"query","resolver":false,"title":"Count Earthquakes","description":"Count matches without event records, or size an earthquake_search_events query. Omitting start_time uses 30 days; pass explicit bounds for historical periods. queryEcho reports applied filters/window; ignoredFilters names unsupported EMSC inputs. Circle and independently optional box edges intersect. Both catalogs include non-tectonic events; event_type=\"earthquake\" excludes them on USGS. exceeds_limit marks the 20,000-event single-request threshold, not a retrieval ceiling: search supports offset paging beyond it. max_allowed is 20,000 for USGS, null for EMSC.","input":[{"n":"start_time","t":"string"},{"n":"end_time","t":"string"},{"n":"min_magnitude","t":"number"},{"n":"max_magnitude","t":"number"},{"n":"latitude","t":"number"},{"n":"longitude","t":"number"},{"n":"radius_km","t":"number"},{"n":"min_latitude","t":"number"},{"n":"max_latitude","t":"number"},{"n":"min_longitude","t":"number"},{"n":"max_longitude","t":"number"},{"n":"min_depth_km","t":"number"},{"n":"max_depth_km","t":"number"},{"n":"alert_level","t":"enum(4)"},{"n":"min_felt","t":"integer"},{"n":"min_significance","t":"integer"},{"n":"event_type","t":"string"},{"n":"magnitude_type","t":"string"},{"n":"product_type","t":"string"},{"n":"review_status","t":"string"},{"n":"source","t":"enum(2)"}],"output":[{"n":"count","t":"number"},{"n":"max_allowed","t":"number"},{"n":"source","t":"enum(2)"},{"n":"exceeds_limit","t":"boolean"},{"n":"queryEcho","t":"object"},{"n":"ignoredFilters","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"eia_browse_routes","server":26,"verb":"browse","cls":"search","resolver":false,"title":"Browse EIA Routes","description":"Lists child routes under a given path in the EIA dataset taxonomy. Start with no path to get the 14 top-level categories (electricity, petroleum, natural-gas, steo, aeo, ieo, seds, etc.), then drill into subcategories. Each result includes an isLeaf flag — leaf routes are queryable endpoints; non-leaf routes have children to browse. When isLeaf is true on the browsed path itself, switch to eia_describe_route. The first call after server start waits up to 20s for the route tree to warm, then answers from EIA directly.","input":[{"n":"path","t":"string"}],"output":[{"n":"path","t":"string"},{"n":"children","t":"array<object>"},{"n":"isLeaf","t":"boolean"},{"n":"error","t":"object"}]},{"name":"eia_describe_route","server":26,"verb":"describe","cls":"describe","resolver":false,"title":"Describe EIA Route","description":"Returns metadata for a leaf route: available facets with their valid values, data column names and units, frequency options, and date range. Call this before eia_query_route to discover valid facet IDs, facet values, column IDs, and frequency codes. Each facet returns a capped window of its values with value_count and values_truncated alongside; pass facet and values_offset to page through the rest of one facet. To find a value by name in a large facet (plant, entity, and mine IDs run to thousands), pass values_query: each facet keeps only the values whose id, name, or alias contains it, values_matched counts them, and values_offset pages the matches. A values_offset past the last value of a facet returns an empty window for it and a notice naming the count to page against. Facet values are fetched from separate EIA endpoints, merged, and cached per route; a facet whose values EIA did not return is left out of facets, named in unavailable_facets, and fetched again by the next call.","input":[{"n":"route","t":"string","r":true},{"n":"facet","t":"string"},{"n":"values_offset","t":"integer"},{"n":"values_query","t":"string"}],"output":[{"n":"route","t":"string"},{"n":"description","t":"string"},{"n":"facets","t":"array<object>"},{"n":"unavailable_facets","t":"array<string>"},{"n":"values_offset","t":"number"},{"n":"values_query","t":"string"},{"n":"data_columns","t":"array<object>"},{"n":"frequencies","t":"array<object>"},{"n":"date_range","t":"object"},{"n":"default_frequency","t":"string"},{"n":"default_date_format","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"eia_search_routes","server":26,"verb":"search","cls":"search","resolver":false,"title":"Search EIA Routes","description":"Fuzzy text search across route names, descriptions, and category labels. Resolves natural-language queries like \"electricity retail sales by state\" or \"natural gas imports\" to matching route paths. Multi-term queries are also matched term by term, so combining a commodity, a metric, and a sector — \"electricity price residential\", \"coal generation industrial sector\" — reaches the route carrying that data even when no single entry reads like the whole phrase. A query spelling the end of a route path in words — \"retail sales\" for electricity/retail-sales — ranks that route first. STEO and SEDS series names are indexed so queries like \"crude oil production forecast\" or \"motor gasoline total consumption\" also resolve, and so are facet values, so a fuel type or sector term like \"wind\" or \"anthracite coal\" resolves to the route that exposes it, with filter_hint carrying the filter to pass on. That includes the series and product names of the daily and weekly petroleum and natural-gas routes and the RTO balancing authorities, so benchmarks like \"Henry Hub\", \"WTI crude spot price\", \"Cushing\", or \"Electric Reliability Council of Texas\" resolve before any describe. A legacy APIv1 series ID as the EIA website and Excel add-in write them — \"PET.RWTC.W\", \"ELEC.PRICE.TX-RES.M\" — is resolved through the EIA series lookup into one result with its route, filter_hint, frequency, and columns, ready for eia_query_route, without waiting on the index. Results include isLeaf so you know whether to browse further or query directly. Results with score > 0.72 are weak matches — try a more specific query or use eia_browse_routes to explore the taxonomy. The first call after server start waits 20-40s while the index warms, and at most 45s; later calls answer from the built index. Check indexComplete before reading anything into a short or empty result set.","input":[{"n":"query","t":"string","r":true},{"n":"limit","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"effectiveQuery","t":"string"},{"n":"totalIndexed","t":"number"},{"n":"indexComplete","t":"boolean"},{"n":"indexGaps","t":"array<string>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"eia_query_route","server":26,"verb":"query","cls":"query","resolver":false,"title":"Query EIA Route Data","description":"Fetches data from a leaf route with optional facet filters, date range, frequency, and column selection. Use eia_describe_route first to discover valid facet IDs, facet values, column IDs, and frequency codes. Data values are strings in the response (EIA API returns all numeric values as strings, e.g. \"9.13\"); cast to DOUBLE in SQL when arithmetic is needed. Returns a preview inline and stages nothing by default — one upstream request, whatever total says. Pass stage: true to also page past the preview and stage the accumulated set as a DataCanvas table, then pass the returned dataset name to eia_dataframe_describe for its column names and eia_dataframe_query for SQL. Every dataset a tenant stages lands in the same canvas, so tables from different routes cross-join by name with nothing to thread between calls.","input":[{"n":"route","t":"string","r":true},{"n":"filters","t":"object"},{"n":"columns","t":"array<string>"},{"n":"frequency","t":"string"},{"n":"start","t":"string"},{"n":"end","t":"string"},{"n":"sort","t":"array<object>"},{"n":"offset","t":"integer"},{"n":"length","t":"integer"},{"n":"stage","t":"boolean"}],"output":[{"n":"route","t":"string"},{"n":"data","t":"array<object>"},{"n":"total","t":"number"},{"n":"returned_count","t":"number"},{"n":"next_offset","t":"number"},{"n":"frequency","t":"string"},{"n":"date_format","t":"string"},{"n":"notice","t":"string"},{"n":"dataset","t":"string"},{"n":"canvas_preview_note","t":"string"},{"n":"truncation_warning","t":"string"},{"n":"effectiveRoute","t":"string"},{"n":"totalCount","t":"number"},{"n":"returnedCount","t":"number"},{"n":"appliedFilters","t":"object"},{"n":"appliedStart","t":"string"},{"n":"appliedEnd","t":"string"},{"n":"appliedFrequency","t":"string"},{"n":"appliedColumns","t":"array<string>"},{"n":"appliedSort","t":"array<object>"},{"n":"appliedOffset","t":"number"},{"n":"appliedLength","t":"number"},{"n":"error","t":"object"}]},{"name":"eia_dataframe_describe","server":26,"verb":"dataframe","cls":"query","resolver":false,"title":"Describe EIA Dataframes","description":"List canvas dataframes (df_<id>) materialized by eia_query_route calls that passed stage: true, with provenance, expiry, row count, and column schema. Nothing is staged until such a call runs, so an empty list on a fresh session means no query has staged yet, not that staging failed. Drops entries for dataframes the canvas no longer holds before responding, so the list is always current. Pass a specific name to inspect one dataframe; omit to list all active dataframes for this tenant. A name that is not staged comes back as found=false alongside the handles that are, never as an empty list. Listing is not use: only an eia_dataframe_query statement naming a dataframe extends its expiry, so a dataframe polled with this tool and never queried still lapses on schedule.","input":[{"n":"name","t":"string"}],"output":[{"n":"requested_name","t":"string"},{"n":"found","t":"boolean"},{"n":"active_names","t":"array<string>"},{"n":"dataframes","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"eia_dataframe_query","server":26,"verb":"dataframe","cls":"query","resolver":false,"title":"Query EIA Dataframes","description":"Run a single-statement SELECT against canvas dataframes registered by eia_query_route calls that passed stage: true — a query that staged nothing leaves no table to select from. Standard DuckDB SQL — joins, aggregates, window functions, CTEs all supported. Reference dataframes by the df_<id> handles returned by eia_query_route or listed by eia_dataframe_describe. Read-only: writes, DDL, DROP, COPY, PRAGMA, ATTACH, file reads (read_* functions or a quoted file path), engine-setting functions (current_setting), and SQL built from a string (query_table) are rejected. System catalogs (information_schema, pg_catalog, sqlite_master, duckdb_*) are denied. EIA data values are VARCHAR — use CAST(col AS DOUBLE) for arithmetic and aggregation. Optional register_as chains results as a new dataframe with a fresh expiry. Every dataframe named in the statement has its expiry extended by the query. Inline rows stop at a 64,000-byte budget per response surface; a result cut short says how to page the rest from a register_as table with ORDER BY … LIMIT/OFFSET.","input":[{"n":"sql","t":"string","r":true},{"n":"register_as","t":"string"},{"n":"preview","t":"integer"},{"n":"row_limit","t":"integer"}],"output":[{"n":"columns","t":"array<string>"},{"n":"rows","t":"array<object>"},{"n":"registered_as","t":"string"},{"n":"expires_at","t":"string"},{"n":"totalRows","t":"number"},{"n":"returnedRows","t":"number"},{"n":"truncated","t":"boolean"},{"n":"executedSql","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"elevation_get_points","server":27,"verb":"get","cls":"get","resolver":false,"title":"Get Point Elevations","description":"Look up ground elevation at up to 100 coordinates in one call, in meters and feet, with the dataset and resolution behind every point. Accepts up to 1,000 submitted positions; only the first 100 are validated and sampled, with counts and next_offset identifying the unvalidated remainder. Continue with originalPoints.slice(next_offset). Inside USGS 3DEP coverage (the US and its territories, plus much of Canada and Mexico) values come from 3DEP at 1–30 m resolution. Elsewhere they come from Open Topo Data: SRTM at about 30 m on land between 60°N and 56°S, and Mapzen terrain tiles beyond SRTM's coverage and over the ocean, where values below 0 m are sea-floor depths. A point with no data in any queried dataset returns status no_data instead of failing the call.","input":[{"n":"points","t":"array<unknown>","r":true},{"n":"source","t":"enum(3)"}],"output":[{"n":"points","t":"array<object>"},{"n":"requested_points","t":"integer"},{"n":"processed_points","t":"integer"},{"n":"remaining_points","t":"integer"},{"n":"next_offset","t":"integer"},{"n":"points_with_data","t":"integer"},{"n":"source_mode","t":"enum(3)"},{"n":"vertical_reference","t":"string"},{"n":"notice","t":"string"},{"n":"attribution","t":"string"},{"n":"error","t":"object"}]},{"name":"elevation_get_profile","server":27,"verb":"get","cls":"get","resolver":false,"title":"Get Route Elevation Profile","description":"Sample terrain elevation at evenly spaced points along a route (a polyline of 2–1,000 vertices) and summarize it. Returns total distance, cumulative ascent and descent, start, end, minimum, and maximum elevation, and the steepest climb and descent grades, plus the per-sample profile with each sample's dataset unless include_samples is false. Ascent and descent are summed between samples, so they depend on the sample spacing reported in the result: denser sampling captures more small climbs, down to the source's resolution. Over open water, Mapzen samples are sea-floor depths. Each USGS 3DEP sample is a separate upstream request, so up to 250 samples take roughly 10–30 seconds.","input":[{"n":"path","t":"array<object>","r":true},{"n":"samples","t":"integer"},{"n":"include_samples","t":"boolean"},{"n":"source","t":"enum(3)"}],"output":[{"n":"samples","t":"array<object>"},{"n":"summary","t":"object"},{"n":"sample_interval_m","t":"number"},{"n":"vertices","t":"integer"},{"n":"samples_with_data","t":"integer"},{"n":"missing_samples","t":"integer"},{"n":"datasets_used","t":"object"},{"n":"resolution_m_range","t":"object"},{"n":"source_mode","t":"enum(3)"},{"n":"vertical_reference","t":"string"},{"n":"notice","t":"string"},{"n":"attribution","t":"string"},{"n":"error","t":"object"}]},{"name":"elevation_get_grid","server":27,"verb":"get","cls":"get","resolver":false,"title":"Get Elevation Grid","description":"Sample a regular grid of terrain elevations across a bounding box and report the highest and lowest sampled points, the mean elevation, and the relief, plus the full elevation matrix with each cell's dataset. Values are point samples at grid nodes (box edges included), not cell averages, so a summit between nodes is missed; to refine a candidate high or low point, call again with a smaller box around it. Over open water, Mapzen cells are sea-floor depths. Rows times columns may not exceed 250.","input":[{"n":"south","t":"number","r":true},{"n":"west","t":"number","r":true},{"n":"north","t":"number","r":true},{"n":"east","t":"number","r":true},{"n":"rows","t":"integer"},{"n":"cols","t":"integer"},{"n":"source","t":"enum(3)"}],"output":[{"n":"south","t":"number"},{"n":"west","t":"number"},{"n":"north","t":"number"},{"n":"east","t":"number"},{"n":"rows","t":"integer"},{"n":"cols","t":"integer"},{"n":"latitudes_deg","t":"array<number>"},{"n":"longitudes_deg","t":"array<number>"},{"n":"row_spacing_m","t":"number"},{"n":"col_spacing_m","t":"number"},{"n":"elevations_m","t":"array<array<number>>"},{"n":"cell_datasets","t":"array<array<enum(3)>>"},{"n":"summary","t":"object"},{"n":"cells_with_data","t":"integer"},{"n":"missing_cells","t":"integer"},{"n":"datasets_used","t":"object"},{"n":"resolution_m_range","t":"object"},{"n":"source_mode","t":"enum(3)"},{"n":"vertical_reference","t":"string"},{"n":"notice","t":"string"},{"n":"attribution","t":"string"},{"n":"error","t":"object"}]},{"name":"elevation_check_line_of_sight","server":27,"verb":"check","cls":"analyze","resolver":false,"title":"Check Terrain Line of Sight","description":"Check whether terrain blocks the straight sightline between an observer and a target, each at a height above the ground, accounting for earth curvature and atmospheric refraction. Returns a verdict of clear, blocked, or indeterminate (when samples along the line have no data), the minimum clearance and the terrain point that limits it, and the first obstruction from the observer when blocked. With frequency_mhz, it also reports first Fresnel zone clearance against the 60% free-space bar. Where Mapzen reports sea-floor depth over open water, clearance is measured to the sea surface; USGS 3DEP values below 0 m (bay floor in some bays, or dry land) count as received unless water_surface_m sets a water level. Models terrain only: buildings and vegetation are not modeled beyond what the elevation source itself captures, and a ridge narrower than the reported sample spacing can be missed. To see the terrain between the points, call elevation_get_profile on the same two points.","input":[{"n":"observer","t":"object","r":true},{"n":"target","t":"object","r":true},{"n":"observer_height_m","t":"number"},{"n":"target_height_m","t":"number"},{"n":"earth_model","t":"enum(4)"},{"n":"samples","t":"integer"},{"n":"water_surface_m","t":"number"},{"n":"frequency_mhz","t":"number"},{"n":"source","t":"enum(3)"}],"output":[{"n":"verdict","t":"enum(3)"},{"n":"distance_m","t":"number"},{"n":"observer","t":"object"},{"n":"target","t":"object"},{"n":"min_clearance_m","t":"number"},{"n":"min_clearance_ft","t":"number"},{"n":"limiting_point","t":"object"},{"n":"first_obstruction","t":"object"},{"n":"obstructed_samples","t":"integer"},{"n":"fresnel","t":"object"},{"n":"earth_model","t":"enum(4)"},{"n":"refraction_coefficient","t":"number"},{"n":"effective_earth_radius_m","t":"number"},{"n":"sample_interval_m","t":"number"},{"n":"samples","t":"integer"},{"n":"samples_with_data","t":"integer"},{"n":"missing_samples","t":"integer"},{"n":"datasets_used","t":"object"},{"n":"source_mode","t":"enum(3)"},{"n":"vertical_reference","t":"string"},{"n":"notice","t":"string"},{"n":"attribution","t":"string"},{"n":"error","t":"object"}]},{"name":"ensembl_list_species","server":28,"verb":"list","cls":"list","resolver":false,"title":"List Ensembl Species","description":"List species supported by Ensembl with display name, common name, assembly, taxon ID, and division. Required discovery step — species names like homo_sapiens are opaque to non-biologists and are the input format every other Ensembl tool expects. Use nameContains to find a species by partial name match; filter by division to select one. With no division, lists the endpoint default division — the vertebrates (~356 species on the default GRCh38 endpoint). Species are sorted by internal name and returned max_results at a time (default 50); totalCount reports every match, and when more follow, nextOffset is the offset for the next page.","input":[{"n":"division","t":"enum(5)"},{"n":"nameContains","t":"string"},{"n":"max_results","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"species","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"nextOffset","t":"number"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"ensembl_lookup_gene","server":28,"verb":"lookup","cls":"get","resolver":false,"title":"Lookup Gene","description":"Resolve a gene by symbol + species (or by stable ID) to its Ensembl ID, genomic location (chr:start-end:strand), biotype, description, and transcript list. Entry point for most workflows — the stable ID and coordinates returned here are inputs to other tools. Accepts both symbol lookup (BRCA2 + homo_sapiens) and direct ID lookup (ENSG00000139618). A symbol that is not a current gene name is matched against synonyms and former symbols (HER2 → ERBB2), reported as matchedAlias; when it maps to several genes the result is ambiguous, listing the candidates to retry by id. Supports batch submission of up to 1,000 IDs or symbols: the first 20 distinct queries are resolved, and batch.omitted names the unattempted remainder to resubmit. Provide exactly one of symbol, id, ids, or symbols. For symbol lookups species defaults to homo_sapiens (override for other organisms); for ID lookups species is not needed. Use ensembl_list_species with nameContains (a genus or common name) to find valid species names.","input":[{"n":"symbol","t":"string"},{"n":"id","t":"string"},{"n":"species","t":"string"},{"n":"ids","t":"array<string>"},{"n":"symbols","t":"array<string>"},{"n":"expand_transcripts","t":"boolean"}],"output":[{"n":"gene","t":"object"},{"n":"ambiguous","t":"object"},{"n":"batch","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"ensembl_get_sequence","server":28,"verb":"get","cls":"get","resolver":false,"title":"Get Sequence","description":"Fetch the DNA, cDNA, CDS, or protein sequence for a gene, transcript, protein, or genomic region. Returns a window of the sequence — the first 10,000 characters by default — with its stable ID, molecule type, and full length. When more follows the window, truncated is true and nextOffset is the offset to request next; walking nextOffset reconstructs the whole sequence, and max_length 0 returns everything from offset to the end. The type parameter selects which sequence is fetched: genomic (default, includes introns), cdna (spliced transcript), cds (coding sequence only), protein. For region mode, set id to a region — either species:chr:start-end (e.g. homo_sapiens:13:32315086-32400268) or a bare chr:start-end with species set (e.g. id 13:32315086-32400268, species homo_sapiens), spanning at most 10,000,000 bases; a :-1 suffix (13:32315086-32315100:-1) returns the reverse-strand sequence. Regions return genomic DNA only. Protein sequences require a transcript or protein stable ID (ENST…/ENSP…), not a gene ID — use ensembl_lookup_gene and its canonicalTranscript field first; expand_transcripts=true also supplies transcript biotypes and MANE Select accessions.","input":[{"n":"id","t":"string","r":true},{"n":"type","t":"enum(4)"},{"n":"species","t":"string"},{"n":"expand_5prime","t":"integer"},{"n":"expand_3prime","t":"integer"},{"n":"offset","t":"integer"},{"n":"max_length","t":"integer"}],"output":[{"n":"id","t":"string"},{"n":"type","t":"string"},{"n":"seq","t":"string"},{"n":"length","t":"number"},{"n":"offset","t":"number"},{"n":"truncated","t":"boolean"},{"n":"nextOffset","t":"number"},{"n":"description","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"ensembl_query_region","server":28,"verb":"query","cls":"query","resolver":false,"title":"Query Genomic Region","description":"Find genomic features overlapping a chromosomal region: genes, transcripts, variants, regulatory elements, or exons. Returns each feature with its stable ID, type, location, biotype, and name, plus the genome assembly the coordinates are on. Useful for \"what's in this locus?\" and for seeding follow-up lookups. Region format is chr:start-end with species set (e.g. 13:32315086-32400268 for the BRCA2 locus), or species:chr:start-end (e.g. homo_sapiens:13:32315086-32400268), spanning at most 5,000,000 bases. Ensembl normalizes chromosome names and canonical vertebrate output omits the chr prefix (13, not chr13); a chr-prefixed name like chr13 is also accepted. The feature parameter defaults to gene only — requesting variation in an 85 kb region matches 44,000+ entries. Explicitly include variation, regulatory, transcript, or exon only when needed. The response returns up to max_results features (default 100) while totalCount always reports the full count; set max_results to 0 for every feature, or query a smaller region to see a different slice. Exon rows carry the parent transcript ID, so the same exon appears once per transcript it belongs to.","input":[{"n":"species","t":"string"},{"n":"region","t":"string","r":true},{"n":"feature","t":"array<enum(5)>"},{"n":"biotype","t":"string"},{"n":"max_results","t":"integer"}],"output":[{"n":"features","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"region","t":"string"},{"n":"species","t":"string"},{"n":"assemblyName","t":"string"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"ensembl_predict_variant","server":28,"verb":"predict","cls":"analyze","resolver":false,"title":"Predict Variant Effect","description":"Predict the functional consequences of a sequence variant using the Ensembl Variant Effect Predictor (VEP). Accepts three input formats: HGVS notation (transcript-relative, e.g. ENST00000380152.8:c.2T>A, or genomic, e.g. 13:g.32316462T>A); region+allele (chr:start:end:strand/allele, e.g. 1:65568:65568:1/T); and a dbSNP rsID (e.g. rs334). Returns the most severe consequence term, affected transcripts and genes, impact level (HIGH/MODERATE/LOW/MODIFIER), and any colocated known variants with clinical significance. HGVS input: provide the full notation including transcript version for best results. Region+allele input: Ensembl normalizes chromosome names and canonical vertebrate output omits the chr prefix (a chr-prefixed name is also accepted). By default the response caps transcript consequences (max_transcript_consequences) and per-variant PubMed IDs (max_pubmed_ids_per_variant) to keep large VEP results compact — well-studied variants like rs334 otherwise carry 60+ consequences and 100+ citations. Truthful totals are always reported; set a cap to 0 (or include_all_colocated_pubmed=true) to retrieve the full set.","input":[{"n":"variant","t":"string","r":true},{"n":"species","t":"string"},{"n":"max_transcript_consequences","t":"integer"},{"n":"max_pubmed_ids_per_variant","t":"integer"},{"n":"include_all_colocated_pubmed","t":"boolean"}],"output":[{"n":"results","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"ensembl_get_homology","server":28,"verb":"get","cls":"get","resolver":false,"title":"Get Gene Homologs","description":"Find orthologs and/or paralogs of a gene across species. Returns each homolog's stable ID, species, homology type (ortholog_one2one, ortholog_one2many, paralog_many2many, etc.), percId (percent identity), percPos (percent positives), and taxonomy level. Essential for cross-species research — for example, \"what is the mouse equivalent of human TP53?\" or \"how conserved is BRCA2 across mammals?\". Provide either symbol + species or a stable gene ID. Target species can be filtered to a single species or left open to return all available homologs. Includes targetProteinId when available for ensembl_get_sequence with type=\"protein\". targetSymbol is best-effort: a secondary gene lookup shares five seconds across the returned rows and the remaining call deadline; missing names never remove homologs.","input":[{"n":"symbol","t":"string"},{"n":"id","t":"string"},{"n":"species","t":"string"},{"n":"target_species","t":"string"},{"n":"type","t":"enum(3)"},{"n":"max_results","t":"integer"}],"output":[{"n":"homologs","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"queryId","t":"string"},{"n":"querySpecies","t":"string"},{"n":"queryType","t":"string"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"ensembl_get_xrefs","server":28,"verb":"get","cls":"get","resolver":false,"title":"Get Cross-Database References","description":"Retrieve cross-database references for a gene or feature — HGNC, UniProt, EntrezGene, OMIM, RefSeq, Reactome, and others. Returns each xref with its database name, primary ID, display ID, and description. By default only the requested object level is queried; all_levels=true includes transcript and translation references for a gene. The dbname filter narrows this scope. IDs returned here chain to protein (pubchem via UniProt), literature (pubmed via PubMed IDs), disease (OMIM via MIM_GENE), and pathway (Reactome) resources. Requires an Ensembl stable ID — use ensembl_lookup_gene to get the ENSG… ID first. Common dbname values: HGNC, Uniprot_gn, EntrezGene, MIM_GENE, RefSeq_mRNA, RefSeq_peptide, Reactome_gene (gene pathways), Reactome (translation pathways), GO (Gene Ontology), ChEMBL.","input":[{"n":"id","t":"string","r":true},{"n":"dbname","t":"string"},{"n":"all_levels","t":"boolean"}],"output":[{"n":"xrefs","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"queriedId","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"epa_echo_search_facilities","server":29,"verb":"search","cls":"search","resolver":false,"title":"Search EPA Facilities","description":"ECHO: Search EPA-regulated facilities by location, environmental program, or compliance status across CAA, CWA, RCRA, TRI, and SDWA. Returns facility name, EPA Registry ID, coordinates, county FIPS code, per-program registration flags, five-year inspection and penalty totals, and TRI release totals. Registry IDs returned here feed epa_echo_get_facility. Supports proximity search via latitude + longitude + radius_miles. At least one geographic filter (zip_code, state, city, or a complete latitude+longitude+radius_miles triple) is required — unscoped searches time out.","input":[{"n":"zip_code","t":"string"},{"n":"state","t":"string"},{"n":"city","t":"string"},{"n":"latitude","t":"number"},{"n":"longitude","t":"number"},{"n":"radius_miles","t":"number"},{"n":"active_only","t":"boolean"},{"n":"programs","t":"array<enum(5)>"},{"n":"has_violation","t":"boolean"},{"n":"limit","t":"integer"}],"output":[{"n":"facilities","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"message","t":"string"},{"n":"error","t":"object"}]},{"name":"epa_echo_get_facility","server":29,"verb":"get","cls":"get","resolver":false,"title":"Get EPA Facility Compliance Profile","description":"ECHO: Retrieve a full compliance profile for a single EPA-regulated facility by EPA Registry ID. Returns facility metadata, ECHO's facility-level compliance status, a per-statute (CAA, CWA, RCRA, SDWA, and others ECHO tracks) compliance summary, the newest 100 inspections and other compliance monitoring records from the last five years, five years of formal enforcement actions with penalties, the latest TRI release total, and the facility's TRI facility IDs for epa_tri_get_facility_releases. Use epa_echo_search_facilities to discover Registry IDs. For area-level enforcement discovery use epa_echo_search_violations instead.","input":[{"n":"registry_id","t":"string","r":true}],"output":[{"n":"registryId","t":"string"},{"n":"name","t":"string"},{"n":"street","t":"string"},{"n":"city","t":"string"},{"n":"state","t":"string"},{"n":"zip","t":"string"},{"n":"county","t":"string"},{"n":"fipsCode","t":"string"},{"n":"latitude","t":"number"},{"n":"longitude","t":"number"},{"n":"complianceStatus","t":"string"},{"n":"programs","t":"object"},{"n":"triFacilityIds","t":"array<string>"},{"n":"triReleasesTransfersInLbs","t":"number"},{"n":"triReleasesTransfersYear","t":"number"},{"n":"compliance","t":"object"},{"n":"programCompliance","t":"array<object>"},{"n":"inspections","t":"array<object>"},{"n":"inspectionsTotal","t":"number"},{"n":"formalActions","t":"array<object>"},{"n":"airCompliance","t":"object"},{"n":"waterCompliance","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"epa_echo_search_violations","server":29,"verb":"search","cls":"search","resolver":false,"title":"Search EPA Enforcement Cases","description":"ECHO: Search EPA civil and criminal enforcement cases by state, ZIP code, regulatory program, case type, or filing-date range. Returns case identifier, programs involved, penalty assessed, settlement and filing dates, and case type. Designed for area-level violation discovery — for a single known facility's enforcement history use epa_echo_get_facility instead. At least one of state or zip_code is required.","input":[{"n":"state","t":"string"},{"n":"zip_code","t":"string"},{"n":"program","t":"enum(7)"},{"n":"case_type","t":"enum(3)"},{"n":"date_filed_start","t":"string"},{"n":"date_filed_end","t":"string"},{"n":"limit","t":"integer"}],"output":[{"n":"cases","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"message","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"epa_tri_get_facility_releases","server":29,"verb":"get","cls":"get","resolver":false,"title":"Get TRI Chemical Releases for Facility","description":"TRI: Query Toxic Release Inventory annual chemical release data for a specific facility. Returns per-chemical release records with chemical name, reporting year, routine on-site releases by medium (air, water, land, underground injection), and the one-time / non-routine release quantity. Quantities are in pounds; dioxin and dioxin-like compounds, which TRI has facilities report in grams, are converted and marked with reportedUnit. TRI data lags ~18 months — the most recent available year is typically 2 years prior to the current calendar year. facility_id is the 15-character TRI facility ID: take it from the facilityId field of epa_tri_search_releases, which also identifies top emitters across a region, or from the triFacilityIds of epa_echo_get_facility for a facility you already hold a Registry ID for. A 12-digit EPA Registry ID is a different identifier and matches no TRI records.","input":[{"n":"facility_id","t":"string","r":true},{"n":"year","t":"integer"},{"n":"chemical_name","t":"string"}],"output":[{"n":"releases","t":"array<object>"},{"n":"facilityId","t":"string"},{"n":"message","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"guidance","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"epa_tri_search_releases","server":29,"verb":"search","cls":"search","resolver":false,"title":"Search TRI Releases by Region","description":"TRI: Search Toxic Release Inventory data across facilities in a state or county, for one reporting year or, without year, every available year newest first. Returns facility name and county, TRI facility ID, chemical name, and the one-time / non-routine release quantity; set include_release_breakdown to add routine on-site releases by medium (air, water, land, and underground-injection), at the cost of a slower call. Quantities are in pounds; dioxin and dioxin-like compounds, which TRI has facilities report in grams, are converted and marked with reportedUnit. Use to identify top polluters in an area or build an environmental exposure profile. Use epa_tri_get_facility_releases for detailed release records for a single facility. TRI data lags ~18 months from the current calendar year.","input":[{"n":"state","t":"string","r":true},{"n":"county","t":"string"},{"n":"year","t":"integer"},{"n":"chemical_name","t":"string"},{"n":"limit","t":"integer"},{"n":"include_release_breakdown","t":"boolean"}],"output":[{"n":"releases","t":"array<object>"},{"n":"state","t":"string"},{"n":"message","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"epa_superfund_search_sites","server":29,"verb":"search","cls":"search","resolver":false,"title":"Search Superfund Sites","description":"Superfund: Search Superfund (CERCLA/SEMS) sites by location or NPL listing status. Returns site name, EPA site ID, NPL status (listed/not listed/proposed), cleanup status, coordinates, and county FIPS code. Accepts either state/city/ZIP or latitude+longitude+radius for proximity searches, ordered nearest first. Proximity searches exhaust candidate pages within a shared 50-second deadline; narrow the radius or add filters if the search times out. Use for \"are there Superfund sites near X\" questions.","input":[{"n":"state","t":"string"},{"n":"city","t":"string"},{"n":"zip_code","t":"string"},{"n":"latitude","t":"number"},{"n":"longitude","t":"number"},{"n":"radius_miles","t":"number"},{"n":"npl_status","t":"enum(4)"},{"n":"limit","t":"integer"}],"output":[{"n":"sites","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"message","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"epa_water_search_systems","server":29,"verb":"search","cls":"search","resolver":false,"title":"Search Drinking Water Systems","description":"Drinking water (SDWIS): Search drinking water systems (SDWIS) by state or ZIP code. Returns system name, PWSID, population served, primary water source, and activity status. With has_violation, returns only systems with an open violation — one SDWIS has not marked returned to compliance or closed out when the system was deactivated. At least one of state or zip_code is required.","input":[{"n":"state","t":"string"},{"n":"zip_code","t":"string"},{"n":"has_violation","t":"boolean"},{"n":"pws_type","t":"enum(3)"},{"n":"limit","t":"integer"}],"output":[{"n":"systems","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"message","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"epa_ejscreen_get_scores","server":29,"verb":"get","cls":"get","resolver":false,"title":"Get EJScreen Environmental Justice Indicators","description":"EJScreen: Get EJScreen environmental-justice indicators for a point and surrounding buffer. Returns the 13 EJScreen environmental indicators (PM2.5, ozone, diesel particulate, NO2, lead paint, traffic proximity, Superfund/RMP/hazardous-waste/wastewater proximity, underground storage tanks, drinking-water non-compliance, and RSEI toxic air releases) and 6 demographic indicators (people of color, low income, limited English, less than high school, under 5, over 64), each with national and state percentiles plus EJ Index values, along with the Demographic Index and Supplemental Demographic Index. Data is EJScreen v2.2 (2022) served via the community-maintained EJAM API (api.ejanalysis.com, Public Environmental Data Partners), which rehosts EJScreen after EPA discontinued public access in 2025 — not a live EPA endpoint. Provide latitude, longitude, and a buffer distance (default 1 mile, max 15 miles). Points outside US coverage return a coverage note instead of indicators.","input":[{"n":"latitude","t":"number","r":true},{"n":"longitude","t":"number","r":true},{"n":"distance","t":"number"},{"n":"unit","t":"enum(2)"}],"output":[{"n":"location","t":"object"},{"n":"environmental","t":"array<object>"},{"n":"demographic","t":"array<object>"},{"n":"demographicIndex","t":"object"},{"n":"supplementalDemographicIndex","t":"object"},{"n":"reportUrl","t":"string"},{"n":"coverage","t":"object"},{"n":"dataSource","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"epa_airnow_get_conditions","server":29,"verb":"get","cls":"get","resolver":false,"title":"Get Air Quality Index","description":"AirNow: Get current AQI observations or the issued AQI forecast for a US location from the AirNow API. Provide either zip_code or both latitude and longitude. Current mode returns the latest hourly NowCast AQI for each pollutant (PM2.5, ozone, PM10) from the closest monitor within 50 miles, with the monitor site name, site ID, and reporting agency; pollutants in one reporting area can come from different monitors. Forecast mode returns every day the reporting area's agency has issued (typically one to five), each with the AQI category, an action-day flag, and the issue date, plus the agency's forecast discussion when one exists; some agencies forecast a category without an AQI number. In forecast mode, set forecast_date to keep only the forecast valid on that date; current mode rejects it. Data are preliminary — suitable for awareness, not regulatory, trend, or enforcement decisions. Responses are cached for ~1 hour.","input":[{"n":"zip_code","t":"string"},{"n":"latitude","t":"number"},{"n":"longitude","t":"number"},{"n":"mode","t":"enum(2)"},{"n":"forecast_date","t":"string"}],"output":[{"n":"observations","t":"array<object>"},{"n":"mode","t":"string"},{"n":"message","t":"string"},{"n":"attribution","t":"string"},{"n":"error","t":"object"}]},{"name":"eurlex_lookup_celex","server":30,"verb":"lookup","cls":"resolve","resolver":true,"title":"Resolve EU Legal Citation","description":"Resolve an EU legal citation — a CELEX number, ELI URI, ECLI, or an OJ citation naming its act type and year (e.g. \"Regulation (EU) 2016/679\", \"Directive 95/46/EC\") — to its canonical CELLAR work, confirming it exists before you fetch or traverse it. Returns the work URI, confirmed CELEX number, document type, date, and the ECLI of a case that carries one. A CELEX that CELLAR holds under several works resolves to the one the EUR-Lex content resolver serves. An ECLI shared by several records (a judgment and its abstract or extract, or a joined AG opinion) resolves to the primary record with the lowest CELEX.","input":[{"n":"identifier","t":"string","r":true},{"n":"identifier_type","t":"enum(4)"}],"output":[{"n":"found","t":"boolean"},{"n":"work_uri","t":"string"},{"n":"celex_number","t":"string"},{"n":"ecli","t":"string"},{"n":"resource_type","t":"string"},{"n":"date","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"eurlex_browse_subjects","server":30,"verb":"browse","cls":"search","resolver":false,"title":"Browse EuroVoc Subjects","description":"Search the EuroVoc thesaurus, resolving a keyword into concept URIs usable in the eurovoc_concept subject filter of eurlex_search_documents. Matches both preferred and alternative (non-preferred) labels, so a common synonym reaches the concept it stands for. Returns each concept URI, its preferred label in the requested language, code, broader (parent) label, and the alternative label that matched when one did. Concepts with an exact label match come first, then those whose label or one of its words starts with the keyword, then other substring matches, each group ordered by preferred label.","input":[{"n":"keyword","t":"string","r":true},{"n":"language","t":"string"},{"n":"offset","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"concepts","t":"array<object>"},{"n":"total","t":"number"},{"n":"offset","t":"number"},{"n":"has_more","t":"boolean"},{"n":"next_offset","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"limit_clamp","t":"object"},{"n":"error","t":"object"}]},{"name":"eurlex_search_documents","server":30,"verb":"search","cls":"search","resolver":false,"title":"Search EU Documents","description":"Search EU legislation, treaties, and preparatory acts across the CELLAR corpus by document type, date range, EuroVoc subject, author institution, and in-force status. Keyword matches English titles and CELEX strings only — there is no full-text body search. Corrigenda are excluded by default so primary acts fill the page (set include_corrigenda to include them). Returns a page of CELEX numbers, work URIs, type labels, dates, and titles, newest first, each flagged with is_consolidated and is_corrigendum. At least one filter is required.","input":[{"n":"keyword","t":"string"},{"n":"document_type","t":"const|enum(8)"},{"n":"include_consolidated","t":"boolean"},{"n":"include_corrigenda","t":"boolean"},{"n":"date_from","t":"const|string"},{"n":"date_to","t":"const|string"},{"n":"eurovoc_concept","t":"const|string"},{"n":"author_institution","t":"string"},{"n":"in_force","t":"boolean"},{"n":"offset","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"documents","t":"array<object>"},{"n":"total","t":"number"},{"n":"offset","t":"number"},{"n":"has_more","t":"boolean"},{"n":"next_offset","t":"number"},{"n":"query_echo","t":"object"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"limit_clamp","t":"object"},{"n":"error","t":"object"}]},{"name":"eurlex_get_cases","server":30,"verb":"get","cls":"get","resolver":false,"title":"Search CJEU/GC Case Law","description":"Search CJEU and General Court case law — judgments, orders, and Advocate General opinions and views — by case number, court, case type, keyword, and date range. A case number reaches every judgment, order, AG opinion, and AG view filed under it. By default only these primary records are returned; derivative judicial information notices, case abstracts, summaries, and corrigenda are excluded so distinct cases fill the page (set include_derivative to include them). Keyword matches English case titles (which carry party names) and CELEX strings; there is no full-text body search. Returns each case with its CELEX number (whose sixth character names the court: C, T, or F), work URI, ECLI, date, and type, plus — parsed from the title where present — the formation, Advocate General, parties, referring court, subject matter, and case reference. The raw CELLAR title is returned only when those fields do not capture all of it.","input":[{"n":"case_number","t":"string"},{"n":"keyword","t":"string"},{"n":"court","t":"const|enum(2)"},{"n":"case_type","t":"const|enum(3)"},{"n":"include_derivative","t":"boolean"},{"n":"date_from","t":"const|string"},{"n":"date_to","t":"const|string"},{"n":"offset","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"cases","t":"array<object>"},{"n":"total","t":"number"},{"n":"offset","t":"number"},{"n":"has_more","t":"boolean"},{"n":"next_offset","t":"number"},{"n":"query_echo","t":"object"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"limit_clamp","t":"object"},{"n":"error","t":"object"}]},{"name":"eurlex_get_document","server":30,"verb":"get","cls":"get","resolver":false,"title":"Get EU Document","description":"Fetch the metadata and full text of an EU act or case-law record by CELEX number, ELI URI, or work URI. Returns structured metadata (title, date, type, author institution, Advocates General, legal basis, EuroVoc subjects, in-force status and, for an act not in force, its repealing acts, end of validity, or pending entry into force; for case law, the ECLI and the formation, referring court, subject matter, and case reference parsed from the title) plus the body as HTML, Markdown, or Formex4 XML, defaulting to English with automatic fallback. Every body returned in one call is capped at 100,000 characters — paged and full windows page onward with offset/limit; use outline: true for a heading map and select to pull specific articles, chapters, recitals, or annexes of an act, or the headed sections and operative part of a judgment or order, reading a selected section on its own from the offset and chars in selected_sections.","input":[{"n":"celex_number","t":"const|string"},{"n":"eli_uri","t":"string"},{"n":"work_uri","t":"string"},{"n":"resolve","t":"enum(2)"},{"n":"language","t":"string"},{"n":"format","t":"enum(3)"},{"n":"content_mode","t":"enum(3)"},{"n":"offset","t":"integer"},{"n":"limit","t":"integer"},{"n":"outline","t":"boolean"},{"n":"include_recitals","t":"boolean"},{"n":"select","t":"object"}],"output":[{"n":"celex_number","t":"string"},{"n":"work_uri","t":"string"},{"n":"title","t":"string"},{"n":"ecli","t":"string"},{"n":"formation","t":"string"},{"n":"referring_court","t":"string"},{"n":"subject_matter","t":"string"},{"n":"case_reference","t":"string"},{"n":"date","t":"string"},{"n":"national_measure","t":"object"},{"n":"resource_type","t":"string"},{"n":"author_institution","t":"string"},{"n":"author_institutions","t":"array<string>"},{"n":"advocates_general","t":"array<string>"},{"n":"legal_basis","t":"array<object>"},{"n":"eurovoc_subjects","t":"array<object>"},{"n":"in_force","t":"boolean"},{"n":"repealed_by","t":"array<string>"},{"n":"entry_into_force","t":"string"},{"n":"end_of_validity","t":"string"},{"n":"base_act_celex","t":"string"},{"n":"is_superseded","t":"boolean"},{"n":"current_consolidated_celex","t":"string"},{"n":"consolidated_as_of","t":"string"},{"n":"requested_celex","t":"string"},{"n":"content","t":"string"},{"n":"content_mode","t":"string"},{"n":"content_available","t":"boolean"},{"n":"content_status","t":"enum(3)"},{"n":"content_unavailability_reason","t":"enum(3)"},{"n":"content_omissions","t":"object"},{"n":"alternative_representations","t":"array<object>"},{"n":"content_offset","t":"integer"},{"n":"content_chars_returned","t":"integer"},{"n":"content_chars_total","t":"integer"},{"n":"has_more","t":"boolean"},{"n":"language","t":"string"},{"n":"requested_language","t":"string"},{"n":"language_fallback","t":"string"},{"n":"content_format","t":"string"},{"n":"outline","t":"array<object>"},{"n":"selection","t":"object"},{"n":"selected_sections","t":"array<object>"},{"n":"structure_detected","t":"boolean"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"notice","t":"string"},{"n":"limit_clamp","t":"object"},{"n":"error","t":"object"}]},{"name":"eurlex_get_relations","server":30,"verb":"get","cls":"get","resolver":false,"title":"Get CELLAR Relationship Graph","description":"Traverse the one-hop CDM relationship graph of an EU act: what it amends or is amended by, what it repeals or is repealed by (explicit and implicit), its consolidated versions, national transposition measures, its legal basis and the works adopted under it, the CJEU rulings interpreting it (or, for a ruling, the acts it interprets), and works that cite it. Returns direct relations only, paginated per relation type and direction. Requires a CELEX number or CELLAR work URI.","input":[{"n":"celex_number","t":"const|string"},{"n":"work_uri","t":"string"},{"n":"relation_types","t":"array<enum(13)>"},{"n":"member_states","t":"array<string>"},{"n":"offset","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"celex_number","t":"string"},{"n":"work_uri","t":"string"},{"n":"relations","t":"array<object>"},{"n":"total","t":"number"},{"n":"offset","t":"number"},{"n":"has_more","t":"boolean"},{"n":"next_offset","t":"number"},{"n":"requested_relation_types","t":"array<string>"},{"n":"member_states","t":"array<string>"},{"n":"empty_relation_types","t":"array<string>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"limit_clamp","t":"object"},{"n":"error","t":"object"}]},{"name":"eurlex_query_sparql","server":30,"verb":"query","cls":"query","resolver":false,"title":"Raw CELLAR SPARQL Query","description":"Run a raw, read-only SPARQL SELECT against the CELLAR Virtuoso endpoint — an escape hatch for CDM ontology traversals the curated tools do not cover. Only SELECT is accepted; update forms and ASK/CONSTRUCT/DESCRIBE are rejected before execution, and results are capped at the server row cap (100 by default). The cdm:, skos:, and xsd: prefixes are auto-injected.","input":[{"n":"sparql_query","t":"string","r":true},{"n":"timeout_hint","t":"integer"}],"output":[{"n":"bindings","t":"array<object>"},{"n":"variables","t":"array<string>"},{"n":"total","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"eurostat_search_datasets","server":31,"verb":"search","cls":"search","resolver":false,"title":"Search Eurostat Datasets","description":"Search the Eurostat catalogue by keyword. Returns matching datasets with codes, descriptions, period coverage, and theme breadcrumbs. Use this to discover dataset codes before calling eurostat_get_dataset_info, then eurostat_query_dataset for a slice of a dataset or eurostat_download_dataset for the whole of one. Results are limited to datasets and predefined tables — folders are excluded. The catalogue joins two sources: the dissemination table of contents, and the Comext host's dataflow list, which adds the DS-* collections — detailed trade by CN8, HS, SITC, BEC and CPA, and PRODCOM — filed under \"International trade in goods - detailed data (Comext)\" and \"Statistics on the production of manufactured goods (PRODCOM)\". Comext entries report a last-update date but no period coverage or observation count. A collection on neither list, such as the legacy PRODCOM DS-056120, is not disseminated and cannot be reached through this server.","input":[{"n":"query","t":"string","r":true},{"n":"limit","t":"number"},{"n":"cursor","t":"string"}],"output":[{"n":"datasets","t":"array<object>"},{"n":"nextStep","t":"string"},{"n":"query","t":"string"},{"n":"totalMatches","t":"number"},{"n":"truncated","t":"boolean"},{"n":"nextCursor","t":"string"},{"n":"comextListMissing","t":"boolean"},{"n":"catalogueLoadedAt","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"eurostat_browse_themes","server":31,"verb":"browse","cls":"search","resolver":false,"title":"Browse Eurostat Theme Hierarchy","description":"Navigate the Eurostat theme tree. Without theme_code returns the top-level theme folders (Economy, Population, Transport, etc.) — the practical starting points. With a theme_code returns its immediate children: subtheme folders and datasets in that branch. Use this for structured discovery when you know the domain but not the dataset code, or to drill down from a broad topic to a specific dataset. Pair with eurostat_search_datasets for keyword-based discovery. The tree is the dissemination table of contents plus the Comext host's DS-* collections: detailed trade under ext_go_detail (inside ext_go, \"International trade in goods\") and PRODCOM under prom (inside icts, \"Industry, trade and services\"). A collection on neither, such as the legacy PRODCOM DS-056120, is not disseminated and appears nowhere in the tree.","input":[{"n":"theme_code","t":"string"}],"output":[{"n":"items","t":"array<object>"},{"n":"parentPath","t":"array<string>"},{"n":"otherPlacements","t":"array<array<string>>"},{"n":"nextStep","t":"string"},{"n":"itemCount","t":"number"},{"n":"themeCode","t":"string"},{"n":"comextListMissing","t":"boolean"},{"n":"catalogueLoadedAt","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"eurostat_get_dataset_info","server":31,"verb":"get","cls":"get","resolver":false,"title":"Get Eurostat Dataset Info","description":"Fetch metadata for a Eurostat dataset: dimensions with valid values, time range, observation count, and last-update date. Call this before eurostat_query_dataset or eurostat_download_dataset to discover what dimension codes are valid (unit, na_item, geo, etc.); eurostat_download_dataset builds its positional filter key from this dimension list, so a filter naming a dimension absent here is rejected outright. Returns up to 10 sample values per dimension for orientation; use eurostat_get_dimension_values to list the full set for large dimensions. A DS-* code (detailed trade and PRODCOM, in any case) is read from the Comext dissemination host, which reports no period coverage or observation count, so timeRange and obsCount come back unreported; the first call on a large Comext collection downloads its full structure (23 MB for DS-045409) and takes longer, and repeat calls within the hour reuse it.","input":[{"n":"dataset_code","t":"string","r":true}],"output":[{"n":"code","t":"string"},{"n":"label","t":"string"},{"n":"dimensions","t":"array<object>"},{"n":"timeRange","t":"object"},{"n":"obsCount","t":"number"},{"n":"lastUpdated","t":"string"},{"n":"metadataUrl","t":"string"},{"n":"error","t":"object"}]},{"name":"eurostat_get_dimension_values","server":31,"verb":"get","cls":"get","resolver":false,"title":"Get Eurostat Dimension Values","description":"List the valid values for a specific dimension in a Eurostat dataset (e.g., all unit codes for nama_10_gdp, all geo codes for a regional dataset). Use this when eurostat_get_dataset_info returns more values than the 10-item sample, or to confirm exact codes before querying. For the \"geo\" dimension, use geo_level to filter by NUTS hierarchy (country, nuts1, nuts2, nuts3). An invalid code matches nothing: eurostat_query_dataset names it in unmatchedValues, or in its no_results error when the query matched nothing at all, and Eurostat rejects it as a fault on eurostat_download_dataset; use this tool to verify codes first. To find one code in a long list, such as the 37,069 CN8 product codes of DS-045409, pass filter: words its code or label contains. A long list comes back a page at a time, each response held to 64,000 bytes; a page with more after it carries nextCursor — pass it back as cursor for the next page. Pass canvas_id to also stage the whole list, whatever its length, as a two-column code/label table on that dataframe canvas: search it with SQL, or join it to a eurostat_download_dataset table, whose columns carry dimension codes only.","input":[{"n":"dataset_code","t":"string","r":true},{"n":"dimension","t":"string","r":true},{"n":"geo_level","t":"enum(5)"},{"n":"filter","t":"string"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"},{"n":"canvas_id","t":"string"}],"output":[{"n":"dimensionCode","t":"string"},{"n":"dimensionLabel","t":"string"},{"n":"geoLevel","t":"enum(5)"},{"n":"values","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"matchCount","t":"number"},{"n":"canvasId","t":"string"},{"n":"tableName","t":"string"},{"n":"stagedRowCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"nextCursor","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"eurostat_query_dataset","server":31,"verb":"query","cls":"query","resolver":false,"title":"Query Eurostat Dataset","description":"Fetch statistical data from a Eurostat dataset with dimension filters. Returns a deterministic inline prefix of decoded observations with dimension codes and labels, numeric values, an OBS_FLAG status (e.g., \"p\" = provisional, \"e\" = estimated) and a separate CONF_STATUS confidentiality marker (e.g., \"C\" = confidential, which is usually why a value is null). preview_limit controls only that prefix; filters and period controls reduce the matched result itself. Call eurostat_get_dataset_info first to discover valid dimension codes and values. Apply filters to keep the result set manageable — large unfiltered queries may trigger an async response error. Use filters.geo for specific country/region codes, or geo_level for NUTS hierarchy filtering (mutually exclusive). Use last_n_periods for the N most recent periods without knowing the end date. Matches above 5,000 observations are staged whole when this deployment runs a dataframe canvas: call eurostat_dataframe_describe first, then eurostat_dataframe_query. Matches at or below 5,000 are never staged. When the target is a whole dataset rather than a slice, eurostat_download_dataset reads the SDMX bulk endpoint instead and is the cheaper route.","input":[{"n":"dataset_code","t":"string","r":true},{"n":"filters","t":"object"},{"n":"geo_level","t":"enum(5)"},{"n":"since_period","t":"string"},{"n":"until_period","t":"string"},{"n":"last_n_periods","t":"integer"},{"n":"preview_limit","t":"number"},{"n":"lang","t":"enum(3)"},{"n":"canvas_id","t":"string"}],"output":[{"n":"datasetCode","t":"string"},{"n":"datasetLabel","t":"string"},{"n":"dimensionsUsed","t":"array<string>"},{"n":"observations","t":"array<object>"},{"n":"obsCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"canvasId","t":"string"},{"n":"tableName","t":"string"},{"n":"stagedRowCount","t":"number"},{"n":"timeRange","t":"object"},{"n":"missingObsCount","t":"number"},{"n":"unmatchedValues","t":"object"},{"n":"appliedFilters","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"eurostat_download_dataset","server":31,"verb":"download","cls":"get","resolver":false,"title":"Download Eurostat Dataset","description":"Download a Eurostat dataset in bulk through the SDMX 2.1 TSV endpoint and stage every observation as a SQL table on the dataframe canvas — the route to a whole dataset, where eurostat_query_dataset is the route to a slice of one. The TSV wire format is roughly half the bytes of the JSON-stat body eurostat_query_dataset reads, so it reaches datasets that would otherwise time out, and it is expanded here into one row per observation. Filters take the same dimension-code map eurostat_query_dataset uses and are applied server-side by Eurostat; call eurostat_get_dataset_info first for the dimension codes and eurostat_get_dimension_values for their values. Narrow with since_period/until_period rather than asking for the most recent N periods — the TSV layout keeps a column for every period whichever is requested, so a period range is what actually shrinks the response. Transfers are bounded by a decoded-byte budget enforced while streaming: complete observations within the allowed prefix are retained with budgetExceeded set; a budget too small for a usable observation fails as byte_budget_exceeded with narrowing guidance. Only preview_limit rows come back inline. When a table is staged, call eurostat_dataframe_describe first to confirm its columns, then eurostat_dataframe_query; without a canvas, rows past the preview are not retained.","input":[{"n":"dataset_code","t":"string","r":true},{"n":"filters","t":"object"},{"n":"since_period","t":"string"},{"n":"until_period","t":"string"},{"n":"preview_limit","t":"number"},{"n":"canvas_id","t":"string"}],"output":[{"n":"datasetCode","t":"string"},{"n":"dimensionsUsed","t":"array<string>"},{"n":"rowCount","t":"number"},{"n":"missingCount","t":"number"},{"n":"periodRange","t":"object"},{"n":"bytesRead","t":"number"},{"n":"compressed","t":"boolean"},{"n":"budgetExceeded","t":"boolean"},{"n":"observations","t":"array<object>"},{"n":"canvasId","t":"string"},{"n":"tableName","t":"string"},{"n":"stagedRowCount","t":"number"},{"n":"totalCount","t":"number"},{"n":"appliedQuery","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"eurostat_dataframe_describe","server":31,"verb":"dataframe","cls":"query","resolver":false,"title":"Describe Eurostat Dataframes","description":"List the tables staged on a Eurostat dataframe canvas, with their row counts and column names and types. Call this before eurostat_dataframe_query to learn the table and column names to write SQL against. The canvas_id comes from a eurostat_query_dataset or eurostat_download_dataset response that reported a staged table. Three tools stage tables, and they write different columns, so read the columns reported here rather than assuming. The two observation stagers keep every column flat: eurostat_query_dataset gives each dimension a code column named after the dimension (e.g. \"geo\") plus a label companion (e.g. \"geo_label\"); eurostat_download_dataset gives code columns only — the bulk endpoint carries no labels — plus a \"time\" column. Both write the same five measure columns — obs_value, obs_flag, obs_flag_label, conf_status, conf_status_label — carrying the same codes for the same observation, so their tables join on dimension codes and time and compare like with like. A table staged from a DS-* dataset (Comext detailed trade, PRODCOM) adds obs_value_text, holding a value Eurostat published as text, such as a PRODCOM quantity unit. eurostat_get_dimension_values, given a canvas_id, stages one dimension's value list as two columns, code and label, which labels a download's code column through a join (e.g. d.geo = g.code).","input":[{"n":"canvas_id","t":"string","r":true}],"output":[{"n":"canvasId","t":"string"},{"n":"expiresAt","t":"string"},{"n":"tables","t":"array<object>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"eurostat_dataframe_query","server":31,"verb":"dataframe","cls":"query","resolver":false,"title":"Query Eurostat Dataframes","description":"Run a read-only SQL SELECT against tables staged on a Eurostat dataframe canvas — the way to reach observations past the 5,000-row inline cap of eurostat_query_dataset and past the inline preview of a eurostat_download_dataset bulk download, and to aggregate, group, or join across staged tables without re-fetching from Eurostat. Call eurostat_dataframe_describe first for the table and column names, which differ between the tools that stage them. Only a single SELECT statement runs: statement chaining, non-SELECT verbs, and functions that read files or external data are rejected. Columns are flat — every dimension is a code column named after the dimension, the measure is obs_value, the observation flag is obs_flag / obs_flag_label and the confidentiality marker is conf_status / conf_status_label; a \"_label\" companion per dimension exists only on tables eurostat_query_dataset staged. Both observation stagers write the same five measure columns with the same codes, so join their tables on dimension codes and time and compare obs_flag or conf_status across them directly; a DS-* table also carries obs_value_text, a value published as text (e.g. a PRODCOM unit \"KG\"). A value list eurostat_get_dimension_values staged has two columns, code and label: join it to the code column of a download (e.g. JOIN df_x g ON d.geo = g.code) to label that table. Returns complete rows within the canvas row limit and 64,000 bytes per serialized response surface, retaining at least one complete row even if oversized. Nested cells render as JSON. A cut sets truncated and adds a notice: page the same deterministic SELECT over unchanged tables with a total ORDER BY and LIMIT/OFFSET, advancing by actual rowCount; restart an unordered first page sorted at offset zero. Tied keys need tie-breakers; volatile SQL and changing or expired tables cannot provide stable paging.","input":[{"n":"canvas_id","t":"string","r":true},{"n":"sql","t":"string","r":true}],"output":[{"n":"canvasId","t":"string"},{"n":"columns","t":"array<string>"},{"n":"rows","t":"array<object>"},{"n":"rowCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"fx_list_currencies","server":32,"verb":"list","cls":"list","resolver":false,"title":"Fx List Currencies","description":"List currently supported ISO 4217 currency codes with full names and as_of, the latest served rate date. Use this to disambiguate dollars (USD vs AUD vs CAD). Historical availability is checked against the requested historical snapshot or range and can include retired currencies absent from current discovery.","input":[],"output":[{"n":"currencies","t":"array<object>"},{"n":"count","t":"number"},{"n":"as_of","t":"string"},{"n":"source","t":"string"},{"n":"error","t":"object"}]},{"name":"fx_get_rates","server":32,"verb":"get","cls":"get","resolver":false,"title":"Fx Get Rates","description":"Get all available exchange rates for one base currency in a single snapshot. Useful for bulk comparison and seeding downstream tools. Returns a map of quote currency → rate, the actual snapshot date, and whether a historical date was snapped from a weekend/holiday to the prior business day. Optionally filter to a subset of quote currencies via symbols. Listing the base currency itself in symbols is accepted and returns a rate of 1 for it.","input":[{"n":"base_currency","t":"string","r":true},{"n":"date","t":"string"},{"n":"symbols","t":"array<string>"}],"output":[{"n":"base_currency","t":"string"},{"n":"rate_date","t":"string"},{"n":"rates","t":"object"},{"n":"date_snapped","t":"boolean"},{"n":"rate_type","t":"string"},{"n":"source","t":"string"},{"n":"error","t":"object"}]},{"name":"fx_get_rate","server":32,"verb":"get","cls":"get","resolver":false,"title":"Fx Get Rate","description":"Get the exchange rate for a currency pair on a given date (default: latest). Returns the rate, the actual rate date (which may differ from the requested date on weekends/holidays — daily observations may skip non-publication days), and source provenance. Cross-rates are triangulated through EUR automatically. A same-currency pair returns a rate of 1, dated to the same publication day any other pair would report for that date. Use fx_convert_currency when you want the converted amount; use this tool when you only need the rate number.","input":[{"n":"base_currency","t":"string","r":true},{"n":"quote_currency","t":"string","r":true},{"n":"date","t":"string"}],"output":[{"n":"base_currency","t":"string"},{"n":"quote_currency","t":"string"},{"n":"rate","t":"number"},{"n":"rate_date","t":"string"},{"n":"date_snapped","t":"boolean"},{"n":"rate_type","t":"string"},{"n":"source","t":"string"},{"n":"error","t":"object"}]},{"name":"fx_convert_currency","server":32,"verb":"convert","cls":"analyze","resolver":false,"title":"Fx Convert Currency","description":"Convert an amount between any two currencies at the latest or a historical rate. Returns the converted amount, the rate used, the actual rate date, and whether the date was snapped from a weekend/holiday to the prior business day. Cross-rates are triangulated through EUR automatically.","input":[{"n":"base_currency","t":"string","r":true},{"n":"quote_currency","t":"string","r":true},{"n":"amount","t":"number","r":true},{"n":"date","t":"string"}],"output":[{"n":"base_currency","t":"string"},{"n":"quote_currency","t":"string"},{"n":"base_amount","t":"number"},{"n":"quote_amount","t":"number"},{"n":"rate","t":"number"},{"n":"rate_date","t":"string"},{"n":"date_snapped","t":"boolean"},{"n":"rate_type","t":"string"},{"n":"source","t":"string"},{"n":"error","t":"object"}]},{"name":"fx_get_timeseries","server":32,"verb":"get","cls":"get","resolver":false,"title":"Fx Get Timeseries","description":"Get historical daily Frankfurter v1 rates for a currency pair over an inclusive date range. Rates use same-date EUR legs without intermediate rounding; only days with both currencies appear, and a self-pair is 1 on actual observation dates. Historical membership includes retired currencies. Empty non-publication windows succeed with a notice. summary covers every observation in the requested interval before paging or staging: unweighted arithmetic mean, extrema with earliest-date ties, endpoints and percentage change, without prescribing accounting policy. Inline rates page at 500 observations; continue with next_start_date and the same end_date. Long ranges (>90 days by default) stage when they exceed the 40,000-character preview budget. An explicit canvas_id always stages, including short or empty ranges, and fails if unavailable or unknown. Each registration returns a unique table_name and preserves older tables. spilled=true returns canvas_id and table_name; call fx_dataframe_describe then fx_dataframe_query for SQL. Without DataCanvas, omit canvas_id to page inline.","input":[{"n":"base_currency","t":"string","r":true},{"n":"quote_currency","t":"string","r":true},{"n":"start_date","t":"string","r":true},{"n":"end_date","t":"string","r":true},{"n":"canvas_id","t":"string"}],"output":[{"n":"base_currency","t":"string"},{"n":"quote_currency","t":"string"},{"n":"start_date","t":"string"},{"n":"end_date","t":"string"},{"n":"rates","t":"object"},{"n":"rate_count","t":"number"},{"n":"summary","t":"object"},{"n":"truncated","t":"boolean"},{"n":"next_start_date","t":"string"},{"n":"rate_type","t":"string"},{"n":"source","t":"string"},{"n":"spilled","t":"boolean"},{"n":"canvas_id","t":"string"},{"n":"table_name","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"fx_dataframe_describe","server":32,"verb":"dataframe","cls":"query","resolver":false,"title":"Fx Dataframe Describe","description":"List tables and columns staged on a DataCanvas from a prior fx_get_timeseries call. Required first step before fx_dataframe_query — use it to discover table names and column schemas. Requires DataCanvas, which is on by default — a deployment that turns it off does not list this tool at all, and fx_get_timeseries returns every range inline there.","input":[{"n":"canvas_id","t":"string","r":true}],"output":[{"n":"canvas_id","t":"string"},{"n":"tables","t":"array<object>"},{"n":"expires_at","t":"string"},{"n":"error","t":"object"}]},{"name":"fx_dataframe_query","server":32,"verb":"dataframe","cls":"query","resolver":false,"title":"Fx Dataframe Query","description":"Run a read-only SQL SELECT against DataCanvas tables staged by fx_get_timeseries. Supports aggregations, GROUP BY, window functions, and JOINs across multiple registered tables. Run fx_dataframe_describe first to discover table names and column schemas. Requires DataCanvas, which is on by default — a deployment that turns it off does not list this tool at all, and fx_get_timeseries returns every range inline there.","input":[{"n":"canvas_id","t":"string","r":true},{"n":"query","t":"string","r":true},{"n":"row_limit","t":"integer"}],"output":[{"n":"rows","t":"array<object>"},{"n":"row_count","t":"number"},{"n":"truncated","t":"boolean"},{"n":"canvas_id","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"faa_lookup_registration","server":33,"verb":"lookup","cls":"resolve","resolver":true,"title":"faa-aircraft-registry-mcp-server: lookup registration","description":"Decode one US civil aircraft N-number to its full registration record — aircraft make/model, engine, year manufactured, airworthiness, registration status, Mode S (ICAO 24-bit) code, and registered owner (when owner-PII redaction is off). Accepts \"N12345\" or \"12345\" (the leading N is optional). Returns ownerRedacted: true when owner details were withheld. A number that is known but inactive (deregistered or reserved) is not found here — use faa_get_registration_status for its current state.","input":[{"n":"nNumber","t":"string","r":true}],"output":[{"n":"nNumber","t":"string"},{"n":"nNumberDisplay","t":"string"},{"n":"serialNumber","t":"string"},{"n":"manufacturerModelCode","t":"string"},{"n":"engineManufacturerModelCode","t":"string"},{"n":"make","t":"string"},{"n":"model","t":"string"},{"n":"aircraftType","t":"object"},{"n":"engineType","t":"object"},{"n":"engineMake","t":"string"},{"n":"engineModel","t":"string"},{"n":"yearManufactured","t":"number"},{"n":"region","t":"object"},{"n":"lastActionDate","t":"string"},{"n":"certIssueDate","t":"string"},{"n":"airworthinessClass","t":"object"},{"n":"approvedOperationsRaw","t":"string"},{"n":"status","t":"object"},{"n":"airworthinessDate","t":"string"},{"n":"expirationDate","t":"string"},{"n":"modeSCodeOctal","t":"string"},{"n":"modeSCodeHex","t":"string"},{"n":"fractionalOwner","t":"boolean"},{"n":"uniqueId","t":"string"},{"n":"kitManufacturer","t":"string"},{"n":"kitModel","t":"string"},{"n":"owner","t":"object"},{"n":"ownerRedacted","t":"boolean"},{"n":"error","t":"object"}]},{"name":"faa_get_aircraft_type","server":33,"verb":"get","cls":"get","resolver":false,"title":"faa-aircraft-registry-mcp-server: get aircraft type","description":"Decode a 6–7-character FAA manufacturer/model/series code to aircraft specifications — manufacturer, model, aircraft category, aircraft type, engine type, number of engines, number of seats, weight class, cruise speed, and type-certificate data sheet/holder. Use faa_search_aircraft_types first to discover a code by manufacturer or model name.","input":[{"n":"code","t":"string","r":true}],"output":[{"n":"code","t":"string"},{"n":"manufacturer","t":"string"},{"n":"model","t":"string"},{"n":"aircraftType","t":"object"},{"n":"engineType","t":"object"},{"n":"category","t":"object"},{"n":"builderCertification","t":"object"},{"n":"numberOfEngines","t":"number"},{"n":"numberOfSeats","t":"number"},{"n":"weightClass","t":"string"},{"n":"weightClassLabel","t":"string"},{"n":"cruiseSpeedMph","t":"number"},{"n":"typeCertificateDataSheet","t":"string"},{"n":"typeCertificateDataHolder","t":"string"},{"n":"error","t":"object"}]},{"name":"faa_search_registrations","server":33,"verb":"search","cls":"search","resolver":false,"title":"faa-aircraft-registry-mcp-server: search registrations","description":"Search active US civil aircraft registrations by owner name, make/model, exact manufacturerModelCode, state, aircraft type, or Mode S (hex) code. Discover codes with faa_search_aircraft_types, search registrations by manufacturerModelCode, then drill into N-numbers via faa_lookup_registration. Filters are AND-combined; at least one is required. Owner-name search is unavailable when this deployment redacts owner PII — use the other filters instead. Every response reports totalCount (all matches, not just this page); when more remain, it returns nextOffset — pass it back as offset to page forward.","input":[{"n":"ownerName","t":"string"},{"n":"makeModel","t":"string"},{"n":"manufacturerModelCode","t":"string"},{"n":"state","t":"string"},{"n":"aircraftType","t":"string"},{"n":"modeSCode","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"registrations","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"nextOffset","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"faa_search_aircraft_types","server":33,"verb":"search","cls":"search","resolver":false,"title":"faa-aircraft-registry-mcp-server: search aircraft types","description":"Search FAA aircraft types by manufacturer/model name, aircraft type code, or category code to discover 6–7-character manufacturer/model/series codes and browse specifications. Pass a code to faa_get_aircraft_type for specs or faa_search_registrations as manufacturerModelCode for exact registration matches, then faa_lookup_registration for details. At least one filter is required. Every response reports totalCount (all matches, not just this page); when more remain, it returns nextOffset — pass it back as offset to page forward.","input":[{"n":"query","t":"string"},{"n":"aircraftType","t":"string"},{"n":"category","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"aircraftTypes","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"nextOffset","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"faa_get_registration_status","server":33,"verb":"get","cls":"get","resolver":false,"title":"faa-aircraft-registry-mcp-server: get registration status","description":"Resolve whether a US civil aircraft N-number is active, deregistered, reserved, or unknown, including the available registration and airworthiness status. Use this rather than faa_lookup_registration when a number may be inactive. A number that was never issued returns recordType \"unknown\" — a valid, informative answer, not an error. Accepts \"N12345\" or \"12345\".","input":[{"n":"nNumber","t":"string","r":true}],"output":[{"n":"recordType","t":"enum(4)"},{"n":"nNumber","t":"string"},{"n":"nNumberDisplay","t":"string"},{"n":"status","t":"object"},{"n":"airworthinessClass","t":"object"},{"n":"certIssueDate","t":"string"},{"n":"expirationDate","t":"string"},{"n":"airworthinessDate","t":"string"},{"n":"cancelDate","t":"string"},{"n":"serialNumber","t":"string"},{"n":"manufacturerModelCode","t":"string"},{"n":"modeSCodeHex","t":"string"},{"n":"typeReservation","t":"object"},{"n":"reserveDate","t":"string"},{"n":"expirationNoticeDate","t":"string"},{"n":"purgeDate","t":"string"},{"n":"nNumberForChange","t":"string"},{"n":"error","t":"object"}]},{"name":"faa_airmen_verify_certificate","server":34,"verb":"verify","cls":"analyze","resolver":false,"title":"Faa Airmen Verify Certificate","description":"Find releasable FAA airman records by exact Unique ID or name and read their certificate records. Use name mode to discover IDs, then use an ID for ratings or informational medical fields. Certificate type, level, rating, and type-rating filters must all match one certificate, and each match still returns all its certificates. While the operator's personal-data redaction is on (the default), name mode needs lastName and firstName, nameMatch prefix and city or ZIP filters are rejected, and city and ZIP are withheld. A missing or matching record is not a current licensing or operating-privilege determination.","input":[{"n":"mode","t":"enum(2)","r":true},{"n":"uniqueId","t":"string"},{"n":"lastName","t":"string"},{"n":"firstName","t":"string"},{"n":"state","t":"string"},{"n":"city","t":"string"},{"n":"zipCode","t":"string"},{"n":"nameMatch","t":"enum(3)"},{"n":"certificateType","t":"string"},{"n":"certificateLevel","t":"string"},{"n":"ratingCodes","t":"array<string>"},{"n":"typeRatings","t":"array<string>"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"matches","t":"array<object>"},{"n":"notice","t":"string"},{"n":"provenance","t":"object"},{"n":"appliedFilters","t":"object"},{"n":"piiRedacted","t":"boolean"},{"n":"totalCount","t":"integer"},{"n":"returnedCount","t":"integer"},{"n":"hasMore","t":"boolean"},{"n":"nextOffset","t":"integer"},{"n":"atPagingCap","t":"boolean"},{"n":"error","t":"object"}]},{"name":"faa_airmen_get_type_ratings","server":34,"verb":"get","cls":"get","resolver":false,"title":"Faa Airmen Get Type Ratings","description":"Read all source aircraft type, category/class, and instrument ratings for one FAA airman Unique ID. Get the ID from faa_airmen_verify_certificate. Ratings retain their source certificate type and level and do not establish current operating privileges.","input":[{"n":"uniqueId","t":"string","r":true}],"output":[{"n":"found","t":"boolean"},{"n":"airman","t":"object"},{"n":"certificates","t":"array<object>"},{"n":"notice","t":"string"},{"n":"provenance","t":"object"},{"n":"appliedFilters","t":"object"},{"n":"piiRedacted","t":"boolean"},{"n":"error","t":"object"}]},{"name":"faa_airmen_check_medical_status","server":34,"verb":"check","cls":"analyze","resolver":false,"title":"Faa Airmen Check Medical Status","description":"Read the FAA snapshot's informational medical class, medical dates, and BasicMed dates for one airman Unique ID. These fields are not authoritative medical certification or fitness determinations. Get the ID from faa_airmen_verify_certificate. Every call is rejected while the operator's personal-data redaction is on (the default).","input":[{"n":"uniqueId","t":"string","r":true}],"output":[{"n":"found","t":"boolean"},{"n":"airman","t":"object"},{"n":"medicalRecords","t":"array<object>"},{"n":"hasReportedMedicalFields","t":"boolean"},{"n":"disclaimer","t":"string"},{"n":"notice","t":"string"},{"n":"provenance","t":"object"},{"n":"appliedFilters","t":"object"},{"n":"piiRedacted","t":"boolean"},{"n":"error","t":"object"}]},{"name":"faa_airmen_search_instructors","server":34,"verb":"search","cls":"search","resolver":false,"title":"Faa Airmen Search Instructors","description":"Find releasable flight and ground instructor certificate records by name, state, and rating codes. Supply at least one name, state, city, ZIP, or rating filter. City and ZIP filters require operator-enabled location access. While the operator's personal-data redaction is on (the default), lastName and firstName are both required, nameMatch prefix and city or ZIP filters are rejected, and city and ZIP are withheld. Legacy expiry fields do not establish instructor currency; CFI certificates no longer expire under the December 2024 rule.","input":[{"n":"lastName","t":"string"},{"n":"firstName","t":"string"},{"n":"state","t":"string"},{"n":"city","t":"string"},{"n":"zipCode","t":"string"},{"n":"nameMatch","t":"enum(3)"},{"n":"instructorType","t":"enum(3)"},{"n":"ratingCodes","t":"array<string>"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"matches","t":"array<object>"},{"n":"notice","t":"string"},{"n":"provenance","t":"object"},{"n":"appliedFilters","t":"object"},{"n":"piiRedacted","t":"boolean"},{"n":"totalCount","t":"integer"},{"n":"returnedCount","t":"integer"},{"n":"hasMore","t":"boolean"},{"n":"nextOffset","t":"integer"},{"n":"atPagingCap","t":"boolean"},{"n":"error","t":"object"}]},{"name":"faa_airmen_verify_remote_pilot","server":34,"verb":"verify","cls":"analyze","resolver":false,"title":"Faa Airmen Verify Remote Pilot","description":"Find releasable FAA remote pilot certificate records by Unique ID or name. While the operator's personal-data redaction is on (the default), name mode needs lastName and firstName, nameMatch prefix and city or ZIP filters are rejected, and city and ZIP are withheld. Results establish certificate presence in the local snapshot; they do not establish recurrent-training currency, commercial operating authority, or current Part 107 eligibility.","input":[{"n":"mode","t":"enum(2)","r":true},{"n":"uniqueId","t":"string"},{"n":"lastName","t":"string"},{"n":"firstName","t":"string"},{"n":"state","t":"string"},{"n":"city","t":"string"},{"n":"zipCode","t":"string"},{"n":"nameMatch","t":"enum(3)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"matches","t":"array<object>"},{"n":"notice","t":"string"},{"n":"provenance","t":"object"},{"n":"appliedFilters","t":"object"},{"n":"piiRedacted","t":"boolean"},{"n":"totalCount","t":"integer"},{"n":"returnedCount","t":"integer"},{"n":"hasMore","t":"boolean"},{"n":"nextOffset","t":"integer"},{"n":"atPagingCap","t":"boolean"},{"n":"error","t":"object"}]},{"name":"faa_airmen_list_reference","server":34,"verb":"list","cls":"list","resolver":false,"title":"Faa Airmen List Reference","description":"Read FAA certificate and rating codes, observed aircraft type designators, identity guidance, medical guidance, or local mirror status. Use these references to construct lookup filters and interpret snapshot limits. Static topics work before mirror initialization.","input":[{"n":"topic","t":"enum(7)","r":true},{"n":"filter","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"topic","t":"enum(7)"},{"n":"entries","t":"array<object>"},{"n":"mirrorStatus","t":"object"},{"n":"notice","t":"string"},{"n":"provenance","t":"object"},{"n":"appliedFilters","t":"object"},{"n":"piiRedacted","t":"boolean"},{"n":"totalCount","t":"integer"},{"n":"returnedCount","t":"integer"},{"n":"hasMore","t":"boolean"},{"n":"nextOffset","t":"integer"},{"n":"atPagingCap","t":"boolean"},{"n":"error","t":"object"}]},{"name":"faa_delays_get_airport_status","server":35,"verb":"get","cls":"get","resolver":false,"title":"Get FAA Airport Status","description":"Get the current FAA traffic management status for one or more US airports: a headline status, every active event (ground stop, Ground Delay Program with its delay profile, arrival or departure delay, closure, deicing) with reason and times, and the runway configuration and airport arrival rate. Every row carries the airport's ARTCC, and its coordinates come from the feed when the airport is listed (absent when the feed omits them) and from the NASR directory otherwise; both place a departure airport against a program's includedFacilities and departureScopeNm. Airports are FAA 3-character identifiers (SEA, ORD, JFK) or their ICAO codes (KSEA, PHNL); a code that names no US airport is rejected. The FAA feed lists only airports with an active event, so a known airport absent from it returns status no_active_events, and runway configuration is available only for listed airports.","input":[{"n":"airports","t":"array<string>","r":true}],"output":[{"n":"fetchedAt","t":"string"},{"n":"airports","t":"array<object>"},{"n":"cap","t":"integer"},{"n":"processedCount","t":"integer"},{"n":"omittedAirports","t":"array<string>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"faa_delays_list_active_events","server":35,"verb":"list","cls":"list","resolver":false,"title":"List Active FAA Delay Events","description":"List every active FAA traffic management event across the National Airspace System in one call: ground stops, Ground Delay Programs, Airspace Flow Programs, arrival and departure delays, airport closures, closure NOTAMs, and deicing. Rows are sorted by severity (closures, ground stops, then GDPs and then AFPs each by average delay, arrival/departure delays by band maximum, closure NOTAMs, deicing) and carry the reason, delay figures, times, and an advisory reference for faa_delays_get_advisory. Use faa_delays_get_airport_status for the full detail of one airport, including its GDP delay profile and runway configuration.","input":[{"n":"event_types","t":"array<enum(8)>"}],"output":[{"n":"fetchedAt","t":"string"},{"n":"events","t":"array<object>"},{"n":"totalActive","t":"integer"},{"n":"shown","t":"integer"},{"n":"countsByType","t":"object"},{"n":"appliedEventTypes","t":"array<enum(8)>"},{"n":"enRouteFeed","t":"enum(3)"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"faa_delays_get_operations_plan","server":35,"verb":"get","cls":"get","resolver":false,"title":"Get FAA Operations Plan","description":"Get the FAA Command Center's current operations plan: terminal programs (possible ground stops and delay programs by airport) and en-route initiatives (route closures, severe-weather avoidance plans) expected later in the day, each with its planned UTC time and stated likelihood, plus current ATCSCC announcements. The advisory reference opens the full plan text with faa_delays_get_advisory, including active constraints and runway closures this summary omits.","input":[],"output":[{"n":"fetchedAt","t":"string"},{"n":"advisory","t":"object"},{"n":"terminalPlanned","t":"array<object>"},{"n":"enRoutePlanned","t":"array<object>"},{"n":"announcements","t":"array<object>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"faa_delays_get_advisory","server":35,"verb":"get","cls":"get","resolver":false,"title":"Get ATCSCC Advisory","description":"Get the full text of one ATCSCC advisory by its number and UTC date. faa_delays_list_advisories lists the advisories issued on a date with their numbers, and the advisory reference that faa_delays_list_active_events and faa_delays_get_airport_status return on program rows and faa_delays_get_operations_plan returns for the plan names one directly. Advisory text carries what the status feed omits: program rate by hour, delay assignment mode, scope, comments, and the operations plan's active constraints and runway closures. Advisory numbers restart at 1 each UTC day, and older advisories remain available.","input":[{"n":"advisory_number","t":"integer","r":true},{"n":"date","t":"string","r":true}],"output":[{"n":"found","t":"boolean"},{"n":"advisoryNumber","t":"integer"},{"n":"date","t":"string"},{"n":"url","t":"string"},{"n":"title","t":"string"},{"n":"controlElement","t":"string"},{"n":"subject","t":"string"},{"n":"effectiveTime","t":"string"},{"n":"sentAt","t":"string"},{"n":"text","t":"string"},{"n":"guidance","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"totalChars","t":"integer"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"faa_delays_list_advisories","server":35,"verb":"list","cls":"list","resolver":false,"title":"List ATCSCC Advisories","description":"List the ATCSCC advisories issued on one UTC date, newest first, from the FAA advisories database's per-date index: ground stops and delay programs as issued, proposed, revised, and canceled, required reroutes, flow constrained areas, operations plans, and CDM compression advisories, including those no longer active and those on past dates, which the NAS Status feed does not carry. Each row gives the advisory number, control element, subject, any further title lines (a reroute's name, constrained area, and valid period), and send time; its number and date open the full text with faa_delays_get_advisory. Narrow by categories, control_element (an airport, its ICAO code, an ARTCC, or DCC for national advisories), or query (literal case-insensitive subject/details text, such as an FCA name); filters combine before limit and offset paging.","input":[{"n":"date","t":"string"},{"n":"categories","t":"array<enum(6)>"},{"n":"control_element","t":"string"},{"n":"query","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"date","t":"string"},{"n":"advisories","t":"array<object>"},{"n":"nextOffset","t":"integer"},{"n":"appliedQuery","t":"string"},{"n":"totalCount","t":"integer"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"appliedCategories","t":"array<enum(6)>"},{"n":"appliedControlElement","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"faa_delays_list_reference","server":35,"verb":"list","cls":"list","resolver":false,"title":"List FAA Delay Reference Data","description":"Decode the vocabulary the other faa_delays tools return: event types and their fields, traffic-management terms (AAR, EDCT, FCA, GDP, SWAP), ARTCC center codes, the FAA pacing airports with time zones, and accepted identifier formats.","input":[{"n":"topic","t":"enum(5)","r":true}],"output":[{"n":"topic","t":"enum(5)"},{"n":"eventTypes","t":"array<object>"},{"n":"terms","t":"array<object>"},{"n":"artccs","t":"array<object>"},{"n":"pacingAirports","t":"array<object>"},{"n":"fetchedAt","t":"string"},{"n":"identifiers","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"faostat_list_domains","server":36,"verb":"list","cls":"list","resolver":false,"title":"faostat-mcp-server: list domains","description":"Discover FAOSTAT statistical domains (production, trade, food balances, food security, land use, agri-emissions, prices, value) with their codes, descriptions, last-update date, upstream row count, and local index status. Every query keys on a domain code from here. The `indexed` flag tells you which domains are queryable right now; un-indexed domains exist in the catalog but must be added to FAOSTAT_DOMAINS and re-synced before faostat_query_observations can read them. The catalog runs to ~69 domains with long descriptions, so responses are paged: narrow with `topic` / `indexed_only`, pass `code` to fetch one domain outright, or page with `offset` + `limit` — when the response reports `truncated`, pass the returned `nextOffset` to fetch the rest.","input":[{"n":"code","t":"string"},{"n":"topic","t":"string"},{"n":"indexed_only","t":"boolean"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"domains","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"totalMatches","t":"number"},{"n":"truncated","t":"boolean"},{"n":"nextOffset","t":"integer"},{"n":"indexedCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"faostat_resolve_codes","server":36,"verb":"resolve","cls":"resolve","resolver":true,"title":"faostat-mcp-server: resolve codes","description":"Resolve human terms to the opaque integer codes faostat_query_observations needs, within a dimension: areas (countries/regions), items (commodities), or elements (metrics like production, yield, import quantity). Pass `query` for fuzzy full-text matching (\"maize\" → item 56), `name_contains` for a substring filter, or `code` for an exact-code lookup; omit all three to list the whole dimension. Item and element results are scoped to the requested domain — only codes present in that domain's cube are returned, so a resolved code is always queryable there (areas are shared across domains). Page large listings with `offset` + `limit`: when the response reports `truncated`, pass the returned `nextOffset` to fetch the next page. Every area match is flagged `country` or `aggregate` — aggregates (World, continents, economic groupings — codes ≥ 5000 plus a few curated sub-threshold roll-ups such as China=351, which sums mainland + Taiwan + Hong Kong + Macao) double-count if summed with their member countries, so resolve before querying and exclude aggregates unless you want the regional roll-up.","input":[{"n":"domain","t":"string","r":true},{"n":"dimension","t":"enum(3)","r":true},{"n":"query","t":"string"},{"n":"name_contains","t":"string"},{"n":"code","t":"integer"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"domain","t":"string"},{"n":"dimension","t":"string"},{"n":"matches","t":"array<object>"},{"n":"totalMatches","t":"number"},{"n":"truncated","t":"boolean"},{"n":"nextOffset","t":"integer"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"faostat_query_observations","server":36,"verb":"query","cls":"query","resolver":false,"title":"faostat-mcp-server: query observations","description":"Query a FAOSTAT domain's data cube by area(s), item(s), element(s), and year range, returning observations (area, item, element, year, value, unit, and the data-quality flag). Resolve codes first with faostat_resolve_codes — the cube is unqueryable without them. Aggregate regions (World, continents, economic groupings) are EXCLUDED by default so a naive SUM does not double-count a region with its member countries; set include_aggregates=true to get the regional roll-ups, or pass explicit area_codes to query exactly what you name. Small result sets return inline; large ones spill to a DataCanvas table (returned canvas_id + table_name) — call faostat_dataframe_describe for its columns, then faostat_dataframe_query for GROUP BY / ranking / time-series analysis. Every row carries its flag — commonly A=Official, B=time-series break, E=Estimated, I=Imputed, M=Missing (value cannot exist), T=Unofficial, X=from an international organization, plus others FAOSTAT defines per domain — so honor it, treat any unrecognized flag as informational, and never assume an estimated, imputed, or unrecognized value is official.","input":[{"n":"domain","t":"string","r":true},{"n":"area_codes","t":"array<integer>"},{"n":"item_codes","t":"array<integer>"},{"n":"element_codes","t":"array<integer>"},{"n":"year_start","t":"integer"},{"n":"year_end","t":"integer"},{"n":"include_aggregates","t":"boolean"},{"n":"limit","t":"integer"},{"n":"canvas_id","t":"string"}],"output":[{"n":"domain","t":"string"},{"n":"observations","t":"array<object>"},{"n":"spilled","t":"boolean"},{"n":"truncated","t":"boolean"},{"n":"canvas_id","t":"string"},{"n":"table_name","t":"string"},{"n":"staged_row_count","t":"number"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"faostat_commodity_profile","server":36,"verb":"profile","cls":"analyze","resolver":false,"title":"faostat-mcp-server: commodity profile","description":"Assemble a global profile for one QCL item in a single call: top-producing countries, the annual production trend, and trade flows (top exporters and importers). Supply item_code or item_query; code wins when both are supplied. A query selects a unique normalized exact label, otherwise a unique relevance match; ambiguous queries require an explicit code. Each ranking uses the selected item at each country's own latest year with data, grouped by unit. The trend is returned inline as year/value points. Country-level only (aggregates excluded). QCL is required; unavailable TCL yields a production-only profile with a notice. When the merged observation set is too large to inline, it spills to a DataCanvas table (canvas_id + table_name) — call faostat_dataframe_describe for its columns, then faostat_dataframe_query for deeper SQL.","input":[{"n":"item_code","t":"integer"},{"n":"item_query","t":"string"},{"n":"year_start","t":"integer"},{"n":"year_end","t":"integer"},{"n":"top_n","t":"integer"},{"n":"canvas_id","t":"string"}],"output":[{"n":"item_query","t":"string"},{"n":"resolved_items","t":"array<object>"},{"n":"top_producers","t":"array<object>"},{"n":"top_exporters","t":"array<object>"},{"n":"top_importers","t":"array<object>"},{"n":"production_trend","t":"array<object>"},{"n":"trend_points","t":"number"},{"n":"spilled","t":"boolean"},{"n":"truncated","t":"boolean"},{"n":"canvas_id","t":"string"},{"n":"table_name","t":"string"},{"n":"staged_row_count","t":"number"},{"n":"resolvedItemCodes","t":"array<number>"},{"n":"resolvedItemMatches","t":"number"},{"n":"itemsTruncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"faostat_dataframe_query","server":36,"verb":"dataframe","cls":"query","resolver":false,"title":"faostat-mcp-server: dataframe query","description":"Run a single-statement SELECT against the canvas tables staged by faostat_query_observations and faostat_commodity_profile (table names look like faostat_xxxxxxxx). Use this for cross-country and cross-item aggregation, GROUP BY rankings, joins, and time-series analysis over the full result set the inline preview only sampled. Standard DuckDB SQL — joins, aggregates, window functions, CTEs all work. Read-only: writes, DDL, DROP, COPY, PRAGMA, ATTACH, and external-file table functions are rejected; system catalogs (information_schema, sqlite_master, duckdb_*) are denied — list staged tables via faostat_dataframe_describe. Every row carries its data-quality `flag` — commonly A=Official, B=time-series break, E=Estimated, I=Imputed, M=Missing (value cannot exist), T=Unofficial, X=from an international organization, plus others FAOSTAT defines per domain — keep it in projections, treat any unrecognized flag as informational, and never assume it is official.","input":[{"n":"canvas_id","t":"string"},{"n":"sql","t":"string","r":true},{"n":"row_limit","t":"integer"}],"output":[{"n":"columns","t":"array<string>"},{"n":"row_count","t":"number"},{"n":"rows","t":"array<object>"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"faostat_dataframe_describe","server":36,"verb":"dataframe","cls":"query","resolver":false,"title":"faostat-mcp-server: dataframe describe","description":"List the canvas tables (faostat_xxxxxxxx) staged by faostat_query_observations and faostat_commodity_profile, each with its source tool, the query parameters that produced it, creation/expiry timestamps, row count, and column schema. Call this before faostat_dataframe_query to discover the exact table and column names to reference in SQL. Tables are listed newest-first and paged: pass `name` to describe one table outright, or page with `offset` + `limit` — when the response reports `truncated`, pass the returned `nextOffset` to fetch the rest.","input":[{"n":"canvas_id","t":"string"},{"n":"name","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"tables","t":"array<object>"},{"n":"totalMatches","t":"number"},{"n":"truncated","t":"boolean"},{"n":"nextOffset","t":"integer"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"fbi_search_agencies","server":37,"verb":"search","cls":"search","resolver":false,"title":"FBI Search Agencies","description":"Find law enforcement agencies in one state and their nine-character ORI codes, the identifier agency scope needs in fbi_get_crime_estimates, fbi_get_hate_crimes, fbi_get_arrests, and fbi_get_nibrs_breakdown. Fetches the state's full FBI CDE agency directory, filters it by words in the agency name, county, and agency type, sorts by agency name then ORI, and returns one page with the total match count and next_offset for the following page. Each agency carries its type, counties, and NIBRS reporting status. A code CDE has no directory for (AS, MP, or an unrecognized code) returns zero agencies with a notice.","input":[{"n":"state_abbr","t":"string","r":true},{"n":"name_contains","t":"string"},{"n":"county","t":"string"},{"n":"agency_type","t":"enum(7)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"state_abbr","t":"string"},{"n":"total","t":"number"},{"n":"offset","t":"number"},{"n":"next_offset","t":"number"},{"n":"agencies","t":"array<object>"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"fbi_get_crime_estimates","server":37,"verb":"get","cls":"get","resolver":false,"title":"FBI Get Crime Estimates","description":"Monthly offense rates (per 100,000 participating population), raw counts, population denominators and provider reporting coverage from FBI CDE, January 1985 through the current year; current-year months past the latest data return null values. National scope omits identifiers; state requires only state_abbr; agency requires only ori. Identifiers are case-insensitive; start must be no later than end. Set include_comparisons on state or agency scope to also get the comparison rates CDE sends for the same months (an agency's state and the United States, or a state's United States). Missing coverage stays null and participation may be incomplete. Offenses: violent-crime, property-crime, robbery, burglary, larceny, motor-vehicle-theft, arson, aggravated-assault, rape, homicide.","input":[{"n":"scope","t":"enum(3)","r":true},{"n":"offense","t":"enum(10)","r":true},{"n":"state_abbr","t":"string"},{"n":"ori","t":"string"},{"n":"from_year","t":"integer","r":true},{"n":"from_month","t":"integer"},{"n":"to_year","t":"integer","r":true},{"n":"to_month","t":"integer"},{"n":"include_comparisons","t":"boolean"}],"output":[{"n":"scope","t":"string"},{"n":"offense","t":"string"},{"n":"entity_name","t":"string"},{"n":"state_abbr","t":"string"},{"n":"ori","t":"string"},{"n":"from","t":"string"},{"n":"to","t":"string"},{"n":"months","t":"array<object>"},{"n":"total_months","t":"number"},{"n":"data_last_updated","t":"string"},{"n":"max_data_date","t":"string"},{"n":"comparisons","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"fbi_get_nibrs_breakdown","server":37,"verb":"get","cls":"get","resolver":false,"title":"FBI Get NIBRS Breakdown","description":"NIBRS incident breakdowns reported to FBI CDE for one offense, for the nation, a state, or an agency, summed over a month window from January 1991 through the current year. Returns victim counts by age, sex, race, location, ethnicity, and relationship to the offender; offender counts by age, sex, race, and ethnicity; and offense counts by weapon and related offense, with every category CDE reports, zeros included. Each dimension is tallied separately and their sums can differ, so no dimension stands in for another's total. offense is required (codes are listed on the field). National scope omits identifiers; state requires only state_abbr; agency requires only ori (look it up with fbi_search_agencies). When CDE has no value for any category, as for an unrecognized state or ORI, a window with no NIBRS data, or an offense with no reported incidents in the window, the call fails with no_data.","input":[{"n":"scope","t":"enum(3)","r":true},{"n":"offense","t":"enum(71)","r":true},{"n":"state_abbr","t":"string"},{"n":"ori","t":"string"},{"n":"from_year","t":"integer","r":true},{"n":"from_month","t":"integer"},{"n":"to_year","t":"integer","r":true},{"n":"to_month","t":"integer"}],"output":[{"n":"scope","t":"enum(3)"},{"n":"state_abbr","t":"string"},{"n":"ori","t":"string"},{"n":"from","t":"string"},{"n":"to","t":"string"},{"n":"offense","t":"enum(71)"},{"n":"offense_label","t":"string"},{"n":"victim","t":"object"},{"n":"offender","t":"object"},{"n":"offense_details","t":"object"},{"n":"data_last_updated","t":"string"},{"n":"max_data_date","t":"string"},{"n":"error","t":"object"}]},{"name":"fbi_get_arrests","server":37,"verb":"get","cls":"get","resolver":false,"title":"FBI Get Arrests","description":"Arrest counts reported to FBI CDE for the nation, a state, or an agency, summed over a month window from January 1985 through the current year. Returns arrests by offense name, offense category, and detailed offense breakdown, by arrestee sex and race, and by age group for male and female arrestees, with every category CDE reports, zeros included. Each grouping is tallied separately and their sums can differ (arrestee sex and race often total less than the offense groupings), so no grouping stands in for another's total. Narrow to one offense with offense. National scope omits identifiers; state requires only state_abbr; agency requires only ori (look it up with fbi_search_agencies). CDE returns zeros both when nothing was reported and when it does not recognize a state or ORI.","input":[{"n":"scope","t":"enum(3)","r":true},{"n":"offense","t":"enum(47)"},{"n":"state_abbr","t":"string"},{"n":"ori","t":"string"},{"n":"from_year","t":"integer","r":true},{"n":"from_month","t":"integer"},{"n":"to_year","t":"integer","r":true},{"n":"to_month","t":"integer"}],"output":[{"n":"scope","t":"enum(3)"},{"n":"state_abbr","t":"string"},{"n":"ori","t":"string"},{"n":"from","t":"string"},{"n":"to","t":"string"},{"n":"offense","t":"enum(47)"},{"n":"offense_label","t":"string"},{"n":"offense_name","t":"object"},{"n":"offense_category","t":"object"},{"n":"offense_breakdown","t":"object"},{"n":"arrestee_sex","t":"object"},{"n":"arrestee_race","t":"object"},{"n":"male_arrests_by_age","t":"object"},{"n":"female_arrests_by_age","t":"object"},{"n":"data_last_updated","t":"string"},{"n":"max_data_date","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"fbi_get_hate_crimes","server":37,"verb":"get","cls":"get","resolver":false,"title":"FBI Get Hate Crimes","description":"Hate crime counts reported to FBI CDE for the nation, a state, or an agency, summed over a month window from January 1991 through the current year. Returns incidents by bias motivation and bias category, plus counts by offense type, location type, offender race, offender ethnicity, and federal judicial district, with every category CDE reports, zeros included. Narrow to one bias motivation with bias. National scope omits identifiers; state requires only state_abbr; agency requires only ori (look it up with fbi_search_agencies). CDE returns zeros both when nothing was reported and when it does not recognize a state or ORI.","input":[{"n":"scope","t":"enum(3)","r":true},{"n":"bias","t":"enum(35)"},{"n":"state_abbr","t":"string"},{"n":"ori","t":"string"},{"n":"from_year","t":"integer","r":true},{"n":"from_month","t":"integer"},{"n":"to_year","t":"integer","r":true},{"n":"to_month","t":"integer"}],"output":[{"n":"scope","t":"enum(3)"},{"n":"state_abbr","t":"string"},{"n":"ori","t":"string"},{"n":"from","t":"string"},{"n":"to","t":"string"},{"n":"bias","t":"enum(35)"},{"n":"bias_label","t":"string"},{"n":"incident_section","t":"object"},{"n":"bias_section","t":"object"},{"n":"data_last_updated","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"fbi_get_leoka","server":37,"verb":"get","cls":"get","resolver":false,"title":"FBI Get LEOKA","description":"LEOKA officer fatality trends, weapons, activity, circumstances, demographics, geographic regions, and time-of-day/month breakdowns, 2020 through the current year. Period \"ytd\" requests a year; \"monthly\" requires month and includes the same month of the comparison year. Both periods return the CDE YTD totals block, separately from month-specific breakdowns. Raw dod/doi totals have unspecified interpretation; classified deaths remain in the trend and region series.","input":[{"n":"period","t":"enum(2)","r":true},{"n":"year","t":"integer","r":true},{"n":"month","t":"integer"}],"output":[{"n":"period","t":"string"},{"n":"year","t":"number"},{"n":"month","t":"number"},{"n":"totals","t":"object"},{"n":"weapons","t":"object"},{"n":"officer_activity","t":"object"},{"n":"deaths_by_year","t":"object"},{"n":"deaths_by_region","t":"object"},{"n":"lighting_conditions","t":"object"},{"n":"body_armor_worn","t":"object"},{"n":"location_of_attack","t":"object"},{"n":"offender_previously_known_to_agency","t":"object"},{"n":"offender_prior_mental_illness","t":"object"},{"n":"offender_prior_relationship","t":"object"},{"n":"officer_circumstances_time_of_attack","t":"object"},{"n":"officer_incident_type","t":"object"},{"n":"officer_type_of_assignment","t":"object"},{"n":"weather_conditions","t":"object"},{"n":"offender_demographic","t":"object"},{"n":"officer_demographic","t":"object"},{"n":"officer_death_by_time_of_day","t":"object"},{"n":"officer_death_by_month","t":"object"},{"n":"error","t":"object"}]},{"name":"fcc_geocode_block","server":38,"verb":"geocode","cls":"resolve","resolver":true,"title":"Geocode Census Block","description":"Converts a latitude/longitude coordinate to a 15-digit census block FIPS code, plus county FIPS, county name, state FIPS, state code, and state name. This is the required prerequisite for fcc_search_availability since the broadband dataset is indexed by census block, not address. The block is resolved against 2010 census boundaries, the vintage the Form 477 deployment dataset is keyed by, so the returned blockFips can be passed straight to fcc_search_availability; a 2020-vintage block ID from another source will not match. Uses the FCC public Geo API — no authentication required.","input":[{"n":"latitude","t":"number","r":true},{"n":"longitude","t":"number","r":true}],"output":[{"n":"blockFips","t":"string"},{"n":"censusVintage","t":"string"},{"n":"countyFips","t":"string"},{"n":"countyName","t":"string"},{"n":"stateFips","t":"string"},{"n":"stateCode","t":"string"},{"n":"stateName","t":"string"},{"n":"error","t":"object"}]},{"name":"fcc_search_availability","server":38,"verb":"search","cls":"search","resolver":false,"title":"Search Broadband Availability","description":"Queries broadband providers and advertised speeds at a census block from FCC Form 477 data (as of June 2021). Answers \"which ISPs serve this location and what speeds do they offer?\" — the core tool for address-level broadband lookup. Requires a 15-digit census block FIPS code; use fcc_geocode_block to convert coordinates first. Data reflects ISP-reported availability at the block level, which may overstate actual coverage for some addresses.","input":[{"n":"block_fips","t":"string","r":true},{"n":"tech_filter","t":"array<enum(14)>"},{"n":"min_speed_down","t":"number"},{"n":"consumer","t":"boolean"}],"output":[{"n":"blockFips","t":"string"},{"n":"providers","t":"array<object>"},{"n":"totalProviders","t":"number"},{"n":"dataVintage","t":"string"},{"n":"appliedFilters","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"fcc_search_geographies","server":38,"verb":"search","cls":"search","resolver":false,"title":"Search Geographies","description":"Find census places and CBSAs (metro areas) by case-insensitive literal name substring in the 2021 FCC geography lookup. Keep ambiguous matches distinct and choose the geography_type and geography_id to pass to fcc_get_coverage_summary. Include a location qualifier in name to narrow results; CBSA codes do not encode state membership. Always queries live FCC Open Data, even with the Form 477 mirror enabled, and needs no BDC credentials. Follow nextOffset until absent; no total match count is computed.","input":[{"n":"name","t":"string","r":true},{"n":"geography_type","t":"const|enum(2)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"geographies","t":"array<object>"},{"n":"count","t":"number"},{"n":"offset","t":"number"},{"n":"nextOffset","t":"number"},{"n":"dataVintage","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"fcc_get_coverage_summary","server":38,"verb":"get","cls":"get","resolver":false,"title":"Get Broadband Coverage Summary","description":"Returns a broadband coverage summary for a geography — population with zero, one, two, or three-plus providers at a given speed threshold, split by urban/rural and tribal/non-tribal segments. The primary tool for digital divide and equity analysis. Supports state, county, congressional district, census place, CBSA (metro area), tribal area, and national level. Data is from FCC Form 477 (as of June 2021). Use 100 Mbps as the speed threshold for BEAD program policy analysis.","input":[{"n":"geography_type","t":"enum(7)","r":true},{"n":"geography_id","t":"string"},{"n":"tech_filter","t":"enum(7)"},{"n":"speed_down","t":"enum(7)"},{"n":"urban_rural_filter","t":"enum(3)"},{"n":"tribal_filter","t":"enum(3)"}],"output":[{"n":"geography","t":"object"},{"n":"techFilter","t":"string"},{"n":"speedDownMbps","t":"number"},{"n":"population","t":"object"},{"n":"coveragePct","t":"number"},{"n":"unservedPct","t":"number"},{"n":"competitivePct","t":"number"},{"n":"breakdown","t":"array<object>"},{"n":"dataVintage","t":"string"},{"n":"appliedFilters","t":"object"},{"n":"error","t":"object"}]},{"name":"fcc_search_providers","server":38,"verb":"search","cls":"search","resolver":false,"title":"Search Broadband Providers","description":"Searches for ISPs by holding company name, filtered by state and technology type. Returns a deduplicated list of matching providers with hoconum identifiers for follow-up calls to fcc_get_provider. Answers \"which ISPs serve Washington with fiber?\" and \"find all Comcast entities.\" Geographic filtering is state-level; sub-state granularity requires cross-referencing block data. Against the live FCC API the search reads a bounded window of deployment rows to find which holding companies match, so when scanTruncated comes back true the providers are a sample of the matches rather than every one of them and no true match count is available; a narrower filter raises the share of matches the sample surfaces but cannot make it complete, and only a deployment running the local Form 477 mirror returns every match. The sample is of which companies come back — every company that does carries its complete national footprint, since statesServed and techCodes are resolved per company rather than read off the window, at the cost of one lookup per provider returned. Data is from FCC Form 477 (as of June 2021).","input":[{"n":"name_search","t":"string"},{"n":"state","t":"string"},{"n":"tech_filter","t":"array<enum(14)>"},{"n":"limit","t":"integer"}],"output":[{"n":"providers","t":"array<object>"},{"n":"totalFound","t":"number"},{"n":"dataVintage","t":"string"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"scanTruncated","t":"boolean"},{"n":"scanRowCap","t":"number"},{"n":"appliedFilters","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"fcc_get_provider","server":38,"verb":"get","cls":"get","resolver":false,"title":"Get Provider Profile","description":"Returns a national-level coverage profile for a specific holding company (by hoconum): technologies deployed and the population covered at each download speed tier. Population figures come from the FCC provider summary table and count each person once, regardless of how many technologies the provider uses to reach them. Use fcc_search_providers to find valid hoconum values. Data is from FCC Form 477 (as of June 2021).","input":[{"n":"hoconum","t":"string","r":true}],"output":[{"n":"hoconum","t":"string"},{"n":"holdingCompanyName","t":"string"},{"n":"techCodes","t":"array<string>"},{"n":"techLabels","t":"array<string>"},{"n":"speedTierPopulation","t":"array<object>"},{"n":"dataVintage","t":"string"},{"n":"error","t":"object"}]},{"name":"fcc_compare_areas","server":38,"verb":"compare","cls":"analyze","resolver":false,"title":"Compare Broadband Coverage Across Areas","description":"Compares broadband coverage metrics across multiple geographies of the same type and returns a ranked table sorted by unserved or underserved population. Answers \"which counties in this state have the worst broadband access?\" and drives BEAD funding prioritization. Provide up to 50 geography IDs, or set compare_all_states=true for all 50 states + DC. Data is from FCC Form 477 (as of June 2021).","input":[{"n":"geography_type","t":"enum(6)","r":true},{"n":"geography_ids","t":"array<string>"},{"n":"compare_all_states","t":"boolean"},{"n":"tech_filter","t":"enum(7)"},{"n":"speed_down","t":"enum(7)"},{"n":"sort_by","t":"enum(4)"}],"output":[{"n":"geographyType","t":"string"},{"n":"techFilter","t":"string"},{"n":"speedDownMbps","t":"number"},{"n":"sortBy","t":"string"},{"n":"areas","t":"array<object>"},{"n":"totalAreas","t":"number"},{"n":"dataVintage","t":"string"},{"n":"appliedFilters","t":"object"},{"n":"error","t":"object"}]},{"name":"fcc_find_underserved","server":38,"verb":"find","cls":"search","resolver":false,"title":"Find Underserved Areas","description":"Finds geographic areas with limited or no broadband coverage at a given speed threshold, ranked by unserved population. The core tool for BEAD program analysis and broadband equity research. Accepts a state abbreviation to narrow scope or runs nationwide. Defaults to rural areas where underservice is most concentrated. Data is from FCC Form 477 (as of June 2021).","input":[{"n":"state","t":"string"},{"n":"geography_type","t":"enum(4)"},{"n":"speed_down","t":"enum(7)"},{"n":"tech_filter","t":"enum(7)"},{"n":"min_unserved_pop","t":"integer"},{"n":"urban_rural_filter","t":"enum(3)"},{"n":"limit","t":"integer"}],"output":[{"n":"areas","t":"array<object>"},{"n":"geographyType","t":"string"},{"n":"speedDownMbps","t":"number"},{"n":"urbanRuralFilter","t":"string"},{"n":"dataVintage","t":"string"},{"n":"totalFound","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"scanTruncated","t":"boolean"},{"n":"scanRowCap","t":"number"},{"n":"appliedFilters","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"fcc_list_filing_periods","server":38,"verb":"list","cls":"list","resolver":false,"title":"List Filing Periods","description":"Returns available data vintages: Form 477 filing periods (hardcoded Jun 2015 – Jun 2021, always available) and BDC as-of dates from the authenticated API (Jun 2022 onward, requires credentials). When hasBdcCredentials is true, call this before fcc_list_downloads to determine valid as_of_date values. Note: there is a data gap between June 2021 (last Form 477) and June 2022 (first BDC filing period).","input":[{"n":"include_bdc","t":"boolean"}],"output":[{"n":"periods","t":"array<object>"},{"n":"form477Count","t":"number"},{"n":"bdcCount","t":"number"},{"n":"hasBdcCredentials","t":"boolean"},{"n":"dataNote","t":"string"},{"n":"error","t":"object"}]},{"name":"fcc_spectrum_search_licenses","server":39,"verb":"search","cls":"search","resolver":false,"title":"Search FCC ULS licenses","description":"Search FCC ULS licenses and spectrum leases by callsign, licensee name, FCC Registration Number (FRN), market code, radio service, status, and licensee state, returning one row per record with its unique system identifier (USI) for fcc_spectrum_get_license. At least one of callsign, licensee, frn, market_code, radio_service, or state is required; status only narrows. Defaults to active records; pass status \"any\" to include expired, cancelled, and terminated ones. Licensee name matching is word-based (every word must appear as a word prefix), not fuzzy.","input":[{"n":"callsign","t":"string"},{"n":"licensee","t":"string"},{"n":"frn","t":"string"},{"n":"market_code","t":"string"},{"n":"radio_service","t":"string"},{"n":"status","t":"enum(8)"},{"n":"state","t":"enum(56)"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"licenses","t":"array<object>"},{"n":"nextCursor","t":"string"},{"n":"dataAsOf","t":"string"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"appliedFilters","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"fcc_spectrum_get_license","server":39,"verb":"get","cls":"get","resolver":false,"title":"Get an FCC ULS license","description":"Fetch one FCC ULS license or spectrum lease in full by callsign or unique system identifier (USI): licensee (the lessee on a lease), status and key dates, its locations with coordinates, elevation, structure height, and ASR number, each location's antennas, and each antenna's authorized frequencies with power, ERP/EIRP, station class, transmitter, and emission designators; geographic-area licenses list their market and spectrum blocks, and lease links are shown in both directions. Large records are paged: one call lists whole locations up to 50 sites and 100 antennas, up to max_frequencies frequency rows, and 100 leases, and names the location_offset or lease_offset that reads the rest; location_number starts the locations at a location number the search tools return. Technical detail is kept for active, pending-legal, and term-pending records only. A callsign shared by several records returns the active one, else the most recent.","input":[{"n":"callsign","t":"string"},{"n":"usi","t":"string"},{"n":"max_frequencies","t":"integer"},{"n":"location_offset","t":"integer"},{"n":"location_number","t":"integer"},{"n":"lease_offset","t":"integer"}],"output":[{"n":"found","t":"boolean"},{"n":"guidance","t":"string"},{"n":"candidates","t":"array<object>"},{"n":"license","t":"object"},{"n":"technicalRetained","t":"boolean"},{"n":"locations","t":"array<object>"},{"n":"locationTotal","t":"number"},{"n":"siteTotal","t":"number"},{"n":"nextLocationOffset","t":"number"},{"n":"nextLeaseOffset","t":"number"},{"n":"otherCallsignRecords","t":"array<object>"},{"n":"dataAsOf","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"fcc_spectrum_find_transmitters","server":39,"verb":"find","cls":"search","resolver":false,"title":"Find FCC-licensed sites near a point","description":"Find FCC-licensed sites within a radius of a coordinate, nearest first, each with its callsign, licensee, distance, coordinates, filed location type and class, ground elevation, structure height, and authorized frequencies. Filter by frequency or band, radio service, location type, location class, and live status (active by default). Unset location_class keeps all filed roles, including receive and passive locations; filed classes describe authorization, not actual on-air activity. Coordinates are decimal degrees or DMS strings. Mobile and temporary-fixed operating areas are returned at their center with radiusKm and match when the center lies within radius_km. Locations without valid coordinates are omitted; market-area licenses without site records are found with fcc_spectrum_search_frequencies.","input":[{"n":"latitude","t":"number","r":true},{"n":"longitude","t":"number","r":true},{"n":"radius_km","t":"number"},{"n":"frequency_low","t":"number"},{"n":"frequency_high","t":"number"},{"n":"unit","t":"enum(3)"},{"n":"radio_service","t":"string"},{"n":"location_type","t":"enum(7)"},{"n":"location_class","t":"enum(5)"},{"n":"status","t":"enum(4)"},{"n":"limit","t":"integer"},{"n":"max_frequencies_per_site","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"sites","t":"array<object>"},{"n":"nextCursor","t":"string"},{"n":"dataAsOf","t":"string"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"searchCenter","t":"object"},{"n":"appliedFilters","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"fcc_spectrum_search_frequencies","server":39,"verb":"search","cls":"search","resolver":false,"title":"Search FCC ULS authorizations by frequency","description":"Find FCC ULS authorizations whose occupied band overlaps a frequency or band. Site assignments (land mobile, microwave, paging, cellular sites) return one row per site and frequency with the site's state and coordinates; market-area licenses and leases (PCS, AWS, 700 MHz, 3.45 and 3.7 GHz, and other auctioned blocks) return one row per spectrum block with its market code and name; 3.5 GHz Priority Access Licenses file no frequency, so list them with fcc_spectrum_search_licenses and radio_service PL. Filter by state, radio service, licensee, FRN, market code, and live status (active by default). For transmitter sites near a coordinate, use fcc_spectrum_find_transmitters.","input":[{"n":"frequency_low","t":"number","r":true},{"n":"frequency_high","t":"number"},{"n":"unit","t":"enum(3)"},{"n":"kind","t":"enum(3)"},{"n":"state","t":"enum(56)"},{"n":"radio_service","t":"string"},{"n":"licensee","t":"string"},{"n":"frn","t":"string"},{"n":"market_code","t":"string"},{"n":"status","t":"enum(4)"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"assignments","t":"array<object>"},{"n":"nextCursor","t":"string"},{"n":"dataAsOf","t":"string"},{"n":"totalCount","t":"number"},{"n":"totalIsLowerBound","t":"boolean"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"appliedFilters","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"fcc_spectrum_list_reference","server":39,"verb":"list","cls":"list","resolver":false,"title":"List FCC ULS reference codes and coverage","description":"Decode FCC ULS codes used by the other tools — radio service codes, station classes, license statuses, location types, antenna types, applicant types, amateur operator classes — or report coverage: which service groups this index holds, record counts, and when each was last updated. Works before the index is built. Station classes describe licensed categories, not actual on-air activity.","input":[{"n":"topic","t":"enum(8)","r":true},{"n":"filter","t":"string"}],"output":[{"n":"topic","t":"enum(8)"},{"n":"entries","t":"array<object>"},{"n":"index","t":"object"},{"n":"groups","t":"array<object>"},{"n":"redactIndividuals","t":"boolean"},{"n":"dataAsOf","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"fdic_search_institutions","server":40,"verb":"search","cls":"search","resolver":false,"title":"Search FDIC-insured institutions","description":"Find FDIC-insured banks and savings institutions by name, CERT, location, size, charter class, or holding company — including closed, merged, and failed institutions. Name matching is fuzzy, case-insensitive, and also matches former and trade names (a result says which it matched); every word must match. Returns institution records keyed by CERT, the FDIC certificate number every other fdic_ tool takes, with active status, successor CERT for merged or failed institutions, holding company, and latest reported assets and deposits. Credit unions are insured by the NCUA and are not in this data.","input":[{"n":"name","t":"string"},{"n":"certs","t":"array<integer>"},{"n":"state","t":"string"},{"n":"city","t":"string"},{"n":"status","t":"enum(3)"},{"n":"bank_classes","t":"array<enum(8)>"},{"n":"min_assets","t":"number"},{"n":"max_assets","t":"number"},{"n":"holding_company_rssd","t":"integer"},{"n":"sort","t":"enum(3)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"institutions","t":"array<object>"},{"n":"status_filter","t":"enum(3)"},{"n":"total","t":"integer"},{"n":"next_offset","t":"integer"},{"n":"missing_certs","t":"array<integer>"},{"n":"data_as_of","t":"string"},{"n":"processed_certs","t":"array<integer>"},{"n":"deferred_certs","t":"array<integer>"},{"n":"selection_notice","t":"string"},{"n":"effective_limit","t":"integer"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"fdic_get_institution_financials","server":40,"verb":"get","cls":"get","resolver":false,"title":"Get institution quarterly financials","description":"Get one institution's quarterly Call Report financials by CERT — balance sheet, income, returns, credit quality, and capital ratios — most recent quarter first, with its name, status, and holding company. Unsuffixed income and return metrics are single-quarter figures; _ytd metrics accumulate from January 1. Dollar amounts are in thousands. Quarterly data lands about seven weeks after quarter end; history reaches back to 1984.","input":[{"n":"cert","t":"integer","r":true},{"n":"metrics","t":"array<enum(49)>"},{"n":"quarters","t":"integer"},{"n":"from_date","t":"string"},{"n":"to_date","t":"string"}],"output":[{"n":"institution","t":"object"},{"n":"metric_definitions","t":"array<object>"},{"n":"rows","t":"array<object>"},{"n":"quarters_available","t":"integer"},{"n":"data_as_of","t":"string"},{"n":"processed_metrics","t":"array<string>"},{"n":"deferred_metrics","t":"array<string>"},{"n":"selection_notice","t":"string"},{"n":"effective_quarters","t":"integer"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"fdic_compare_peers","server":40,"verb":"compare","cls":"analyze","resolver":false,"title":"Compare an institution with its peers","description":"Compare one institution with a peer group for one quarter: for each metric, the institution's value next to the peer median, quartiles, minimum and maximum, and its percentile and rank. The default peer group is every institution in the same asset-size band that reported that quarter; narrow it to one state, widen it to all sizes, or name the peers by CERT. Dollar amounts are in thousands; ratios are percentages.","input":[{"n":"cert","t":"integer","r":true},{"n":"report_date","t":"string"},{"n":"metrics","t":"array<enum(49)>"},{"n":"peer_asset_band","t":"enum(7)"},{"n":"peer_state","t":"string"},{"n":"peer_certs","t":"array<integer>"}],"output":[{"n":"institution","t":"object"},{"n":"report_date","t":"string"},{"n":"report_date_defaulted","t":"boolean"},{"n":"peer_group","t":"object"},{"n":"comparisons","t":"array<object>"},{"n":"peer_certs_missing","t":"array<integer>"},{"n":"data_as_of","t":"string"},{"n":"processed_certs","t":"array<integer>"},{"n":"deferred_certs","t":"array<integer>"},{"n":"selection_notice","t":"string"},{"n":"processed_metrics","t":"array<string>"},{"n":"deferred_metrics","t":"array<string>"},{"n":"peer_cohort_incomplete","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"fdic_query_financials","server":40,"verb":"query","cls":"query","resolver":false,"title":"Query a multi-bank financial panel","description":"Pull a multi-institution, multi-quarter Call Report panel — one row per institution per quarter — filtered by CERTs, headquarters state, asset range, and thresholds on any catalog metric. Use it to screen (every bank in a state with a noncurrent-loan rate above 3%) or to build a trend panel for SQL. Returns an inline preview sorted as requested; when the panel exceeds the preview it is staged as a dataframe for fdic_dataframe_query. With no dates it covers the latest published quarter only.","input":[{"n":"certs","t":"array<integer>"},{"n":"state","t":"string"},{"n":"min_assets","t":"number"},{"n":"max_assets","t":"number"},{"n":"metric_filters","t":"array<object>"},{"n":"metrics","t":"array<enum(49)>"},{"n":"from_date","t":"string"},{"n":"to_date","t":"string"},{"n":"sort_by","t":"enum(49)"},{"n":"sort_order","t":"enum(2)"},{"n":"limit","t":"integer"}],"output":[{"n":"report_dates","t":"object"},{"n":"report_dates_defaulted","t":"boolean"},{"n":"total_matching","t":"integer"},{"n":"rows_fetched","t":"integer"},{"n":"panel_row_cap","t":"integer"},{"n":"panel_truncated","t":"boolean"},{"n":"rows","t":"array<object>"},{"n":"metric_definitions","t":"array<object>"},{"n":"dataset","t":"object"},{"n":"data_as_of","t":"string"},{"n":"processed_certs","t":"array<integer>"},{"n":"deferred_certs","t":"array<integer>"},{"n":"selection_notice","t":"string"},{"n":"processed_metrics","t":"array<string>"},{"n":"deferred_metrics","t":"array<string>"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"fdic_search_failures","server":40,"verb":"search","cls":"search","resolver":false,"title":"Search FDIC bank failures","description":"Search FDIC-insured bank failures and assistance transactions since 1934 by name, CERT, headquarters state, failure date range, resolution method, or size. Returns each event with failure date, acquirer, total assets and deposits, and the FDIC's estimated loss to the insurance fund, plus totals over every matching event; group_by adds counts and losses per year, state, method, or fund. Searches failures only unless resolution is set to assistance or all. Dollar amounts are in thousands.","input":[{"n":"name","t":"string"},{"n":"certs","t":"array<integer>"},{"n":"state","t":"string"},{"n":"from_date","t":"string"},{"n":"to_date","t":"string"},{"n":"resolution","t":"enum(3)"},{"n":"methods","t":"array<enum(11)>"},{"n":"min_assets","t":"number"},{"n":"group_by","t":"enum(4)"},{"n":"sort","t":"enum(4)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"failures","t":"array<object>"},{"n":"summary","t":"object"},{"n":"groups","t":"array<object>"},{"n":"resolution_filter","t":"enum(3)"},{"n":"total","t":"integer"},{"n":"next_offset","t":"integer"},{"n":"data_as_of","t":"string"},{"n":"processed_certs","t":"array<integer>"},{"n":"deferred_certs","t":"array<integer>"},{"n":"selection_notice","t":"string"},{"n":"effective_limit","t":"integer"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"fdic_get_deposits","server":40,"verb":"get","cls":"get","resolver":false,"title":"Get Summary of Deposits branches and market share","description":"Get Summary of Deposits data (branch-level domestic deposits, annual as of June 30, 1994 onward). With cert only: the institution's branches and its deposit market share in each state where it has offices. With a geography (state, county, city, ZIP, or MSA code): every institution in that market ranked by deposits, with market share and the Herfindahl-Hirschman index. With both: the institution's branches in that market and its rank and share there. Defaults to the latest survey year. Dollar amounts are in thousands.","input":[{"n":"cert","t":"integer"},{"n":"state","t":"string"},{"n":"county","t":"string"},{"n":"city","t":"string"},{"n":"zip","t":"string"},{"n":"msa_code","t":"string"},{"n":"year","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"mode","t":"enum(3)"},{"n":"year","t":"integer"},{"n":"year_defaulted","t":"boolean"},{"n":"geography","t":"object"},{"n":"institution","t":"object"},{"n":"footprint","t":"array<object>"},{"n":"market","t":"object"},{"n":"position","t":"object"},{"n":"institutions","t":"array<object>"},{"n":"branches","t":"array<object>"},{"n":"total_rows","t":"integer"},{"n":"dataset","t":"object"},{"n":"data_as_of","t":"string"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"fdic_list_reference","server":40,"verb":"list","cls":"list","resolver":false,"title":"List FDIC reference vocabulary","description":"List the vocabulary the other fdic_ tools accept and return: every financial metric name with its FDIC field, unit, and basis (single quarter, year-to-date, or point in time), bank charter classes, failure resolution methods, insurance funds, the asset bands fdic_compare_peers uses, and the years each dataset covers. Served from built-in tables; no request to FDIC.","input":[{"n":"topic","t":"enum(6)","r":true}],"output":[{"n":"topic","t":"enum(6)"},{"n":"entries","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"fdic_dataframe_describe","server":40,"verb":"dataframe","cls":"query","resolver":false,"title":"Describe staged dataframes","description":"Describe the df_<id> dataframes that fdic_query_financials and fdic_get_deposits staged when a result exceeded its inline preview, plus any that fdic_dataframe_query saved with register_as. Pass name (from a dataset field) for one dataframe in full: source tool, the parameters it was called with, row count, creation and expiry time, column schema, and the unit and basis of each amount, ratio, or count column (thousands of dollars, percent, or count). Read a table's columns this way before writing SQL for fdic_dataframe_query. Omit name to list the live dataframes, newest first, 50 per page, as name, source tool, row count, and expiry only. A deployment that serves HTTP without authentication, where every caller shares one canvas, does not list; there, pass the name a dataset field returned.","input":[{"n":"name","t":"string"},{"n":"offset","t":"integer"}],"output":[{"n":"dataframes","t":"array<object>"},{"n":"total","t":"integer"},{"n":"next_offset","t":"integer"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"fdic_dataframe_query","server":40,"verb":"dataframe","cls":"query","resolver":false,"title":"Query staged dataframes with SQL","description":"Run one read-only SELECT (DuckDB SQL) across the df_<id> dataframes that fdic_query_financials and fdic_get_deposits staged or an earlier register_as saved; joins, aggregates, window functions, and CTEs work. Before writing SQL, pass each table name to fdic_dataframe_describe to read its columns. DOUBLE columns come back as JSON numbers and dollar columns are thousands of US dollars; BIGINT results such as COUNT(*) come back as strings, so CAST them to INTEGER or DOUBLE for arithmetic. Writes, DDL, file-reading functions, and system catalogs are rejected. register_as materializes the result as a new dataframe with a fresh TTL.","input":[{"n":"sql","t":"string","r":true},{"n":"register_as","t":"string"},{"n":"preview","t":"integer"},{"n":"row_limit","t":"integer"}],"output":[{"n":"requested_row_limit","t":"integer"},{"n":"effective_row_limit","t":"integer"},{"n":"requested_preview","t":"integer"},{"n":"effective_preview","t":"integer"},{"n":"columns","t":"array<string>"},{"n":"row_count","t":"integer"},{"n":"row_count_capped","t":"boolean"},{"n":"rows","t":"array<object>"},{"n":"registered_as","t":"string"},{"n":"expires_at","t":"string"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"regulations_search_rules","server":41,"verb":"search","cls":"search","resolver":false,"title":"regulations_search_rules","description":"Search the Federal Register — the daily journal of US proposed rules, final rules, notices, and presidential documents (1994–present) — filtering by full-text query, document type, agency slug, publication date range, affected CFR title and part, printed docket number, and RIN, all combined. A page cite from a CFR source note (\"89 FR 49102\", with its date) resolves to the documents printed on that page. The primary discovery entry point: results carry the document number (open with regulations_get_document), its citation and page range, each issuing agency with its filterable slug, printed docket numbers, Regulations.gov docket and document IDs, comment count and comment URL, whether the comment period is open, RINs, and affected CFR parts that chain into the comment and codified-text tools. A query ranks by relevance unless order says otherwise; filter-only browsing lists newest first. The Federal Register caps navigation at 50 pages and the match count at 10,000; when a result set is larger, narrow with published_after/published_before rather than paging deeper.","input":[{"n":"query","t":"string"},{"n":"type","t":"array<enum(4)>"},{"n":"agencies","t":"array<string>"},{"n":"published_after","t":"const|string"},{"n":"published_before","t":"const|string"},{"n":"cfr_title","t":"integer"},{"n":"cfr_part","t":"string"},{"n":"docket_id","t":"string"},{"n":"rin","t":"string"},{"n":"citation","t":"const|string"},{"n":"citation_date","t":"const|string"},{"n":"order","t":"enum(3)"},{"n":"per_page","t":"integer"},{"n":"page","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"totalPages","t":"number"},{"n":"nextPage","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"regulations_get_document","server":41,"verb":"get","cls":"get","resolver":false,"title":"regulations_get_document","description":"Fetch one Federal Register document by its FR document number — full metadata (title, type, agencies, abstract, action, effective/comment dates, RINs) plus the cross-source handles that make this a workflow server. The output carries the Regulations.gov docket ID (chain into regulations_get_docket or regulations_find_comments), the docket numbers the Federal Register prints (chain back into regulations_search_rules as docket_id), the comment count and comment URL, and the affected CFR parts (chain into regulations_get_cfr_section). Set include_full_text only when the rule body itself is needed: it returns the plain-text body as a window of up to 64,000 characters (max_chars raises it to 200,000), with the body's total length and, when text remains, the offset to resume from. Short documents return whole; major final rules run past a million characters, so page through with offset rather than reading them in one call.","input":[{"n":"document_number","t":"string","r":true},{"n":"include_full_text","t":"boolean"},{"n":"offset","t":"integer"},{"n":"max_chars","t":"integer"}],"output":[{"n":"documentNumber","t":"string"},{"n":"title","t":"string"},{"n":"type","t":"string"},{"n":"abstract","t":"string"},{"n":"action","t":"string"},{"n":"dates","t":"string"},{"n":"publicationDate","t":"string"},{"n":"citation","t":"string"},{"n":"startPage","t":"number"},{"n":"endPage","t":"number"},{"n":"effectiveOn","t":"string"},{"n":"commentsCloseOn","t":"string"},{"n":"commentPeriodOpen","t":"boolean"},{"n":"agencies","t":"array<object>"},{"n":"regulationIdNumbers","t":"array<string>"},{"n":"cfrReferences","t":"array<object>"},{"n":"docketIds","t":"array<string>"},{"n":"docketId","t":"string"},{"n":"regulationsGovDocumentId","t":"string"},{"n":"commentCount","t":"number"},{"n":"commentUrl","t":"string"},{"n":"supportingDocuments","t":"array<object>"},{"n":"bodyHtmlUrl","t":"string"},{"n":"rawTextUrl","t":"string"},{"n":"htmlUrl","t":"string"},{"n":"fullText","t":"string"},{"n":"fullTextOffset","t":"number"},{"n":"fullTextLength","t":"number"},{"n":"fullTextNextOffset","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"regulations_browse_cfr","server":41,"verb":"browse","cls":"search","resolver":false,"title":"regulations_browse_cfr","description":"Explore the codified Code of Federal Regulations via eCFR in two modes. \"structure\" lists all 50 titles; with a title, that title's top-level divisions (its chapters, or subtitles); and with a title and part, every section and appendix in the part, flattened and paged, each naming the subpart and subject group it sits under — the way to enumerate a part's sections without reading its text. \"search\" runs a full-text query across the codified CFR and returns matching sections with their hierarchy path and a snippet, one result per section, paged. Both modes accept title and part to narrow the scope. Both feed regulations_get_cfr_section. Every search result reports which corpus answered it — the synced local mirror or the live eCFR index — and what that corpus covers, in `source` and `sourceScope`.","input":[{"n":"mode","t":"enum(2)","r":true},{"n":"title","t":"integer"},{"n":"part","t":"string"},{"n":"query","t":"const|string"},{"n":"date","t":"const|string"},{"n":"page","t":"integer"},{"n":"per_page","t":"integer"}],"output":[{"n":"mode","t":"enum(2)"},{"n":"date","t":"string"},{"n":"nodes","t":"array<object>"},{"n":"source","t":"enum(2)"},{"n":"sourceScope","t":"string"},{"n":"results","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"countBasis","t":"enum(2)"},{"n":"page","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"regulations_get_cfr_section","server":41,"verb":"get","cls":"get","resolver":false,"title":"regulations_get_cfr_section","description":"Read the codified text at a CFR location via eCFR — current or as of a past date. Answers \"what does 40 CFR 50.1 say today?\" and \"...as of 2019-01-01?\". Three locations: title + part + section for one section; title + part alone for the whole part, with its Authority and Source notes, an index of its sections, and the names of its appendices; title + appendix for one appendix, passing the identifier exactly as regulations_browse_cfr emits it. A section can be written as people cite it — \"61\", \"§ 141.61\", \"141.61(c)\", or the full cite \"40 CFR 141.61\" in part 141 all read 40 CFR 141.61 — and a part as \"Part 141\"; the response names the identifier it read. Text comes back as a window of up to 64,000 characters (max_chars raises it to 200,000) with the total length and, when text remains, the offset to resume from; whole parts run to millions of characters, so page with offset or read a single section. eCFR retains historical versions from 2017 through the title's up-to-date date; a date outside that window is rejected with the window named. Current single-section reads are served from a synced local mirror when it holds the title's latest eCFR issue; the source is reported.","input":[{"n":"title","t":"integer","r":true},{"n":"part","t":"string"},{"n":"section","t":"const|string"},{"n":"appendix","t":"const|string"},{"n":"date","t":"const|string"},{"n":"offset","t":"integer"},{"n":"max_chars","t":"integer"}],"output":[{"n":"cfrCite","t":"string"},{"n":"title","t":"number"},{"n":"part","t":"string"},{"n":"section","t":"string"},{"n":"appendix","t":"string"},{"n":"heading","t":"string"},{"n":"hierarchyPath","t":"string"},{"n":"date","t":"string"},{"n":"source","t":"enum(2)"},{"n":"authority","t":"string"},{"n":"sourceNote","t":"string"},{"n":"notes","t":"array<string>"},{"n":"bodyText","t":"string"},{"n":"bodyTextOffset","t":"number"},{"n":"bodyTextLength","t":"number"},{"n":"bodyTextNextOffset","t":"number"},{"n":"sections","t":"array<object>"},{"n":"appendices","t":"array<object>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"regulations_get_docket","server":41,"verb":"get","cls":"get","resolver":false,"title":"regulations_get_docket","description":"Pull a rulemaking docket from Regulations.gov by docket ID (e.g. \"EPA-HQ-OAR-2025-0194\") — the docket's metadata (title, agency, RIN, abstract) and the documents filed in it (NPRM, final rule, supporting materials). The docket is the folder holding a rule's whole paper trail; each returned document's objectId feeds regulations_find_comments. A docket often contains hundreds of supporting materials — filter document_types to \"Proposed Rule\"/\"Rule\" to find the rule documents themselves. Requires REGULATIONS_GOV_API_KEY (free at https://api.data.gov/signup/); the Federal Register and eCFR tools work without it.","input":[{"n":"docket_id","t":"string","r":true},{"n":"document_types","t":"array<enum(5)>"},{"n":"per_page","t":"integer"},{"n":"page","t":"integer"}],"output":[{"n":"docketId","t":"string"},{"n":"title","t":"string"},{"n":"docketType","t":"string"},{"n":"agencyId","t":"string"},{"n":"rin","t":"string"},{"n":"abstract","t":"string"},{"n":"modifyDate","t":"string"},{"n":"objectId","t":"string"},{"n":"documentCount","t":"number"},{"n":"documents","t":"array<object>"},{"n":"totalPages","t":"number"},{"n":"nextPage","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"regulations_find_comments","server":41,"verb":"find","cls":"search","resolver":false,"title":"regulations_find_comments","description":"Fetch public comments on a Federal Register document or a Regulations.gov docket — the unique corpus of what citizens and organizations actually submitted. Provide exactly one targeting parameter: docket_id (all comments in a docket, broadest), document_object_id (comments on one document, by its object ID or document ID), fr_document_number (convenience — resolves the FR number to the Regulations.gov document carrying it), or comment_id (one comment's full detail and attachments). A list narrows by comment text with search_term (each hit then carries the matching passages) and by posted date with posted_after/posted_before. The list endpoint returns no body text or attachment info — call with comment_id to read a comment's body. When a comment's real content is a PDF/DOCX attachment, the body is a stub and attachmentOnly is true; the attachment download URLs are returned. Requires REGULATIONS_GOV_API_KEY (free at https://api.data.gov/signup/).","input":[{"n":"docket_id","t":"string"},{"n":"document_object_id","t":"string"},{"n":"fr_document_number","t":"const|string"},{"n":"comment_id","t":"string"},{"n":"search_term","t":"string"},{"n":"posted_after","t":"const|string"},{"n":"posted_before","t":"const|string"},{"n":"per_page","t":"integer"},{"n":"page","t":"integer"}],"output":[{"n":"mode","t":"enum(2)"},{"n":"target","t":"string"},{"n":"comments","t":"array<object>"},{"n":"commentId","t":"string"},{"n":"title","t":"string"},{"n":"docketId","t":"string"},{"n":"commentOnDocumentId","t":"string"},{"n":"postedDate","t":"string"},{"n":"receivedDate","t":"string"},{"n":"postmarkDate","t":"string"},{"n":"duplicateComments","t":"number"},{"n":"submitterName","t":"string"},{"n":"organization","t":"string"},{"n":"bodyText","t":"string"},{"n":"attachmentOnly","t":"boolean"},{"n":"attachments","t":"array<object>"},{"n":"withdrawn","t":"boolean"},{"n":"restrictReason","t":"string"},{"n":"totalCount","t":"number"},{"n":"totalPages","t":"number"},{"n":"nextPage","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"regulations_list_open_comments","server":41,"verb":"list","cls":"list","resolver":false,"title":"regulations_list_open_comments","description":"List Federal Register documents currently open for public comment, sorted by closing date (soonest first) across the whole open window, filterable by document type, agency slug, and topic. \"What can I still weigh in on?\" Covers proposed rules and the final rules that take comment (direct final and interim final rules) by default; add NOTICE for the much larger set of notices with comment periods. Runs on the Federal Register's open-comment window and needs no key: each row carries its Regulations.gov docket and document IDs, comment count, and comment URL from the Federal Register document's embedded Regulations.gov info. Open one row with regulations_get_document for the full document, or pull the comments with regulations_find_comments (which, like regulations_get_docket, needs REGULATIONS_GOV_API_KEY).","input":[{"n":"query","t":"string"},{"n":"type","t":"array<enum(3)>"},{"n":"agencies","t":"array<string>"},{"n":"closing_before","t":"const|string"},{"n":"per_page","t":"integer"},{"n":"page","t":"integer"}],"output":[{"n":"asOf","t":"string"},{"n":"keyed","t":"boolean"},{"n":"results","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"totalPages","t":"number"},{"n":"nextPage","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"fema_search_disasters","server":42,"verb":"search","cls":"search","resolver":false,"title":"Search FEMA Disaster Declarations","description":"Search federal disaster declarations by state, incident type, declaration type, date range, and county. Returns deduplicated declaration-level summaries — each disaster number appears once with a designated_area_count showing how many counties/municipalities were designated. The disaster number is the chain key for fema_get_disaster, fema_get_public_assistance, and fema_get_housing_assistance. Use declaration_type to filter: DR (major disaster, most common), EM (emergency), FM (fire management). Date filters apply to the declaration date. Use fema_get_disaster to retrieve all designated-area rows for a specific declaration. county selects the declarations that designated a matching area; their area counts and program flags still describe the whole declaration, and matched_areas lists the matching areas with their own program flags. A search reads the most recent 10,000 designated-area rows; when more match, it returns the declarations dated after the day that window ends, sets truncated, and its notice names the date_to that continues with older declarations. A page holds at most 100,000 characters of declarations; when declarations remain past it, next_offset is the offset to continue from.","input":[{"n":"state","t":"string"},{"n":"incident_type","t":"string"},{"n":"declaration_type","t":"enum(3)"},{"n":"date_from","t":"const|string"},{"n":"date_to","t":"const|string"},{"n":"county","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"declarations","t":"array<object>"},{"n":"total_declarations","t":"number"},{"n":"total_area_rows","t":"number"},{"n":"returned_count","t":"number"},{"n":"notice","t":"string"},{"n":"next_offset","t":"number"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"area_totals_unavailable","t":"boolean"},{"n":"error","t":"object"}]},{"name":"fema_get_disaster","server":42,"verb":"get","cls":"get","resolver":false,"title":"Get FEMA Disaster Details","description":"Fetch up to 1,000 designated-area rows for a specific FEMA disaster by disaster number (e.g., 4781). Discloses partial area and program coverage when more rows exist. Returns counties/municipalities along with programs observed, incident period, and state info. Use fema_search_disasters to find disaster numbers. The returned disaster_number chains to fema_get_public_assistance and fema_get_housing_assistance.","input":[{"n":"disaster_number","t":"integer","r":true}],"output":[{"n":"disaster_number","t":"number"},{"n":"title","t":"string"},{"n":"state","t":"string"},{"n":"incident_type","t":"string"},{"n":"declaration_type","t":"string"},{"n":"declaration_date","t":"string"},{"n":"incident_begin_date","t":"string"},{"n":"incident_end_date","t":"string"},{"n":"ia_declared","t":"boolean"},{"n":"pa_declared","t":"boolean"},{"n":"hm_declared","t":"boolean"},{"n":"designated_areas","t":"array<object>"},{"n":"designated_area_count","t":"number"},{"n":"areas_truncated","t":"boolean"},{"n":"total_designated_area_count","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"fema_get_public_assistance","server":42,"verb":"get","cls":"get","resolver":false,"title":"Get FEMA Public Assistance Projects","description":"Retrieve Public Assistance (PA) funded project records for a disaster or state — shows where federal recovery money was obligated. Returns applicant, damage category, project size and status, federal share obligated, and total obligated amounts. Either disaster_number or state must be provided. Use disaster_number (from fema_search_disasters) to scope to a single declaration, or state to browse all PA projects for a state. PA projects are created only when the PA program is declared (pa_declared: true on the disaster). A page holds at most 100,000 characters of projects; when projects remain past it, next_offset is the offset to continue from.","input":[{"n":"disaster_number","t":"integer"},{"n":"state","t":"string"},{"n":"county","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"projects","t":"array<object>"},{"n":"total_count","t":"number"},{"n":"returned_count","t":"number"},{"n":"notice","t":"string"},{"n":"next_offset","t":"number"},{"n":"totalCount","t":"number"},{"n":"error","t":"object"}]},{"name":"fema_get_housing_assistance","server":42,"verb":"get","cls":"get","resolver":false,"title":"Get FEMA Housing Assistance Data","description":"Retrieve Individual Assistance (IA) housing data for a disaster by disaster number. Returns owner and/or renter records aggregated by county, city, and ZIP code — valid registrations, total approved IHP amounts, repair/rental/other-needs amounts, and inspection counts (owners also carry inspected damage in USD). Narrow with state, county, or zip_code; owners_count, renters_count, and offset then count the filtered records. Use type to select owners, renters, or both (default). A page holds at most 100,000 characters of records, owners and renters cut at the same row count so one offset continues both; when records remain past it, next_offset is the offset to continue from. Use disaster_number from fema_search_disasters.","input":[{"n":"disaster_number","t":"integer","r":true},{"n":"state","t":"string"},{"n":"county","t":"string"},{"n":"zip_code","t":"const|string"},{"n":"type","t":"enum(3)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"owners","t":"array<object>"},{"n":"renters","t":"array<object>"},{"n":"owners_count","t":"number"},{"n":"renters_count","t":"number"},{"n":"notice","t":"string"},{"n":"next_offset","t":"number"},{"n":"totalCount","t":"number"},{"n":"county_filter","t":"string"},{"n":"zip_code_filter","t":"string"},{"n":"error","t":"object"}]},{"name":"fema_search_nfip","server":42,"verb":"search","cls":"search","resolver":false,"title":"Search NFIP Flood Insurance Claims","description":"Search National Flood Insurance Program (NFIP) claims data by state, county, ZIP code, and year range. Returns the matching claim count and claim records — amounts paid on building and contents, damage estimates, flood zones, cause and occupancy codes, and loss dates — newest loss first. state is required — the full NFIP dataset is 2.7 million rows; unfiltered access is prohibited. Page the inline claims with limit and offset; a page holds at most 100,000 characters of claims, and while claims remain past it, next_offset is the offset to continue from. When DataCanvas is enabled (CANVAS_PROVIDER_TYPE=duckdb) and the match exceeds that inline budget, a call at offset 0 stages the match (up to 50,000 claims) on a canvas: inspect the staged table with fema_dataframe_describe, then aggregate it with SQL via fema_dataframe_query.","input":[{"n":"state","t":"string","r":true},{"n":"county_code","t":"string"},{"n":"zip_code","t":"string"},{"n":"year_from","t":"integer"},{"n":"year_to","t":"integer"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"},{"n":"canvas_id","t":"string"}],"output":[{"n":"claims","t":"array<object>"},{"n":"total_count","t":"number"},{"n":"returned_count","t":"number"},{"n":"staged_count","t":"number"},{"n":"canvas_id","t":"string"},{"n":"canvas_table","t":"string"},{"n":"spilled","t":"boolean"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"next_offset","t":"number"},{"n":"error","t":"object"}]},{"name":"fema_dataframe_query","server":42,"verb":"dataframe","cls":"query","resolver":false,"title":"Query FEMA DataCanvas Table","description":"Run a read-only SQL SELECT against a DataCanvas table staged by fema_search_nfip. Enables aggregation, GROUP BY, SUM/COUNT, time-series, and filtered analysis over the full NFIP claims result without re-fetching from the API. Call fema_dataframe_describe first to get the exact table name and column names needed for valid SQL. Only SELECT statements are allowed — DDL, DML, COPY, and file-reading functions are blocked. A response holds at most 100,000 characters of rows; when it holds fewer rows than the query returned, truncated and shown are set and the notice says how to page with OFFSET.","input":[{"n":"canvas_id","t":"string","r":true},{"n":"query","t":"string","r":true}],"output":[{"n":"rows","t":"array<object>"},{"n":"row_count","t":"number"},{"n":"canvas_id","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"fema_dataframe_describe","server":42,"verb":"dataframe","cls":"query","resolver":false,"title":"Describe FEMA DataCanvas Tables","description":"List tables and column schemas on a DataCanvas staged by fema_search_nfip. Call this before fema_dataframe_query to discover the exact table name, column names, and DuckDB data types needed to write valid SQL. Row count reflects what was actually staged — check truncated in the fema_search_nfip response to know whether the canvas holds the full matching set.","input":[{"n":"canvas_id","t":"string","r":true}],"output":[{"n":"tables","t":"array<object>"},{"n":"canvas_id","t":"string"},{"n":"error","t":"object"}]},{"name":"fema_query_dataset","server":42,"verb":"query","cls":"query","resolver":false,"title":"Query Any OpenFEMA Dataset","description":"Generic OData query against any dataset in the OpenFEMA dataset catalog — the escape hatch for datasets the convenience tools do not cover (e.g., NfipPolicies, IndividualAssistanceHousingRegistrantsLargeDisasters, FemaWebDeclarationAreas, PublicAssistanceApplicants). Accepts raw OData filter, select, orderby, and pagination parameters. For NfipPolicies, use propertyState (not state) for the state and reportedZipCode for the ZIP code — it has no countyCode; always include a ZIP filter to avoid timeout. The dataset name must match the exact OpenFEMA entity name (case-sensitive, e.g., NfipClaims). Names missing from the catalog return an unknown_dataset error; a listed dataset OpenFEMA does not serve through the API, or a retired version, returns dataset_not_served. A page holds at most 100,000 characters of records; when records remain past it, next_offset is the offset to continue from.","input":[{"n":"dataset","t":"string","r":true},{"n":"filter","t":"string"},{"n":"select","t":"string"},{"n":"orderby","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"dataset","t":"string"},{"n":"rows","t":"array<object>"},{"n":"total_count","t":"number"},{"n":"returned_count","t":"number"},{"n":"notice","t":"string"},{"n":"next_offset","t":"number"},{"n":"totalCount","t":"number"},{"n":"error","t":"object"}]},{"name":"epss_get_scores","server":43,"verb":"get","cls":"get","resolver":false,"title":"Epss Get Scores","description":"Retrieve latest available or historically dated FIRST EPSS probability and percentile for supplied CVEs. Process up to 500 unique entries from batchOffset; response byte limits can return fewer whole entries. Resume with nextBatchOffset as batchOffset, the original cves and returned score date as date. deferredCves were not queried; withheldCves were processed but omitted, and either list can be a declared preview. Missing scores remain unknown; use epss_list_reference for coverage and interpretation.","input":[{"n":"cves","t":"array<string>","r":true},{"n":"date","t":"string"},{"n":"batchOffset","t":"integer"}],"output":[{"n":"scores","t":"array<object>"},{"n":"batchOffset","t":"integer"},{"n":"nextBatchOffset","t":"integer"},{"n":"returnedCount","t":"integer"},{"n":"withheldCount","t":"integer"},{"n":"withheldCves","t":"array<string>"},{"n":"withheldCvesComplete","t":"boolean"},{"n":"deferredCount","t":"integer"},{"n":"deferredCvesComplete","t":"boolean"},{"n":"budgetLimited","t":"boolean"},{"n":"unscoredCves","t":"array<object>"},{"n":"deferredCves","t":"array<string>"},{"n":"requestedCount","t":"integer"},{"n":"processedCount","t":"integer"},{"n":"duplicateCount","t":"integer"},{"n":"provenance","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"epss_get_timeseries","server":43,"verb":"get","cls":"get","resolver":false,"title":"Epss Get Timeseries","description":"Retrieve an EPSS anchor and up to 30 preceding daily observations for up to 50 unique CVEs from batchOffset. Response byte limits retain whole history items. Resume CVE batches with nextBatchOffset as batchOffset, the original cves and returned score date as date; withheldCves were processed, deferredCves were not queried, and lists can be declared previews. Exact 7-day and 30-day deltas require their calendar baselines; gaps remain unknown. Model boundaries do not explain score movement. Re-anchor using previousAnchorDate for the preceding history window; that snapshot may be unavailable.","input":[{"n":"cves","t":"array<string>","r":true},{"n":"date","t":"string"},{"n":"batchOffset","t":"integer"}],"output":[{"n":"items","t":"array<object>"},{"n":"batchOffset","t":"integer"},{"n":"nextBatchOffset","t":"integer"},{"n":"returnedCount","t":"integer"},{"n":"withheldCount","t":"integer"},{"n":"withheldCves","t":"array<string>"},{"n":"withheldCvesComplete","t":"boolean"},{"n":"deferredCount","t":"integer"},{"n":"deferredCvesComplete","t":"boolean"},{"n":"budgetLimited","t":"boolean"},{"n":"unscoredCves","t":"array<object>"},{"n":"deferredCves","t":"array<string>"},{"n":"requestedCount","t":"integer"},{"n":"processedCount","t":"integer"},{"n":"duplicateCount","t":"integer"},{"n":"provenance","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"epss_query_threshold","server":43,"verb":"query","cls":"query","resolver":false,"title":"Epss Query Threshold","description":"Discover CVEs using inclusive EPSS or percentile bounds, CVE year or dataset-addition recency; filters intersect and at least one is required. Examine one candidate page ordered by EPSS descending. Each serialized response surface fits 65536 UTF-8 bytes; budgetLimited and withheldCount disclose whole matches withheld, with nextOffset at the first withheld match. Year filtering can return an empty page with nextOffset; candidateTotal is a broad-query total, not an exact-year total. Continue with the same filters, limit, returned score date and nextOffset.","input":[{"n":"minEpss","t":"number"},{"n":"maxEpss","t":"number"},{"n":"minPercentile","t":"number"},{"n":"maxPercentile","t":"number"},{"n":"year","t":"integer"},{"n":"addedWithinDays","t":"integer"},{"n":"date","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"scores","t":"array<object>"},{"n":"filters","t":"object"},{"n":"pagination","t":"object"},{"n":"provenance","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"epss_prioritize_cves","server":43,"verb":"prioritize","cls":"analyze","resolver":false,"title":"Epss Prioritize Cves","description":"Assign remediation tiers using latest or dated EPSS and caller-supplied CVSS base severity. Defaults are severity >= 7 and EPSS probability >= 0.10; select percentile explicitly for population rank. Missing severity stays in epssOnly and missing EPSS stays unscored. Thresholds are policy conventions, not FIRST guidance. Process up to 500 unique entries from batchOffset, returning whole entries within the byte budget. Resume using nextBatchOffset as batchOffset, the original cves with original cvssBaseScore values, returned score date as date, and the same severityThreshold and likelihood. Deferred lists may be declared previews; withheldCves were already processed.","input":[{"n":"batchOffset","t":"integer"},{"n":"date","t":"string"},{"n":"cves","t":"array<object>","r":true},{"n":"severityThreshold","t":"number"},{"n":"likelihood","t":"object"}],"output":[{"n":"tiers","t":"object"},{"n":"epssOnly","t":"array<object>"},{"n":"batchOffset","t":"integer"},{"n":"nextBatchOffset","t":"integer"},{"n":"returnedCount","t":"integer"},{"n":"withheldCount","t":"integer"},{"n":"withheldCves","t":"array<string>"},{"n":"withheldCvesComplete","t":"boolean"},{"n":"deferredCount","t":"integer"},{"n":"deferredCvesComplete","t":"boolean"},{"n":"budgetLimited","t":"boolean"},{"n":"unscoredCves","t":"array<object>"},{"n":"deferredCves","t":"array<string>"},{"n":"requestedCount","t":"integer"},{"n":"processedCount","t":"integer"},{"n":"duplicateCount","t":"integer"},{"n":"provenance","t":"object"},{"n":"thresholds","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"epss_list_reference","server":43,"verb":"list","cls":"list","resolver":false,"title":"Epss List Reference","description":"Explain FIRST EPSS interpretation, model publishing dates, lookup coverage and transparent prioritization policy. Use this static reference before interpreting missing scores, score movement or probability versus percentile thresholds.","input":[{"n":"topic","t":"enum(5)"}],"output":[{"n":"topics","t":"array<object>"},{"n":"verifiedAt","t":"const"},{"n":"error","t":"object"}]},{"name":"gbif_match_species","server":44,"verb":"match","cls":"resolve","resolver":true,"title":"Match Species Name","description":"Match a scientific name against the GBIF backbone taxonomy. Returns the best-matching taxon with full classification and a confidence score (0–100). This is the mandatory first step for any GBIF workflow — it returns the backbone taxonKey required by gbif_search_occurrences, gbif_count_occurrences, and gbif_occurrence_facets. When the queried name is a synonym, taxonKey is the accepted taxon it resolves to and matchedTaxonKey carries the synonym's own key; occurrence counts differ sharply between the two, so pass taxonKey. Below confidence 80, the match should be reviewed. matchType NONE means no usable match was found — try removing the strict flag or broadening the name.","input":[{"n":"name","t":"string","r":true},{"n":"strict","t":"boolean"},{"n":"kingdom","t":"string"},{"n":"rank","t":"enum(8)"}],"output":[{"n":"taxonKey","t":"number"},{"n":"matchedTaxonKey","t":"number"},{"n":"scientificName","t":"string"},{"n":"canonicalName","t":"string"},{"n":"rank","t":"string"},{"n":"status","t":"string"},{"n":"confidence","t":"number"},{"n":"matchType","t":"string"},{"n":"kingdom","t":"string"},{"n":"phylum","t":"string"},{"n":"class","t":"string"},{"n":"order","t":"string"},{"n":"family","t":"string"},{"n":"genus","t":"string"},{"n":"species","t":"string"},{"n":"kingdomKey","t":"number"},{"n":"phylumKey","t":"number"},{"n":"classKey","t":"number"},{"n":"orderKey","t":"number"},{"n":"familyKey","t":"number"},{"n":"genusKey","t":"number"},{"n":"speciesKey","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"gbif_bulk_match_species","server":44,"verb":"bulk","cls":"resolve","resolver":true,"title":"Bulk Match Species Names","description":"Resolve up to 50 scientific names to GBIF backbone taxon keys in one call — the batch counterpart to gbif_match_species for checklist, inventory, and species-list workflows that would otherwise need one round trip per name. Each name is matched independently and results are returned in input order, one entry per processed name. By default, an oversized batch processes the first 50 and returns the remainder in unprocessedNames. A name with no backbone match yields matchType NONE (no taxonKey) instead of failing the batch; a per-name lookup failure yields matchType ERROR carrying that name's error message and, when the failure was classified, a machine-readable reason — the rest of the batch is unaffected, and the call as a whole still succeeds. When a queried name is a synonym, taxonKey is the accepted taxon it resolves to and matchedTaxonKey carries the synonym's own key. Common names are not supported — use gbif_search_species for vernacular searches. Below confidence 80, review the match.","input":[{"n":"names","t":"array<string>","r":true},{"n":"strict","t":"boolean"}],"output":[{"n":"unprocessedNames","t":"array<string>"},{"n":"results","t":"array<object>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"gbif_get_species","server":44,"verb":"get","cls":"get","resolver":false,"title":"Get Species Record","description":"Fetch a single backbone taxon by its GBIF taxon key. Returns full classification, authorship, taxonomic status, vernacular name, descendant count, and publication reference. Use after gbif_match_species when you need the complete record rather than the match summary. When taxonomicStatus is SYNONYM, acceptedKey and accepted fields identify the accepted taxon. The extinct field is absent (not false) on most records — only present on explicitly flagged taxa.","input":[{"n":"taxonKey","t":"number","r":true}],"output":[{"n":"key","t":"number"},{"n":"scientificName","t":"string"},{"n":"canonicalName","t":"string"},{"n":"authorship","t":"string"},{"n":"vernacularName","t":"string"},{"n":"rank","t":"string"},{"n":"taxonomicStatus","t":"string"},{"n":"numDescendants","t":"number"},{"n":"numOccurrences","t":"number"},{"n":"publishedIn","t":"string"},{"n":"extinct","t":"boolean"},{"n":"kingdom","t":"string"},{"n":"phylum","t":"string"},{"n":"class","t":"string"},{"n":"order","t":"string"},{"n":"family","t":"string"},{"n":"genus","t":"string"},{"n":"species","t":"string"},{"n":"kingdomKey","t":"number"},{"n":"phylumKey","t":"number"},{"n":"classKey","t":"number"},{"n":"orderKey","t":"number"},{"n":"familyKey","t":"number"},{"n":"genusKey","t":"number"},{"n":"speciesKey","t":"number"},{"n":"acceptedKey","t":"number"},{"n":"accepted","t":"string"},{"n":"parentKey","t":"number"},{"n":"parent","t":"string"},{"n":"error","t":"object"}]},{"name":"gbif_search_species","server":44,"verb":"search","cls":"search","resolver":false,"title":"Search Species Taxonomy","description":"Search or browse the GBIF backbone taxonomy by default, or an explicit checklist datasetKey. Accepts scientific name fragments, rank filters, and higher-taxon constraints. Useful for exploring what species exist under a higher taxon (e.g., \"list all families of Coleoptera\"), for simple name-fragment searches, or when gbif_match_species returns too narrow a result. kingdom, family, and genus scope the browse to a higher taxon: each is resolved to its backbone key before the search runs, so the narrowest one supplied is what scopes, an alternative name resolves to the taxon it is a synonym of, and a name that matches no backbone taxon at that rank fails rather than returning the whole index. Names are capitalized as GBIF writes them (\"Paridae\", not \"paridae\") and are matched exactly, not fuzzily. Paginated — use limit and offset to walk through results.","input":[{"n":"q","t":"string"},{"n":"rank","t":"enum(8)"},{"n":"kingdom","t":"string"},{"n":"family","t":"string"},{"n":"genus","t":"string"},{"n":"isExtinct","t":"boolean"},{"n":"datasetKey","t":"string"},{"n":"limit","t":"number"},{"n":"offset","t":"number"}],"output":[{"n":"taxa","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"offset","t":"number"},{"n":"limit","t":"number"},{"n":"endOfRecords","t":"boolean"},{"n":"taxonScope","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"gbif_get_species_classification","server":44,"verb":"get","cls":"get","resolver":false,"title":"Get Species Classification","description":"Return the parent chain for a taxon — from kingdom (or domain) down to the immediate parent of the queried taxon — as an ordered array. Each entry has its rank, canonical name, and taxon key. The array is returned root-first (kingdom → phylum → class → … → immediate parent of the queried taxon); the queried taxon itself is not included — call gbif_get_species for its own record. Useful for building taxonomic trees or understanding placement without navigating the backbone level-by-level.","input":[{"n":"taxonKey","t":"number","r":true}],"output":[{"n":"classification","t":"array<object>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"gbif_get_species_children","server":44,"verb":"get","cls":"get","resolver":false,"title":"Get Species Children","description":"List direct children of a backbone taxon — genera within a family, species within a genus, subspecies within a species. Paginated. Use gbif_match_species to get the taxonKey first, then iterate with offset for large groups.","input":[{"n":"taxonKey","t":"number","r":true},{"n":"limit","t":"number"},{"n":"offset","t":"number"}],"output":[{"n":"children","t":"array<object>"},{"n":"offset","t":"number"},{"n":"limit","t":"number"},{"n":"endOfRecords","t":"boolean"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"gbif_search_occurrences","server":44,"verb":"search","cls":"search","resolver":false,"title":"Search Occurrences","description":"Search 3.9B+ GBIF occurrence records with Darwin Core filters. Use taxonKey from gbif_match_species for reliable results — it resolves synonyms automatically. Accepts country (uppercase ISO 3166-1 alpha-2, where the record was observed), publishingCountry (the publishing organization's country — a different question), stateProvince, bounding box (decimalLatitude/decimalLongitude ranges), WKT polygon geometry, year range, month, basis of record, coordinate filter, and dataset key. Returns sightings only by default — GBIF also indexes absence records (surveys that looked and found nothing), and occurrenceStatus controls whether they are included. Pagination is capped at offset+limit=100,001 and GBIF offers no cursor or scroll, so a larger result set is covered only by partitioning it — facet it by DATASET_KEY with gbif_occurrence_facets and search each datasetKey separately. BASIS_OF_RECORD and PUBLISHING_COUNTRY are gap-free second cuts for a dataset bucket still over the cap; YEAR, MONTH, STATE_PROVINCE, and SPECIES_KEY lose records lacking that dimension. Repeat every biological filter on the facet call and each partition search, including the same occurrenceStatus, and compare sub-split sums against the bucket total. Bulk retrieval is outside this server: use the asynchronous GBIF Download API with a GBIF.org account or the monthly GBIF Parquet snapshot on AWS Open Data.","input":[{"n":"taxonKey","t":"number"},{"n":"scientificName","t":"string"},{"n":"country","t":"string"},{"n":"publishingCountry","t":"string"},{"n":"stateProvince","t":"string"},{"n":"decimalLatitude","t":"string"},{"n":"decimalLongitude","t":"string"},{"n":"geometry","t":"string"},{"n":"year","t":"string"},{"n":"month","t":"number"},{"n":"basisOfRecord","t":"enum(11)"},{"n":"hasCoordinate","t":"boolean"},{"n":"isInCluster","t":"boolean"},{"n":"coordinateUncertaintyInMeters","t":"string"},{"n":"datasetKey","t":"string"},{"n":"occurrenceStatus","t":"enum(3)"},{"n":"iucnRedListCategory","t":"enum(9)"},{"n":"limit","t":"number"},{"n":"offset","t":"number"}],"output":[{"n":"occurrences","t":"array<object>"},{"n":"scope","t":"object"},{"n":"totalCount","t":"number"},{"n":"offset","t":"number"},{"n":"limit","t":"number"},{"n":"endOfRecords","t":"boolean"},{"n":"occurrenceStatus","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"gbif_count_occurrences","server":44,"verb":"count","cls":"query","resolver":false,"title":"Count Occurrences","description":"Count occurrences matching a taxon + location filter without fetching records. Use for quick totals (\"how many Aves records in Sweden?\") or before deciding whether to paginate a full search. Accepts taxonKey, country (uppercase ISO 3166-1 alpha-2), publishingCountry, stateProvince, scientificName, spatial ranges and geometry (intersected), month, basisOfRecord, hasCoordinate (alias isGeoreferenced), isInCluster, coordinateUncertaintyInMeters, datasetKey, year, occurrenceStatus, and iucnRedListCategory. Counts sightings only by default, matching gbif_search_occurrences — GBIF also indexes absence records, and for some taxa they are the overwhelming majority. A count above 100,001 is the signal to partition rather than page: gbif_search_occurrences cannot reach past that offset, so split the query by DATASET_KEY via gbif_occurrence_facets and search each dataset separately.","input":[{"n":"scientificName","t":"string"},{"n":"decimalLatitude","t":"string"},{"n":"decimalLongitude","t":"string"},{"n":"geometry","t":"string"},{"n":"month","t":"number"},{"n":"basisOfRecord","t":"enum(11)"},{"n":"hasCoordinate","t":"boolean"},{"n":"isInCluster","t":"boolean"},{"n":"coordinateUncertaintyInMeters","t":"string"},{"n":"taxonKey","t":"number"},{"n":"country","t":"string"},{"n":"publishingCountry","t":"string"},{"n":"stateProvince","t":"string"},{"n":"isGeoreferenced","t":"boolean"},{"n":"datasetKey","t":"string"},{"n":"year","t":"string"},{"n":"occurrenceStatus","t":"enum(3)"},{"n":"iucnRedListCategory","t":"enum(9)"}],"output":[{"n":"count","t":"number"},{"n":"scope","t":"object"},{"n":"occurrenceStatus","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"gbif_get_occurrence","server":44,"verb":"get","cls":"get","resolver":false,"title":"Get Occurrence Record","description":"Fetch a single occurrence record by its GBIF occurrence key. Returns the complete Darwin Core record — all coordinates, administrative geography (GADM levels 0–3), dates, collections metadata, collector identifiers, conservation status, media links, and quality issue flags. Check occurrenceStatus before reading the record as a sighting: ABSENT means a survey looked for the taxon and did not find it. Use the occurrence key from gbif_search_occurrences results.","input":[{"n":"occurrenceKey","t":"number","r":true}],"output":[{"n":"key","t":"number"},{"n":"datasetKey","t":"string"},{"n":"occurrenceID","t":"string"},{"n":"taxonKey","t":"number"},{"n":"scientificName","t":"string"},{"n":"canonicalName","t":"string"},{"n":"kingdom","t":"string"},{"n":"phylum","t":"string"},{"n":"class","t":"string"},{"n":"classKey","t":"number"},{"n":"order","t":"string"},{"n":"family","t":"string"},{"n":"genus","t":"string"},{"n":"species","t":"string"},{"n":"taxonRank","t":"string"},{"n":"taxonomicStatus","t":"string"},{"n":"decimalLatitude","t":"number"},{"n":"decimalLongitude","t":"number"},{"n":"coordinateUncertaintyInMeters","t":"number"},{"n":"continent","t":"string"},{"n":"country","t":"string"},{"n":"countryCode","t":"string"},{"n":"stateProvince","t":"string"},{"n":"locality","t":"string"},{"n":"gadm","t":"object"},{"n":"publishingCountry","t":"string"},{"n":"eventDate","t":"string"},{"n":"eventTime","t":"string"},{"n":"year","t":"number"},{"n":"month","t":"number"},{"n":"day","t":"number"},{"n":"basisOfRecord","t":"string"},{"n":"occurrenceStatus","t":"string"},{"n":"iucnRedListCategory","t":"string"},{"n":"institutionCode","t":"string"},{"n":"collectionCode","t":"string"},{"n":"catalogNumber","t":"string"},{"n":"recordedBy","t":"string"},{"n":"identifiedBy","t":"string"},{"n":"individualCount","t":"number"},{"n":"sex","t":"string"},{"n":"lifeStage","t":"string"},{"n":"issues","t":"array<string>"},{"n":"media","t":"array<object>"},{"n":"identifiers","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"gbif_occurrence_facets","server":44,"verb":"facets","cls":"query","resolver":false,"title":"Occurrence Facet Aggregation","description":"Aggregate occurrence counts across a dimension (COUNTRY, STATE_PROVINCE, YEAR, BASIS_OF_RECORD, DATASET_KEY, KINGDOM_KEY, etc.). Returns one page of facet values ranked by count descending — the top facetLimit at facetOffset 0, a later slice of the same ranking past that. No record payloads returned. Core tool for distribution analysis and trend queries: \"which countries have the most records for this species?\", \"how has observation volume changed since 2010?\". Scope the aggregation with taxonKey, country (uppercase ISO 3166-1 alpha-2), publishingCountry, stateProvince, year, scientificName, latitude/longitude ranges, month, hasCoordinate, isInCluster, coordinateUncertaintyInMeters, geometry (all spatial filters intersect), basisOfRecord, datasetKey, occurrenceStatus, or iucnRedListCategory filters. Also the way to split a result set too large for gbif_search_occurrences to page (offset+limit caps at 100,001): facet by DATASET_KEY, then search each datasetKey on its own. Aggregates sightings only by default, matching gbif_search_occurrences and gbif_count_occurrences; to measure the presence/absence split itself, pass facet OCCURRENCE_STATUS with occurrenceStatus ANY.","input":[{"n":"scientificName","t":"string"},{"n":"decimalLatitude","t":"string"},{"n":"decimalLongitude","t":"string"},{"n":"month","t":"number"},{"n":"hasCoordinate","t":"boolean"},{"n":"isInCluster","t":"boolean"},{"n":"coordinateUncertaintyInMeters","t":"string"},{"n":"facet","t":"enum(16)","r":true},{"n":"taxonKey","t":"number"},{"n":"country","t":"string"},{"n":"publishingCountry","t":"string"},{"n":"stateProvince","t":"string"},{"n":"year","t":"string"},{"n":"basisOfRecord","t":"enum(11)"},{"n":"geometry","t":"string"},{"n":"datasetKey","t":"string"},{"n":"occurrenceStatus","t":"enum(3)"},{"n":"iucnRedListCategory","t":"enum(9)"},{"n":"facetLimit","t":"number"},{"n":"facetOffset","t":"number"}],"output":[{"n":"facet","t":"string"},{"n":"totalOccurrences","t":"number"},{"n":"counts","t":"array<object>"},{"n":"scope","t":"object"},{"n":"facetLimit","t":"number"},{"n":"facetOffset","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"occurrenceStatus","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"gbif_search_datasets","server":44,"verb":"search","cls":"search","resolver":false,"title":"Search Datasets","description":"Search GBIF datasets by keyword, type, publishing country (uppercase ISO 3166-1 alpha-2), publishing organization, or hosting organization. The two organization filters answer different questions — publishingOrg matches the organization whose data it is, hostingOrg the organization whose installation serves it — and an organization key from gbif_search_publishers usually wants publishingOrg. Returns dataset title, description, license, record count, and DOI. Use to find the source dataset behind a set of records, or to explore what data collections are available for a taxon, country, or organization.","input":[{"n":"q","t":"string"},{"n":"type","t":"enum(4)"},{"n":"publishingCountry","t":"string"},{"n":"publishingOrg","t":"string"},{"n":"hostingOrg","t":"string"},{"n":"limit","t":"number"},{"n":"offset","t":"number"}],"output":[{"n":"datasets","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"offset","t":"number"},{"n":"limit","t":"number"},{"n":"endOfRecords","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"gbif_get_dataset","server":44,"verb":"get","cls":"get","resolver":false,"title":"Get Dataset","description":"Fetch full dataset metadata by UUID key — title, description, citation text, contacts, license, DOI, record count, numConstituents (sub-datasets), and temporal/geographic coverage. Use after gbif_search_datasets or when an occurrence record's datasetKey needs provenance detail. Contacts are capped by contactLimit (default 10); contactsTotal and contactsReturned report the full count.","input":[{"n":"datasetKey","t":"string","r":true},{"n":"contactLimit","t":"integer"}],"output":[{"n":"key","t":"string"},{"n":"title","t":"string"},{"n":"type","t":"string"},{"n":"description","t":"string"},{"n":"license","t":"string"},{"n":"doi","t":"string"},{"n":"citationText","t":"string"},{"n":"publishingCountry","t":"string"},{"n":"recordCount","t":"number"},{"n":"recordCountNotice","t":"string"},{"n":"numConstituents","t":"number"},{"n":"contacts","t":"array<object>"},{"n":"contactsTotal","t":"number"},{"n":"contactsReturned","t":"number"},{"n":"temporalCoverages","t":"array<object>"},{"n":"temporalCoverageNotice","t":"string"},{"n":"geographicCoverages","t":"array<object>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"gbif_search_publishers","server":44,"verb":"search","cls":"search","resolver":false,"title":"Search Publishers","description":"Search organizations registered with GBIF by name fragment or country. Returns organization key, title, and country — sufficient to chain into gbif_search_datasets as publishingOrg for the datasets an organization published, or as hostingOrg for the ones its own installation serves, or to understand who publishes data for a region. publishingOrg is the usual chain: most organizations publish through an installation someone else runs, so hostingOrg matches nothing for them.","input":[{"n":"q","t":"string"},{"n":"country","t":"string"},{"n":"limit","t":"number"},{"n":"offset","t":"number"}],"output":[{"n":"publishers","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"offset","t":"number"},{"n":"limit","t":"number"},{"n":"endOfRecords","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"gdelt_search_articles","server":45,"verb":"search","cls":"search","resolver":false,"title":"Search GDELT Articles","description":"Search the last 3 months of global news coverage (65+ languages) using the GDELT DOC API. Fetches up to 250 articles with URL, title, source domain, language, country, publication date, and social image URL, and returns as many as fit a 48,000-byte response — the rest are counted in withheldCount, with a continuation to reach them. Query supports full GDELT syntax: phrases (\"bird flu\"), boolean OR ((flu OR pandemic)), source country (sourcecountry:china), source language (sourcelang:spanish), domain (domain:who.int), GKG theme (theme:TAX_DISEASE_OUTBREAK — find identifiers with gdelt_search_themes), tone filter (tone<-5 for negative), proximity (near20:\"flu virus\"), and repeat (repeat3:\"outbreak\"). 250 is a hard per-call ceiling and GDELT offers no cursor: when a query fills it or a response comes back cut, re-query narrower startDatetime/endDatetime windows — the response hands back the exact windows to use. Note: this API covers only the most recent 3 months — use gdelt_search_tv for historical TV transcripts back to 2009.","input":[{"n":"query","t":"string","r":true},{"n":"timespan","t":"string"},{"n":"startDatetime","t":"string"},{"n":"endDatetime","t":"string"},{"n":"maxRecords","t":"integer"},{"n":"sort","t":"enum(6)"}],"output":[{"n":"articles","t":"array<object>"},{"n":"effectiveQuery","t":"string"},{"n":"totalCount","t":"number"},{"n":"timespan","t":"string"},{"n":"limitClamp","t":"object"},{"n":"withheldCount","t":"number"},{"n":"notice","t":"string"},{"n":"continuationWindows","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"gdelt_get_coverage_timeline","server":45,"verb":"get","cls":"get","resolver":false,"title":"Get GDELT Coverage Timeline","description":"Retrieve a time series showing when news coverage of a topic spiked, or how average tone shifted over time. Use mode \"volume\" for normalized coverage intensity (% of all global coverage per timestep). Use mode \"volume_with_articles\" for the same signal plus the top articles that drove each spike — this is the primary signal-detection mode: a single call reveals both the spike and its cause, avoiding a follow-up gdelt_search_articles call. Use mode \"tone\" for average sentiment score per timestep (negative = hostile/fearful, positive = celebratory). Date resolution is inferred from returned intervals: 15 minutes or hours for short windows, days for longer ones. In volume_with_articles mode each timestep carries its first 3 article links and referenceCount, its true article count; name timesteps' dates in points to get only those timesteps, each with its full list. A response carries as many whole timesteps as fit its size budget; when more remain it returns nextOffset — pass it back as offset with otherwise identical inputs for the next page. Note: DOC API covers only the last 3 months.","input":[{"n":"query","t":"string","r":true},{"n":"mode","t":"enum(3)"},{"n":"timespan","t":"string"},{"n":"startDatetime","t":"string"},{"n":"endDatetime","t":"string"},{"n":"smoothing","t":"integer"},{"n":"points","t":"array<string>"},{"n":"offset","t":"integer"}],"output":[{"n":"dateResolution","t":"enum(3)"},{"n":"series","t":"array<object>"},{"n":"expandedPoints","t":"array<string>"},{"n":"nextOffset","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"mode","t":"enum(3)"},{"n":"totalCount","t":"number"},{"n":"startDatetime","t":"string"},{"n":"endDatetime","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"gdelt_get_tone_distribution","server":45,"verb":"get","cls":"get","resolver":false,"title":"Get GDELT Tone Distribution","description":"Get the tonal distribution of articles matching a query as a histogram (bins approximately -30 to +30). Unlike a single average tone score, the histogram reveals whether coverage is uniformly negative, bimodal (some articles extremely positive and some extremely negative), or clustered near neutral. Each bin carries its first 3 representative article links and referenceCount, how many GDELT returned; name bins in the bins input to get only those bins, each with every link. A response carries as many whole bins as fit its size budget; when more remain it returns nextOffset — pass it back as offset with otherwise identical inputs for the next page. Distinct from gdelt_get_coverage_timeline (mode: tone) — this is a snapshot distribution across all matching articles, not a time series. Use gdelt_get_coverage_timeline with mode \"tone\" to see how sentiment shifted over time.","input":[{"n":"query","t":"string","r":true},{"n":"timespan","t":"string"},{"n":"startDatetime","t":"string"},{"n":"endDatetime","t":"string"},{"n":"bins","t":"array<integer>"},{"n":"offset","t":"integer"}],"output":[{"n":"histogram","t":"array<object>"},{"n":"summary","t":"object"},{"n":"nextOffset","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"totalCount","t":"number"},{"n":"startDatetime","t":"string"},{"n":"endDatetime","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"gdelt_get_coverage_breakdown","server":45,"verb":"get","cls":"get","resolver":false,"title":"Get GDELT Coverage Breakdown","description":"Break down news coverage volume over time by source language or source country, returning a multi-series time series (one series per language or country). Shows which countries or languages drove early vs. late coverage — useful for tracing how a story propagated geographically or across language communities. Returns the top 10 series ranked by the sum of their values and names every other series under otherSeriesLabels — pass any labels, ranked or not, as the series input to get only those series, complete. A response carries as many whole series as fit its size budget; when more remain it returns nextOffset — pass it back as offset with otherwise identical inputs for the next page. Values are normalized: each point is the topic's share of that source's media output, not an absolute article count, so values from different sources do not add up to a share. Small media markets with concentrated coverage therefore rank above large markets with diverse output — a high value means the topic dominated that source's coverage, not that it published the most articles. Use breakdownBy \"country\" with the signal-detection chain to map geographic attention, or \"language\" to detect non-English media surges.","input":[{"n":"query","t":"string","r":true},{"n":"breakdownBy","t":"enum(2)","r":true},{"n":"timespan","t":"string"},{"n":"startDatetime","t":"string"},{"n":"endDatetime","t":"string"},{"n":"series","t":"array<string>"},{"n":"offset","t":"integer"}],"output":[{"n":"dateResolution","t":"enum(3)"},{"n":"topSeries","t":"array<object>"},{"n":"otherSeriesLabels","t":"array<string>"},{"n":"selectedSeries","t":"array<object>"},{"n":"nextOffset","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"breakdownBy","t":"enum(2)"},{"n":"totalCount","t":"number"},{"n":"startDatetime","t":"string"},{"n":"endDatetime","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"gdelt_search_themes","server":45,"verb":"search","cls":"search","resolver":false,"title":"Search GDELT GKG Themes","description":"Find GDELT Global Knowledge Graph (GKG) theme identifiers for the theme: operator that gdelt_search_articles, gdelt_get_coverage_timeline, gdelt_get_tone_distribution, and gdelt_get_coverage_breakdown accept in query. Searches the identifiers in the GDELT GKG theme lookup, which carries no labels or descriptions: every query word must begin one of the _-separated parts of an identifier or run across consecutive parts, or all the words joined must, so \"drought\" finds NATURAL_DISASTER_DROUGHT, \"cyberattack\" finds CYBER_ATTACK, \"plant disease\" finds TAX_PLANTDISEASE, and \"wb water\" narrows to World Bank water themes. There is no stemming or synonym matching — \"displacement\" does not reach DISPLACED — except one fallback: when nothing matches, the search retries once with a trailing s dropped from each word of four or more letters, and says so. Matches rank an exact identifier first, then by the count the lookup lists — a static prevalence figure, not a live article total — and each carries a paste-ready operator such as theme:TAX_DISEASE_OUTBREAK. Page with offset and limit (up to 100 matches per page; a larger limit runs at 100).","input":[{"n":"query","t":"string","r":true},{"n":"offset","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"matches","t":"array<object>"},{"n":"totalMatches","t":"number"},{"n":"offset","t":"number"},{"n":"limit","t":"number"},{"n":"nextOffset","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"totalCount","t":"number"},{"n":"limitClamp","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"gdelt_search_tv","server":45,"verb":"search","cls":"search","resolver":false,"title":"Search GDELT TV News","description":"Search US television news closed captions (2009–October 2024, 150+ stations) for spoken mentions of a query. Returns a bounded, paged per-station time series showing airtime devoted to the topic — up to 500 points per page; a larger limit runs at 500. Each series carries GDELT's display name for the station and, when that name resolves to one, the station ID gdelt_get_tv_clips takes as stations. Use the stations parameter to select networks (e.g. [\"CNN\", \"FOXNEWS\", \"MSNBC\"]) — the TV API requires at least one station, supplied either there or as a station: selector inside query. TV query also supports in-query operators: station:CNN, network:CBS, market:\"National\", show:\"Anderson Cooper 360\", context:\"vaccine\". Important: most station monitoring ended October 2024 — use gdelt_list_tv_stations to verify active date ranges before querying recent events.","input":[{"n":"query","t":"string","r":true},{"n":"stations","t":"array<string>"},{"n":"timespan","t":"string"},{"n":"startDatetime","t":"string"},{"n":"endDatetime","t":"string"},{"n":"smoothing","t":"integer"},{"n":"normalize","t":"boolean"},{"n":"dateres","t":"enum(5)"},{"n":"offset","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"dateResolution","t":"enum(5)"},{"n":"timeRange","t":"object"},{"n":"series","t":"array<object>"},{"n":"normalized","t":"boolean"},{"n":"totalPoints","t":"number"},{"n":"offset","t":"number"},{"n":"limit","t":"number"},{"n":"nextOffset","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"totalCount","t":"number"},{"n":"limitClamp","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"gdelt_get_tv_clips","server":45,"verb":"get","cls":"get","resolver":false,"title":"Get GDELT TV Clips","description":"Retrieve the top matching TV news clips for a query from the Internet Archive's Television News Archive: fetches up to 3,000 and returns as many as fit a 48,000-byte response — the rest are counted in withheldCount, with a continuation to reach them. Each clip includes show name, the station's display name — with its station ID when that name resolves to one — air timestamp, a 15-second transcript excerpt, and a direct link to view the full one-minute clip. Use after gdelt_search_tv to read the actual transcript content driving a coverage spike — pass a series' station value as stations here. GDELT answers TV windows in whole clock hours; clips it returns from outside an explicit startDatetime/endDatetime window are dropped, and continuing a cut response at maxRecords 3000 leaves room for them. 3,000 is a hard per-call ceiling and GDELT offers no cursor: when a query fills it or a response comes back cut, re-query narrower startDatetime/endDatetime windows — the response hands back the exact windows to use. Archive coverage spans 2009–October 2024.","input":[{"n":"query","t":"string","r":true},{"n":"stations","t":"array<string>"},{"n":"timespan","t":"string"},{"n":"startDatetime","t":"string"},{"n":"endDatetime","t":"string"},{"n":"maxRecords","t":"integer"},{"n":"sort","t":"enum(3)"}],"output":[{"n":"clips","t":"array<object>"},{"n":"effectiveQuery","t":"string"},{"n":"totalCount","t":"number"},{"n":"limitClamp","t":"object"},{"n":"withheldCount","t":"number"},{"n":"notice","t":"string"},{"n":"continuationWindows","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"gdelt_get_tv_context","server":45,"verb":"get","cls":"get","resolver":false,"title":"Get GDELT TV Context","description":"Get the top co-occurring words and phrases from TV news clips matching a query — the vocabulary framing a topic on television. Returns the most frequent non-stopword terms with relative frequency scores (0–100, where 100 = the query term itself). Terms and scores come from GDELT's relevance-ranked sample of matching clips, documented as the 200 most relevant, not all matching coverage — compare windows or stations with a separate, narrower call for each. Use to understand narrative framing, identify related concepts mentioned alongside a topic, or generate follow-up search terms. TV data spans 2009–October 2024.","input":[{"n":"query","t":"string","r":true},{"n":"stations","t":"array<string>"},{"n":"timespan","t":"string"},{"n":"startDatetime","t":"string"},{"n":"endDatetime","t":"string"}],"output":[{"n":"words","t":"array<object>"},{"n":"effectiveQuery","t":"string"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"gdelt_list_tv_stations","server":45,"verb":"list","cls":"list","resolver":false,"title":"List GDELT TV Stations","description":"List the television stations available for TV search with their market, network, monitoring start date, and monitoring end date — every station by default, or only those matching the optional stations, network, and market filters (each an exact, case-insensitive match; combined with AND). activeCount and totalCount count the returned stations. Stations with an end date within the last 24 hours are flagged as active; stations with earlier end dates are discontinued. Use before querying to verify a station was active during the target time period, or to discover valid station IDs for the stations parameter in other TV tools. Most station monitoring ended October 2024 when the Internet Archive TV feed stopped updating.","input":[{"n":"stations","t":"array<string>"},{"n":"network","t":"string"},{"n":"market","t":"string"}],"output":[{"n":"stations","t":"array<object>"},{"n":"activeCount","t":"number"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"geonames_search_places","server":46,"verb":"search","cls":"search","resolver":false,"title":"Search GeoNames places","description":"Search the GeoNames gazetteer of 13M+ places by name and filters: country, admin division by its GeoNames code (adminCode1 TX with countries US for Texas), feature class (P populated places, A admin divisions, T mountains and terrain, H water, S buildings and spots), feature code (PPLC capitals, ADM1 states, MT mountains, AIRP airports), population tier, and bounding box. Results carry the geonameId that geonames_get_place, geonames_get_hierarchy, and geonames_get_children take. The default match requires a query term in the place name while letting other terms match the country or admin names (\"Berlin, Germany\"). Costs 1 GeoNames credit per call.","input":[{"n":"query","t":"string"},{"n":"match","t":"enum(4)"},{"n":"countries","t":"array<string>"},{"n":"adminCode1","t":"string"},{"n":"adminCode2","t":"string"},{"n":"adminCode3","t":"string"},{"n":"adminCode4","t":"string"},{"n":"featureClasses","t":"array<enum(9)>"},{"n":"featureCodes","t":"array<string>"},{"n":"cities","t":"enum(3)"},{"n":"boundingBox","t":"object"},{"n":"orderBy","t":"enum(2)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"},{"n":"geonamesUsername","t":"string"}],"output":[{"n":"places","t":"array<object>"},{"n":"nextOffset","t":"number"},{"n":"totalCount","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"geonames_get_place","server":46,"verb":"get","cls":"get","resolver":false,"title":"Get a GeoNames place","description":"Fetch the full GeoNames record for one geonameId: coordinates, feature type, the admin chain with each level's code, name, and geonameId, timezone, bounding box, recorded and DEM elevation, population, Wikipedia URL, names in other languages, postal codes, and external identifiers (IATA, ICAO, UN/LOCODE, Wikidata). Take the geonameId from geonames_search_places, geonames_reverse_geocode, geonames_get_children, or geonames_get_countries. An unknown id returns found: false. Costs 1 GeoNames credit; repeat lookups are cached.","input":[{"n":"geonameId","t":"string","r":true},{"n":"nameLanguages","t":"array<string>"},{"n":"geonamesUsername","t":"string"}],"output":[{"n":"found","t":"boolean"},{"n":"guidance","t":"string"},{"n":"place","t":"object"},{"n":"error","t":"object"}]},{"name":"geonames_get_hierarchy","server":46,"verb":"get","cls":"get","resolver":false,"title":"Get a GeoNames hierarchy","description":"Return the parent chain of a GeoNames feature, ordered from Earth and its continent through the country and admin divisions down to the feature itself, each with its geonameId, feature code, and coordinates. Use it to find which country, state, and county contain a place, or to fill an admin path for a geonameId. An unknown id returns found: false. Costs 1 GeoNames credit; cached.","input":[{"n":"geonameId","t":"string","r":true},{"n":"geonamesUsername","t":"string"}],"output":[{"n":"found","t":"boolean"},{"n":"geonameId","t":"number"},{"n":"guidance","t":"string"},{"n":"chain","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"geonames_get_children","server":46,"verb":"get","cls":"get","resolver":false,"title":"List GeoNames children","description":"List the direct children of a GeoNames feature — Earth's continents, a continent's countries, a country's first-level divisions, a state's counties, a city's sections — in the administrative tree, or in the tourism tree (islands, coasts, and their municipalities; almost all in Spain) or the dependency tree (a country's dependent territories). Start from a country's geonameId (geonames_get_countries) or any admin division's. Children are mostly admin divisions (class A) and populated places (class P); continents and coasts are class L and islands class T. For other feature types inside a place, use geonames_search_places with a boundingBox. GeoNames answers a tourism or dependency request with the administrative children when the feature has no such tree, so the tool compares the two lists and sets sameAsAdministrative when they match, keeping the rows (a real tree can match too). The full child list is fetched once (1 GeoNames credit) and cached, so paging and nameContains filtering are free; a tourism or dependency call also reads the administrative list for the comparison, 1 more credit unless it is cached.","input":[{"n":"geonameId","t":"string","r":true},{"n":"hierarchy","t":"enum(3)"},{"n":"nameContains","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"},{"n":"geonamesUsername","t":"string"}],"output":[{"n":"found","t":"boolean"},{"n":"parentGeonameId","t":"number"},{"n":"hierarchy","t":"enum(3)"},{"n":"sameAsAdministrative","t":"boolean"},{"n":"guidance","t":"string"},{"n":"children","t":"array<object>"},{"n":"nextOffset","t":"number"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"geonames_reverse_geocode","server":46,"verb":"reverse","cls":"resolve","resolver":true,"title":"Reverse geocode with GeoNames","description":"Resolve a latitude/longitude to the country and admin subdivisions that contain it (down to ADM5, each with its geonameId and ISO 3166-2 code where one exists), or the ocean or sea when the point is offshore, plus the nearest populated places with distances; these include neighborhood sections (PPLX) and historical places (PPLH), marked by featureCode. Set featureClasses or featureCodes to list the nearest features of that type instead (peaks, lakes, airports), cities to keep only places above a population tier, and includeTimezone for the IANA timezone with local time, sunrise, and sunset (offshore points get only GeoNames' UTC-offset estimate). A harbor, pier, or shoreline point can fall just outside every country outline and resolve to the sea; coastalBufferKm (up to 50) matches the nearest country within that distance instead. Costs 1 GeoNames credit for containment, with or without the buffer, plus 3 for nearest populated places or 4 for nearest features (nearbyLimit 0 skips them), 1 for the ocean when no country contains the point or lies within the buffer, and 1 for the timezone.","input":[{"n":"lat","t":"number","r":true},{"n":"lng","t":"number","r":true},{"n":"nearbyLimit","t":"integer"},{"n":"radiusKm","t":"number"},{"n":"cities","t":"enum(3)"},{"n":"featureClasses","t":"array<enum(9)>"},{"n":"featureCodes","t":"array<string>"},{"n":"includeTimezone","t":"boolean"},{"n":"coastalBufferKm","t":"number"},{"n":"geonamesUsername","t":"string"}],"output":[{"n":"lat","t":"number"},{"n":"lng","t":"number"},{"n":"country","t":"object"},{"n":"adminLevels","t":"array<object>"},{"n":"ocean","t":"object"},{"n":"nearbyKind","t":"enum(3)"},{"n":"nearby","t":"array<object>"},{"n":"timezone","t":"object"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"geonames_find_postal_codes","server":46,"verb":"find","cls":"search","resolver":false,"title":"Find GeoNames postal codes","description":"Look up postal codes in the GeoNames postal database (122 countries): mode code resolves a postal code to its place, admin names, and centroid; mode place_name finds postal codes for a place name; both page with offset, up to 5000; mode nearby lists postal codes within radiusKm (up to 30 km) of a coordinate, nearest first. Ireland returns only Eircode routing keys and Malta only the letter prefix; the United Kingdom (GB), Canada, and the Netherlands hold both full codes and their outward or district prefixes. Check coverage with geonames_list_reference topic postal_countries. Costs 1 GeoNames credit (2 for nearby); a code or place_name lookup with countries that returns nothing at offset 0 also reads the postal coverage list, 1 more credit unless that list is cached. Repeat lookups are cached.","input":[{"n":"mode","t":"enum(3)","r":true},{"n":"postalCode","t":"string"},{"n":"placeName","t":"string"},{"n":"lat","t":"number"},{"n":"lng","t":"number"},{"n":"radiusKm","t":"number"},{"n":"countries","t":"array<string>"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"},{"n":"geonamesUsername","t":"string"}],"output":[{"n":"mode","t":"enum(3)"},{"n":"postalCodes","t":"array<object>"},{"n":"nextOffset","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"geonames_get_countries","server":46,"verb":"get","cls":"get","resolver":false,"title":"GeoNames country facts","description":"Get GeoNames country facts — ISO alpha-2, alpha-3, and numeric codes, FIPS code, geonameId, capital, population, area in km², continent, languages, currency, postal-code format, and mainland bounding box — for the countries named, a continent, or all 250. The geonameId anchors geonames_get_children (a country's first-level divisions) and geonames_get_hierarchy. The full table is fetched once a day (1 GeoNames credit) and cached.","input":[{"n":"countries","t":"array<string>"},{"n":"continent","t":"enum(7)"},{"n":"nameContains","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"},{"n":"geonamesUsername","t":"string"}],"output":[{"n":"countries","t":"array<object>"},{"n":"notFound","t":"array<string>"},{"n":"nextOffset","t":"number"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"geonames_list_reference","server":46,"verb":"list","cls":"list","resolver":false,"title":"GeoNames reference vocabulary","description":"Decode GeoNames vocabulary used by the other tools: topic feature_classes lists the 9 one-letter classes; topic feature_codes lists the 684 feature codes with names and definitions, filterable by class and text; topic postal_countries lists the 122 countries with postal-code data and each one's code range and count. feature_classes and feature_codes are bundled and spend no credits; postal_countries costs 1 GeoNames credit a day (cached).","input":[{"n":"topic","t":"enum(3)","r":true},{"n":"featureClass","t":"enum(9)"},{"n":"nameContains","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"},{"n":"geonamesUsername","t":"string"}],"output":[{"n":"topic","t":"enum(3)"},{"n":"entries","t":"array<object>"},{"n":"nextOffset","t":"number"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"gnomad_get_variant","server":47,"verb":"get","cls":"get","resolver":false,"title":"gnomad-genetics-mcp-server: get variant","description":"Fetch the full gnomAD population record for one or more variants — allele count/number/frequency overall and broken down per genetic-ancestry group, homozygote and hemizygote counts, quality flags, transcript consequence, in-silico predictor scores, and joined ClinVar clinical significance. The \"how common, is it benign\" answer in one call. Accepts a batch of up to 25 IDs (chrom-pos-ref-alt or rsID) with per-item partial success: a malformed or absent ID lands in failed[] — with its reason and a recovery hint — without failing the others. An empty found[] for a well-formed ID means the variant is not in the chosen dataset — pair with gnomad_get_coverage to confirm the position is callable before concluding true absence.\nData source: gnomAD (Broad Institute) — https://gnomad.broadinstitute.org/","input":[{"n":"variants","t":"array<string>","r":true},{"n":"dataset","t":"enum(4)"},{"n":"reference_genome","t":"enum(2)"}],"output":[{"n":"found","t":"array<object>"},{"n":"failed","t":"array<object>"},{"n":"dataset","t":"string"},{"n":"reference_genome","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"gnomad_get_gene_constraint","server":47,"verb":"get","cls":"get","resolver":false,"title":"gnomad-genetics-mcp-server: get gene constraint","description":"Fetch gnomAD loss-of-function constraint for a gene — pLI (probability of LoF intolerance; >0.9 intolerant), LOEUF (oe_lof_upper, the headline metric) plus its lower bound, observed/expected ratios for LoF, missense, and synonymous variation, and the three Z-scores. This is the orthogonal axis to allele frequency: a loss-of-function variant matters far more in a gene intolerant to being broken. Accepts an HGNC symbol (PCSK9) or an Ensembl gene ID (ENSG00000169174). constraint_release names the release the metrics come from: gnomAD v4.1.2 for gnomad_r4 and gnomad_r3 (gnomAD publishes no v3 constraint), gnomAD v2.1.1 for gnomad_r2_1, and ExAC r0.3 for exac. gnomAD recommends LOEUF < 0.45 to call a gene LoF-intolerant on v4.1.2 and LOEUF < 0.35 on v2.1.1. ExAC r0.3 publishes only pLI, the Z-scores, and observed/expected counts, so on exac the ratios and LOEUF are null, constraint_flags is empty, and pLI is the intolerance measure. Many genes have null constraint (sparse upstream) — null fields are reported as such, never fabricated. Echoes the effective dataset and reference build.\nData source: gnomAD (Broad Institute) — https://gnomad.broadinstitute.org/","input":[{"n":"gene","t":"string","r":true},{"n":"dataset","t":"enum(4)"},{"n":"reference_genome","t":"enum(2)"}],"output":[{"n":"gene_id","t":"string"},{"n":"symbol","t":"string"},{"n":"dataset","t":"string"},{"n":"reference_genome","t":"string"},{"n":"constraint_release","t":"string"},{"n":"pli","t":"number"},{"n":"oe_lof","t":"number"},{"n":"oe_lof_lower","t":"number"},{"n":"oe_lof_upper","t":"number"},{"n":"oe_mis","t":"number"},{"n":"oe_syn","t":"number"},{"n":"lof_z","t":"number"},{"n":"mis_z","t":"number"},{"n":"syn_z","t":"number"},{"n":"obs_lof","t":"number"},{"n":"exp_lof","t":"number"},{"n":"obs_mis","t":"number"},{"n":"exp_mis","t":"number"},{"n":"obs_syn","t":"number"},{"n":"exp_syn","t":"number"},{"n":"constraint_flags","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"gnomad_list_gene_variants","server":47,"verb":"list","cls":"list","resolver":false,"title":"gnomad-genetics-mcp-server: list gene variants","description":"List every gnomAD variant in a gene, transcript, or region with allele frequencies and predicted consequences, optionally filtered to one consequence class (lof, missense, synonymous, other) and/or a maximum allele frequency. A result too large to inline is staged on a DataCanvas table named gene_variants, returned as canvas_id and table_name beside an inline preview — call gnomad_dataframe_describe for its columns, then gnomad_dataframe_query to rank by AF, count by consequence, or group across every row rather than the preview. A result that fits inline stages no table unless canvas_id is supplied. When the canvas is disabled (CANVAS_PROVIDER_TYPE != duckdb) the tool returns a capped inline preview and the SQL path is unavailable. Supply exactly one of gene, transcript_id, or region. Echoes the effective dataset and build.\nData source: gnomAD (Broad Institute) — https://gnomad.broadinstitute.org/","input":[{"n":"gene","t":"string"},{"n":"transcript_id","t":"string"},{"n":"region","t":"const|string"},{"n":"consequence_class","t":"enum(4)"},{"n":"max_af","t":"number"},{"n":"canvas_id","t":"string"},{"n":"dataset","t":"enum(4)"},{"n":"reference_genome","t":"enum(2)"}],"output":[{"n":"preview","t":"array<object>"},{"n":"canvas_id","t":"string"},{"n":"table_name","t":"string"},{"n":"spilled","t":"boolean"},{"n":"total","t":"number"},{"n":"dataset","t":"string"},{"n":"reference_genome","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"gnomad_get_coverage","server":47,"verb":"get","cls":"get","resolver":false,"title":"gnomad-genetics-mcp-server: get coverage","description":"Fetch gnomAD sequencing-coverage summary across a gene, transcript, or region — mean and median read depth, plus the mean fraction of samples covered at each depth threshold (1× through 100×), separated by exome and genome track. gnomAD reports coverage in buckets: 1 bp for a region spanning under 850 bp, wider for larger targets (bucket_size), and a gene or transcript is summarized over its exons ±75 bp, not its introns. Use this to disambiguate a true absent variant from an uncallable position: a variant missing from a well-covered region is informative, while one missing from a poorly-covered region is not. Supply exactly one of gene, transcript_id, or region. The optional coverage_source narrows to one track; by default both available tracks are returned. Echoes the effective dataset and build.\nData source: gnomAD (Broad Institute) — https://gnomad.broadinstitute.org/","input":[{"n":"gene","t":"string"},{"n":"transcript_id","t":"string"},{"n":"region","t":"const|string"},{"n":"coverage_source","t":"enum(2)"},{"n":"dataset","t":"enum(4)"},{"n":"reference_genome","t":"enum(2)"}],"output":[{"n":"target","t":"string"},{"n":"target_kind","t":"enum(3)"},{"n":"summaries","t":"array<object>"},{"n":"dataset","t":"string"},{"n":"reference_genome","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"gnomad_search_clinvar","server":47,"verb":"search","cls":"search","resolver":false,"title":"gnomad-genetics-mcp-server: search clinvar","description":"Search ClinVar (NCBI E-utilities) for a gene and return its classified variants — clinical significance, review status with a 0–4 star rating, associated conditions, molecular consequences, submission counts, and gnomAD-compatible identifiers (canonical SPDI, rsIDs, GRCh38 variant ID for gnomad_get_variant) — turning the variant-level significance gnomAD joins into a gene-panel curation view. Optionally filter by clinical_significance (e.g. pathogenic) and a minimum star rating. Each call returns one window of up to 500 ClinVar records: total_found is the ClinVar candidate count for the search terms, taken before the significance and star filters narrow each window, and next_offset continues through the rest via offset. A window too large to inline is staged on a DataCanvas table named clinvar_variants, returned as canvas_id and table_name beside an inline preview — call gnomad_dataframe_describe for its columns, then gnomad_dataframe_query to rank or count across the window. A window that fits inline stages no table unless canvas_id is supplied. Keyless, but honors NCBI_API_KEY for a higher rate limit. When the canvas is disabled the tool returns a capped inline preview. Credit: ClinVar, NCBI.","input":[{"n":"gene","t":"string","r":true},{"n":"clinical_significance","t":"string"},{"n":"min_review_stars","t":"integer"},{"n":"offset","t":"integer"},{"n":"limit","t":"integer"},{"n":"canvas_id","t":"string"}],"output":[{"n":"preview","t":"array<object>"},{"n":"canvas_id","t":"string"},{"n":"table_name","t":"string"},{"n":"spilled","t":"boolean"},{"n":"total","t":"number"},{"n":"total_found","t":"number"},{"n":"truncated","t":"boolean"},{"n":"next_offset","t":"number"},{"n":"unavailable_ids","t":"array<string>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"gnomad_dataframe_query","server":47,"verb":"dataframe","cls":"query","resolver":false,"title":"gnomad-genetics-mcp-server: dataframe query","description":"Run a read-only SQL SELECT against a canvas table staged by gnomad_list_gene_variants (table gene_variants) or gnomad_search_clinvar (table clinvar_variants) and return one page of the result. Use the canvas_id and table_name those tools returned to rank by allele frequency, group by consequence class, count loss-of-function variants, or filter the full set the inline preview only sampled. A page holds up to limit rows (default 100, max 500) and ends early once its rows reach 10,000 characters of JSON; continue from next_offset until it is null. Each page re-runs the SQL, so stable paging needs an ORDER BY over a unique key (such as variant_id) and an unchanged table. Paging reaches the server row cap: above it total is null and later rows are reachable only by filtering or aggregating in SQL. SELECT statements only — writes, DDL, and file/HTTP table functions are rejected by the canvas gate. Call gnomad_dataframe_describe first to discover staged table and column names.","input":[{"n":"canvas_id","t":"string","r":true},{"n":"sql","t":"string","r":true},{"n":"offset","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"rows","t":"array<object>"},{"n":"columns","t":"array<string>"},{"n":"offset","t":"number"},{"n":"returned","t":"number"},{"n":"total","t":"number"},{"n":"truncated","t":"boolean"},{"n":"next_offset","t":"number"},{"n":"error","t":"object"}]},{"name":"gnomad_dataframe_describe","server":47,"verb":"dataframe","cls":"query","resolver":false,"title":"gnomad-genetics-mcp-server: dataframe describe","description":"List the tables staged on a canvas and their columns (name and type) so you can write correct SQL for gnomad_dataframe_query. Use the canvas_id returned by gnomad_list_gene_variants or gnomad_search_clinvar. Returns one entry per table with its row count and column schema.","input":[{"n":"canvas_id","t":"string","r":true}],"output":[{"n":"tables","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"grantsgov_search_opportunities","server":48,"verb":"search","cls":"search","resolver":false,"title":"Search Grants.gov Opportunities","description":"Search federal funding opportunities on Grants.gov by keyword, agency, applicant eligibility, funding category, funding instrument, assistance listing, opportunity number, posting window (posted_within_days), or closing window (closing_within_days). Returns forecasted and posted opportunities unless statuses says otherwise, each row led by its close date and days remaining, plus facet counts for narrowing. Bare keyword terms are all required; join alternatives with OR, in parentheses when other terms stay required. Rows carry no award amounts or eligibility detail; read those with grantsgov_get_opportunity. Filter codes come from grantsgov_list_reference.","input":[{"n":"keyword","t":"string"},{"n":"statuses","t":"string|array<enum(4)|string>"},{"n":"agencies","t":"string|array<string>"},{"n":"eligibilities","t":"string|array<string|integer|string>"},{"n":"include_unrestricted","t":"boolean"},{"n":"funding_categories","t":"string|array<string>"},{"n":"funding_instruments","t":"string|array<enum(4)|string>"},{"n":"assistance_listing","t":"string"},{"n":"opportunity_number","t":"string"},{"n":"posted_within_days","t":"integer"},{"n":"closing_within_days","t":"integer"},{"n":"sort","t":"enum(9)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"},{"n":"include_facets","t":"boolean"}],"output":[{"n":"opportunities","t":"array<object>"},{"n":"facets","t":"object"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"next_offset","t":"number"},{"n":"effective_keyword","t":"string"},{"n":"applied_filters","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"grantsgov_get_opportunity","server":48,"verb":"get","cls":"get","resolver":false,"title":"Get Grants.gov Opportunity","description":"Read the Grants.gov record for up to 5 opportunities, given numeric opportunity ids or opportunity numbers: deadline, funding, eligibility, description, assistance listings, contact, attachments, packages, and latest revision metadata. Lists and narratives are bounded independent pages; follow each record pages continuation to retrieve the remaining section. An opportunity number is resolved across all statuses. A miss or an ambiguous number comes back as an unresolved entry with guidance, not an error.","input":[{"n":"attachment_offset","t":"integer"},{"n":"application_package_offset","t":"integer"},{"n":"description_offset","t":"integer"},{"n":"eligibility_offset","t":"integer"},{"n":"funding_category_explanation_offset","t":"integer"},{"n":"related_opportunity_offset","t":"integer"},{"n":"opportunity_ids","t":"string|array<integer|string|string>"},{"n":"opportunity_numbers","t":"string|array<string>"}],"output":[{"n":"opportunities","t":"array<object>"},{"n":"unresolved","t":"array<object>"},{"n":"deferred_ids","t":"array<integer>"},{"n":"deferred_numbers","t":"array<string>"},{"n":"continuation","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"grantsgov_list_reference","server":48,"verb":"list","cls":"list","resolver":false,"title":"List Grants.gov Reference Codes","description":"List the codes Grants.gov search filters accept, with labels and live opportunity counts: agencies (top level, or one agency's sub-agencies via parent_code, or matched by name via name_contains), applicant eligibility types, funding categories, funding instruments, statuses, sort options, and keyword syntax. Use the codes as grantsgov_search_opportunities inputs.","input":[{"n":"topic","t":"enum(7)","r":true},{"n":"name_contains","t":"string"},{"n":"parent_code","t":"string"}],"output":[{"n":"topic","t":"enum(7)"},{"n":"entries","t":"array<object>"},{"n":"snapshot_date","t":"string"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"gutenberg_search_books","server":49,"verb":"search","cls":"search","resolver":false,"title":"Search Gutenberg Books","description":"Search the Project Gutenberg catalog of 78,000+ books. Every query word matches a title or author substring; filter by topic, language, author lifespan, IDs, MIME prefix or copyright status. More than four query words require the local mirror. Empty matches succeed with criteria and a notice. Default popularity uses downloads in the last 30 days at the source snapshot. Returns IDs, titles, authors, languages, subjects, counts, and is_readable — use gutenberg_get_book for full metadata.","input":[{"n":"mime_type","t":"string"},{"n":"copyright","t":"array<enum(3)>"},{"n":"query","t":"string"},{"n":"topic","t":"string"},{"n":"languages","t":"array<string>"},{"n":"author_year_start","t":"integer"},{"n":"author_year_end","t":"integer"},{"n":"sort","t":"enum(3)"},{"n":"ids","t":"array<integer>"},{"n":"page","t":"integer"}],"output":[{"n":"books","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"page","t":"number"},{"n":"hasMore","t":"boolean"},{"n":"effectiveCriteria","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"gutenberg_get_book","server":49,"verb":"get","cls":"get","resolver":false,"title":"Get Gutenberg Book","description":"Fetch complete metadata for a Project Gutenberg book by ID — title, authors (with birth/death years), translators, editors, source bibliographic notes, subjects, bookshelves, languages, copyright status, and the full formats map with download URLs (plain text, HTML, EPUB, cover image, etc.). Use is_readable before gutenberg_get_text; source_notes may identify specific editions.","input":[{"n":"id","t":"integer","r":true}],"output":[{"n":"id","t":"number"},{"n":"title","t":"string"},{"n":"authors","t":"array<object>"},{"n":"translators","t":"array<object>"},{"n":"editors","t":"array<object>"},{"n":"subjects","t":"array<string>"},{"n":"bookshelves","t":"array<string>"},{"n":"languages","t":"array<string>"},{"n":"copyright","t":"boolean"},{"n":"media_type","t":"string"},{"n":"download_count","t":"number"},{"n":"source_notes","t":"array<string>"},{"n":"is_readable","t":"boolean"},{"n":"summary","t":"string"},{"n":"summaries","t":"array<string>"},{"n":"formats","t":"object"},{"n":"has_plain_text","t":"boolean"},{"n":"error","t":"object"}]},{"name":"gutenberg_get_text","server":49,"verb":"get","cls":"get","resolver":false,"title":"Get Gutenberg Book Text","description":"Retrieve the plain-text content of a Project Gutenberg book, stripped of the standard license header and footer so the response contains only the literary work. For long works — novels routinely run 500KB–2MB — use offset and limit to read in chunks rather than fetching the whole book at once. The response reports totalChars and remainingChars for reliable pagination. Prefers UTF-8 plain text; falls back to an HTML edition converted to text; refuses audio books (media_type \"Sound\") with a clear error.","input":[{"n":"id","t":"integer","r":true},{"n":"offset","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"id","t":"number"},{"n":"title","t":"string"},{"n":"text","t":"string"},{"n":"offset","t":"number"},{"n":"length","t":"number"},{"n":"requestedLimit","t":"number"},{"n":"appliedLimit","t":"number"},{"n":"totalChars","t":"number"},{"n":"remainingChars","t":"number"},{"n":"hasMore","t":"boolean"},{"n":"provenance","t":"string"},{"n":"sourceFormat","t":"enum(3)"},{"n":"error","t":"object"}]},{"name":"gutenberg_browse_popular","server":49,"verb":"browse","cls":"search","resolver":false,"title":"Browse Popular Gutenberg Books","description":"Browse Project Gutenberg books ordered by downloads in the last 30 days at the source snapshot. Returns up to 32 titles with IDs, authors, languages, download counts, and is_readable. Filter by language, topic, MIME prefix or copyright status. Empty matches succeed with criteria and a notice; truncated results include executable search continuation. Use this for discovery — \"what are the most popular classics in French?\".","input":[{"n":"mime_type","t":"string"},{"n":"copyright","t":"array<enum(3)>"},{"n":"languages","t":"array<string>"},{"n":"topic","t":"string"},{"n":"limit","t":"integer"}],"output":[{"n":"requestedLimit","t":"number"},{"n":"appliedLimit","t":"number"},{"n":"books","t":"array<object>"},{"n":"totalInCatalog","t":"number"},{"n":"effectiveCriteria","t":"object"},{"n":"notice","t":"string"},{"n":"continuation","t":"object"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"truncationCeiling","t":"number"},{"n":"error","t":"object"}]},{"name":"hn_get_stories","server":50,"verb":"get","cls":"get","resolver":false,"title":"Hn Get Stories","description":"Fetch stories from an HN feed (top, new, best, ask, show, jobs), with title, URL, score, author, and comment count for each story.","input":[{"n":"feed","t":"enum(6)","r":true},{"n":"count","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"stories","t":"array<object>"},{"n":"feed","t":"string"},{"n":"total","t":"number"},{"n":"offset","t":"number"},{"n":"hasMore","t":"boolean"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"failedIds","t":"array<number>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"hn_get_thread","server":50,"verb":"get","cls":"get","resolver":false,"title":"Hn Get Thread","description":"Get an item and its comment tree as a threaded discussion, with child comments resolved recursively. Use depth 0 for an item-only lookup. A long thread comes back in pages: pass the returned nextCursor as cursor to continue.","input":[{"n":"itemId","t":"integer","r":true},{"n":"depth","t":"integer"},{"n":"maxComments","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"item","t":"object"},{"n":"comments","t":"array<object>"},{"n":"totalLoaded","t":"number"},{"n":"totalAvailable","t":"number"},{"n":"truncated","t":"boolean"},{"n":"truncationReason","t":"enum(4)"},{"n":"nextCursor","t":"string"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"failedIds","t":"array<number>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"hn_get_user","server":50,"verb":"get","cls":"get","resolver":false,"title":"Hn Get User","description":"Get an HN user profile with karma, about, and optionally their most recent submissions resolved into full items.","input":[{"n":"username","t":"string","r":true},{"n":"includeSubmissions","t":"boolean"},{"n":"submissionCount","t":"integer"},{"n":"submissionOffset","t":"integer"}],"output":[{"n":"user","t":"object"},{"n":"submissions","t":"array<object>"},{"n":"submissionOffset","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"failedIds","t":"array<number>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"hn_search_content","server":50,"verb":"search","cls":"search","resolver":false,"title":"Hn Search Content","description":"Search Hacker News stories, comments, polls, and jobs via Algolia — by keyword, by filters alone, or both. Filterable by content type, author, parent story, date range, and minimum points.","input":[{"n":"query","t":"string"},{"n":"tags","t":"enum(7)"},{"n":"author","t":"string"},{"n":"storyId","t":"integer"},{"n":"sort","t":"enum(2)"},{"n":"dateRange","t":"object"},{"n":"minPoints","t":"integer"},{"n":"count","t":"integer"},{"n":"page","t":"integer"},{"n":"view","t":"enum(2)"}],"output":[{"n":"hits","t":"array<object>"},{"n":"query","t":"string"},{"n":"criteria","t":"object"},{"n":"totalHits","t":"number"},{"n":"totalHitsExact","t":"boolean"},{"n":"page","t":"number"},{"n":"totalPages","t":"number"},{"n":"reachableHits","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"iana_lookup_port","server":51,"verb":"lookup","cls":"get","resolver":false,"title":"Look up a port assignment","description":"Look up IANA service name and transport protocol port assignments. Pass exactly one of `port` (a number, 0–65535), `service` (an exact service name such as \"postgresql\"), or `keyword` (words matched against service names and descriptions). Results list every transport (tcp, udp, sctp, dccp) separately, report the registry range row containing an unassigned port, and classify the port as System (0–1023), User (1024–49151), or Dynamic/Private (49152–65535). Service names registered without a port (DNS-SD names) appear with no port.","input":[{"n":"port","t":"integer"},{"n":"service","t":"string"},{"n":"keyword","t":"string"},{"n":"transport","t":"enum(4)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"mode","t":"enum(3)"},{"n":"found","t":"boolean"},{"n":"port_class","t":"object"},{"n":"assignments","t":"array<object>"},{"n":"source","t":"object"},{"n":"totalCount","t":"number"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"requested_limit","t":"number"},{"n":"effective_limit","t":"number"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"next_offset","t":"number"},{"n":"error","t":"object"}]},{"name":"iana_lookup_media_type","server":51,"verb":"lookup","cls":"get","resolver":false,"title":"Look up a media type","description":"Look up registered media (MIME) types. Pass exactly one of `type` (a full name such as \"application/json\"; parameters after \";\" are ignored) or `keyword` (words matched against registered type names and status annotations, e.g. \"geo json\"; never against file extensions). An exact `type` lookup also reads the registration template and returns its file-extension, intended-usage, and deprecated-alias statements as written, each only when the template has it. Some registered types have no registration template (`template.available: false`); their references are the defining documents. Deprecated and obsoleted types are reported with their replacement when the registry names one. Unregistered \"x-\" types are not in the registry.","input":[{"n":"type","t":"string"},{"n":"keyword","t":"string"},{"n":"top_level","t":"enum(11)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"mode","t":"enum(2)"},{"n":"found","t":"boolean"},{"n":"normalized_type","t":"string"},{"n":"media_types","t":"array<object>"},{"n":"source","t":"object"},{"n":"totalCount","t":"number"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"requested_limit","t":"number"},{"n":"effective_limit","t":"number"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"next_offset","t":"number"},{"n":"error","t":"object"}]},{"name":"iana_lookup_http_status","server":51,"verb":"lookup","cls":"get","resolver":false,"title":"Look up an HTTP status code","description":"Look up an HTTP status code in the IANA registry, or search reason phrases. Pass exactly one of `code` (100–599) or `keyword` (e.g. \"too many\"). Returns the registered phrase, its class, defining reference with section, and whether it is temporary, obsoleted, or unused; an unassigned code returns found: false with the unassigned range it falls in.","input":[{"n":"code","t":"integer"},{"n":"keyword","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"mode","t":"enum(2)"},{"n":"found","t":"boolean"},{"n":"statuses","t":"array<object>"},{"n":"unassigned_range","t":"string"},{"n":"source","t":"object"},{"n":"totalCount","t":"number"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"requested_limit","t":"number"},{"n":"effective_limit","t":"number"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"next_offset","t":"number"},{"n":"error","t":"object"}]},{"name":"iana_lookup_http_field","server":51,"verb":"lookup","cls":"get","resolver":false,"title":"Look up an HTTP field name","description":"Look up a registered HTTP field (header or trailer) name. Pass exactly one of `name` (case-insensitive, e.g. \"Cache-Status\") or `keyword` (words matched against field names and comments). Returns the registration status — permanent, provisional, deprecated, or obsoleted — the Structured Field type when registered, and the defining reference. Many widely used headers are unregistered; a miss means only that IANA has no entry.","input":[{"n":"name","t":"string"},{"n":"keyword","t":"string"},{"n":"status","t":"enum(4)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"mode","t":"enum(2)"},{"n":"found","t":"boolean"},{"n":"fields","t":"array<object>"},{"n":"source","t":"object"},{"n":"totalCount","t":"number"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"requested_limit","t":"number"},{"n":"effective_limit","t":"number"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"next_offset","t":"number"},{"n":"error","t":"object"}]},{"name":"iana_lookup_uri_scheme","server":51,"verb":"lookup","cls":"get","resolver":false,"title":"Look up a URI scheme","description":"Look up a registered URI scheme. Pass exactly one of `scheme` (e.g. \"mailto\"; a trailing \":\" or \"://\" is ignored) or `keyword` (words matched against scheme names and descriptions). Returns the status — permanent, provisional, or historical — description, references, and well-known URI support.","input":[{"n":"scheme","t":"string"},{"n":"keyword","t":"string"},{"n":"status","t":"enum(3)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"mode","t":"enum(2)"},{"n":"found","t":"boolean"},{"n":"schemes","t":"array<object>"},{"n":"source","t":"object"},{"n":"totalCount","t":"number"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"requested_limit","t":"number"},{"n":"effective_limit","t":"number"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"next_offset","t":"number"},{"n":"error","t":"object"}]},{"name":"iana_lookup_pen","server":51,"verb":"lookup","cls":"resolve","resolver":true,"title":"Look up a Private Enterprise Number","description":"Look up a Private Enterprise Number (PEN). Pass exactly one of `pen` (a number such as 32473, or an OID under 1.3.6.1.4.1 such as 1.3.6.1.4.1.32473.1.2) or `organization` (words matched against organization names). Returns the organization and its OID prefix. Arcs below the enterprise number are assigned by the enterprise, not IANA. Contact details are not returned.","input":[{"n":"pen","t":"string"},{"n":"organization","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"mode","t":"enum(2)"},{"n":"found","t":"boolean"},{"n":"requested_oid","t":"string"},{"n":"sub_arcs","t":"string"},{"n":"enterprises","t":"array<object>"},{"n":"source","t":"object"},{"n":"totalCount","t":"number"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"requested_limit","t":"number"},{"n":"effective_limit","t":"number"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"next_offset","t":"number"},{"n":"error","t":"object"}]},{"name":"iana_lookup_language_tag","server":51,"verb":"lookup","cls":"get","resolver":false,"title":"Validate a BCP 47 language tag","description":"Parse and validate a BCP 47 language tag against the IANA Language Subtag Registry, or search subtags by description. Pass exactly one of `tag` (e.g. \"zh-Hant-TW\", \"sr-Latn\", \"en_US\") or `description` (e.g. \"Swiss German\"). A tag is split into language, extlang, script, region, variant, extension, and private-use parts; deprecated subtags report their preferred value, and a canonical tag is returned when valid. Extension singleton allocation and defining RFCs are optional metadata; allocation never validates extension content or changes base validity. A single subtag registered under several types (e.g. \"TW\") lists the other types.","input":[{"n":"tag","t":"string"},{"n":"description","t":"string"},{"n":"subtag_type","t":"enum(7)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"mode","t":"enum(2)"},{"n":"tag_input","t":"string"},{"n":"well_formed","t":"boolean"},{"n":"valid","t":"boolean"},{"n":"canonical_tag","t":"string"},{"n":"subtags","t":"array<object>"},{"n":"issues","t":"array<object>"},{"n":"also_registered_as","t":"array<object>"},{"n":"matches","t":"array<object>"},{"n":"source","t":"object"},{"n":"extension_source","t":"object"},{"n":"totalCount","t":"number"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"requested_limit","t":"number"},{"n":"effective_limit","t":"number"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"next_offset","t":"number"},{"n":"error","t":"object"}]},{"name":"iana_get_rfc_status","server":51,"verb":"get","cls":"get","resolver":false,"title":"Get RFC, Internet-Draft, and series status","description":"Get the current status of up to ten distinct RFCs, Internet-Drafts, or BCP/STD/FYI series per page from up to 1,000 input items. Canonical aliases resolve once. When more remain, deferred_ids previews the next ten, deferred_count counts the whole remainder, and next_ids_offset continues the same original ids. Retry failed ids separately. Accepts \"RFC 9110\", \"rfc9110\", \"9110\", draft names with or without a revision suffix (\"draft-ietf-httpbis-semantics-19\"), series numbers (\"BCP 14\"), RFC and draft file names (\"rfc9110.txt\"), the URL of an RFC or draft on datatracker.ietf.org, tools.ietf.org, or ietf.org or of an RFC on rfc-editor.org, and a series URL at rfc-editor.org/info/ or datatracker.ietf.org/doc/ (\"https://datatracker.ietf.org/doc/bcp14/\"). RFCs return current and as-published status, stream, working group, obsoletes/obsoleted-by and updates/updated-by relations, the series they belong to, and the errata page; drafts return their state, IESG state, intended status, expiry, the document that replaced them, and the RFC they became; a series returns its member RFCs. Unknown ids return found: false. A call makes at most 20 Datatracker requests, retries included (an RFC or a series needs one, plus one per call for the RFCs' series; a draft three, or four with a revision suffix): each id is taken in request order if its requests still fit, and the others come back in failed with reason request_limit, to pass in another call.","input":[{"n":"ids","t":"array<string>","r":true},{"n":"ids_offset","t":"integer"}],"output":[{"n":"total_ids","t":"number"},{"n":"deferred_ids","t":"array<string>"},{"n":"deferred_count","t":"number"},{"n":"next_ids_offset","t":"number"},{"n":"deferred_reason","t":"const"},{"n":"deferred_guidance","t":"string"},{"n":"documents","t":"array<object>"},{"n":"failed","t":"array<object>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"iana_search_registries","server":51,"verb":"search","cls":"search","resolver":false,"title":"Search IANA registries","description":"Find IANA protocol registries and sub-registries by keyword over their titles and protocol categories, e.g. \"tls cipher\", \"dns resource record\", \"protocol numbers\". Returns the registry and sub-registry ids that iana_get_registry_records reads, with registration procedure and defining documents. Covers every registry linked from the IANA protocol registries index.","input":[{"n":"query","t":"string","r":true},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"registries","t":"array<object>"},{"n":"source","t":"object"},{"n":"totalCount","t":"number"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"requested_limit","t":"number"},{"n":"effective_limit","t":"number"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"next_offset","t":"number"},{"n":"error","t":"object"}]},{"name":"iana_get_registry_records","server":51,"verb":"get","cls":"get","resolver":false,"title":"Read IANA registry records","description":"Read records from any IANA XML registry by id, e.g. registry \"tls-parameters\" with subregistry \"tls-parameters-4\" (TLS Cipher Suites), \"protocol-numbers\", \"http-methods\", or \"cbor-tags\"; an iana.org/assignments URL also works. Filter with `value` (exact match on the key column, or on the column `field` names; digits compare by number with a cell of digits (\"0443\" finds \"443\") and one 0x token with a one-token 0x cell (\"0x5\" finds \"0x05\"), each also matching its own kind of range row (\"105-199\", \"0x11-0xff\"); other 0x forms compare their digits as written, in any comma, space, or brace spelling) and `contains` (words in any field; records with a field equal to the words come first). When a registry has several sub-registries and none is given, the response lists them instead of records; a table that nests tables lists them too. Field names are the registry's XML element names (e.g. \"rec\" is the Recommended column). Large registries page through `cursor`. Find ids with iana_search_registries.","input":[{"n":"registry","t":"string","r":true},{"n":"subregistry","t":"string"},{"n":"value","t":"string"},{"n":"field","t":"string"},{"n":"contains","t":"string"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"registry_id","t":"string"},{"n":"registry_title","t":"string"},{"n":"subregistry_id","t":"string"},{"n":"subregistry_title","t":"string"},{"n":"registration_procedure","t":"string"},{"n":"description","t":"string"},{"n":"references","t":"array<object>"},{"n":"registration_ranges","t":"array<object>"},{"n":"notes","t":"array<object>"},{"n":"registry_notes","t":"array<object>"},{"n":"notes_truncated","t":"boolean"},{"n":"columns","t":"array<string>"},{"n":"value_field","t":"string"},{"n":"records","t":"array<object>"},{"n":"subregistries","t":"array<object>"},{"n":"offset","t":"number"},{"n":"next_cursor","t":"string"},{"n":"source","t":"object"},{"n":"totalCount","t":"number"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"requested_limit","t":"number"},{"n":"effective_limit","t":"number"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"ilostat_search_indicators","server":52,"verb":"search","cls":"search","resolver":false,"title":"Search ILOSTAT indicators","description":"Search ILOSTAT's catalog of labour-statistics indicators by plain-language terms and filters. Each hit is one indicator with its datasets — one per available frequency (annual, quarterly, monthly) — plus breakdowns, coverage years, number of reference areas, source database, and last update; pass a dataset ID to ilostat_describe_indicator for its units and breakdown codes, then to ilostat_query_indicator or ilostat_compare_geographies for values. Every search term must match a word or word prefix in the indicator's label, subject, database, breakdown names, code, or definition; a term that matches no word or word prefix anywhere in the catalog matches the words sharing its stem instead (informality finds informal, unionization finds union), and the notice names it. British and American spellings (labour/labor) match alike. The measure filter lists every indicator of one measured quantity, as ilostat_describe_indicator's related indicators count them. Facet counts reflect all applied filters.","input":[{"n":"query","t":"string"},{"n":"frequency","t":"enum(3)"},{"n":"database","t":"string"},{"n":"subject","t":"string"},{"n":"breakdown","t":"string"},{"n":"measure","t":"string"},{"n":"aggregates_only","t":"boolean"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"hits","t":"array<object>"},{"n":"total","t":"number"},{"n":"facets","t":"object"},{"n":"next_cursor","t":"string"},{"n":"catalog_as_of","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"ilostat_describe_indicator","server":52,"verb":"describe","cls":"describe","resolver":false,"title":"Describe an ILOSTAT dataset","description":"Explain one ILOSTAT dataset before comparing numbers: its definition, unit and multiplier, frequency variants and coverage, the sex and breakdown codes in use across its frequencies (the total code of each breakdown marked), the reference areas it covers, whether it carries World/regional/income-group aggregates, and how its observations are classed as reported, modelled, or projected. Accepts a dataset ID (UNE_DEAP_SEX_AGE_RT_A) or a bare indicator code (UNE_DEAP_SEX_AGE_RT), which describes every frequency. An unknown code returns found: false with guidance.","input":[{"n":"dataset_id","t":"string","r":true}],"output":[{"n":"found","t":"boolean"},{"n":"guidance","t":"string"},{"n":"dataset_id","t":"string"},{"n":"indicator","t":"string"},{"n":"label","t":"string"},{"n":"definition","t":"string"},{"n":"measure","t":"object"},{"n":"database","t":"object"},{"n":"subject","t":"object"},{"n":"datasets","t":"array<object>"},{"n":"breakdowns","t":"object"},{"n":"default_slice","t":"object"},{"n":"unit","t":"object"},{"n":"has_aggregates","t":"boolean"},{"n":"ref_areas","t":"object"},{"n":"basis_rule","t":"object"},{"n":"related_datasets","t":"array<object>"},{"n":"related_total","t":"number"},{"n":"structure_status","t":"enum(2)"},{"n":"catalog_as_of","t":"string"},{"n":"attribution","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"ilostat_query_indicator","server":52,"verb":"query","cls":"query","resolver":false,"title":"Query ILOSTAT observations","description":"Fetch observations for up to 3 ILOSTAT datasets per call, filtered by reference area or area group, sex, breakdown codes (classif1, classif2), source, and period; datasets past the first 3 come back as remaining_dataset_ids for another call. Rows keep their source, observation status, decoded notes, and a basis — reported, modelled_estimate, or projection — and the response echoes every filter applied, including the best-source default. Codes are checked against ILOSTAT's dictionaries before the request is sent: ilostat_list_reference lists valid codes and ilostat_describe_indicator lists the codes a dataset actually uses. A result larger than the inline preview is staged in full as a df_<id> dataframe for SQL through ilostat_dataframe_describe and ilostat_dataframe_query when this deployment enables dataframes. A request with no filters at all is refused when the dataset exceeds the row ceiling, and a filtered request that still exceeds it is refused with guidance to narrow it.","input":[{"n":"dataset_ids","t":"array<string>","r":true},{"n":"ref_areas","t":"array<string>"},{"n":"area_group","t":"string"},{"n":"sex","t":"array<enum(4)>"},{"n":"classif1","t":"array<string>"},{"n":"classif2","t":"array<string>"},{"n":"sources","t":"array<string>"},{"n":"time","t":"string"},{"n":"time_from","t":"string"},{"n":"time_to","t":"string"},{"n":"latest_only","t":"boolean"},{"n":"source_selection","t":"enum(3)"}],"output":[{"n":"datasets","t":"array<object>"},{"n":"remaining_dataset_ids","t":"array<string>"},{"n":"row_count","t":"number"},{"n":"rows","t":"array<object>"},{"n":"legend","t":"object"},{"n":"summary","t":"object"},{"n":"dataframe","t":"object"},{"n":"attribution","t":"string"},{"n":"applied_filters","t":"object"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"ilostat_get_country_profile","server":52,"verb":"get","cls":"get","resolver":false,"title":"Get an ILOSTAT labour-market profile","description":"Build a headline labour-market profile for one reference area: labour force participation, employment-to-population ratio, unemployment and youth unemployment rates, youth NEET rate, informal employment rate, employment level, labour income share, and working poverty rate. Each indicator shows its latest reported value (from a national or institutional source, with its source and notes) and, separately, its latest ILO modelled estimate that is not a projection, each with its dataset, period, and status — a missing reported value stays missing and is never filled from the model. Accepts a country (ISO3, e.g. KEN) or an X-coded aggregate (X01 World, regions, income groups), for which only modelled values exist.","input":[{"n":"ref_area","t":"string","r":true},{"n":"sex","t":"enum(3)"}],"output":[{"n":"ref_area","t":"object"},{"n":"sex","t":"string"},{"n":"indicators","t":"array<object>"},{"n":"reported_missing","t":"array<string>"},{"n":"modelled_cutoff_year","t":"number"},{"n":"catalog_as_of","t":"string"},{"n":"attribution","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"ilostat_compare_geographies","server":52,"verb":"compare","cls":"analyze","resolver":false,"title":"Compare areas on an ILOSTAT dataset","description":"Compare reference areas on one ILOSTAT dataset and one slice — a sex code plus breakdown codes, defaulting to the dataset's totals — giving each area's value at a common period or at its latest non-projected period, optional change over N years, and a rank, with each value's period, source, status, and basis (reported, modelled_estimate, or projection). A change carries the earlier value's source, basis, status, and notes, and flags whether the source or basis differs or the series breaks between the two values. Areas without a value are listed separately with the reason, and the response flags mixed periods and mixed bases rather than hiding them. Select areas by code list, by group (X01 for every country, an ILO region or subregion, or a World Bank income group), or both; X-coded aggregates require a dataset with aggregates.","input":[{"n":"dataset_id","t":"string","r":true},{"n":"ref_areas","t":"array<string>"},{"n":"area_group","t":"string"},{"n":"sex","t":"enum(4)"},{"n":"classif1","t":"string"},{"n":"classif2","t":"string"},{"n":"period","t":"string"},{"n":"lookback_years","t":"integer"},{"n":"change_years","t":"integer"},{"n":"include_projections","t":"boolean"},{"n":"sort","t":"enum(3)"}],"output":[{"n":"dataset","t":"object"},{"n":"slice","t":"object"},{"n":"mode","t":"enum(2)"},{"n":"period","t":"string"},{"n":"window_from","t":"number"},{"n":"change_years","t":"number"},{"n":"include_projections","t":"boolean"},{"n":"rows","t":"array<object>"},{"n":"legend","t":"object"},{"n":"missing","t":"array<object>"},{"n":"comparability","t":"object"},{"n":"dataframe","t":"object"},{"n":"attribution","t":"string"},{"n":"applied_filters","t":"object"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"ilostat_list_reference","server":52,"verb":"list","cls":"list","resolver":false,"title":"List ILOSTAT reference codes","description":"Decode ILOSTAT's code vocabulary: reference areas (ISO3 countries and X-coded aggregates, with World Bank income group and ILO region), the groups that area_group accepts (X01 for every country, ILO regions and subregions, World Bank income groups; exact-code lookups list their member countries), databases, subjects, sex codes, breakdown codes for classif1/classif2 with their classification types, per-country data sources, observation status flags, note codes, and frequencies. Filter by text or look up exact codes; long topics page with a cursor. These are ILOSTAT-wide vocabularies; ilostat_describe_indicator lists the sex and breakdown codes one dataset actually uses.","input":[{"n":"topic","t":"enum(11)","r":true},{"n":"filter","t":"string"},{"n":"codes","t":"array<string>"},{"n":"ref_area","t":"string"},{"n":"classification_type","t":"string"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"topic","t":"enum(11)"},{"n":"entries","t":"array<object>"},{"n":"total","t":"number"},{"n":"next_cursor","t":"string"},{"n":"not_found","t":"array<string>"},{"n":"catalog_as_of","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"ilostat_dataframe_query","server":52,"verb":"dataframe","cls":"query","resolver":false,"title":"Query staged ILOSTAT dataframes","description":"Run a single-statement SELECT against the df_<id> dataframes staged by ilostat_query_indicator and ilostat_compare_geographies or stored by an earlier register_as. Inspect a dataframe with ilostat_dataframe_describe first; its column schema is what the SQL has to match. Read-only: writes, DDL, DROP, COPY, PRAGMA, ATTACH, file references, file-reading table functions, and functions that read engine settings or name a table from a string are rejected, and system catalogs (information_schema, pg_catalog, sqlite_master, duckdb_*) are denied. Breakdown versions overlap (AGE_YTHADULT_*, AGE_AGGREGATE_*, AGE_10YRBANDS_*), so filter to one version before summing. Optional register_as stores the result as a new dataframe with a fresh TTL.","input":[{"n":"sql","t":"string","r":true},{"n":"register_as","t":"string"},{"n":"preview","t":"integer"},{"n":"row_limit","t":"integer"}],"output":[{"n":"columns","t":"array<string>"},{"n":"row_count","t":"number"},{"n":"row_count_capped","t":"boolean"},{"n":"rows","t":"array<object>"},{"n":"registered_as","t":"string"},{"n":"expires_at","t":"string"},{"n":"evicted","t":"array<string>"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"applied_limits","t":"object"},{"n":"error","t":"object"}]},{"name":"ilostat_dataframe_describe","server":52,"verb":"dataframe","cls":"query","resolver":false,"title":"Describe staged ILOSTAT dataframes","description":"Describe the df_<id> dataframes staged by ilostat_query_indicator and ilostat_compare_geographies or stored by ilostat_dataframe_query register_as: the tool and parameters that produced each, the datasets it holds (label, last update, and the unit with its measure, type, and multiplier — values stay in the published scale the multiplier names), coverage, basis counts, attribution, creation and expiry times, row count, and column schema. Pass name for one dataframe. Without it, every staged dataframe is listed, except on a deployment whose callers share one canvas, where listing is off and only the exact name works. Read the schema here before writing SQL for ilostat_dataframe_query.","input":[{"n":"name","t":"string"}],"output":[{"n":"dataframes","t":"array<object>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"imf_list_databases","server":53,"verb":"list","cls":"list","resolver":false,"title":"Imf List Databases","description":"List IMF SDMX dataflows available on the portal. Entry point for every query: imf_get_database and imf_query_dataset both require a dataflow id obtained here. Vintage (historical snapshot) dataflows such as WEO_2025_OCT_VINTAGE are excluded by default; set include_vintages=true to include them. Results are paged — 50 per call by default and at most 200, adjustable with limit and offset — and total_count reports how many dataflows matched. Descriptions are shortened here; imf_get_database returns the full text for a single dataflow.","input":[{"n":"filter","t":"string"},{"n":"include_vintages","t":"boolean"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"dataflows","t":"array<object>"},{"n":"total_count","t":"number"},{"n":"returned_count","t":"number"},{"n":"offset","t":"number"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"requested_limit","t":"number"},{"n":"applied_limit","t":"number"},{"n":"error","t":"object"}]},{"name":"imf_get_database","server":53,"verb":"get","cls":"get","resolver":false,"title":"Imf Get Database","description":"Fetch a dataflow's dimension list with a codelist preview for each dimension. Resolves human-readable terms to SDMX codes (e.g. \"United States\" → USA, \"Constant prices\" → NGDP_RPCH). Required before imf_query_dataset — SDMX keys are opaque without codelist lookups. Each codelist is capped at the first 50 entries by default, including previews filtered by codelist_filter. Set dimension_id to retrieve one codelist with bounded limit/offset paging after the optional codelist_filter, which keeps codes whose ID or name contains every word given. Set available_only=true to page codes the dataflow actually publishes, with series and time coverage metadata; availability filtering happens before codelist_filter and paging. The imf://database/{dataflow_id} resource provides the same bounded discovery summary. Country codes are ISO 3-letter (USA, GBR, DEU), not ISO 2-letter (US, GB, DE). The key_format field shows the exact dimension order required by imf_query_dataset. Note: codelists enumerate the code universe, not actual coverage — valid codes can still return no_data if the combination has no series in this dataflow.","input":[{"n":"dataflow_id","t":"string","r":true},{"n":"agency_id","t":"string"},{"n":"version","t":"string"},{"n":"codelist_filter","t":"string"},{"n":"available_only","t":"boolean"},{"n":"dimension_id","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"dataflow_id","t":"string"},{"n":"agency_id","t":"string"},{"n":"version","t":"string"},{"n":"dsd_version","t":"string"},{"n":"structure_ref","t":"string"},{"n":"name","t":"string"},{"n":"description","t":"string"},{"n":"codelist_filter","t":"string"},{"n":"available_only","t":"const"},{"n":"series_count","t":"number"},{"n":"time_period_start","t":"string"},{"n":"time_period_end","t":"string"},{"n":"dimension_id","t":"string"},{"n":"key_format","t":"string"},{"n":"truncated","t":"boolean"},{"n":"dimensions","t":"array<object>"},{"n":"source","t":"string"},{"n":"notice","t":"string"},{"n":"requested_limit","t":"number"},{"n":"applied_limit","t":"number"},{"n":"error","t":"object"}]},{"name":"imf_query_dataset","server":53,"verb":"query","cls":"query","resolver":false,"title":"Imf Query Dataset","description":"Query an IMF SDMX dataflow by dimension key over a time range. Returns observations with time_period, value, and status, plus the unit, scale, and decimals of each series — a key resolving to several series carries one entry per series in series_metadata, since unit and scale differ between them. An index series also carries the reference_period it is based on (e.g. 2010A, 2010=100) exactly as published, on the series and, where the dataflow publishes one per observation, on each observation. Requires imf_get_database first to obtain the correct key_format and valid dimension codes. Country codes are ISO 3-letter (USA, GBR, DEU — not US, GB, DE). Key format: dot-separated codes in DSD keyPosition order (e.g. USA.NGDP_RPCH.A for WEO). Every position must carry a code: use + to combine codes (e.g. USA+GBR.NGDP_RPCH.A) and * to match every code at a position (e.g. *.NGDP_RPCH.A for all countries); * stands alone and cannot join a + list. Codes are matched case-insensitively and checked against each dimension's codelist before the query — an unknown code is rejected with the nearest valid codes. Codelists from imf_get_database enumerate the code universe, not actual coverage — valid codes can still return no_data if the combination has no series. When a + key returns data for some requested series and none for others, missing_series names each empty one with the reason a query for it alone gives (no_data or no_data_in_range). When the extra request that recovers the unit, scale, or decimals a + key suppresses fails, unresolved_attributes names them and how to get them. start_period and end_period must be valid period strings (YYYY, YYYY-SN, YYYY-QN, YYYY-MM, or a calendar-valid YYYY-MM-DD) with start_period no later than end_period; malformed or reversed ranges are rejected. A bound covers the whole period it names, so end_period 2023 includes 2023-M12 and 2023-Q4. last_n_observations keeps each series' last N observations — 1 is each series' latest value, the cheap way to ask many countries for their latest figure. Values are in base units everywhere, staged canvas rows included: scale is the power of ten the IMF publishes a series in (value / 10^scale is the published figure), never a factor still to apply. A response is held to 100,000 serialized characters. With DataCanvas enabled (CANVAS_PROVIDER_TYPE=duckdb), a larger result (multi-country, long time range) spills to it: call imf_dataframe_describe first to inspect staged tables and columns, then imf_dataframe_query for SQL analysis. Without DataCanvas, a larger result returns its earliest observations with truncated=true, and retrieval_guidance names the last period returned and how to narrow the query.","input":[{"n":"dataflow_id","t":"string","r":true},{"n":"agency_id","t":"string"},{"n":"version","t":"string"},{"n":"key","t":"string","r":true},{"n":"start_period","t":"string"},{"n":"end_period","t":"string"},{"n":"last_n_observations","t":"integer"},{"n":"canvas_id","t":"string"},{"n":"output_mode","t":"enum(2)"}],"output":[{"n":"dataflow_id","t":"string"},{"n":"key","t":"string"},{"n":"start_period","t":"string"},{"n":"end_period","t":"string"},{"n":"last_n_observations","t":"number"},{"n":"observations","t":"array<object>"},{"n":"series_attributes","t":"object"},{"n":"series_metadata","t":"array<object>"},{"n":"unresolved_attributes","t":"object"},{"n":"missing_series","t":"array<object>"},{"n":"missing_series_count","t":"number"},{"n":"observation_count","t":"number"},{"n":"staged","t":"boolean"},{"n":"truncated","t":"boolean"},{"n":"canvas_id","t":"string"},{"n":"table_name","t":"string"},{"n":"retrieval_guidance","t":"string"},{"n":"source","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"imf_dataframe_describe","server":53,"verb":"dataframe","cls":"query","resolver":false,"title":"Imf Dataframe Describe","description":"List DataCanvas tables and columns staged by a prior imf_query_dataset call. Returns each table's name, row count, and column schema (name + DuckDB type). Required before imf_dataframe_query to discover the table and column names for SQL.","input":[{"n":"canvas_id","t":"string","r":true}],"output":[{"n":"canvas_id","t":"string"},{"n":"tables","t":"array<object>"},{"n":"table_count","t":"number"},{"n":"error","t":"object"}]},{"name":"imf_dataframe_query","server":53,"verb":"dataframe","cls":"query","resolver":false,"title":"Imf Dataframe Query","description":"Run a read-only SQL SELECT against a DataCanvas table staged by imf_query_dataset. Supports multi-country comparisons, time-series aggregation, and cross-indicator joins. Requires imf_dataframe_describe first to discover table and column names. One SELECT statement per call; a leading WITH … SELECT (CTE) is accepted. DML and DDL are rejected.","input":[{"n":"canvas_id","t":"string","r":true},{"n":"sql","t":"string","r":true}],"output":[{"n":"rows","t":"array<object>"},{"n":"row_count","t":"number"},{"n":"truncated","t":"boolean"},{"n":"error","t":"object"}]},{"name":"inaturalist_list_reference","server":54,"verb":"list","cls":"list","resolver":false,"title":"Inaturalist List Reference","description":"Decode the vocabularies the other iNaturalist tools take as input: annotation attributes and values, quality grades, license codes, taxonomic ranks, iconic taxa, and IUCN conservation-status codes. An unrecognized filter value is not rejected upstream — it silently returns nothing — so read the codes here before filtering. Note that the conservation codes are the normalised csi search filter; a taxon record’s own conservation_statuses[].status is authority-specific free text and reads differently. With topic controlled_terms and a taxon_id, the response also carries which annotations identifiers have actually recorded for that taxon, with counts.","input":[{"n":"topic","t":"enum(6)","r":true},{"n":"taxon_id","t":"integer"}],"output":[{"n":"topic","t":"enum(6)"},{"n":"source","t":"enum(2)"},{"n":"entries","t":"array<object>"},{"n":"observed_usage","t":"array<object>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"inaturalist_resolve_name","server":54,"verb":"resolve","cls":"resolve","resolver":true,"title":"Inaturalist Resolve Name","description":"Resolve a common or scientific name to a taxon id, or a place, project, or observer name to its id. Returns ranked candidates carrying the identifiers every other tool takes. A miss is a result rather than a failure: found comes back false with guidance naming why. Taxon lookup matches a name PREFIX, not words inside a name, so \"monarch butterfly\" misses where \"monarch\" hits.","input":[{"n":"q","t":"string","r":true},{"n":"type","t":"enum(5)"},{"n":"rank","t":"enum(25)"},{"n":"limit","t":"integer"}],"output":[{"n":"found","t":"boolean"},{"n":"candidates","t":"array<object>"},{"n":"guidance","t":"string"},{"n":"totalCount","t":"number"},{"n":"error","t":"object"}]},{"name":"inaturalist_find_places","server":54,"verb":"find","cls":"search","resolver":false,"title":"Inaturalist Find Places","description":"Resolve a place name to a place id, or list the places containing a map area. Pass q to match a place-name PREFIX, or all four of nelat, nelng, swlat and swlng to list every place covering that box — exactly one of the two, never both. Each result carries the bounding box, place type, and containment chain an area search needs. Place geometry is stripped: a single nearby response carries 247 KB of boundary polygons upstream, none of which reaches the caller.","input":[{"n":"q","t":"string"},{"n":"nelat","t":"number"},{"n":"nelng","t":"number"},{"n":"swlat","t":"number"},{"n":"swlng","t":"number"},{"n":"per_page","t":"integer"}],"output":[{"n":"places","t":"array<object>"},{"n":"standard","t":"array<object>"},{"n":"community","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"inaturalist_search_observations","server":54,"verb":"search","cls":"search","resolver":false,"title":"Inaturalist Search Observations","description":"Search georeferenced wildlife sightings by area, date, taxon, quality grade, annotation, conservation status, observer, project, and licence. Returns a projected record per sighting with coordinates, licence, first photo, and identification counts. An area is given in exactly one form — place_id, the lat/lng/radius triple in kilometres, or a four-corner bounding box — and defaults to research-grade, wild-only records, which are echoed back on every call. Identifications and comments are deliberately not expandable here (one thread is 28 KB); fetch them for specific records with inaturalist_get_observation. page walks the first 10,000 results under any ordering; past 10,000, order by id descending (order_by \"id\", order \"desc\") and pass each page’s next_cursor as cursor.","input":[{"n":"place_id","t":"integer"},{"n":"lat","t":"number"},{"n":"lng","t":"number"},{"n":"radius","t":"number"},{"n":"nelat","t":"number"},{"n":"nelng","t":"number"},{"n":"swlat","t":"number"},{"n":"swlng","t":"number"},{"n":"taxon_id","t":"integer"},{"n":"d1","t":"string"},{"n":"d2","t":"string"},{"n":"quality_grade","t":"array<enum(3)>"},{"n":"captive","t":"boolean"},{"n":"term_id","t":"array<integer>"},{"n":"term_value_id","t":"array<integer>"},{"n":"iconic_taxa","t":"array<enum(14)>"},{"n":"user_id","t":"integer"},{"n":"user_login","t":"string"},{"n":"project_id","t":"integer"},{"n":"hrank","t":"enum(25)"},{"n":"lrank","t":"enum(25)"},{"n":"csi","t":"array<enum(7)>"},{"n":"threatened","t":"boolean"},{"n":"native","t":"boolean"},{"n":"introduced","t":"boolean"},{"n":"endemic","t":"boolean"},{"n":"licensed","t":"boolean"},{"n":"photo_licensed","t":"boolean"},{"n":"license","t":"array<enum(7)>"},{"n":"photo_license","t":"array<enum(7)>"},{"n":"q","t":"string"},{"n":"search_on","t":"enum(4)"},{"n":"order_by","t":"enum(8)"},{"n":"order","t":"enum(2)"},{"n":"page","t":"integer"},{"n":"cursor","t":"string"},{"n":"per_page","t":"integer"},{"n":"include","t":"array<enum(3)>"}],"output":[{"n":"total_results","t":"number"},{"n":"observations","t":"array<object>"},{"n":"next_cursor","t":"string"},{"n":"has_more","t":"boolean"},{"n":"applied_filters","t":"object"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"inaturalist_get_observation","server":54,"verb":"get","cls":"get","resolver":false,"title":"Inaturalist Get Observation","description":"Fetch up to 10 observations by id with their community identification thread — who identified what, whether each identification agrees, and the consensus taxon the community landed on. The whole batch costs one upstream request, so resolving ten ids here is far cheaper than ten separate lookups. Records come back in the requested order. A missing id is reported per id in unresolved rather than failing the batch; the call fails only when nothing resolved. Long threads and long observation-field lists are cut to fit one response budget shared across the batch — up to 40 identifications, 40 comments, and 40 filled fields for a single id, 4 of each per record for ten — and every record reports the size of each array beside what it kept.","input":[{"n":"observation_id","t":"array<integer>","r":true},{"n":"include","t":"array<enum(5)>"}],"output":[{"n":"observations","t":"array<object>"},{"n":"unresolved","t":"array<object>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"inaturalist_get_species_counts","server":54,"verb":"get","cls":"get","resolver":false,"title":"Inaturalist Get Species Counts","description":"Rank the distinct species recorded in an area and period, most-observed first — the \"what lives here\" answer, without paging through individual sightings. An area is given in exactly one form: place_id, the lat/lng/radius triple in kilometres, or a four-corner bounding box. Narrow to a clade by passing taxon_id, e.g. the birds of a park, or to one observer or one project by user_id, user_login, or project_id. Defaults to research-grade, wild-only records and echoes those defaults back. For the most active people rather than the most recorded species, use inaturalist_get_leaderboard.","input":[{"n":"place_id","t":"integer"},{"n":"lat","t":"number"},{"n":"lng","t":"number"},{"n":"radius","t":"number"},{"n":"nelat","t":"number"},{"n":"nelng","t":"number"},{"n":"swlat","t":"number"},{"n":"swlng","t":"number"},{"n":"taxon_id","t":"integer"},{"n":"d1","t":"string"},{"n":"d2","t":"string"},{"n":"quality_grade","t":"array<enum(3)>"},{"n":"captive","t":"boolean"},{"n":"term_id","t":"array<integer>"},{"n":"term_value_id","t":"array<integer>"},{"n":"iconic_taxa","t":"array<enum(14)>"},{"n":"user_id","t":"integer"},{"n":"user_login","t":"string"},{"n":"project_id","t":"integer"},{"n":"page","t":"integer"},{"n":"per_page","t":"integer"}],"output":[{"n":"total_results","t":"number"},{"n":"species","t":"array<object>"},{"n":"applied_filters","t":"object"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"truncationCeiling","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"inaturalist_get_histogram","server":54,"verb":"get","cls":"get","resolver":false,"title":"Inaturalist Get Histogram","description":"Build a phenology histogram for a taxon in an area — which months, weeks, or years it is recorded in. The default month_of_year interval answers \"when does this bloom or appear here\" in twelve buckets; the absolute intervals (year, month, week, day, hour) bucket real dates and upstream applies a default start date to them. An area is given in exactly one form: place_id, the lat/lng/radius triple in kilometres, or a four-corner bounding box. Omit taxon_id to chart every taxon in the area. Narrow to one life stage or reproductive state with an annotation pair (term_id and term_value_id, e.g. Life Stage = Larva, or Flowers and Fruits = Flowers), or to broad groups with iconic_taxa. Defaults to research-grade, wild-only records and echoes those defaults back.","input":[{"n":"taxon_id","t":"integer"},{"n":"place_id","t":"integer"},{"n":"lat","t":"number"},{"n":"lng","t":"number"},{"n":"radius","t":"number"},{"n":"nelat","t":"number"},{"n":"nelng","t":"number"},{"n":"swlat","t":"number"},{"n":"swlng","t":"number"},{"n":"interval","t":"enum(7)"},{"n":"date_field","t":"enum(2)"},{"n":"d1","t":"string"},{"n":"d2","t":"string"},{"n":"quality_grade","t":"array<enum(3)>"},{"n":"captive","t":"boolean"},{"n":"term_id","t":"array<integer>"},{"n":"term_value_id","t":"array<integer>"},{"n":"iconic_taxa","t":"array<enum(14)>"}],"output":[{"n":"interval","t":"enum(7)"},{"n":"buckets","t":"array<object>"},{"n":"total","t":"number"},{"n":"applied_filters","t":"object"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"inaturalist_get_leaderboard","server":54,"verb":"get","cls":"get","resolver":false,"title":"Inaturalist Get Leaderboard","description":"Rank the most active observers or identifiers for an area, period, and taxon — who knows this place or this group. kind selects which: observers are ranked by how many observations they recorded, identifiers by how many identifications they made. An area is given in exactly one form: place_id, the lat/lng/radius triple in kilometres, or a four-corner bounding box. Both endpoints rank only the top 500 entries, so page multiplied by per_page must stay at or below 500 — narrow the area, period, or taxon to bring someone further down into reach. For the most-recorded species rather than the most active people, use inaturalist_get_species_counts.","input":[{"n":"kind","t":"enum(2)","r":true},{"n":"place_id","t":"integer"},{"n":"lat","t":"number"},{"n":"lng","t":"number"},{"n":"radius","t":"number"},{"n":"nelat","t":"number"},{"n":"nelng","t":"number"},{"n":"swlat","t":"number"},{"n":"swlng","t":"number"},{"n":"taxon_id","t":"integer"},{"n":"d1","t":"string"},{"n":"d2","t":"string"},{"n":"quality_grade","t":"array<enum(3)>"},{"n":"page","t":"integer"},{"n":"per_page","t":"integer"}],"output":[{"n":"kind","t":"enum(2)"},{"n":"count_metric","t":"enum(2)"},{"n":"total_results","t":"number"},{"n":"entries","t":"array<object>"},{"n":"applied_filters","t":"object"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"inaturalist_get_similar_species","server":54,"verb":"get","cls":"get","resolver":false,"title":"Inaturalist Get Similar Species","description":"List the taxa this one is most often misidentified as, ranked by how many times identifiers made the correction — the field-identification check before committing to a look-alike. Scope it to an area in exactly one form (place_id, the lat/lng/radius triple in kilometres, or a four-corner bounding box) to see the confusion set a specific region actually produces, or leave the area off for the global set. The taxon must be a genus or finer (genus, species, or below) — upstream keeps no confusion set for a family, order, or anything coarser. Resolve the organism name to a taxon id with inaturalist_resolve_name first.","input":[{"n":"taxon_id","t":"integer","r":true},{"n":"place_id","t":"integer"},{"n":"lat","t":"number"},{"n":"lng","t":"number"},{"n":"radius","t":"number"},{"n":"nelat","t":"number"},{"n":"nelng","t":"number"},{"n":"swlat","t":"number"},{"n":"swlng","t":"number"},{"n":"d1","t":"string"},{"n":"d2","t":"string"},{"n":"quality_grade","t":"array<enum(3)>"},{"n":"captive","t":"boolean"},{"n":"limit","t":"integer"}],"output":[{"n":"taxon_id","t":"number"},{"n":"similar_species","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"truncationCeiling","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"inaturalist_get_taxon","server":54,"verb":"get","cls":"get","resolver":false,"title":"Inaturalist Get Taxon","description":"Fetch a taxon profile: the taxonomic path, per-authority conservation listings, the encyclopedia summary, the photo gallery, immediate children, and observation counts. Resolve a name to a taxon id with inaturalist_resolve_name first. The upstream record is 95 KB for a common species, so it is projected before anything else happens; a taxon that still overflows comes back as an outline of its sections with their byte sizes, and naming those sections in a re-call returns only those. The valid section names are summary, taxonomy, children, conservation, photos, and encyclopedia.","input":[{"n":"taxon_id","t":"integer","r":true},{"n":"sections","t":"array<string>"}],"output":[{"n":"kind","t":"enum(2)"},{"n":"id","t":"number"},{"n":"name","t":"string"},{"n":"rank","t":"string"},{"n":"rank_level","t":"number"},{"n":"common_name","t":"string"},{"n":"iconic_taxon_name","t":"string"},{"n":"is_active","t":"boolean"},{"n":"extinct","t":"boolean"},{"n":"observations_count","t":"number"},{"n":"listed_taxa_count","t":"number"},{"n":"vision","t":"boolean"},{"n":"taxonomy","t":"array<object>"},{"n":"children","t":"array<object>"},{"n":"conservation","t":"object"},{"n":"photos","t":"array<object>"},{"n":"encyclopedia","t":"object"},{"n":"sections","t":"array<object>"},{"n":"notice","t":"string"},{"n":"sections_applied","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"ia_find_snapshots","server":55,"verb":"find","cls":"search","resolver":false,"title":"Find Wayback Machine Snapshots","description":"Find Wayback Machine snapshots of a URL. Mode \"closest\" returns the single nearest capture to a given timestamp via the Availability API, falling back to a CDX closest-capture query when the Availability API has no answer (one result). Mode \"history\" returns the full capture list via the CDX API — filterable by date range and HTTP status code, collapsed by default to one capture per day (collapse \"timestamp:8\"); collapse \"timestamp:14\" lists one row per distinct capture second. Use history mode to survey how a page changed over time; use closest mode when you need the snapshot nearest a specific date. History mode returns up to limit records (at most 10,000 per call) and supports resume-key pagination for URLs with very large capture histories.","input":[{"n":"url","t":"string","r":true},{"n":"mode","t":"enum(2)","r":true},{"n":"timestamp","t":"string"},{"n":"from","t":"string"},{"n":"to","t":"string"},{"n":"status_filter","t":"const|string"},{"n":"limit","t":"integer"},{"n":"collapse","t":"const|string"},{"n":"resume_key","t":"string"}],"output":[{"n":"snapshots","t":"array<object>"},{"n":"resume_key","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"ia_get_snapshot","server":55,"verb":"get","cls":"get","resolver":false,"title":"Get Wayback Machine Snapshot Content","description":"Fetch the archived content of a URL at a specific Wayback Machine timestamp. Resolves to the nearest available capture when the exact timestamp has no snapshot. Returns the archived page as readable plain text (HTML stripped) and the replay URL of the capture Wayback served, for browser access. Use ia_find_snapshots first to discover valid timestamps for a URL.","input":[{"n":"url","t":"string","r":true},{"n":"timestamp","t":"string","r":true}],"output":[{"n":"text","t":"string"},{"n":"replay_url","t":"string"},{"n":"resolved_timestamp","t":"string"},{"n":"resolved_status","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"ia_search_items","server":55,"verb":"search","cls":"search","resolver":false,"title":"Search Internet Archive Items","description":"Search the Internet Archive library (40M+ items) using the Advanced Search (Solr) API. Filter by media type (texts, audio, movies, software, image, etc.), collection, creator, date range, and language. Sort by downloads (the default), date, title, or random. Supports pagination via page/rows. Returns identifiers, titles, creators (the first 10, with creator_count when a record lists more), media types, dates, download counts, collections (without fav- favorites lists), total_found, and current page/rows for pagination context. Use ia_get_item with a returned identifier to get full metadata and file manifests.","input":[{"n":"query","t":"string","r":true},{"n":"mediatype","t":"string"},{"n":"collection","t":"string"},{"n":"creator","t":"string"},{"n":"date_from","t":"string"},{"n":"date_to","t":"string"},{"n":"language","t":"string"},{"n":"sort","t":"string"},{"n":"rows","t":"integer"},{"n":"page","t":"integer"}],"output":[{"n":"items","t":"array<object>"},{"n":"total_found","t":"number"},{"n":"page","t":"number"},{"n":"rows","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"ia_get_item","server":55,"verb":"get","cls":"get","resolver":false,"title":"Get Internet Archive Item","description":"Retrieve metadata and the file manifest for an Internet Archive item by identifier. Returns title, creator, description, subjects, collections, license, language, the total file count, and a page of files, each with its format, size, and direct download URL. Pages hold up to max_files files (default 50, at most 500 per call) starting at file_offset; set format to keep a single file type (e.g. \"DjVuTXT\", \"Text PDF\", \"VBR MP3\"). The primary tool to act on a search result from ia_search_items. Use ia_get_text to retrieve the readable text of a text item.","input":[{"n":"identifier","t":"string","r":true},{"n":"format","t":"string"},{"n":"max_files","t":"integer"},{"n":"file_offset","t":"integer"}],"output":[{"n":"identifier","t":"string"},{"n":"title","t":"string"},{"n":"creator","t":"string|array<string>"},{"n":"description","t":"string|array<string>"},{"n":"mediatype","t":"string"},{"n":"date","t":"string"},{"n":"subject","t":"string|array<string>"},{"n":"collection","t":"string|array<string>"},{"n":"licenseurl","t":"string"},{"n":"rights","t":"string"},{"n":"language","t":"string|array<string>"},{"n":"file_count","t":"number"},{"n":"files","t":"array<object>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"ia_get_text","server":55,"verb":"get","cls":"get","resolver":false,"title":"Get Internet Archive Item Text","description":"Retrieve the readable text content of a text item (OCR DjVuTXT or plain-text file) from the Internet Archive, with length-aware truncation and a continuation pointer for pagination. Suited for public-domain books, documents, scanned periodicals, and transcripts. Use max_chars and char_offset to page through long documents. To confirm the item has a text file first, call ia_get_item with format \"DjVuTXT\"; its response also gives the mediatype.","input":[{"n":"identifier","t":"string","r":true},{"n":"max_chars","t":"integer"},{"n":"char_offset","t":"integer"}],"output":[{"n":"text","t":"string"},{"n":"char_offset","t":"number"},{"n":"max_chars","t":"number"},{"n":"has_more","t":"boolean"},{"n":"source_file","t":"string"},{"n":"source_file_bytes","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"interpro_list_reference","server":56,"verb":"list","cls":"list","resolver":false,"title":"InterPro reference vocabulary","description":"List supported InterPro database slugs, entry types, accession routing patterns, common taxon IDs, or current release information.","input":[{"n":"topic","t":"enum(5)","r":true}],"output":[{"n":"topic","t":"enum(5)"},{"n":"items","t":"array<object>"},{"n":"sourceUrls","t":"array<string>"},{"n":"release","t":"object"},{"n":"error","t":"object"}]},{"name":"interpro_search_entries","server":56,"verb":"search","cls":"search","resolver":false,"title":"Search InterPro entries","description":"Search InterPro entries or member signatures by text or entry type. GO filters require sourceDatabase interpro; integratedInto selects member signatures for an InterPro accession. Results are cursor-paged; use interpro_get_entry for full metadata.","input":[{"n":"sourceDatabase","t":"enum(15)"},{"n":"query","t":"string"},{"n":"entryType","t":"enum(11)"},{"n":"goTerm","t":"string"},{"n":"goCategory","t":"enum(3)"},{"n":"integratedInto","t":"string"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"query","t":"object"},{"n":"entries","t":"array<object>"},{"n":"page","t":"object"},{"n":"sourceUrl","t":"string"},{"n":"notice","t":"string"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"effectiveQuery","t":"string"},{"n":"error","t":"object"}]},{"name":"interpro_get_entry","server":56,"verb":"get","cls":"get","resolver":false,"title":"InterPro entry metadata","description":"Retrieve one InterPro or member-database entry, including description, hierarchy, member signatures, GO terms, literature, cross-references, clan membership, and coverage counters.","input":[{"n":"accession","t":"string","r":true},{"n":"sourceDatabase","t":"enum(15)"},{"n":"includeThumbnail","t":"boolean"}],"output":[{"n":"accession","t":"string"},{"n":"sourceDatabase","t":"enum(15)"},{"n":"entry","t":"object"},{"n":"url","t":"string"},{"n":"sourceUrl","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"interpro_get_clan","server":56,"verb":"get","cls":"get","resolver":false,"title":"InterPro clan metadata and members","description":"Retrieve a Pfam, CDD, or PIRSF clan/set and a cursor page of member entries; optionally include its relationship graph, returned in slices that fit the response budget and paged with relationshipOffset.","input":[{"n":"accession","t":"string","r":true},{"n":"sourceDatabase","t":"enum(3)"},{"n":"includeRelationships","t":"boolean"},{"n":"relationshipOffset","t":"integer"},{"n":"includeThumbnail","t":"boolean"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"accession","t":"string"},{"n":"sourceDatabase","t":"enum(3)"},{"n":"clan","t":"object"},{"n":"relationshipsIncluded","t":"boolean"},{"n":"relationshipsPage","t":"object"},{"n":"members","t":"array<object>"},{"n":"page","t":"object"},{"n":"url","t":"string"},{"n":"sourceUrl","t":"string"},{"n":"notice","t":"string"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"effectiveQuery","t":"string"},{"n":"error","t":"object"}]},{"name":"interpro_get_protein_domains","server":56,"verb":"get","cls":"get","resolver":false,"title":"Map protein domains","description":"Retrieve InterPro and member-signature matches on a canonical UniProt protein, preserving every location and discontinuous fragment. Optionally retain matches covering a residue and include extra predicted features. Large maps arrive in segments of whole matches that fit the response budget: the first segment carries the protein metadata, requested extra features follow the last match, and coverage.nextCursor continues until hasMore is false.","input":[{"n":"accession","t":"string","r":true},{"n":"residuePosition","t":"integer"},{"n":"includeExtraFeatures","t":"boolean"},{"n":"cursor","t":"string"}],"output":[{"n":"accession","t":"string"},{"n":"protein","t":"object"},{"n":"matches","t":"array<object>"},{"n":"extraFeatures","t":"object"},{"n":"selection","t":"object"},{"n":"coverage","t":"object"},{"n":"url","t":"string"},{"n":"sourceUrl","t":"string"},{"n":"notice","t":"string"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"effectiveQuery","t":"string"},{"n":"error","t":"object"}]},{"name":"interpro_find_proteins_by_domain","server":56,"verb":"find","cls":"search","resolver":false,"title":"Find proteins by domain","description":"Find UniProt proteins carrying an InterPro or member signature. Defaults to reviewed human proteins; reviewedOnly=false includes reviewed and unreviewed proteins in the chosen taxon. Optional isFragment filters fragment annotations; false does not prove a complete canonical sequence.","input":[{"n":"accession","t":"string","r":true},{"n":"sourceDatabase","t":"enum(15)"},{"n":"taxonId","t":"string"},{"n":"reviewedOnly","t":"boolean"},{"n":"isFragment","t":"boolean"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"query","t":"object"},{"n":"proteins","t":"array<object>"},{"n":"page","t":"object"},{"n":"sourceUrl","t":"string"},{"n":"notice","t":"string"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"effectiveQuery","t":"string"},{"n":"error","t":"object"}]},{"name":"ioda_search_entities","server":57,"verb":"search","cls":"search","resolver":false,"title":"Ioda Search Entities","description":"Resolve country, region, autonomous-system, or geoasn (one ASN within a region or country) names and codes for outage investigations. Choose entityType and either query or entityCode; omit both to list the type. Countries use two letters, regions numeric IODA codes, ASNs decimal digits (AS prefix accepted), geoasns an ASN and a region or country code (40934-576, 59962-IR). Add relatedToType and relatedToCode to list entityType entities within one country, region, ASN, or geoasn, such as the regions or networks of a country; a scope combines with query. Metadata does not establish measurement coverage. Pages are zero-based; keep limit fixed when continuing.","input":[{"n":"entityType","t":"string","r":true},{"n":"entityCode","t":"string"},{"n":"query","t":"string"},{"n":"relatedToType","t":"string"},{"n":"relatedToCode","t":"string"},{"n":"limit","t":"integer"},{"n":"page","t":"integer"}],"output":[{"n":"entities","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"provenance","t":"object"},{"n":"applied","t":"object"},{"n":"notice","t":"string"},{"n":"truncated","t":"object"},{"n":"error","t":"object"}]},{"name":"ioda_get_status","server":57,"verb":"get","cls":"get","resolver":false,"title":"Ioda Get Status","description":"Inspect recent IODA detection evidence and measurement coverage for one entity over a lookback of 1–24 hours. Collect events, alerts, bgp, ping-slash24 and merit-nt evidence. Partial failures remain explicit and route to standalone tools. recent, stale, no_data and unknown describe observation availability; buckets within the 1800-second publication allowance count as pending, not missing. No alerts is not an all-clear. IODA measures macroscopic connectivity, not one office or a shutdown cause.","input":[{"n":"entityType","t":"string","r":true},{"n":"entityCode","t":"string","r":true},{"n":"lookbackHours","t":"integer"}],"output":[{"n":"entity","t":"object"},{"n":"asOf","t":"integer"},{"n":"window","t":"object"},{"n":"detection","t":"enum(3)"},{"n":"events","t":"object"},{"n":"alerts","t":"object"},{"n":"signals","t":"array<object>"},{"n":"components","t":"array<object>"},{"n":"limitations","t":"array<string>"},{"n":"applied","t":"object"},{"n":"notice","t":"string"},{"n":"truncated","t":"object"},{"n":"error","t":"object"}]},{"name":"ioda_find_outages","server":57,"verb":"find","cls":"search","resolver":false,"title":"Ioda Find Outages","description":"Find IODA outage events overlapping an explicit Unix-second window of at most 31 days. Omit entity filters for global scope, which searches one day outside the window by default instead of 14; global searches over multi-day windows can time out, so narrow the window or add entityType. A code requires its entityType. relatedToType and relatedToCode limit results to entityType entities within one country, region, ASN, or geoasn. Source scores are not an absolute severity scale. Starts may precede from; ends can be clipped at until and do not establish recovery. includeAlerts adds nested transitions and can increase size. Pages are zero-based; keep filters and limit fixed.","input":[{"n":"entityType","t":"string"},{"n":"entityCode","t":"string"},{"n":"source","t":"string"},{"n":"relatedToType","t":"string"},{"n":"relatedToCode","t":"string"},{"n":"from","t":"integer","r":true},{"n":"until","t":"integer","r":true},{"n":"limit","t":"integer"},{"n":"page","t":"integer"},{"n":"includeAlerts","t":"boolean"},{"n":"extendWindowSeconds","t":"integer"}],"output":[{"n":"events","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"provenance","t":"object"},{"n":"applied","t":"object"},{"n":"notice","t":"string"},{"n":"truncated","t":"object"},{"n":"error","t":"object"}]},{"name":"ioda_summarize_outages","server":57,"verb":"summarize","cls":"analyze","resolver":false,"title":"Ioda Summarize Outages","description":"Rank the entities of one entityType by IODA's outage summary score over an explicit Unix-second window of at most 31 days, such as the countries or a country's regions hit hardest this week. Rows keep IODA's order, descending scores.overall. IODA merges overlapping events from different sources, scores each merged event as the product of its sources' scores, and sums the merged events into overall; each <source>.<method> key sums that source's event scores. Scores are window totals for ranking the rows of one request, not current status, and are not comparable across requests with different windows. Add entityCode for one entity, or relatedToType and relatedToCode to rank entityType entities within one country, region, ASN, or geoasn; large type-only rankings can time out. An empty result is not an all-clear. Pages are zero-based; keep filters and limit fixed.","input":[{"n":"entityType","t":"string","r":true},{"n":"entityCode","t":"string"},{"n":"relatedToType","t":"string"},{"n":"relatedToCode","t":"string"},{"n":"from","t":"integer","r":true},{"n":"until","t":"integer","r":true},{"n":"limit","t":"integer"},{"n":"page","t":"integer"},{"n":"extendWindowSeconds","t":"integer"}],"output":[{"n":"summaries","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"provenance","t":"object"},{"n":"applied","t":"object"},{"n":"notice","t":"string"},{"n":"truncated","t":"object"},{"n":"error","t":"object"}]},{"name":"ioda_get_signals","server":57,"verb":"get","cls":"get","resolver":false,"title":"Ioda Get Signals","description":"Fetch numeric BGP visibility, active IPv4 /24 probing, or Merit telescope series for one entity in an explicit Unix-second window of at most 31 days. source is required: bgp, ping-slash24, or merit-nt. Nulls are missing observations, not zero connectivity. maxPoints requests upstream aggregation, not first-N samples; smaller values lose temporal resolution. Returned series retain aligned boundary buckets; timestamps and intervals support cross-source comparisons.","input":[{"n":"entityType","t":"string","r":true},{"n":"entityCode","t":"string","r":true},{"n":"from","t":"integer","r":true},{"n":"until","t":"integer","r":true},{"n":"source","t":"string","r":true},{"n":"maxPoints","t":"integer"}],"output":[{"n":"series","t":"array<object>"},{"n":"semantics","t":"object"},{"n":"provenance","t":"object"},{"n":"applied","t":"object"},{"n":"notice","t":"string"},{"n":"truncated","t":"object"},{"n":"error","t":"object"}]},{"name":"ioda_get_alerts","server":57,"verb":"get","cls":"get","resolver":false,"title":"Ioda Get Alerts","description":"Retrieve IODA detection and recovery transitions in an explicit Unix-second window of at most 31 days. Omit entity filters for global scope; a code requires entityType. relatedToType and relatedToCode limit results to entityType entities within one country, region, ASN, or geoasn, served at page 0 only. Each transition retains its source, level, condition, value and baseline; levels and baselines are not a source-independent severity scale. Missing transitions do not establish health. Pages are zero-based; keep filters and limit fixed.","input":[{"n":"entityType","t":"string"},{"n":"entityCode","t":"string"},{"n":"source","t":"string"},{"n":"relatedToType","t":"string"},{"n":"relatedToCode","t":"string"},{"n":"from","t":"integer","r":true},{"n":"until","t":"integer","r":true},{"n":"limit","t":"integer"},{"n":"page","t":"integer"},{"n":"extendWindowSeconds","t":"integer"}],"output":[{"n":"alerts","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"provenance","t":"object"},{"n":"applied","t":"object"},{"n":"notice","t":"string"},{"n":"truncated","t":"object"},{"n":"error","t":"object"}]},{"name":"libofcongress_search_items","server":58,"verb":"search","cls":"search","resolver":false,"title":"Search LOC Items","description":"Search the Library of Congress digital collections by keyword. Optionally filter by material format (photos, maps, newspapers, audio, etc.), date range, subject heading, or geographic location, or scope the search to a single curated collection with collection_slug. Returns item summaries with titles, dates, descriptions, LOC IDs, and format tags. Each result carries is_item: pass the id of a result where is_item is true to libofcongress_get_item for full metadata; results where is_item is false are non-item resources (collections, exhibit and research-guide pages, newspaper-page results, catalog.loc.gov records, hdl.loc.gov finding aids) with no item record — open their url instead. Use libofcongress_search_subjects to find an LCSH heading for the subject filter. To discover the subject and location values the filters accept for a search, set include_facets to get its top subject_facets and location_facets.","input":[{"n":"query","t":"string","r":true},{"n":"format","t":"enum(8)"},{"n":"date_start","t":"integer"},{"n":"date_end","t":"integer"},{"n":"subject","t":"string"},{"n":"location","t":"string"},{"n":"include_facets","t":"boolean"},{"n":"collection_slug","t":"string"},{"n":"limit","t":"integer"},{"n":"page","t":"integer"}],"output":[{"n":"items","t":"array<object>"},{"n":"total","t":"number"},{"n":"page","t":"number"},{"n":"pages","t":"number"},{"n":"has_next","t":"boolean"},{"n":"subject_facets","t":"array<object>"},{"n":"location_facets","t":"array<object>"},{"n":"effectiveQuery","t":"string"},{"n":"effectiveCollectionSlug","t":"string"},{"n":"totalCount","t":"number"},{"n":"effectiveSubjectTerms","t":"array<string>"},{"n":"effectiveLimit","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"libofcongress_get_item","server":58,"verb":"get","cls":"get","resolver":false,"title":"Get LOC Item","description":"Retrieve the full metadata record for a specific LOC digital item. Returns the imprint (place, publisher, and date of publication), contributors, LCSH subject headings and the subject terms the search subject filter accepts, summary, languages, locations, rights information, physical description, call number, original and online formats, access restrictions, former catalog IDs, notes, and related items, plus the item's digital resources (each with its page count, representative image, PDF, and audio) and a window of its pages. Each page has a page_url and has_text; pass a page_url with has_text true to libofcongress_get_newspaper_page to read that page's text (newspaper, book, and manuscript pages alike). A long item lists 50 pages per call: continue with page_offset set to next_page_offset. Set include_files for each listed page's downloadable files (TIFF, JP2, JPEG sizes, text). Use after libofcongress_search_items on a result whose is_item is true. Pass the result id — a simple ID, an LCCN, or a slash-separated newspaper path — or a loc.gov item link (`https://www.loc.gov/item/<id>/`) or LCCN permalink (`https://lccn.loc.gov/<lccn>`), which is read as its id. Non-item results (is_item: false) — collections, exhibits, guides, newspaper pages, catalog.loc.gov records, hdl.loc.gov finding aids — have no item record and cannot be retrieved here.","input":[{"n":"item_id","t":"string","r":true},{"n":"page_offset","t":"integer"},{"n":"page_limit","t":"integer"},{"n":"include_files","t":"boolean"}],"output":[{"n":"item_id","t":"string"},{"n":"title","t":"string"},{"n":"date","t":"string"},{"n":"imprint","t":"string"},{"n":"contributors","t":"array<string>"},{"n":"subject_headings","t":"array<string>"},{"n":"subject_terms","t":"array<string>"},{"n":"notes","t":"array<string>"},{"n":"summary","t":"string"},{"n":"rights_information","t":"string"},{"n":"physical_description","t":"string"},{"n":"call_number","t":"string"},{"n":"languages","t":"array<string>"},{"n":"locations","t":"array<string>"},{"n":"former_ids","t":"array<string>"},{"n":"original_formats","t":"array<string>"},{"n":"online_formats","t":"array<string>"},{"n":"access_restricted","t":"boolean"},{"n":"resources","t":"array<object>"},{"n":"pages","t":"array<object>"},{"n":"page_total","t":"number"},{"n":"next_page_offset","t":"number"},{"n":"related_items","t":"array<string>"},{"n":"url","t":"string"},{"n":"totalCount","t":"number"},{"n":"effectivePageLimit","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"libofcongress_search_newspapers","server":58,"verb":"search","cls":"search","resolver":false,"title":"Search Historical Newspapers","description":"Search historical newspaper pages in the Chronicling America corpus. Returns matching pages with the opening of each page's OCR text (~500 characters), publication title, date, the states LOC indexes the title under, and the page URL needed for libofcongress_get_newspaper_page. Filters by keyword, date range, US state, and newspaper title. The excerpt is the page's first lines, not the text around the match: to read where the query occurs, call libofcongress_get_newspaper_page with the returned url field and this query as its match, which returns the passages around each occurrence; omit match for the full page text. OCR quality varies: 19th-century and degraded materials may contain fragmented or garbled text.","input":[{"n":"query","t":"string","r":true},{"n":"date_start","t":"integer|string|const"},{"n":"date_end","t":"integer|string|const"},{"n":"state","t":"string"},{"n":"newspaper_title","t":"string"},{"n":"limit","t":"integer"},{"n":"page","t":"integer"}],"output":[{"n":"items","t":"array<object>"},{"n":"total","t":"number"},{"n":"page","t":"number"},{"n":"pages","t":"number"},{"n":"has_next","t":"boolean"},{"n":"effectiveQuery","t":"string"},{"n":"totalCount","t":"number"},{"n":"effectiveLimit","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"libofcongress_get_newspaper_page","server":58,"verb":"get","cls":"get","resolver":false,"title":"Get Newspaper Page","description":"Retrieve the full text of one LOC page — a historical newspaper page, or a book or manuscript page — or, with match, only the passages around your search terms, with its publication metadata: for newspapers the title, issue date, place of publication, indexed states, and edition; for every page its sequence, the page count, and the item_title and item_id of the issue, book, or manuscript it belongs to — pass item_id to libofcongress_get_item to list every page of the item. Pass the url field from a libofcongress_search_newspapers result, or a pages[].page_url from libofcongress_get_item (has_text true), or a Chronicling America page link (…/ed-N/seq-M/) — do not construct this URL manually. A dense newspaper page runs to 50,000 characters: to find the article a search hit on, pass the search query as match and read the passages around it rather than the whole page. The text is OCR, or for some manuscripts a volunteer transcription; OCR quality varies by digitization batch and era, and 19th-century and degraded materials may contain fragmented text, garbled words, and line-break artifacts that are surfaced as-is. When a page exists but has no digitized text, ocr_available is false and ocr_text is empty — this is a data property, not an error.","input":[{"n":"page_url","t":"string","r":true},{"n":"match","t":"string"}],"output":[{"n":"page_url","t":"string"},{"n":"item_id","t":"string"},{"n":"item_title","t":"string"},{"n":"newspaper_title","t":"string"},{"n":"date","t":"string"},{"n":"states","t":"array<string>"},{"n":"place_of_publication","t":"string"},{"n":"edition","t":"string"},{"n":"sequence","t":"number"},{"n":"segment_count","t":"number"},{"n":"ocr_text","t":"string"},{"n":"ocr_available","t":"boolean"},{"n":"matches","t":"array<string>"},{"n":"match_count","t":"integer"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"libofcongress_search_subjects","server":58,"verb":"search","cls":"search","resolver":false,"title":"Search LC Subject Headings","description":"Search Library of Congress Subject Headings (LCSH) by keyword. Returns authorized subject headings and their URIs, ranked by relevance with a heading that exactly matches the query first; a partial word with no keyword match returns the headings that begin with it. Use the returned label as the subject filter in libofcongress_search_items — LCSH uses precise, standardized terms that differ from natural language (e.g., \"World War, 1939-1945\" not \"World War II\"; \"Aerial photography\" not \"Photography, Aerial\"). Running this tool before a subject-filtered libofcongress_search_items dramatically improves result quality.","input":[{"n":"query","t":"string","r":true},{"n":"limit","t":"integer"}],"output":[{"n":"subjects","t":"array<object>"},{"n":"total","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"effectiveLimit","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"libofcongress_browse_collections","server":58,"verb":"browse","cls":"search","resolver":false,"title":"Browse LOC Collections","description":"List and browse Library of Congress curated digital collections. Returns collection names, descriptions, item counts, slugs, and URLs. Optionally filter by keyword. Collections are curated subsets of the digital holdings with specific focuses (e.g., \"Civil War Glass Negatives\", \"Baseball Cards\", \"WPA Posters\"). Use the returned URL to navigate directly to a collection on loc.gov.","input":[{"n":"query","t":"string"},{"n":"limit","t":"integer"},{"n":"page","t":"integer"}],"output":[{"n":"collections","t":"array<object>"},{"n":"total","t":"number"},{"n":"page","t":"number"},{"n":"pages","t":"number"},{"n":"has_next","t":"boolean"},{"n":"totalCount","t":"number"},{"n":"effectiveLimit","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"medcode_get_code","server":59,"verb":"get","cls":"get","resolver":false,"title":"Get Medical Code","description":"Decode one or more US medical codes to their official descriptions across ICD-10-CM (diagnoses), ICD-10-PCS (inpatient procedures), HCPCS Level II (supplies/drugs/services), and RxNorm (drugs, by RXCUI). Also decodes a National Drug Code (NDC) directly to its RxNorm product offline, tagged `source: \"NDC\"` — hyphenated in an FDA segment configuration (4-4-2, 5-3-2, 5-4-1, or the 11-digit 5-4-2) or as bare 10/11 digits; any other segment widths are malformed and stay unresolved. Auto-detects the system from each code's shape; pass an explicit `system` only when a value is genuinely ambiguous. Accepts 1–50 codes and returns partial success: resolved codes in `found`, unresolved in `notFound` with a per-code reason, so one bad code never fails the batch. Set `includeHierarchy` to attach each code's parent and immediate children (with a `childrenTruncated` flag when a code has more children than the cap returns — walk the full set via medcode_browse_hierarchy or medcode_map_codes). The resolved `system` is echoed on every result for chaining into a billability check or a medcode_map_codes parents/children walk; a bare integer that resolves nowhere is named as a possible CPT / HCPCS Level I code, which is out of scope, except a bare 10/11-digit one, which is named as an NDC no bundled drug maps to; a code string that also exists in another bundled system carries `alsoInSystems` naming it, so a single answer to a colliding code is never mistaken for the only one.","input":[{"n":"codes","t":"array<string>","r":true},{"n":"system","t":"enum(4)"},{"n":"includeHierarchy","t":"boolean"}],"output":[{"n":"found","t":"array<object>"},{"n":"notFound","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"medcode_search_codes","server":59,"verb":"search","cls":"search","resolver":false,"title":"Search Medical Codes","description":"Find US medical codes whose official descriptions match a described concept, via full-text search over the bundled index. Every search term must appear — matched first as a token prefix, then as a substring so inflected and compound forms are also found (a \"neuropathy\" search surfaces \"mononeuropathy\"/\"polyneuropathy\" siblings too, not only a standalone \"neuropathy\" token). An RxNorm concept matches on its drug name alone, never its term type (SBD, IN, …) — narrow by type with `chapter`. Filter by `system` (ICD10CM/ICD10PCS/HCPCS/RXNORM), `billableOnly` to exclude headers/categories, and `chapter`. Use when you have a clinical description and need the code — the reverse of medcode_get_code. Results echo the resolved system per row for chaining, rank exact prefix matches ahead of substring-only matches with a deterministic tie-break, and disclose truncation with a `nextCursor`: pass it back as `cursor` to page through the full ranked set.","input":[{"n":"query","t":"string","r":true},{"n":"system","t":"enum(4)"},{"n":"billableOnly","t":"boolean"},{"n":"chapter","t":"string"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"codes","t":"array<object>"},{"n":"effectiveQuery","t":"string"},{"n":"appliedFilters","t":"object"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"nextCursor","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"medcode_check_code","server":59,"verb":"check","cls":"analyze","resolver":false,"title":"Check Medical Code","description":"Validate whether a US medical code exists, is current, and is billable in the active bundled release. Returns a discriminated status — valid_billable, valid_not_billable, valid_header, valid, or terminated — with a `whyNot` explaining non-billable and terminated cases (e.g. \"valid ICD-10-CM category but not billable — submit a more specific child code\"). This is the detail a coder needs before submitting a claim. RxNorm has no billing concept, so a current RxNorm concept is `valid` with `billable: null` and no billing verdict. Auto-detects the system from the code's shape; pass an explicit `system` to disambiguate. A non-billable or terminated code is a successful result with a whyNot, not an error — only a code absent from the named or detected system raises unknown_code, which names the other bundled system when one holds the code. A code string that also exists in another bundled system carries `alsoInSystems` naming it, since the verdict applies only to the system that answered.","input":[{"n":"code","t":"string","r":true},{"n":"system","t":"enum(4)"}],"output":[{"n":"system","t":"string"},{"n":"code","t":"string"},{"n":"status","t":"enum(5)"},{"n":"billable","t":"boolean"},{"n":"whyNot","t":"string"},{"n":"alsoInSystems","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"medcode_map_codes","server":59,"verb":"map","cls":"resolve","resolver":true,"title":"Map Medical Codes","description":"Crosswalk a US medical code or drug across systems and within a hierarchy. Hierarchy directions: `parents` and `children` walk a code's prefix hierarchy one level per call — immediate parent/children only (depth-1); call iteratively for the full ancestor or descendant path (ICD-10-CM/HCPCS; ICD-10-PCS codes have no prefix parent, and RxNorm concepts no code hierarchy). A resolvable source with no edge in the requested direction is a successful empty result with a notice, not an error. A source code string that also exists in another bundled system carries `alsoInSystems` naming it, since only the resolved system's hierarchy was walked. Drug directions (RxNorm): `name_to_rxcui` (drug name → RXCUI), `ndc_to_rxcui` and `rxcui_to_ndc` (NDC ↔ RXCUI; NDCs accepted hyphenated in an FDA segment configuration — 4-4-2, 5-3-2, 5-4-1, or the 11-digit 5-4-2 — or as bare 10/11 digits; `ndc_to_rxcui` names the product it decoded to), `rxcui_to_ingredients` and `rxcui_to_brands` (RXCUI → ingredient/brand RXCUIs, each with the target's RxNorm name and its `conceptType` — read that before counting a combination product's ingredients). Drug-class directions (RxClass): `rxcui_to_classes` (RXCUI → its classes: pharmacologic class, mechanism of action, physiologic effect, pharmacokinetics, therapeutic category, chemical structure, the diseases it may treat, prevent, diagnose, or induce or is contraindicated with, VA class, DEA controlled-substance schedule, CDC vaccine code; a drug product also carries its ingredients' classes, naming the ingredient in `via`, while DEA schedules are recorded only on drug products and VA classes almost only there, so map a product for those) and `class_to_rxcuis` (class ID → its direct member RXCUIs, each with its RxNorm name and `conceptType`). Each class hit carries `classType`, `source` (the RxClass source asserting it), and `relation` — a `ci_` relation is a contraindication, not an indication; narrow either direction with `classType`. Every result carries `source` provenance (which system or edge answered) so a chained call (e.g. into openfda with a resolved NDC) uses the right identifier. The `children`, `name_to_rxcui`, `rxcui_to_ndc`, `rxcui_to_classes`, and `class_to_rxcuis` directions can return large sets and paginate: a `nextCursor` in the response is passed back as `cursor` (with an optional `limit` page size) to walk the full set. A field the direction does not use is rejected with `field_not_applicable`: `limit` and `cursor` on the point directions, `classType` outside the class directions, and a `system` other than RXNORM on the drug and class directions.","input":[{"n":"from","t":"string","r":true},{"n":"direction","t":"enum(9)","r":true},{"n":"system","t":"enum(4)"},{"n":"classType","t":"enum(10)"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"from","t":"string"},{"n":"direction","t":"string"},{"n":"resolvedSystem","t":"string"},{"n":"alsoInSystems","t":"array<string>"},{"n":"hits","t":"array<object>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"nextCursor","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"medcode_browse_hierarchy","server":59,"verb":"browse","cls":"search","resolver":false,"title":"Browse Code Hierarchy","description":"Walk a US medical code system's hierarchy for discovery without a search term. With no `node`, returns the top-level entries (ICD-10-CM categories, HCPCS range buckets, or ICD-10-PCS first-axis values). With a `node`, returns its immediate children. ICD-10-CM and HCPCS use a prefix hierarchy (a shorter code is the parent of a longer one); ICD-10-PCS is axis-based — each of its 7 characters is an independent axis (section, body system, root operation, body part, approach, device, qualifier), but only the top-level Section axis is browsable (omit `node`): positions 2–7 are context-dependent on the preceding axis path and are not enumerable from a flat partial code. Lets an agent orient in an unfamiliar system or enumerate a category's specific codes. A large child set paginates: when the response carries a `nextCursor`, pass it back as `cursor` to fetch the next page.","input":[{"n":"system","t":"enum(4)","r":true},{"n":"node","t":"const|string"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"kind","t":"enum(2)"},{"n":"codes","t":"array<object>"},{"n":"axes","t":"array<object>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"nextCursor","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"medcode_list_systems","server":59,"verb":"list","cls":"list","resolver":false,"title":"List Code Systems","description":"List the bundled US medical code systems with their release identifiers, effective dates, and code counts, and the RxClass drug-class layer the class crosswalks read, with each source’s version. Confirms which ICD-10-CM fiscal year, ICD-10-PCS fiscal year, HCPCS Level II release, RxNorm normalized set, and RxClass sources are active before acting on any decode, search, or crosswalk result. The corpus is offline and built at package-build time — this call reports exactly which release is baked into the running server. ICD-10-CM/PCS are the US clinical modifications, not the ICD-10/ICD-11 base.","input":[],"output":[{"n":"systems","t":"array<object>"},{"n":"classLayer","t":"object"},{"n":"error","t":"object"}]},{"name":"met_list_departments","server":60,"verb":"list","cls":"list","resolver":false,"title":"List Met Departments","description":"Return the 19 curatorial departments at The Metropolitan Museum of Art, each with its numeric departmentId and display name — the valid values for the departmentId filter on met_search_collections and met_list_objects.","input":[],"output":[{"n":"departments","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"met_search_collections","server":60,"verb":"search","cls":"search","resolver":false,"title":"Search Met Collection","description":"Search the Metropolitan Museum of Art collection by keyword and optional filters. Returns the total match count and one page of matching object IDs, which met_get_object resolves to full records. Relevance is keyword-based, not semantic; department and geographic filters narrow results more than a longer query. Paging reaches only the first 10,000 matches of any search, so narrow a larger one with filters. The medium parameter takes an object classification as the Met spells it (\"Paintings\", \"Sculpture\"), not a material like \"Oil on canvas\". hasImages also includes copyrighted works; CC0 status is per object, from the isPublicDomain and hasCC0Image fields on met_get_object. isHighlight accepts true only. isOnView restricts results to works currently on display in a Met gallery.","input":[{"n":"q","t":"string","r":true},{"n":"matchField","t":"enum(2)"},{"n":"hasImages","t":"boolean"},{"n":"isHighlight","t":"const"},{"n":"isOnView","t":"boolean"},{"n":"medium","t":"string"},{"n":"departmentId","t":"integer"},{"n":"geoLocation","t":"array<string>"},{"n":"dateBegin","t":"integer"},{"n":"dateEnd","t":"integer"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"total","t":"integer"},{"n":"objectIDs","t":"array<integer>"},{"n":"returned","t":"integer"},{"n":"truncated","t":"boolean"},{"n":"remaining","t":"integer"},{"n":"nextOffset","t":"integer"},{"n":"offset","t":"integer"},{"n":"notice","t":"string"},{"n":"effectiveQuery","t":"string"},{"n":"error","t":"object"}]},{"name":"met_list_objects","server":60,"verb":"list","cls":"list","resolver":false,"title":"List Met Objects","description":"Browse the Metropolitan Museum of Art collection without a keyword: every object ID in one curatorial department, every object whose record was created or revised on or after a date, or both together. Returns the total count and one page of IDs in ascending order, which met_get_object resolves to full records. With no filter the list is the whole collection (over 500,000 IDs). departmentId takes an ID from met_list_departments; updatedSince takes a YYYY-MM-DD date and answers \"what has the Met added or revised since this day\". Paging has no depth limit — pass nextOffset to continue. For keyword, classification, place, or object-date filters use met_search_collections instead. A list is cached for up to an hour, so a record revised within the last hour may not appear yet.","input":[{"n":"departmentId","t":"integer"},{"n":"updatedSince","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"total","t":"integer"},{"n":"objectIDs","t":"array<integer>"},{"n":"returned","t":"integer"},{"n":"offset","t":"integer"},{"n":"remaining","t":"integer"},{"n":"truncated","t":"boolean"},{"n":"nextOffset","t":"integer"},{"n":"notice","t":"string"},{"n":"effectiveQuery","t":"string"},{"n":"error","t":"object"}]},{"name":"met_get_object","server":60,"verb":"get","cls":"get","resolver":false,"title":"Get Met Objects","description":"Fetch full records for one or more Met Museum object IDs. Fetches up to 20 distinct IDs per call; a list of up to 500 (a full search or list page) is accepted, and the distinct IDs past the first 20 come back unrequested in remainingIDs for a follow-up call. Returns partial success — a single 404 does not fail the whole batch; per-ID failures are reported separately. Object IDs come from met_search_collections (keyword search) or met_list_objects (browse by department or update date). Non-public-domain objects return empty image URLs. The constituents array is null for anonymous or unattributed works; tags and measurements are null when the Met records none. Records are returned whole and never truncated, so a batch of unusually large records may return fewer than requested — any that did not fit are listed in deferred[] with their sizes, to be re-requested in a follow-up call. Set includeImages to also receive the CC0 images of up to 3 returned records as image content a vision-capable model can look at.","input":[{"n":"objectIDs","t":"array<integer>","r":true},{"n":"includeImages","t":"boolean"}],"output":[{"n":"objects","t":"array<object>"},{"n":"failed","t":"array<object>"},{"n":"deferred","t":"array<object>"},{"n":"remainingIDs","t":"array<integer>"},{"n":"images","t":"array<object>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"cwe_list_reference","server":61,"verb":"list","cls":"list","resolver":false,"title":"List CWE and CAPEC reference values","description":"List loaded CWE/CAPEC vocabulary, every CWE view, workflow guidance, or catalog versions and refresh health. Filter requires every whitespace-separated token in an item label, each at a word start or camelCase hump (script finds JavaScript). Tokens of at least four Unicode letters also match after exactly one un or mis prefix at a word start; spelling coincidences can match. Omit filter to browse. Platforms distinguishes example code languages from platform names and classes. Follow nextCursor for complete lists; limits above 100 are capped with disclosure.","input":[{"n":"topic","t":"enum(8)","r":true},{"n":"filter","t":"string"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"topic","t":"enum(8)"},{"n":"items","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"provenance","t":"object"},{"n":"catalogs","t":"array<object>"},{"n":"appliedFilters","t":"object"},{"n":"notice","t":"string"},{"n":"totalCount","t":"integer"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"error","t":"object"}]},{"name":"cwe_get_weakness","server":61,"verb":"get","cls":"get","resolver":false,"title":"Retrieve CWE weaknesses","description":"Retrieve CWE weaknesses or categories by ID, such as CWE-79, CWE79, or 79. Processes up to 20 distinct IDs within a 24,000-byte response budget and discloses deferred IDs; a view, a CAPEC ID, or an item that is no ID returns in notFound with recovery guidance; only an item holding a control character other than whitespace, or a non-ID item over 150 characters, rejects the whole call. Defaults to summary, consequences, mitigations, and relations; a default section that does not fit the budget is omitted whole and named with its size and a re-call (kind partial). Summary carries recorded alternate terms such as XSS, ordinalities (Primary, Resultant, Indirect), and background details; the notes section, outside the defaults, returns every note MITRE records, such as Relationship, Maintenance, Terminology, and Research Gap notes. Explicit sections remain complete, including one oversized record with disclosure; an empty sections array requests an outline. exampleLanguage, exampleOffset, and exampleLimit select a complete source-ordered page of section examples: with sections omitted, setting any of them to a non-default value adds examples after the defaults, filled last and outlined with its page size and a re-call when it does not fit; explicit sections without examples ignore them, and guidance gives the re-call that adds examples. Categories are organizational entries, not vulnerability root causes.","input":[{"n":"ids","t":"array<string>","r":true},{"n":"sections","t":"array<enum(10)>"},{"n":"exampleLanguage","t":"string"},{"n":"exampleOffset","t":"integer"},{"n":"exampleLimit","t":"integer"}],"output":[{"n":"entries","t":"array<object>"},{"n":"notFound","t":"array<object>"},{"n":"deferredIds","t":"array<string>"},{"n":"guidance","t":"string"},{"n":"provenance","t":"object"},{"n":"totalCount","t":"integer"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"cwe_get_attack_pattern","server":61,"verb":"get","cls":"get","resolver":false,"title":"Retrieve CAPEC attack patterns","description":"Retrieve CAPEC attack patterns, categories, and views by ID, such as CAPEC-66, CAPEC66, or 66, including Deprecated and Obsolete records; each entry’s type says which. Processes up to 20 distinct IDs within a 24,000-byte response budget and discloses deferred IDs; a CWE ID or an item that is no ID returns in notFound with recovery guidance; only an item holding a control character other than whitespace, or a non-ID item over 150 characters, rejects the whole call. Patterns default to summary, prerequisites, execution, mitigations, and mappings; categories and views default to summary (the category summary or view objective) and relations (members in source order, or a filter-defined view’s source XPath filterDefinition). Views CAPEC-1000 (Mechanisms of Attack) and CAPEC-3000 (Domains of Attack) are entry points for browsing patterns by category. A default section that does not fit the budget is omitted whole and named with its size and a re-call (kind partial). The notes section, outside the defaults, returns recorded MITRE notes. Explicit sections remain complete, including one oversized record with disclosure; an empty array requests an outline. Recorded CWE and ATT&CK mappings are incomplete and do not establish current ATT&CK validation.","input":[{"n":"ids","t":"array<string>","r":true},{"n":"sections","t":"array<enum(10)>"}],"output":[{"n":"entries","t":"array<object>"},{"n":"notFound","t":"array<object>"},{"n":"deferredIds","t":"array<string>"},{"n":"guidance","t":"string"},{"n":"provenance","t":"object"},{"n":"totalCount","t":"integer"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"cwe_search_weaknesses","server":61,"verb":"search","cls":"search","resolver":false,"title":"Search CWE weaknesses","description":"Search CWE weaknesses by all text tokens, exact platform or consequence vocabulary, abstraction, status, mapping usage, view membership, a recorded taxonomy mapping (taxonomy name or entry ID such as CERT C ARR30-C), or a CVE that MITRE cites as an observed example. Text tokens match at word starts or camelCase humps; tokens of at least four Unicode letters also match after exactly one un or mis prefix at a word start (trusted finds untrusted), with possible spelling coincidences. Search other compounds such as deserialization as written; text never matches an entry ID or CVE. Omit filters to browse; categories are excluded. Each result carries MITRE’s mapping usage, which says whether the entry may be used to map a vulnerability, and, under a taxonomy or CVE filter, every mapping or observed example that matched. Results order by all tokens in the name or in one recorded alternate term such as XSS, then all in the description, then any other match, then numeric ID. Description previews contain the first sentence; use cwe_get_weakness for complete sections. Follow nextCursor for remaining matches.","input":[{"n":"filter","t":"string"},{"n":"language","t":"string"},{"n":"technology","t":"string"},{"n":"abstraction","t":"enum(5)"},{"n":"consequenceImpact","t":"string"},{"n":"status","t":"string"},{"n":"mappingUsage","t":"string"},{"n":"taxonomyName","t":"string"},{"n":"taxonomyEntryId","t":"string"},{"n":"observedCveId","t":"string"},{"n":"viewId","t":"string"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"results","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"provenance","t":"object"},{"n":"appliedFilters","t":"object"},{"n":"notice","t":"string"},{"n":"totalCount","t":"integer"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"error","t":"object"}]},{"name":"cwe_search_attack_patterns","server":61,"verb":"search","cls":"search","resolver":false,"title":"Search CAPEC attack patterns","description":"Search CAPEC attack patterns by every whitespace-separated text token, recorded CWE or ATT&CK mapping, abstraction, severity, or likelihood. Text tokens match at word starts or camelCase humps; tokens of at least four Unicode letters also match after exactly one un or mis prefix at a word start (config finds misconfiguration), with possible spelling coincidences. Search other compounds such as deserialization as written. Parent ATT&CK techniques include recorded subtechniques; CWE mappings are exact without hierarchy expansion. Omit filters to browse. Deprecated and Obsolete patterns are excluded by default. Mappings are incomplete and do not validate current ATT&CK coverage. Results order by all tokens in the name or in one recorded alternate term such as MITM, then all in the description, then any other match, then numeric ID; use cwe_get_attack_pattern for complete sections and follow nextCursor for remaining matches.","input":[{"n":"filter","t":"string"},{"n":"cweId","t":"string"},{"n":"attackTechniqueId","t":"string"},{"n":"abstraction","t":"enum(3)"},{"n":"severity","t":"string"},{"n":"likelihood","t":"string"},{"n":"includeInactive","t":"boolean"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"results","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"provenance","t":"object"},{"n":"appliedFilters","t":"object"},{"n":"notice","t":"string"},{"n":"totalCount","t":"integer"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"error","t":"object"}]},{"name":"cwe_get_view","server":61,"verb":"get","cls":"get","resolver":false,"title":"Get CWE view","description":"Read a CWE view objective, audience, status, source filter, recorded notes, and direct members in published order. Navigation views list top-level members rather than every descendant; use cwe_get_hierarchy for navigation or cwe_search_weaknesses with viewId for weakness membership closure. A filter-defined (Implicit) view lists no members: its filterDefinition is the source XPath that defines membership, and cwe_search_weaknesses with its viewId returns the weaknesses that filter selects; when the filter has a part this server does not evaluate, the guidance says so and that search returns none with a disclosure. Unknown and non-view IDs return a structured miss. Follow nextCursor for remaining direct members.","input":[{"n":"id","t":"string","r":true},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"found","t":"boolean"},{"n":"id","t":"string"},{"n":"reason","t":"enum(2)"},{"n":"name","t":"string"},{"n":"type","t":"string"},{"n":"status","t":"string"},{"n":"objective","t":"string"},{"n":"sourceUrl","t":"string"},{"n":"audience","t":"array<object>"},{"n":"filterDefinition","t":"string"},{"n":"notes","t":"array<object>"},{"n":"members","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"provenance","t":"object"},{"n":"guidance","t":"string"},{"n":"appliedFilters","t":"object"},{"n":"notice","t":"string"},{"n":"totalCount","t":"integer"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"error","t":"object"}]},{"name":"cwe_get_hierarchy","server":61,"verb":"get","cls":"get","resolver":false,"title":"Get CWE hierarchy","description":"Navigate live CWE parents, children, ancestors, or descendants for a weakness, category, or view. Discover IDs with cwe_search_weaknesses or cwe_list_reference topic views. The default view is 1000; set viewId all for every view. primaryOnly applies only to ancestors. Edges point from parent to child and retain view identity; follow nextCursor for more edges. Continuations re-fetch the traversal and reject changed topology. Empty relations are successful; upstream failures remain errors. Node names come from the loaded catalog and may lag live IDs.","input":[{"n":"id","t":"string","r":true},{"n":"direction","t":"enum(4)","r":true},{"n":"viewId","t":"string"},{"n":"primaryOnly","t":"boolean"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"found","t":"boolean"},{"n":"id","t":"string"},{"n":"direction","t":"enum(4)"},{"n":"viewId","t":"string"},{"n":"primaryOnly","t":"boolean"},{"n":"nodes","t":"array<object>"},{"n":"edges","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"retrievedAt","t":"string"},{"n":"hierarchyFingerprint","t":"string"},{"n":"provenance","t":"object"},{"n":"guidance","t":"string"},{"n":"appliedFilters","t":"object"},{"n":"totalCount","t":"integer"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"error","t":"object"}]},{"name":"musicbrainz_search_entities","server":62,"verb":"search","cls":"search","resolver":false,"title":"musicbrainz-mcp-server: search entities","description":"Full-text search across a MusicBrainz entity type (artist, release-group, release, recording, work, label) using a Lucene query string. Returns ranked matches with MBID, name/title, disambiguation, subtype where applicable, release status, and a 0–100 relevance score (100 = exact). Release rows use status; other entity subtypes use type. Starting point when resolving a name to an MBID — chain the returned MBID into the matching musicbrainz_get_* tool. Results are in MusicBrainz score-descending order. Supports field-scoped Lucene syntax (e.g. `artist:radiohead AND country:GB`).","input":[{"n":"entityType","t":"enum(6)","r":true},{"n":"query","t":"string","r":true},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"entityType","t":"string"},{"n":"offset","t":"number"},{"n":"results","t":"array<object>"},{"n":"effectiveQuery","t":"string"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"musicbrainz_get_artist","server":62,"verb":"get","cls":"get","resolver":false,"title":"musicbrainz-mcp-server: get artist","description":"Artist profile by MBID: type, country, life span, gender, area, aliases, tags/genres, release-groups, band-membership / collaboration relationships, and external links. Release-groups embed one upstream page (25); relationships are not capped. For the complete release-group list, call musicbrainz_browse_entities with target_type=release-group and link.artist.","input":[{"n":"mbid","t":"string","r":true},{"n":"inc_release_groups","t":"boolean"},{"n":"inc_relationships","t":"boolean"}],"output":[{"n":"mbid","t":"string"},{"n":"name","t":"string"},{"n":"sortName","t":"string"},{"n":"disambiguation","t":"string"},{"n":"type","t":"string"},{"n":"gender","t":"string"},{"n":"country","t":"string"},{"n":"area","t":"string"},{"n":"lifeSpan","t":"object"},{"n":"aliases","t":"array<object>"},{"n":"tags","t":"array<object>"},{"n":"releaseGroups","t":"array<object>"},{"n":"relationships","t":"array<object>"},{"n":"externalLinks","t":"array<object>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"musicbrainz_get_release_group","server":62,"verb":"get","cls":"get","resolver":false,"title":"musicbrainz-mcp-server: get release group","description":"Release-group (\"the album\" above specific pressings) by MBID: primary type (Album/Single/EP) and secondary types (Live/Compilation), first-release date, artist credit, the list of releases (editions), tags/genres, and cover-art availability from the Cover Art Archive (image count and front/back flags for the release-group's representative release — the art musicbrainz_get_cover_art returns; use that tool for the image URLs). The embedded releases list is capped at one page (25); for the complete set of editions, call musicbrainz_browse_entities with target_type=release and link.release-group. For a specific edition's tracklist, take a release MBID from the releases list and call musicbrainz_get_release.","input":[{"n":"mbid","t":"string","r":true}],"output":[{"n":"mbid","t":"string"},{"n":"title","t":"string"},{"n":"disambiguation","t":"string"},{"n":"primaryType","t":"string"},{"n":"secondaryTypes","t":"array<string>"},{"n":"firstReleaseDate","t":"string"},{"n":"artistCredit","t":"array<object>"},{"n":"artistCreditString","t":"string"},{"n":"releases","t":"array<object>"},{"n":"tags","t":"array<object>"},{"n":"coverArt","t":"object"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"musicbrainz_get_release","server":62,"verb":"get","cls":"get","resolver":false,"title":"musicbrainz-mcp-server: get release","description":"One edition by MBID: ordered media with tracks, lengths and recording MBIDs, label + catalog number, barcode, country, release date, packaging, text representation, and a cover-art availability stub. media_offset (default 0) and media_limit (default 20, no maximum) select whole media after normalization; mediaTotal and trackTotal describe the full release. Follow the notice to retrieve remaining media. The release resource retains the complete raw tracklist. Track lengths are m:ss. For image URLs, call musicbrainz_get_cover_art.","input":[{"n":"mbid","t":"string","r":true},{"n":"media_offset","t":"integer"},{"n":"media_limit","t":"integer"}],"output":[{"n":"mbid","t":"string"},{"n":"title","t":"string"},{"n":"disambiguation","t":"string"},{"n":"artistCredit","t":"array<object>"},{"n":"artistCreditString","t":"string"},{"n":"status","t":"string"},{"n":"date","t":"string"},{"n":"country","t":"string"},{"n":"barcode","t":"string"},{"n":"packaging","t":"string"},{"n":"language","t":"string"},{"n":"script","t":"string"},{"n":"releaseGroupId","t":"string"},{"n":"labelInfo","t":"array<object>"},{"n":"mediaOffset","t":"number"},{"n":"mediaTotal","t":"number"},{"n":"trackTotal","t":"number"},{"n":"media","t":"array<object>"},{"n":"coverArt","t":"object"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"musicbrainz_get_recording","server":62,"verb":"get","cls":"get","resolver":false,"title":"musicbrainz-mcp-server: get recording","description":"Recording (a specific performance, distinct from the abstract work) by MBID: length, artist credits, ISRCs, one upstream page of release appearances with completeness metadata, work relationships, and performer/production credits with attributes and dates. Relationships are not capped. Enumerate releases with musicbrainz_browse_entities (target_type=release, link.recording, offset=0); embedded and browse order may differ. Browse recording by work enumerates recording entities; this tool supplies their work relationship details.","input":[{"n":"mbid","t":"string","r":true},{"n":"inc_relationships","t":"boolean"}],"output":[{"n":"mbid","t":"string"},{"n":"title","t":"string"},{"n":"disambiguation","t":"string"},{"n":"length","t":"string"},{"n":"artistCredit","t":"array<object>"},{"n":"artistCreditString","t":"string"},{"n":"isrcs","t":"array<string>"},{"n":"firstReleaseDate","t":"string"},{"n":"releases","t":"array<object>"},{"n":"releaseAppearanceSummary","t":"object"},{"n":"relationships","t":"array<object>"},{"n":"externalLinks","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"musicbrainz_get_work","server":62,"verb":"get","cls":"get","resolver":false,"title":"musicbrainz-mcp-server: get work","description":"Work (a composition, distinct from a recording) by MBID: type, languages, ISWCs, writers/composers/lyricists, movements, arrangements, aliases, tags, and external links. Follow work target MBIDs with this tool; direction, orderingKey, and targetDisambiguation distinguish parts and arrangements without reordering relationships. This server returns the first 25 recording relationships with their exact total and actual truncation disclosure, preserving all other relationships. Browse recording entities with musicbrainz_browse_entities (target_type=recording, link.work), then use musicbrainz_get_recording for work relationship attributes and dates; browse alone does not return those details.","input":[{"n":"mbid","t":"string","r":true},{"n":"inc_relationships","t":"boolean"}],"output":[{"n":"mbid","t":"string"},{"n":"title","t":"string"},{"n":"disambiguation","t":"string"},{"n":"type","t":"string"},{"n":"languages","t":"array<string>"},{"n":"iswcs","t":"array<string>"},{"n":"aliases","t":"array<object>"},{"n":"tags","t":"array<object>"},{"n":"relationships","t":"array<object>"},{"n":"externalLinks","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"musicbrainz_get_label","server":62,"verb":"get","cls":"get","resolver":false,"title":"musicbrainz-mcp-server: get label","description":"Label by MBID: type (Original Production, Reissue, Imprint, …), country, life span, label code (the LC number), area, aliases, tags, and external links (url-rels — Wikidata, Discogs, official site). A label's releases are a potentially huge linked set (a major label can have tens of thousands), so they are NOT embedded here — enumerate them with musicbrainz_browse_entities (target_type=release, link.label).","input":[{"n":"mbid","t":"string","r":true}],"output":[{"n":"mbid","t":"string"},{"n":"name","t":"string"},{"n":"sortName","t":"string"},{"n":"disambiguation","t":"string"},{"n":"type","t":"string"},{"n":"labelCode","t":"number"},{"n":"country","t":"string"},{"n":"area","t":"string"},{"n":"lifeSpan","t":"object"},{"n":"aliases","t":"array<object>"},{"n":"tags","t":"array<object>"},{"n":"externalLinks","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"musicbrainz_lookup_identifier","server":62,"verb":"lookup","cls":"resolve","resolver":true,"title":"musicbrainz-mcp-server: lookup identifier","description":"Resolve a standard identifier to MusicBrainz entities without a name search — the deterministic path when you already hold an ID. id_type=isrc → recordings (a recording-level code, often shared by several recordings); id_type=iswc → works (a composition-level code); id_type=barcode → releases (UPC/EAN digits; spaces and hyphens are ignored). ISRC and ISWC hit dedicated exact endpoints; barcode is a Lucene search filter so results are ranked (exact match scores 100). The output kind field tells you which entity type came back.","input":[{"n":"id_type","t":"enum(3)","r":true},{"n":"value","t":"string","r":true}],"output":[{"n":"result","t":"object"},{"n":"error","t":"object"}]},{"name":"musicbrainz_browse_entities","server":62,"verb":"browse","cls":"search","resolver":false,"title":"musicbrainz-mcp-server: browse entities","description":"Paginate entities linked to one parent MBID. Accepted parents by target: artist → area, recording, release, release-group, work; label → area, release; release-group → artist, release; release → area, artist, label, recording, release-group; recording → artist, release, work; work → artist. Artist release-groups and release-group editions embed one upstream page in get_* lookups; use this tool for the complete entity set. Recording browse returns identities, not performance attributes/dates or ordered release tracks: use musicbrainz_get_recording for work relationships and musicbrainz_get_release for tracks. Provide exactly one valid parent link. offset pages to any depth; totalCount is the upstream entity total. Release rows carry status, other entity subtypes use type.","input":[{"n":"target_type","t":"enum(6)","r":true},{"n":"link","t":"object","r":true},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"targetType","t":"string"},{"n":"linkType","t":"string"},{"n":"linkMbid","t":"string"},{"n":"entities","t":"array<object>"},{"n":"offset","t":"number"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"musicbrainz_get_cover_art","server":62,"verb":"get","cls":"get","resolver":false,"title":"musicbrainz-mcp-server: get cover art","description":"Cover Art Archive images for a release or release-group MBID: front/back flags, image types, full-resolution URLs, and 250/500/1200px thumbnail URLs. limit defaults to 25 and clamps above 100; offset defaults to 0. Pages retain archive order, totalCount counts all images, and hasArt describes the full archive even on an empty page. Follow the notice for the next offset. No art is a successful empty result; an unknown MBID fails with entity_not_found after a bounded MusicBrainz check. A release-group resolves to a representative release's art. URLs are linked, never rehosted; image copyright stays with rights holders.","input":[{"n":"mbid","t":"string","r":true},{"n":"entity_type","t":"enum(2)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"mbid","t":"string"},{"n":"entityType","t":"string"},{"n":"offset","t":"number"},{"n":"representativeRelease","t":"string"},{"n":"images","t":"array<object>"},{"n":"hasArt","t":"boolean"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"nasa_power_get_timeseries","server":63,"verb":"get","cls":"get","resolver":false,"title":"Get NASA POWER timeseries","description":"Retrieve complete hourly, daily or monthly observations at latitude/longitude. Hourly and daily require startDate/endDate; monthly requires startYear/endYear. Use nasa_power_search_parameters for codes and nasa_power_list_reference for presets. Large results return a full-table canvas handle and preview.","input":[],"output":[{"n":"request","t":"object"},{"n":"metadata","t":"object"},{"n":"parameters","t":"array<object>"},{"n":"expansions","t":"object"},{"n":"omittedParameters","t":"array<object>"},{"n":"summaries","t":"array<object>"},{"n":"rows","t":"array<object>"},{"n":"rowCount","t":"integer"},{"n":"dataset","t":"object"},{"n":"error","t":"object"}]},{"name":"nasa_power_get_climatology","server":63,"verb":"get","cls":"get","resolver":false,"title":"Get NASA POWER climatology","description":"Retrieve complete monthly and annual climatology at latitude/longitude. Optionally supply both startYear and endYear; omitted years use the source product range. Use nasa_power_list_reference for presets and tilted solar aliases. All returned records remain inline, including orientation text.","input":[{"n":"community","t":"enum(3)"},{"n":"units","t":"enum(2)"},{"n":"timeStandard","t":"enum(2)"},{"n":"latitude","t":"number","r":true},{"n":"longitude","t":"number","r":true},{"n":"selection","t":"object"},{"n":"siteElevation","t":"number"},{"n":"windElevation","t":"number"},{"n":"windSurface","t":"enum(19)"},{"n":"startYear","t":"integer"},{"n":"endYear","t":"integer"}],"output":[{"n":"request","t":"object"},{"n":"metadata","t":"object"},{"n":"parameters","t":"array<object>"},{"n":"expansions","t":"object"},{"n":"omittedParameters","t":"array<object>"},{"n":"summaries","t":"array<object>"},{"n":"rows","t":"array<object>"},{"n":"rowCount","t":"integer"},{"n":"dataset","t":"object"},{"n":"error","t":"object"}]},{"name":"nasa_power_get_region","server":63,"verb":"get","cls":"get","resolver":false,"title":"Get NASA POWER region","description":"Retrieve one parameter over ordered latitude/longitude bounds spanning 2–10 degrees per axis, at daily, monthly or climatology resolution. Split antimeridian regions into separate calls. Returns cell identities and separate per-period equal-weight cell statistics, not area-weighted estimates. Oversized results stage every row with a preview and canvas handle.","input":[],"output":[{"n":"metadata","t":"object"},{"n":"parameters","t":"array<object>"},{"n":"expansions","t":"object"},{"n":"omittedParameters","t":"array<object>"},{"n":"rows","t":"array<object>"},{"n":"request","t":"object"},{"n":"cellCount","t":"number"},{"n":"summaries","t":"array<object>"},{"n":"rowCount","t":"integer"},{"n":"dataset","t":"object"},{"n":"error","t":"object"}]},{"name":"nasa_power_compare_locations","server":63,"verb":"compare","cls":"analyze","resolver":false,"title":"Compare NASA POWER locations","description":"Compare 2–10 labeled coordinates with a shared parameter selection and window; climatology is the default resolution. Duplicate labels retain separate input-position identities. Returns per-site provenance and valid-only annual/seasonal summaries; operational site failures preserve successes. Optional numeric sort uses observation means, monthly annual records or climatology ANN, with nulls last and stable ties; differing or unknown units cannot sort. Oversized observations and summaries stage completely; summaryDatasets handles and summaryIndex preserve complete ordered summary arrays.","input":[],"output":[{"n":"request","t":"object"},{"n":"metadata","t":"object"},{"n":"parameters","t":"array<object>"},{"n":"locations","t":"array<object>"},{"n":"failed","t":"array<object>"},{"n":"partial","t":"boolean"},{"n":"summaries","t":"array<object>"},{"n":"comparable","t":"boolean"},{"n":"sort","t":"object"},{"n":"possibleSharedGridCell","t":"array<array<string>>"},{"n":"rows","t":"array<object>"},{"n":"rowCount","t":"integer"},{"n":"dataset","t":"object"},{"n":"summaryDatasets","t":"object"},{"n":"error","t":"object"}]},{"name":"nasa_power_search_parameters","server":63,"verb":"search","cls":"search","resolver":false,"title":"Search NASA POWER parameters","description":"Find parameter codes supported by a community and temporalResolution. Every whitespace-separated filter token must match code, name or definition, ignoring case. Filtering covers the complete dictionary before sorted pagination. Blank filter browses all codes; pass returned codes to a producing tool.","input":[{"n":"community","t":"enum(3)"},{"n":"temporalResolution","t":"enum(4)"},{"n":"filter","t":"string"},{"n":"offset","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"community","t":"enum(3)"},{"n":"temporalResolution","t":"enum(4)"},{"n":"filter","t":"string"},{"n":"offset","t":"number"},{"n":"limit","t":"number"},{"n":"total","t":"number"},{"n":"hasMore","t":"boolean"},{"n":"truncated","t":"boolean"},{"n":"entries","t":"array<object>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"nasa_power_list_reference","server":63,"verb":"list","cls":"list","resolver":false,"title":"List NASA POWER reference","description":"Explain exact presets, communities and units, source coverage, missing values, wind corrections or current dataframe availability. Choose topic presets before a producing call, or coverage when revising a date window. Reference entries include public documentation and verification dates.","input":[{"n":"topic","t":"enum(6)"}],"output":[{"n":"topic","t":"enum(6)"},{"n":"verifiedOn","t":"string"},{"n":"documentationUrls","t":"array<string>"},{"n":"entries","t":"array<object>"},{"n":"guidance","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"nasa_power_dataframe_describe","server":63,"verb":"dataframe","cls":"query","resolver":false,"title":"Describe staged POWER tables","description":"Inspect table schemas, physical units and original scientific provenance within a canvas_id returned by a producing POWER tool. Tokens are process-local capabilities; only the supplied canvas is inspected.","input":[{"n":"canvas_id","t":"string","r":true},{"n":"table","t":"string"}],"output":[{"n":"canvas_id","t":"string"},{"n":"expiresAt","t":"string"},{"n":"tables","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"nasa_power_dataframe_query","server":63,"verb":"dataframe","cls":"query","resolver":false,"title":"Query staged POWER observations","description":"Run one read-only SELECT over tables in an explicitly supplied canvas_id. Inspect names and units with nasa_power_dataframe_describe. External files, imports, writes and system catalogs are refused. Returns at most 1,000 rows and 40,000 JSON characters; truncated rowCount counts only materialized rows.","input":[{"n":"canvas_id","t":"string","r":true},{"n":"sql","t":"string","r":true},{"n":"rowLimit","t":"integer"}],"output":[{"n":"canvas_id","t":"string"},{"n":"columns","t":"array<string>"},{"n":"rows","t":"array<object>"},{"n":"rowCount","t":"number"},{"n":"shownCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"countSemantics","t":"enum(2)"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"nps_find_parks","server":64,"verb":"find","cls":"search","resolver":false,"title":"national-parks-mcp-server: find parks","description":"Resolve a place name, US state, or free-text query to National Park Service parks — the required first step before the detail tools. Returns each park's parkCode (the key nps_get_park, nps_get_alerts, nps_find_campgrounds, nps_get_activities, and nps_find_events all use) plus a compact trip-planning summary (designation, states, description, coordinates, headline activities, entrance fee, NPS page). Coverage is US NPS sites only — national parks, monuments, historic sites, seashores — not state parks and not Forest Service or BLM land.","input":[{"n":"query","t":"string"},{"n":"stateCode","t":"string"},{"n":"activity","t":"string"},{"n":"limit","t":"integer"},{"n":"start","t":"integer"}],"output":[{"n":"parks","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"appliedFilters","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"nps_get_park","server":64,"verb":"get","cls":"get","resolver":false,"title":"national-parks-mcp-server: get park detail","description":"Full trip-planning detail for one or more parks by parkCode: description, activities and topics, entrance fees and passes, operating hours by area/season, contacts, directions, a free-text weather overview, representative images, and the NPS page for everything else. Get codes from nps_find_parks. Accepts up to ten codes per call. Use the fields parameter to return only the sections you need.","input":[{"n":"parkCode","t":"array<string>","r":true},{"n":"fields","t":"array<enum(7)>"}],"output":[{"n":"parks","t":"array<object>"},{"n":"requestedCount","t":"number"},{"n":"returnedCount","t":"number"},{"n":"missingCodes","t":"array<string>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"nps_get_alerts","server":64,"verb":"get","cls":"get","resolver":false,"title":"national-parks-mcp-server: get alerts","description":"Current alerts for a park or a whole state — closures, hazards, caution notices, and information — with category and recency surfaced first so \"is anything closed at Glacier right now?\" is answered at a glance. Get park codes from nps_find_parks, or pass a stateCode for a statewide \"what's closed\" sweep. Returns most-recent-first. An empty result with totalCount 0 means no active alerts match the request (with category or query set, alerts outside that filter may still be active); an empty page with a non-zero totalCount means start ran past the end of the matches. Closures and road conditions change daily.","input":[{"n":"parkCode","t":"string"},{"n":"stateCode","t":"string"},{"n":"category","t":"enum(4)"},{"n":"query","t":"string"},{"n":"limit","t":"integer"},{"n":"start","t":"integer"}],"output":[{"n":"alerts","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"categoryBreakdown","t":"string"},{"n":"appliedFilters","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"nps_find_campgrounds","server":64,"verb":"find","cls":"search","resolver":false,"title":"national-parks-mcp-server: find campgrounds","description":"Campgrounds at a park or across a state: amenities (potable water, showers, RV dump station, toilets, trash collection, RV access), reservable vs. first-come-first-served site counts, reservation guidance and booking URL, accessibility, and fees — answering \"where can I camp at Zion, and can I get an RV hookup?\" Get park codes from nps_find_parks. Some parks list lodging or backcountry permits instead of NPS-managed campgrounds; an empty result is not an error.","input":[{"n":"parkCode","t":"string"},{"n":"stateCode","t":"string"},{"n":"query","t":"string"},{"n":"limit","t":"integer"},{"n":"start","t":"integer"}],"output":[{"n":"campgrounds","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"appliedFilters","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"nps_get_activities","server":64,"verb":"get","cls":"get","resolver":false,"title":"national-parks-mcp-server: get activities","description":"Curated things to do and points of interest at a park — title, description, time commitment, location, accessibility, and fee/pet/reservation flags — answering \"what should I do at Acadia?\" Covers the NPS editorially-curated activity list (distinct from a park's raw activity tags in nps_get_park). Accepts a single 4-letter park code or a single two-letter state code, and at least one is required. Not every park has a curated list; an empty result is not an error.","input":[{"n":"parkCode","t":"string"},{"n":"stateCode","t":"string"},{"n":"query","t":"string"},{"n":"limit","t":"integer"},{"n":"start","t":"integer"}],"output":[{"n":"activities","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"appliedFilters","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"nps_find_events","server":64,"verb":"find","cls":"search","resolver":false,"title":"national-parks-mcp-server: find events","description":"Scheduled events at a park within a date range — ranger programs, festivals, tours, interpretive events — answering \"what's happening at Yellowstone this weekend?\" with title, dates and times, location, category, fee, and registration links. Get park codes from nps_find_parks. Paginates by page number, not offset. Many parks list few or no events; an empty result is not an error.","input":[{"n":"parkCode","t":"string"},{"n":"stateCode","t":"string"},{"n":"dateStart","t":"string"},{"n":"dateEnd","t":"string"},{"n":"query","t":"string"},{"n":"pageSize","t":"integer"},{"n":"pageNumber","t":"integer"}],"output":[{"n":"events","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"appliedFilters","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"nhtsa_get_vehicle_safety","server":65,"verb":"get","cls":"get","resolver":false,"title":"Nhtsa Get Vehicle Safety","description":"Get a comprehensive safety profile for a vehicle. Combines NCAP crash test ratings, recalls, and complaint summary into a single response. Use as the default when asked about vehicle safety, reliability, or purchase decisions.","input":[{"n":"make","t":"string","r":true},{"n":"model","t":"string","r":true},{"n":"modelYear","t":"integer","r":true}],"output":[{"n":"safetyRatings","t":"array<object>"},{"n":"recalls","t":"array<object>"},{"n":"complaintSummary","t":"object"},{"n":"sectionStatus","t":"object"},{"n":"warnings","t":"array<string>"},{"n":"effectiveQuery","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"nhtsa_search_recalls","server":65,"verb":"search","cls":"search","resolver":false,"title":"Nhtsa Search Recalls","description":"Search recall campaigns by vehicle or campaign number. Use for specific recall lookups, recall history for a vehicle, or looking up a known campaign number.","input":[{"n":"campaignNumber","t":"string"},{"n":"make","t":"string"},{"n":"model","t":"string"},{"n":"modelYear","t":"integer"},{"n":"dateRange","t":"object"}],"output":[{"n":"recalls","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"nhtsa_search_complaints","server":65,"verb":"search","cls":"search","resolver":false,"title":"Nhtsa Search Complaints","description":"Search consumer safety complaints filed with NHTSA for a specific vehicle. Returns a component breakdown over all matching complaints plus a paginated slice of the most recent complaints. Use for common problems, failure patterns, or owner-reported issues.","input":[{"n":"make","t":"string","r":true},{"n":"model","t":"string","r":true},{"n":"modelYear","t":"integer","r":true},{"n":"component","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"totalCount","t":"number"},{"n":"returned","t":"number"},{"n":"offset","t":"number"},{"n":"limit","t":"number"},{"n":"componentBreakdown","t":"array<object>"},{"n":"complaints","t":"array<object>"},{"n":"effectiveQuery","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"nhtsa_get_safety_ratings","server":65,"verb":"get","cls":"get","resolver":false,"title":"Nhtsa Get Safety Ratings","description":"Get NCAP crash test ratings and ADAS feature availability for a vehicle. Use when the user specifically wants crash test stars, rollover risk, or wants to compare safety features across vehicles. NCAP data available from 1990+, best coverage for 2011+.","input":[{"n":"make","t":"string"},{"n":"model","t":"string"},{"n":"modelYear","t":"integer"},{"n":"vehicleId","t":"number"}],"output":[{"n":"ratings","t":"array<object>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"nhtsa_decode_vin","server":65,"verb":"decode","cls":"resolve","resolver":true,"title":"Nhtsa Decode Vin","description":"Decode a Vehicle Identification Number to extract make, model, year, body type, engine, safety equipment, and manufacturing details. Pass a single 17-character VIN string, or an array of up to 50 VINs for batch decode. Partial VINs accepted — use * for unknown positions.","input":[{"n":"vin","t":"string|array<string>","r":true},{"n":"modelYear","t":"integer"}],"output":[{"n":"vehicles","t":"array<object>"},{"n":"effectiveQuery","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"nhtsa_search_investigations","server":65,"verb":"search","cls":"search","resolver":false,"title":"Nhtsa Search Investigations","description":"Search NHTSA defect investigations from the ODI flat file — covering Preliminary Evaluations (PE), Engineering Analyses (EA), Defect Petitions (DP), Recall Queries (RQ), Audit Queries (AQ), and additional ODI types. make, model, and component are structured filters against the investigation record's vehicle associations. All filters are ANDed. Use nhtsaId to fetch one investigation by its exact ID — including the investigationId nhtsa_search_recalls returns for a campaign. Investigations may link to a resulting recall campaign via recallCampaign.","input":[{"n":"nhtsaId","t":"string"},{"n":"query","t":"string"},{"n":"make","t":"string"},{"n":"model","t":"string"},{"n":"component","t":"string"},{"n":"investigationType","t":"string"},{"n":"status","t":"enum(2)"},{"n":"openDateRange","t":"object"},{"n":"closeDateRange","t":"object"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"totalCount","t":"number"},{"n":"returned","t":"number"},{"n":"offset","t":"number"},{"n":"limit","t":"number"},{"n":"investigations","t":"array<object>"},{"n":"effectiveQuery","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"nhtsa_lookup_vehicles","server":65,"verb":"lookup","cls":"get","resolver":false,"title":"Nhtsa Lookup Vehicles","description":"Look up valid makes, models, and vehicle types in NHTSA's database. Use to resolve ambiguous vehicle names, find correct make/model spelling, or discover what models a manufacturer produces.","input":[{"n":"operation","t":"enum(4)","r":true},{"n":"make","t":"string"},{"n":"modelYear","t":"integer"},{"n":"manufacturer","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"operation","t":"string"},{"n":"totalCount","t":"number"},{"n":"returned","t":"number"},{"n":"offset","t":"number"},{"n":"limit","t":"number"},{"n":"makes","t":"array<object>"},{"n":"models","t":"array<object>"},{"n":"vehicleTypes","t":"array<object>"},{"n":"manufacturers","t":"array<object>"},{"n":"effectiveQuery","t":"string"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"nvd_get_cve","server":66,"verb":"get","cls":"get","resolver":false,"title":"Get CVE Details","description":"Fetch one or more CVEs by ID from the NIST National Vulnerability Database. Returns CVSS scores across all available versions (v2.0, v3.0, v3.1, v4.0), CWE weakness classifications, affected CPE configurations, CISA KEV fields, and references. Up to 100 CVE IDs per call. For bulk lookups of more than 10 IDs, use brief: true — full records for 100 CVEs can exceed 1MB and exhaust context budgets.","input":[{"n":"cveIds","t":"string|array<string>","r":true},{"n":"brief","t":"boolean"},{"n":"includeReferences","t":"boolean"},{"n":"allLanguages","t":"boolean"}],"output":[{"n":"brief","t":"boolean"},{"n":"cves","t":"array<object>"},{"n":"requested","t":"number"},{"n":"returned","t":"number"},{"n":"missingIds","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"nvd_search_cves","server":66,"verb":"search","cls":"search","resolver":false,"title":"Search CVEs","description":"Search CVEs by keyword, severity, CWE, date range, or CISA KEV status. The primary discovery tool for vulnerability surveillance and triage workflows. pubDays and lastModDays are convenience shorthands that expand to date pairs; values over 120 days are clamped to the NVD maximum and reported in the response enrichment. Returns brief summaries — call nvd_get_cve for full detail on specific IDs. At least one filter is recommended; omitting all filters returns CVEs in default NVD index order (oldest first by CVE ID).","input":[{"n":"keyword","t":"string"},{"n":"exactPhrase","t":"boolean"},{"n":"severity","t":"enum(4)"},{"n":"severityVersion","t":"enum(3)"},{"n":"cweId","t":"string"},{"n":"pubDays","t":"integer"},{"n":"lastModDays","t":"integer"},{"n":"pubStartDate","t":"string"},{"n":"pubEndDate","t":"string"},{"n":"lastModStartDate","t":"string"},{"n":"lastModEndDate","t":"string"},{"n":"kevOnly","t":"boolean"},{"n":"noRejected","t":"boolean"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"cves","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"returned","t":"number"},{"n":"offset","t":"number"},{"n":"datesClamped","t":"array<object>"},{"n":"filtersApplied","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"nvd_audit_cpe","server":66,"verb":"audit","cls":"analyze","resolver":false,"title":"Audit CPE for Vulnerabilities","description":"Find all CVEs affecting a specific product and version using CPE (Common Platform Enumeration). Requires either an exact CPE name (cpeName) or a partial match string (virtualMatchString) with optional version range bounds. With cpeName, NVD scopes results to configurations where the product is directly vulnerable, not merely referenced as a dependency. Use nvd_search_cpes first to resolve the correct CPE string for a product. Returns full CVE records.","input":[{"n":"cpeName","t":"string"},{"n":"virtualMatchString","t":"string"},{"n":"versionStart","t":"string"},{"n":"versionStartType","t":"enum(2)"},{"n":"versionEnd","t":"string"},{"n":"versionEndType","t":"enum(2)"},{"n":"severityMin","t":"enum(4)"},{"n":"allLanguages","t":"boolean"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"cves","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"returned","t":"number"},{"n":"offset","t":"number"},{"n":"auditTarget","t":"string"},{"n":"severityMin","t":"string"},{"n":"filteredCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"nvd_search_cpes","server":66,"verb":"search","cls":"search","resolver":false,"title":"Search CPE Dictionary","description":"Search the NVD CPE (Common Platform Enumeration) dictionary by product keyword or partial match string. Returns CPE names, human-readable titles, and deprecation status. Use before nvd_audit_cpe to resolve the correct CPE name for a product — CPE strings are precise identifiers (e.g., cpe:2.3:a:apache:http_server:2.4.51:*:*:*:*:*:*:*) and must match exactly to audit the right product.","input":[{"n":"keyword","t":"string"},{"n":"cpeMatchString","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"cpes","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"returned","t":"number"},{"n":"offset","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"nvd_get_cve_history","server":66,"verb":"get","cls":"get","resolver":false,"title":"Get CVE Change History","description":"Retrieve the change history for a single CVE — CVSS score revisions, reference additions, status transitions (e.g., \"Received\" → \"Analyzed\"), and CPE configuration updates. Use when tracking a CVE's escalation or investigating when a score changed. Events are returned newest-first by default; pass order=\"oldest\" for the CVE's earliest events. For the current record, call nvd_get_cve instead. The NVD history endpoint is significantly slower than other NVD endpoints, especially without an API key — set NVD_API_KEY for reliable operation.","input":[{"n":"cveId","t":"string","r":true},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"},{"n":"order","t":"enum(2)"}],"output":[{"n":"cveId","t":"string"},{"n":"changes","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"returned","t":"number"},{"n":"offset","t":"number"},{"n":"order","t":"enum(2)"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"noaa_climate_list_datasets","server":67,"verb":"list","cls":"list","resolver":false,"title":"List NOAA Climate Datasets","description":"List available NOAA CDO datasets with their IDs, names, and temporal coverage. Returns all ~11 datasets by default (no required parameters). Optionally filter to datasets that contain a specific data type, cover a location or station, or overlap a date range. Common datasets: GHCND (daily observations, 1763–present), GSOM (monthly summaries), GSOY (annual summaries), NORMAL_DLY/MLY/ANN/HLY (1981–2010 climate normals). Use this first to discover available datasets before calling noaa_climate_fetch_data.","input":[{"n":"datatypeId","t":"array<string>"},{"n":"locationId","t":"string"},{"n":"stationId","t":"string"},{"n":"startDate","t":"string"},{"n":"endDate","t":"string"},{"n":"sortField","t":"enum(5)"},{"n":"sortOrder","t":"enum(2)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"metadata","t":"object"},{"n":"totalCount","t":"number"},{"n":"exhausted","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"noaa_climate_list_data_categories","server":67,"verb":"list","cls":"list","resolver":false,"title":"List NOAA Climate Data Categories","description":"List data categories that group related data types — Temperature, Precipitation, Wind, Pressure, Sunshine, Sky cover, Weather Type, and more. Use to discover what types of measurements are available before calling noaa_climate_list_data_types. Optionally filter by dataset, location, station, or date range. There are 42 categories in total.","input":[{"n":"datasetId","t":"string"},{"n":"locationId","t":"string"},{"n":"stationId","t":"string"},{"n":"startDate","t":"string"},{"n":"endDate","t":"string"},{"n":"sortField","t":"enum(2)"},{"n":"sortOrder","t":"enum(2)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"metadata","t":"object"},{"n":"totalCount","t":"number"},{"n":"exhausted","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"noaa_climate_list_data_types","server":67,"verb":"list","cls":"list","resolver":false,"title":"List NOAA Climate Data Types","description":"List available data types (measurement labels like TMAX, TMIN, PRCP, SNOW) for a given dataset or category. Pass a datasetId to see what is measured in that dataset, or a datacategoryId (e.g., \"TEMP\") to see all temperature-related types. Hundreds of types exist across all datasets. Use this before calling noaa_climate_fetch_data when the data type IDs are unknown. Common GHCND types: TMAX (max temperature), TMIN (min temperature), PRCP (precipitation), SNOW (snowfall), SNWD (snow depth), AWND (average wind speed).","input":[{"n":"datasetId","t":"string"},{"n":"datacategoryId","t":"string"},{"n":"locationId","t":"string"},{"n":"stationId","t":"string"},{"n":"startDate","t":"string"},{"n":"endDate","t":"string"},{"n":"sortField","t":"enum(5)"},{"n":"sortOrder","t":"enum(2)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"metadata","t":"object"},{"n":"totalCount","t":"number"},{"n":"exhausted","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"noaa_climate_list_location_categories","server":67,"verb":"list","cls":"list","resolver":false,"title":"List NOAA Climate Location Categories","description":"List the location categories that scope noaa_climate_find_locations — CITY, CLIM_DIV, CLIM_REG, CNTRY, CNTY, HYD_ACC, HYD_CAT, HYD_REG, HYD_SUB, ST, US_TERR, and ZIP. Call this first when you do not know which locationCategoryId to pass, including the hydrological categories needed to reach a basin or region. There are 12 categories in total. This endpoint takes pagination and sort only — NOAA CDO ignores dataset, location, station, and date filters here, so none are offered.","input":[{"n":"sortField","t":"enum(2)"},{"n":"sortOrder","t":"enum(2)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"metadata","t":"object"},{"n":"totalCount","t":"number"},{"n":"exhausted","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"noaa_climate_find_locations","server":67,"verb":"find","cls":"search","resolver":false,"title":"Find NOAA Climate Locations","description":"Search for geographic locations by category (CITY, ST, CNTY, CNTRY, ZIP, CLIM_REG, etc.). Returns location IDs used in station search and data queries. Without locationCategoryId, returns all location types; noaa_climate_list_location_categories lists the valid values. Use locationCategoryId=ST to list US states (51 entries — small enough to retrieve completely). To find a location by name, pass nameContains alongside locationCategoryId — the CDO API has no name parameter, so this server enumerates the category and matches the substring itself. It works for any category under the size limit stated on nameContains, which is every category except ZIP; a datasetId or datacategoryId filter can bring a category back under that limit. For a category still too large, sort alphabetically with sortField=name and page through results. Location IDs: states as FIPS:37 (NC), cities as CITY:US530018 (Seattle), zip codes as ZIP:98101, countries as FIPS:US. Obtain location IDs here, then pass them to noaa_climate_find_stations or noaa_climate_fetch_data.","input":[{"n":"locationCategoryId","t":"string"},{"n":"nameContains","t":"string"},{"n":"datasetId","t":"string"},{"n":"datacategoryId","t":"string"},{"n":"startDate","t":"string"},{"n":"endDate","t":"string"},{"n":"sortField","t":"enum(5)"},{"n":"sortOrder","t":"enum(2)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"appliedNameFilter","t":"string"},{"n":"metadata","t":"object"},{"n":"totalCount","t":"number"},{"n":"exhausted","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"noaa_climate_find_stations","server":67,"verb":"find","cls":"search","resolver":false,"title":"Find NOAA Climate Stations","description":"Search for weather observation stations by location, bounding box, dataset, and data type. Returns station IDs, names, coordinates, elevation, and data coverage dates. Filter by locationId (e.g., \"FIPS:37\" for all NC stations), extent (lat/lon bounding box), datasetId, datatypeId, and date range. Station IDs returned here are used as stationId in noaa_climate_fetch_data. A station must have data for the dataset and date range you want — filter by datasetId and startDate/endDate to ensure compatibility. Common station ID formats: GHCND:USW00024233, COOP:010008.","input":[{"n":"locationId","t":"string"},{"n":"extent","t":"string"},{"n":"datasetId","t":"string"},{"n":"datatypeId","t":"array<string>"},{"n":"datacategoryId","t":"string"},{"n":"startDate","t":"string"},{"n":"endDate","t":"string"},{"n":"sortField","t":"enum(5)"},{"n":"sortOrder","t":"enum(2)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"metadata","t":"object"},{"n":"totalCount","t":"number"},{"n":"exhausted","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"noaa_climate_get_station","server":67,"verb":"get","cls":"get","resolver":false,"title":"Get NOAA Climate Station","description":"Fetch full metadata for a single weather station by its ID (e.g., \"GHCND:USW00024233\", \"COOP:010008\"). Returns name, coordinates, elevation, and the full date range for which data is available. Use when you have a station ID from noaa_climate_find_stations and want its complete details, or to verify a station before querying data.","input":[{"n":"stationId","t":"string","r":true}],"output":[{"n":"id","t":"string"},{"n":"name","t":"string"},{"n":"latitude","t":"number"},{"n":"longitude","t":"number"},{"n":"elevation","t":"number"},{"n":"elevationUnit","t":"string"},{"n":"mindate","t":"string"},{"n":"maxdate","t":"string"},{"n":"datacoverage","t":"number"},{"n":"error","t":"object"}]},{"name":"noaa_climate_fetch_data","server":67,"verb":"fetch","cls":"get","resolver":false,"title":"Fetch NOAA Climate Observation Data","description":"Fetch historical observation records from a NOAA CDO dataset for a given date range. Requires datasetId (e.g., GHCND for daily, GSOM for monthly), startDate, and endDate. Optionally scope to specific stations, locations, and data types. Date range limits per request: sub-daily, daily, and radar datasets (GHCND, PRECIP_15, PRECIP_HLY, NORMAL_DLY, NORMAL_HLY, NEXRAD2, NEXRAD3) are limited to 1 year; monthly and annual datasets (GSOM, GSOY, NORMAL_MLY, NORMAL_ANN) are limited to 10 years. A full calendar year always fits, leap years included — the limit runs to the end of the calendar month 1 (or 10) years after startDate. For climate normals (NORMAL_*), use startDate=2010-01-01 and endDate=2010-12-31 — that is the API proxy year regardless of which 30-year period is being described. Returns flat tuples of { date, datatype, station, value, attributes }. Strongly recommended: pass units=metric or units=standard — without it, GHCND values are raw tenths-of-unit integers (TMAX=256 = 25.6°C, PRCP=12 = 1.2mm). GSOM/GSOY are already scaled.","input":[{"n":"datasetId","t":"string","r":true},{"n":"startDate","t":"string","r":true},{"n":"endDate","t":"string","r":true},{"n":"stationId","t":"array<string>"},{"n":"locationId","t":"array<string>"},{"n":"datatypeId","t":"array<string>"},{"n":"units","t":"enum(2)"},{"n":"includemetadata","t":"boolean"},{"n":"sortField","t":"enum(3)"},{"n":"sortOrder","t":"enum(2)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"metadata","t":"object"},{"n":"totalCount","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"exhausted","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"noaa_climate_search_storm_events","server":67,"verb":"search","cls":"search","resolver":false,"title":"Search NOAA Storm Events","description":"Search the NCEI Storm Events Database for one calendar year — tornadoes, hail, floods, hurricanes, winter storms, heat, and every other NWS Storm Data event type, with magnitude, direct and indirect casualties, property and crop damage, and narratives. This corpus carries discrete severe-weather events rather than CDO station observations, needs no token, and publishes one bulk file per year, so year is required. Filter by episodeId from a returned event, state (full NCEI name such as \"FLORIDA\", not \"FL\"), eventType (exact NWS label such as \"Tornado\", \"Flash Flood\", or \"Hurricane (Typhoon)\", case-insensitive), begin month, inclusive local-calendar startDate/endDate overlap, and minDamageInUsd. Date bounds exclude missing, invalid, or reversed source spans before damage accounting, totals, and paging; cross-year bounds still search only the selected year export. Damage retains its raw magnitude-suffixed cell and parsed dollar amount; unreported figures are omitted, and minDamageInUsd discloses how many unknown figures it excluded. Events reference distinct page-local episodeNarratives by episodeNarrativeRef; eventNarrative stays on each event, and rendered narratives preserve literal source text. Optional local ISO beginDate/endDate values can feed CDO date filters; raw NCEI date-time and timezone remain available. Source row order, limit/offset pagination, and filtered totalCount are preserved; appliedDateRange echoes supplied bounds.","input":[{"n":"episodeId","t":"string"},{"n":"year","t":"integer","r":true},{"n":"state","t":"string"},{"n":"eventType","t":"string"},{"n":"month","t":"integer"},{"n":"startDate","t":"string"},{"n":"endDate","t":"string"},{"n":"minDamageInUsd","t":"number"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"year","t":"number"},{"n":"appliedDateRange","t":"object"},{"n":"sourceFile","t":"string"},{"n":"events","t":"array<object>"},{"n":"episodeNarratives","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"exhausted","t":"boolean"},{"n":"excludedUnknownDamage","t":"number"},{"n":"scannedRowCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"noaa_climate_get_billion_dollar_disasters","server":67,"verb":"get","cls":"get","resolver":false,"title":"Get NOAA Billion-Dollar Disasters","description":"Query NOAA/NCEI’s retired Billion-Dollar Weather and Climate Disasters archive (1980–2024), with CPI-adjusted and unadjusted costs and deaths. No years after 2024 are added; CPI adjustments are preserved from the archive, not rebased to current prices. Every cost is in WHOLE US DOLLARS, converted from each export’s declared unit (declaredCostUnit): millions per event, billions per national year, millions per state year. Default calls return individual disasters; summary=true returns per-year counts and costs by class plus an \"All Disasters\" total. Filter with startYear/endYear (overlapping disasters included), disasterType (exact NCEI class, e.g. \"Tropical Cyclone\"), minCostInUsd, and state (two-letter postal code). coveredYears reports the span actually present in the export. Under a state scope, per-event rows carry the NATIONAL cost of disasters that reached that state, never a state share, so summing states double-counts; per-year rows carry a binned range instead of a point estimate. Separate from CDO and noaa_climate_search_storm_events; no token required.","input":[{"n":"startYear","t":"integer"},{"n":"endYear","t":"integer"},{"n":"disasterType","t":"enum(7)"},{"n":"state","t":"string"},{"n":"minCostInUsd","t":"number"},{"n":"summary","t":"boolean"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"mode","t":"enum(2)"},{"n":"scope","t":"string"},{"n":"sourceFile","t":"string"},{"n":"declaredCostUnit","t":"string"},{"n":"coveredYears","t":"object"},{"n":"costBasis","t":"const"},{"n":"disasters","t":"array<object>"},{"n":"summaries","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"exhausted","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"noaa_marine_find_stations","server":68,"verb":"find","cls":"search","resolver":false,"title":"Find Marine Stations","description":"Find CO-OPS tide, water-level and current stations and NDBC buoys near a location, by name, or by station ID, returning a unified list with source, data capabilities, coordinates, and — for NDBC — the physical platform class. This is the required first step for resolving a place name, a coordinate pair, or a bare station number to the station IDs the data tools take: CO-OPS tide and water-level IDs are numeric (e.g. 9447130 for Seattle), CO-OPS current IDs are alphanumeric (e.g. ACT4176), and NDBC buoy IDs are 5-character alphanumeric codes (e.g. 46041). Two axes are reported separately — capabilities and type name the data products a station serves (tide, current, water_level, met, current_profile, water_quality), while platform is the NDBC physical classification (buoy, fixed, oilrig, dart, tao, usv, other) that CO-OPS stations do not carry. Supply latitude and longitude together for a proximity search, or query for a name-or-ID substring matched against both sources, or state for CO-OPS coverage in one state; the filters combine, and results lead with an exact ID match unless a proximity search is ordering them by distance. A search that matches nothing is a success with total_found: 0 carrying an echo of the filters that were applied, and a search whose catalogs did not all answer says which source is missing. CO-OPS prediction stations carry a third axis as well, prediction_class, which says what a station can actually answer: a tide station is either reference, serving both hilo and the 6-minute curve, or subordinate, serving hilo only, while a current station carries its class per depth bin in bins[] — a harmonic or subordinate bin serves the normal flood/ebb/slack series, and a weak_and_variable bin may instead answer noaa_marine_get_currents with a coverage statement and no events, or report that CO-OPS publishes no predictions for it at all, so prefer a harmonic bin when one is in range.","input":[{"n":"latitude","t":"number"},{"n":"longitude","t":"number"},{"n":"radius_km","t":"number"},{"n":"query","t":"string"},{"n":"state","t":"enum(56)"},{"n":"source","t":"enum(3)"},{"n":"types","t":"array<enum(7)>"},{"n":"limit","t":"integer"}],"output":[{"n":"stations","t":"array<object>"},{"n":"total_found","t":"number"},{"n":"truncated","t":"boolean"},{"n":"applied_search","t":"object"},{"n":"notice","t":"string"},{"n":"sources","t":"object"},{"n":"error","t":"object"}]},{"name":"noaa_marine_get_tide_predictions","server":68,"verb":"get","cls":"get","resolver":false,"title":"Get Tide Predictions","description":"High and low tide predictions for a CO-OPS tide station over a date range. The default hilo interval returns the time, height, and tide type (H for high, L for low) of each event, while the 6-minute interval returns the detailed tide curve. Most tide stations are subordinate — CO-OPS derives their high and low events as offsets from a reference station and publishes no 6-minute curve for them — so interval=\"6min\" reaches only a reference station, and a subordinate station comes back as subordinate_no_6min naming the reference station to ask instead; the prediction_class on a noaa_marine_find_stations tide row says which kind a station is before the call. Datum defaults to MLLW, mean lower low water, the standard for US nautical charts, and the date range is limited to 1 year per request. A range whose predictions fit the response budget is returned whole; a longer one is returned as a page of leading rows, and rows_matched, rows_returned, and next_offset then report how much matched and which offset reaches the rest, so a year of events is read by walking offset rather than by splitting the range. Use noaa_marine_find_stations first to resolve a station name or location to a numeric station ID.","input":[{"n":"station_id","t":"string","r":true},{"n":"begin_date","t":"string","r":true},{"n":"end_date","t":"string","r":true},{"n":"datum","t":"enum(10)"},{"n":"time_zone","t":"enum(3)"},{"n":"units","t":"enum(2)"},{"n":"interval","t":"enum(2)"},{"n":"offset","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"station_id","t":"string"},{"n":"station_name","t":"string"},{"n":"datum","t":"string"},{"n":"units","t":"string"},{"n":"predictions","t":"array<object>"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"rows_matched","t":"integer"},{"n":"rows_returned","t":"integer"},{"n":"page_offset","t":"integer"},{"n":"next_offset","t":"integer"},{"n":"error","t":"object"}]},{"name":"noaa_marine_get_water_level","server":68,"verb":"get","cls":"get","resolver":false,"title":"Get Water Level","description":"Observed water level, real-time or historical, for a CO-OPS water-level station, paired with tide predictions for the same period so the residual (observed − predicted) shows storm surge when positive and anomalous drawdown when negative. The interval selects the cadence: 6min (default) is the full curve, hourly and high_low cover months to a year of the same series at far fewer rows, and daily_mean serves Great Lakes stations only. Each interval carries its own CO-OPS range ceiling — 31 days for 6min, 365 for hourly and high_low, 3655 for daily_mean — rejected locally before the call, and only 6min and hourly report a residual. Observations and predictions are fetched independently, so when the prediction series is empty, predictions_status says whether CO-OPS has none for this station and range or the prediction fetch failed — the observed series returns either way, and residual_summary is present only when both series are and the cadence supports the join. A sensor outage leaves slots with no reading; those slots are dropped and counted in gaps_dropped, so the observed series is continuous across the range only when that count is absent. A range whose rows fit the response budget is returned whole; a longer one returns the leading rows, with rows_matched, rows_returned, and next_offset reporting how much matched and which offset reaches the rest. Use noaa_marine_find_stations first to resolve a station name or location to a valid station ID.","input":[{"n":"station_id","t":"string","r":true},{"n":"begin_date","t":"string","r":true},{"n":"end_date","t":"string","r":true},{"n":"datum","t":"enum(13)"},{"n":"time_zone","t":"enum(3)"},{"n":"units","t":"enum(2)"},{"n":"interval","t":"enum(4)"},{"n":"offset","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"station_id","t":"string"},{"n":"station_name","t":"string"},{"n":"datum","t":"string"},{"n":"units","t":"string"},{"n":"interval","t":"enum(4)"},{"n":"observations","t":"array<object>"},{"n":"predictions","t":"array<object>"},{"n":"residual_summary","t":"object"},{"n":"notice","t":"string"},{"n":"predictions_status","t":"enum(2)"},{"n":"gaps_dropped","t":"integer"},{"n":"truncated","t":"boolean"},{"n":"rows_matched","t":"integer"},{"n":"rows_returned","t":"integer"},{"n":"page_offset","t":"integer"},{"n":"next_offset","t":"integer"},{"n":"error","t":"object"}]},{"name":"noaa_marine_get_monthly_means","server":68,"verb":"get","cls":"get","resolver":false,"title":"Get Monthly Means","description":"Verified monthly means for a CO-OPS water-level station, one row per station-month: the month's highest and lowest water, its tidal datums (MHHW, MHW, MSL, MTL, MLW, MLLW, DTL), tidal ranges (GT, MN, DHQ, DLQ), and lunitidal intervals (HWI, LWI) — the record a sea-level or tidal-range trend over years to decades is read from. Heights are relative to the requested datum in the requested units. A value CO-OPS publishes no figure for is omitted rather than reported as zero; a Great Lakes station carries only highest, msl, and lowest. A range may span up to 73,000 days, checked before the call, and CO-OPS verifies this product monthly, for the prior month, so a window ending on or after the first day of the prior month can fail with verified_data_lag. A range whose months fit the response budget is returned whole; a longer one returns the leading months, with rows_matched, rows_returned, and next_offset reporting how many matched and which offset reaches the rest. Use noaa_marine_find_stations with types=[\"water_level\"] first to resolve a station name or location to a station ID.","input":[{"n":"station_id","t":"string","r":true},{"n":"begin_date","t":"string","r":true},{"n":"end_date","t":"string","r":true},{"n":"datum","t":"enum(11)"},{"n":"units","t":"enum(2)"},{"n":"offset","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"station_id","t":"string"},{"n":"station_name","t":"string"},{"n":"datum","t":"string"},{"n":"units","t":"string"},{"n":"begin_date","t":"string"},{"n":"end_date","t":"string"},{"n":"months","t":"array<object>"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"rows_matched","t":"integer"},{"n":"rows_returned","t":"integer"},{"n":"page_offset","t":"integer"},{"n":"next_offset","t":"integer"},{"n":"error","t":"object"}]},{"name":"noaa_marine_get_currents","server":68,"verb":"get","cls":"get","resolver":false,"title":"Get Tidal Currents","description":"Tidal current predictions for a CO-OPS current station: max flood and ebb speeds, slack times, and the station's mean flood and ebb bearings. These are forecast predictions from CO-OPS, distinct from noaa_marine_get_current_profile, which returns NDBC observed ocean-current measurements binned by depth. The default MAX_SLACK interval is the practical planning view, showing when currents peak and when slack water occurs, and a 6-minute interval returns the continuous curve for detailed analysis, each row carrying its own flood/ebb/slack sense. A station can publish predictions for several depth bins at different depths: bin selects one, omitting it takes the CO-OPS default of the shallowest bin, and the bin and its depth are echoed on every response — read bins[] on a noaa_marine_find_stations current row for the bins a station actually has. A station whose currents CO-OPS will not predict as discrete events answers with an empty list and its own wording in the notice rather than an error. Both intervals are bounded by response size: a range whose rows fit is returned whole, a longer one returns the leading rows with rows_matched, rows_returned, and next_offset reporting how much matched and which offset reaches the rest, and offset and limit walk whichever series the interval selects. Current station IDs are alphanumeric (e.g. ACT4176), distinct from the numeric tide and water-level IDs, and the date range is limited to 1 year per request — use noaa_marine_find_stations with types=[\"current\"] to obtain a valid current station ID.","input":[{"n":"station_id","t":"string","r":true},{"n":"begin_date","t":"string","r":true},{"n":"end_date","t":"string","r":true},{"n":"time_zone","t":"enum(3)"},{"n":"units","t":"enum(2)"},{"n":"interval","t":"enum(2)"},{"n":"bin","t":"integer"},{"n":"offset","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"station_id","t":"string"},{"n":"station_name","t":"string"},{"n":"units","t":"string"},{"n":"bin","t":"number"},{"n":"depth","t":"number"},{"n":"events","t":"array<object>"},{"n":"predictions","t":"array<object>"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"rows_matched","t":"integer"},{"n":"rows_returned","t":"integer"},{"n":"page_offset","t":"integer"},{"n":"next_offset","t":"integer"},{"n":"error","t":"object"}]},{"name":"noaa_marine_get_conditions","server":68,"verb":"get","cls":"get","resolver":false,"title":"Get Marine Conditions","description":"Live marine conditions from an NDBC buoy: wave height, period and direction, wind speed, gust and direction, sea-surface temperature, air temperature, barometric pressure, and dew point. All values are SI units — wind in m/s, wave height in m, pressure in hPa, temperatures in °C — except TIDE, which is in feet, and VIS, in nautical miles, both rarely populated at offshore buoys; a numeric field is null when the buoy sensor did not report a value, which is normal offshore. Row cadence varies by station from 5 to 60 minutes, so observed_at can be that old, and NDBC writes each block of columns on its own cycle, so any block can resolve from an earlier row within 90 minutes of observed_at. Waves carry their own waves_observed_at, null when no wave sample falls inside that window, and any other block read from an earlier row is named with its measurement time in the response notice. Use noaa_marine_find_stations with source=\"ndbc\" and types=[\"met\"] to find station IDs near a location, since met-flagged stations are the ones most likely to serve live conditions: roughly a third of active NDBC stations report neither meteorological nor current data, most of those have no observation file, and omitting the types filter surfaces station IDs this tool cannot read.","input":[{"n":"station_id","t":"string","r":true}],"output":[{"n":"station_id","t":"string"},{"n":"station_name","t":"string"},{"n":"latitude","t":"number"},{"n":"longitude","t":"number"},{"n":"observed_at","t":"string"},{"n":"source","t":"string"},{"n":"wind_direction_deg","t":"number"},{"n":"wind_speed_ms","t":"number"},{"n":"gust_speed_ms","t":"number"},{"n":"wave_height_m","t":"number"},{"n":"dominant_period_sec","t":"number"},{"n":"average_period_sec","t":"number"},{"n":"mean_wave_direction_deg","t":"number"},{"n":"waves_observed_at","t":"string"},{"n":"pressure_hpa","t":"number"},{"n":"air_temp_c","t":"number"},{"n":"water_temp_c","t":"number"},{"n":"dew_point_c","t":"number"},{"n":"visibility_nmi","t":"number"},{"n":"tide_ft","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"noaa_marine_get_current_profile","server":68,"verb":"get","cls":"get","resolver":false,"title":"Get Ocean Current Profile","description":"Observed ocean-current depth profile from an NDBC ADCP buoy — the most recent measurement of current speed and direction at each depth bin, returning depth in meters, direction in degrees true (the direction the current flows toward), and speed in cm/s. It is distinct from noaa_marine_get_currents, which returns CO-OPS tidal-current predictions of max flood, ebb and slack rather than these observed acoustic-Doppler measurements. A depth bin is reported whenever NDBC gives it a depth, and its direction or speed is null when the sensor did not report that component. Use noaa_marine_find_stations with source=\"ndbc\" and types=[\"current_profile\"] to find station IDs, since most NDBC stations serve no ADCP profile and an unfiltered search returns IDs this tool cannot read.","input":[{"n":"station_id","t":"string","r":true}],"output":[{"n":"station_id","t":"string"},{"n":"station_name","t":"string"},{"n":"latitude","t":"number"},{"n":"longitude","t":"number"},{"n":"observed_at","t":"string"},{"n":"source","t":"string"},{"n":"bin_count","t":"number"},{"n":"bins","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"noaa_marine_get_ocean_observations","server":68,"verb":"get","cls":"get","resolver":false,"title":"Get Ocean Observations","description":"Live sub-surface oceanographic observations from an NDBC station's water-quality sensors: at each reported depth, water temperature, conductivity, salinity, dissolved oxygen as both saturation percent and concentration in ppm, chlorophyll, turbidity, pH, and redox potential. This is the water-column counterpart to noaa_marine_get_conditions, which returns surface meteorological and wave data — use this tool for what the water is doing below the surface, that one for weather and sea state at the buoy. It returns the most recent observation as one reading per reported depth, and most stations report a single depth while some report several at the same time; sensor coverage is sparse, most stations populating only water temperature and salinity, and any value the station did not report comes back null rather than a fabricated zero, as do latitude and longitude for a station absent from the NDBC active-stations list. Sub-surface sensors are on only a subset of NDBC stations, so find one with noaa_marine_find_stations using source=\"ndbc\" and types=[\"water_quality\"], which filters on NDBC's own water-quality catalog flag — the flag and actual .ocean availability drift, so this tool reads any station that serves the file and returns observations_not_found for one that does not.","input":[{"n":"station_id","t":"string","r":true}],"output":[{"n":"station_id","t":"string"},{"n":"station_name","t":"string"},{"n":"latitude","t":"number"},{"n":"longitude","t":"number"},{"n":"observed_at","t":"string"},{"n":"source","t":"string"},{"n":"reading_count","t":"number"},{"n":"readings","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"noaa_spaceweather_get_conditions","server":69,"verb":"get","cls":"get","resolver":false,"title":"Get Space Weather Conditions","description":"Current space-weather snapshot: NOAA R/S/G storm scales (the previous UTC day, today, and the 3-day forecast), latest Kp index with its G-scale equivalent and aurora-visibility latitude, and a plain-language status summary. Optionally includes the SWPC forecast discussion explaining what is driving the forecast. The quickest way to answer \"is anything happening right now?\" — use before deciding whether to drill into solar wind (noaa_spaceweather_get_solar_wind), aurora (noaa_spaceweather_get_aurora_forecast), or alert details (noaa_spaceweather_get_alerts).","input":[{"n":"include_discussion","t":"boolean"}],"output":[{"n":"observedAt","t":"string"},{"n":"currentKp","t":"number"},{"n":"currentGScale","t":"number"},{"n":"auroraLatitude","t":"string"},{"n":"yesterday","t":"object"},{"n":"today","t":"object"},{"n":"forecast","t":"array<object>"},{"n":"summary","t":"string"},{"n":"discussion","t":"object"},{"n":"error","t":"object"}]},{"name":"noaa_spaceweather_get_alerts","server":69,"verb":"get","cls":"get","resolver":false,"title":"Get Space Weather Alerts","description":"Active SWPC alerts, watches, and warnings — parsed into structured records with product type, NOAA scale and level, issue time, serial number, validity window, and plain text. Covers geomagnetic storms, radio blackouts, and radiation storms. With active_only=false, also returns informational summaries, expired notices, and cancellations. max_age_hours controls how far back to look for candidates (default 48 h) — under active_only=true it does not cut off a product whose validity end is still in the future, and under active_only=false it is a literal age cutoff. The SWPC feed keeps all historical records and has no built-in expiry.","input":[{"n":"active_only","t":"boolean"},{"n":"max_age_hours","t":"number"}],"output":[{"n":"alerts","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"activeOnly","t":"boolean"},{"n":"fetchedAt","t":"string"},{"n":"notice","t":"string"},{"n":"appliedWindowHours","t":"number"},{"n":"appliedCutoff","t":"string"},{"n":"exclusions","t":"object"},{"n":"error","t":"object"}]},{"name":"noaa_spaceweather_get_kp_index","server":69,"verb":"get","cls":"get","resolver":false,"title":"Get Kp Index","description":"Planetary K-index (0–9 geomagnetic activity scale) — recent observed 3-hour values with their NOAA G-scale equivalents and aurora-latitude guidance, plus the 3-day Kp forecast series. Kp is the primary driver of aurora visibility and geomagnetic storm severity. SWPC reports Kp in thirds and starts each G level at that level’s \"minus\" value: Kp 4.67 (5−) is G1, Kp 6.67 (7−) is G3 (aurora to ~50° geomagnetic), Kp 8.67 (9−) is still G4, and only Kp 9 is G5 extreme. Use noaa_spaceweather_get_conditions for a combined snapshot including storm scales; use this tool when you need the Kp time series or forecast detail.","input":[{"n":"window_days","t":"integer"}],"output":[{"n":"observed","t":"array<object>"},{"n":"forecast","t":"array<object>"},{"n":"currentKp","t":"number"},{"n":"currentGScale","t":"number"},{"n":"auroraLatitude","t":"string"},{"n":"observedCount","t":"number"},{"n":"error","t":"object"}]},{"name":"noaa_spaceweather_get_solar_wind","server":69,"verb":"get","cls":"get","resolver":false,"title":"Get Solar Wind","description":"Real-time solar wind measurements from the active spacecraft at L1: proton speed (km/s), density (n/cm³), temperature (K), and the critical Bz component (southward Bz = negative = storm driver). Returns the recent plasma and magnetic field time series within the requested window, oldest first, each record tagged with the reporting spacecraft and bounded to 200 records per series unless resolution is set to \"full\" — or omitted entirely under \"summary\", which keeps the latest readings, Bz status, and window extremes (peak speed, density, and Bt; most southward Bz; minutes of southward Bz) for \"what is Bz doing now\" questions. Bz < −10 nT for sustained periods is a primary geomagnetic storm trigger — use alongside noaa_spaceweather_get_kp_index to see whether elevated solar wind has translated into a geomagnetic storm.","input":[{"n":"window_hours","t":"integer"},{"n":"resolution","t":"enum(3)"}],"output":[{"n":"plasma","t":"array<object>"},{"n":"mag","t":"array<object>"},{"n":"latestPlasma","t":"object"},{"n":"latestMag","t":"object"},{"n":"bzStatus","t":"string"},{"n":"plasmaCount","t":"number"},{"n":"magCount","t":"number"},{"n":"bzMinInWindow","t":"number"},{"n":"bzMinTimeTag","t":"string"},{"n":"bzSouthMinutesInWindow","t":"number"},{"n":"speedMaxInWindow","t":"number"},{"n":"speedMaxTimeTag","t":"string"},{"n":"densityMaxInWindow","t":"number"},{"n":"btMaxInWindow","t":"number"},{"n":"latestFeedPlasmaTime","t":"string"},{"n":"latestFeedMagTime","t":"string"},{"n":"feedStalenessHours","t":"number"},{"n":"notice","t":"string"},{"n":"plasmaBucketRecords","t":"number"},{"n":"plasmaWindowRecords","t":"number"},{"n":"magBucketRecords","t":"number"},{"n":"magWindowRecords","t":"number"},{"n":"error","t":"object"}]},{"name":"noaa_spaceweather_get_solar_activity","server":69,"verb":"get","cls":"get","resolver":false,"title":"Get Solar Activity","description":"Solar flare and radiation storm picture: discrete flare events from the past week with peak class and R-scale level, recent GOES X-ray flux with flare-class labels (A/B/C/M/X) and class magnitude, the daily F10.7 cm solar radio flux, 3-day flare-class probabilities (C/M/X), active solar regions with per-region flare probabilities, and GOES integral proton flux at ≥10 MeV with NOAA S-scale. For operators tracking HF radio blackout (R-scale, driven by X-ray) and radiation storm risk (S-scale, driven by protons). Each active region carries the C/M/X flare counts SWPC attributed to it that UTC day, which identify the region driving current activity — the flare events themselves carry no region.","input":[{"n":"include_regions","t":"boolean"},{"n":"flare_hours","t":"integer"}],"output":[{"n":"latestXray","t":"object"},{"n":"recentXray","t":"array<object>"},{"n":"recentFlares","t":"array<object>"},{"n":"f107","t":"object"},{"n":"probabilities","t":"array<object>"},{"n":"latestProton","t":"object"},{"n":"sScale","t":"number"},{"n":"sScaleText","t":"string"},{"n":"activeRegions","t":"array<object>"},{"n":"fetchedAt","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"noaa_spaceweather_get_aurora_forecast","server":69,"verb":"get","cls":"get","resolver":false,"title":"Get Aurora Forecast","description":"OVATION model aurora forecast for the next ~30–60 min: global grid of aurora probability percentages by latitude/longitude (1° resolution). With optional coordinates, returns the local aurora probability at the nearest grid point, the geomagnetic latitude those coordinates convert to, the minimum Kp and G level needed for aurora at that geomagnetic latitude, the sun’s elevation there at the forecast time (aurora is not visible in daylight), the strongest aurora within 1000 km poleward (visible low on the horizon when bright), and a plain-language go/no-go verdict. Without coordinates, returns only global metadata. Data updates every ~5 minutes. Supply coordinates as geographic (WGS84); aurora bands are geomagnetic, and the tool converts between them.","input":[{"n":"latitude","t":"number"},{"n":"longitude","t":"number"}],"output":[{"n":"observationTime","t":"string"},{"n":"forecastTime","t":"string"},{"n":"localLookup","t":"object"},{"n":"gridPointCount","t":"number"},{"n":"topAuroraPercent","t":"number"},{"n":"topAuroraRegion","t":"string"},{"n":"error","t":"object"}]},{"name":"nonprofit_search_organizations","server":70,"verb":"search","cls":"search","resolver":false,"title":"Search Nonprofits","description":"Search 1.8M+ IRS-recognized tax-exempt organizations by name, keyword, city, or phrase. Optionally narrow by US state, NTEE major sector (1–10), or 501(c) subsection type. Returns EINs — pass them to nonprofit_get_organization or nonprofit_get_filings for details. Results are paginated at 25 per page; use the page parameter and num_pages to paginate. Total results cap at 10,000 in the API; if total_results === 10000 the actual count may be higher. A zero-match query and a page past the last one both return an empty organizations array with a notice rather than an error; only a page whose offset reaches that 10,000 cap is refused. Supports quoted phrases (\"Red Cross\"), required terms (+evanston), excluded terms (-dental). Data from ProPublica Nonprofit Explorer, sourced from IRS Form 990 filings.","input":[{"n":"query","t":"string","r":true},{"n":"state","t":"string"},{"n":"ntee_category","t":"enum(10)"},{"n":"subsection_code","t":"enum(26)"},{"n":"page","t":"integer"}],"output":[{"n":"total_results","t":"number"},{"n":"num_pages","t":"number"},{"n":"cur_page","t":"number"},{"n":"per_page","t":"number"},{"n":"page_offset","t":"number"},{"n":"organizations","t":"array<object>"},{"n":"active_filters","t":"object"},{"n":"data_source","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"nonprofit_get_organization","server":70,"verb":"get","cls":"get","resolver":false,"title":"Get Nonprofit Organization","description":"Full profile for a single tax-exempt org by EIN: legal name, address, NTEE classification, 501(c) type, IRS ruling date, and a financial snapshot from the most recent Form 990 filing (revenue, expenses, assets, net assets, and the source PDF link). Also returns the IRS Business Master File standing — whether contributions are deductible, exemption status, and public-charity vs. private-foundation classification. Use nonprofit_search_organizations first if you only have an org name — this tool requires an EIN. Data lags 1–2 years; the tax year is shown prominently. Data from ProPublica Nonprofit Explorer, sourced from IRS Form 990 filings.","input":[{"n":"ein","t":"integer|string","r":true}],"output":[{"n":"ein","t":"number"},{"n":"strein","t":"string"},{"n":"name","t":"string"},{"n":"sort_name","t":"string"},{"n":"address","t":"string"},{"n":"city","t":"string"},{"n":"state","t":"string"},{"n":"zipcode","t":"string"},{"n":"ntee_code","t":"string"},{"n":"subsection_code","t":"number"},{"n":"ruling_date","t":"string"},{"n":"asset_amount","t":"number"},{"n":"income_amount","t":"number"},{"n":"revenue_amount","t":"number"},{"n":"deductible","t":"string"},{"n":"exempt_status","t":"string"},{"n":"foundation_type","t":"string"},{"n":"bmf_tax_period","t":"string"},{"n":"latest_filing","t":"object"},{"n":"filing_count","t":"number"},{"n":"filing_count_pdf_only","t":"number"},{"n":"data_source","t":"string"},{"n":"propublica_url","t":"string"},{"n":"error","t":"object"}]},{"name":"nonprofit_get_filings","server":70,"verb":"get","cls":"get","resolver":false,"title":"Get Nonprofit Filings","description":"All Form 990 filings for a tax-exempt org by EIN: year-by-year revenue, expenses, assets, liabilities, net assets, revenue breakdown, executive compensation, and source PDF links. Use for trend analysis, due diligence, and accessing primary 990 documents. The filing year (tax_prd_yr) is the fiscal year of the return — data lags 1–2 years; always cite the year. An organization that resolves but has filed no 990 returns an empty filings array with a notice, not an error. Also returns filings_pdf_only — older filings with a PDF but no extracted financial data. Data from ProPublica Nonprofit Explorer, sourced from IRS Form 990 filings.","input":[{"n":"ein","t":"integer|string","r":true}],"output":[{"n":"ein","t":"number"},{"n":"name","t":"string"},{"n":"filings","t":"array<object>"},{"n":"filings_pdf_only","t":"array<object>"},{"n":"total_filings_with_data","t":"number"},{"n":"total_filings_pdf_only","t":"number"},{"n":"data_source","t":"string"},{"n":"propublica_url","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"npi_search_providers","server":71,"verb":"search","cls":"search","resolver":false,"title":"Npi Search Providers","description":"Search the NPPES NPI registry for individual practitioners and healthcare organizations by name, organization name, location, provider type, and specialty. Plain-language specialty terms (e.g. \"cardiologist\", \"pediatric cardiologist\") resolve through the bundled NUCC taxonomy; the top match's specialization or classification becomes taxonomy_description, and all resolved candidates are returned in metadata. Location belongs in the dedicated city/state/postal_code inputs, not inside specialty. Each provider row includes the NPI, name, primary specialty, city/state/ZIP, type, and active/deactivated status; the NPI is the input for npi_get_provider when the full record is needed. At least one search criterion is required, and the registry rejects state-only searches. When city/state/postal_code are given, only practice addresses are searched, never mailing addresses: a provider is returned only when its primary practice location or one of its other practice locations matches all of them. A provider kept on another practice location names it in matchedLocation. Name searches also match former and other names, sorted by current name; such a row names the matching name in matchedOtherName. The registry never reports a true match total, and one search reaches only its first 1200 matches: a full page names the next in nextPage, and the terminal window (skip 1000, limit 200) returns continuationPostalCodes, postal_code prefixes that continue the search.","input":[{"n":"name_search","t":"string"},{"n":"first_name","t":"string"},{"n":"last_name","t":"string"},{"n":"organization_name","t":"string"},{"n":"provider_type","t":"enum(2)"},{"n":"specialty","t":"string"},{"n":"taxonomy_description","t":"string"},{"n":"city","t":"string"},{"n":"state","t":"const|string"},{"n":"postal_code","t":"string"},{"n":"limit","t":"integer"},{"n":"skip","t":"integer"}],"output":[{"n":"providers","t":"array<object>"},{"n":"resolvedTaxonomies","t":"array<object>"},{"n":"appliedTaxonomyDescription","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"nextPage","t":"object"},{"n":"continuationPostalCodes","t":"array<string>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"npi_get_provider","server":71,"verb":"get","cls":"get","resolver":false,"title":"Npi Get Provider","description":"Fetch the NPPES record for one or more NPI numbers (up to 10 per call). Decodes an NPI from a claim, prescription, or another health data source into the provider's professional-practice profile: every taxonomy with its primary flag, license number and state; practice addresses with phone and fax (only LOCATION rows are kept for individual providers, so their mailing address is withheld; organizations also carry their mailing address); credential, sex, sole-proprietor flag; enumeration and last-updated dates; active/deactivated status; secondary identifiers (Medicaid, etc.); and FHIR/Direct endpoints. Each NPI must be 10 digits with a valid check digit (its last digit); an NPI failing the check digit lands in invalid and is never looked up. Reports partial success: valid NPIs with no registry record (deactivated or never enumerated) land in notFound, while NPIs whose lookup hit an upstream error (registry unavailable, timeout) land in errored — kept distinct from confirmed misses — rather than failing the whole call.","input":[{"n":"npis","t":"string|array<string>","r":true}],"output":[{"n":"found","t":"array<object>"},{"n":"notFound","t":"array<object>"},{"n":"errored","t":"array<object>"},{"n":"invalid","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"npi_lookup_taxonomy","server":71,"verb":"lookup","cls":"get","resolver":false,"title":"Npi Lookup Taxonomy","description":"Resolve and browse the NUCC Healthcare Provider Taxonomy — the specialty code set NPPES uses — fully offline (bundled). Mode `resolve` turns a plain-language specialty (e.g. \"cardiologist\", \"heart doctor\") into matching active taxonomy entries, excluding codes NUCC marks inactive; mode `get` returns the full entry for an exact code, including NUCC's Notes; mode `browse` walks the hierarchy (grouping → classification → specialization), optionally filtered by grouping and by NPI section (Individual/NPI-1 vs Non-Individual/NPI-2). Every entry carries its status, and an inactive code names its replacement when NUCC gives one; `get` and `browse` still return inactive codes. A resolved entry's specialization, or its classification when specialization is absent, maps directly to npi_search_providers.taxonomy_description.","input":[],"output":[{"n":"matches","t":"array<object>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"nws_get_forecast","server":72,"verb":"get","cls":"get","resolver":false,"title":"Nws Get Forecast","description":"Get the weather forecast for a US location. Returns either named 12-hour periods (default) or hourly breakdowns.","input":[{"n":"latitude","t":"number","r":true},{"n":"longitude","t":"number","r":true},{"n":"hourly","t":"boolean"},{"n":"cursor","t":"string"}],"output":[{"n":"location","t":"object"},{"n":"generatedAt","t":"string"},{"n":"updateTime","t":"string"},{"n":"periods","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"shown","t":"number"},{"n":"mode","t":"string"},{"n":"nextCursor","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"nws_search_alerts","server":72,"verb":"search","cls":"search","resolver":false,"title":"Nws Search Alerts","description":"Search active weather alerts (watches, warnings, advisories) across the US. Filter by state, coordinates, zone, land/marine region, event type, severity, urgency, or certainty. area, point, zone, region_type, and region are mutually exclusive — provide at most one. Omit all filters for a national search.","input":[{"n":"area","t":"string"},{"n":"point","t":"string"},{"n":"zone","t":"string"},{"n":"region_type","t":"enum(2)"},{"n":"region","t":"array<enum(6)>"},{"n":"event","t":"array<string>"},{"n":"severity","t":"array<enum(5)>"},{"n":"urgency","t":"array<enum(4)>"},{"n":"certainty","t":"array<enum(5)>"},{"n":"status","t":"enum(5)"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"alerts","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"shown","t":"number"},{"n":"appliedFilters","t":"string"},{"n":"nextCursor","t":"string"},{"n":"requestedLimit","t":"number"},{"n":"effectiveLimit","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"nws_get_alert","server":72,"verb":"get","cls":"get","resolver":false,"title":"Nws Get Alert","description":"Fetch one NWS alert message by ID — a current alert, or an earlier message that an update or cancellation has since superseded and that an active-alert search no longer returns. Takes an id from nws_search_alerts or a references[].identifier from any alert, and returns the same alert fields nws_search_alerts does. The message carries its own references, newest first, so a revision chain is walked one call per message. Every reference sharing the newest sent time is an immediate predecessor (an update can merge several earlier segments), so references[0] is one of them, not always the only one. NWS serves messages for about 7 days after they are sent.","input":[{"n":"alert_id","t":"string","r":true}],"output":[{"n":"alert","t":"object"},{"n":"error","t":"object"}]},{"name":"nws_get_alert_counts","server":72,"verb":"get","cls":"get","resolver":false,"title":"Nws Get Alert Counts","description":"Count active weather alerts nationwide, per state/territory or marine area, and per marine region, in one small response — the answer to \"how many alerts are active, and where\" without fetching the alerts themselves. Counts cover every message status, Test and Exercise included, so totalAlerts can run above the totalCount a national nws_search_alerts search reports under its default status of Actual. An alert counts once in each area its zones fall in, so the area counts can sum past totalAlerts; landAlerts plus marineAlerts equals totalAlerts. Takes no filters. For counts per zone or under a filter, call nws_search_alerts with that zone or filter and read its totalCount.","input":[],"output":[{"n":"totalAlerts","t":"number"},{"n":"landAlerts","t":"number"},{"n":"marineAlerts","t":"number"},{"n":"areas","t":"object"},{"n":"regions","t":"object"},{"n":"error","t":"object"}]},{"name":"nws_get_observations","server":72,"verb":"get","cls":"get","resolver":false,"title":"Nws Get Observations","description":"Get current weather observations (actual measured conditions). Accepts coordinates (resolves nearest station automatically) or a station ID directly (e.g., \"KSEA\").","input":[{"n":"latitude","t":"number"},{"n":"longitude","t":"number"},{"n":"station_id","t":"string"}],"output":[{"n":"stationId","t":"string"},{"n":"stationName","t":"string"},{"n":"timestamp","t":"string"},{"n":"timeZone","t":"string"},{"n":"textDescription","t":"string"},{"n":"temperatureC","t":"number"},{"n":"dewpointC","t":"number"},{"n":"windSpeedKmh","t":"number"},{"n":"windDirectionDeg","t":"number"},{"n":"windGustKmh","t":"number"},{"n":"barometricPressurePa","t":"number"},{"n":"visibilityM","t":"number"},{"n":"relativeHumidityPct","t":"number"},{"n":"heatIndexC","t":"number"},{"n":"windChillC","t":"number"},{"n":"precipitationLastHourMm","t":"number"},{"n":"precipitationLast3HoursMm","t":"number"},{"n":"precipitationLast6HoursMm","t":"number"},{"n":"cloudLayers","t":"array<object>"},{"n":"station","t":"string"},{"n":"observedAt","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"nws_get_observation_history","server":72,"verb":"get","cls":"get","resolver":false,"title":"Nws Get Observation History","description":"Get a station's recent observation history, newest first — the trend behind the single latest reading nws_get_observations returns (is pressure falling, is the wind picking up). NWS keeps about the last 7 days per station, and a busy airport station reports as often as every 5 minutes, so a day can run past 100 observations: narrow with start (inclusive) and end (exclusive), and page back to older observations with nextCursor. Takes a station ID; use nws_find_stations to find one near a coordinate.","input":[{"n":"station_id","t":"string","r":true},{"n":"start","t":"string"},{"n":"end","t":"string"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"stationId","t":"string"},{"n":"stationName","t":"string"},{"n":"timeZone","t":"string"},{"n":"observations","t":"array<object>"},{"n":"shown","t":"number"},{"n":"truncated","t":"boolean"},{"n":"cap","t":"number"},{"n":"nextCursor","t":"string"},{"n":"requestedLimit","t":"number"},{"n":"effectiveLimit","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"nws_find_stations","server":72,"verb":"find","cls":"search","resolver":false,"title":"Nws Find Stations","description":"Find weather observation stations near a location. Returns stations sorted by proximity with distance and bearing. Use to discover station IDs for nws_get_observations.","input":[{"n":"latitude","t":"number","r":true},{"n":"longitude","t":"number","r":true},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"stations","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"shown","t":"number"},{"n":"nextCursor","t":"string"},{"n":"requestedLimit","t":"number"},{"n":"effectiveLimit","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"nws_list_alert_types","server":72,"verb":"list","cls":"list","resolver":false,"title":"Nws List Alert Types","description":"List all valid NWS alert event type names. Use to discover valid values for the event filter in nws_search_alerts, or to browse alert categories. No parameters required.","input":[],"output":[{"n":"count","t":"number"},{"n":"eventTypes","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"nws_get_office_discussion","server":72,"verb":"get","cls":"get","resolver":false,"title":"Nws Get Office Discussion","description":"Get the latest narrative forecast product from a Weather Forecast Office (WFO). The default product is AFD (Area Forecast Discussion), which explains the meteorological reasoning behind the forecast — synoptic setup, model guidance, and forecaster confidence. Other types: HWO (Hazardous Weather Outlook, 1-7 day severe/flood/winter outlook), ZFP (Zone Forecast Product, zone-by-zone text), SPS (Special Weather Statement, short-fuse advisory), FWF (Fire Weather Planning Forecast, one segment per fire weather zone). The office code is the 3-letter WFO identifier returned as the \"office\" field by nws_get_forecast. A product over 24,000 bytes (most ZFPs and FWFs) comes back as an outline of its sections — AFD section names, or ZFP/HWO/SPS/FWF zone segments with their area names — with each section's size, instead of the text; re-call with sections to get the ones you need. sections also works on a product of any size, to read one AFD section or one zone's forecast. For an alert zone typed \"fire\" (Red Flag Warning, Fire Weather Watch), pass the alert's \"office\" field as office, product_type \"FWF\", and the zone code in sections.","input":[{"n":"office","t":"string","r":true},{"n":"product_type","t":"enum(5)"},{"n":"sections","t":"array<string>"}],"output":[{"n":"issuanceTime","t":"string"},{"n":"issuingOffice","t":"string"},{"n":"productCode","t":"string"},{"n":"productName","t":"string"},{"n":"productText","t":"string"},{"n":"outline","t":"array<object>"},{"n":"wmoCollectiveId","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"nws_get_zone_forecast","server":72,"verb":"get","cls":"get","resolver":false,"title":"Nws Get Zone Forecast","description":"Get the text forecast for an NWS forecast zone. Returns named forecast periods (e.g., \"Today\", \"Tonight\", \"Monday\") with detailed narrative text — the human-readable, zone-level forecast written by local forecasters. Completes the alert-to-forecast chain: nws_search_alerts returns each affected zone in \"affectedZones\" as a code plus a type, and nws_find_stations returns codes in the \"forecastZone\" column. Only affectedZones entries with type \"forecast\" work here; entries typed \"county\" have no text forecast upstream and will not resolve. An entry typed \"fire\" has its forecast in a segment of the office's Fire Weather Planning Forecast: call nws_get_office_discussion with office set to the alert's \"office\" field, product_type \"FWF\", and sections set to the zone code; a fire zone code that is also a public zone code (e.g., \"NDZ040\") returns that public zone's forecast here, not the fire weather forecast. Marine forecast zones vary: many coastal zones serve a text forecast of wind and seas (e.g., \"PZZ251\"), while offshore zones (e.g., \"GMZ056\") and some coastal ones have none. Zone codes follow the pattern XXZ### (e.g., \"WAZ315\" for the City of Seattle).","input":[{"n":"zone_id","t":"string","r":true}],"output":[{"n":"zoneId","t":"string"},{"n":"updated","t":"string"},{"n":"periods","t":"array<object>"},{"n":"periodCount","t":"number"},{"n":"error","t":"object"}]},{"name":"oecd_list_agencies","server":73,"verb":"list","cls":"list","resolver":false,"title":"Oecd List Agencies","description":"List OECD SDMX agencies, the directorate each belongs to, and the number of dataflows each publishes. Use to discover agency IDs before filtering oecd_search_datasets by department.","input":[],"output":[{"n":"agencies","t":"array<object>"},{"n":"total_agencies","t":"number"},{"n":"total_dataflows","t":"number"},{"n":"source","t":"const"},{"n":"error","t":"object"}]},{"name":"oecd_search_datasets","server":73,"verb":"search","cls":"search","resolver":false,"title":"Oecd Search Datasets","description":"Search OECD dataflows by keyword or theme, matching against dataflow names and descriptions. Returns flow_ref identifiers, names, and agency IDs for use with oecd_get_dataset_info.","input":[{"n":"query","t":"string","r":true},{"n":"agency_id","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"dataflows","t":"array<object>"},{"n":"result_count","t":"number"},{"n":"total_matches","t":"number"},{"n":"offset","t":"number"},{"n":"source","t":"const"},{"n":"totalCount","t":"number"},{"n":"error","t":"object"}]},{"name":"oecd_get_dataset_info","server":73,"verb":"get","cls":"get","resolver":false,"title":"Oecd Get Dataset Info","description":"Fetch a dataflow's dimensions, their order, and how to construct a query key. Returns per-dimension names, codelist references, and position in the dot-delimited key. Required before calling oecd_query_dataset to understand key structure.","input":[{"n":"flow_ref","t":"string","r":true}],"output":[{"n":"flow_ref","t":"string"},{"n":"dimensions","t":"array<object>"},{"n":"time_dimension","t":"object"},{"n":"key_example","t":"string"},{"n":"non_production","t":"boolean"},{"n":"source","t":"const"},{"n":"error","t":"object"}]},{"name":"oecd_get_dimension_values","server":73,"verb":"get","cls":"get","resolver":false,"title":"Oecd Get Dimension Values","description":"Fetch the valid codes and labels for one dimension of a dataflow. Use to resolve human-readable names (countries, measures) to SDMX codes before querying with oecd_query_dataset. Pass query to match a code or label by substring — codelists run to a thousand-plus entries, and the response is a page of at most limit codes either way.","input":[{"n":"flow_ref","t":"string","r":true},{"n":"dimension_id","t":"string","r":true},{"n":"query","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"flow_ref","t":"string"},{"n":"dimension_id","t":"string"},{"n":"codes","t":"array<object>"},{"n":"code_count","t":"number"},{"n":"source","t":"const"},{"n":"notice","t":"string"},{"n":"effectiveQuery","t":"string"},{"n":"totalCount","t":"number"},{"n":"error","t":"object"}]},{"name":"oecd_query_dataset","server":73,"verb":"query","cls":"query","resolver":false,"title":"Oecd Query Dataset","description":"Fetch observations from an OECD dataflow filtered by a dimension key and optional time range. Returns decoded rows (one per observation) with dimension and attribute labels, and values already scaled by the observation unit multiplier. Large multi-country time-series spill to a DataCanvas table — inspect columns with oecd_dataframe_describe, then query the full table with SQL using oecd_dataframe_query; without DataCanvas every row still comes back, but the rendered table stops at a preview slice. Call oecd_get_dataset_info first to learn the dimension order for constructing the key.","input":[{"n":"flow_ref","t":"string","r":true},{"n":"key","t":"string","r":true},{"n":"start_period","t":"string"},{"n":"end_period","t":"string"},{"n":"canvas_id","t":"string"}],"output":[{"n":"rows","t":"array<object>"},{"n":"row_count","t":"number"},{"n":"query_flow_ref","t":"string"},{"n":"query_key","t":"string"},{"n":"query_start_period","t":"string"},{"n":"query_end_period","t":"string"},{"n":"canvas_id","t":"string"},{"n":"table_name","t":"string"},{"n":"truncated","t":"boolean"},{"n":"source","t":"const"},{"n":"notice","t":"string"},{"n":"content_table_capped","t":"boolean"},{"n":"content_table_rows","t":"number"},{"n":"error","t":"object"}]},{"name":"oecd_dataframe_describe","server":73,"verb":"dataframe","cls":"query","resolver":false,"title":"Oecd Dataframe Describe","description":"List tables and columns staged on a DataCanvas by a prior oecd_query_dataset spill. Call this before oecd_dataframe_query to discover exact table and column names for SQL. Only available when CANVAS_PROVIDER_TYPE=duckdb is set.","input":[{"n":"canvas_id","t":"string","r":true}],"output":[{"n":"canvas_id","t":"string"},{"n":"tables","t":"array<object>"},{"n":"table_count","t":"number"},{"n":"error","t":"object"}]},{"name":"oecd_dataframe_query","server":73,"verb":"dataframe","cls":"query","resolver":false,"title":"Oecd Dataframe Query","description":"Run a read-only SQL SELECT against OECD observation tables staged on a DataCanvas by oecd_query_dataset. Call oecd_dataframe_describe first to discover exact table and column names, then use this tool for aggregation, filtering, GROUP BY, JOIN, and window functions. Only available when CANVAS_PROVIDER_TYPE=duckdb is set.","input":[{"n":"canvas_id","t":"string","r":true},{"n":"sql","t":"string","r":true}],"output":[{"n":"rows","t":"array<object>"},{"n":"row_count","t":"number"},{"n":"column_names","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"oeis_identify_sequence","server":74,"verb":"identify","cls":"search","resolver":false,"title":"Identify OEIS Sequence","description":"Identify integer sequences that contain a run of consecutive terms, e.g. \"1, 2, 5, 14, 42\". Returns up to 10 matches per page in OEIS relevance order, each with the index n at which the supplied run begins. For the best hit rate supply about 6 terms and leave off the first one or two, since sources disagree on where a sequence starts. OEIS matches only the first terms of each entry (its data line, at most about 270 characters), not its b-file, so a run from far into a sequence is not found. Takes up to 60 terms, each an integer of at most 200 digits or the wildcard _ for one unknown term.","input":[{"n":"terms","t":"string","r":true},{"n":"matchSigns","t":"boolean"},{"n":"start","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"start","t":"number"},{"n":"nextStart","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"totalCount","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"oeis_search_sequences","server":74,"verb":"search","cls":"search","resolver":false,"title":"Search OEIS Sequences","description":"Search the OEIS using its query syntax: plain words, \"quoted phrases\", comma-separated terms, prefixes (keyword:, author:, name:, comment:, formula:, program:, xref:, id:), | for OR, and a leading - to exclude. Returns up to 10 summaries per page. For identifying a sequence from its terms, oeis_identify_sequence is the direct route.","input":[{"n":"query","t":"string","r":true},{"n":"sort","t":"enum(4)"},{"n":"start","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"start","t":"number"},{"n":"nextStart","t":"number"},{"n":"sort","t":"enum(4)"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"totalCount","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"oeis_get_sequence","server":74,"verb":"get","cls":"get","resolver":false,"title":"Get OEIS Sequence","description":"Fetch one OEIS entry by A-number. Returns the name, data-line terms, offset, keywords, author, dates, and the sections: comments, formulas (recurrences and generating functions), examples, programs (Maple, Mathematica, PARI, Python, …), references, links, cross-references, and extensions. When the sections together exceed 24,000 characters of serialized JSON, the core fields come back with a section outline instead; call again with sections to pick what to read. A selection past 100,000 bytes comes back in parts cut between items: pass nextFromItem as fromItem, with the same sections, for the next part.","input":[{"n":"aNumber","t":"string","r":true},{"n":"sections","t":"array<enum(8)>"},{"n":"fromItem","t":"object"}],"output":[{"n":"kind","t":"enum(2)"},{"n":"aNumber","t":"string"},{"n":"name","t":"string"},{"n":"terms","t":"array<string>"},{"n":"offset","t":"string"},{"n":"firstIndex","t":"number"},{"n":"keywords","t":"array<string>"},{"n":"author","t":"string"},{"n":"legacyIds","t":"array<string>"},{"n":"referenceCount","t":"number"},{"n":"revision","t":"number"},{"n":"created","t":"string"},{"n":"modified","t":"string"},{"n":"url","t":"string"},{"n":"bFileUrl","t":"string"},{"n":"comments","t":"array<string>"},{"n":"formulas","t":"array<string>"},{"n":"examples","t":"array<string>"},{"n":"programs","t":"array<object>"},{"n":"references","t":"array<string>"},{"n":"links","t":"array<object>"},{"n":"crossReferences","t":"array<string>"},{"n":"extensions","t":"array<string>"},{"n":"nextFromItem","t":"object"},{"n":"sections","t":"array<object>"},{"n":"outlineNotice","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"oeis_get_terms","server":74,"verb":"get","cls":"get","resolver":false,"title":"Get OEIS Sequence Terms","description":"List terms a(n) of a sequence with their indices n. Reads the entry's b-file when it has one — often thousands of terms beyond the data line — and otherwise the data line itself. Values are exact decimal strings of any size. A slice stops at limit terms (at most 1000 per call), at about 100,000 bytes, or at the end of one 1 MiB part of a larger b-file, whichever comes first; nextFromIndex continues it.","input":[{"n":"aNumber","t":"string","r":true},{"n":"fromIndex","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"aNumber","t":"string"},{"n":"source","t":"enum(2)"},{"n":"terms","t":"array<object>"},{"n":"firstAvailableIndex","t":"number"},{"n":"lastAvailableIndex","t":"number"},{"n":"nextFromIndex","t":"number"},{"n":"bFileUrl","t":"string"},{"n":"bFileSizeInBytes","t":"number"},{"n":"bFileCut","t":"boolean"},{"n":"url","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"oeis_get_cross_refs","server":74,"verb":"get","cls":"get","resolver":false,"title":"Get OEIS Cross-References","description":"List sequences related to an OEIS entry. direction outgoing returns the A-numbers named in the entry's cross-reference (Cf.) lines, with any parenthetical note beside each; direction incoming returns entries that mention this A-number anywhere. Each row carries the related sequence's name and first terms. 10 rows per page.","input":[{"n":"aNumber","t":"string","r":true},{"n":"direction","t":"enum(2)"},{"n":"start","t":"integer"}],"output":[{"n":"aNumber","t":"string"},{"n":"direction","t":"enum(2)"},{"n":"related","t":"array<object>"},{"n":"lines","t":"array<string>"},{"n":"start","t":"number"},{"n":"nextStart","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"totalCount","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"oeis_list_reference","server":74,"verb":"list","cls":"list","resolver":false,"title":"List OEIS Reference","description":"Look up OEIS vocabulary used by the other tools: keyword flags (nonn, core, tabl, cons, …), search syntax (prefixes, operators, wildcards, sort orders, paging window), and identifier conventions (A-numbers, legacy M/N numbers, offsets, b-files).","input":[{"n":"topic","t":"enum(3)","r":true}],"output":[{"n":"topic","t":"string"},{"n":"entries","t":"array<object>"},{"n":"notes","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"onebusaway_list_agencies","server":75,"verb":"list","cls":"list","resolver":false,"title":"List Transit Agencies","description":"List all transit agencies served by this OneBusAway instance. Returns agency IDs, names, contact info, timezone, and geographic coverage center. Agency IDs are needed for onebusaway_list_routes_for_agency and onebusaway_get_vehicles.","input":[],"output":[{"n":"agencies","t":"array<object>"},{"n":"limitExceeded","t":"boolean"},{"n":"count","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"onebusaway_find_stops","server":75,"verb":"find","cls":"search","resolver":false,"title":"Find Stops Near Location","description":"Find bus stops near a location. Returns stops within a radius, each with ID, name, direction, served routes, and wheelchair boarding status. Use stopId values from results to fetch real-time arrivals with onebusaway_get_arrivals. Optionally filter by stop code (the number printed on the stop sign, e.g. \"75403\").","input":[{"n":"lat","t":"number","r":true},{"n":"lon","t":"number","r":true},{"n":"radius","t":"number"},{"n":"query","t":"string"}],"output":[{"n":"stops","t":"array<object>"},{"n":"limitExceeded","t":"boolean"},{"n":"count","t":"number"},{"n":"query","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"onebusaway_find_routes","server":75,"verb":"find","cls":"search","resolver":false,"title":"Find Routes Near Location","description":"Find transit routes near a location, optionally filtered by name or number. Returns routes with IDs, short names, and descriptions. Use routeId values to fetch schedules, vehicles, or stop sequences.","input":[{"n":"lat","t":"number","r":true},{"n":"lon","t":"number","r":true},{"n":"radius","t":"number"},{"n":"latSpan","t":"number"},{"n":"lonSpan","t":"number"},{"n":"query","t":"string"}],"output":[{"n":"routes","t":"array<object>"},{"n":"limitExceeded","t":"boolean"},{"n":"count","t":"number"},{"n":"query","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"onebusaway_search_stops","server":75,"verb":"search","cls":"search","resolver":false,"title":"Search Stops by Name or Code","description":"Search for stops by name or code. Returns matching stops with IDs and coordinates. Use to resolve a human-readable stop name or number to a stop ID for arrivals lookups with onebusaway_get_arrivals.","input":[{"n":"query","t":"string","r":true},{"n":"maxCount","t":"integer"}],"output":[{"n":"stops","t":"array<object>"},{"n":"limitExceeded","t":"boolean"},{"n":"query","t":"string"},{"n":"count","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"onebusaway_search_routes","server":75,"verb":"search","cls":"search","resolver":false,"title":"Search Routes by Name or Number","description":"Search for routes by name or number. Returns matching routes with IDs. Use to resolve a route short name (e.g. \"44\") to a route ID for schedule or vehicle lookups with onebusaway_get_vehicles or onebusaway_get_schedule_for_route.","input":[{"n":"query","t":"string","r":true},{"n":"maxCount","t":"integer"}],"output":[{"n":"routes","t":"array<object>"},{"n":"limitExceeded","t":"boolean"},{"n":"query","t":"string"},{"n":"count","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"onebusaway_get_stop","server":75,"verb":"get","cls":"get","resolver":false,"title":"Get Stop Details","description":"Fetch details for a specific stop by ID. Returns the stop's name, coordinates, direction, served routes, and wheelchair accessibility. Stop IDs use agency-prefixed format: {agencyId}_{localId} (e.g. \"1_75403\" for Metro Transit stop 75403).","input":[{"n":"stopId","t":"string","r":true}],"output":[{"n":"id","t":"string"},{"n":"code","t":"string"},{"n":"name","t":"string"},{"n":"lat","t":"number"},{"n":"lon","t":"number"},{"n":"direction","t":"string"},{"n":"routeIds","t":"array<string>"},{"n":"wheelchairBoarding","t":"enum(3)"},{"n":"error","t":"object"}]},{"name":"onebusaway_get_route","server":75,"verb":"get","cls":"get","resolver":false,"title":"Get Route Details","description":"Fetch details for a specific route by ID. Returns short name, description, agency, route type, and schedule URL. Route IDs use agency-prefixed format: {agencyId}_{localId} (e.g. \"1_100259\").","input":[{"n":"routeId","t":"string","r":true}],"output":[{"n":"id","t":"string"},{"n":"shortName","t":"string"},{"n":"longName","t":"string"},{"n":"description","t":"string"},{"n":"agencyId","t":"string"},{"n":"agencyName","t":"string"},{"n":"type","t":"number"},{"n":"color","t":"string"},{"n":"url","t":"string"},{"n":"error","t":"object"}]},{"name":"onebusaway_list_routes_for_agency","server":75,"verb":"list","cls":"list","resolver":false,"title":"List Routes for Agency","description":"List all routes operated by an agency. Returns route IDs, short names, and descriptions. Use to enumerate an agency's full service before searching for a specific route. Get agencyId values from onebusaway_list_agencies.","input":[{"n":"agencyId","t":"string","r":true}],"output":[{"n":"routes","t":"array<object>"},{"n":"limitExceeded","t":"boolean"},{"n":"agencyId","t":"string"},{"n":"count","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"onebusaway_get_arrivals","server":75,"verb":"get","cls":"get","resolver":false,"title":"Get Real-Time Arrivals","description":"Real-time arrivals and departures at a stop. Returns predicted arrival times, schedule deviation (how many seconds late/early), vehicle positions, and any active service alerts. The predicted boolean on each arrival indicates whether GPS tracking backs the estimate — predicted=false means schedule-only. Use tripId from results for follow-up onebusaway_get_trip calls. Stop IDs use agency-prefixed format: {agencyId}_{localId} (e.g. \"1_75403\").","input":[{"n":"stopId","t":"string","r":true},{"n":"minutesBefore","t":"integer"},{"n":"minutesAfter","t":"integer"}],"output":[{"n":"stopId","t":"string"},{"n":"stopName","t":"string"},{"n":"currentTime","t":"number"},{"n":"arrivals","t":"array<object>"},{"n":"situations","t":"array<object>"},{"n":"queriedStop","t":"string"},{"n":"count","t":"number"},{"n":"windowMinutes","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"onebusaway_get_stop_context","server":75,"verb":"get","cls":"get","resolver":false,"title":"Get Stop Context","description":"Everything happening at a stop in one call: the stop's details, its real-time arrivals, and full detail for every service alert on the stop or on any arrival in the window. Returns what onebusaway_get_stop, onebusaway_get_arrivals, and one onebusaway_get_alert call per alert would, from a single upstream request — arrivals in the onebusaway_get_arrivals shape, alerts in the onebusaway_get_alert shape. The stop omits its served-route list; use onebusaway_get_stop for routeIds. Stop IDs use agency-prefixed format: {agencyId}_{localId} (e.g. \"1_75403\").","input":[{"n":"stopId","t":"string","r":true},{"n":"minutesBefore","t":"integer"},{"n":"minutesAfter","t":"integer"}],"output":[{"n":"stop","t":"object"},{"n":"currentTime","t":"number"},{"n":"arrivals","t":"array<object>"},{"n":"alerts","t":"array<object>"},{"n":"queriedStop","t":"string"},{"n":"windowMinutes","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"onebusaway_get_alert","server":75,"verb":"get","cls":"get","resolver":false,"title":"Get Service Alert Detail","description":"Fetch full detail for a service alert (situation) by ID. Returns the summary, description, reason (e.g. detour, construction), affected stops and routes, consequence description, and active time windows. Situation IDs appear in onebusaway_get_arrivals responses under situationIds and situations[].id.","input":[{"n":"situationId","t":"string","r":true}],"output":[{"n":"id","t":"string"},{"n":"summary","t":"string"},{"n":"description","t":"string"},{"n":"reason","t":"string"},{"n":"severity","t":"string"},{"n":"consequenceMessage","t":"string"},{"n":"affects","t":"array<object>"},{"n":"consequences","t":"array<object>"},{"n":"activeWindows","t":"array<object>"},{"n":"url","t":"string"},{"n":"error","t":"object"}]},{"name":"onebusaway_get_trip","server":75,"verb":"get","cls":"get","resolver":false,"title":"Get Trip Status","description":"Real-time status and stop sequence for a trip. Returns vehicle position, schedule deviation, current phase, and remaining stops. Use tripId from onebusaway_get_arrivals to look up a specific vehicle's progress.","input":[{"n":"tripId","t":"string","r":true},{"n":"serviceDateMs","t":"integer"},{"n":"includeSchedule","t":"boolean"}],"output":[{"n":"tripId","t":"string"},{"n":"routeShortName","t":"string"},{"n":"tripHeadsign","t":"string"},{"n":"blockId","t":"string"},{"n":"status","t":"object"},{"n":"schedule","t":"array<object>"},{"n":"situations","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"onebusaway_get_block","server":75,"verb":"get","cls":"get","resolver":false,"title":"Get Block Schedule","description":"Fetch the full-day block schedule for a vehicle by block ID. A block is the ordered sequence of trips a single vehicle makes in one service day. Returns all trips in order with their stop times. Useful for 'when will this bus return?' and fleet tracking. Block IDs appear as blockId in onebusaway_get_trip responses; obtain a tripId from onebusaway_get_arrivals first.","input":[{"n":"blockId","t":"string","r":true}],"output":[{"n":"blockId","t":"string"},{"n":"activeServiceIds","t":"array<string>"},{"n":"inactiveServiceIds","t":"array<string>"},{"n":"trips","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"onebusaway_get_vehicles","server":75,"verb":"get","cls":"get","resolver":false,"title":"Get Real-Time Vehicle Positions","description":"Real-time positions of all active vehicles for an agency. Optionally filter to a single route (client-side). Returns GPS coordinates, heading, schedule deviation, and current trip. Useful for \"where are all the buses on route X right now?\" Use agencyId values from onebusaway_list_agencies.","input":[{"n":"agencyId","t":"string","r":true},{"n":"routeId","t":"string"}],"output":[{"n":"vehicles","t":"array<object>"},{"n":"limitExceeded","t":"boolean"},{"n":"agencyId","t":"string"},{"n":"routeId","t":"string"},{"n":"count","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"onebusaway_get_schedule_for_stop","server":75,"verb":"get","cls":"get","resolver":false,"title":"Get Stop Schedule","description":"Full-day departure schedule for a stop. Lists every departure by route and direction for the specified date (defaults to today). Useful for planning or when real-time data isn't needed. For live predictions, use onebusaway_get_arrivals instead.","input":[{"n":"stopId","t":"string","r":true},{"n":"date","t":"const|string"}],"output":[{"n":"stopId","t":"string"},{"n":"stopName","t":"string"},{"n":"serviceDateMs","t":"number"},{"n":"routes","t":"array<object>"},{"n":"queriedStop","t":"string"},{"n":"date","t":"string"},{"n":"routeCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"onebusaway_get_schedule_for_route","server":75,"verb":"get","cls":"get","resolver":false,"title":"Get Route Schedule","description":"Full-day schedule for a route — all trips, stop sequences, and departure times for the specified date (defaults to today). Returns up to all trips for the route. For live predictions, use onebusaway_get_arrivals at specific stops instead.","input":[{"n":"routeId","t":"string","r":true},{"n":"date","t":"const|string"}],"output":[{"n":"routeId","t":"string"},{"n":"routeShortName","t":"string"},{"n":"serviceDateMs","t":"number"},{"n":"trips","t":"array<object>"},{"n":"queriedRoute","t":"string"},{"n":"date","t":"string"},{"n":"tripCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openmeteo_search_locations","server":76,"verb":"search","cls":"search","resolver":false,"title":"Openmeteo Search Locations","description":"Resolve a place name to ranked coordinate matches with country, region, elevation, timezone, and population. Required prerequisite for name-based queries — all weather tools take latitude/longitude, not place names. Search by a bare place name (city, region, or landmark); never fold a qualifier into it — pass \"Baoding\", not \"Baoding Hebei\", and \"Paris\", not \"Paris, France\". To disambiguate places that share a name, set the country input (ISO 3166-1 alpha-2, e.g. \"US\") and/or read the admin1 and country fields on each ranked result — admin1 is a result field for choosing among matches, not a search input. Returns up to 10 matches ranked by population/relevance.","input":[{"n":"name","t":"string","r":true},{"n":"country","t":"string"},{"n":"count","t":"integer"},{"n":"language","t":"string"}],"output":[{"n":"results","t":"array<object>"},{"n":"count","t":"number"},{"n":"notice","t":"string"},{"n":"effective_language","t":"string"},{"n":"error","t":"object"}]},{"name":"openmeteo_get_elevation","server":76,"verb":"get","cls":"get","resolver":false,"title":"Openmeteo Get Elevation","description":"Terrain elevation from the Copernicus Digital Elevation Model (~90m resolution) for one or more coordinate pairs. Accepts up to 1,000 pairs and samples the first 100 in one upstream request; when more were submitted, unprocessed_count says how many remain and next_offset is where to resume — resubmit latitudes.slice(next_offset) and longitudes.slice(next_offset) of the arrays just sent, until next_offset is null. Open-Meteo counts each sampled pair as one call against its per-IP limit of 600 a minute, so a seventh full slice inside one minute comes back rate_limited — space later slices about a minute apart. Useful for geographic context, elevation-adjusted weather interpretation, or route planning. A point the DEM has no value for (latitude 90) returns elevation_m null; the other points in the call are unaffected.","input":[{"n":"latitudes","t":"array<number>","r":true},{"n":"longitudes","t":"array<number>","r":true}],"output":[{"n":"elevations","t":"array<object>"},{"n":"unprocessed_count","t":"number"},{"n":"next_offset","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openmeteo_get_forecast","server":76,"verb":"get","cls":"get","resolver":false,"title":"Openmeteo Get Forecast","description":"Weather forecast for coordinates: hourly and/or daily variables for up to 16 days ahead, with optional past_days (up to 92) for recent history. Use past_days instead of openmeteo_get_historical for dates within the last 1–5 days, since the archive’s ERA5 components lag by up to ~5 days. Returns per-timestamp records — each hourly entry contains a \"time\" field (ISO 8601) plus one key per requested variable; each daily entry contains a \"time\" field (YYYY-MM-DD) plus requested variables. Common hourly variables: temperature_2m, precipitation, wind_speed_10m, relative_humidity_2m, cloud_cover, uv_index, apparent_temperature, precipitation_probability, weather_code, surface_pressure, visibility, wind_direction_10m, wind_gusts_10m, dew_point_2m. Common daily variables: temperature_2m_max, temperature_2m_min, precipitation_sum, wind_speed_10m_max, sunrise, sunset, uv_index_max, precipitation_hours, weather_code. Set current_variables for conditions at this instant — Open-Meteo serves those from 15-minute model data, which is more precise than picking the nearest hourly row, and the response carries a current object plus a current_units map. Set models to compare deterministic models side by side (e.g., [\"ncep_gfs_seamless\", \"ecmwf_ifs025\", \"dwd_icon_seamless\"]) — where they disagree, the forecast is uncertain. With 2+ models every hourly and daily key carries the model name as a suffix (temperature_2m_ecmwf_ifs025); with models omitted the data is Open-Meteo’s best_match blend. A wide window — a large past_days plus many hourly variables — produces thousands of records; these spill to a DataCanvas when canvas is enabled, returning canvas_id and table_name with truncated: true — inspect the staged columns with openmeteo_dataframe_describe, then query the full set with openmeteo_dataframe_query. With canvas disabled they return a bounded preview instead. At least one of current_variables, hourly_variables, or daily_variables is required.","input":[{"n":"latitude","t":"number","r":true},{"n":"longitude","t":"number","r":true},{"n":"current_variables","t":"array<string>"},{"n":"hourly_variables","t":"array<string>"},{"n":"daily_variables","t":"array<string>"},{"n":"models","t":"array<string>"},{"n":"forecast_days","t":"integer"},{"n":"past_days","t":"integer"},{"n":"temperature_unit","t":"enum(2)"},{"n":"wind_speed_unit","t":"enum(4)"},{"n":"precipitation_unit","t":"enum(2)"},{"n":"timezone","t":"string"},{"n":"canvas_id","t":"string"}],"output":[{"n":"latitude","t":"number"},{"n":"longitude","t":"number"},{"n":"elevation","t":"number"},{"n":"timezone","t":"string"},{"n":"utc_offset_seconds","t":"number"},{"n":"models","t":"array<string>"},{"n":"record_count","t":"number"},{"n":"current","t":"object"},{"n":"hourly","t":"array<object>"},{"n":"daily","t":"array<object>"},{"n":"current_units","t":"object"},{"n":"hourly_units","t":"object"},{"n":"daily_units","t":"object"},{"n":"canvas_id","t":"string"},{"n":"table_name","t":"string"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openmeteo_get_historical","server":76,"verb":"get","cls":"get","resolver":false,"title":"Openmeteo Get Historical","description":"Historical weather from the Open-Meteo reanalysis archive (1940–present). Requires start_date and end_date (ISO 8601 date, e.g., \"2024-07-01\"). With models omitted the archive answers from Best Match, which blends IFS HRES, ERA5, and ERA5-Land seamlessly — so the source varies by date and no single update lag describes the response. Set models to pin a consistent source for a multi-decade series: the ERA5 family updates daily with about a 5-day delay, while IFS HRES has none, so for the last few days either request models: [\"ecmwf_ifs\"] or use openmeteo_get_forecast with past_days. Available models: best_match (default, blends IFS HRES + ERA5 + ERA5-Land), ecmwf_ifs (global 9 km, updated every 6 hours, no delay), ecmwf_ifs_analysis_long_window (global 9 km, daily, 2 days delay), era5_seamless (ERA5 and ERA5-Land combined), era5 (global 0.25° (~25 km), daily, 5 days delay), era5_land (global 0.1° (~11 km), daily, 5 days delay), era5_ensemble (global 0.5° (~55 km), daily, 5 days delay), cerra (Europe only, 5 km, no real-time updates). Uses the same variable names as the forecast API for direct comparison. Large date ranges (multi-year hourly) produce thousands of records — these spill to a DataCanvas when canvas is enabled, returning canvas_id and table_name with truncated: true; inspect the staged columns with openmeteo_dataframe_describe, then query the full set with openmeteo_dataframe_query. With canvas disabled they return a bounded preview instead. At least one of hourly_variables or daily_variables is required.","input":[{"n":"latitude","t":"number","r":true},{"n":"longitude","t":"number","r":true},{"n":"start_date","t":"string","r":true},{"n":"end_date","t":"string","r":true},{"n":"hourly_variables","t":"array<string>"},{"n":"daily_variables","t":"array<string>"},{"n":"models","t":"array<string>"},{"n":"temperature_unit","t":"enum(2)"},{"n":"wind_speed_unit","t":"enum(4)"},{"n":"precipitation_unit","t":"enum(2)"},{"n":"timezone","t":"string"},{"n":"canvas_id","t":"string"}],"output":[{"n":"latitude","t":"number"},{"n":"longitude","t":"number"},{"n":"elevation","t":"number"},{"n":"timezone","t":"string"},{"n":"models","t":"array<string>"},{"n":"date_range","t":"object"},{"n":"record_count","t":"number"},{"n":"hourly","t":"array<object>"},{"n":"daily","t":"array<object>"},{"n":"hourly_units","t":"object"},{"n":"daily_units","t":"object"},{"n":"canvas_id","t":"string"},{"n":"table_name","t":"string"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openmeteo_get_marine","server":76,"verb":"get","cls":"get","resolver":false,"title":"Openmeteo Get Marine","description":"Marine wave and ocean conditions for a coastal or ocean coordinate: wave height, wave period, wave direction, wind-wave height, swell height, sea-surface temperature. Forecast horizon up to 8 days, with optional past_days (up to 92) for recent history — or start_date and end_date together for an archive range, which returns real wave values back to at least 2022. One window per call: a date range is mutually exclusive with forecast_days and past_days, and needs both ends — a lone start_date or end_date is rejected. Returns per-timestamp records — each entry contains a \"time\" field plus one key per requested variable. Best for open-ocean and coastal exposed points — sheltered water such as a sound or bay returns near-zero wave values, and a land point returns null values, which the notice reports. Common hourly variables: wave_height, wave_direction, wave_period, wind_wave_height, wind_wave_direction, wind_wave_period, swell_wave_height, swell_wave_direction, swell_wave_period. Common daily: wave_height_max, wave_direction_dominant, wave_period_max. Note: ocean_current_velocity is null for non-open-ocean coordinates. Set current_variables for conditions at this instant — Open-Meteo serves those from 15-minute model data, and the response carries a current object plus a current_units map, alongside either window. length_unit \"imperial\" returns heights in ft, wind_speed_unit sets the ocean_current_velocity unit, and temperature_unit the sea_surface_temperature unit — converted upstream, with every unit read from the *_units maps. A wide window — a large past_days or date range plus many variables — produces thousands of records; these spill to a DataCanvas when canvas is enabled, returning canvas_id and table_name with truncated: true — inspect the staged columns with openmeteo_dataframe_describe, then query the full set with openmeteo_dataframe_query. With canvas disabled they return a bounded preview instead. At least one of current_variables, hourly_variables, or daily_variables is required.","input":[{"n":"latitude","t":"number","r":true},{"n":"longitude","t":"number","r":true},{"n":"current_variables","t":"array<string>"},{"n":"hourly_variables","t":"array<string>"},{"n":"daily_variables","t":"array<string>"},{"n":"forecast_days","t":"integer"},{"n":"past_days","t":"integer"},{"n":"start_date","t":"string"},{"n":"end_date","t":"string"},{"n":"length_unit","t":"enum(2)"},{"n":"wind_speed_unit","t":"enum(4)"},{"n":"temperature_unit","t":"enum(2)"},{"n":"timezone","t":"string"},{"n":"canvas_id","t":"string"}],"output":[{"n":"latitude","t":"number"},{"n":"longitude","t":"number"},{"n":"timezone","t":"string"},{"n":"record_count","t":"number"},{"n":"current","t":"object"},{"n":"hourly","t":"array<object>"},{"n":"daily","t":"array<object>"},{"n":"current_units","t":"object"},{"n":"hourly_units","t":"object"},{"n":"daily_units","t":"object"},{"n":"canvas_id","t":"string"},{"n":"table_name","t":"string"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openmeteo_get_air_quality","server":76,"verb":"get","cls":"get","resolver":false,"title":"Openmeteo Get Air Quality","description":"Modeled CAMS (Copernicus Atmosphere Monitoring Service) air quality: PM2.5, PM10, nitrogen dioxide, sulphur dioxide, ozone, carbon monoxide, dust, pollen, and European/US AQI indices. This is modeled grid data, not measured station readings — for measured data, use openaq-mcp-server. Forecast horizon up to 7 days, with optional past_days (up to 92) for recent history — or start_date and end_date together for an archive range; the CAMS global archive begins in August 2022, and earlier dates return rows of nulls. One window per call: a date range is mutually exclusive with forecast_days and past_days, and needs both ends — a lone start_date or end_date is rejected. Common variables: pm2_5, pm10, carbon_monoxide, nitrogen_dioxide, sulphur_dioxide, ozone, dust, european_aqi, us_aqi, alder_pollen, birch_pollen, grass_pollen, mugwort_pollen, olive_pollen, ragweed_pollen. Pollen is modeled for Europe only, and only in pollen season — elsewhere the pollen values come back null, and the notice names them. Set current_variables for pollutant and AQI values at this instant — returned as a current object plus a current_units map, and enough on its own without hourly_variables; the block’s interval field is its aggregation interval in seconds (3600 on this endpoint). A wide window — a large past_days or date range plus many variables — produces thousands of records; these spill to a DataCanvas when canvas is enabled, returning canvas_id and table_name with truncated: true — inspect the staged columns with openmeteo_dataframe_describe, then query the full set with openmeteo_dataframe_query. With canvas disabled they return a bounded preview instead.","input":[{"n":"latitude","t":"number","r":true},{"n":"longitude","t":"number","r":true},{"n":"current_variables","t":"array<string>"},{"n":"hourly_variables","t":"array<string>"},{"n":"forecast_days","t":"integer"},{"n":"past_days","t":"integer"},{"n":"start_date","t":"string"},{"n":"end_date","t":"string"},{"n":"timezone","t":"string"},{"n":"canvas_id","t":"string"}],"output":[{"n":"latitude","t":"number"},{"n":"longitude","t":"number"},{"n":"timezone","t":"string"},{"n":"record_count","t":"number"},{"n":"current","t":"object"},{"n":"hourly","t":"array<object>"},{"n":"current_units","t":"object"},{"n":"hourly_units","t":"object"},{"n":"data_source","t":"const"},{"n":"canvas_id","t":"string"},{"n":"table_name","t":"string"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openmeteo_get_ensemble","server":76,"verb":"get","cls":"get","resolver":false,"title":"Openmeteo Get Ensemble","description":"Probabilistic ensemble weather forecast — up to 64 ensemble members, up to 35 days ahead with optional past_days (0–92). Most models end within 16 days; a model's columns are null past its horizon, and the response notice names where its data ends. Each member's values appear as separate columns named with a member suffix (e.g. temperature_2m_member01, temperature_2m_member02). Use the spread across members to compute exceedance probabilities, quantify forecast uncertainty, and build decision thresholds. Available models: ecmwf_ifs025_ensemble (51 members, global 0.25°), ecmwf_aifs025_ensemble (51, global 0.25°), ecmwf_ifs_europe_ensemble (51, Europe 9 km), ecmwf_aifs_europe_ensemble (51, Europe 31 km), google_weathernext2_ensemble (64, global 0.25°), ncep_gefs_seamless (31, global blend), ncep_gefs025 (31, global 0.25°), ncep_gefs05 (31, global 50 km, 35 days), ncep_aigefs025 (31, global 0.25°), icon_seamless_eps (20–40, global/Europe blend), icon_global_eps (40, global 26 km), icon_eu_eps (40, Europe 13 km), icon_d2_eps (20, Central Europe 2 km), gem_global_ensemble (21, global 0.25°), bom_access_global_ensemble (18, global 40 km), ukmo_global_ensemble_20km (18, global 20 km), ukmo_uk_ensemble_2km (3, UK 2 km), meteoswiss_icon_ch1_ensemble (11, Central Europe 1 km), meteoswiss_icon_ch2_ensemble (21, Central Europe 2 km). Omit models to use ecmwf_ifs025_ensemble. A regional model returns no data outside the area it covers; that comes back as an input error naming the coverage gap, not a transient failure, so pick a global model or move the coordinate inside the region rather than retrying. A model name this list does not carry is still sent upstream, so a newly added one keeps working. Large multi-member, multi-day pulls produce thousands of records and spill to a DataCanvas when canvas is enabled, returning canvas_id and table_name with truncated: true — inspect the staged columns with openmeteo_dataframe_describe, then query the full set with openmeteo_dataframe_query. With canvas disabled they return a bounded preview instead. At least one of hourly_variables or daily_variables is required.","input":[{"n":"latitude","t":"number","r":true},{"n":"longitude","t":"number","r":true},{"n":"hourly_variables","t":"array<string>"},{"n":"daily_variables","t":"array<string>"},{"n":"models","t":"string"},{"n":"forecast_days","t":"integer"},{"n":"past_days","t":"integer"},{"n":"temperature_unit","t":"enum(2)"},{"n":"wind_speed_unit","t":"enum(4)"},{"n":"precipitation_unit","t":"enum(2)"},{"n":"timezone","t":"string"},{"n":"canvas_id","t":"string"}],"output":[{"n":"latitude","t":"number"},{"n":"longitude","t":"number"},{"n":"elevation","t":"number"},{"n":"timezone","t":"string"},{"n":"model","t":"string"},{"n":"member_count","t":"number"},{"n":"hourly","t":"array<object>"},{"n":"daily","t":"array<object>"},{"n":"hourly_units","t":"object"},{"n":"daily_units","t":"object"},{"n":"record_count","t":"number"},{"n":"canvas_id","t":"string"},{"n":"table_name","t":"string"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openmeteo_get_flood","server":76,"verb":"get","cls":"get","resolver":false,"title":"Openmeteo Get Flood","description":"GloFAS (Global Flood Awareness System) daily river discharge (m³/s) for the largest modeled river within 5 km of the given coordinates — no river ID needed. That river is not always the closest one: at 5 km resolution a point near a confluence or a pair of parallel channels can resolve to an unintended reach. When the returned discharge looks unrepresentative for the intended river, Open-Meteo suggests varying the coordinate by about 0.1° and comparing the values. One mode per call: forecast_days for the outlook, or start_date and end_date together for a date range from 1984-01-01. The two modes are mutually exclusive, and a date range needs both ends — a lone start_date or end_date is rejected. forecast_days accepts up to 210, but the current GloFAS run sets how far the data reaches (about six months ahead); later days come back null and the notice names where the data ends. What a date range holds depends on the model. Omitting models reads seamless_v4: consolidated_v4 reanalysis before 2023-08-05, then forecast-run discharge from 2023-08-05 on, so a range crossing that date changes source mid-series. Set models to pin a source: seamless_v4 (default — consolidated_v4 reanalysis before 2023-08-05, forecast_v4 runs from 2023-08-05 into the live forecast), consolidated_v4 (reanalysis from 1984 through 2025-05-31; null after it and on every forecast_days call), forecast_v4 (forecast runs from 2023-06-01 into the live forecast; null before). consolidated_v4 is the only way to read reanalysis for 2023-08-05 through 2025-05-31. With 2+ models every daily column is suffixed with the model name (river_discharge_consolidated_v4). Available daily variables: \"river_discharge\" (the daily discharge value; the mean across ensemble members is \"river_discharge_mean\"), and the ensemble statistics \"river_discharge_mean\", \"river_discharge_median\", \"river_discharge_min\", \"river_discharge_max\", \"river_discharge_p25\" (25th percentile), and \"river_discharge_p75\" (75th percentile). The statistics carry spread across ensemble members on forecast-run days — the forecast_days outlook, and date-range days from 2023-08-05 under seamless_v4 or forecast_v4. On reanalysis days (seamless_v4 before 2023-08-05, consolidated_v4 through 2025-05-31) they repeat river_discharge and are not uncertainty estimates. Returns null for coordinates far from any river or in areas without GloFAS coverage. A wide date range produces thousands of daily records and spills to a DataCanvas when canvas is enabled, returning canvas_id and table_name with truncated: true — inspect the staged columns with openmeteo_dataframe_describe, then query the full set with openmeteo_dataframe_query. With canvas disabled it returns a bounded preview instead.","input":[{"n":"latitude","t":"number","r":true},{"n":"longitude","t":"number","r":true},{"n":"daily_variables","t":"array<string>"},{"n":"forecast_days","t":"integer"},{"n":"start_date","t":"string"},{"n":"end_date","t":"string"},{"n":"models","t":"array<string>"},{"n":"timezone","t":"string"},{"n":"canvas_id","t":"string"}],"output":[{"n":"latitude","t":"number"},{"n":"longitude","t":"number"},{"n":"timezone","t":"string"},{"n":"models","t":"array<string>"},{"n":"record_count","t":"number"},{"n":"daily","t":"array<object>"},{"n":"daily_units","t":"object"},{"n":"canvas_id","t":"string"},{"n":"table_name","t":"string"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openmeteo_get_climate","server":76,"verb":"get","cls":"get","resolver":false,"title":"Openmeteo Get Climate","description":"Long-range climate projections from bias-corrected daily CMIP6 models, covering 1950-01-01 to 2050-12-31 at any coordinate. Answers \"what will conditions look like through 2050?\" — the future-projection counterpart to openmeteo_get_historical (the observed archive, what happened). Daily resolution only. Available models: CMCC_CM2_VHR4, FGOALS_f3_H, HiRAM_SIT_HR, MRI_AGCM3_2_S, EC_Earth3P_HR, MPI_ESM1_2_XR, NICAM16_8S. A model name outside that list is sent upstream rather than rejected here, so a model Open-Meteo adds later still works; if upstream rejects the request, the error names the offending model on its own rather than the whole requested list. With 2+ models each variable appears once per model with the model name as suffix (e.g. temperature_2m_max_CMCC_CM2_VHR4); a single or omitted model returns plain variable names. Not all models carry all variables — missing combinations return null. Multi-decade daily pulls across several models produce thousands of records and spill to a DataCanvas when canvas is enabled, returning canvas_id and table_name with truncated: true — inspect the staged columns with openmeteo_dataframe_describe, then query the full set with openmeteo_dataframe_query. With canvas disabled they return a bounded preview instead.","input":[{"n":"latitude","t":"number","r":true},{"n":"longitude","t":"number","r":true},{"n":"start_date","t":"string","r":true},{"n":"end_date","t":"string","r":true},{"n":"daily_variables","t":"array<string>"},{"n":"models","t":"array<string>"},{"n":"temperature_unit","t":"enum(2)"},{"n":"wind_speed_unit","t":"enum(4)"},{"n":"precipitation_unit","t":"enum(2)"},{"n":"timezone","t":"string"},{"n":"canvas_id","t":"string"}],"output":[{"n":"latitude","t":"number"},{"n":"longitude","t":"number"},{"n":"elevation","t":"number"},{"n":"timezone","t":"string"},{"n":"models","t":"array<string>"},{"n":"date_range","t":"object"},{"n":"record_count","t":"number"},{"n":"daily","t":"array<object>"},{"n":"daily_units","t":"object"},{"n":"canvas_id","t":"string"},{"n":"table_name","t":"string"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openmeteo_dataframe_query","server":76,"verb":"dataframe","cls":"query","resolver":false,"title":"Openmeteo Dataframe Query","description":"Run a read-only SQL SELECT against tables staged on a DataCanvas by openmeteo_get_forecast, openmeteo_get_historical, openmeteo_get_marine, openmeteo_get_air_quality, openmeteo_get_ensemble, openmeteo_get_flood, or openmeteo_get_climate. Pass the canvas_id returned when any of those tools spills (truncated: true), and reference the exact table_name those tools return alongside it. Call openmeteo_dataframe_describe to list staged tables and their columns when you need to discover names. Returns up to 100 leading rows — fewer when wide rows would pass the 80,000-character inline ceiling — plus row_count — exact, or a lower bound flagged by count_error when counting fails or runs past 5 seconds; page the rest with LIMIT / OFFSET.","input":[{"n":"canvas_id","t":"string","r":true},{"n":"sql","t":"string","r":true}],"output":[{"n":"rows","t":"array<object>"},{"n":"row_count","t":"number"},{"n":"count_error","t":"string"},{"n":"canvas_id","t":"string"},{"n":"error","t":"object"}]},{"name":"openmeteo_dataframe_describe","server":76,"verb":"dataframe","cls":"query","resolver":false,"title":"Openmeteo Dataframe Describe","description":"List the tables and their columns on a DataCanvas staged by openmeteo_get_forecast, openmeteo_get_historical, openmeteo_get_marine, openmeteo_get_air_quality, openmeteo_get_ensemble, openmeteo_get_flood, or openmeteo_get_climate. Call this first to discover table names before querying with openmeteo_dataframe_query.","input":[{"n":"canvas_id","t":"string","r":true}],"output":[{"n":"canvas_id","t":"string"},{"n":"tables","t":"array<object>"},{"n":"expires_at","t":"string"},{"n":"error","t":"object"}]},{"name":"openalex_resolve_name","server":77,"verb":"resolve","cls":"resolve","resolver":true,"title":"Openalex Resolve Name","description":"Resolve a name or an identifier to an OpenAlex ID. ALWAYS use this before filtering by entity — names are ambiguous, IDs are not. A name returns up to 10 autocomplete matches with disambiguation hints. An identifier — OpenAlex ID, DOI, ORCID, ROR, PMID, or ISSN, bare or in URL form — resolves directly to the record it addresses instead of running a name search. Short names share the bare OpenAlex ID shape (keyword p53 reads as publisher ID P53), so a bare OpenAlex ID that resolves nothing is searched as a name next. Two identifiers can address more than one entity type: a ROR names an organization's institution, funder, and publisher records alike, so it returns each one that exists (institution first) unless entity_type picks one of those three; and a Crossref Funder Registry DOI (10.13039/…) resolves to the funder unless entity_type is works. A PMCID is recognized as well, bare or as a PubMed Central URL, but OpenAlex indexes no PMCIDs, so it resolves nothing — pass the work's PMID or DOI instead.","input":[{"n":"entity_type","t":"enum(8)"},{"n":"query","t":"string","r":true},{"n":"filters","t":"object"}],"output":[{"n":"results","t":"array<object>"},{"n":"notice","t":"string"},{"n":"budget","t":"object"},{"n":"error","t":"object"}]},{"name":"openalex_search_entities","server":77,"verb":"search","cls":"search","resolver":false,"title":"Openalex Search Entities","description":"Search, filter, sort, or retrieve by ID. Covers all OpenAlex entity types (works, authors, sources, institutions, topics, keywords, publishers, funders). Pass `id` to retrieve a single entity. Otherwise, use `query` and/or `filters` for discovery. Filters take a record object; an unambiguous native string such as \"issn:0920-8542\" is also accepted when enabled and disclosed in `notice`. Native clauses split on commas outside paired double quotes and the first colon; duplicate keys and bare fragments are rejected. Any filter value sent unquoted must have paired double quotes; balanced search phrases remain valid. Supports keyword search with boolean operators, exact phrase matching, and AI semantic search. Use openalex_resolve_name to resolve names to IDs before filtering. Searches and ID lookups return a curated set of fields by default; pass `select` to override with specific fields, or `[\"*\"]` for the full record. Responses cap at 64,000 bytes per surface unless the least a call can return is larger (`over_budget`); `omitted` and `windows` give the calls that continue a cut, and `slice` pages a long array.","input":[{"n":"entity_type","t":"enum(8)","r":true},{"n":"id","t":"string"},{"n":"query","t":"string"},{"n":"search_mode","t":"enum(3)"},{"n":"filters","t":"object"},{"n":"sort","t":"string"},{"n":"select","t":"array<string>"},{"n":"per_page","t":"integer"},{"n":"cursor","t":"string"},{"n":"page","t":"integer"},{"n":"sample","t":"integer"},{"n":"seed","t":"string"},{"n":"slice","t":"object"}],"output":[{"n":"meta","t":"object"},{"n":"results","t":"array<object>"},{"n":"omitted","t":"object"},{"n":"windows","t":"array<object>"},{"n":"over_budget","t":"boolean"},{"n":"echo","t":"string"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"budget","t":"object"},{"n":"error","t":"object"}]},{"name":"openalex_analyze_trends","server":77,"verb":"analyze","cls":"analyze","resolver":false,"title":"Openalex Analyze Trends","description":"Aggregate OpenAlex entities into groups and count them. Use for trend analysis (group works by publication_year), distribution analysis (group by oa_status, type, country), and comparative analysis (group by institution or topic). Combine with filters to scope the analysis. Returns up to 200 groups per page — use order \"key\" and cursor pagination for fields with many distinct values. OpenAlex can wrap a key-ordered walk to earlier groups. Stop when a page's first key repeats an earlier key, or when a page is short or empty.","input":[{"n":"entity_type","t":"enum(8)","r":true},{"n":"group_by","t":"string","r":true},{"n":"filters","t":"object"},{"n":"include_unknown","t":"boolean"},{"n":"per_page","t":"integer"},{"n":"order","t":"enum(2)"},{"n":"cursor","t":"string"}],"output":[{"n":"meta","t":"object"},{"n":"groups","t":"array<object>"},{"n":"echo","t":"string"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"budget","t":"object"},{"n":"error","t":"object"}]},{"name":"openalex_get_citation_graph","server":77,"verb":"get","cls":"get","resolver":false,"title":"Openalex Get Citation Graph","description":"Walk the citation graph one hop from a seed work. Direction picks the edge: incoming citations (`cites`), the seed's own references (`cited_by`), or OpenAlex's algorithmically-related works (`related_to`). Note: `direction` follows OpenAlex's filter convention, which inverts the common English reading — `cites` returns works that cite the seed; `cited_by` returns works the seed cites. Results use the works schema; combine with filters/sort to narrow further. Responses cap at 64,000 bytes per surface unless the least a call can return is larger (`over_budget`); `omitted` and `windows` give the openalex_search_entities calls that continue a cut.","input":[{"n":"seed_id","t":"string","r":true},{"n":"direction","t":"enum(3)","r":true},{"n":"filters","t":"object"},{"n":"sort","t":"string"},{"n":"select","t":"array<string>"},{"n":"per_page","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"meta","t":"object"},{"n":"results","t":"array<object>"},{"n":"omitted","t":"object"},{"n":"windows","t":"array<object>"},{"n":"over_budget","t":"boolean"},{"n":"echo","t":"string"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"budget","t":"object"},{"n":"error","t":"object"}]},{"name":"openalex_describe_fields","server":77,"verb":"describe","cls":"describe","resolver":false,"title":"Openalex Describe Fields","description":"List valid field names for an OpenAlex entity type and context (filter, group_by, or select). Use proactively before constructing a filter or group_by to avoid invalid-field 400 errors. Pass `query` to rank the list by name similarity — useful when you have a partial or guessed field name. Ranking never drops a field: the full list comes back either way.","input":[{"n":"entity_type","t":"enum(8)","r":true},{"n":"context","t":"enum(3)","r":true},{"n":"query","t":"string"}],"output":[{"n":"entity_type","t":"string"},{"n":"context","t":"string"},{"n":"fields","t":"array<string>"},{"n":"total","t":"number"},{"n":"error","t":"object"}]},{"name":"openchargemap_find_stations","server":78,"verb":"find","cls":"search","resolver":false,"title":"openchargemap-mcp-server: find stations","description":"Find EV charging stations from the global Open Charge Map registry near a point or within a bounding box. Provide either a center (latitude + longitude + distance) or a boundingbox; optionally scope to a country with countrycode. This tool is coordinate-native and does not geocode place names — resolve a place like \"Ballard, Seattle\" to coordinates with openstreetmap_search_places first, then pass them here. Filter by connector type, minimum power (kW), operator/network, usage type (public/free/membership), charge level, operational status, and minimum charge points. Filter IDs are integers — resolve a connector or network name to its ID with openchargemap_lookup_reference (e.g. \"CCS\" -> 33). Each result includes title, address, distance from the search point, connections (type, power, count), operator, access rules, registry operational status, and the last-verified date. Results come back one page at a time: when a page reports truncated, repeat the same search with the reported nextOffset to read the next one.","input":[{"n":"latitude","t":"number"},{"n":"longitude","t":"number"},{"n":"distance","t":"number"},{"n":"distanceUnit","t":"enum(2)"},{"n":"boundingbox","t":"object"},{"n":"countrycode","t":"string"},{"n":"connectiontypeid","t":"integer|array<integer>"},{"n":"minpowerkw","t":"number"},{"n":"operatorid","t":"integer|array<integer>"},{"n":"usagetypeid","t":"integer|array<integer>"},{"n":"levelid","t":"integer|array<integer>"},{"n":"statustypeid","t":"integer|array<integer>"},{"n":"minchargepoints","t":"integer"},{"n":"maxresults","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"stations","t":"array<object>"},{"n":"searchSummary","t":"string"},{"n":"attribution","t":"string"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"nextOffset","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openchargemap_get_station","server":78,"verb":"get","cls":"get","resolver":false,"title":"openchargemap-mcp-server: get station","description":"Get the full record for one Open Charge Map station by its numeric OCM ID. Returns every connection (type, level, power, current, quantity, per-connection status), the operator and network, usage and access restrictions (pay-at-location, membership, access key), the number of charge points, general comments, usage cost, the data provider, media, and verification recency. Set includeComments to also return community check-ins inline.","input":[{"n":"id","t":"integer","r":true},{"n":"includeComments","t":"boolean"}],"output":[{"n":"station","t":"object"},{"n":"reliabilityNote","t":"string"},{"n":"attribution","t":"string"},{"n":"error","t":"object"}]},{"name":"openchargemap_lookup_reference","server":78,"verb":"lookup","cls":"get","resolver":false,"title":"openchargemap-mcp-server: lookup reference","description":"Resolve Open Charge Map reference data to the integer IDs that openchargemap_find_stations filters require. Pick a category and pass a name or code to resolve — \"CCS\" or \"Tesla Supercharger\" -> a connectiontypeid, \"ChargePoint\" -> an operatorid, \"Public - Pay At Location\" -> a usagetypeid, \"France\" or \"FR\" -> a country. Omit the query to browse the whole category. Large categories come back one page at a time: when a page reports truncated, repeat the call with the reported nextOffset to read the next one.","input":[{"n":"category","t":"enum(7)","r":true},{"n":"query","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"category","t":"string"},{"n":"matches","t":"array<object>"},{"n":"filterParam","t":"string"},{"n":"snapshotDate","t":"string"},{"n":"source","t":"enum(2)"},{"n":"attribution","t":"string"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"nextOffset","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openchargemap_get_station_comments","server":78,"verb":"get","cls":"get","resolver":false,"title":"openchargemap-mcp-server: get station comments","description":"Read community check-ins and comments for one Open Charge Map station — the real-world reliability signal beyond the operator-reported registry status. Returns user comments and fault reports with ratings, dates, and the outcome the driver recorded (\"Charged Successfully\", \"Failed to Charge (Equipment Not Operational)\", …), alongside the station's current registry status and last-verified date, surfacing mismatches like \"listed operational, but the last few check-ins report a fault.\" A busy station's check-ins come back one page at a time: when a page reports truncated, repeat the call with the reported nextOffset to read the next one.","input":[{"n":"id","t":"integer","r":true},{"n":"maxresults","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"stationId","t":"number"},{"n":"stationTitle","t":"string"},{"n":"registryStatus","t":"string"},{"n":"registryStatusId","t":"number"},{"n":"isOperational","t":"boolean"},{"n":"dateLastVerified","t":"string"},{"n":"comments","t":"array<object>"},{"n":"totalComments","t":"number"},{"n":"reliabilityNote","t":"string"},{"n":"attribution","t":"string"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"nextOffset","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openfda_search_adverse_events","server":79,"verb":"search","cls":"search","resolver":false,"title":"Openfda Search Adverse Events","description":"Search adverse event reports across drugs, food, and devices. Use to investigate safety signals, find reports for a specific product, or explore reactions by demographics. With stage=true, call openfda_dataframe_describe for the staged columns, then openfda_dataframe_query for SQL.","input":[{"n":"category","t":"enum(3)","r":true},{"n":"search","t":"string"},{"n":"sort","t":"string"},{"n":"limit","t":"number"},{"n":"skip","t":"number"},{"n":"fields","t":"array<string>"},{"n":"stage","t":"boolean"},{"n":"canvas_id","t":"string"}],"output":[{"n":"meta","t":"object"},{"n":"results","t":"array<object>"},{"n":"page_bytes","t":"number"},{"n":"page_omitted","t":"number"},{"n":"page_largest_fields","t":"array<object>"},{"n":"projected_fields","t":"array<string>"},{"n":"canvas_id","t":"string"},{"n":"canvas_table","t":"string"},{"n":"spilled","t":"boolean"},{"n":"staged_rows","t":"number"},{"n":"truncated","t":"boolean"},{"n":"totalResults","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openfda_search_animal_events","server":79,"verb":"search","cls":"search","resolver":false,"title":"Openfda Search Animal Events","description":"Search adverse event reports for veterinary drugs and devices submitted to the FDA Center for Veterinary Medicine. Records include animal species, breed, age, weight, drug name and route, adverse reactions (using VeDDRA terminology), and outcome. Use to investigate safety signals for veterinary products, find reports by animal species or drug, or explore reaction patterns. Brand and manufacturer names are masked as \"MSK\" on every record (the FDA null flavor for withheld data), so find a product by active ingredient on drug.active_ingredients.name, unsuffixed. An ingredient search spans every product containing it and cannot attribute reports to one brand; drug.manufacturer.registration_number (the full value, e.g. \"USA-USFDACVM-N141426\") narrows it to one approval. With stage=true, call openfda_dataframe_describe for the staged columns, then openfda_dataframe_query for SQL.","input":[{"n":"search","t":"string"},{"n":"sort","t":"string"},{"n":"limit","t":"number"},{"n":"skip","t":"number"},{"n":"fields","t":"array<string>"},{"n":"stage","t":"boolean"},{"n":"canvas_id","t":"string"}],"output":[{"n":"meta","t":"object"},{"n":"results","t":"array<object>"},{"n":"page_bytes","t":"number"},{"n":"page_omitted","t":"number"},{"n":"page_largest_fields","t":"array<object>"},{"n":"projected_fields","t":"array<string>"},{"n":"canvas_id","t":"string"},{"n":"canvas_table","t":"string"},{"n":"spilled","t":"boolean"},{"n":"staged_rows","t":"number"},{"n":"truncated","t":"boolean"},{"n":"totalResults","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openfda_search_drug_shortages","server":79,"verb":"search","cls":"search","resolver":false,"title":"Openfda Search Drug Shortages","description":"Search FDA drug shortage records. Returns per-product shortage status, availability, therapeutic category, dosage form, manufacturer, and dates. Use to check whether a drug is currently in shortage, find all oncology drugs with supply issues, or retrieve the openfda block (brand_name, product_ndc, rxcui) to chain into openfda_get_drug_label or openfda_lookup_ndc. With stage=true, call openfda_dataframe_describe for the staged columns, then openfda_dataframe_query for SQL.","input":[{"n":"search","t":"string"},{"n":"sort","t":"string"},{"n":"limit","t":"number"},{"n":"skip","t":"number"},{"n":"fields","t":"array<string>"},{"n":"stage","t":"boolean"},{"n":"canvas_id","t":"string"}],"output":[{"n":"meta","t":"object"},{"n":"results","t":"array<object>"},{"n":"page_bytes","t":"number"},{"n":"page_omitted","t":"number"},{"n":"page_largest_fields","t":"array<object>"},{"n":"projected_fields","t":"array<string>"},{"n":"canvas_id","t":"string"},{"n":"canvas_table","t":"string"},{"n":"spilled","t":"boolean"},{"n":"staged_rows","t":"number"},{"n":"truncated","t":"boolean"},{"n":"totalResults","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openfda_search_recalls","server":79,"verb":"search","cls":"search","resolver":false,"title":"Openfda Search Recalls","description":"Search enforcement reports and recall actions across drugs, food, and devices. With stage=true, call openfda_dataframe_describe for the staged columns, then openfda_dataframe_query for SQL.","input":[{"n":"category","t":"enum(3)","r":true},{"n":"endpoint","t":"enum(2)"},{"n":"search","t":"string"},{"n":"sort","t":"string"},{"n":"limit","t":"number"},{"n":"skip","t":"number"},{"n":"fields","t":"array<string>"},{"n":"stage","t":"boolean"},{"n":"canvas_id","t":"string"}],"output":[{"n":"meta","t":"object"},{"n":"results","t":"array<object>"},{"n":"page_bytes","t":"number"},{"n":"page_omitted","t":"number"},{"n":"page_largest_fields","t":"array<object>"},{"n":"projected_fields","t":"array<string>"},{"n":"canvas_id","t":"string"},{"n":"canvas_table","t":"string"},{"n":"spilled","t":"boolean"},{"n":"staged_rows","t":"number"},{"n":"truncated","t":"boolean"},{"n":"totalResults","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openfda_search_tobacco_reports","server":79,"verb":"search","cls":"search","resolver":false,"title":"Openfda Search Tobacco Reports","description":"Search problem reports submitted to the FDA for tobacco products, including e-cigarettes, vaping products, cigarettes, and smokeless tobacco. Reports capture product type, reported health problems (e.g. seizure, chest pain), product problems (e.g. exploding battery), whether a non-user was affected, and submission date. Use to investigate safety signals, find reports by product type, or analyze health effects. With stage=true, call openfda_dataframe_describe for the staged columns, then openfda_dataframe_query for SQL.","input":[{"n":"search","t":"string"},{"n":"sort","t":"string"},{"n":"limit","t":"number"},{"n":"skip","t":"number"},{"n":"fields","t":"array<string>"},{"n":"stage","t":"boolean"},{"n":"canvas_id","t":"string"}],"output":[{"n":"meta","t":"object"},{"n":"results","t":"array<object>"},{"n":"page_bytes","t":"number"},{"n":"page_omitted","t":"number"},{"n":"page_largest_fields","t":"array<object>"},{"n":"projected_fields","t":"array<string>"},{"n":"canvas_id","t":"string"},{"n":"canvas_table","t":"string"},{"n":"spilled","t":"boolean"},{"n":"staged_rows","t":"number"},{"n":"truncated","t":"boolean"},{"n":"totalResults","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openfda_count_values","server":79,"verb":"count","cls":"query","resolver":false,"title":"Openfda Count Values","description":"Aggregate and tally unique values for any field across any openFDA endpoint. Returns ranked term-count pairs sorted by count descending. Pair with openfda_search_adverse_events, openfda_search_drug_approvals, openfda_search_device_clearances, openfda_search_recalls, openfda_get_drug_label, or openfda_lookup_ndc when sample records help interpret the aggregates.","input":[{"n":"endpoint","t":"enum(20)","r":true},{"n":"count","t":"string","r":true},{"n":"search","t":"string"},{"n":"limit","t":"number"}],"output":[{"n":"meta","t":"object"},{"n":"results","t":"array<object>"},{"n":"termCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"truncationCeiling","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openfda_describe_fields","server":79,"verb":"describe","cls":"describe","resolver":false,"title":"Openfda Describe Fields","description":"Return the searchable field paths for an openFDA endpoint, grouped by category with type and description. Use before constructing a search query to find the correct dotted field path — field names differ per endpoint and are not discoverable from the tool schema alone.","input":[{"n":"endpoint","t":"enum(20)","r":true}],"output":[{"n":"endpoint","t":"string"},{"n":"groups","t":"array<object>"},{"n":"queryTips","t":"string"},{"n":"error","t":"object"}]},{"name":"openfda_get_drug_label","server":79,"verb":"get","cls":"get","resolver":false,"title":"Openfda Get Drug Label","description":"Look up FDA drug labeling (package inserts / SPL documents). Check indications, warnings, dosage, contraindications, active ingredients, or any structured label section. A label runs to tens of thousands of tokens, so a page that exceeds the inline budget returns the list of available sections instead; re-call with sections to pull the ones you need.","input":[{"n":"search","t":"string","r":true},{"n":"sort","t":"string"},{"n":"limit","t":"number"},{"n":"skip","t":"number"},{"n":"sections","t":"array<string>"}],"output":[{"n":"meta","t":"object"},{"n":"kind","t":"enum(2)"},{"n":"results","t":"array<object>"},{"n":"outline","t":"array<object>"},{"n":"totalResults","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openfda_search_drug_approvals","server":79,"verb":"search","cls":"search","resolver":false,"title":"Openfda Search Drug Approvals","description":"Search the Drugs@FDA database for drug application approvals (NDAs and ANDAs). Returns application details, sponsor info, and full submission history. Pair with openfda_get_drug_label to read the approved label, or openfda_count_values to aggregate by sponsor_name, product_type, or route. With stage=true, call openfda_dataframe_describe for the staged columns, then openfda_dataframe_query for SQL.","input":[{"n":"search","t":"string"},{"n":"sort","t":"string"},{"n":"limit","t":"number"},{"n":"skip","t":"number"},{"n":"fields","t":"array<string>"},{"n":"stage","t":"boolean"},{"n":"canvas_id","t":"string"}],"output":[{"n":"meta","t":"object"},{"n":"results","t":"array<object>"},{"n":"page_bytes","t":"number"},{"n":"page_omitted","t":"number"},{"n":"page_largest_fields","t":"array<object>"},{"n":"projected_fields","t":"array<string>"},{"n":"canvas_id","t":"string"},{"n":"canvas_table","t":"string"},{"n":"spilled","t":"boolean"},{"n":"staged_rows","t":"number"},{"n":"truncated","t":"boolean"},{"n":"totalResults","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openfda_search_device_clearances","server":79,"verb":"search","cls":"search","resolver":false,"title":"Openfda Search Device Clearances","description":"Search FDA device premarket notifications — 510(k) clearances and PMA approvals. With stage=true, call openfda_dataframe_describe for the staged columns, then openfda_dataframe_query for SQL.","input":[{"n":"pathway","t":"enum(2)","r":true},{"n":"search","t":"string"},{"n":"sort","t":"string"},{"n":"limit","t":"number"},{"n":"skip","t":"number"},{"n":"fields","t":"array<string>"},{"n":"stage","t":"boolean"},{"n":"canvas_id","t":"string"}],"output":[{"n":"meta","t":"object"},{"n":"results","t":"array<object>"},{"n":"page_bytes","t":"number"},{"n":"page_omitted","t":"number"},{"n":"page_largest_fields","t":"array<object>"},{"n":"projected_fields","t":"array<string>"},{"n":"canvas_id","t":"string"},{"n":"canvas_table","t":"string"},{"n":"spilled","t":"boolean"},{"n":"staged_rows","t":"number"},{"n":"truncated","t":"boolean"},{"n":"totalResults","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openfda_lookup_ndc","server":79,"verb":"lookup","cls":"resolve","resolver":true,"title":"Openfda Lookup Ndc","description":"Look up drugs in the NDC (National Drug Code) Directory. Identify drug products by NDC code, find active ingredients, packaging details, or manufacturer info. Pair with openfda_get_drug_label using the returned brand_name or set_id to read the package insert. With stage=true, call openfda_dataframe_describe for the staged columns, then openfda_dataframe_query for SQL.","input":[{"n":"search","t":"string","r":true},{"n":"sort","t":"string"},{"n":"limit","t":"number"},{"n":"skip","t":"number"},{"n":"fields","t":"array<string>"},{"n":"stage","t":"boolean"},{"n":"canvas_id","t":"string"}],"output":[{"n":"meta","t":"object"},{"n":"results","t":"array<object>"},{"n":"page_bytes","t":"number"},{"n":"page_omitted","t":"number"},{"n":"page_largest_fields","t":"array<object>"},{"n":"projected_fields","t":"array<string>"},{"n":"canvas_id","t":"string"},{"n":"canvas_table","t":"string"},{"n":"spilled","t":"boolean"},{"n":"staged_rows","t":"number"},{"n":"truncated","t":"boolean"},{"n":"totalResults","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openfda_drug_profile","server":79,"verb":"profile","cls":"analyze","resolver":false,"title":"Openfda Drug Profile","description":"Resolve one drug name to its FDA identity, then fan out in parallel across the bounded per-drug openFDA endpoints and merge into one profile: identity, label highlights, adverse-event summary, recall history, Drugs@FDA approval, and shortage status. Replaces chaining openfda_get_drug_label, openfda_search_adverse_events, openfda_search_recalls, openfda_search_drug_approvals, and openfda_search_drug_shortages — and reconciles the identifier drift between endpoints that makes that chaining error-prone. Each section is best-effort: a miss returns null rather than failing the call. For deep dives into any one area, use the dedicated tool.","input":[{"n":"drug","t":"string","r":true}],"output":[{"n":"meta","t":"object"},{"n":"identity","t":"object"},{"n":"label","t":"object"},{"n":"adverse_events","t":"object"},{"n":"recalls","t":"array<object>"},{"n":"approval","t":"object"},{"n":"shortage","t":"object"},{"n":"degraded","t":"array<object>"},{"n":"sectionsFound","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openfda_dataframe_describe","server":79,"verb":"dataframe","cls":"query","resolver":false,"title":"Openfda Dataframe Describe","description":"List the tables and column schemas on a DataCanvas staged by an openFDA search tool. Call before openfda_dataframe_query to discover the exact table name, column names, and DuckDB types needed for valid SQL. row_count is the full staged result set, not the inline preview count. Columns typed JSON hold nested openFDA objects/arrays — query them with DuckDB json functions.","input":[{"n":"canvas_id","t":"string","r":true}],"output":[{"n":"tables","t":"array<object>"},{"n":"canvas_id","t":"string"},{"n":"error","t":"object"}]},{"name":"openfda_dataframe_query","server":79,"verb":"dataframe","cls":"query","resolver":false,"title":"Openfda Dataframe Query","description":"Run a read-only SQL SELECT against a DataCanvas table staged by an openFDA search tool (call one with stage=true; its response carries canvas_id + canvas_table). Enables GROUP BY, COUNT/SUM/AVG, time-series, and joins across the staged result set without re-paging the API. Call openfda_dataframe_describe first to get the exact table and column names. Results are capped at the canvas row limit — when truncated is true, page the rest with ORDER BY plus LIMIT/OFFSET. Scalar fields are stored as text (CAST for numeric math); nested objects/arrays are JSON columns — read them with DuckDB json functions, e.g. json_extract_string(openfda, '$.brand_name[0]'). Only SELECT is allowed — DDL, DML, COPY, and file-reading functions are blocked.","input":[{"n":"canvas_id","t":"string","r":true},{"n":"query","t":"string","r":true}],"output":[{"n":"rows","t":"array<object>"},{"n":"row_count","t":"number"},{"n":"truncated","t":"boolean"},{"n":"canvas_id","t":"string"},{"n":"error","t":"object"}]},{"name":"openfec_search_candidates","server":80,"verb":"search","cls":"search","resolver":false,"title":"Openfec Search Candidates","description":"Find federal candidates by name, state, office, party, or cycle. Retrieve a specific candidate by FEC ID with financial totals. Candidate IDs start with H (House), S (Senate), or P (President) followed by exactly eight letters or digits.","input":[{"n":"query","t":"string"},{"n":"candidate_id","t":"string"},{"n":"state","t":"string"},{"n":"district","t":"string"},{"n":"office","t":"enum(3)"},{"n":"party","t":"string"},{"n":"cycle","t":"number"},{"n":"election_year","t":"number"},{"n":"incumbent_challenge","t":"enum(3)"},{"n":"candidate_status","t":"enum(4)"},{"n":"has_raised_funds","t":"boolean"},{"n":"include_totals","t":"boolean"},{"n":"page","t":"integer"},{"n":"per_page","t":"integer"}],"output":[{"n":"candidates","t":"array<object>"},{"n":"totals","t":"array<object>"},{"n":"missing_totals","t":"array<string>"},{"n":"pagination","t":"object"},{"n":"search_criteria","t":"object"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"openfec_search_committees","server":80,"verb":"search","cls":"search","resolver":false,"title":"Openfec Search Committees","description":"Find political committees (campaign, PAC, Super PAC, party) by name, type, candidate affiliation, or state. Retrieve a specific committee by FEC ID. Committee IDs start with C followed by exactly eight digits (e.g., C00358796).","input":[{"n":"query","t":"string"},{"n":"committee_id","t":"string"},{"n":"candidate_id","t":"string"},{"n":"state","t":"string"},{"n":"party","t":"string"},{"n":"committee_type","t":"string"},{"n":"designation","t":"string"},{"n":"cycle","t":"number"},{"n":"treasurer_name","t":"string"},{"n":"page","t":"integer"},{"n":"per_page","t":"integer"}],"output":[{"n":"committees","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"search_criteria","t":"object"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openfec_get_committee_totals","server":80,"verb":"get","cls":"get","resolver":false,"title":"Openfec Get Committee Totals","description":"Get pre-aggregated committee financial totals — receipts, disbursements, cash on hand, debts, and the itemized/unitemized breakdown — without paginating Schedule A. Use mode \"single\" (the default) with a committee_id for one committee's totals, one row per two-year cycle it has filed. Use mode \"by_entity_type\" to rank or screen every committee of one type (presidential, pac, party, pac-party, house-senate, ie-only) by state, designation, or a receipts/disbursements threshold.","input":[{"n":"mode","t":"enum(2)"},{"n":"committee_id","t":"string"},{"n":"entity_type","t":"enum(6)"},{"n":"cycle","t":"number"},{"n":"committee_state","t":"string"},{"n":"committee_type","t":"string"},{"n":"committee_designation","t":"string"},{"n":"organization_type","t":"string"},{"n":"min_receipts","t":"number"},{"n":"max_receipts","t":"number"},{"n":"min_disbursements","t":"number"},{"n":"max_disbursements","t":"number"},{"n":"sort","t":"enum(8)"},{"n":"page","t":"integer"},{"n":"per_page","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"mode","t":"enum(2)"},{"n":"pagination","t":"object"},{"n":"search_criteria","t":"object"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openfec_search_contributions","server":80,"verb":"search","cls":"search","resolver":false,"title":"Openfec Search Contributions","description":"Search itemized individual contributions (Schedule A) or get aggregate breakdowns by size, state, employer, or occupation. Use to answer \"who is funding this committee?\" Itemized mode requires a committee_id. Aggregate by_size/by_state can use candidate_id instead.","input":[{"n":"mode","t":"enum(5)"},{"n":"committee_id","t":"string"},{"n":"candidate_id","t":"string"},{"n":"contributor_name","t":"string"},{"n":"contributor_employer","t":"string"},{"n":"contributor_occupation","t":"string"},{"n":"contributor_city","t":"string"},{"n":"contributor_state","t":"string"},{"n":"contributor_zip","t":"string"},{"n":"cycle","t":"number"},{"n":"min_date","t":"string"},{"n":"max_date","t":"string"},{"n":"min_amount","t":"number"},{"n":"max_amount","t":"number"},{"n":"is_individual","t":"boolean"},{"n":"sort","t":"enum(4)"},{"n":"page","t":"integer"},{"n":"per_page","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"results","t":"array<object>"},{"n":"mode","t":"enum(7)"},{"n":"committee","t":"object"},{"n":"next_cursor","t":"string"},{"n":"count","t":"number"},{"n":"count_is_approximate","t":"boolean"},{"n":"pagination","t":"object"},{"n":"search_criteria","t":"object"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"openfec_search_disbursements","server":80,"verb":"search","cls":"search","resolver":false,"title":"Openfec Search Disbursements","description":"Search itemized committee spending (Schedule B) or get aggregate breakdowns by purpose or recipient. All modes require a committee_id. Use to answer \"what is this committee spending money on?\" or \"who is receiving payments from this committee?\"","input":[{"n":"mode","t":"enum(4)"},{"n":"committee_id","t":"string","r":true},{"n":"recipient_name","t":"string"},{"n":"recipient_state","t":"string"},{"n":"recipient_city","t":"string"},{"n":"recipient_committee_id","t":"string"},{"n":"disbursement_description","t":"string"},{"n":"disbursement_purpose_category","t":"string"},{"n":"cycle","t":"number"},{"n":"min_date","t":"string"},{"n":"max_date","t":"string"},{"n":"min_amount","t":"number"},{"n":"max_amount","t":"number"},{"n":"sort","t":"enum(4)"},{"n":"page","t":"integer"},{"n":"per_page","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"results","t":"array<object>"},{"n":"mode","t":"enum(4)"},{"n":"committee","t":"object"},{"n":"next_cursor","t":"string"},{"n":"count","t":"number"},{"n":"count_is_approximate","t":"boolean"},{"n":"pagination","t":"object"},{"n":"search_criteria","t":"object"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"openfec_search_expenditures","server":80,"verb":"search","cls":"search","resolver":false,"title":"Openfec Search Expenditures","description":"Search independent expenditures (Schedule E) — outside spending supporting or opposing federal candidates. Covers Super PACs, party committees, and other groups. Use itemized mode for individual expenditure records, or by_candidate for aggregated totals per candidate; by_candidate needs either a candidate_id or a full race scope (candidate_office alone for President, plus candidate_office_state for Senate, plus candidate_office_district as well for House).","input":[{"n":"mode","t":"enum(2)"},{"n":"committee_id","t":"string"},{"n":"candidate_id","t":"string"},{"n":"support_oppose","t":"enum(2)"},{"n":"payee_name","t":"string"},{"n":"candidate_office","t":"enum(3)"},{"n":"candidate_office_state","t":"string"},{"n":"candidate_office_district","t":"string"},{"n":"candidate_party","t":"string"},{"n":"cycle","t":"number"},{"n":"min_date","t":"string"},{"n":"max_date","t":"string"},{"n":"min_amount","t":"number"},{"n":"max_amount","t":"number"},{"n":"is_notice","t":"boolean"},{"n":"most_recent","t":"boolean"},{"n":"election_full","t":"boolean"},{"n":"sort","t":"enum(6)"},{"n":"page","t":"integer"},{"n":"per_page","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"results","t":"array<object>"},{"n":"mode","t":"enum(2)"},{"n":"committee","t":"object"},{"n":"next_cursor","t":"string"},{"n":"count","t":"number"},{"n":"count_is_approximate","t":"boolean"},{"n":"pagination","t":"object"},{"n":"search_criteria","t":"object"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"openfec_search_coordinated_expenditures","server":80,"verb":"search","cls":"search","resolver":false,"title":"Openfec Search Coordinated Expenditures","description":"Search coordinated party expenditures (Schedule F) — spending a party committee makes on behalf of a candidate it supports, in coordination with that campaign. Distinct from independent expenditures (openfec_search_expenditures), which cannot be coordinated with the candidate, and from direct contributions: coordinated expenditures carry their own statutory limits and can run into tens of millions per party in a presidential cycle. Scope with a spending committee_id, a benefiting candidate_id, or a cycle; unscoped queries span all years.","input":[{"n":"committee_id","t":"string"},{"n":"candidate_id","t":"string"},{"n":"cycle","t":"number"},{"n":"payee_name","t":"string"},{"n":"min_date","t":"string"},{"n":"max_date","t":"string"},{"n":"min_amount","t":"number"},{"n":"max_amount","t":"number"},{"n":"sort","t":"enum(4)"},{"n":"page","t":"integer"},{"n":"per_page","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"committee","t":"object"},{"n":"pagination","t":"object"},{"n":"search_criteria","t":"object"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"openfec_search_filings","server":80,"verb":"search","cls":"search","resolver":false,"title":"Openfec Search Filings","description":"Search FEC filings and reports by committee, candidate, form type, or date range. Covers financial reports (F3/F3P/F3X), statements of candidacy (F2), organizational filings (F1), 24-hour IE notices (F24), and amendments.","input":[{"n":"committee_id","t":"string"},{"n":"candidate_id","t":"string"},{"n":"filer_name","t":"string"},{"n":"form_type","t":"string"},{"n":"report_type","t":"string"},{"n":"report_year","t":"number"},{"n":"cycle","t":"number"},{"n":"is_amended","t":"boolean"},{"n":"most_recent","t":"boolean"},{"n":"min_receipt_date","t":"string"},{"n":"max_receipt_date","t":"string"},{"n":"page","t":"integer"},{"n":"per_page","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"search_criteria","t":"object"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"openfec_lookup_elections","server":80,"verb":"lookup","cls":"get","resolver":false,"title":"Openfec Lookup Elections","description":"Look up federal election races and candidate financial summaries. Find who's running in a race with fundraising totals, or get an aggregate race summary.","input":[{"n":"mode","t":"enum(2)"},{"n":"office","t":"enum(3)","r":true},{"n":"cycle","t":"integer","r":true},{"n":"state","t":"string"},{"n":"district","t":"string"},{"n":"zip","t":"string"},{"n":"election_full","t":"boolean"},{"n":"page","t":"integer"},{"n":"per_page","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"mode","t":"enum(2)"},{"n":"pagination","t":"object"},{"n":"search_criteria","t":"object"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openfec_search_legal","server":80,"verb":"search","cls":"search","resolver":false,"title":"Openfec Search Legal","description":"Search FEC legal documents: advisory opinions, enforcement cases (MURs), alternative dispute resolutions, administrative fines, and statutes. The citation, penalty, respondent, ao_number, and case_number filters each apply to only some document types; with type omitted, the search returns only the types every one of them applies to. Each response is held to 100,000 bytes: when a page would exceed it, whole results are held back and nextFromHit gives the from_hit that continues each document type.","input":[{"n":"query","t":"string"},{"n":"type","t":"enum(5)"},{"n":"ao_number","t":"string"},{"n":"case_number","t":"string"},{"n":"respondent","t":"string"},{"n":"regulatory_citation","t":"string"},{"n":"statutory_citation","t":"string"},{"n":"min_penalty_amount","t":"number"},{"n":"max_penalty_amount","t":"number"},{"n":"date_kind","t":"enum(7)"},{"n":"min_date","t":"string"},{"n":"max_date","t":"string"},{"n":"from_hit","t":"integer"},{"n":"hits_returned","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"total_count","t":"number"},{"n":"search_criteria","t":"object"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"retrievalHint","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"nextFromHit","t":"object"},{"n":"error","t":"object"}]},{"name":"openfec_get_legal_document","server":80,"verb":"get","cls":"get","resolver":false,"title":"Openfec Get Legal Document","description":"Fetch one FEC legal document — advisory opinion, MUR, ADR, administrative fine, or statute — by its type and number. openfec_search_legal replaces each result's documents and dispositions arrays with a count and category summary and cuts every commission vote down to a date and a 200-character action; this returns the record as upstream sends it, whole when it fits the 100,000-byte response budget. A larger record returns its scalar fields and the arrays that fit, with the rest listed in withheld; page through one by re-calling with array and offset. doc_type is the plural form of the document_type discriminator on a search result (advisory_opinion becomes advisory_opinions, mur becomes murs, adr becomes adrs, admin_fine becomes admin_fines, statute becomes statutes), and no is that result's no field — every document type carries it, and advisory opinions repeat it as ao_no.","input":[{"n":"doc_type","t":"enum(5)","r":true},{"n":"no","t":"string","r":true},{"n":"array","t":"string"},{"n":"offset","t":"integer"}],"output":[{"n":"document","t":"object"},{"n":"withheld","t":"array<object>"},{"n":"slice","t":"object"},{"n":"search_criteria","t":"object"},{"n":"attachedDocumentCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openfec_lookup_calendar","server":80,"verb":"lookup","cls":"get","resolver":false,"title":"Openfec Lookup Calendar","description":"Look up FEC calendar events, filing deadlines, and election dates. Use to find upcoming filing windows for a committee, locate when a federal election occurred, or scope FEC events by date range and category.","input":[{"n":"mode","t":"enum(3)"},{"n":"state","t":"string"},{"n":"office","t":"enum(3)"},{"n":"district","t":"string"},{"n":"report_type","t":"string"},{"n":"report_year","t":"integer"},{"n":"category","t":"enum(18)"},{"n":"election_year","t":"integer"},{"n":"description","t":"string"},{"n":"min_date","t":"string"},{"n":"max_date","t":"string"},{"n":"page","t":"integer"},{"n":"per_page","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"mode","t":"enum(3)"},{"n":"pagination","t":"object"},{"n":"search_criteria","t":"object"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"off_get_product","server":81,"verb":"get","cls":"get","resolver":false,"title":"Get Food Product by Barcode","description":"Fetch a packaged food product by barcode (4–40 digits: EAN-13, EAN-8, UPC, and the shorter and longer codes Open Food Facts also holds) from Open Food Facts. Returns the product name, brand, quantity, ingredients (raw text and parsed list), declared allergens, trace allergens the label warns about, additives, the product-level vegan/vegetarian/palm-oil analysis, computed scores (Nutri-Score a–e, NOVA 1–4, Green-Score), nutrition per serving and per 100 g, or per 100 ml for liquids, categories, labels, packaging, origins, countries of sale, image URL, and data completeness. Open Food Facts is a crowd-sourced database — a missing field means \"not yet entered by contributors,\" not that the attribute is absent from the actual product. Computed scores carry regional formula caveats and are indicators, not absolute rankings. Data is under ODbL 1.0 — cite Open Food Facts in downstream use.","input":[{"n":"barcode","t":"string","r":true},{"n":"fields","t":"array<enum(24)>"}],"output":[{"n":"barcode","t":"string"},{"n":"product","t":"object"},{"n":"requested_fields","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"off_search_products","server":81,"verb":"search","cls":"search","resolver":false,"title":"Search Food Products","description":"Search Open Food Facts by full-text query, structured tag filters, or both at once. Returns a summary list with barcodes, product names, brands, Nutri-Score, NOVA group, and categories — enough for triage and selection, not full label data. Use off_get_product on the returned barcodes for complete details. A text query and tag filters combine: every word of the query must match the product name, generic name, categories, labels, or brand, and every filter provided must hold (e.g. query \"dark chocolate\" with labels_tag \"en:organic\" and countries_tag \"en:france\" returns organic chocolate sold in France); numeric nutrient_filters express thresholds per 100 g, or per 100 ml for liquids, such as sugars below 8 g, and combine the same way, and each row then carries the indexed values the thresholds were checked against; additives_tag is the one exception, filtering only on searches carrying neither query nor nutrient_filters. Tag filter values are canonical tag IDs (e.g. \"en:organic\", \"en:no-gluten\") — use off_browse_taxonomy to resolve human terms to tag IDs. A case variant, synonym, or singular of a tag is resolved to its canonical ID where Open Food Facts recognizes it; anything else is matched exactly. exclude_allergens and exclude_traces drop products that declare an allergen or a \"may contain\" trace, but a product with no allergen or trace data entered passes them, so confirm a candidate with off_get_product before relying on it. At least one search parameter is required. The two paths read different indexes: a search carrying query is answered by the text index, a snapshot that lags the live database, while a tag-only search reads the live database and is current — so a recently contributed product can be missing from a text search and present in the same search without query. Data is crowd-sourced; result count reflects contributed products, not all products in the market. Data under ODbL 1.0 — cite Open Food Facts in downstream use.","input":[{"n":"query","t":"string"},{"n":"categories_tag","t":"string"},{"n":"brands_tag","t":"string"},{"n":"labels_tag","t":"string|array<string>"},{"n":"allergens_tag","t":"string"},{"n":"traces_tag","t":"string"},{"n":"exclude_allergens","t":"array<string>"},{"n":"exclude_traces","t":"array<string>"},{"n":"ingredients_analysis_tag","t":"enum(12)"},{"n":"additives_tag","t":"string"},{"n":"nutrition_grade","t":"enum(5)"},{"n":"nova_group","t":"enum(4)"},{"n":"countries_tag","t":"string"},{"n":"nutrient_filters","t":"array<object>"},{"n":"sort_by","t":"enum(4)"},{"n":"page","t":"integer"},{"n":"page_size","t":"integer"}],"output":[{"n":"total","t":"number"},{"n":"total_is_lower_bound","t":"boolean"},{"n":"page","t":"number"},{"n":"page_size","t":"number"},{"n":"page_count","t":"number"},{"n":"last_page","t":"number"},{"n":"omitted","t":"number"},{"n":"products","t":"array<object>"},{"n":"notice","t":"string"},{"n":"text_index_snapshot","t":"string"},{"n":"exclusion_coverage","t":"string"},{"n":"page_size_capped","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"off_compare_products","server":81,"verb":"compare","cls":"analyze","resolver":false,"title":"Compare Food Products Side-by-Side","description":"Side-by-side nutrition and scoring comparison for 2–10 products per call by barcode; a repeated barcode is compared once, so two identical barcodes yield one row, and barcodes past the 10th distinct one are listed in unprocessed rather than fetched. Returns a normalized table of energy (kcal), fat, saturated fat, sugars, salt, protein, and fiber per 100 g, or per 100 ml for liquids, plus Nutri-Score, NOVA group, and Green-Score. Designed for \"which of these cereals is healthiest?\" or \"compare these pasta brands\" workflows. Missing nutrition data for any product is preserved as absent — comparisons are not imputed. A batch is not all-or-nothing: barcodes that resolve are returned even when others fail, with confirmed-missing barcodes listed in not_found and failed fetches listed separately in failed. Scores carry regional formula caveats. Data under ODbL 1.0 — cite Open Food Facts in downstream use.","input":[{"n":"barcodes","t":"array<string>","r":true}],"output":[{"n":"products","t":"array<object>"},{"n":"succeeded","t":"number"},{"n":"not_found","t":"array<string>"},{"n":"failed","t":"array<object>"},{"n":"unprocessed","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"off_browse_taxonomy","server":81,"verb":"browse","cls":"search","resolver":false,"title":"Browse Food Facts Taxonomy","description":"Resolve a human term to the canonical Open Food Facts tag ID that off_search_products filters on. Covers categories, labels/certifications, allergens, additives, countries, NOVA groups, and Nutri-Score grades. Pass a search term to resolve against the Open Food Facts vocabulary, which holds tens of thousands of tags; omitting it returns only a small reference list for each facet except NOVA groups and Nutri-Score grades, which are complete. Most tag IDs use the \"en:\" prefix (e.g. \"en:organic\", \"en:no-gluten\", \"en:crustaceans\"); NOVA groups return bare digits \"1\"-\"4\" and Nutri-Score grades bare letters \"a\"-\"e\". Pass the id through to off_search_products exactly as returned. Category tags are frequently plural (\"kombucha\" resolves to \"en:kombuchas\"), so use the returned id rather than constructing one.","input":[{"n":"facet","t":"enum(7)","r":true},{"n":"search","t":"string"},{"n":"limit","t":"integer"}],"output":[{"n":"facet","t":"string"},{"n":"tags","t":"array<object>"},{"n":"total_in_facet","t":"number"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"openlibrary_search_books","server":82,"verb":"search","cls":"search","resolver":false,"title":"Search Books","description":"Full-text book search across Open Library works. Supports field filters (title, author, subject, publisher, ISBN, language) and returns work-level records with edition counts, cover IDs, and reading availability. Use query for general search or combine specific field filters. Results are work-level — drill into editions via openlibrary_get_editions.","input":[{"n":"query","t":"string"},{"n":"title","t":"string"},{"n":"author","t":"string"},{"n":"subject","t":"string"},{"n":"publisher","t":"string"},{"n":"isbn","t":"string"},{"n":"language","t":"string"},{"n":"sort","t":"enum(5)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"},{"n":"include_availability","t":"boolean"}],"output":[{"n":"total","t":"number"},{"n":"offset","t":"number"},{"n":"works","t":"array<object>"},{"n":"queryEcho","t":"string"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openlibrary_search_inside","server":82,"verb":"search","cls":"search","resolver":false,"title":"Search Inside Books","description":"Search the full text of books scanned by the Internet Archive — the \"which book contains this passage?\" lookup that the metadata tools cannot answer. Quote a phrase for an exact-phrase match; bare terms match anywhere in the text. Each result is an Internet Archive item with the matching passages as snippets, plus a relevance score. The full-text index is far slower than the metadata endpoints, and a search usually takes 10–30 seconds. Use it when the passage is the question, and use openlibrary_search_books to search by title, author, or subject. Results key on Internet Archive items rather than Open Library works: chain the returned ia_identifier to archive.org, or match it against the ia_identifiers on openlibrary_search_books results to reach the catalogue record.","input":[{"n":"query","t":"string","r":true},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"total","t":"number"},{"n":"offset","t":"number"},{"n":"matches","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openlibrary_get_work","server":82,"verb":"get","cls":"get","resolver":false,"title":"Get Work","description":"Fetch a work by Open Library Work ID (OL…W). Returns title, description, subjects, cover IDs, and linked author IDs for follow-up lookups. Works represent the abstract book concept independent of any specific edition. A merged work ID resolves to the work it was merged into. To reach a work from an ISBN, call openlibrary_get_edition with id_type \"isbn\" — its work_id output is the parent work. Note: author names are not included — use openlibrary_get_author or openlibrary_search_books for names.","input":[{"n":"work_id","t":"string","r":true}],"output":[{"n":"work_id","t":"string"},{"n":"title","t":"string"},{"n":"description","t":"string"},{"n":"subjects","t":"array<string>"},{"n":"subject_places","t":"array<string>"},{"n":"subject_times","t":"array<string>"},{"n":"subject_people","t":"array<string>"},{"n":"cover_ids","t":"array<number>"},{"n":"author_ids","t":"array<string>"},{"n":"created","t":"string"},{"n":"last_modified","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openlibrary_get_editions","server":82,"verb":"get","cls":"get","resolver":false,"title":"Get Editions","description":"List editions of a work — different publishers, languages, formats, and print runs. Returns ISBNs, publisher, language, page count, and edition OLIDs. Use after openlibrary_get_work or openlibrary_search_books to find a specific printing. A merged work ID resolves to the work it was merged into. To reach a work from an ISBN, call openlibrary_get_edition with id_type \"isbn\" — its work_id output is the parent work.","input":[{"n":"work_id","t":"string","r":true},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"total","t":"number"},{"n":"offset","t":"number"},{"n":"work_id","t":"string"},{"n":"editions","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openlibrary_get_edition","server":82,"verb":"get","cls":"get","resolver":false,"title":"Get Edition","description":"Resolve one or more editions by identifier: ISBN-10, ISBN-13, OCLC, LCCN, or Open Library Edition ID (OL…M). Every identifier in a call shares one id_type — pass id_type \"isbn\" for both ISBN-10 and ISBN-13. Up to 50 identifiers resolve in a single upstream request, so a bibliography or shelf export costs one call rather than one per book; a large batch is a large response, so ask for what you need. Returns full edition metadata including authors, publisher, language, all identifier types, and the parent work ID, with author names inline and no secondary lookup; when the edition record itself lists no authors, they are recovered from the parent work and marked as such, and a notice names any edition whose recovery failed. Partial success is the norm — identifiers that resolve come back in editions, the rest are listed in unresolved with a reason, and the call fails only when nothing resolved.","input":[{"n":"identifiers","t":"array<string>","r":true},{"n":"id_type","t":"enum(4)","r":true}],"output":[{"n":"editions","t":"array<object>"},{"n":"unresolved","t":"array<object>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openlibrary_search_authors","server":82,"verb":"search","cls":"search","resolver":false,"title":"Search Authors","description":"Search Open Library authors by name. Returns Open Library Author IDs, names, birth/death dates, top works, and subject associations. Use author IDs for openlibrary_get_author (bio, remote IDs) or openlibrary_get_author_works (list of works).","input":[{"n":"query","t":"string","r":true},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"total","t":"number"},{"n":"offset","t":"number"},{"n":"authors","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openlibrary_get_author","server":82,"verb":"get","cls":"get","resolver":false,"title":"Get Author","description":"Fetch author detail by Open Library Author ID (OL…A). Returns bio, birth/death dates, photo IDs, and linked identifiers from Wikidata, VIAF, ISNI, Goodreads, and LibraryThing. Use openlibrary_search_authors to find an author ID first.","input":[{"n":"author_id","t":"string","r":true}],"output":[{"n":"author_id","t":"string"},{"n":"name","t":"string"},{"n":"personal_name","t":"string"},{"n":"fuller_name","t":"string"},{"n":"bio","t":"string"},{"n":"birth_date","t":"string"},{"n":"death_date","t":"string"},{"n":"photo_ids","t":"array<number>"},{"n":"remote_ids","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openlibrary_get_author_works","server":82,"verb":"get","cls":"get","resolver":false,"title":"Get Author Works","description":"List works by an author. Returns titles, cover IDs, and work OLIDs for drilling into editions or details. Use openlibrary_get_author for author bio and details, or openlibrary_get_editions to explore specific printings.","input":[{"n":"author_id","t":"string","r":true},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"total","t":"number"},{"n":"offset","t":"number"},{"n":"author_id","t":"string"},{"n":"works","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openlibrary_get_subject","server":82,"verb":"get","cls":"get","resolver":false,"title":"Get Subject","description":"Browse works by subject. Returns matching works with edition counts and cover IDs, plus the total work count for the subject. Case and spacing are normalized before lookup, so \"Science Fiction\" and \"science_fiction\" are the same request. Subject tags are user-contributed and the vocabulary varies — when a subject returns no works, try a different word form (singular/plural), a synonym, or a broader term.","input":[{"n":"subject","t":"string","r":true},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"subject_name","t":"string"},{"n":"subject_key","t":"string"},{"n":"work_count","t":"number"},{"n":"offset","t":"number"},{"n":"works","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openlibrary_get_cover_url","server":82,"verb":"get","cls":"get","resolver":false,"title":"Get Cover URL","description":"Resolve a cover image URL for a book or author photo. Returns a direct HTTPS URL in the requested size (S/M/L). The Covers API always returns HTTP 200 — missing covers return a 1×1 placeholder GIF, not a 404 — so the identifier format is validated locally first: \"id\" must be numeric, \"isbn\" 10 or 13 digits (an ISBN-10 may end in an X check digit), \"olid\" an edition OLID (OL…M) for target \"book\" and an author OLID (OL…A) for target \"author\". Identifiers with path separators or control characters, and author-by-ISBN lookups, are rejected before any request. URLs can be embedded in markdown as ![cover](url).","input":[{"n":"identifier","t":"string","r":true},{"n":"id_type","t":"enum(3)","r":true},{"n":"target","t":"enum(2)"},{"n":"size","t":"enum(3)"}],"output":[{"n":"url","t":"string"},{"n":"note","t":"string"},{"n":"error","t":"object"}]},{"name":"openstates_search_bills","server":83,"verb":"search","cls":"search","resolver":false,"title":"Search Bills","description":"Search state legislative bills across all covered US jurisdictions. Supports full-text search, jurisdiction/session filtering, subject tags, sponsor lookups, and sort order. Either jurisdiction or q (full-text) is required, and pairing them is the reliable form — a q-only search spans all 56 jurisdictions and exceeds the upstream timeout for a common term, though a distinctive one still returns quickly. include=sponsorships,actions returns sponsor and action history inline. sort=latest_action_desc surfaces bills currently moving. openstates_get_jurisdiction with include=legislative_sessions returns valid session identifiers for session filtering.","input":[{"n":"jurisdiction","t":"string"},{"n":"q","t":"string"},{"n":"session","t":"string"},{"n":"chamber","t":"enum(2)"},{"n":"classification","t":"string"},{"n":"subject","t":"array<string>"},{"n":"sponsor","t":"string"},{"n":"sponsor_classification","t":"string"},{"n":"sort","t":"enum(6)"},{"n":"action_since","t":"string"},{"n":"updated_since","t":"string"},{"n":"created_since","t":"string"},{"n":"include","t":"array<enum(10)>"},{"n":"page","t":"integer"},{"n":"per_page","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"totalCount","t":"number"},{"n":"page","t":"number"},{"n":"maxPage","t":"number"},{"n":"notice","t":"string"},{"n":"appliedFilters","t":"object"},{"n":"error","t":"object"}]},{"name":"openstates_get_bill","server":83,"verb":"get","cls":"get","resolver":false,"title":"Get Bill","description":"Fetch full detail for a specific state bill. Accepts either the three-part path (jurisdiction + session + bill_id) or a direct OCD bill ID (openstates_id from search results). Use include to request votes, actions, sponsorships, documents, and versions in one call rather than searching again. include=votes returns the full vote tally and per-legislator positions. include=actions returns the complete action history. Prefer openstates_id when available to avoid session identifier lookup.","input":[{"n":"openstates_id","t":"string"},{"n":"jurisdiction","t":"string"},{"n":"session","t":"string"},{"n":"bill_id","t":"string"},{"n":"include","t":"array<enum(10)>"}],"output":[{"n":"id","t":"string"},{"n":"identifier","t":"string"},{"n":"title","t":"string"},{"n":"session","t":"string"},{"n":"jurisdiction","t":"object"},{"n":"from_organization","t":"object"},{"n":"classification","t":"array<string>"},{"n":"subject","t":"array<string>"},{"n":"first_action_date","t":"string"},{"n":"latest_action_date","t":"string"},{"n":"latest_action_description","t":"string"},{"n":"latest_passage_date","t":"string"},{"n":"updated_at","t":"string"},{"n":"openstates_url","t":"string"},{"n":"sponsorships","t":"array<object>"},{"n":"actions","t":"array<object>"},{"n":"votes","t":"array<object>"},{"n":"abstracts","t":"array<object>"},{"n":"versions","t":"array<object>"},{"n":"documents","t":"array<object>"},{"n":"related_bills","t":"array<object>"},{"n":"other_titles","t":"array<object>"},{"n":"other_identifiers","t":"array<object>"},{"n":"sources","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"openstates_search_people","server":83,"verb":"search","cls":"search","resolver":false,"title":"Search People","description":"Search state legislators and officials by name, jurisdiction, chamber, or district, or fetch specific people by OCD person ID. Party is reported on every result but cannot be filtered on — narrow by party after the call. Either jurisdiction or id is required — a search spanning all 56 jurisdictions exceeds the upstream timeout, including a name-only one, so scope every call to a single state or to specific person IDs. Use openstates_list_jurisdictions to pick a jurisdiction, or openstates_get_legislators_by_location when you have coordinates but no state. id takes the person IDs that openstates_get_bill sponsorships and openstates_get_committee memberships hand back, and resolves any number of them in one call. Supports name substring matching (case-insensitive). org_classification targets a role type: \"upper\" for Senate, \"lower\" for House/Assembly, \"executive\" for governors and executive officials, and \"legislature\" for every legislator — both chambers merged into one paginated set (all upper members, then all lower), which excludes executive-branch officials. Omitting org_classification is not the same as \"legislature\": it returns every officeholder, executive officials included. include=offices adds phone, fax, and address. include=links adds website and social links.","input":[{"n":"jurisdiction","t":"string"},{"n":"id","t":"array<string>"},{"n":"name","t":"string"},{"n":"org_classification","t":"enum(5)"},{"n":"district","t":"string"},{"n":"include","t":"array<enum(5)>"},{"n":"page","t":"integer"},{"n":"per_page","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"totalCount","t":"number"},{"n":"page","t":"number"},{"n":"maxPage","t":"number"},{"n":"notice","t":"string"},{"n":"appliedFilters","t":"object"},{"n":"error","t":"object"}]},{"name":"openstates_get_legislators_by_location","server":83,"verb":"get","cls":"get","resolver":false,"title":"Get Legislators by Location","description":"Find every legislator representing a geographic coordinate — both tiers. Pass latitude and longitude to get the state senators and representatives for that location (and potentially governor/executive officials), plus the coordinate's two US Senators and its US Representative. jurisdiction.classification separates the tiers: \"state\" is a state legislature, \"country\" is the US Congress. current_role.org_classification does not — it is \"upper\"/\"lower\" for a US Senator exactly as for a state senator. Useful for constituent-to-representative matching, address-based policy research, and electoral boundary analysis. This server does not geocode addresses — the caller must provide decimal-degree coordinates. Use include=offices to get contact information alongside the legislator list.","input":[{"n":"latitude","t":"number","r":true},{"n":"longitude","t":"number","r":true},{"n":"include","t":"array<enum(5)>"}],"output":[{"n":"legislators","t":"array<object>"},{"n":"count","t":"number"},{"n":"stateCount","t":"number"},{"n":"federalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"openstates_search_committees","server":83,"verb":"search","cls":"search","resolver":false,"title":"Search Committees","description":"List committees for a jurisdiction. jurisdiction is required — a request spanning all 56 jurisdictions exceeds the upstream timeout, so scope every call to a single state; use openstates_list_jurisdictions to pick one. Experimental — Open States is actively working to restore committee support and not all states have data. Use chamber to scope to upper (senate) or lower (house) committees. Use classification=subcommittee to find subcommittees of a parent. Use include=memberships to get the full roster with member roles. The coverageNote field in the output will always note the experimental coverage limitations.","input":[{"n":"jurisdiction","t":"string","r":true},{"n":"classification","t":"enum(2)"},{"n":"chamber","t":"enum(2)"},{"n":"parent","t":"string"},{"n":"include","t":"array<enum(3)>"},{"n":"page","t":"integer"},{"n":"per_page","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"totalCount","t":"number"},{"n":"page","t":"number"},{"n":"maxPage","t":"number"},{"n":"coverageNote","t":"string"},{"n":"appliedFilters","t":"object"},{"n":"error","t":"object"}]},{"name":"openstates_get_committee","server":83,"verb":"get","cls":"get","resolver":false,"title":"Get Committee","description":"Fetch committee detail by OCD organization ID. Returns name, classification, and membership roster when include=memberships is requested. Experimental — not all states have committee data in Open States. Obtain the committee_id from openstates_search_committees.","input":[{"n":"committee_id","t":"string","r":true},{"n":"include","t":"array<enum(3)>"}],"output":[{"n":"id","t":"string"},{"n":"name","t":"string"},{"n":"classification","t":"string"},{"n":"parent_id","t":"string"},{"n":"memberships","t":"array<object>"},{"n":"links","t":"array<object>"},{"n":"sources","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"openstates_search_events","server":83,"verb":"search","cls":"search","resolver":false,"title":"Search Events","description":"Search hearings, floor sessions, and committee meetings. jurisdiction is required — the Open States events endpoint has no all-states search, so scope every call to a single state; use openstates_list_jurisdictions to pick one. Experimental — most states do not publish event data to Open States. Use after and before to scope to a date range. Set require_bills=true to filter to events with bills on the agenda, which is the most useful filter for tracking legislation through committee. Use include=agenda,participants for full meeting context. Empty results often indicate the state lacks event data rather than no events occurring.","input":[{"n":"jurisdiction","t":"string","r":true},{"n":"after","t":"string"},{"n":"before","t":"string"},{"n":"require_bills","t":"boolean"},{"n":"include","t":"array<enum(6)>"},{"n":"page","t":"integer"},{"n":"per_page","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"totalCount","t":"number"},{"n":"page","t":"number"},{"n":"maxPage","t":"number"},{"n":"coverageNote","t":"string"},{"n":"notice","t":"string"},{"n":"appliedFilters","t":"object"},{"n":"error","t":"object"}]},{"name":"openstates_get_event","server":83,"verb":"get","cls":"get","resolver":false,"title":"Get Event","description":"Fetch full event detail by OCD event ID. Returns agenda, participants, media links, and associated documents when requested via include. Experimental — event coverage is limited in Open States. Obtain the event_id from openstates_search_events.","input":[{"n":"event_id","t":"string","r":true},{"n":"include","t":"array<enum(6)>"}],"output":[{"n":"id","t":"string"},{"n":"name","t":"string"},{"n":"description","t":"string"},{"n":"classification","t":"string"},{"n":"start_date","t":"string"},{"n":"end_date","t":"string"},{"n":"status","t":"string"},{"n":"jurisdiction","t":"object"},{"n":"location","t":"object"},{"n":"links","t":"array<object>"},{"n":"media","t":"array<object>"},{"n":"documents","t":"array<object>"},{"n":"sources","t":"array<object>"},{"n":"participants","t":"array<object>"},{"n":"agenda","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"openstates_list_jurisdictions","server":83,"verb":"list","cls":"list","resolver":false,"title":"List Jurisdictions","description":"List all jurisdictions covered by Open States — all 50 states, DC, and 5 US territories (American Samoa, Guam, Northern Mariana Islands, Puerto Rico, and the US Virgin Islands): 56 in total, returned complete in a single default call. Returns coverage metadata: latest bill update time, latest people update time, and optionally all legislative sessions with their identifiers. Use this when you need to discover valid session identifiers for a state before calling openstates_search_bills with a session filter. The legislative_sessions include option returns all historical and current sessions — always check valid session identifiers here before using them in bill searches, since formats vary widely by state (e.g., \"2025\", \"2025-2026\", \"2025rs\", \"2025s1\").","input":[{"n":"classification","t":"enum(3)"},{"n":"include","t":"array<enum(3)>"},{"n":"page","t":"integer"},{"n":"per_page","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"pagination","t":"object"},{"n":"totalCount","t":"number"},{"n":"page","t":"number"},{"n":"maxPage","t":"number"},{"n":"error","t":"object"}]},{"name":"openstates_get_jurisdiction","server":83,"verb":"get","cls":"get","resolver":false,"title":"Get Jurisdiction","description":"Fetch full metadata for a specific jurisdiction including all legislative sessions, their identifiers, and coverage dates. Use when you need to know the exact session identifier for a state before filtering bill searches — session formats vary widely (e.g., \"2025\", \"2025rs\", \"2025s1\"). Jurisdiction IDs follow OCD format: ocd-jurisdiction/country:us/state:{abbr}/government (e.g., ocd-jurisdiction/country:us/state:wa/government). State names (e.g., \"Washington\") and two-letter abbreviations (e.g., \"wa\") are also accepted.","input":[{"n":"jurisdiction_id","t":"string","r":true},{"n":"include","t":"array<enum(3)>"}],"output":[{"n":"id","t":"string"},{"n":"name","t":"string"},{"n":"classification","t":"string"},{"n":"url","t":"string"},{"n":"latest_bill_update","t":"string"},{"n":"latest_people_update","t":"string"},{"n":"legislative_sessions","t":"array<object>"},{"n":"organizations","t":"array<object>"},{"n":"latest_runs","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"openstreetmap_search_places","server":84,"verb":"search","cls":"search","resolver":false,"title":"Geocode a place name or address","description":"Geocode a place name or address to coordinates and structured place data via Nominatim. Send either a free-form query or the structured address fields (street, city, county, state, country, postalcode), never both; results are the best-ranked matches, not every matching object, and matching never uses an OSM attribute tag, so filter or enumerate by tag with openstreetmap_query_nearby, openstreetmap_query_bbox, or openstreetmap_query_raw.","input":[{"n":"query","t":"string"},{"n":"street","t":"string"},{"n":"city","t":"string"},{"n":"county","t":"string"},{"n":"state","t":"string"},{"n":"country","t":"string"},{"n":"postalcode","t":"string"},{"n":"limit","t":"integer"},{"n":"countrycodes","t":"const|string"},{"n":"viewbox","t":"object"},{"n":"bounded","t":"boolean"},{"n":"layer","t":"const|string"},{"n":"featureType","t":"enum(4)"},{"n":"extratags","t":"boolean"},{"n":"language","t":"string"},{"n":"exclude_place_ids","t":"array<const|string>"}],"output":[{"n":"results","t":"array<object>"},{"n":"total","t":"number"},{"n":"attribution","t":"string"},{"n":"effectiveQuery","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"nextExcludeIds","t":"array<string>"},{"n":"notice","t":"string"},{"n":"effectiveViewbox","t":"object"},{"n":"boundedApplied","t":"boolean"},{"n":"tagSelectionCaveat","t":"string"},{"n":"limitNotice","t":"string"},{"n":"error","t":"object"}]},{"name":"openstreetmap_reverse_geocode","server":84,"verb":"reverse","cls":"resolve","resolver":true,"title":"Reverse geocode coordinates to an address","description":"Convert a latitude/longitude pair to the nearest address or named place via Nominatim. The result is the closest indexed OSM object at the requested zoom (18 building, 10 city), which in dense areas can be a neighbouring feature rather than the one containing the coordinate; proximity and layer pick it, never an OSM attribute tag, so find features by tag with openstreetmap_query_nearby, openstreetmap_query_bbox, or openstreetmap_query_raw.","input":[{"n":"lat","t":"number","r":true},{"n":"lon","t":"number","r":true},{"n":"zoom","t":"integer"},{"n":"layer","t":"const|string"},{"n":"extratags","t":"boolean"},{"n":"language","t":"string"}],"output":[{"n":"result","t":"object"},{"n":"attribution","t":"string"},{"n":"tagSelectionCaveat","t":"string"},{"n":"error","t":"object"}]},{"name":"openstreetmap_lookup_objects","server":84,"verb":"lookup","cls":"get","resolver":false,"title":"Look up address details for OSM objects by ID","description":"Fetch the Nominatim address record for known OSM objects by ID, 50 per call with any more returned under deferred_ids, each prefixed N (node), W (way), or R (relation), e.g. \"N240109189\". Use it for IDs already in hand from openstreetmap_query_nearby or openstreetmap_query_bbox; it returns only objects named in osm_ids and lists those with no Nominatim record under not_found (Nominatim skips unnamed and non-place objects, so such an ID may still exist). It cannot select by tag, so discover objects with those tools or openstreetmap_query_raw first.","input":[{"n":"osm_ids","t":"array<string>","r":true},{"n":"extratags","t":"boolean"},{"n":"language","t":"string"}],"output":[{"n":"results","t":"array<object>"},{"n":"not_found","t":"array<string>"},{"n":"deferred_ids","t":"array<string>"},{"n":"total","t":"number"},{"n":"attribution","t":"string"},{"n":"notice","t":"string"},{"n":"tagSelectionCaveat","t":"string"},{"n":"error","t":"object"}]},{"name":"openstreetmap_query_nearby","server":84,"verb":"query","cls":"query","resolver":false,"title":"Find OSM features near a point","description":"Find OSM features within a radius of a point via the Overpass API, the tool for \"what is near X?\" questions. Filter with amenity, or with tag_key plus an optional tag_value, ANDing up to five more filters; every feature returns with its full OSM tag set (no extratags flag here), sorted nearest-first by distance_meters, with nodes covering standalone POIs and ways covering buildings and areas.","input":[{"n":"lat","t":"number","r":true},{"n":"lon","t":"number","r":true},{"n":"radius_meters","t":"number"},{"n":"amenity","t":"string"},{"n":"tag_key","t":"string"},{"n":"tag_value","t":"string"},{"n":"tag_value_match","t":"enum(2)"},{"n":"filters","t":"array<object>"},{"n":"element_types","t":"array<enum(3)>"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"},{"n":"timeout_seconds","t":"integer"}],"output":[{"n":"elements","t":"array<object>"},{"n":"data_timestamp","t":"string"},{"n":"attribution","t":"string"},{"n":"effectiveTag","t":"string"},{"n":"totalFound","t":"number"},{"n":"truncated","t":"boolean"},{"n":"nextOffset","t":"number"},{"n":"servingEndpoint","t":"string"},{"n":"notice","t":"string"},{"n":"limitNotice","t":"string"},{"n":"error","t":"object"}]},{"name":"openstreetmap_query_bbox","server":84,"verb":"query","cls":"query","resolver":false,"title":"Find OSM features inside a bounding box or an OSM boundary","description":"Find OSM features inside an area via the Overpass API, for surveys of everything in a region (openstreetmap_query_nearby covers proximity to a point). Scope with the four corner fields south, west, north, east, or with within and a single OSM boundary ref such as a city relation or a park way, which searches the boundary polygon itself instead of an overcovering box; never both. Filter with amenity, or with tag_key plus an optional tag_value, ANDing up to five more filters; every feature returns with its full OSM tag set (no extratags flag here).","input":[{"n":"within","t":"string"},{"n":"south","t":"number"},{"n":"west","t":"number"},{"n":"north","t":"number"},{"n":"east","t":"number"},{"n":"amenity","t":"string"},{"n":"tag_key","t":"string"},{"n":"tag_value","t":"string"},{"n":"tag_value_match","t":"enum(2)"},{"n":"filters","t":"array<object>"},{"n":"element_types","t":"array<enum(3)>"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"},{"n":"timeout_seconds","t":"integer"}],"output":[{"n":"elements","t":"array<object>"},{"n":"data_timestamp","t":"string"},{"n":"attribution","t":"string"},{"n":"effectiveTag","t":"string"},{"n":"effectiveArea","t":"string"},{"n":"areasTimestamp","t":"string"},{"n":"totalFound","t":"number"},{"n":"truncated","t":"boolean"},{"n":"nextOffset","t":"number"},{"n":"servingEndpoint","t":"string"},{"n":"notice","t":"string"},{"n":"limitNotice","t":"string"},{"n":"error","t":"object"}]},{"name":"openstreetmap_query_raw","server":84,"verb":"query","cls":"query","resolver":false,"title":"Execute a raw Overpass QL query","description":"Run an arbitrary Overpass QL query for anything the convenience tools cannot express: multi-type or union queries, relation membership, historical queries, regex tag matching. The query must include [out:json], e.g. \"[out:json][timeout:15];node[\\\"natural\\\"=\\\"peak\\\"](47.5,-122.5,47.7,-122.2);out body;\"; scope to an OSM boundary with rel(<id>);map_to_area->.a; or way(<id>);map_to_area->.a; then (area.a) on each statement (the 2400000000 way-area offset is gone since Overpass 0.7.57; openstreetmap_query_bbox takes the same scope as within, without QL). The response is one page: page with limit and offset, read totalFound and truncated for the whole match, and an element over max_element_bytes arrives with its members, nodes or geometry array withheld whole and withheldNotice saying how to fetch it back. For plain \"near X\" or \"in this area\" questions use openstreetmap_query_nearby or openstreetmap_query_bbox.","input":[{"n":"query","t":"string","r":true},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"},{"n":"max_element_bytes","t":"integer"},{"n":"timeout_seconds","t":"integer"}],"output":[{"n":"elements","t":"array<object>"},{"n":"total_elements","t":"number"},{"n":"data_timestamp","t":"string"},{"n":"attribution","t":"string"},{"n":"effectiveQuery","t":"string"},{"n":"totalFound","t":"number"},{"n":"truncated","t":"boolean"},{"n":"nextOffset","t":"number"},{"n":"servingEndpoint","t":"string"},{"n":"notice","t":"string"},{"n":"withheldElements","t":"array<object>"},{"n":"withheldNotice","t":"string"},{"n":"limitNotice","t":"string"},{"n":"error","t":"object"}]},{"name":"orcid_get_profile","server":85,"verb":"get","cls":"get","resolver":false,"title":"Get ORCID Researcher Profile","description":"Fetch a researcher's public profile from ORCID: name, other names, biography, keywords, researcher URLs, and external identifiers such as Scopus Author ID, ResearcherID, and Loop profile. This is the entry point for building a researcher dossier. Pass a bare ORCID iD (0000-0001-2345-6789) or a full URI (https://orcid.org/0000-0001-2345-6789). The profile contains only publicly visible data — researchers control visibility per field.","input":[{"n":"orcid_id","t":"string","r":true}],"output":[{"n":"orcidId","t":"string"},{"n":"orcidUri","t":"string"},{"n":"givenNames","t":"string"},{"n":"familyName","t":"string"},{"n":"creditName","t":"string"},{"n":"otherNames","t":"array<string>"},{"n":"biography","t":"string"},{"n":"keywords","t":"array<string>"},{"n":"researcherUrls","t":"array<object>"},{"n":"externalIdentifiers","t":"array<object>"},{"n":"emails","t":"array<object>"},{"n":"countries","t":"array<string>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"orcid_search_researchers","server":85,"verb":"search","cls":"search","resolver":false,"title":"Search ORCID Researchers","description":"Search the ORCID registry using structured field parameters or raw Solr syntax. Provide at least one non-blank search field; all provided structured params are ANDed together. The `query` field adds raw Solr syntax, ANDed with the structured params as one group. Returns ORCID iDs with inline name and institution data — no follow-up profile fetches needed for basic disambiguation. For ranked disambiguation of an ambiguous author name, use orcid_resolve_researcher instead. The ORCID Public API caps results at 10,000 — use pagination for large result sets. Each response also stops at 64,000 bytes; continue a cut page from nextStart.","input":[{"n":"given_name","t":"string"},{"n":"family_name","t":"string"},{"n":"affiliation","t":"string"},{"n":"keyword","t":"string"},{"n":"ror_id","t":"string"},{"n":"doi","t":"string"},{"n":"pmid","t":"string"},{"n":"grant_number","t":"string"},{"n":"query","t":"string"},{"n":"rows","t":"integer"},{"n":"start","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"rows","t":"number"},{"n":"start","t":"number"},{"n":"nextStart","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"numFound","t":"number"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"orcid_get_works","server":85,"verb":"get","cls":"get","resolver":false,"title":"Get ORCID Researcher Works","description":"Retrieve works associated with an ORCID iD — publications, datasets, software, preprints, and more. Returns work summaries with put-codes, titles, types, publication dates, journal names, and all external identifiers (DOIs, PMIDs, arXiv IDs, ISBNs). The first 50 works are returned by default; workCount reports the total available, and prolific records are paged with offset and the returned nextOffset (or raise limit). A page also stops early once the response reaches its 64,000-byte budget, so returnedCount can come in below limit; truncated and nextOffset then carry the continuation. Set include_external_ids to false to omit identifier lists for a lighter payload. Pass the putCode from each work to orcid_get_work_detail to retrieve the full record including abstract and contributors. External IDs are ready for chaining to Crossref, PubMed, or arXiv servers. Works come from the researcher or from member organizations such as Crossref or a university system; each work lists its sources and whether the researcher asserted it (selfAsserted). A researcher may not have linked all their publications.","input":[{"n":"orcid_id","t":"string","r":true},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"},{"n":"include_external_ids","t":"boolean"}],"output":[{"n":"orcidId","t":"string"},{"n":"orcidUri","t":"string"},{"n":"workCount","t":"number"},{"n":"returnedCount","t":"number"},{"n":"offset","t":"number"},{"n":"nextOffset","t":"number"},{"n":"truncated","t":"boolean"},{"n":"works","t":"array<object>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"orcid_get_work_detail","server":85,"verb":"get","cls":"get","resolver":false,"title":"Get ORCID Work Details (Bulk)","description":"Fetch full work details by put-code from orcid_get_works. Accepts 1–1,000 raw codes, deduplicates in first-occurrence order, and fetches the first 100 distinct codes in one request. Returns abstracts, contributors with CRediT roles, the record's external IDs (DOI, PMID, arXiv, ISBN, etc.), citation metadata, journal title, URL, and source provenance. A record listing more than 100 contributors keeps the first 100 plus the requested researcher's own entries, with contributorCount and contributorsTruncated; a citation over 8,192 bytes is left out and flagged by citationOmitted. Per-record errors are returned alongside successful works. Records are admitted under a 64,000-byte budget on each complete response surface. Every requested distinct code unsettled by an admitted work or identified error is listed in deferredPutCodes in request order, including input-cap, byte-budget, and absent-upstream-result deferrals; pass those codes in another call. Notices distinguish the causes; no automatic chunk fetching occurs.","input":[{"n":"orcid_id","t":"string","r":true},{"n":"put_codes","t":"array<integer>","r":true}],"output":[{"n":"orcidId","t":"string"},{"n":"orcidUri","t":"string"},{"n":"works","t":"array<object>"},{"n":"errors","t":"array<object>"},{"n":"deferredPutCodes","t":"array<number>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"orcid_get_affiliations","server":85,"verb":"get","cls":"get","resolver":false,"title":"Get ORCID Researcher Affiliations","description":"Fetch affiliation records for an ORCID researcher. The `types` parameter controls which affiliation sections to return: employment, education, invited-positions, distinctions, memberships, qualifications, services, or all. Default is employment and education. Returns organization names, disambiguated organization identifiers (ROR/GRID/Ringgold), departments, roles, date ranges, and sources. Affiliations come from the researcher or from member organizations such as a university research information system; sources names who added each, and selfAsserted tells the two apart. Absence does not mean no affiliation.","input":[{"n":"orcid_id","t":"string","r":true},{"n":"types","t":"array<enum(8)>"}],"output":[{"n":"orcidId","t":"string"},{"n":"orcidUri","t":"string"},{"n":"affiliationCount","t":"number"},{"n":"affiliations","t":"array<object>"},{"n":"requestedTypes","t":"array<string>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"orcid_get_funding","server":85,"verb":"get","cls":"get","resolver":false,"title":"Get ORCID Researcher Funding","description":"Fetch funding records for an ORCID researcher: grants, contracts, awards, and salary awards. Returns funder names, funder organization identifiers, grant numbers, funding periods, and sources. Funding items come from the researcher or from member organizations such as funders, institutions, and search-and-link tools; sources names who added each. Most researchers have no funding entries even when they hold grants, so absence of funding records does not imply absence of funding. When records exist they are high-value for grant tracking and funder analysis.","input":[{"n":"orcid_id","t":"string","r":true}],"output":[{"n":"orcidId","t":"string"},{"n":"orcidUri","t":"string"},{"n":"fundingCount","t":"number"},{"n":"funding","t":"array<object>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"orcid_get_peer_reviews","server":85,"verb":"get","cls":"get","resolver":false,"title":"Get ORCID Researcher Peer Reviews","description":"Fetch peer review activity for an ORCID researcher: reviewer role (reviewer, editor, chair, etc.), review type, completion dates, ISSN-keyed group identifiers, and the convening organization as ORCID records it — often the service that imported the review (e.g. Publons, Clarivate). ORCID returns no journal name; groupIssn is the key to the journal, and a review that has one is headed by it. Use to assess editorial activity, journal affiliations, and the scope of a researcher's peer review contributions. Reviews come from the researcher or from member organizations that import them; sources names who added each, and coverage varies by researcher.","input":[{"n":"orcid_id","t":"string","r":true},{"n":"offset","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"orcidId","t":"string"},{"n":"orcidUri","t":"string"},{"n":"reviewCount","t":"number"},{"n":"totalCount","t":"number"},{"n":"offset","t":"number"},{"n":"nextOffset","t":"number"},{"n":"truncated","t":"boolean"},{"n":"peerReviews","t":"array<object>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"orcid_get_research_resources","server":85,"verb":"get","cls":"get","resolver":false,"title":"Get ORCID Research Resources","description":"List allocation proposals for an ORCID researcher, or supply put_code from a summary record to retrieve its actual resource items. Summary is the default view and includes every proposal host, identifiers, access period, and source provenance; hostOrganization remains the first proposal host. Detail adds item names, types, all operators, identifiers, and URLs. Page items with item_offset (default 0) and item_limit (default 50, effective maximum 100, hard maximum 10,000), both requiring put_code; continue at nextItemOffset with the same selector. Both detail surfaces fit 64,000 bytes including metadata and continuation, with an explicit budgetOverflow exception for an indivisible oversized item returned alone or oversized proposal metadata. Most researchers have no entries; allocation systems such as ACCESS deposit these records.","input":[{"n":"orcid_id","t":"string","r":true},{"n":"put_code","t":"integer"},{"n":"item_offset","t":"integer"},{"n":"item_limit","t":"integer"}],"output":[{"n":"orcidId","t":"string"},{"n":"orcidUri","t":"string"},{"n":"view","t":"enum(2)"},{"n":"putCode","t":"number"},{"n":"truncated","t":"boolean"},{"n":"itemLimitNotice","t":"string"},{"n":"budgetOverflow","t":"string"},{"n":"resourceCount","t":"number"},{"n":"resources","t":"array<object>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"orcid_resolve_researcher","server":85,"verb":"resolve","cls":"resolve","resolver":true,"title":"Resolve ORCID Researcher","description":"Disambiguate an author name to a verified ORCID iD. Returns ranked candidates (5 by default, up to 20 via the rows parameter) with transparent disambiguation signals: name match type (exact/partial/other-name/none), institution overlap flag, and whether a DOI or PMID anchor was used in the query. The name is searched as an exact phrase first; when that finds nothing, byline initials (J. Doudna, Jennifer A. Doudna) and then the other names listed on ORCID records are tried. A DOI or PMID anchor is near-deterministic — it filters to researchers who have linked that specific work to their ORCID record. Use this tool (not orcid_search_researchers) when the input is an ambiguous name that needs ranked disambiguation. No synthetic scores are used — raw signals only.","input":[{"n":"name","t":"string","r":true},{"n":"affiliation","t":"string"},{"n":"doi","t":"string"},{"n":"pmid","t":"string"},{"n":"rows","t":"integer"}],"output":[{"n":"candidates","t":"array<object>"},{"n":"queryUsed","t":"string"},{"n":"relaxedQuery","t":"string"},{"n":"totalFound","t":"number"},{"n":"primaryQuery","t":"string"},{"n":"primaryTotalFound","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"osv_list_ecosystems","server":86,"verb":"list","cls":"list","resolver":false,"title":"Osv List Ecosystems","description":"Return the supported ecosystem identifier strings for osv_query_package and osv_query_batch: every ecosystem the OSV schema names that OSV.dev accepts at query time, plus GIT, as verified on 2026-09-24. Ecosystem strings are case-sensitive exact matches — passing \"pypi\" instead of \"PyPI\" returns an error from the API. Use this tool to discover valid ecosystem strings before querying, or to verify an ecosystem identifier from a lockfile format. The list is static and may lag ecosystems added after that date.","input":[],"output":[{"n":"ecosystems","t":"array<string>"},{"n":"note","t":"string"},{"n":"error","t":"object"}]},{"name":"osv_query_package","server":86,"verb":"query","cls":"query","resolver":false,"title":"Osv Query Package","description":"Query known vulnerabilities for a single package version using {name, ecosystem, version} or {purl, version?}; supply exactly one embedded or separate version. Returns all matching OSV advisories with severity (CVSS vectors), CVE aliases, affected version ranges, and the fixed versions listed for the queried package. Use osv_list_ecosystems to validate the ecosystem string before querying — ecosystem strings are case-sensitive exact matches and an invalid value returns an error, not empty results. For overflow, repeat the original input with page: overflow.page. Continue the same path with offset: page.nextOffset and revision: page.revision until nextOffset is null. Retrieve each entries[].deferred.path separately at offset zero without a revision. Do not pass the output page object as input. Set page.advisoryId to an announced ID to fetch its fields with fixes and severity for the queried package; retain advisoryId on subsequent pages. Pages are fresh lookups; restart a changed node without a revision. Transmission overflow and upstream truncated are separate; neither confirms clean.","input":[{"n":"name","t":"string"},{"n":"ecosystem","t":"string"},{"n":"version","t":"string"},{"n":"purl","t":"string"},{"n":"page","t":"object"}],"output":[{"n":"vulns","t":"array<object>"},{"n":"truncated","t":"boolean"},{"n":"queryMeta","t":"object"},{"n":"preview","t":"object"},{"n":"overflow","t":"object"},{"n":"page","t":"object"},{"n":"notice","t":"string"},{"n":"effectiveQuery","t":"string"},{"n":"error","t":"object"}]},{"name":"osv_get_vulnerability","server":86,"verb":"get","cls":"get","resolver":false,"title":"Osv Get Vulnerability","description":"Fetch the full advisory record for an OSV vulnerability ID. Returns the complete record: summary, full details text, CVE aliases, all affected packages and version ranges, fix versions, CVSS severity vectors, CWE weakness IDs, and references. Use when osv_query_package or osv_query_batch returns a vuln ID and you need the full advisory context — affected packages or remediation guidance. For overflow, repeat the original input with page: overflow.page. Continue the same path with offset: page.nextOffset and revision: page.revision until nextOffset is null. Retrieve each entries[].deferred.path separately at offset zero without a revision. Do not pass the output page object as input. Every page is a fresh lookup; restart a changed node without a revision. Transmission overflow and upstream truncation are separate; neither confirms clean.","input":[{"n":"page","t":"object"},{"n":"id","t":"string","r":true}],"output":[{"n":"id","t":"string"},{"n":"summary","t":"string"},{"n":"details","t":"string"},{"n":"aliases","t":"array<string>"},{"n":"published","t":"string"},{"n":"modified","t":"string"},{"n":"severity","t":"array<object>"},{"n":"severityLabel","t":"string"},{"n":"severitySource","t":"object"},{"n":"withdrawn","t":"string"},{"n":"affected","t":"array<object>"},{"n":"cweIds","t":"array<string>"},{"n":"references","t":"array<object>"},{"n":"schemaVersion","t":"string"},{"n":"preview","t":"object"},{"n":"overflow","t":"object"},{"n":"page","t":"object"},{"n":"error","t":"object"}]},{"name":"osv_query_batch","server":86,"verb":"query","cls":"query","resolver":false,"title":"Osv Query Batch","description":"Query vulnerabilities for multiple packages in one call — the primary tool for dependency audits, SBOM scanning, and lockfile triage. Pass up to 1000 mixed {name, ecosystem, version} tuples and {purl, version?} identifiers, with exactly one embedded or separate version per PURL. Each entry in the response corresponds positionally to the input. Each finding includes CVE aliases for chaining to nist-nvd-mcp-server for CVSS scoring. Large replies retain the complete summary. For overflow, repeat the original packages array with page: overflow.page. Continue the same path with offset: page.nextOffset and revision: page.revision until nextOffset is null. Retrieve each entries[].deferred.path separately at offset zero without a revision. Do not pass the output page object as input. /results/17 selects original input row 17, even when earlier rows failed. Pages are fresh lookups and do not recompute the initial summary; restart a changed node without a revision. Transmission overflow and upstream truncated are separate; neither confirms clean.","input":[{"n":"page","t":"object"},{"n":"packages","t":"array<object>","r":true}],"output":[{"n":"results","t":"array<object>"},{"n":"summary","t":"object"},{"n":"preview","t":"object"},{"n":"overflow","t":"object"},{"n":"page","t":"object"},{"n":"notice","t":"string"},{"n":"effectiveQuery","t":"string"},{"n":"error","t":"object"}]},{"name":"osv_query_commit","server":86,"verb":"query","cls":"query","resolver":false,"title":"Osv Query Commit","description":"Query known vulnerabilities for one full Git commit hash (40 hexadecimal SHA-1 or 64 hexadecimal SHA-256 characters, case-insensitive). Abbreviated hashes are rejected. Returns advisory summaries, record-wide severity and GIT ranges with repositories and ordered fix events; use osv_get_vulnerability for full records. No package-specific fixedVersions are inferred. For overflow, repeat the original input with page: overflow.page. Continue the same path with offset: page.nextOffset and revision: page.revision until nextOffset is null. Retrieve entries[].deferred.path separately at offset zero without a revision. Do not pass the output page object as input. Pages are fresh lookups; restart a changed node without a revision. Transmission overflow and upstream truncated are separate; neither confirms clean.","input":[{"n":"commit","t":"string","r":true},{"n":"page","t":"object"}],"output":[{"n":"vulns","t":"array<object>"},{"n":"truncated","t":"boolean"},{"n":"queryMeta","t":"object"},{"n":"preview","t":"object"},{"n":"overflow","t":"object"},{"n":"page","t":"object"},{"n":"error","t":"object"}]},{"name":"ourairports_search_airports","server":87,"verb":"search","cls":"search","resolver":false,"title":"Search Airports","description":"Search the bundled OurAirports corpus by free-text (name / municipality / keywords) and/or facets (country, region, type). Every query token must match (word order and partial words are handled). Returns ranked airport summaries — operational and larger airports first — each with its full code set and coordinates, ready to chain into ourairports_get_airport. Closed airports are excluded unless include_closed is set. Use ourairports_list_countries for valid country/region codes. For \"nearest airport to a coordinate\" use ourairports_find_airports instead. OurAirports is community-edited — not authoritative for flight operations.","input":[{"n":"query","t":"string"},{"n":"country","t":"const|string"},{"n":"region","t":"const|string"},{"n":"type","t":"enum(7)"},{"n":"include_closed","t":"boolean"},{"n":"limit","t":"integer"}],"output":[{"n":"airports","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"ourairports_search_runways","server":87,"verb":"search","cls":"search","resolver":false,"title":"Search Runways","description":"Search runways across the whole bundled OurAirports corpus by attribute, joined back to their airports — the cross-airport counterpart to ourairports_get_airport (which returns runways for one already-known airport). Filter by airport facets (country, region, type) and runway facets (surface, min_length_ft, min_width_ft, lighted). Returns one flat {airport, runway} row per matching runway, so an airport with three matching runways contributes three rows. `surface` is a case-insensitive substring match against the raw upstream surface string, not an exact code — the runway surface must CONTAIN your text, so a shorter fragment matches more variants (no controlled vocabulary: \"asp\" matches ASP, ASPH, and Asphalt). Lengths are the full runway surface, including displaced thresholds and overruns — not usable takeoff or landing distance; each runway also reports its displaced threshold per end. A runway whose length or width is unknown is excluded when the matching min_*_ft filter is set — the data can never confirm it meets the threshold. Closed airports and closed runways are both excluded unless their include_* flag is set. Use ourairports_list_countries for valid country/region codes. OurAirports is community-edited — not authoritative for flight operations.","input":[{"n":"country","t":"const|string"},{"n":"region","t":"const|string"},{"n":"type","t":"enum(7)"},{"n":"min_length_ft","t":"number"},{"n":"min_width_ft","t":"number"},{"n":"surface","t":"string"},{"n":"lighted","t":"boolean"},{"n":"include_closed_airports","t":"boolean"},{"n":"include_closed_runways","t":"boolean"},{"n":"limit","t":"integer"}],"output":[{"n":"runways","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"ourairports_get_airport","server":87,"verb":"get","cls":"get","resolver":false,"title":"Get Airport","description":"Fetch the full record for one airport resolved by ANY code — IATA (SEA), ICAO (KSEA), GPS, national/local, or the OurAirports ident — with its runways and radio frequencies inline. The single `code` param is resolved case-insensitively across all five identifier spaces (priority: ident, then ICAO, IATA, GPS, local). The response always echoes the airport's complete code set and a resolutionNote naming which space matched; when other airports carry the same code, the note names each one (ident, country, code space) and why this airport won, so a wrong resolution is self-correcting — pass the other airport's ident to fetch it. Absent codes are reported as null, never an error. Runway lengths are the full runway surface (displaced thresholds and overruns included), not usable takeoff or landing distance. Closed airports always resolve. OurAirports is community-edited — not authoritative for flight operations.","input":[{"n":"code","t":"string","r":true},{"n":"include","t":"array<enum(2)>"}],"output":[{"n":"airport","t":"object"},{"n":"resolvedVia","t":"string"},{"n":"resolutionNote","t":"string"},{"n":"included","t":"array<enum(2)>"},{"n":"runways","t":"array<object>"},{"n":"frequencies","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"ourairports_find_airports","server":87,"verb":"find","cls":"search","resolver":false,"title":"Find Airports","description":"Find airports within a radius of a latitude/longitude, ranked nearest-first by great-circle distance, each with its distance (km) and bearing (degrees true) from the query point. The grounding tool for \"nearest airport to here\" — pair it with a live aviation server to fetch weather or positions for the result. Takes a coordinate only: no geocoding, so resolve place names to lat/lon upstream first (e.g. an OpenStreetMap or Open-Meteo geocode tool). Closed airports are excluded unless include_closed is set. totalCount is the in-radius match count before limit; a capped result says so. OurAirports is community-edited — not authoritative for flight operations.","input":[{"n":"latitude","t":"number","r":true},{"n":"longitude","t":"number","r":true},{"n":"radius_km","t":"number"},{"n":"type","t":"enum(7)"},{"n":"include_closed","t":"boolean"},{"n":"limit","t":"integer"}],"output":[{"n":"airports","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"ourairports_find_navaids","server":87,"verb":"find","cls":"search","resolver":false,"title":"Find Navaids","description":"Find navigation aids (VOR, VOR-DME, DME, NDB, NDB-DME, TACAN, VORTAC) two ways: spatially, by passing latitude+longitude (with an optional radius_km); or relationally, by passing airport_code to get the navaids that serve that airport. Supply exactly one mode — both or neither is a validation error. Coordinate mode ranks nearest-first with distance (km) and bearing (degrees true). frequencyKhz is the stored value for every navaid type (a VOR on 114.5 MHz reads 114500); frequencyMhz carries the VHF frequency of a VOR or VOR-DME and the paired VHF frequency of a DME, TACAN, or VORTAC, and is null for NDB and NDB-DME, which are tuned in kHz. Each navaid also carries its DME paired frequency, usage class, power, and actual and slaved magnetic variation. totalCount is the match count before limit; a capped result says so. Airport mode returns an empty list (not an error) when the airport exists but has no associated navaids; an unknown airport_code is an error. When airport_code is also a code of other airports, a resolutionNote says which airport it resolved to and names the others by ident — pass that ident to query one of them. OurAirports is community-edited — not authoritative for flight operations.","input":[{"n":"latitude","t":"number"},{"n":"longitude","t":"number"},{"n":"radius_km","t":"number"},{"n":"airport_code","t":"string"},{"n":"type","t":"enum(7)"},{"n":"limit","t":"integer"}],"output":[{"n":"mode","t":"enum(2)"},{"n":"airportIdent","t":"string"},{"n":"navaids","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"resolutionNote","t":"string"},{"n":"error","t":"object"}]},{"name":"ourairports_list_countries","server":87,"verb":"list","cls":"list","resolver":false,"title":"List Countries","description":"List countries and valid country/region filter codes for ourairports_search_airports and ourairports_search_runways, with airport counts excluding closed airports. Restrict to country for one country's regions; country and continent combine as AND. include_regions without a scope returns the entire region table, so prefer country for a one-country lookup. Unscoped and continent-only requests remain available.","input":[{"n":"country","t":"const|string"},{"n":"continent","t":"enum(7)"},{"n":"include_regions","t":"boolean"}],"output":[{"n":"countries","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"paleobiology_search_occurrences","server":88,"verb":"search","cls":"search","resolver":false,"title":"paleobiology-mcp-server: search fossil occurrences","description":"Search fossil occurrences filtered by taxon, geologic time, geography, and depositional environment — the flagship. Use base_name for a clade and all its descendants (what \"Tyrannosaurus occurrences\" usually means), base_id for that same clade by resolved taxon id, or taxon_name for an exact taxon. Bound the age by a named interval (e.g. \"Maastrichtian\") or a max_ma/min_ma range, and/or a lng/lat bounding box; scope to a single locality with collection_no (take it from a paleobiology_search_collections row). At least one filter is required — taxon, time, place, environment, or collection_no. Every row carries two distinct coordinate systems — modern lng/lat (where the rock is today) and paleo lng/lat (where the landmass sat at deposition) — plus the formation, age interval, and higher classification (phylum through genus); never plot a deep-time occurrence on a modern coastline. Resolve a name with paleobiology_get_taxon first if unsure. Broad queries return many rows: an inline preview answers the immediate question. When this deployment has DataCanvas enabled, a set that outgrows the inline preview stages on a canvas (canvas_id + table_name, returned only then): list its columns with paleobiology_dataframe_describe, then run SQL with paleobiology_dataframe_query (count by interval, group by formation/country, map by region). The response reports how many occurrences matched in total, which rows this page covers, and the offset that reaches the next page — page through the whole match set with limit/offset.","input":[{"n":"base_name","t":"string"},{"n":"base_id","t":"integer"},{"n":"taxon_name","t":"string"},{"n":"collection_no","t":"integer"},{"n":"interval","t":"string"},{"n":"max_ma","t":"number"},{"n":"min_ma","t":"number"},{"n":"lngmin","t":"number"},{"n":"lngmax","t":"number"},{"n":"latmin","t":"number"},{"n":"latmax","t":"number"},{"n":"environment","t":"enum(3)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"},{"n":"canvas_id","t":"string"}],"output":[{"n":"occurrences","t":"array<object>"},{"n":"spilled","t":"boolean"},{"n":"canvas_id","t":"string"},{"n":"table_name","t":"string"},{"n":"row_count","t":"number"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"attribution","t":"string"},{"n":"error","t":"object"}]},{"name":"paleobiology_get_taxon","server":88,"verb":"get","cls":"get","resolver":false,"title":"paleobiology-mcp-server: get taxon record and fossil range","description":"Resolve a taxon by name (e.g. \"Tyrannosaurus\") or by integer taxon_no to its accepted name, rank, higher classification, immediate parent, fossil occurrence count, and first/last appearance (FAD/LAD) range in millions of years — \"when did this clade exist, and what is it.\" Run this first to resolve a name into the accepted name and taxon_no, then pass that id as base_id to paleobiology_search_occurrences, paleobiology_get_diversity, or paleobiology_search_collections for a clade-inclusive filter that carries no name ambiguity (the same id also appears as accepted_no on occurrence rows). Set show_children to also list immediate child taxa. PBDB taxonomy is opinionated and can differ from GBIF's backbone, so the accepted name may differ from the name you searched.","input":[{"n":"name","t":"string"},{"n":"taxon_no","t":"integer"},{"n":"show_children","t":"boolean"},{"n":"children_offset","t":"integer"}],"output":[{"n":"taxon_no","t":"integer"},{"n":"accepted_name","t":"string"},{"n":"rank","t":"string"},{"n":"parent_no","t":"integer"},{"n":"parent_name","t":"string"},{"n":"classification","t":"object"},{"n":"extant","t":"boolean"},{"n":"occurrence_count","t":"number"},{"n":"first_appearance","t":"object"},{"n":"last_appearance","t":"object"},{"n":"children","t":"array<object>"},{"n":"children_offset","t":"integer"},{"n":"children_truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"attribution","t":"string"},{"n":"error","t":"object"}]},{"name":"paleobiology_get_diversity","server":88,"verb":"get","cls":"get","resolver":false,"title":"paleobiology-mcp-server: diversity through time","description":"Compute a diversity / origination / extinction curve for a clade across geologic time, binned by period, epoch, or age — answers \"plot dinosaur genus diversity across the Mesozoic.\" Pass a clade-inclusive base_name (or base_id, the same clade by resolved taxon id — exactly one of the two) and bound the span by a named interval (e.g. \"Mesozoic\") or a max_ma/min_ma range; choose what to count (genera, species, or families) and the bin resolution. The full bin set returns inline — a diversity series is a bounded set of geologic intervals — so you read the curve, the turnover, and the per-bin origination/extinction directly. Counts reflect SAMPLED diversity, biased by collection effort and rock availability, not true past diversity.","input":[{"n":"base_name","t":"string"},{"n":"base_id","t":"integer"},{"n":"count","t":"enum(3)"},{"n":"resolution","t":"enum(3)"},{"n":"interval","t":"string"},{"n":"max_ma","t":"number"},{"n":"min_ma","t":"number"}],"output":[{"n":"bins","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"attribution","t":"string"},{"n":"error","t":"object"}]},{"name":"paleobiology_list_intervals","server":88,"verb":"list","cls":"list","resolver":false,"title":"paleobiology-mcp-server: list geologic intervals","description":"Look up the geologic time scale — eons, eras, periods, epochs, and ages with their absolute-age boundaries in millions of years (Ma) and nesting. This is the reference that grounds every temporal filter on the other tools and translates a named interval like \"Late Cretaceous\" to its 100.5–66.0 Ma boundaries (and back). Filter by a name substring, a Ma range (overlap match), and/or a level; call with no filters to browse the full scale. Browsing and every name on the bundled ICS international-scale snapshot are answered offline. A name the snapshot does not carry — the sub-stage and regional names that occurrence and collection rows report, such as \"Late Maastrichtian\" or \"Lancian\" — costs one PBDB lookup across its other time scales; the response names which source answered and which scale the interval belongs to.","input":[{"n":"name","t":"string"},{"n":"min_ma","t":"number"},{"n":"max_ma","t":"number"},{"n":"level","t":"enum(5)"}],"output":[{"n":"intervals","t":"array<object>"},{"n":"source","t":"enum(2)"},{"n":"snapshot_version","t":"string"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"paleobiology_search_collections","server":88,"verb":"search","cls":"search","resolver":false,"title":"paleobiology-mcp-server: search fossil collections","description":"Find fossil collections (localities) by area and geologic time — \"what has been dug up here, and from what rock.\" Each locality returns its location, age (named interval and Ma), formation and strata, lithology, depositional environment, and the count of co-occurring fossils. Filter by a clade-inclusive base_name (or base_id, the same clade by resolved taxon id), a named interval or max_ma/min_ma range, a lng/lat bounding box, a formation or lithology name, and/or an environment. Results page inline via limit/offset (the response discloses when more remain). Take a collection_no from a row and pass it — or the same bbox+interval — to paleobiology_search_occurrences to see the actual fauna found together.","input":[{"n":"base_name","t":"string"},{"n":"base_id","t":"integer"},{"n":"interval","t":"string"},{"n":"max_ma","t":"number"},{"n":"min_ma","t":"number"},{"n":"lngmin","t":"number"},{"n":"lngmax","t":"number"},{"n":"latmin","t":"number"},{"n":"latmax","t":"number"},{"n":"formation","t":"string"},{"n":"lithology","t":"string"},{"n":"environment","t":"enum(3)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"collections","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"attribution","t":"string"},{"n":"error","t":"object"}]},{"name":"paleobiology_get_references","server":88,"verb":"get","cls":"get","resolver":false,"title":"paleobiology-mcp-server: get bibliographic references","description":"Resolve PBDB reference_no values — the source publication on every paleobiology_search_occurrences and paleobiology_search_collections row — to full citations with authors, year, title, publication, volume, pages, and DOI. Pass the ids from a page of rows in one call: the first 25 distinct ids are resolved and any beyond that come back in remaining_reference_nos for a follow-up call. Ids PBDB has no reference for are listed in not_found. Results keep the order the ids were given.","input":[{"n":"reference_nos","t":"array<integer>","r":true}],"output":[{"n":"references","t":"array<object>"},{"n":"not_found","t":"array<integer>"},{"n":"remaining_reference_nos","t":"array<integer>"},{"n":"notice","t":"string"},{"n":"attribution","t":"string"},{"n":"error","t":"object"}]},{"name":"paleobiology_dataframe_query","server":88,"verb":"dataframe","cls":"query","resolver":false,"title":"paleobiology-mcp-server: query staged occurrences with SQL","description":"Run a read-only SQL SELECT against occurrence result sets staged on a DataCanvas by paleobiology_search_occurrences. This is how you analyze a large fossil set without re-fetching it: count occurrences by early_interval, group by formation, country (cc), or accepted_name, or filter by a paleo/modern coordinate range. The classification column is JSON — roll up by rank with json_extract_string(classification, '$.family') (also $.phylum, $.class, $.order, $.genus). Staged rows are occurrences, so collection-only fields such as lithology are not present. Reference tables by the table_name that paleobiology_search_occurrences returned — call paleobiology_dataframe_describe first if you do not know the table or column names. A result too large to return inline comes back as its first rows, with a notice naming the ORDER BY … LIMIT/OFFSET that reads the rest. SELECT only; writes and file-reading functions are rejected.","input":[{"n":"canvas_id","t":"string","r":true},{"n":"sql","t":"string","r":true}],"output":[{"n":"rows","t":"array<object>"},{"n":"row_count","t":"number"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"paleobiology_dataframe_describe","server":88,"verb":"dataframe","cls":"query","resolver":false,"title":"paleobiology-mcp-server: describe staged canvas tables","description":"List the tables and their columns staged on a DataCanvas by paleobiology_search_occurrences. Call this before paleobiology_dataframe_query to discover the exact table_name and column names to reference in SQL.","input":[{"n":"canvas_id","t":"string","r":true}],"output":[{"n":"tables","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"pentest_get_guide","server":89,"verb":"get","cls":"get","resolver":false,"title":"Pentest Guide","description":"Return an authorized-testing methodology for a selected vector and optional target context. The playbook covers reconnaissance, enumeration, exploitation, and post-exploitation phases with objectives, techniques, detection signals, mitigations, common pitfalls, references, and context-derived tool suggestions across 15 vectors.","input":[{"n":"vector","t":"enum(15)","r":true},{"n":"target_context","t":"object"},{"n":"phase","t":"enum(5)"}],"output":[{"n":"vector","t":"string"},{"n":"authorized_use_reminder","t":"string"},{"n":"phases","t":"array<object>"},{"n":"owasp_references","t":"array<string>"},{"n":"attack_technique_ids","t":"array<string>"},{"n":"nextToolSuggestions","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"pentest_analyze_response","server":89,"verb":"analyze","cls":"analyze","resolver":false,"title":"Pentest Analyze Response","description":"Analyze an HTTP response from authorized probing for information leakage, fingerprinting signals, and related exposure. Structured findings cover version disclosures, stack traces, debug headers, internal paths, authentication patterns, CORS configuration, detection signals, remediation, and associated methodology vectors.","input":[{"n":"response_headers","t":"string"},{"n":"response_body","t":"string"},{"n":"status_code","t":"integer"},{"n":"context","t":"string"}],"output":[{"n":"authorized_use_reminder","t":"string"},{"n":"findings","t":"array<object>"},{"n":"fingerprints","t":"object"},{"n":"summary","t":"string"},{"n":"nextToolSuggestions","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"pentest_lookup_technique","server":89,"verb":"lookup","cls":"get","resolver":false,"title":"Pentest Lookup Technique","description":"Look up a MITRE ATT&CK technique by exact ID or keyword. Results include tactics, platforms, description, detection data, public procedure examples, mitigations, related sub-techniques, and dataset version.","input":[{"n":"query","t":"string","r":true},{"n":"include_subtechniques","t":"boolean"}],"output":[{"n":"authorized_use_reminder","t":"string"},{"n":"technique_id","t":"string"},{"n":"name","t":"string"},{"n":"tactics","t":"array<string>"},{"n":"description","t":"string"},{"n":"platforms","t":"array<string>"},{"n":"detection","t":"object"},{"n":"mitigations","t":"array<object>"},{"n":"procedure_examples","t":"array<object>"},{"n":"sub_techniques","t":"array<object>"},{"n":"attack_version","t":"string"},{"n":"error","t":"object"}]},{"name":"pentest_lookup_group","server":89,"verb":"lookup","cls":"get","resolver":false,"title":"Pentest Lookup Group","description":"Look up a MITRE ATT&CK threat group or software entry by ID, name, or keyword. Results include ATT&CK identity, aliases, type, description, and associated techniques with procedure-level context from public ATT&CK reporting.","input":[{"n":"query","t":"string","r":true}],"output":[{"n":"authorized_use_reminder","t":"string"},{"n":"id","t":"string"},{"n":"name","t":"string"},{"n":"aliases","t":"array<string>"},{"n":"type","t":"enum(2)"},{"n":"description","t":"string"},{"n":"techniques_used","t":"array<object>"},{"n":"attack_version","t":"string"},{"n":"error","t":"object"}]},{"name":"pentest_map_techniques","server":89,"verb":"map","cls":"analyze","resolver":false,"title":"Pentest Map Techniques","description":"Rank ATT&CK techniques and OWASP test cases against an authorized target profile of technology stack, exposed services, authentication type, and operating system. Results include profile-specific relevance, detection opportunities, mitigations, and associated methodology vectors.","input":[{"n":"stack","t":"array<string>"},{"n":"services","t":"array<string>"},{"n":"auth_type","t":"enum(9)"},{"n":"os","t":"enum(4)"},{"n":"limit","t":"integer"}],"output":[{"n":"authorized_use_reminder","t":"string"},{"n":"ranked_techniques","t":"array<object>"},{"n":"owasp_test_cases","t":"array<object>"},{"n":"profile_summary","t":"string"},{"n":"attack_version","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"pentest_generate_payloads","server":89,"verb":"generate","cls":"analyze","resolver":false,"title":"Pentest Generate Payloads","description":"Generate context-specific payload templates for authorized systems. Each template includes its vulnerability category, context rationale, WAF/IDS detection signature, mitigation, optional WAF research note, and optional encoded variant.","input":[{"n":"category","t":"enum(14)","r":true},{"n":"injection_context","t":"enum(16)","r":true},{"n":"waf_profile","t":"enum(10)"},{"n":"encoding","t":"array<enum(8)>"},{"n":"count","t":"integer"}],"output":[{"n":"category","t":"string"},{"n":"injection_context","t":"string"},{"n":"authorized_use_reminder","t":"string"},{"n":"payloads","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"pentest_encode_payload","server":89,"verb":"encode","cls":"analyze","resolver":false,"title":"Pentest Encode","description":"Transform a payload string through an ordered encoding chain for authorized filter research. Results include the final value, intermediate values, optional decode path and rationale, and detection guidance. All transforms are local; no live probing occurs.","input":[{"n":"payload","t":"string","r":true},{"n":"chain","t":"array<enum(10)>","r":true},{"n":"explain","t":"boolean"}],"output":[{"n":"authorized_use_reminder","t":"string"},{"n":"original","t":"string"},{"n":"encoded","t":"string"},{"n":"intermediate_steps","t":"array<object>"},{"n":"decode_path","t":"string"},{"n":"bypass_rationale","t":"string"},{"n":"detection_note","t":"string"},{"n":"error","t":"object"}]},{"name":"pgx_search_pairs","server":90,"verb":"search","cls":"search","resolver":false,"title":"Search evaluated gene–drug pairs","description":"Search evaluated gene–drug pairs by gene, literal drug-name substring, exact drug/RxNorm/ATC identifiers, evaluation level or testing label. Filters combine with AND; identifiers never fall back to name-only search. Results include source drug identifiers and guideline links for pgx_get_guideline. A pair evaluation is not a prescribing recommendation. Follow nextOffset to continue.","input":[{"n":"geneSymbol","t":"string"},{"n":"drugName","t":"string"},{"n":"drugId","t":"string"},{"n":"rxnormId","t":"string"},{"n":"atcId","t":"string"},{"n":"cpicLevel","t":"enum(8)"},{"n":"provisional","t":"boolean"},{"n":"pgxTesting","t":"enum(5)"},{"n":"usedForRecommendation","t":"enum(2)"},{"n":"includeRetired","t":"boolean"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"items","t":"array<object>"},{"n":"page","t":"object"},{"n":"provenance","t":"object"},{"n":"effectiveQuery","t":"object"},{"n":"notices","t":"array<string>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"error","t":"object"}]},{"name":"pgx_get_guideline","server":90,"verb":"get","cls":"get","resolver":false,"title":"Get guideline coverage","description":"Retrieve guideline coverage by source ID, exact gene symbol or exact drug name/ID. Default summary pages complete guideline records with exact drugCount/pairCount. view=drugs or pairs requires by=id and pages only that related collection, retaining its guideline descriptor. Ambiguous drug names page candidates for retry with drugId. Follow page.nextOffset; the 24,000-byte soft budget cuts only between complete rows, with oversizedRow for an indivisible exception. Missing coverage is found=false. Consult linked guidelines before clinical use.","input":[{"n":"view","t":"enum(3)"},{"n":"by","t":"enum(3)","r":true},{"n":"guidelineId","t":"integer"},{"n":"geneSymbol","t":"string"},{"n":"drugName","t":"string"},{"n":"drugId","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"view","t":"enum(3)"},{"n":"oversizedRow","t":"boolean"},{"n":"page","t":"object"},{"n":"found","t":"boolean"},{"n":"guidelines","t":"array<object>"},{"n":"drugs","t":"array<object>"},{"n":"pairs","t":"array<object>"},{"n":"candidates","t":"array<object>"},{"n":"guidance","t":"string"},{"n":"clinicalCaveat","t":"const"},{"n":"provenance","t":"object"},{"n":"effectiveQuery","t":"object"},{"n":"notices","t":"array<string>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"error","t":"object"}]},{"name":"pgx_lookup_diplotype","server":90,"verb":"lookup","cls":"get","resolver":false,"title":"Look up diplotype","description":"Translate a CPIC-supported diplotype or allele-status result for one gene. Supply geneSymbol and exact diplotype notation, including star alleles, named HLA positive/negative statuses, or non-star sequences; use pgx_search_alleles and pgx_list_reference with topic phenotypes to inspect supported values. Exact lookup precedes bounded reverse-order or status aliases. Multiple source rows remain ambiguous; no activity score or missing gene result is inferred.","input":[{"n":"geneSymbol","t":"string","r":true},{"n":"diplotype","t":"string","r":true}],"output":[{"n":"found","t":"boolean"},{"n":"geneSymbol","t":"string"},{"n":"inputDiplotype","t":"string"},{"n":"matchedDiplotype","t":"string"},{"n":"records","t":"array<object>"},{"n":"guidance","t":"string"},{"n":"provenance","t":"object"},{"n":"effectiveQuery","t":"object"},{"n":"notices","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"pgx_get_recommendations","server":90,"verb":"get","cls":"get","resolver":false,"title":"Get recommendations","description":"Browse CPIC recommendations in drug mode with one exact drugName or drugId. Match across drugs in results mode with geneResults or geneSymbol plus phenotype/activityScore, or genotype mode with 1–10 uniquely resolved gene/diplotype entries. Both matching modes accept an optional drug. Use pgx_list_reference topic phenotypes for source values. Every matched prerequisite must be explicit; omitted genes are never normal or negative. Preserve populations, scores, classifications and source text. Follow page.nextOffset and incompletePage.nextOffset independently; consult linked guidelines before clinical use.","input":[{"n":"mode","t":"enum(3)","r":true},{"n":"drugName","t":"string"},{"n":"drugId","t":"string"},{"n":"geneSymbol","t":"string"},{"n":"phenotype","t":"string"},{"n":"activityScore","t":"string|number"},{"n":"geneResults","t":"object"},{"n":"genotype","t":"object"},{"n":"population","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"},{"n":"incompleteLimit","t":"integer"},{"n":"incompleteOffset","t":"integer"}],"output":[{"n":"status","t":"enum(5)"},{"n":"items","t":"array<object>"},{"n":"incompleteMatches","t":"array<object>"},{"n":"geneResolutions","t":"array<object>"},{"n":"page","t":"object"},{"n":"incompletePage","t":"object"},{"n":"clinicalCaveat","t":"string"},{"n":"provenance","t":"object"},{"n":"effectiveQuery","t":"object"},{"n":"notices","t":"array<string>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"error","t":"object"}]},{"name":"pgx_search_alleles","server":90,"verb":"search","cls":"search","resolver":false,"title":"Search alleles","description":"Inspect CPIC allele function, evidence, definition metadata and complete population frequencies for geneSymbol. Name matches literally first, then a matching gene prefix before a star allele may be removed; clinicalFunctionalStatus matches literal text case-insensitively. Discover genes with pgx_list_reference. Definitions are metadata, not variant interpretation. Frequencies are source fractions; inferred frequencies are not observations and do not establish individual risk. Pages have a 24,000-byte complete-result soft budget; an indivisible exception sets oversizedRow. Continue with page.nextOffset.","input":[{"n":"geneSymbol","t":"string","r":true},{"n":"name","t":"string"},{"n":"clinicalFunctionalStatus","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"oversizedRow","t":"boolean"},{"n":"items","t":"array<object>"},{"n":"page","t":"object"},{"n":"provenance","t":"object"},{"n":"effectiveQuery","t":"object"},{"n":"notices","t":"array<string>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"error","t":"object"}]},{"name":"pgx_list_reference","server":90,"verb":"list","cls":"list","resolver":false,"title":"List pharmacogenomics reference values","description":"Inspect gene symbols, gene-specific source results, CPIC levels, ClinPGx testing labels, recommendation classifications and input formats. phenotypes requires geneSymbol and preserves distinct activity-score rows, frequencies and consultation text. Live genes/phenotypes support paging; static topics return their complete vocabulary without upstream requests. Use returned values in subsequent discovery, diplotype and recommendation calls.","input":[{"n":"topic","t":"enum(6)","r":true},{"n":"geneSymbol","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"items","t":"array<object>"},{"n":"page","t":"object"},{"n":"provenance","t":"object"},{"n":"effectiveQuery","t":"object"},{"n":"notices","t":"array<string>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"error","t":"object"}]},{"name":"pokeapi_get_pokemon","server":91,"verb":"get","cls":"get","resolver":false,"title":"Get Pokémon","description":"Get a fully denormalized Pokémon dossier in a single call — base stats, types, abilities (with full English effect text), height/weight, resolved evolution chain, sprite URLs including official artwork, species flavor text, variety list, capture rate, growth rate, gender rate, legendary/mythical flags, egg groups, and (optionally) a summarized learnable-move list. Accepts a name (lowercase, hyphens for spaces, e.g. \"bulbasaur\", \"mr-mime\") or PokéAPI Pokémon-record ID. A species name with no Pokémon record of its own (e.g. \"deoxys\") resolves to the default variety of that species (\"deoxys-normal\"), reported in resolvedFromSpecies. Set include_moves=true to include the move summary (large); defaults to false. Use game_version to select flavor text from a specific game (e.g. \"sword\", \"red\"); falls back to the most recent English entry when the version is not found. Use pokeapi_find_pokemon to discover Pokémon by type, generation, or egg group before calling this tool.","input":[{"n":"identifier","t":"string","r":true},{"n":"include_moves","t":"boolean"},{"n":"game_version","t":"string"}],"output":[{"n":"id","t":"number"},{"n":"name","t":"string"},{"n":"resolvedFromSpecies","t":"string"},{"n":"heightDm","t":"number"},{"n":"weightHg","t":"number"},{"n":"types","t":"array<string>"},{"n":"stats","t":"array<object>"},{"n":"abilities","t":"array<object>"},{"n":"sprites","t":"object"},{"n":"moves","t":"array<object>"},{"n":"moveCount","t":"number"},{"n":"speciesFlavorText","t":"string"},{"n":"genus","t":"string"},{"n":"captureRate","t":"number"},{"n":"growthRate","t":"string"},{"n":"genderRate","t":"number"},{"n":"isLegendary","t":"boolean"},{"n":"isMythical","t":"boolean"},{"n":"evolutionChain","t":"unknown"},{"n":"varieties","t":"array<object>"},{"n":"generation","t":"string"},{"n":"eggGroups","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"pokeapi_get_type_matchups","server":91,"verb":"get","cls":"get","resolver":false,"title":"Get Type Matchups","description":"Get the full offensive and defensive type effectiveness breakdown. Provide either a type name (e.g. \"fire\", \"psychic\") or a Pokémon identifier (name or PokéAPI Pokémon-record ID; a species name resolves to its default variety). For dual-type Pokémon, the defensive multipliers are correctly composed (e.g. Fire/Flying vs Rock = 4× because both types are weak to Rock). Exactly one of type or pokemon must be provided.","input":[{"n":"type","t":"string"},{"n":"pokemon","t":"string"}],"output":[{"n":"queryType","t":"string"},{"n":"resolvedTypes","t":"array<string>"},{"n":"resolvedPokemon","t":"object"},{"n":"resolvedFromSpecies","t":"string"},{"n":"offensiveRelations","t":"object"},{"n":"defensiveMatchups","t":"object"},{"n":"composedMultipliers","t":"object"},{"n":"error","t":"object"}]},{"name":"pokeapi_get_move","server":91,"verb":"get","cls":"get","resolver":false,"title":"Get Move","description":"Get move details by name or numeric ID — type, damage class, power, accuracy, PP, priority, target, stat changes, status-effect chance, and full English effect text. Set include_learners=true to include the list of Pokémon that can learn the move. Move names are available from pokeapi_get_pokemon when include_moves=true.","input":[{"n":"identifier","t":"string","r":true},{"n":"include_learners","t":"boolean"}],"output":[{"n":"id","t":"number"},{"n":"name","t":"string"},{"n":"type","t":"string"},{"n":"damageClass","t":"string"},{"n":"power","t":"number"},{"n":"accuracy","t":"number"},{"n":"pp","t":"number"},{"n":"priority","t":"number"},{"n":"effectChance","t":"number"},{"n":"effectText","t":"string"},{"n":"shortEffectText","t":"string"},{"n":"target","t":"string"},{"n":"statChanges","t":"array<object>"},{"n":"learnedByPokemon","t":"array<string>"},{"n":"learnersIncluded","t":"boolean"},{"n":"error","t":"object"}]},{"name":"pokeapi_get_ability","server":91,"verb":"get","cls":"get","resolver":false,"title":"Get Ability","description":"Get ability details by name or numeric ID — full English effect text, short effect text, generation introduced, and the list of Pokémon that have the ability (including hidden-ability flag and slot). Ability names are returned by pokeapi_get_pokemon in the abilities array.","input":[{"n":"identifier","t":"string","r":true}],"output":[{"n":"id","t":"number"},{"n":"name","t":"string"},{"n":"effectText","t":"string"},{"n":"shortEffectText","t":"string"},{"n":"generation","t":"string"},{"n":"pokemon","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"pokeapi_get_item","server":91,"verb":"get","cls":"get","resolver":false,"title":"Get Item","description":"Get item details by name or numeric ID — effect text, category, versioned purchase and sell prices, fling power, item attributes (holdable, consumable, etc.), sprite URL, and Pokémon that commonly hold it.","input":[{"n":"identifier","t":"string","r":true}],"output":[{"n":"id","t":"number"},{"n":"name","t":"string"},{"n":"category","t":"string"},{"n":"cost","t":"number"},{"n":"prices","t":"array<object>"},{"n":"flingPower","t":"number"},{"n":"effectText","t":"string"},{"n":"shortEffectText","t":"string"},{"n":"attributes","t":"array<string>"},{"n":"heldByPokemon","t":"array<string>"},{"n":"spriteUrl","t":"string"},{"n":"error","t":"object"}]},{"name":"pokeapi_get_nature","server":91,"verb":"get","cls":"get","resolver":false,"title":"Get Nature","description":"Get nature details — the stat boosted (+10%), stat reduced (-10%), and preferred/disliked berry flavors. Omit the identifier to list all 25 natures at once. Natures are critical for competitive team-building: every non-neutral nature modifies two stats by ±10%.","input":[{"n":"identifier","t":"string"}],"output":[{"n":"natures","t":"array<object>"},{"n":"isListAll","t":"boolean"},{"n":"error","t":"object"}]},{"name":"pokeapi_find_pokemon","server":91,"verb":"find","cls":"search","resolver":false,"title":"Find Pokémon","description":"Filter Pokémon by generation, type, regional pokédex, or egg group. Returns names and PokéAPI IDs; every returned name works as a pokeapi_get_pokemon identifier, where a species name resolves to its default variety. At least one of generation, type, pokedex, or egg_group is required; the ones provided are combined with AND logic, and query adds strict token matching on name within them. A call with no category filter, with or without query, returns an empty result and a notice naming the requirement.","input":[{"n":"generation","t":"string"},{"n":"type","t":"string"},{"n":"pokedex","t":"string"},{"n":"egg_group","t":"string"},{"n":"query","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"pokemon","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"shown","t":"number"},{"n":"appliedFilters","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"protein_search_structures","server":92,"verb":"search","cls":"search","resolver":false,"title":"protein-mcp-server: search structures","description":"Search experimental (PDB) and predicted (computed-model) protein structures by free text, protein sequence (triggers an mmseqs2 similarity search), and/or organism, method, and resolution filters. Returns ranked hits; the experimental page is enriched with title, method, resolution, and organism. Chain hit IDs into protein_get_structure. Optionally returns a facet breakdown (counts by method / organism / release year / …) alongside the hits in the same response. A facet on a dimension you are already filtering (e.g. the organism facet while organism is set) lists unfiltered alternatives by design — it does not constrain by its own active filter, so you can see sibling values to pivot to. Numeric histogram buckets (resolution, molecular weight) carry explicit rangeFrom/rangeTo bounds so a boundary label is unambiguous.","input":[{"n":"query","t":"string"},{"n":"sequence","t":"string"},{"n":"organism","t":"string"},{"n":"method","t":"string"},{"n":"max_resolution","t":"number"},{"n":"min_identity","t":"number"},{"n":"max_evalue","t":"number"},{"n":"content_type","t":"enum(3)"},{"n":"facets","t":"array<enum(6)>"},{"n":"limit","t":"integer"},{"n":"start","t":"integer"}],"output":[{"n":"hits","t":"array<object>"},{"n":"facets","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"start","t":"number"},{"n":"nextStart","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"protein_get_structure","server":92,"verb":"get","cls":"get","resolver":false,"title":"protein-mcp-server: get structure","description":"Fetch structures with metadata and coordinate-file URLs. source \"experimental\" takes PDB entry IDs, and also resolves the computed-model IDs protein_search_structures returns (AF_*/MA_*), which come back marked source \"predicted\" with their modelling provider; \"predicted\" takes UniProt accessions (AlphaFold, with pLDDT/PAE confidence); \"best_available\" takes UniProt accessions and returns the top federated model — the highest-resolution experimental structure if one exists (optimizing resolution, not biological representativeness, so it can return an engineered mutant over the wild-type entry), else the best prediction. Records fetched under source \"experimental\", computed models included, also carry polymer entities with both chain namespaces (labelAsymIds for protein_compare_structures, authAsymIds for protein_get_annotations), bound ligands, molecular weight, and release date. Resolves up to the configured batch cap per call with per-ID partial success — missed IDs are listed in failed[], and IDs beyond the cap are reported in the notice. Set include_coords to inline coordinate content; if the inlined bytes exceed the response budget the content is withheld and overflow lists each structure's size — re-call with sections:[ids] for specific structures, or for a single oversized file download it from that record's coordinateUrls.","input":[{"n":"ids","t":"array<string>","r":true},{"n":"source","t":"enum(3)"},{"n":"include_coords","t":"boolean"},{"n":"sections","t":"array<string>"}],"output":[{"n":"structures","t":"array<object>"},{"n":"failed","t":"array<object>"},{"n":"attribution","t":"array<object>"},{"n":"overflow","t":"object"},{"n":"requested","t":"number"},{"n":"processed","t":"number"},{"n":"resolved","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"protein_find_similar","server":92,"verb":"find","cls":"search","resolver":false,"title":"protein-mcp-server: find similar","description":"Find structurally or evolutionarily related proteins. by:\"sequence\" runs an RCSB mmseqs2 sequence-similarity search (synchronous) over a sequence — supplied directly, or pulled from a PDB ID or UniProt accession. by:\"structure\" runs a Foldseek fold-similarity search (asynchronous) against experimental and predicted databases; if the job is still computing when the poll budget elapses, the response reports status \"computing\" with a ticket — re-call with ticket_id set to that value to resume the same job instead of resubmitting, and a complete response carries the same ticket so a finished job can be re-paged with a different start. Foldseek searches each chain of a multichain structure as its own query: a response covers one query (query, default 0), reports queryCount, and ranks that query's hits by score across all searched databases. Each mode reads only its own controls: sequence, max_evalue and min_identity belong to by:\"sequence\"; ticket_id, databases and query belong to by:\"structure\"; pdb_id, uniprot, start and limit are shared. A field the selected mode cannot consume is rejected rather than silently ignored. Output names the engine and database each hit came from.","input":[{"n":"by","t":"enum(2)","r":true},{"n":"sequence","t":"string"},{"n":"pdb_id","t":"string"},{"n":"uniprot","t":"string"},{"n":"ticket_id","t":"string"},{"n":"databases","t":"array<string>"},{"n":"query","t":"integer"},{"n":"max_evalue","t":"number"},{"n":"min_identity","t":"number"},{"n":"limit","t":"integer"},{"n":"start","t":"integer"}],"output":[{"n":"by","t":"enum(2)"},{"n":"engine","t":"string"},{"n":"status","t":"enum(2)"},{"n":"ticketId","t":"string"},{"n":"query","t":"number"},{"n":"queryCount","t":"number"},{"n":"hits","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"start","t":"number"},{"n":"nextStart","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"protein_track_ligands","server":92,"verb":"track","cls":"analyze","resolver":false,"title":"protein-mcp-server: track ligands","description":"Ligand discovery and binding-site analysis across the PDB. mode \"find_ligand\" resolves a name or formula to chemical component IDs with metadata (formula, weight, SMILES), ranked by deposition frequency — most-deposited component first, so the top hit is the most common match for the name, not necessarily an exact name-string match. The ranking covers a bounded candidate pool; totalCount and candidatesConsidered report how many components matched and how many were ranked. mode \"structures_with_ligand\" returns PDB entries containing a ligand (by exact component ID — get the ID from find_ligand first), highest-resolution first, each with its resolution in Å. mode \"binding_site\" returns the protein residues lining a ligand's pocket in a given structure, with contact distances, each numbered in both the mmCIF label namespace (asymId, seqId) and the author namespace (authAsymId, authSeqId) used by deposited coordinates and most literature. Binding sites are experimental-only (computed from deposited coordinates; predicted models carry no bound ligands).","input":[{"n":"mode","t":"enum(3)","r":true},{"n":"query","t":"string"},{"n":"comp_id","t":"string"},{"n":"pdb_id","t":"string"},{"n":"limit","t":"integer"},{"n":"start","t":"integer"}],"output":[{"n":"mode","t":"enum(3)"},{"n":"ligands","t":"array<object>"},{"n":"structures","t":"array<object>"},{"n":"bindingSites","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"candidatesConsidered","t":"number"},{"n":"start","t":"number"},{"n":"nextStart","t":"number"},{"n":"resolvedCompId","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"protein_compare_structures","server":92,"verb":"compare","cls":"analyze","resolver":false,"title":"protein-mcp-server: compare structures","description":"Structurally align multiple structures (up to the configured batch cap) via the RCSB Structural Comparison service (TM-align / jFATCAT). reference:\"first\" aligns every structure to the first; reference:\"all_pairs\" computes the full pairwise matrix. Each pair is an independent async alignment job with per-pair partial success — a pair still computing when the budget elapses returns status \"computing\" with its job UUID, and a failed pair degrades its row without sinking the others. Re-call with a matching entry in resume[] to poll a computing pair's UUID instead of resubmitting; a resumed pair reports a and b in the order its job was submitted, and a resume under a different method is rejected. Returns TM-score, RMSD, and aligned-residue count per pair, plus each structure's modeled-residue count and alignment coverage. TM-score is length-normalized and can shift sharply between structures that differ only by a terminal residue or two — the greedy superposition can settle into a worse local optimum — so read tmScore alongside rmsd, alignedResidues, modeledResidues and coverage, the columns that make such cases diagnosable.","input":[{"n":"structures","t":"array<object>","r":true},{"n":"reference","t":"enum(2)"},{"n":"method","t":"enum(3)"},{"n":"timeout_s","t":"integer"},{"n":"resume","t":"array<object>"}],"output":[{"n":"method","t":"string"},{"n":"reference","t":"enum(2)"},{"n":"pairs","t":"array<object>"},{"n":"pairsTotal","t":"number"},{"n":"computing","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"protein_analyze_collection","server":92,"verb":"analyze","cls":"analyze","resolver":false,"title":"protein-mcp-server: analyze collection","description":"Profile the PDB into distributions and trends over an optional scoping query: counts by method, organism, or polymer composition; resolution and molecular-weight histograms; release-year timelines; and multidimensional cross-tabs (e.g. method × release_year). Aggregation runs at RCSB, so the response carries compact counts per bucket rather than the matching entries. Pass one group_by dimension for a single breakdown, or two distinct dimensions for a cross-tab (the first nests the second). bucket_limit caps each dimension level separately rather than the response, so a cross-tab returns up to that many nested buckets under each of its capped parent buckets; bucketsReturned reports the realized total.","input":[{"n":"group_by","t":"array<enum(6)>","r":true},{"n":"query","t":"string"},{"n":"organism","t":"string"},{"n":"method","t":"string"},{"n":"max_resolution","t":"number"},{"n":"content_type","t":"enum(3)"},{"n":"interval","t":"number|enum(1)"},{"n":"bucket_limit","t":"integer"}],"output":[{"n":"total","t":"number"},{"n":"facets","t":"array<object>"},{"n":"scope","t":"string"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"bucketsReturned","t":"number"},{"n":"error","t":"object"}]},{"name":"protein_get_annotations","server":92,"verb":"get","cls":"get","resolver":false,"title":"protein-mcp-server: get annotations","description":"Sequence and functional annotation for a protein: UniProt features (domains, binding sites, PTMs), natural variants, and InterPro domain/family memberships (Pfam, PROSITE, …) with GO terms. Provide a UniProt accession directly, or a PDB ID — it is resolved to its UniProt accession via the structure's sequence cross-reference. A multi-chain PDB entry can map to several accessions; the default pick is deterministic (lowest author chain ID) and the alternatives are listed in \"ambiguity\" — pass \"chain\" to select a specific one. Use \"include\" to scope which annotation classes are fetched. Every response carries an \"attribution\" block with the upstream data licenses and citations.","input":[{"n":"uniprot","t":"string"},{"n":"pdb_id","t":"string"},{"n":"chain","t":"string"},{"n":"include","t":"enum(4)"},{"n":"limit","t":"integer"},{"n":"features_offset","t":"integer"},{"n":"variants_offset","t":"integer"},{"n":"domains_offset","t":"integer"}],"output":[{"n":"accession","t":"string"},{"n":"proteinName","t":"string"},{"n":"geneNames","t":"array<string>"},{"n":"organism","t":"string"},{"n":"function","t":"string"},{"n":"sequenceLength","t":"number"},{"n":"features","t":"array<object>"},{"n":"variants","t":"array<object>"},{"n":"domains","t":"array<object>"},{"n":"featuresTotal","t":"number"},{"n":"variantsTotal","t":"number"},{"n":"domainsTotal","t":"number"},{"n":"ambiguity","t":"object"},{"n":"attribution","t":"array<object>"},{"n":"resolvedFrom","t":"string"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"pubchem_search_compounds","server":93,"verb":"search","cls":"search","resolver":false,"title":"Search Compounds","description":"Search PubChem for chemical compounds by identifier (name, SMILES, InChI, or InChIKey, up to 25 per call), molecular formula in Hill notation, substructure or superstructure containment, 2D Tanimoto similarity, or the compounds a bioassay (AID) found active or tested. Returns a page of CIDs — reach matches past maxResults with offset. Optionally hydrate results with properties to avoid a follow-up pubchem_get_compound_details call.","input":[{"n":"searchType","t":"enum(6)","r":true},{"n":"identifierType","t":"enum(4)"},{"n":"identifiers","t":"array<string>"},{"n":"formula","t":"string"},{"n":"allowOtherElements","t":"boolean"},{"n":"query","t":"string"},{"n":"queryType","t":"enum(2)"},{"n":"threshold","t":"number"},{"n":"aid","t":"integer"},{"n":"activeOnly","t":"boolean"},{"n":"offset","t":"integer"},{"n":"maxResults","t":"integer"},{"n":"properties","t":"array<enum(27)>"}],"output":[{"n":"results","t":"array<object>"},{"n":"unresolvedIdentifiers","t":"array<string>"},{"n":"unprocessed","t":"array<string>"},{"n":"searchType","t":"string"},{"n":"activeOnly","t":"boolean"},{"n":"totalFound","t":"number"},{"n":"totalFoundAtLeast","t":"number"},{"n":"offset","t":"number"},{"n":"nextOffset","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"cappedInputs","t":"array<object>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"pubchem_get_compound_details","server":93,"verb":"get","cls":"get","resolver":false,"title":"Get Compound Details","description":"Get detailed compound information by CID. Returns physicochemical properties (molecular weight, SMILES, InChIKey, XLogP, TPSA, etc.), optionally with a textual description (pharmacology, mechanism, therapeutic use), known synonyms, drug-likeness assessment (Lipinski/Veber rules), and/or pharmacological classification (FDA classes, MeSH classes, ATC codes). Fetches up to 100 CIDs per call; CIDs past that are returned in unprocessed for a follow-up call.","input":[{"n":"cids","t":"array<integer>","r":true},{"n":"properties","t":"array<enum(27)>"},{"n":"includeDescription","t":"boolean"},{"n":"descriptionOffset","t":"integer"},{"n":"maxDescriptions","t":"integer"},{"n":"includeSynonyms","t":"boolean"},{"n":"synonymOffset","t":"integer"},{"n":"maxSynonyms","t":"integer"},{"n":"includeDrugLikeness","t":"boolean"},{"n":"includeClassification","t":"boolean"}],"output":[{"n":"compounds","t":"array<object>"},{"n":"unprocessed","t":"array<number>"},{"n":"enrichedCids","t":"array<number>"},{"n":"skippedCids","t":"array<number>"},{"n":"synonymOffset","t":"number"},{"n":"nextSynonymOffset","t":"number"},{"n":"descriptionOffset","t":"number"},{"n":"nextDescriptionOffset","t":"number"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"cappedInputs","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"pubchem_get_compound_image","server":93,"verb":"get","cls":"get","resolver":false,"title":"Get Compound Image","description":"Fetch a 2D structure diagram (PNG image) for a compound by CID.","input":[{"n":"cid","t":"integer","r":true},{"n":"size","t":"enum(2)"}],"output":[{"n":"cid","t":"number"},{"n":"imageBase64","t":"string"},{"n":"mimeType","t":"string"},{"n":"width","t":"number"},{"n":"height","t":"number"},{"n":"error","t":"object"}]},{"name":"pubchem_get_compound_3d_structure","server":93,"verb":"get","cls":"get","resolver":false,"title":"Get Compound 3D Structure","description":"Get a compound's default 3D conformer — atomic coordinates and bonds — for one CID. format=\"json\" (default) returns atoms and bonds parsed into structured fields; format=\"sdf\" returns the raw V2000 SDF text for passthrough to docking, rendering, or conformer tools. Optionally lists alternate conformer IDs. Not every compound has computed 3D coordinates (large molecules, mixtures, and some salts do not).","input":[{"n":"cid","t":"integer","r":true},{"n":"format","t":"enum(2)"},{"n":"includeAlternateConformerIds","t":"boolean"},{"n":"maxAtoms","t":"integer"},{"n":"maxBonds","t":"integer"},{"n":"includeRawSdf","t":"boolean"}],"output":[{"n":"cid","t":"number"},{"n":"conformerId","t":"string"},{"n":"atomCount","t":"number"},{"n":"bondCount","t":"number"},{"n":"atoms","t":"array<object>"},{"n":"bonds","t":"array<object>"},{"n":"sdf","t":"string"},{"n":"alternateConformerIds","t":"array<string>"},{"n":"truncated","t":"boolean"},{"n":"shownAtoms","t":"number"},{"n":"shownBonds","t":"number"},{"n":"atomCap","t":"number"},{"n":"bondCap","t":"number"},{"n":"shownSdfLines","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"pubchem_get_compound_xrefs","server":93,"verb":"get","cls":"get","resolver":false,"title":"Get Compound Cross-References","description":"Get external database cross-references for a compound: PubMed citations, patent IDs, gene associations, CAS and EC numbers with the number of source records that deposited each, other registry numbers, and taxonomy IDs. Results are paged per type — capped at maxPerType with the total count reported; reach the IDs past a page with offset. PubMed IDs come highest (most recently assigned) first and the other numeric types in ascending order; CAS and EC come most-attested first; the other string IDs keep PubChem's order. A type that fails to load is named in failedTypes while the others still return; the call fails only when a type fails and no type other than ProteinGI (which PubChem no longer serves) loads.","input":[{"n":"cid","t":"integer","r":true},{"n":"xrefTypes","t":"array<enum(9)>","r":true},{"n":"offset","t":"integer"},{"n":"maxPerType","t":"integer"}],"output":[{"n":"cid","t":"number"},{"n":"xrefs","t":"array<object>"},{"n":"offset","t":"number"},{"n":"truncated","t":"boolean"},{"n":"nextOffset","t":"number"},{"n":"failedTypes","t":"string"},{"n":"notice","t":"string"},{"n":"cappedInputs","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"pubchem_get_compound_safety","server":93,"verb":"get","cls":"get","resolver":false,"title":"Get Compound Safety","description":"Get GHS (Globally Harmonized System) hazard classification and safety data for one or more compounds by CID. Returns signal word, pictograms, hazard statements (H-codes), and precautionary statements (P-codes) per compound, merged across sources, plus each source's own classification — its signal word, pictograms, H-codes with ECHA notifier agreement percentages, and notification counts — since sources often disagree. Reports ECHA \"Not Classified\" verdicts as their own status.","input":[{"n":"cids","t":"array<integer>","r":true}],"output":[{"n":"results","t":"array<object>"},{"n":"unprocessed","t":"array<number>"},{"n":"requestedCount","t":"number"},{"n":"withDataCount","t":"number"},{"n":"notice","t":"string"},{"n":"cappedInputs","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"pubchem_get_bioactivity","server":93,"verb":"get","cls":"get","resolver":false,"title":"Get Bioactivity","description":"Get a compound's bioactivity profile: which assays tested it, activity outcomes (Active/Inactive/Inconclusive), target identifiers (NCBI Gene ID, UniProt/GenBank accession), quantitative values (IC50, EC50, Ki, etc.), each assay's type (confirmatory, screening, summary, other), and the PubMed IDs it cites. Filter by outcome, a specific molecular target (NCBI Gene ID or protein accession), and/or assay type to focus the profile — e.g. \"is this compound active against target T in confirmatory assays?\".","input":[{"n":"cid","t":"integer","r":true},{"n":"outcomeFilter","t":"enum(3)"},{"n":"targetGeneId","t":"integer"},{"n":"targetAccession","t":"string"},{"n":"assayType","t":"array<enum(4)>"},{"n":"offset","t":"integer"},{"n":"maxResults","t":"integer"}],"output":[{"n":"cid","t":"number"},{"n":"totalAssays","t":"number"},{"n":"activeCount","t":"number"},{"n":"inactiveCount","t":"number"},{"n":"results","t":"array<object>"},{"n":"outcomeFilter","t":"string"},{"n":"targetFilter","t":"string"},{"n":"assayTypeFilter","t":"string"},{"n":"filteredCount","t":"number"},{"n":"returnedCount","t":"number"},{"n":"offset","t":"number"},{"n":"nextOffset","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"cappedInputs","t":"array<object>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"pubchem_get_compound_interactions","server":93,"verb":"get","cls":"get","resolver":false,"title":"Get Compound Interactions","description":"Get a compound's interaction data: drug-food interactions, and the molecular targets its bioassays name — one entry per target as kinds defines it, with its assay counts by outcome and most potent active value, Active targets first, most potent first. Each entry carries its originating source. Results are paged per kind, with the record total and the next offset reported for each. Drug-food coverage is richest for approved drugs; target covers any compound PubChem has assay data for, and pubchem_get_bioactivity lists one target's assays when given the entry's GeneID or accession. Drug-drug interactions (DrugBank) are unavailable while PubChem's SDQ service refuses automated requests: an explicit drug-drug request is reported in failedKinds while the other kinds still return.","input":[{"n":"cid","t":"integer","r":true},{"n":"kinds","t":"array<enum(3)>"},{"n":"offset","t":"integer"},{"n":"maxEntries","t":"integer"}],"output":[{"n":"cid","t":"number"},{"n":"entries","t":"array<object>"},{"n":"paging","t":"array<object>"},{"n":"requestedKinds","t":"string"},{"n":"returnedCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"offset","t":"number"},{"n":"nextOffset","t":"number"},{"n":"failedKinds","t":"string"},{"n":"notice","t":"string"},{"n":"cappedInputs","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"pubchem_search_assays","server":93,"verb":"search","cls":"search","resolver":false,"title":"Search Assays","description":"Find PubChem bioassays associated with a biological target. Search by gene symbol (e.g. \"EGFR\"), protein name, NCBI Gene ID, or UniProt accession. Returns a page of assay IDs (AIDs) — page past maxResults with offset — which can be explored further with pubchem_get_summary.","input":[{"n":"targetType","t":"enum(4)","r":true},{"n":"targetQuery","t":"string","r":true},{"n":"offset","t":"integer"},{"n":"maxResults","t":"integer"}],"output":[{"n":"aids","t":"array<number>"},{"n":"targetType","t":"string"},{"n":"targetQuery","t":"string"},{"n":"totalFound","t":"number"},{"n":"offset","t":"number"},{"n":"nextOffset","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"cappedInputs","t":"array<object>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"pubchem_get_summary","server":93,"verb":"get","cls":"get","resolver":false,"title":"Get Entity Summary","description":"Get descriptive summaries for PubChem entities by ID. Supports assays (AID), genes (Gene ID), proteins (UniProt accession), and taxonomy (Tax ID). Up to 10 per call; identifiers past that are returned in unprocessed for a follow-up call.","input":[{"n":"entityType","t":"enum(4)","r":true},{"n":"identifiers","t":"array<string>","r":true}],"output":[{"n":"entityType","t":"string"},{"n":"summaries","t":"array<object>"},{"n":"unprocessed","t":"array<string>"},{"n":"requestedCount","t":"number"},{"n":"foundCount","t":"number"},{"n":"notice","t":"string"},{"n":"cappedInputs","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"pubmed_search_articles","server":94,"verb":"search","cls":"search","resolver":false,"title":"Pubmed Search Articles","description":"Search PubMed with full query syntax, filters, and date ranges. Returns PMIDs and optional brief summaries. Supports field-specific filters (author, journal, MeSH terms), common filters (language, species, free full text), and pagination via offset for paging through large result sets.","input":[{"n":"query","t":"string","r":true},{"n":"maxResults","t":"integer"},{"n":"offset","t":"integer"},{"n":"sort","t":"enum(4)"},{"n":"dateRange","t":"object"},{"n":"publicationTypes","t":"array<string>"},{"n":"author","t":"string"},{"n":"journal","t":"string"},{"n":"meshTerms","t":"array<string>"},{"n":"language","t":"string"},{"n":"hasAbstract","t":"boolean"},{"n":"freeFullText","t":"boolean"},{"n":"species","t":"enum(2)"},{"n":"summaryCount","t":"integer"}],"output":[{"n":"query","t":"string"},{"n":"offset","t":"number"},{"n":"pmids","t":"array<string>"},{"n":"summaries","t":"array<object>"},{"n":"searchUrl","t":"string"},{"n":"totalCount","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"appliedFilters","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"pubmed_fetch_articles","server":94,"verb":"fetch","cls":"get","resolver":false,"title":"Pubmed Fetch Articles","description":"Fetch full article metadata by PubMed IDs. Returns detailed article information including abstract, authors, journal, MeSH terms, linked retraction, erratum, and comment notices, and databank accessions such as trial registration IDs; grants and the members of a collective author are opt-in (`includeGrants`, `includeInvestigators`). Set `maxResponseCharacters` to bound the whole response: articles past the ceiling are deferred whole and listed in `deferred.ids` for a follow-up call.","input":[{"n":"pmids","t":"array<string>","r":true},{"n":"includeMesh","t":"boolean"},{"n":"includeGrants","t":"boolean"},{"n":"includeInvestigators","t":"boolean"},{"n":"maxResponseCharacters","t":"integer"}],"output":[{"n":"articles","t":"array<object>"},{"n":"totalReturned","t":"number"},{"n":"unavailablePmids","t":"array<string>"},{"n":"deferred","t":"object"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"error","t":"object"}]},{"name":"pubmed_fetch_fulltext","server":94,"verb":"fetch","cls":"get","resolver":false,"title":"Pubmed Fetch Fulltext","description":"Fetch full-text articles from PubMed Central as structured sections — the body, then back matter such as acknowledgments, declarations, and appendices — with tables and references. When PMC misses, transparently falls back to Europe PMC `fullTextXML` (structured JATS for records with a PMC counterpart), then to Unpaywall — publisher-hosted or institutional open-access copies as HTML-as-Markdown or PDF-as-text. Name articles by `pmcids` (PMC IDs directly), `pmids` (PubMed IDs, auto-resolved), `dois` (DOIs, auto-resolved to PMC via the ID Converter; preprints and EPMC-only OA fall through to the Europe PMC and Unpaywall layers), or any mix of the three — up to 50 distinct identifiers; the first 10 are fetched per call, the rest returned in `overLimit`; an article several of them name is fetched and returned once. Two independent character controls: `maxCharacters` caps body text per article, `maxResponseCharacters` caps the whole response and defers articles past the ceiling whole, listing them in `deferred.ids` for a follow-up call.","input":[{"n":"pmcids","t":"array<string>"},{"n":"pmids","t":"array<string>"},{"n":"dois","t":"array<string>"},{"n":"includeReferences","t":"boolean"},{"n":"includeTables","t":"boolean"},{"n":"includeAssets","t":"boolean"},{"n":"maxSections","t":"integer"},{"n":"sections","t":"array<string>"},{"n":"maxCharacters","t":"integer"},{"n":"maxCharactersPerSection","t":"integer"},{"n":"maxResponseCharacters","t":"integer"},{"n":"overflowMode","t":"enum(2)"}],"output":[{"n":"articles","t":"array<object>"},{"n":"totalReturned","t":"number"},{"n":"unavailable","t":"array<object>"},{"n":"truncation","t":"object"},{"n":"deferred","t":"object"},{"n":"overLimit","t":"object"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"error","t":"object"}]},{"name":"pubmed_format_citations","server":94,"verb":"format","cls":"analyze","resolver":false,"title":"Pubmed Format Citations","description":"Get formatted citations for PubMed articles in one or more formats (apa, mla, bibtex, ris, vancouver). Pass a single format as a string or multiple as an array. Retractions, errata, and expressions of concern NCBI links to an article come back in `notices`; Vancouver and APA also cite a retraction in the reference itself.","input":[{"n":"pmids","t":"array<string>","r":true},{"n":"format","t":"enum(5)|array<enum(5)>"}],"output":[{"n":"citations","t":"array<object>"},{"n":"totalSubmitted","t":"number"},{"n":"totalFormatted","t":"number"},{"n":"unavailablePmids","t":"array<string>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"pubmed_find_related","server":94,"verb":"find","cls":"search","resolver":false,"title":"Pubmed Find Related","description":"Find articles related to a source article — similar content (similar), articles citing this one (cited_by), or articles this one cites (references). Uses NCBI ELink as the primary source; falls back to Europe PMC then OpenAlex when NCBI is unavailable.","input":[{"n":"pmid","t":"string","r":true},{"n":"relationship","t":"enum(3)"},{"n":"maxResults","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"sourcePmid","t":"string"},{"n":"relationship","t":"enum(3)"},{"n":"offset","t":"number"},{"n":"articles","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"source","t":"enum(3)"},{"n":"notice","t":"string"},{"n":"coverageFailures","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"pubmed_spell_check","server":94,"verb":"check","cls":"analyze","resolver":false,"title":"Pubmed Spell Check","description":"Spell-check a PubMed search query against NCBI ESpell and get the corrected query back. Use after a zero-hit or thin `pubmed_search_articles` result, or when a drug, gene, disease, or author name may be misspelled. Corrections are applied in place, so field tags, operators, spacing, and gene symbols stay as written (`alzhiemer diseese treatmnt outcomse` → `alzheimer disease treatment outcomes`). Words in all capitals, with digits or non-ASCII letters, or differing only in case are never changed, nor is a single letter swapped for another (`q fever`, the initial in `smith q`), words after a number or symbol ESpell skips are left as written, and `hasSuggestion` is false when no correction was applied. Re-run the search with `corrected`.","input":[{"n":"query","t":"string","r":true}],"output":[{"n":"original","t":"string"},{"n":"corrected","t":"string"},{"n":"hasSuggestion","t":"boolean"},{"n":"error","t":"object"}]},{"name":"pubmed_lookup_mesh","server":94,"verb":"lookup","cls":"resolve","resolver":true,"title":"Pubmed Lookup Mesh","description":"Search and explore the MeSH (Medical Subject Headings) controlled vocabulary. Returns descriptor records with tree numbers, scope notes, and entry terms, plus pagination via offset for paging past the maxResults cap.","input":[{"n":"query","t":"string","r":true},{"n":"maxResults","t":"integer"},{"n":"offset","t":"integer"},{"n":"includeDetails","t":"boolean"}],"output":[{"n":"query","t":"string"},{"n":"offset","t":"number"},{"n":"nextOffset","t":"number"},{"n":"results","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"pubmed_lookup_citation","server":94,"verb":"lookup","cls":"resolve","resolver":true,"title":"Pubmed Lookup Citation","description":"Look up PubMed IDs from partial bibliographic citations. Useful when you have a reference (journal, year, volume, page, author) and need the PMID — deterministic citation matching, more reliable than free-text search for structured references. Each citation must include at least journal or a four-digit year (ECitMatch primary-keys on journal+volume+page; author-only or volume-only inputs guarantee no match); more fields = better match accuracy.","input":[{"n":"citations","t":"array<object>","r":true}],"output":[{"n":"results","t":"array<object>"},{"n":"totalMatched","t":"number"},{"n":"totalSubmitted","t":"number"},{"n":"totalWarnings","t":"number"},{"n":"error","t":"object"}]},{"name":"pubmed_convert_ids","server":94,"verb":"convert","cls":"resolve","resolver":true,"title":"Pubmed Convert Ids","description":"Convert between article identifiers (DOI, PMID, PMCID). Accepts up to 50 IDs of a single type per request. Only resolves articles indexed in PubMed Central — for articles not in PMC, use pubmed_search_articles instead.","input":[{"n":"ids","t":"array<string>","r":true},{"n":"idType","t":"enum(3)","r":true}],"output":[{"n":"records","t":"array<object>"},{"n":"totalConverted","t":"number"},{"n":"totalSubmitted","t":"number"},{"n":"error","t":"object"}]},{"name":"pubmed_europepmc_search","server":94,"verb":"search","cls":"search","resolver":false,"title":"Pubmed Europepmc Search","description":"Search Europe PMC, a broad open-access biomedical corpus. Surfaces preprints (`source: PPR`), patents (`source: PAT`), Agricola (`source: AGR`), plus everything in PubMed (`MED`) and PMC. Use when additional coverage is needed — preprints and EPMC-only OA records are the typical recovery. Paginate via `cursorMark`. Defaults to `MED`, `PMC`, and `PPR`; pass `sources` to include `PAT` / `AGR`. Abstracts arrive as a bounded `abstractSnippet` with `abstractTruncated` marking the cut ones — pass a hit to `pubmed_europepmc_fetch` as `records: [{ source, epmcId }]` for the complete abstract.","input":[{"n":"query","t":"string","r":true},{"n":"pageSize","t":"integer"},{"n":"cursorMark","t":"string"},{"n":"sources","t":"array<enum(5)>"},{"n":"resultType","t":"enum(2)"},{"n":"sort","t":"string"}],"output":[{"n":"hits","t":"array<object>"},{"n":"cursorMark","t":"string"},{"n":"nextCursorMark","t":"string"},{"n":"searchUrl","t":"string"},{"n":"totalCount","t":"number"},{"n":"query","t":"string"},{"n":"appliedSources","t":"array<enum(5)>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"pubmed_europepmc_fetch","server":94,"verb":"fetch","cls":"get","resolver":false,"title":"Pubmed Europepmc Fetch","description":"Fetch complete Europe PMC records — including the full, untruncated abstract — addressed as `records: [{ source, epmcId }]`, an array even for one record. Pairs with `pubmed_europepmc_search`, which returns bounded `abstractSnippet` values and flags cut ones with `abstractTruncated: true`; copy each hit's `source` and `epmcId` into `records` here to read the whole abstract. This is the retrieval path for preprint (`PPR`), patent (`PAT`), and Agricola (`AGR`) records, which frequently carry no PMID and no DOI, so `pubmed_fetch_articles` and `pubmed_fetch_fulltext` cannot address them. Up to 25 records per call. Set `maxResponseCharacters` to bound the whole response: records past the ceiling are deferred whole and listed in `deferred.records` for a follow-up call.","input":[{"n":"records","t":"array<object>","r":true},{"n":"maxResponseCharacters","t":"integer"}],"output":[{"n":"records","t":"array<object>"},{"n":"notFound","t":"array<object>"},{"n":"deferred","t":"object"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"error","t":"object"}]},{"name":"ref_geo_lookup","server":95,"verb":"lookup","cls":"get","resolver":false,"title":"Country Lookup","description":"Look up a country by name, ISO alpha-2 code (2 letters), or ISO alpha-3 code (3 letters). Returns the full record: capital, region, official languages, currencies, calling codes, TLD, flag emoji, and IANA timezone IDs. Accepts fuzzy name matching — \"Brasil\" and \"Brazil\" both resolve.","input":[{"n":"query","t":"string","r":true},{"n":"by","t":"enum(4)"}],"output":[{"n":"alpha2","t":"string"},{"n":"alpha3","t":"string"},{"n":"name","t":"string"},{"n":"native_name","t":"string"},{"n":"capital","t":"string"},{"n":"region","t":"string"},{"n":"subregion","t":"string"},{"n":"languages","t":"array<object>"},{"n":"currencies","t":"array<object>"},{"n":"calling_codes","t":"array<string>"},{"n":"tld","t":"string"},{"n":"flag","t":"string"},{"n":"timezones","t":"array<string>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"ref_geo_search","server":95,"verb":"search","cls":"search","resolver":false,"title":"Country Search","description":"Search and filter countries by region, subregion, language, currency, or free-text keyword. At least one filter is required. Returns a ranked list of matching country summaries. Use ref_geo_lookup to get the full record for a specific result.","input":[{"n":"keyword","t":"string"},{"n":"region","t":"string"},{"n":"subregion","t":"string"},{"n":"language","t":"string"},{"n":"currency","t":"string"},{"n":"limit","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"totalMatches","t":"integer"},{"n":"truncated","t":"boolean"},{"n":"appliedFilters","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"ref_timezone_lookup","server":95,"verb":"lookup","cls":"get","resolver":false,"title":"Timezone Lookup","description":"Get timezone info by IANA ID, country code, or partial city/region name. Returns current UTC offset, standard offset, whether DST is currently active, and major cities in the timezone. When querying by country code (ISO alpha-2), returns all timezones observed in that country. Accepts partial matches — \"Tokyo\" resolves to \"Asia/Tokyo\", \"NY\" resolves to \"America/New_York\".","input":[{"n":"query","t":"string","r":true},{"n":"by","t":"enum(3)"},{"n":"at","t":"string"}],"output":[{"n":"timezones","t":"array<object>"},{"n":"evaluated_at","t":"string"},{"n":"error","t":"object"}]},{"name":"ref_timezone_convert","server":95,"verb":"convert","cls":"analyze","resolver":false,"title":"Timezone Conversion","description":"Convert a local datetime from one timezone to another. Takes a local time string (no UTC offset, e.g., \"2026-05-24T15:30:00\") interpreted as local time in the source timezone, returns the equivalent local time in the target timezone. Shows both UTC offsets so DST transitions are visible. Accepts full IANA IDs (e.g., \"Asia/Tokyo\") or unambiguous city names (e.g., \"Tokyo\").","input":[{"n":"datetime","t":"string","r":true},{"n":"from_tz","t":"string","r":true},{"n":"to_tz","t":"string","r":true}],"output":[{"n":"source","t":"object"},{"n":"target","t":"object"},{"n":"utc_equivalent","t":"string"},{"n":"error","t":"object"}]},{"name":"ref_element_lookup","server":95,"verb":"lookup","cls":"get","resolver":false,"title":"Element Lookup","description":"Look up a periodic table element by name, chemical symbol, or atomic number. Returns the full data record: atomic number, symbol, name, atomic mass (in unified atomic mass units), electron configuration, group, period, block, category (e.g., \"noble gas\", \"transition metal\"), Pauling electronegativity, density (g/cm³), melting and boiling points in kelvin, and discovery year. Properties unavailable for synthetic or insufficiently studied elements are returned as null.","input":[{"n":"query","t":"string","r":true},{"n":"by","t":"enum(4)"}],"output":[{"n":"number","t":"integer"},{"n":"symbol","t":"string"},{"n":"name","t":"string"},{"n":"atomic_mass","t":"number"},{"n":"atomic_mass_estimated","t":"boolean"},{"n":"electron_configuration","t":"string"},{"n":"group","t":"integer"},{"n":"period","t":"integer"},{"n":"block","t":"string"},{"n":"category","t":"string"},{"n":"electronegativity_pauling","t":"number"},{"n":"density_g_per_cm3","t":"number"},{"n":"melting_point_k","t":"number"},{"n":"boiling_point_k","t":"number"},{"n":"discovery_year","t":"integer"},{"n":"discovery_scientists","t":"string"},{"n":"appearance","t":"string"},{"n":"phase_at_stp","t":"string"},{"n":"radioactive","t":"boolean"},{"n":"natural","t":"boolean"},{"n":"dataset_version","t":"string"},{"n":"error","t":"object"}]},{"name":"ref_element_search","server":95,"verb":"search","cls":"search","resolver":false,"title":"Element Search","description":"Filter periodic table elements by category, group, period, atomic number range, or atomic mass range. At least one filter is required. Returns matching elements as a summary list. Use ref_element_lookup for the full record on a specific element. Valid categories: alkali metal, alkaline earth metal, transition metal, post-transition metal, metalloid, reactive nonmetal, noble gas, lanthanide, actinide.","input":[{"n":"category","t":"string"},{"n":"group","t":"integer"},{"n":"period","t":"integer"},{"n":"atomic_number_range","t":"object"},{"n":"atomic_mass_range","t":"object"}],"output":[{"n":"results","t":"array<object>"},{"n":"totalMatches","t":"integer"},{"n":"appliedFilters","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"ref_constant_lookup","server":95,"verb":"lookup","cls":"get","resolver":false,"title":"Physical Constant Lookup","description":"Look up a fundamental physical constant by name, symbol, or common alias. Returns the CODATA 2022 value, SI unit expression, relative standard uncertainty, and a short description. Recognizes common names and symbols — \"speed of light\", \"c\", \"Avogadro's number\", \"N_A\", \"Planck\", \"h\", \"Boltzmann\", \"k_B\" all resolve correctly. Fuzzy matching returns the closest match plus alternatives.","input":[{"n":"query","t":"string","r":true}],"output":[{"n":"name","t":"string"},{"n":"symbol","t":"string"},{"n":"value","t":"number"},{"n":"unit","t":"string"},{"n":"uncertainty","t":"number"},{"n":"uncertainty_relative","t":"string"},{"n":"description","t":"string"},{"n":"codata_id","t":"string"},{"n":"exact","t":"boolean"},{"n":"match_strategy","t":"enum(3)"},{"n":"dataset_version","t":"string"},{"n":"related","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"ref_unit_convert","server":95,"verb":"convert","cls":"analyze","resolver":false,"title":"Unit Conversion","description":"Convert a numeric value between compatible units of measure. Supports: length (mm, cm, m, km, in, ft, yd, mi), mass (mcg, mg, g, kg, oz, lb, mt = metric tonne / 1000 kg, t = US short ton / 907.18 kg), volume (ml, cl, dl, l, kl, tsp, Tbs, fl-oz, cup, pnt, qt, gal, m3), temperature (C, F, K, R — non-linear conversions handled), speed (m/s, km/h, knot, ft/s), pressure (Pa, kPa, MPa, hPa, bar, torr, psi), energy (J, kJ, Wh, kWh, MWh), power (W, mW, kW, MW, GW), frequency (Hz, kHz, MHz, GHz), digital storage (b, Kb, Mb, Gb, Tb, B, KB, MB, GB, TB), and angle (deg, rad, grad). Incompatible units (e.g., km to kg) return an error identifying the quantity mismatch.","input":[{"n":"value","t":"number","r":true},{"n":"from","t":"string","r":true},{"n":"to","t":"string","r":true}],"output":[{"n":"value","t":"number"},{"n":"from_unit","t":"string"},{"n":"to_unit","t":"string"},{"n":"result","t":"number"},{"n":"result_precision","t":"string"},{"n":"measure","t":"string"},{"n":"error","t":"object"}]},{"name":"ref_http_status","server":95,"verb":"status","cls":"analyze","resolver":false,"title":"HTTP Status Code Lookup","description":"Look up an HTTP status code by number or keyword. Returns the reason phrase, description, category (1xx Informational, 2xx Success, 3xx Redirection, 4xx Client Error, 5xx Server Error), whether the code is cacheable by default, and the defining RFC with section reference. For keyword queries, returns the closest match plus alternatives.","input":[{"n":"query","t":"string","r":true}],"output":[{"n":"code","t":"integer"},{"n":"reason_phrase","t":"string"},{"n":"description","t":"string"},{"n":"category","t":"string"},{"n":"cacheable","t":"boolean"},{"n":"rfc","t":"string"},{"n":"rfc_section","t":"string"},{"n":"alternatives","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"ref_mime_type","server":95,"verb":"mime","cls":"other","resolver":false,"title":"MIME Type Lookup","description":"Look up a MIME type by type string or file extension. Accepts \"image/webp\", \".webp\", or \"webp\". Returns the canonical MIME type, known file extensions, whether the type is compressible (relevant for Content-Encoding decisions), and the data source (iana, apache, nginx). For extension lookups, returns the canonical MIME type — e.g., \".jpg\" resolves to \"image/jpeg\". When multiple types map to an extension, the canonical type is returned first with alternatives listed.","input":[{"n":"query","t":"string","r":true}],"output":[{"n":"type","t":"string"},{"n":"extensions","t":"array<string>"},{"n":"compressible","t":"boolean"},{"n":"source","t":"string"},{"n":"alternatives","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"reliefweb_search_reports","server":96,"verb":"search","cls":"search","resolver":false,"title":"Search ReliefWeb Reports","description":"Search humanitarian reports on ReliefWeb with filtering by country, disaster, format, theme, language, source, and date. Returns paginated summaries — use reliefweb_get_report to fetch full body text. Report body is excluded from results (10–100KB each); call get_report when document content is needed. Every report is reachable by default — reports have no archived class, so include_archived has no effect here. Note: each call counts against the 1,000 calls/day quota.","input":[{"n":"text","t":"string"},{"n":"country","t":"string"},{"n":"disaster_id","t":"integer"},{"n":"format","t":"string"},{"n":"theme","t":"string"},{"n":"language","t":"string"},{"n":"source","t":"string"},{"n":"date_from","t":"const|string"},{"n":"date_to","t":"const|string"},{"n":"sort","t":"string"},{"n":"include_archived","t":"boolean"},{"n":"filter","t":"object"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"items","t":"array<object>"},{"n":"appliedFilters","t":"object"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"reliefweb_get_report","server":96,"verb":"get","cls":"get","resolver":false,"title":"Get ReliefWeb Report","description":"Fetch a single ReliefWeb report by its numeric ID with full body text, file attachments, and all metadata. Use after reliefweb_search_reports to retrieve document content — body is excluded from search results to manage context budget. Report bodies can be 10–100KB. A record over the response budget comes back as a section outline naming every section and its byte size; re-call with sections to pull only the ones needed. Nothing is truncated on either path.","input":[{"n":"id","t":"integer","r":true},{"n":"sections","t":"array<string>"}],"output":[{"n":"kind","t":"enum(2)"},{"n":"id","t":"number"},{"n":"title","t":"string"},{"n":"dateOriginal","t":"string"},{"n":"dateCreated","t":"string"},{"n":"primaryCountry","t":"string"},{"n":"countries","t":"array<string>"},{"n":"sources","t":"array<string>"},{"n":"formats","t":"array<string>"},{"n":"themes","t":"array<string>"},{"n":"languages","t":"array<string>"},{"n":"urlAlias","t":"string"},{"n":"fileUrls","t":"array<string>"},{"n":"headlineSummary","t":"string"},{"n":"body","t":"string"},{"n":"sections","t":"array<object>"},{"n":"outlineNotice","t":"string"},{"n":"error","t":"object"}]},{"name":"reliefweb_search_disasters","server":96,"verb":"search","cls":"search","resolver":false,"title":"Search ReliefWeb Disasters","description":"Search active and historical disasters on ReliefWeb by type, country, status, date range, and GLIDE number. Default preset covers alert, ongoing, and past disasters. Use include_archived=true to reach alert-archive entries as well, for historical research. Returns IDs suitable for use with reliefweb_get_disaster and as disaster_id filter in reliefweb_search_reports.","input":[{"n":"text","t":"string"},{"n":"country","t":"string"},{"n":"disaster_type","t":"string"},{"n":"status","t":"string"},{"n":"glide","t":"string"},{"n":"date_from","t":"const|string"},{"n":"date_to","t":"const|string"},{"n":"sort","t":"string"},{"n":"include_archived","t":"boolean"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"items","t":"array<object>"},{"n":"appliedFilters","t":"object"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"reliefweb_get_disaster","server":96,"verb":"get","cls":"get","resolver":false,"title":"Get ReliefWeb Disaster","description":"Fetch a disaster record by ReliefWeb numeric ID including description, affected countries, GLIDE number, profile overview, key content links, and active appeals or response plans. Use after reliefweb_search_disasters to retrieve full details. Each curated list also has an archive, which the record leaves out. Two alternative selectors, at most one per call: sections names parts of the record to return, archive pages one list's archived entries in place of the record. Description and profile overview can together run to tens of KB for major disasters. A record over the response budget comes back as a section outline naming every section and its byte size. Nothing is truncated on any path.","input":[{"n":"id","t":"integer","r":true},{"n":"sections","t":"array<string>"},{"n":"archive","t":"object"}],"output":[{"n":"kind","t":"enum(3)"},{"n":"id","t":"number"},{"n":"name","t":"string"},{"n":"status","t":"string"},{"n":"glide","t":"string"},{"n":"dateEvent","t":"string"},{"n":"dateCreated","t":"string"},{"n":"primaryCountry","t":"string"},{"n":"countries","t":"array<string>"},{"n":"types","t":"array<string>"},{"n":"primaryType","t":"string"},{"n":"urlAlias","t":"string"},{"n":"description","t":"string"},{"n":"profileOverview","t":"string"},{"n":"keyContent","t":"array<object>"},{"n":"appealsResponsePlans","t":"array<object>"},{"n":"usefulLinks","t":"array<object>"},{"n":"sections","t":"array<object>"},{"n":"outlineNotice","t":"string"},{"n":"archive","t":"object"},{"n":"error","t":"object"}]},{"name":"reliefweb_get_country","server":96,"verb":"get","cls":"get","resolver":false,"title":"Get ReliefWeb Country Profile","description":"Fetch a country profile from ReliefWeb by ISO3 code, including overview, humanitarian situation summary, key content links, active appeals and response plans, and useful external links. Country profiles are curated by OCHA editors and provide the authoritative situation summary for humanitarian responders. Each curated list also has an archive — thousands of entries deep for a long-running crisis — which the profile leaves out. Two alternative selectors, at most one per call: sections names parts of the profile to return, archive pages one list's archived entries in place of the profile. A profile over the response budget comes back as a section outline naming every section and its byte size. Nothing is truncated on any path.","input":[{"n":"iso3","t":"string","r":true},{"n":"sections","t":"array<string>"},{"n":"archive","t":"object"}],"output":[{"n":"kind","t":"enum(3)"},{"n":"id","t":"number"},{"n":"name","t":"string"},{"n":"iso3","t":"string"},{"n":"status","t":"string"},{"n":"urlAlias","t":"string"},{"n":"profileOverview","t":"string"},{"n":"keyContent","t":"array<object>"},{"n":"appealsResponsePlans","t":"array<object>"},{"n":"usefulLinks","t":"array<object>"},{"n":"sections","t":"array<object>"},{"n":"outlineNotice","t":"string"},{"n":"archive","t":"object"},{"n":"error","t":"object"}]},{"name":"reliefweb_list_countries","server":96,"verb":"list","cls":"list","resolver":false,"title":"List ReliefWeb Countries","description":"List all countries and territories tracked by ReliefWeb, optionally filtered to active humanitarian situations. Returns ISO3 codes and status for each entry — use the ISO3 code with reliefweb_get_country to fetch a full profile. Set crisis_only=true to limit results to countries with active humanitarian situations.","input":[{"n":"crisis_only","t":"boolean"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"items","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"reliefweb_search_jobs","server":96,"verb":"search","cls":"search","resolver":false,"title":"Search ReliefWeb Jobs","description":"Search humanitarian job listings on ReliefWeb by country, organization, career category, theme, and experience level. Returns current open positions — expired postings are excluded by default. Use include_archived=true to search the full history of postings, which is far larger than the open set. Use text search for role titles and job descriptions.","input":[{"n":"text","t":"string"},{"n":"country","t":"string"},{"n":"source","t":"string"},{"n":"career_category","t":"string"},{"n":"theme","t":"string"},{"n":"experience","t":"string"},{"n":"sort","t":"string"},{"n":"include_archived","t":"boolean"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"items","t":"array<object>"},{"n":"appliedFilters","t":"object"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"reliefweb_get_job","server":96,"verb":"get","cls":"get","resolver":false,"title":"Get ReliefWeb Job","description":"Fetch a job posting by ReliefWeb numeric ID with the full vacancy description, application instructions, dates, hiring organization, and location and taxonomy metadata. Use after reliefweb_search_jobs, which returns summaries without the description or application instructions. Reaches expired postings as well as open ones. A record over the response budget comes back as a section outline naming every section and its byte size; re-call with sections to pull only the ones needed. Nothing is truncated on either path.","input":[{"n":"id","t":"integer","r":true},{"n":"sections","t":"array<string>"}],"output":[{"n":"kind","t":"enum(2)"},{"n":"id","t":"number"},{"n":"title","t":"string"},{"n":"status","t":"string"},{"n":"dateCreated","t":"string"},{"n":"dateClosing","t":"string"},{"n":"dateChanged","t":"string"},{"n":"sources","t":"array<string>"},{"n":"countries","t":"array<string>"},{"n":"themes","t":"array<string>"},{"n":"types","t":"array<string>"},{"n":"careerCategories","t":"array<string>"},{"n":"experienceLevels","t":"array<string>"},{"n":"urlAlias","t":"string"},{"n":"url","t":"string"},{"n":"body","t":"string"},{"n":"howToApply","t":"string"},{"n":"sections","t":"array<object>"},{"n":"outlineNotice","t":"string"},{"n":"error","t":"object"}]},{"name":"reliefweb_search_training","server":96,"verb":"search","cls":"search","resolver":false,"title":"Search ReliefWeb Training","description":"Search humanitarian training and learning opportunities on ReliefWeb by country, format, date, source, career category, and language. Covers on-site and online capacity-building events. Training date fields use date.start / date.end — different from report date fields. Use date_start_from and date_start_to to find upcoming training within a window. Results default to soonest-starting first (date.start:asc). With neither date bound supplied the search is scoped to training starting from now, so the first page is upcoming opportunities; supply either bound to search an explicit range, including a historical one. Use include_archived=true to search concluded listings as well, which are far more numerous than the current ones.","input":[{"n":"text","t":"string"},{"n":"country","t":"string"},{"n":"source","t":"string"},{"n":"format","t":"enum(2)"},{"n":"career_category","t":"string"},{"n":"language","t":"string"},{"n":"date_start_from","t":"const|string"},{"n":"date_start_to","t":"const|string"},{"n":"sort","t":"string"},{"n":"include_archived","t":"boolean"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"items","t":"array<object>"},{"n":"appliedFilters","t":"object"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"reliefweb_get_training","server":96,"verb":"get","cls":"get","resolver":false,"title":"Get ReliefWeb Training","description":"Fetch a training listing by ReliefWeb numeric ID with the full description, registration instructions, event link, cost and fee information, dates, languages, and organizing source. Use after reliefweb_search_training, which returns summaries without the description, registration instructions, or cost detail. Reaches concluded listings as well as current ones. A record over the response budget comes back as a section outline naming every section and its byte size; re-call with sections to pull only the ones needed. Nothing is truncated on either path.","input":[{"n":"id","t":"integer","r":true},{"n":"sections","t":"array<string>"}],"output":[{"n":"kind","t":"enum(2)"},{"n":"id","t":"number"},{"n":"title","t":"string"},{"n":"status","t":"string"},{"n":"dateStart","t":"string"},{"n":"dateEnd","t":"string"},{"n":"dateRegistration","t":"string"},{"n":"dateCreated","t":"string"},{"n":"sources","t":"array<string>"},{"n":"countries","t":"array<string>"},{"n":"cities","t":"array<string>"},{"n":"themes","t":"array<string>"},{"n":"formats","t":"array<string>"},{"n":"types","t":"array<string>"},{"n":"languages","t":"array<string>"},{"n":"trainingLanguages","t":"array<string>"},{"n":"careerCategories","t":"array<string>"},{"n":"urlAlias","t":"string"},{"n":"url","t":"string"},{"n":"eventUrl","t":"string"},{"n":"cost","t":"string"},{"n":"feeInformation","t":"string"},{"n":"body","t":"string"},{"n":"howToRegister","t":"string"},{"n":"sections","t":"array<object>"},{"n":"outlineNotice","t":"string"},{"n":"error","t":"object"}]},{"name":"reliefweb_list_sources","server":96,"verb":"list","cls":"list","resolver":false,"title":"List ReliefWeb Sources","description":"Browse source organizations that contribute content to ReliefWeb, optionally filtered by name text or organization type. Returns short names, types, and URLs. Use the shortname value with the source filter in reliefweb_search_reports, reliefweb_search_jobs, and reliefweb_search_training.","input":[{"n":"text","t":"string"},{"n":"type","t":"enum(7)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"items","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"ris_search_legislation","server":97,"verb":"search","cls":"search","resolver":false,"title":"Search Austrian Legislation","description":"Search Austrian consolidated law and English translations: federal law (scope: federal, the default), one Bundesland (scope: burgenland … wien), municipal law (municipality plus a state scope — selected norms in 6 Bundesländer), or English translations of selected federal laws (language: english, federal only, ~138 documents). One document is one § / Artikel / Anlage; fetch a whole law by filtering law_id. Searches apply the version in force today in Austria by default — set in_force_as_of for another date, include_all_versions: true for full version history, or an entered_force / left_force window for new-law and repeal tracking; the three version filters are mutually exclusive, and the applied date is echoed back in the result. query is full text (boolean UND/ODER/NICHT or AND/OR/NOT, trailing-only * wildcard); title matches title, short title, and abbreviation (\"DSG\"). For a specific citation like \"§ 6 DSG\", ris_lookup_citation resolves it deterministically instead. Consolidated text is informational, not legally binding — the authentic gazette artifact lives in ris_search_gazette.","input":[{"n":"query","t":"string"},{"n":"title","t":"string"},{"n":"scope","t":"enum(10)"},{"n":"municipality","t":"string"},{"n":"language","t":"enum(2)"},{"n":"in_force_as_of","t":"string"},{"n":"include_all_versions","t":"boolean"},{"n":"entered_force_from","t":"string"},{"n":"entered_force_to","t":"string"},{"n":"left_force_from","t":"string"},{"n":"left_force_to","t":"string"},{"n":"section_from","t":"string"},{"n":"section_to","t":"string"},{"n":"section_type","t":"enum(4)"},{"n":"law_id","t":"string"},{"n":"index","t":"string"},{"n":"changed_since","t":"enum(6)"},{"n":"sort_by","t":"enum(2)"},{"n":"sort_direction","t":"enum(2)"},{"n":"page","t":"integer"},{"n":"page_size","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"page","t":"number"},{"n":"pageSize","t":"number"},{"n":"truncated","t":"boolean"},{"n":"appliedInForceAsOf","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"ris_search_case_law","server":97,"verb":"search","cls":"search","resolver":false,"title":"Search Austrian Case Law","description":"Search Austrian case law (Judikatur) in ONE court or tribunal per call — court is required: vfgh (Constitutional Court), vwgh (Supreme Administrative Court), justiz (ordinary courts incl. OGH, selected decisions), bvwg (federal administrative), lvwg (state administrative), dsk (data protection authority), normenliste (VwGH norm index), dok, pvak, gbk, verg, upts (party transparency), and the historical uvs, asylgh, ubas, umse, bks. Cross-court research is one call per court (calls are cheap); historical bodies are closed windows with successors — codes, windows, and Geschäftszahl examples: ris_list_reference topic courts. Filter by full-text query, cited norm (\"DSG §1\", \"DSGVO Art32\" — the highest-value filter), exact case_number (Geschäftszahl), decision date range, decision_type (headnote vs full text), decision_kind, or the court-conditional filters: issuing_body (dsk/dok/pvak/verg), court_name/legal_area/subject_area (justiz), state (lvwg/uvs), party (upts), commission/senate/discrimination_ground (gbk), subject_law (bks), collection_number (vfgh/vwgh/uvs). For a known Geschäftszahl, ECLI, or VfSlg/VwSlg cite, ris_lookup_citation resolves it directly.","input":[{"n":"court","t":"enum(17)","r":true},{"n":"query","t":"string"},{"n":"norm","t":"string"},{"n":"case_number","t":"string"},{"n":"decision_type","t":"enum(3)"},{"n":"decided_from","t":"string"},{"n":"decided_to","t":"string"},{"n":"decision_kind","t":"string"},{"n":"collection_number","t":"string"},{"n":"issuing_body","t":"string"},{"n":"court_name","t":"string"},{"n":"legal_area","t":"enum(2)"},{"n":"subject_area","t":"string"},{"n":"state","t":"enum(9)"},{"n":"party","t":"string"},{"n":"commission","t":"enum(2)"},{"n":"senate","t":"enum(3)"},{"n":"discrimination_ground","t":"enum(7)"},{"n":"subject_law","t":"string"},{"n":"changed_since","t":"enum(6)"},{"n":"sort_by","t":"enum(2)"},{"n":"sort_direction","t":"enum(2)"},{"n":"page","t":"integer"},{"n":"page_size","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"page","t":"number"},{"n":"pageSize","t":"number"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"ris_search_gazette","server":97,"verb":"search","cls":"search","resolver":false,"title":"Search Austrian Gazettes","description":"Browse Austria’s promulgation record — the authentic, legally binding gazettes — at every level of government. scope picks the jurisdiction: federal (default; the Bundesgesetzblatt across three era tiers auto-routed by year — BgblAuth 2004+ authentic, BgblPdf 1945–2003, BgblAlt 1848–1940 metadata-only ÖNB scans; one call serves one tier, so a published_from/published_to interval crossing 2004-01-01 or 1945-01-01 is rejected with the boundaries to split at, and RIS carries no federal gazette for 1941–1944), one Bundesland (its Landesgesetzblatt), district (Bezirke promulgations), or municipal (Gemeinde promulgations). For a state scope, series selects law gazettes (law_gazette, the default → LGBl) vs ordinance gazettes (ordinance_gazette → Verordnungsblätter, currently Tirol only), and state_era picks which era of that series to search: current (the default → the authentic LGBl) or legacy (the state’s earlier non-authentic series — Niederösterreich’s systematic LgblNO, or the older Lgbl elsewhere; Wien carries neither, and ordinance gazettes have no legacy series). Filter by query (full text), title, number (\"171/2026\" — a pre-2004 number auto-routes to the right era tier), part (federal I/II/III or pre_1997), type (laws/regulations/announcements/other), published_from/to, issuer (federal or ordinance gazettes only), district_authority (district only), or municipality (municipal only). Every result carries a binding label (authentic vs historical_record vs consolidated_informational) and the amtssigniert authentic PDF wherever it exists — the binding artifact, never a paraphrase. For one known gazette number, ris_lookup_citation resolves it directly. Coverage windows, era tiers, and part semantics: ris_list_reference topic applications or gazette_parts.","input":[{"n":"scope","t":"enum(12)"},{"n":"series","t":"enum(2)"},{"n":"state_era","t":"enum(2)"},{"n":"query","t":"string"},{"n":"title","t":"string"},{"n":"number","t":"string"},{"n":"part","t":"enum(4)"},{"n":"type","t":"enum(4)"},{"n":"published_from","t":"string"},{"n":"published_to","t":"string"},{"n":"issuer","t":"string"},{"n":"district_authority","t":"string"},{"n":"municipality","t":"string"},{"n":"sort_by","t":"enum(2)"},{"n":"sort_direction","t":"enum(2)"},{"n":"page","t":"integer"},{"n":"page_size","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"page","t":"number"},{"n":"pageSize","t":"number"},{"n":"truncated","t":"boolean"},{"n":"servedApplication","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"ris_search_drafts","server":97,"verb":"search","cls":"search","resolver":false,"title":"Search Draft Legislation","description":"Search Austria’s federal lawmaking pipeline BEFORE promulgation — the monitoring counterpart to ris_search_gazette (what will become law). stage selects the phase: review_drafts (Begutachtungsentwürfe — draft laws a ministry has put into public review, before any government bill exists) or government_bills (Regierungsvorlagen — bills the council of ministers adopted and submitted to parliament, 2004+). Filter by query (full text), title, ministry (accepts an abbreviation like \"BMF\" — expanded to RIS’s exact designation; the historical name at submission time counts), in_review_on (review_drafts only — drafts whose review window covers the date; today = \"what is in Begutachtung right now\"), or decided_from/to (government_bills only — council adoption date). changed_since gives coarse recency. Each record carries materials — the companion documents filed with the draft (Erläuterungen, Textgegenüberstellung, Vorblatt/WFA, covering letter, annexes); the Erläuterungen carry the drafting reasoning the bill text omits, and passing a materials[].url to ris_get_document as document_url is the only way to read one (format there picks the rendition returned). Documents are preparatory, not binding law. Ministry codes: ris_list_reference topic ministries.","input":[{"n":"stage","t":"enum(2)","r":true},{"n":"query","t":"string"},{"n":"title","t":"string"},{"n":"ministry","t":"string"},{"n":"in_review_on","t":"string"},{"n":"decided_from","t":"string"},{"n":"decided_to","t":"string"},{"n":"changed_since","t":"enum(6)"},{"n":"sort_by","t":"enum(3)"},{"n":"sort_direction","t":"enum(2)"},{"n":"page","t":"integer"},{"n":"page_size","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"page","t":"number"},{"n":"pageSize","t":"number"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"ris_search_announcements","server":97,"verb":"search","cls":"search","resolver":false,"title":"Search Official Announcements","description":"Search Austria’s sectoral official gazettes and executive documents — seven collections behind one collection enum: social_insurance (Amtliche Verlautbarungen der Sozialversicherung, authentic), veterinary (Amtliche Veterinärnachrichten, authentic), court_rules (Kundmachungen der Gerichte — rules of procedure and case-allocation plans, authentic; currently LVwG Tirol and Vorarlberg only), trade_exam_rules (Prüfungsordnungen gemäß Gewerbeordnung, authentic), health_structure_plans (Strukturpläne Gesundheit — federal ÖSG and per-state RSG, authentic), ministerial_decrees (Erlässe der Bundesministerien — decrees interpreting law; bind the administration, not citizens), and council_minutes (Ministerratsprotokolle — council-of-ministers session records). Each collection accepts a different filter set: query and title are broadly available; number, published_from/to, in_force_as_of, issuer (ministry and social-insurance carrier abbreviations expanded), norm (\"decrees citing the DSG\"), case_number, type, department, plan_type/plan_state (health plans), session_number/legislature (council minutes), and changed_since (all but social_insurance and veterinary) apply where the collection supports them — a filter outside its set is rejected locally. Every result carries a binding label, the authentic PDF where it exists, and the RIS web view (document_url) — the only browsable surface for the PDF-only council minutes and for ministerial decrees. Per-collection parameter matrix and issuers: ris_list_reference topic collections or issuing_bodies.","input":[{"n":"collection","t":"enum(7)","r":true},{"n":"query","t":"string"},{"n":"title","t":"string"},{"n":"number","t":"string"},{"n":"published_from","t":"string"},{"n":"published_to","t":"string"},{"n":"in_force_as_of","t":"string"},{"n":"entered_force_from","t":"string"},{"n":"entered_force_to","t":"string"},{"n":"issuer","t":"string"},{"n":"norm","t":"string"},{"n":"case_number","t":"string"},{"n":"type","t":"string"},{"n":"department","t":"string"},{"n":"plan_type","t":"enum(3)"},{"n":"plan_state","t":"enum(9)"},{"n":"session_number","t":"string"},{"n":"legislature","t":"string"},{"n":"changed_since","t":"enum(6)"},{"n":"sort_by","t":"enum(2)"},{"n":"sort_direction","t":"enum(2)"},{"n":"page","t":"integer"},{"n":"page_size","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"page","t":"number"},{"n":"pageSize","t":"number"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"ris_lookup_citation","server":97,"verb":"lookup","cls":"resolve","resolver":true,"title":"Resolve Austrian Legal Citation","description":"Resolve a single Austrian legal citation to its canonical RIS document deterministically — no keyword search. Four routes are auto-detected from the citation shape (or forced with kind): a norm citation — section-first (\"§ 6 DSG\", \"Art 10 B-VG\"), abbreviation-first (\"DSG §1\", \"EMRK Art8\", the shape ris_search_case_law returns in norms_cited; a comma-joined entry like \"DSG §1, §24\" resolves its first provision and names the rest), or a bare abbreviation like \"ABGB\" — resolves through consolidated federal law, or a Bundesland with a state hint, as in force today or on in_force_as_of, while an EU act RIS does not consolidate (DSGVO, the Charter, EuGVVO) returns found: false pointing to EUR-Lex without a search; a gazette citation (\"BGBl. I Nr. 165/1999\", year-first \"BGBl I 2018/24\", pre-2004 \"BGBl. Nr. 194/1961\", imperial \"RGBl. Nr. 189/1902\", \"StGBl. Nr. 1/1945\", or \"LGBl. Nr. 61/2026\" with a state hint) routes to the right federal era tier by year — the 1945 Staatsgesetzblatt sits in the 1945–2003 tier beside the BGBl. — or to a state Landesgesetzblatt — falling back to that Bundesland’s pre-e-Recht series when the citation predates its switch; a case number (\"Ro 2026/03/0016\", \"G 287/2022\", \"14Os49/26a\", \"2025-0.934.677\", \"W256 …\") is matched to its court — a leading VfGH, VwGH, OGH, BVwG, or DSB names it (\"VfGH G 13/2025\"), court skips detection, and ambiguous formats probe up to two courts; an ECLI (\"ECLI:AT:VFGH:2026:G13.2025\") resolves to the decision that carries it; a collection number (\"VfSlg 19.632/2012\", \"VwSlg 18.000 A/2010\") resolves through the VfGH/VwGH collection — a VwSlg cite given without its part letter can name one decision in each of the two VwGH series, and comes back as ambiguous with both cites named rather than resolved to one of them. Matches are ranked before one is picked: a norm resolves to the hit whose abbreviation is the cited one, then the cited one plus a year (\"EStG\" → EStG 1988), the exact §/Artikel label ahead of a prefixed one (\"§ 1\" before \"Art. 2 § 1\"); a case number resolves to the decision text, then to a Rechtssatz that decision leads; a gazette cite resolves only to an entry of the gazette it names (StGBl. and BGBl. share numbers in 1945, as the older gazettes do in their changeover years); and a \"BGBl. Nr.\" cite without its part that matches more than one of parts I/II/III (from 1997 they reuse numbers) comes back as ambiguous with each part named. Returns the single best-matching document in the same shape as the corresponding search tool, with alternatives_count when more than one matched. A citation that cannot be classified or resolved returns found: false with next-step guidance — it never throws for a miss; only an upstream RIS outage is an error. For keyword rather than citation lookup, use ris_search_legislation or ris_search_case_law.","input":[{"n":"citation","t":"string","r":true},{"n":"kind","t":"enum(5)"},{"n":"court","t":"enum(16)"},{"n":"state","t":"enum(9)"},{"n":"in_force_as_of","t":"string"}],"output":[{"n":"found","t":"boolean"},{"n":"kind","t":"enum(5)"},{"n":"resolution_note","t":"string"},{"n":"record","t":"object"},{"n":"alternatives_count","t":"number"},{"n":"guidance","t":"string"},{"n":"error","t":"object"}]},{"name":"ris_get_document","server":97,"verb":"get","cls":"get","resolver":false,"title":"Get RIS Document","description":"Fetch one RIS document’s full text or its rendition URLs, with explicit binding status and the amtssigniert authentic PDF surfaced wherever it exists. Address the document exactly one of two ways: document_number plus application (both copied verbatim from a ris_search_* or ris_lookup_citation result), or a document_url from a result’s content_urls — or, for a draft’s companion documents (Erläuterungen, Textgegenüberstellung, WFA, cover letter, annexes), a ris_search_drafts record’s materials[].url, which is the only route to them. format: markdown (default — the HTML rendition converted to markdown), html (raw HTML rendition), xml (the RIS Nutzdaten XML), or urls_only (no fetch — every rendition URL, including the Authentisch PDF). Format availability varies by application and the tool degrades explicitly, never silently: consolidated law, gazettes, case law, drafts, and most sectoral collections carry full text; district and municipal promulgations and court rules (Bvb, GrA, KmGer) publish only the signed authentic PDF; party-transparency decisions and council minutes (Upts, Mrp) are PDF-only; the 1848–1940 imperial gazettes (BgblAlt) are metadata-only — for these a text-format request returns a format_unavailable notice with the usable URL, not an error. Every result carries binding_status; only authentic (amtssigniert) publications are legally binding. This tool returns content, not fresh metadata — the metadata rides the search/lookup step that produced the document number. When the markdown text overflows the 40,000-byte budget the tool returns an outline (kind: outline) instead of truncating: the document’s §/Artikel/Anlage sections where it carries at least two such headings, otherwise contiguous byte windows named Part 1 of N … Part N of N covering the whole text and listed in document order. Re-call with sections:[…] naming outline entries to retrieve just those; a name matching no entry returns the outline again with a notice rather than the whole document. Windows are cut at line breaks, not at sentence or § boundaries, so one can open mid-sentence — read them in order and pull the neighbour when a passage straddles a cut. Raw html and xml renditions are never sliced: at or under the 40,000-byte budget they return whole; over it the result is kind: link — no text, truncated: true, the full byte_size, and content_urls, whose html or xml entry fetches the whole artifact in one GET. Every HTML rendition opens with a 40–70 KB stylesheet, so html practically always returns kind: link — read with markdown, parse with xml, and fetch content_urls.html for the authentic markup. Markdown drops the screen-reader expansions RIS ships alongside each abbreviated citation, keeping the visible citation form, and prints each Absatz, Ziffer, and litera under its own statutory label — (1a), 2., b) — with no generated list number in front; raw html/xml renditions are returned exactly as published.","input":[{"n":"document_number","t":"string"},{"n":"application","t":"enum(39)"},{"n":"document_url","t":"string"},{"n":"format","t":"enum(4)"},{"n":"sections","t":"array<string>"}],"output":[{"n":"text","t":"string"},{"n":"format","t":"enum(4)"},{"n":"byte_size","t":"number"},{"n":"truncated","t":"boolean"},{"n":"kind","t":"enum(3)"},{"n":"sections","t":"array<object>"},{"n":"binding_status","t":"enum(7)"},{"n":"content_urls","t":"object"},{"n":"authentic_pdf_url","t":"string"},{"n":"document_number","t":"string"},{"n":"application","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"ris_track_changes","server":97,"verb":"track","cls":"analyze","resolver":false,"title":"Track RIS Changes","description":"Track every document added or changed in one RIS application within an exact date window (changed_from/changed_to), optionally including deletions (include_deleted) — the delta-sync and monitoring primitive for mirrors and watchers, and the only surface that reports removals. Unlike the search tools’ coarse, additive-only changed_since intervals, this is exact-dated and deletion-aware. application accepts every RIS application code listed by ris_list_reference topic applications, including BrKons, LrKons, Dsk, and BgblAuth. Each changed document comes back in a compact cross-class record — document_number (for ris_get_document), title, the section_label, law_id, and in-force window (in_force_from/in_force_until) of a consolidated-law row or the case_numbers and decision_date of a court decision, dates, binding_status, and rendition URLs — plus its last-changed date; removed documents come back as deleted records with a deletion timestamp. One application per call; page explicitly for large windows.","input":[{"n":"application","t":"enum(39)","r":true},{"n":"changed_from","t":"string"},{"n":"changed_to","t":"string"},{"n":"include_deleted","t":"boolean"},{"n":"page","t":"integer"},{"n":"page_size","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"page","t":"number"},{"n":"pageSize","t":"number"},{"n":"truncated","t":"boolean"},{"n":"application","t":"string"},{"n":"changedFrom","t":"string"},{"n":"changedTo","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"ris_list_reference","server":97,"verb":"list","cls":"list","resolver":false,"title":"RIS Reference Lists","description":"Ground the opaque German codes across the RIS surface — static and offline, no upstream call. Topics: applications (all 39, with coverage windows, binding status, and content formats), courts (17 codes with Geschäftszahl examples and successor mapping), states (the three Bundesland request spellings), decision_types, decision_kinds (per-court Entscheidungsart values), issuing_bodies (dsk/dok/pvak/verg bodies and social-insurance issuers), ministries (abbreviations and full designations, historical included), collections (the 7 announcement collections and their parameter matrix), stages (lawmaking pipeline), changed_since_intervals, section_types, gazette_parts (BGBl parts and era tiers), law_types, district_authorities (all Bezirksverwaltungsbehörden), justiz_subject_areas (Fachgebiet taxonomy), search_syntax (operators and wildcard rules), and citation_formats (the shapes ris_lookup_citation parses). Recovery hints from the other ris_* tools route here.","input":[{"n":"topic","t":"enum(17)","r":true}],"output":[{"n":"topic","t":"string"},{"n":"summary","t":"string"},{"n":"entries","t":"array<object>"},{"n":"notes","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"sanctions_screen_name","server":98,"verb":"screen","cls":"analyze","resolver":false,"title":"sanctions-screening-mcp-server: screen name","description":"Screen a name (person, company, vessel, aircraft) against all loaded sanctions watchlists at once — OFAC SDN + Consolidated, EU, UK, and UN — alias- and fuzzy-aware. Returns scored potential matches with the source list, sanctioning program, designation date, and the matched alias; an OFAC party both OFAC lists publish under one entry ID is one hit, its sources naming both lists. Strict mode (default) matches exact-normalized then all-tokens-present, then runs a fuzzy pass over each selected list strict finds nothing on: a full pass when strict finds nothing on any list, otherwise one that adds only candidates covering every word of the name other than legal forms, articles and other function words, and the jurisdiction codes uk, usa, uae, and rf, ranked after the strict hits. Fuzzy mode runs the fuzzy pass over every selected list. It adds Jaro-Winkler and phonetic matching and labels hits approximate with a raw 0–1 similarity score plus the count of query tokens the candidate covers, which orders candidates that tie on score; fuzzySources names the lists it searched. Results are paged: totalAvailable and hasMore report matches beyond the returned page, and nextOffset retrieves them. This is a screening AID for a human/compliance review, NOT a compliance determination: a hit means \"review this candidate against the official source,\" and an empty result never means \"cleared.\"","input":[{"n":"name","t":"string","r":true},{"n":"entityType","t":"enum(5)"},{"n":"matchMode","t":"enum(2)"},{"n":"minScore","t":"number"},{"n":"sources","t":"array<enum(5)>"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"hits","t":"array<object>"},{"n":"caveat","t":"string"},{"n":"normalizedQuery","t":"string"},{"n":"matchModeUsed","t":"string"},{"n":"fuzzySources","t":"array<enum(5)>"},{"n":"totalCount","t":"number"},{"n":"totalAvailable","t":"number"},{"n":"totalAvailableBasis","t":"enum(2)"},{"n":"hasMore","t":"boolean"},{"n":"nextOffset","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"sanctions_screen_identifier","server":98,"verb":"screen","cls":"analyze","resolver":false,"title":"sanctions-screening-mcp-server: screen identifier","description":"Look up an identifier — a vessel IMO number, a SWIFT/BIC code, a digital-currency wallet address, a passport or national ID number, or any other identifier a list publishes — against all loaded sanctions watchlists at once: OFAC SDN + Consolidated, EU, UK, and UN. Exact match after normalization, with no fuzzy or partial matching and no score: spacing, letter case, and the separators - . / are ignored, an IMO number matches with or without its IMO prefix, a SWIFT/BIC code compares on its first eight characters so a branch code matches its institution, and a wallet address folds case only where its encoding is case-insensitive (hex, bech32, cashaddr — never base58). Returns every designation that publishes a matching identifier, one per designation — an OFAC party both OFAC lists publish under one entry ID is one hit, its sources naming both lists — with the identifiers that matched as published; sanctions_get_designation pulls the full record. This is a screening AID for a human/compliance review, NOT a compliance determination: a hit means \"review this candidate against the official source,\" and an empty result never means \"cleared\" — an identifier a list prints only in free-text remarks, or bundled with other numbers in one field, does not match.","input":[{"n":"value","t":"string","r":true},{"n":"type","t":"enum(6)"},{"n":"sources","t":"array<enum(5)>"}],"output":[{"n":"hits","t":"array<object>"},{"n":"caveat","t":"string"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"sanctions_get_designation","server":98,"verb":"get","cls":"get","resolver":false,"title":"sanctions-screening-mcp-server: get designation","description":"Fetch the full record for one sanctions designation by source list + entry ID or the list's published reference number — the drill-in after sanctions_screen_name or sanctions_screen_identifier surfaces a candidate, or the lookup for a reference a notice cites (UN QDe.004, EU EU.27.28, UK OFSI Group ID). Returns all published aliases, identifiers (passport, national ID, tax and registration numbers, SWIFT/BIC codes, digital-currency addresses, vessel call signs, aircraft tail and serial numbers, phone numbers, email addresses, websites), addresses, dates and places of birth at the precision the source published, nationalities, descriptive features (a vessel's flag, type, and tonnage; an aircraft's model and operator; a title or gender; sanctions notes), sanctioning program, legal basis, and designation date. The record reflects exactly what the source published; missing fields mean the source omitted them. This is a screening aid — the designation record supports a compliance review, it is not itself a determination.","input":[{"n":"source","t":"enum(5)","r":true},{"n":"entryId","t":"string","r":true}],"output":[{"n":"source","t":"enum(5)"},{"n":"sourceLabel","t":"string"},{"n":"sourceEntryId","t":"string"},{"n":"referenceNumber","t":"string"},{"n":"entityType","t":"enum(5)"},{"n":"primaryName","t":"string"},{"n":"program","t":"string"},{"n":"legalBasis","t":"string"},{"n":"designationDate","t":"string"},{"n":"aliases","t":"array<object>"},{"n":"identifiers","t":"array<object>"},{"n":"addresses","t":"array<object>"},{"n":"datesOfBirth","t":"array<object>"},{"n":"nationalities","t":"array<string>"},{"n":"features","t":"array<object>"},{"n":"remarks","t":"string"},{"n":"caveat","t":"string"},{"n":"error","t":"object"}]},{"name":"sanctions_list_sources","server":98,"verb":"list","cls":"list","resolver":false,"title":"sanctions-screening-mcp-server: list sources","description":"List the sanctions watchlists (OFAC SDN + Consolidated, EU, UK, UN) and GLEIF datasets currently loaded in the local mirror, each with its record count, source URL, license, and the mirror's readiness and as-of timestamp — for GLEIF, also its Level 2 ownership relationship count, whether its reporting exceptions are loaded and how many, and whether its alternate-name index is built. Use this for provenance and freshness on any result — results are only as current as the last mirror refresh, and a not-ready mirror means screening cannot run yet. Attribution: UK data is under the Open Government Licence v3.0; all sources are cited here.","input":[],"output":[{"n":"sanctionsReady","t":"boolean"},{"n":"sanctionsAsOf","t":"string"},{"n":"leiReady","t":"boolean"},{"n":"leiAsOf","t":"string"},{"n":"reportingExceptionsLoaded","t":"boolean"},{"n":"alternateNamesIndexed","t":"boolean"},{"n":"sources","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"sanctions_resolve_entity","server":98,"verb":"resolve","cls":"resolve","resolver":true,"title":"sanctions-screening-mcp-server: resolve entity","description":"Resolve a company or organization name (with an optional jurisdiction: a country code, which includes its subdivisions, or an ISO 3166-2 subdivision code) to candidate GLEIF Legal Entity Identifiers (LEIs), ranked. This turns a free-text counterparty name into a stable global identifier that sanctions_get_entity and sanctions_trace_ownership key off. Every name GLEIF publishes takes part: the legal name, previous legal names, trading names, alternative-language legal names, and ASCII transliterations of a legal name in another script — each candidate reports the name it matched on and that name's type, one candidate per LEI. Strict mode (default) matches exact-normalized then all-tokens-present; fuzzy mode (or auto when strict is empty) adds Jaro-Winkler scoring labeled approximate with a raw 0–1 score plus the count of query tokens the matched name covers, which orders candidates that tie on score. Results are paged: totalAvailable and hasMore report candidates beyond the returned page, and nextOffset retrieves them. Returns potential matches to confirm against the GLEIF record — name resolution is a candidate ranking, not an authoritative identification.","input":[{"n":"name","t":"string","r":true},{"n":"jurisdiction","t":"const|string"},{"n":"matchMode","t":"enum(2)"},{"n":"status","t":"enum(3)"},{"n":"minScore","t":"number"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"matches","t":"array<object>"},{"n":"normalizedQuery","t":"string"},{"n":"matchModeUsed","t":"string"},{"n":"totalCount","t":"number"},{"n":"totalAvailable","t":"number"},{"n":"totalAvailableBasis","t":"enum(2)"},{"n":"hasMore","t":"boolean"},{"n":"nextOffset","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"sanctions_get_entity","server":98,"verb":"get","cls":"get","resolver":false,"title":"sanctions-screening-mcp-server: get entity","description":"Fetch the full GLEIF Level 1 record for one LEI: legal name, other/trading names, legal and headquarters addresses, registration status, jurisdiction, registration authority and ID, and last-update date — plus a sanctions cross-reference against all loaded watchlists. The cross-reference screens the legal name and every other and transliterated name strict (exact, then all tokens present — never fuzzy, unlike sanctions_screen_name), and looks up the LEI and the registration number as exact non-document identifiers, the registration number matching only an identifier published for the country of the entity's legal jurisdiction. Hits merge to one per designation, an OFAC party both OFAC lists publish to one hit whose sources names both: matchedOn names every input that produced each, and a hit only an identifier produced carries matchedIdentifiers and no matchedName. The screening cross-reference is a screening AID: a hit is a candidate to verify against the official source, and no hit is not a clearance. screeningStatus says whether that cross-reference actually ran — an empty sanctionsHits under not_ready means the sanctions mirror was unavailable, not that nothing matched. sanctionsScreen says whether the hit list is the whole set: it reports how many potential matches existed before the cap, so a capped cross-reference is distinguishable from a complete one. LEI must be a 20-character GLEIF identifier (18 alphanumerics + 2 check digits).","input":[{"n":"lei","t":"string","r":true}],"output":[{"n":"lei","t":"string"},{"n":"legalName","t":"string"},{"n":"otherNames","t":"array<string>"},{"n":"alternateNames","t":"array<object>"},{"n":"jurisdiction","t":"string"},{"n":"status","t":"string"},{"n":"legalAddress","t":"string"},{"n":"headquartersAddress","t":"string"},{"n":"registrationAuthorityId","t":"string"},{"n":"registrationAuthorityEntityId","t":"string"},{"n":"lastUpdate","t":"string"},{"n":"sanctionsHits","t":"array<object>"},{"n":"sanctionsScreen","t":"object"},{"n":"screeningStatus","t":"enum(2)"},{"n":"caveat","t":"string"},{"n":"error","t":"object"}]},{"name":"sanctions_trace_ownership","server":98,"verb":"trace","cls":"analyze","resolver":false,"title":"sanctions-screening-mcp-server: trace ownership","description":"Trace the GLEIF Level 2 corporate-ownership graph for an LEI: direct and ultimate parents and/or children, traversed breadth-first to a bounded depth, with relationship type for each edge. Direction both walks up to the parents and down to the children from the root, never sideways into siblings or co-parents. An ultimate-parent edge is a shortcut to the top of the group, not a hop: a node only it reaches within the depth is returned as a leaf flagged reachedVia: ultimate. Set screenNodes to also cross-reference every entity in the graph against all loaded watchlists — resolving \"is anyone in this ownership chain sanctioned.\" Each node is cross-referenced as sanctions_get_entity does it: its legal name and every other and transliterated name screened strict (exact, then all tokens present — never fuzzy), and its LEI and registration number looked up as exact non-document identifiers, the registration number matching only an identifier published for the country of its legal jurisdiction; hits merge to one per designation, an OFAC party both OFAC lists publish to one hit whose sources names both, matchedOn naming every input that produced each. A node with no Level 1 record (missingEntityLeis) has no names, so it is looked up by its LEI alone. Each per-node screen is a screening AID: hits are candidates to verify, and an empty result for a node is not a clearance of that node. Each node whose parents were walked carries parentStatus for its direct and ultimate parent: a published relationship, a reporting exception with the reasons the entity gave (such as NATURAL_PERSONS or NON_CONSOLIDATING), none, or unknown when reporting exceptions are not loaded. The response says what it could not do: complete/truncated/missingEntityLeis report whether the loaded relationship graph within the depth is fully shown, screeningStatus reports whether the cross-reference actually ran, and each screened node reports whether its own hit list was capped. Requires a valid 20-character LEI (use sanctions_resolve_entity to obtain one).","input":[{"n":"lei","t":"string","r":true},{"n":"direction","t":"enum(3)"},{"n":"depth","t":"integer"},{"n":"screenNodes","t":"boolean"}],"output":[{"n":"rootLei","t":"string"},{"n":"nodes","t":"array<object>"},{"n":"edges","t":"array<object>"},{"n":"complete","t":"boolean"},{"n":"truncated","t":"boolean"},{"n":"reportingExceptionsLoaded","t":"boolean"},{"n":"missingEntityLeis","t":"array<string>"},{"n":"screeningStatus","t":"enum(3)"},{"n":"screenedNodeCount","t":"number"},{"n":"flaggedNodeCount","t":"number"},{"n":"caveat","t":"string"},{"n":"error","t":"object"}]},{"name":"secedgar_company_search","server":99,"verb":"search","cls":"search","resolver":false,"title":"Secedgar Company Search","description":"Find companies and retrieve entity info with optional recent filings. Entry point for most EDGAR workflows — resolves tickers, names, or CIKs to entity details, with accession numbers in the result feeding secedgar_get_filing for document content. When a date or form filter carries the scan past the recent submissions window, the full filtered filing history is also staged as df_<id> — inspect it with secedgar_dataframe_describe, then analyze it with secedgar_dataframe_query.","input":[{"n":"query","t":"string","r":true},{"n":"include_filings","t":"boolean"},{"n":"forms","t":"array<string>"},{"n":"filing_limit","t":"integer"},{"n":"filed_after","t":"const|string"},{"n":"filed_before","t":"const|string"}],"output":[{"n":"cik","t":"string"},{"n":"name","t":"string"},{"n":"tickers","t":"array<string>"},{"n":"exchanges","t":"array<string>"},{"n":"sic","t":"string"},{"n":"sic_description","t":"string"},{"n":"state_of_incorporation","t":"string"},{"n":"fiscal_year_end","t":"string"},{"n":"series_id","t":"string"},{"n":"class_id","t":"string"},{"n":"filings","t":"array<object>"},{"n":"total_filings","t":"number"},{"n":"history_scanned_through","t":"string"},{"n":"dataset","t":"object"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"secedgar_search_filings","server":99,"verb":"search","cls":"search","resolver":false,"title":"Secedgar Search Filings","description":"Search EDGAR filings since 1993. Full-text search covers 2001-present (the EFTS index floor); pre-2001 date ranges (to 1993) are served from the archives by form and entity/date. Pre-2001 free text needs entity scope (ticker:/cik:) — with it, the tool reads the entity's matching filings and matches the terms locally, which costs a few seconds (SEC's request rate caps the scan at roughly 5s for the 50-document maximum). A range crossing 2001-01-01 is split at the boundary and the two eras merged, each row tagged with its source. Supports exact phrases, boolean operators, wildcards, and entity targeting (ticker:AAPL or cik:320193 in query). When the match set outruns the inline list it is also staged as df_<id> — inspect it with secedgar_dataframe_describe, then analyze it with secedgar_dataframe_query.","input":[{"n":"query","t":"const|string"},{"n":"forms","t":"array<string>"},{"n":"filed_after","t":"const|string"},{"n":"filed_before","t":"const|string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"},{"n":"sort","t":"enum(3)"}],"output":[{"n":"total","t":"number"},{"n":"total_is_exact","t":"boolean"},{"n":"total_documents","t":"number"},{"n":"results","t":"array<object>"},{"n":"form_distribution","t":"object"},{"n":"scan","t":"object"},{"n":"dataset","t":"object"},{"n":"effectiveQuery","t":"string"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"secedgar_get_filing","server":99,"verb":"get","cls":"get","resolver":false,"title":"Secedgar Get Filing","description":"Fetch a specific filing's metadata and document content by accession number. Returns the primary document as readable text. Use offset/next_offset for multi-page access to large filings (10-K, S-1 can exceed 1M chars): pass the next_offset from a truncated response as offset, without section, to read the next page. Use section to jump directly to a heading (e.g. 'risk factors', 'item 7') without needing an offset.","input":[{"n":"accession_number","t":"string","r":true},{"n":"cik","t":"string"},{"n":"content_limit","t":"integer"},{"n":"document","t":"string"},{"n":"include_xbrl","t":"boolean"},{"n":"offset","t":"integer"},{"n":"section","t":"string"}],"output":[{"n":"accession_number","t":"string"},{"n":"form","t":"string"},{"n":"filing_date","t":"string"},{"n":"company_name","t":"string"},{"n":"cik","t":"string"},{"n":"period_ending","t":"string"},{"n":"primary_document","t":"string"},{"n":"requested_document","t":"string"},{"n":"documents","t":"object"},{"n":"content","t":"string"},{"n":"content_truncated","t":"boolean"},{"n":"content_total_length","t":"number"},{"n":"next_offset","t":"number"},{"n":"outline","t":"array<object>"},{"n":"filing_url","t":"string"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"secedgar_get_financials","server":99,"verb":"get","cls":"get","resolver":false,"title":"Secedgar Get Financials","description":"Get historical XBRL financial data for a company. Accepts friendly concept names (e.g., \"revenue\", \"net_income\", \"assets\") or raw XBRL tags. Discover available friendly names with secedgar_search_concepts. Handles historical tag changes and deduplicates data automatically. The full series is also staged as df_<id> when a canvas is available — inspect it with secedgar_dataframe_describe, then analyze it with secedgar_dataframe_query.","input":[{"n":"company","t":"string","r":true},{"n":"concept","t":"string","r":true},{"n":"taxonomy","t":"enum(3)"},{"n":"period_type","t":"enum(3)"},{"n":"unit","t":"string"},{"n":"limit","t":"integer"}],"output":[{"n":"company","t":"string"},{"n":"cik","t":"string"},{"n":"concept","t":"string"},{"n":"label","t":"string"},{"n":"description","t":"string"},{"n":"unit","t":"string"},{"n":"data","t":"array<object>"},{"n":"tags_tried","t":"array<string>"},{"n":"dataset","t":"object"},{"n":"caveats","t":"array<string>"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"secedgar_get_snapshot","server":99,"verb":"get","cls":"get","resolver":false,"title":"Secedgar Get Snapshot","description":"Build a company financial profile in one call: the latest value of every supported XBRL concept, grouped by statement. Reads the filer's complete companyfacts payload once rather than one request per concept, so it replaces a run of secedgar_get_financials calls when the question is \"what do this company's financials look like right now\". Values use the same frame dedup and tag priority as secedgar_get_financials, so the two agree for any concept they both cover. Duration concepts (income statement, cash flow, per-share) report their latest full year and latest single quarter; balance-sheet and entity-info concepts report their latest point-in-time value, since that is the only form they are filed in. A concept the filer does not report is listed under gaps with the XBRL tags that were tried — never zero-filled or interpolated. Use secedgar_get_financials for a full time series of one concept, and secedgar_compare_companies to put several companies side by side.","input":[{"n":"company","t":"string","r":true},{"n":"taxonomy","t":"enum(2)"},{"n":"period_type","t":"enum(3)"}],"output":[{"n":"company","t":"string"},{"n":"cik","t":"string"},{"n":"taxonomy","t":"string"},{"n":"period_type","t":"string"},{"n":"concepts_resolved","t":"number"},{"n":"concepts_total","t":"number"},{"n":"lines","t":"array<object>"},{"n":"gaps","t":"array<object>"},{"n":"caveats","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"secedgar_get_material_events","server":99,"verb":"get","cls":"get","resolver":false,"title":"Get Material Events","description":"Retrieve a company's 8-K filings with their item codes decoded, optionally filtered to specific items. 8-K item codes are how material events are actually scoped — 1.01 material agreements, 2.02 results of operations, 4.02 non-reliance on previously issued financials, 5.02 officer and director departures — and filtering by them is narrower than any form-level filter in secedgar_search_filings or secedgar_company_search, neither of which can see items. Each row carries the accession number and primary document for secedgar_get_filing; press releases usually ride as EX-99 exhibits rather than in the primary document. Two numbering regimes exist: filings from 2004-08-23 onward use the x.xx codes, earlier ones use single integers (12 was the old results-of-operations item, 9 the old Regulation FD item), and both are accepted as filters and decoded in the response. A date window reaches filings older than the recent submissions window by reading every archive page it overlaps, up to 10; without one, the scan reads back only as far as it needs to fill limit with filings passing the items filter, within the same 10 pages. Every scanned filing that passes the filter is materialized as df_<id> for item-distribution analysis over time (pass a date window to cover a longer span) — inspect it with secedgar_dataframe_describe, then analyze it with secedgar_dataframe_query.","input":[{"n":"company","t":"string","r":true},{"n":"items","t":"array<enum(45)>"},{"n":"filed_after","t":"const|string"},{"n":"filed_before","t":"const|string"},{"n":"limit","t":"integer"}],"output":[{"n":"cik","t":"string"},{"n":"company_name","t":"string"},{"n":"items_filter","t":"array<string>"},{"n":"total_matched","t":"number"},{"n":"total_8k_scanned","t":"number"},{"n":"item_distribution","t":"object"},{"n":"history_scanned_through","t":"string"},{"n":"filings","t":"array<object>"},{"n":"dataset","t":"object"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"secedgar_get_insider_transactions","server":99,"verb":"get","cls":"get","resolver":false,"title":"Get Insider Transactions","description":"Fetch Form 4 insider transactions (purchases, sales, grants, exercises) for a company by parsing SEC EDGAR ownership XML. Returns the reporting person, their relationship to the issuer, transaction date, type, shares traded (absolute magnitude), direction (acquire/dispose), price per share, and shares owned after the transaction. Covers nonDerivative transactions (open-market buys/sells, gifts) and derivative transactions (option exercises, RSU vests). Without a date window it reads the newest Form 4 filings; filed_after / filed_before read any period since mid-2003, reaching past the recent submissions window into the archive (e.g. insider trades in the quarter before an earnings miss). When a canvas is available, the full set of transactions parsed from the scanned filings is materialized as df_<id> (the inline list is a preview capped at limit) — inspect it with secedgar_dataframe_describe, then query it with secedgar_dataframe_query to aggregate net buy/sell by insider: SUM(CASE WHEN direction='dispose' THEN -shares_traded ELSE shares_traded END). Use secedgar_search_filings with forms=[\"4\"] to search Form 4 filings across all companies.","input":[{"n":"company","t":"string","r":true},{"n":"transaction_type","t":"enum(3)"},{"n":"limit","t":"integer"},{"n":"filed_after","t":"const|string"},{"n":"filed_before","t":"const|string"}],"output":[{"n":"issuer_name","t":"string"},{"n":"issuer_cik","t":"string"},{"n":"issuer_ticker","t":"string"},{"n":"transactions","t":"array<object>"},{"n":"filings_scanned","t":"number"},{"n":"filings_other_issuer","t":"number"},{"n":"history_scanned_through","t":"string"},{"n":"dataset","t":"object"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"secedgar_get_institutional_holdings","server":99,"verb":"get","cls":"get","resolver":false,"title":"Get Institutional Holdings","description":"Read an institutional manager's original 13F-HR information table. company is the filer: a 10-digit CIK, ticker, or name; names outside the ticker file use EDGAR entity search, and ambiguous names return candidates. For managers holding an issuer, use secedgar_find_holders and pass its filer_cik here. Positions carry issuer, CUSIP, shares, whole-USD market value, and option designation. Same-period amendments are disclosed separately, never merged; read them with secedgar_get_filing. By default, sub-lines consolidate into positions sorted by value; consolidate=false preserves raw filing order. Page with limit, offset and returned next_offset. When canvas is available, the original report's full parsed positions are staged as df_<id>: inspect with secedgar_dataframe_describe, then aggregate or join on cusip + reporting_period with secedgar_dataframe_query. Managers below $100M in 13(f) securities may not file. Use secedgar_search_filings with forms=[\"13F-HR\"] for broader search.","input":[{"n":"company","t":"string","r":true},{"n":"quarter","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"},{"n":"consolidate","t":"boolean"}],"output":[{"n":"filer_name","t":"string"},{"n":"filer_cik","t":"string"},{"n":"reporting_period","t":"string"},{"n":"filing_date","t":"string"},{"n":"accession_number","t":"string"},{"n":"amendments","t":"array<object>"},{"n":"amendment_search_complete","t":"boolean"},{"n":"total_holdings_in_filing","t":"number"},{"n":"total_positions","t":"number"},{"n":"offset","t":"number"},{"n":"next_offset","t":"number"},{"n":"holdings","t":"array<object>"},{"n":"dataset","t":"object"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"secedgar_find_holders","server":99,"verb":"find","cls":"search","resolver":false,"title":"Find Holders","description":"Find which institutional managers reported holding an issuer, by searching 13F-HR information tables for one reporting quarter. This is the reverse direction of secedgar_get_institutional_holdings: that tool takes a manager and returns its portfolio, this one takes an issuer and returns its managers — pass a returned filer_cik plus the same quarter to read the actual position. Searching by cusip is the precise path, matching the identifier the information table itself carries; without it the issuer name is matched as a phrase against the filing text, which both over-matches (unrelated issuers sharing a word) and under-matches (managers writing the name differently), so prefer cusip whenever one is known. A CUSIP cannot be derived from a ticker here — read one off any 13F information table returned by secedgar_get_institutional_holdings. The returned list is unranked: the search index scores by text relevance, which carries no signal about position size, and no ordering by shares or market value is available without opening each filing. Managers holding under $100M in 13(f) securities are exempt from filing at all. When more managers match than fit inline, the full fetched set is staged as df_<id> — inspect it with secedgar_dataframe_describe, then analyze it with secedgar_dataframe_query.","input":[{"n":"issuer","t":"string","r":true},{"n":"cusip","t":"const|string"},{"n":"quarter","t":"const|string"},{"n":"limit","t":"integer"}],"output":[{"n":"issuer","t":"string"},{"n":"resolved_issuer_name","t":"string"},{"n":"resolved_issuer_cik","t":"string"},{"n":"search_mode","t":"enum(2)"},{"n":"search_key","t":"string"},{"n":"quarter","t":"string"},{"n":"filed_from","t":"string"},{"n":"filed_to","t":"string"},{"n":"total_filings","t":"number"},{"n":"total_is_exact","t":"boolean"},{"n":"fetched","t":"number"},{"n":"holders_in_quarter","t":"number"},{"n":"holders","t":"array<object>"},{"n":"dataset","t":"object"},{"n":"ordering","t":"string"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"secedgar_get_beneficial_owners","server":99,"verb":"get","cls":"get","resolver":false,"title":"Get Beneficial Owners","description":"List the 5%-and-over beneficial owners of a public company, parsed from the structured SCHEDULE 13D and SCHEDULE 13G filings made about it. The input is the ISSUER — the company being held — which is the opposite direction from secedgar_get_institutional_holdings, where the input is the manager. 13D is the activist form and carries the filer's stated purpose of the transaction; 13G is the passive form and has no purpose field at all, which is the substantive difference between a stake that intends to influence control and one that does not. Every filing is returned with each reporting person listed separately, because voting power, dispositive power, and percent of class are reported per person even on a joint filing where several funds and their controlling principal report overlapping shares — summing those percentages double-counts the same position. Coverage starts at 2024-12-18, when SEC replaced the legacy SC 13D / SC 13G text filings with this XML format; earlier stakes are readable but not parseable, and the response reports how many of them the issuer has. The full parsed set is materialized as df_<id> when a canvas is available, one row per reporting person, so it joins against the insider and 13F dataframes on issuer CIK — inspect it with secedgar_dataframe_describe, then analyze it with secedgar_dataframe_query.","input":[{"n":"issuer","t":"string","r":true},{"n":"form_kind","t":"enum(3)"},{"n":"include_amendments","t":"boolean"},{"n":"limit","t":"integer"}],"output":[{"n":"issuer","t":"string"},{"n":"issuer_cik","t":"string"},{"n":"issuer_name","t":"string"},{"n":"form_kind","t":"enum(3)"},{"n":"total_structured_filings","t":"number"},{"n":"filings_parsed","t":"number"},{"n":"filings_examined","t":"number"},{"n":"filings_excluded_other_issuer","t":"number"},{"n":"filings_not_examined","t":"number"},{"n":"filings_failed","t":"array<object>"},{"n":"partial","t":"boolean"},{"n":"structured_coverage_from","t":"string"},{"n":"legacy_filings_before_coverage","t":"number"},{"n":"filings","t":"array<object>"},{"n":"dataset","t":"object"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"secedgar_get_fund_holdings","server":99,"verb":"get","cls":"get","resolver":false,"title":"Get Fund Holdings","description":"List what an ETF or mutual fund holds, parsed from the NPORT-P portfolio report it files with the SEC every quarter. The input is the fund — a ticker like VOO, a fund series ID, or the registrant trust — which is the opposite direction from the ownership tools: secedgar_get_institutional_holdings and secedgar_find_holders answer who owns a company, this answers what a fund owns. Each position carries the security name, CUSIP/ISIN/LEI where the filer reports them, share balance, market value in USD, and percent of the fund's net assets, alongside fund-level net assets and total assets. Positions are returned largest-first by percent of net assets, one page of limit rows starting at offset; the full report registers as df_<id> when a canvas is available — inspect it with secedgar_dataframe_describe, then analyze it with secedgar_dataframe_query, which is how a fund running to thousands of positions is aggregated or joined against the 13F and insider dataframes. An NPORT-P covers exactly one fund series and a registrant trust files one report per series, so a trust with several funds needs the specific fund named — pass its ticker or series_id. Reports publish roughly two months after the period they cover, so every result is dated: the holdings are the portfolio as of report_period_date, not as of today.","input":[{"n":"fund","t":"string","r":true},{"n":"series_id","t":"string"},{"n":"report_date","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"fund","t":"string"},{"n":"series_id","t":"string"},{"n":"series_name","t":"string"},{"n":"class_ids","t":"array<string>"},{"n":"registrant_cik","t":"string"},{"n":"registrant_name","t":"string"},{"n":"report_period_date","t":"string"},{"n":"report_period_end","t":"string"},{"n":"filing_date","t":"string"},{"n":"publication_lag_days","t":"number"},{"n":"form","t":"string"},{"n":"accession_number","t":"string"},{"n":"is_final_filing","t":"boolean"},{"n":"net_assets_usd","t":"number"},{"n":"total_assets_usd","t":"number"},{"n":"total_liabilities_usd","t":"number"},{"n":"total_holdings","t":"number"},{"n":"offset","t":"number"},{"n":"next_offset","t":"number"},{"n":"available_report_periods","t":"array<string>"},{"n":"holdings","t":"array<object>"},{"n":"dataset","t":"object"},{"n":"as_of","t":"string"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"secedgar_fetch_frames","server":99,"verb":"fetch","cls":"get","resolver":false,"title":"Secedgar Fetch Frames","description":"Fetch SEC XBRL frames for one concept × one period across all reporting companies. Inline response returns a page of the ranked companies — start at the top or pass offset/next_offset to walk further down the ranking; the full frames response (all reporters) is materialized as df_<id> when a canvas is available — inspect it with secedgar_dataframe_describe, then analyze it with secedgar_dataframe_query. Accepts friendly names like \"revenue\" or \"assets\" (discover via secedgar_search_concepts) or raw XBRL tags. One call hits one XBRL tag — when a friendly name maps to multiple same-meaning tags, the response's `unqueried_tags` lists the others; call again per tag and UNION/COALESCE in SQL with an analysis-specific priority (e.g. SalesRevenueGoodsNet is goods-only). The response's `related_tags` separately flags alternate-DEFINITION tags a meaningful share of filers use as their primary line (e.g. cash incl. restricted cash, equity incl. noncontrolling interest) — a whole-universe screen on the base tag silently omits those filers; query them separately, but do not blindly union (the semantics differ). Response includes `value_distribution` and `period_end_range` to flag XBRL scale-factor anomalies and fiscal-year mixing. SEC publishes frames for us-gaap and dei tags only, and `taxonomy` picks which of the two a raw tag is read from (dei for cover-page tags such as EntityCommonStockSharesOutstanding); a friendly name keeps its own mapped taxonomy. There are no ifrs-full frames, so IFRS (20-F) filers are absent from every frame; read them per company with secedgar_get_financials or secedgar_compare_companies under taxonomy ifrs-full.","input":[{"n":"concept","t":"string","r":true},{"n":"taxonomy","t":"enum(2)"},{"n":"period","t":"string","r":true},{"n":"unit","t":"enum(5)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"},{"n":"sort","t":"enum(2)"}],"output":[{"n":"concept","t":"string"},{"n":"taxonomy","t":"string"},{"n":"period","t":"string"},{"n":"unit","t":"string"},{"n":"label","t":"string"},{"n":"total_companies","t":"number"},{"n":"offset","t":"number"},{"n":"next_offset","t":"number"},{"n":"data","t":"array<object>"},{"n":"dataset","t":"object"},{"n":"unqueried_tags","t":"array<string>"},{"n":"related_tags","t":"array<object>"},{"n":"value_distribution","t":"object"},{"n":"period_end_range","t":"object"},{"n":"caveats","t":"array<string>"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"secedgar_compare_companies","server":99,"verb":"compare","cls":"analyze","resolver":false,"title":"Secedgar Compare Companies","description":"Compare 2-10 named companies across 1-8 XBRL concepts, aligned on fiscal years (annual) or calendar quarters (quarterly). This is the middle shape between secedgar_get_financials (one company, one concept, full history) and secedgar_fetch_frames (one concept, one period, every reporting company) — reach for it when the question names the companies. One companyfacts read per company, resolved through the same frame dedup and tag priority as secedgar_get_financials so the numbers agree. Balance-sheet and entity-info concepts are filed as point-in-time values: an annual matrix takes each company’s fiscal-year-end snapshot and places it in the period of the fiscal year it closes, beside that year’s income-statement lines (interim and cover-date snapshots stay out), and a quarterly matrix aligns each snapshot on the calendar quarter it falls in. The inline matrix covers the most recent periods up to `periods`, trimmed further when companies x concepts x periods is too large to return in one response; the full aligned series is materialized as df_<id> for growth rates and spreads — inspect it with secedgar_dataframe_describe, then analyze it with secedgar_dataframe_query. A company that fails to resolve is reported in failed_companies and the comparison proceeds with the rest, and a company that does not report a concept is reported in gaps with the tags that were tried — never interpolated or zero-filled. A company that reports a concept only for periods older than the inline window is named in caveats with its newest period. A concept that is neither a friendly name nor an XBRL tag is reported once in unknown_concepts with the closest supported names, and fails the call only when every concept is one. Off-calendar filers and unit mismatches are surfaced in caveats rather than silently mixed.","input":[{"n":"companies","t":"array<string>","r":true},{"n":"concepts","t":"array<string>","r":true},{"n":"taxonomy","t":"enum(2)"},{"n":"period_type","t":"enum(2)"},{"n":"periods","t":"integer"}],"output":[{"n":"period_type","t":"string"},{"n":"taxonomy","t":"string"},{"n":"periods","t":"array<string>"},{"n":"companies","t":"array<object>"},{"n":"failed_companies","t":"array<object>"},{"n":"concepts","t":"array<object>"},{"n":"cells","t":"array<object>"},{"n":"gaps","t":"array<object>"},{"n":"unknown_concepts","t":"array<object>"},{"n":"caveats","t":"array<string>"},{"n":"dataset","t":"object"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"secedgar_search_concepts","server":99,"verb":"search","cls":"search","resolver":false,"title":"Secedgar Search Concepts","description":"Search supported XBRL financial concepts by keyword, statement group, or taxonomy. Use before secedgar_get_financials, secedgar_compare_companies, or secedgar_fetch_frames to discover the right friendly name, or pass a raw XBRL tag (e.g., \"NetIncomeLoss\") to reverse-lookup which friendly names map to it. Empty search with no filters returns the full catalog.","input":[{"n":"search","t":"string"},{"n":"group","t":"enum(5)"},{"n":"taxonomy","t":"enum(3)"}],"output":[{"n":"total","t":"number"},{"n":"concepts","t":"array<object>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"secedgar_dataframe_describe","server":99,"verb":"dataframe","cls":"query","resolver":false,"title":"Secedgar Dataframe Describe","description":"List the dataframes (df_XXXXX_XXXXX) registered by the data-returning secedgar_* tools — any tool whose response carries a `dataset` handle stages its full result set here. Each entry surfaces source tool, query parameters, creation/expiry timestamps, row count, column schema, and whether the dataframe is truncated relative to the upstream source. Read the column schema here before writing SQL for secedgar_dataframe_query.","input":[{"n":"name","t":"string"}],"output":[{"n":"dataframes","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"secedgar_dataframe_query","server":99,"verb":"dataframe","cls":"query","resolver":false,"title":"Secedgar Dataframe Query","description":"Run a single-statement SELECT against the canvas dataframes registered by the data-returning secedgar_* tools — any tool whose response carries a `dataset` handle. Inspect a dataframe with secedgar_dataframe_describe first; its column schema is what the SQL has to match. Read-only: writes, DDL, DROP, COPY, PRAGMA, ATTACH, and external-file table functions are rejected. System catalogs (information_schema, pg_catalog, sqlite_master, duckdb_*) are denied — list dataframes via secedgar_dataframe_describe. Optional register_as chains the result as a new dataframe with a fresh TTL.","input":[{"n":"sql","t":"string","r":true},{"n":"register_as","t":"string"},{"n":"preview","t":"integer"},{"n":"row_limit","t":"integer"}],"output":[{"n":"columns","t":"array<string>"},{"n":"row_count","t":"number"},{"n":"row_count_capped","t":"boolean"},{"n":"rows","t":"array<object>"},{"n":"registered_as","t":"string"},{"n":"expires_at","t":"string"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"smithsonian_search_objects","server":100,"verb":"search","cls":"search","resolver":false,"title":"Search Smithsonian Objects","description":"Recommended first step for open-ended or topic discovery: free-text search across 14.5 million Smithsonian objects, with optional exact filters. Filters narrow by museum unit, object type, indexed date term, culture, geographic place, subject topic, named party, and online/CC0 availability. Returns curated summaries (title, date, museum, thumbnail URL, CC0 flag) with the total match count. The record_id in each result is the identifier for smithsonian_get_object, smithsonian_find_related, and smithsonian_get_media. To browse one exact category — a single museum, culture, date term, object type, or topic — use smithsonian_browse_category instead.","input":[{"n":"query","t":"string","r":true},{"n":"filters","t":"object"},{"n":"rows","t":"integer"},{"n":"start","t":"integer"}],"output":[{"n":"objects","t":"array<object>"},{"n":"total_count","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"truncationCeiling","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"smithsonian_list_terms","server":100,"verb":"list","cls":"list","resolver":false,"title":"List Valid Filter Terms","description":"Enumerate the valid term vocabulary for an indexed Smithsonian filter field (unit_code, culture, place, date, online_media_type, topic). Terms are a controlled vocabulary — often plural or qualified (e.g. \"Paintings\", not \"Painting\") — so guessed filter values tend to return nothing. Returns a page of the field's distinct term values; large vocabularies (topic has 133k terms, place 114k) page via start and rows. For unit_code, each code is returned with its museum name and contains matches the name as well as the code, so a museum name resolves to its code in one call.","input":[{"n":"field","t":"enum(6)","r":true},{"n":"start","t":"integer"},{"n":"rows","t":"integer"},{"n":"contains","t":"string"}],"output":[{"n":"field","t":"string"},{"n":"terms","t":"array<string>"},{"n":"total","t":"number"},{"n":"labels","t":"object"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"truncationCeiling","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"smithsonian_get_object","server":100,"verb":"get","cls":"get","resolver":false,"title":"Get Smithsonian Object","description":"Fetch a normalized catalog metadata projection for a Smithsonian object by its record_id (from smithsonian_search_objects results). Returns title, dates, description, labeled notes, makers, materials, dimensions, places, cultures, topics, exhibitions, credit line, identifiers, rights, and a media summary. Natural-history records can include scientific_names, taxonomy, and collection coordinates without inferred precision. The media summary is a count; full image URLs come from smithsonian_get_media.","input":[{"n":"id","t":"string","r":true}],"output":[{"n":"record_id","t":"string"},{"n":"title","t":"string"},{"n":"unit_code","t":"string"},{"n":"museum_name","t":"string"},{"n":"dates","t":"array<object>"},{"n":"description","t":"string"},{"n":"notes","t":"array<object>"},{"n":"scientific_names","t":"array<string>"},{"n":"taxonomy","t":"object"},{"n":"coordinates","t":"array<object>"},{"n":"makers","t":"array<object>"},{"n":"materials","t":"array<string>"},{"n":"dimensions","t":"array<string>"},{"n":"place","t":"array<object>"},{"n":"culture","t":"array<string>"},{"n":"topics","t":"array<string>"},{"n":"exhibitions","t":"array<object>"},{"n":"credit_line","t":"string"},{"n":"identifiers","t":"array<object>"},{"n":"object_rights","t":"string"},{"n":"is_cc0","t":"boolean"},{"n":"record_link","t":"string"},{"n":"media_summary","t":"object"},{"n":"error","t":"object"}]},{"name":"smithsonian_get_media","server":100,"verb":"get","cls":"get","resolver":false,"title":"Get Smithsonian Object Media","description":"Return every CC0 (open-access) image for a Smithsonian object at multiple resolutions. The tool never returns an empty list — it names the reason instead: an object with nothing digitized, an object whose media is entirely non-image (scanned books, 3D models, sound recordings), and an object whose images are entirely non-CC0 each fail with their own reason. Each image entry includes thumbnail (~120px), screen-size (~800px), and high-resolution JPEG/TIFF URLs with pixel dimensions. The cc0_only filter on smithsonian_search_objects surfaces objects that have downloadable CC0 images.","input":[{"n":"id","t":"string","r":true}],"output":[{"n":"record_id","t":"string"},{"n":"title","t":"string"},{"n":"is_cc0","t":"boolean"},{"n":"images","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"smithsonian_browse_category","server":100,"verb":"browse","cls":"search","resolver":false,"title":"Browse Smithsonian by Category","description":"Browse Smithsonian objects within one exact category — a single museum (mode \"museum\"), culture, indexed date term (mode \"period\"), object type (mode \"medium\"), or subject term (mode \"topic\"). The value must be an exact indexed category term, not free text: resolve museum, culture, period, and topic vocabulary with smithsonian_list_terms first (object_type is not enumerable there — harvest it from smithsonian_search_objects results, and treat each casing as its own category, since a harvested object_type covers only the casing it was written in). Returns the category total count, a page of matching objects, and a museum breakdown of that page; page the full category with start and rows. For open-ended or topic discovery, start with smithsonian_search_objects instead.","input":[{"n":"mode","t":"enum(5)","r":true},{"n":"value","t":"string","r":true},{"n":"rows","t":"integer"},{"n":"start","t":"integer"}],"output":[{"n":"mode","t":"string"},{"n":"value","t":"string"},{"n":"total_count","t":"number"},{"n":"sample_objects","t":"array<object>"},{"n":"museum_breakdown","t":"array<object>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"truncationCeiling","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"smithsonian_find_related","server":100,"verb":"find","cls":"search","resolver":false,"title":"Find Related Smithsonian Objects","description":"Discover objects across Smithsonian collections related to a given anchor object, matched on shared metadata signals — culture, period, object type, named parties, and topic terms. Each related object is tagged with the signals that connected it to the anchor; a named-party signal carries the catalog's own role for that party (maker, Collector, Donor, issuing authority, …), not a fixed \"maker\" label. Matches surface across museums — an NASM aerospace anchor can pull related objects from NMNHPALEO, SAAM, and NMAH.","input":[{"n":"id","t":"string","r":true},{"n":"limit","t":"integer"},{"n":"start","t":"integer"}],"output":[{"n":"anchor","t":"object"},{"n":"related","t":"array<object>"},{"n":"search_signals_used","t":"array<string>"},{"n":"signals","t":"array<object>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"truncationCeiling","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"socrata_find_datasets","server":101,"verb":"find","cls":"search","resolver":false,"title":"Find Socrata Datasets","description":"Search for datasets across all Socrata-powered government open-data portals, or scope to one portal with the domain parameter. Returns dataset IDs, names, domains, update timestamps, and column_names — the API field names SoQL takes, not display labels. Use socrata_get_dataset to fetch the typed column schema before writing queries — column_names carry no type information.","input":[{"n":"query","t":"string"},{"n":"domain","t":"string"},{"n":"categories","t":"array<string>"},{"n":"tags","t":"array<string>"},{"n":"only","t":"enum(5)"},{"n":"order","t":"enum(4)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"socrata_get_dataset","server":101,"verb":"get","cls":"get","resolver":false,"title":"Get Dataset Schema","description":"Fetch full metadata and column schema for a Socrata dataset by ID. Returns field names, data types, descriptions, row count, and licensing. Always call this before writing a socrata_query_dataset — the column types determine correct WHERE clause syntax: Number columns accept bare literals (year=2023) while Text columns require single-quoted strings (year='2023').","input":[{"n":"domain","t":"string"},{"n":"dataset_id","t":"string","r":true}],"output":[{"n":"dataset_id","t":"string"},{"n":"domain","t":"string"},{"n":"name","t":"string"},{"n":"description","t":"string"},{"n":"category","t":"string"},{"n":"tags","t":"array<string>"},{"n":"row_count","t":"number"},{"n":"row_count_source","t":"enum(2)"},{"n":"data_updated_at","t":"string"},{"n":"license","t":"string"},{"n":"columns","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"socrata_query_dataset","server":101,"verb":"query","cls":"query","resolver":false,"title":"Query Dataset","description":"Execute a SoQL query against any dataset on any Socrata portal. Use the search parameter for quick full-text lookup, or combine select/where/group/having/order for full analytical control. Returns rows plus the assembled SoQL string so you can learn the pattern. Columns are referenced by API field name (field_name from socrata_get_dataset, e.g. cuisine_description), never the display label. All SODA 2.1 row values are strings even for numeric columns — check data_type from socrata_get_dataset to determine correct WHERE quoting: Number columns use bare literals (year=2023), Text columns use single-quoted strings (year='2023'). To enumerate distinct values, use select=\"col, count(*) as n\" with group=\"col\" and order=\"n DESC\". When CANVAS_PROVIDER_TYPE=duckdb and rows fill limit, up to 50,000 matching rows spill to a DataCanvas table whatever the limit: list its columns with socrata_dataframe_describe, then run SQL with socrata_dataframe_query.","input":[{"n":"domain","t":"string"},{"n":"dataset_id","t":"string","r":true},{"n":"search","t":"string"},{"n":"select","t":"string"},{"n":"where","t":"string"},{"n":"group","t":"string"},{"n":"having","t":"string"},{"n":"order","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"},{"n":"canvas_id","t":"string"}],"output":[{"n":"rows","t":"array<object>"},{"n":"row_count","t":"number"},{"n":"total_count","t":"number"},{"n":"assembled_query","t":"string"},{"n":"domain","t":"string"},{"n":"dataset_id","t":"string"},{"n":"canvas_id","t":"string"},{"n":"canvas_row_count","t":"number"},{"n":"table_name","t":"string"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"socrata_list_portals","server":101,"verb":"list","cls":"list","resolver":false,"title":"List Socrata Portals","description":"List known Socrata-powered government open-data portals with their domain, organization name, and approximate dataset count. The catalog is a curated list of 39 well-known portals; dataset counts are fetched from the Discovery API and cached for ~24 hours. Filtering is client-side substring match on the query parameter. Use this first when you do not know which portal to target, then pass the domain to socrata_find_datasets.","input":[{"n":"query","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"portals","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"socrata_dataframe_describe","server":101,"verb":"dataframe","cls":"query","resolver":false,"title":"Describe DataCanvas Tables","description":"List registered tables in a DataCanvas session — schema, row count, and column names. Shows what datasets are available for SQL queries via socrata_dataframe_query. Only meaningful when CANVAS_PROVIDER_TYPE=duckdb is set. Use after socrata_query_dataset spills a large result set to canvas.","input":[{"n":"canvas_id","t":"string"}],"output":[{"n":"tables","t":"array<object>"},{"n":"canvas_id","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"socrata_dataframe_query","server":101,"verb":"dataframe","cls":"query","resolver":false,"title":"Query DataCanvas Table","description":"Run SELECT-only SQL against a DataCanvas table populated by socrata_query_dataset. Columns SODA types as number (including aggregate aliases like count(*) as n) are staged as DOUBLE, so numeric comparisons work without a cast (year > 2020, amount < 500). Text and timestamp columns stay VARCHAR — compare times with CAST(date AS TIMESTAMP). Only works when CANVAS_PROVIDER_TYPE=duckdb is set. Use socrata_dataframe_describe to see registered tables and their schemas.","input":[{"n":"canvas_id","t":"string","r":true},{"n":"sql","t":"string","r":true},{"n":"limit","t":"integer"}],"output":[{"n":"rows","t":"array<object>"},{"n":"row_count","t":"number"},{"n":"sql","t":"string"},{"n":"canvas_id","t":"string"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"stackexchange_list_sites","server":102,"verb":"list","cls":"list","resolver":false,"title":"List Stack Exchange Sites","description":"Enumerate all sites in the Stack Exchange network — name, api_site_parameter, audience, and URL. The api_site_parameter value is what other tools accept as the `site` input (e.g. \"stackoverflow\", \"superuser\", \"serverfault\"). Results are fetched live and optionally filtered by name. Use this tool to discover valid site parameters before calling other stackexchange_* tools.","input":[{"n":"filter","t":"string"}],"output":[{"n":"sites","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"quotaRemaining","t":"number"},{"n":"quotaMax","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"stackexchange_search_questions","server":102,"verb":"search","cls":"search","resolver":false,"title":"Search Stack Exchange Questions","description":"Search questions across a Stack Exchange site. Returns ranked questions with title, score, answer count, accepted status, tags, ask and last-activity dates, and a short excerpt of the question body — not the full body. Results supply question_id values for stackexchange_get_thread, which fetches the full question body and all answers. Results past the pageSize cap are reachable with the `page` parameter. Use the `site` parameter to target a specific community (e.g. \"stackoverflow\", \"superuser\", \"unix\"); call stackexchange_list_sites to discover valid site values.","input":[{"n":"query","t":"string","r":true},{"n":"site","t":"string"},{"n":"tags","t":"array<string>"},{"n":"acceptedOnly","t":"boolean"},{"n":"minScore","t":"integer"},{"n":"sort","t":"enum(4)"},{"n":"pageSize","t":"integer"},{"n":"page","t":"integer"}],"output":[{"n":"questions","t":"array<object>"},{"n":"page","t":"integer"},{"n":"attribution","t":"string"},{"n":"quotaRemaining","t":"number"},{"n":"quotaMax","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"stackexchange_get_tag_faq","server":102,"verb":"get","cls":"get","resolver":false,"title":"Get Stack Exchange Tag FAQ","description":"Fetch the highest-voted answered questions for a tag on a Stack Exchange site — the canonical \"best answers in X\" list. Returns a question list without bodies; use stackexchange_get_thread to read the full body and answers for any result. Results past the pageSize cap are reachable with the `page` parameter. Use this tool to find the authoritative community resources on a topic (e.g. tag \"javascript\" on stackoverflow). Use stackexchange_search_questions for free-text search rather than tag-based browsing.","input":[{"n":"tag","t":"string","r":true},{"n":"site","t":"string"},{"n":"pageSize","t":"integer"},{"n":"page","t":"integer"}],"output":[{"n":"questions","t":"array<object>"},{"n":"tag","t":"string"},{"n":"site","t":"string"},{"n":"page","t":"integer"},{"n":"attribution","t":"string"},{"n":"quotaRemaining","t":"number"},{"n":"quotaMax","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"stackexchange_get_user","server":102,"verb":"get","cls":"get","resolver":false,"title":"Get Stack Exchange User Profile","description":"Fetch a Stack Exchange user profile by numeric user ID: reputation, badge counts, answer and question counts, account and last-access dates, and top tags by answer score. Useful for credibility context on an answer author — pass the authorUserId from any question or answer in stackexchange_get_thread output. Returns profile fields plus up to 10 top tags by answer score.","input":[{"n":"userId","t":"integer","r":true},{"n":"site","t":"string"}],"output":[{"n":"userId","t":"integer"},{"n":"displayName","t":"string"},{"n":"link","t":"string"},{"n":"reputation","t":"integer"},{"n":"badgeCounts","t":"object"},{"n":"location","t":"string"},{"n":"websiteUrl","t":"string"},{"n":"answerCount","t":"integer"},{"n":"questionCount","t":"integer"},{"n":"creationDate","t":"string"},{"n":"lastAccessDate","t":"string"},{"n":"topTags","t":"array<object>"},{"n":"quotaRemaining","t":"number"},{"n":"quotaMax","t":"number"},{"n":"error","t":"object"}]},{"name":"stackexchange_get_thread","server":102,"verb":"get","cls":"get","resolver":false,"title":"Get Stack Exchange Q&A Thread","description":"Fetch a complete Q&A thread — question body and all answers, accepted answer first then sorted by score, rendered as clean markdown with fenced code blocks. Accepts an integer question ID or a full Stack Exchange question URL (e.g. \"https://stackoverflow.com/questions/11227809/why-is-processing-a-sorted-array-faster\" or \"11227809\"). HTML is normalized to markdown automatically; attribution (author + link) included per CC BY-SA 4.0. Get question IDs from stackexchange_search_questions or stackexchange_get_tag_faq.","input":[{"n":"questionIdOrUrl","t":"string","r":true},{"n":"site","t":"string"},{"n":"maxAnswers","t":"integer"},{"n":"includeComments","t":"boolean"}],"output":[{"n":"questionId","t":"integer"},{"n":"title","t":"string"},{"n":"link","t":"string"},{"n":"score","t":"integer"},{"n":"answerCount","t":"integer"},{"n":"tags","t":"array<string>"},{"n":"bodyMarkdown","t":"string"},{"n":"authorName","t":"string"},{"n":"authorLink","t":"string"},{"n":"authorUserId","t":"integer"},{"n":"acceptedAnswerId","t":"integer"},{"n":"creationDate","t":"string"},{"n":"lastActivityDate","t":"string"},{"n":"comments","t":"array<object>"},{"n":"commentsTruncated","t":"boolean"},{"n":"answers","t":"array<object>"},{"n":"quotaRemaining","t":"number"},{"n":"quotaMax","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"commentsCap","t":"number"},{"n":"error","t":"object"}]},{"name":"toolkit_hash_value","server":103,"verb":"hash","cls":"analyze","resolver":false,"title":"toolkit-mcp-server: hash value","description":"Generate a cryptographic digest of a value, or verify a value against an expected digest. Set operation to \"generate\" for a digest, or \"compare\" to constant-time-check value against the expected digest — compare is timing-safe and avoids manual string equality checks. Omitting operation compares when expected is supplied and generates otherwise. Algorithm defaults to sha256; sha384 and sha512 are also secure, while md5 and sha1 are exposed for checksum and file-integrity compatibility ONLY and must not be used for passwords, signatures, or any security purpose. digestEncoding selects the generated digest form: lowercase hex (default), base64, or sri (<algorithm>-<base64>, the npm lockfile integrity and Subresource Integrity form, sha256/sha384/sha512 only). expected is accepted as hex, base64, or SRI, recognized by its shape at the algorithm's digest length, so a published checksum can be pasted as-is; an SRI value may hold several space-separated entries, as an npm integrity field can, and matches when any entry for algorithm does. inputEncoding controls how value is read before hashing (utf8 default, or hex/base64 for raw binary data) so binary blobs need no decode round-trip. The canonical use is matching a download against a vendor-published checksum or a lockfile integrity entry.","input":[{"n":"operation","t":"enum(2)"},{"n":"value","t":"string","r":true},{"n":"algorithm","t":"enum(5)"},{"n":"digestEncoding","t":"enum(3)"},{"n":"expected","t":"string"},{"n":"inputEncoding","t":"enum(3)"}],"output":[{"n":"algorithm","t":"enum(5)"},{"n":"operation","t":"enum(2)"},{"n":"digest","t":"string"},{"n":"matches","t":"boolean"},{"n":"lengthInBytes","t":"number"},{"n":"error","t":"object"}]},{"name":"toolkit_generate_id","server":103,"verb":"generate","cls":"analyze","resolver":false,"title":"toolkit-mcp-server: generate id","description":"Mint cryptographically-random identifiers using the platform CSPRNG — the correct source for IDs that must be unpredictable, unlike model-generated values. type selects the format: uuid_v4 (random, the default), uuid_v7 (time-ordered, sortable by creation), or ulid (26-char Crockford-base32, lexicographically sortable). Set count to mint a batch in one call (up to 1000); the returned ids array always contains exactly count values and is never truncated. For uuid_v7 and ulid, a batch is monotonic — strictly increasing even within the same millisecond — so the ids array stays in sorted creation order; ids minted in the same millisecond are separated by random gaps, so no id in a batch can be derived from another. IDs from this tool feed into toolkit_generate_qr (pass ids[0] as data) to create a scannable code.","input":[{"n":"type","t":"enum(3)"},{"n":"count","t":"integer"}],"output":[{"n":"type","t":"enum(3)"},{"n":"ids","t":"array<string>"},{"n":"count","t":"number"},{"n":"error","t":"object"}]},{"name":"toolkit_generate_qr","server":103,"verb":"generate","cls":"analyze","resolver":false,"title":"toolkit-mcp-server: generate QR code","description":"Encode text or a URL into a QR code. data is the content to encode (a link, a generated identifier such as toolkit_generate_id's ids[0], or any string). format selects the output: svg returns inline SVG markup sized in pixels, png_base64 returns base64-encoded PNG bytes (with mimeType and byteLength), and terminal returns plain Unicode half-block characters (no escape codes) for a monospace display, drawn for a dark background: light modules, quiet zone included, are blocks and dark modules are spaces. errorCorrection (L/M/Q/H) trades data capacity for damage tolerance, margin sets the quiet-zone width in modules, and scale sets pixels per module for svg and png_base64, so both are (modules + 2 × margin) × scale pixels per side. The returned version (1–40) reflects how dense the encoded data is. png_base64 rejects an image past 2048 px per side with a typed raster_too_large error, so a dense symbol needs a lower scale; svg is vector markup and carries no such limit.","input":[{"n":"data","t":"string","r":true},{"n":"format","t":"enum(3)"},{"n":"errorCorrection","t":"enum(4)"},{"n":"margin","t":"integer"},{"n":"scale","t":"integer"}],"output":[{"n":"format","t":"enum(3)"},{"n":"content","t":"string"},{"n":"mimeType","t":"enum(2)"},{"n":"byteLength","t":"number"},{"n":"version","t":"number"},{"n":"error","t":"object"}]},{"name":"toolkit_encode_value","server":103,"verb":"encode","cls":"analyze","resolver":false,"title":"toolkit-mcp-server: encode value","description":"Encode or decode a value across base64, base64url, hex, or URL (percent) encoding, in either direction. Set operation to \"encode\" to transform raw UTF-8 text into the chosen encoding, or \"decode\" to recover the original bytes from an encoded value. Decoded bytes come back as UTF-8 text by default; set outputEncoding to \"hex\" or \"base64\" to receive them re-encoded instead, which is lossless for binary data and transcodes between encodings (a base64 digest to hex, for example). Decoding never substitutes replacement characters: bytes that are not valid UTF-8 text are reported as a recoverable error that points at outputEncoding. Whitespace in hex, base64, and base64url values is ignored, so line-wrapped MIME bodies and PEM bodies decode as-is (drop PEM's -----BEGIN/END----- lines, which are not base64). base64url uses the URL-safe alphabet (- and _ instead of + and /); url applies encodeURIComponent and percent-decoding. A value that is malformed for the chosen encoding is reported as a recoverable error, not a silent best-effort.","input":[{"n":"operation","t":"enum(2)","r":true},{"n":"encoding","t":"enum(4)","r":true},{"n":"value","t":"string","r":true},{"n":"outputEncoding","t":"enum(3)"}],"output":[{"n":"encoding","t":"enum(4)"},{"n":"operation","t":"enum(2)"},{"n":"outputEncoding","t":"enum(3)"},{"n":"result","t":"string"},{"n":"error","t":"object"}]},{"name":"toolkit_geolocate_ip","server":103,"verb":"geolocate","cls":"resolve","resolver":true,"title":"toolkit-mcp-server: geolocate IP","description":"Resolve a public IP or dotted hostname to country, region, city, coordinates, ASN, organization, timezone, and proxy/hosting/mobile flags. Supply target for one lookup or targets for an ordered batch, never both; blank target and empty targets are unset. Batches process the first 100 positions (duplicates retained) and disclose every remainder in unprocessedTargets; at most 1000 inputs are accepted. Each batch position reports its result or an error with recovery, so cached and local outcomes survive quota refusals. The provider is called directly, never the target. Hostnames are DNS-resolved and resolvedIp names the located address. Private/reserved addresses have no public geolocation. Results are best-effort, city-level at best; VPNs, proxies, mobile NAT, and anycast defeat IP-to-location. Read proxy, hosting, and mobile before trusting coordinates: true describes infrastructure, not the user. Absent metadata remains unknown. source names the provider. Single and batch quotas are independent; cache hits consume neither quota.","input":[{"n":"target","t":"string"},{"n":"targets","t":"array<string>"}],"output":[{"n":"target","t":"string"},{"n":"resolvedIp","t":"string"},{"n":"country","t":"string"},{"n":"countryCode","t":"string"},{"n":"region","t":"string"},{"n":"city","t":"string"},{"n":"latitude","t":"number"},{"n":"longitude","t":"number"},{"n":"asn","t":"string"},{"n":"org","t":"string"},{"n":"timezone","t":"string"},{"n":"proxy","t":"boolean"},{"n":"hosting","t":"boolean"},{"n":"mobile","t":"boolean"},{"n":"source","t":"string"},{"n":"results","t":"array<object>"},{"n":"failedCount","t":"integer"},{"n":"unprocessedTargets","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"treasury_list_datasets","server":104,"verb":"list","cls":"list","resolver":false,"title":"List Treasury Fiscal Data Datasets","description":"Browse the curated catalog of US Treasury Fiscal Data API endpoints. Returns endpoint paths, field names, descriptions, and update cadence for each dataset. Use this tool before treasury_query_dataset to discover the correct endpoint path and field names — a typo in either causes a 400 error from the API. The catalog is a curated subset of the full API — pass any endpoint path directly to treasury_query_dataset to query datasets not listed here. The catalog covers debt, interest rates, exchange rates, revenue/spending, savings bonds, and securities datasets.","input":[{"n":"category","t":"enum(7)"},{"n":"search","t":"string"}],"output":[{"n":"datasets","t":"array<object>"},{"n":"total","t":"number"},{"n":"error","t":"object"}]},{"name":"treasury_query_dataset","server":104,"verb":"query","cls":"query","resolver":false,"title":"Query Treasury Fiscal Data Dataset","description":"Query any Treasury Fiscal Data endpoint by path, field list, filters, sort, and page. Call treasury_list_datasets first to get the correct endpoint path and exact field names — a typo in either causes a 400. Filter syntax: each condition is { field, operator, value } where operator is eq/gt/gte/lt/lte/in (e.g., record_date:gte:2024-01-01). Multiple conditions are ANDed together. All response values are strings per the API contract, including numbers and dates; \"null\" (string) means no value. Supply canvas_id to stage the page result as a DataCanvas table — read its column schema with treasury_dataframe_describe, then run SQL over it with treasury_dataframe_query (requires CANVAS_PROVIDER_TYPE=duckdb on the server).","input":[{"n":"endpoint","t":"string","r":true},{"n":"fields","t":"array<string>"},{"n":"filters","t":"array<object>"},{"n":"sort","t":"string"},{"n":"page_size","t":"integer"},{"n":"page_number","t":"integer"},{"n":"canvas_id","t":"string"}],"output":[{"n":"endpoint","t":"string"},{"n":"data","t":"array<object>"},{"n":"total_count","t":"number"},{"n":"total_pages","t":"number"},{"n":"page_number","t":"number"},{"n":"page_size","t":"number"},{"n":"field_labels","t":"object"},{"n":"applied_filters","t":"string"},{"n":"canvas_id","t":"string"},{"n":"canvas_expires_at","t":"string"},{"n":"notice","t":"string"},{"n":"totalCount","t":"number"},{"n":"error","t":"object"}]},{"name":"treasury_get_debt","server":104,"verb":"get","cls":"get","resolver":false,"title":"Get National Debt","description":"Fetch national debt (Debt to the Penny) — total public debt outstanding broken into publicly-held debt and intragovernmental holdings. Three modes: \"latest\" returns the most recent business day's record; \"date\" returns the record for a specific date (must be a business day — the API only records debt on days markets are open); \"series\" returns a date range, staging the full result as a DataCanvas table when canvas_id is set or the range matches more than 500 rows — read the table's column schema with treasury_dataframe_describe, then run SQL over it with treasury_dataframe_query. Records go back to 1993-04-01.","input":[{"n":"mode","t":"enum(3)"},{"n":"date","t":"string"},{"n":"start_date","t":"string"},{"n":"end_date","t":"string"},{"n":"canvas_id","t":"string"}],"output":[{"n":"record_date","t":"string"},{"n":"total_debt","t":"string"},{"n":"debt_held_public","t":"string"},{"n":"intragovernmental_holdings","t":"string"},{"n":"series","t":"array<object>"},{"n":"total_records","t":"number"},{"n":"retrieved_records","t":"number"},{"n":"canvas_id","t":"string"},{"n":"canvas_expires_at","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"treasury_get_interest_rates","server":104,"verb":"get","cls":"get","resolver":false,"title":"Get Treasury Interest Rates","description":"Average interest rates Treasury pays on its outstanding securities by security type. Answers \"what is the government's cost of borrowing?\" Covers every type Treasury reports — marketable issues, non-marketable series, and the aggregate totals — and which types it reports changes over the years, so omit security_type to see the ones a given period carries. Rates are percentages, not basis points. Updated monthly (end-of-month records). Mode \"latest\" returns the most recent month's rates for all or one security type; \"series\" returns a time history, staging the result as a DataCanvas table when canvas_id is set or the range matches more than 200 rows — read the table's column schema with treasury_dataframe_describe, then run SQL over it with treasury_dataframe_query.","input":[{"n":"mode","t":"enum(2)"},{"n":"security_type","t":"string"},{"n":"start_date","t":"string"},{"n":"end_date","t":"string"},{"n":"canvas_id","t":"string"}],"output":[{"n":"as_of_date","t":"string"},{"n":"rates","t":"array<object>"},{"n":"total_records","t":"number"},{"n":"canvas_id","t":"string"},{"n":"canvas_expires_at","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"treasury_get_exchange_rates","server":104,"verb":"get","cls":"get","resolver":false,"title":"Get Treasury Exchange Rates","description":"Official Treasury reporting exchange rates for ~165 countries — the rates US federal agencies are required to use when converting foreign currency to USD for official reporting. Published quarterly (March 31, June 30, Sep 30, Dec 31); mode \"latest\" returns the most recently published quarter. Rate is expressed as foreign currency units per 1 USD (e.g., a Japan-Yen rate of 159.41 means 1 USD = 159.41 JPY). These are NOT market exchange rates and are not suitable for financial transaction pricing. Mode \"series\" stages the result as a DataCanvas table when canvas_id is set or the range matches more than 500 rows — read the table's column schema with treasury_dataframe_describe, then run SQL over it with treasury_dataframe_query.","input":[{"n":"mode","t":"enum(2)"},{"n":"countries","t":"array<string>"},{"n":"start_date","t":"string"},{"n":"end_date","t":"string"},{"n":"canvas_id","t":"string"}],"output":[{"n":"as_of_date","t":"string"},{"n":"effective_date","t":"string"},{"n":"mixed_record_dates","t":"boolean"},{"n":"rates","t":"array<object>"},{"n":"total_records","t":"number"},{"n":"retrieved_records","t":"number"},{"n":"note","t":"string"},{"n":"canvas_id","t":"string"},{"n":"canvas_expires_at","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"treasury_dataframe_describe","server":104,"verb":"dataframe","cls":"query","resolver":false,"title":"Describe Treasury Dataframes","description":"List DataCanvas dataframes materialized by treasury_query_dataset, treasury_get_debt, treasury_get_interest_rates, and treasury_get_exchange_rates. Each entry surfaces source tool, query parameters, creation/expiry timestamps, row count, and column schema. Use this tool before treasury_dataframe_query to discover table names and column types. Requires CANVAS_PROVIDER_TYPE=duckdb.","input":[{"n":"name","t":"string"}],"output":[{"n":"dataframes","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"treasury_dataframe_query","server":104,"verb":"dataframe","cls":"query","resolver":false,"title":"Query Treasury Dataframes","description":"Run a single-statement SELECT against DataCanvas dataframes registered by treasury_query_dataset, treasury_get_debt, treasury_get_interest_rates, and treasury_get_exchange_rates. Read-only: writes, DDL, DROP, COPY, PRAGMA, ATTACH, and external-file table functions are rejected. System catalogs (information_schema, pg_catalog, sqlite_master, duckdb_*) are denied at the bridge layer. All Treasury dataframe columns are VARCHAR — CAST to DECIMAL or DATE for arithmetic and date comparisons. Use treasury_dataframe_describe to list available table names and column schemas before querying.","input":[{"n":"sql","t":"string","r":true},{"n":"register_as","t":"string"},{"n":"preview","t":"integer"},{"n":"row_limit","t":"integer"}],"output":[{"n":"columns","t":"array<string>"},{"n":"row_count","t":"number"},{"n":"row_count_capped","t":"boolean"},{"n":"rows","t":"array<object>"},{"n":"registered_as","t":"string"},{"n":"expires_at","t":"string"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"tvmaze_search_shows","server":105,"verb":"search","cls":"search","resolver":false,"title":"Tvmaze Search Shows","description":"Search television shows by title and return up to 10 matches, each with its network or streaming service, production status, genres, rating, and ids in other catalogs. Matching is fuzzy, so small typos still resolve. The result set is hard-capped at 10 by the source and cannot be paged — narrow the title to reach an eleventh match. To go the other way, from an IMDb or TheTVDB id to a show, use tvmaze_lookup_show.","input":[{"n":"query","t":"string","r":true}],"output":[{"n":"shows","t":"array<object>"},{"n":"effectiveQuery","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"tvmaze_get_show","server":105,"verb":"get","cls":"get","resolver":false,"title":"Tvmaze Get Show","description":"Fetch a television show by its TVmaze id: full profile, weekly broadcast slot, season list, and the previous and next episode when the source has them. This is the entry point for an id returned by tvmaze_search_shows or tvmaze_lookup_show. For the episode list itself use tvmaze_get_episodes, and for credits use tvmaze_get_cast.","input":[{"n":"show_id","t":"integer","r":true},{"n":"timezone","t":"string"}],"output":[{"n":"show","t":"object"},{"n":"seasons","t":"array<object>"},{"n":"next_episode","t":"object"},{"n":"previous_episode","t":"object"},{"n":"timezone","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"tvmaze_lookup_show","server":105,"verb":"lookup","cls":"resolve","resolver":true,"title":"Tvmaze Lookup Show","description":"Resolve a television show from its id in another catalog — IMDb, TheTVDB, or TVRage — and return the matching TVmaze profile. Use this to cross a show id from another source into TVmaze. A show absent from TVmaze is reported as a miss with guidance, not an error.","input":[],"output":[{"n":"found","t":"boolean"},{"n":"show","t":"object"},{"n":"guidance","t":"string"},{"n":"source","t":"enum(3)"},{"n":"external_id","t":"string"},{"n":"error","t":"object"}]},{"name":"tvmaze_get_next_episode","server":105,"verb":"get","cls":"get","resolver":false,"title":"Tvmaze Get Next Episode","description":"Report when a show’s next episode airs, converted to a viewer timezone. Accepts a TVmaze id or a show title — a title is resolved with a stricter single-match search than tvmaze_search_shows uses. A show with no scheduled next episode is reported as a miss carrying its most recent episode, which is the normal state for a series between seasons.","input":[],"output":[{"n":"found","t":"boolean"},{"n":"miss_reason","t":"enum(2)"},{"n":"guidance","t":"string"},{"n":"show","t":"object"},{"n":"next_episode","t":"object"},{"n":"previous_episode","t":"object"},{"n":"timezone","t":"string"},{"n":"error","t":"object"}]},{"name":"tvmaze_get_episodes","server":105,"verb":"get","cls":"get","resolver":false,"title":"Tvmaze Get Episodes","description":"List a show’s episodes with air times, runtimes, and synopses. Pass a season number to list one season, which is the cheaper path and the usual one; pass air_date to list the episodes dated to one day, the direct path to a single night of a daily show; omit both to walk the whole run, which is paged because a long-running series returns hundreds of episodes. Specials are excluded unless include_specials is set, and the number left out is reported.","input":[{"n":"show_id","t":"integer","r":true},{"n":"season","t":"integer"},{"n":"air_date","t":"string"},{"n":"include_specials","t":"boolean"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"},{"n":"timezone","t":"string"}],"output":[{"n":"episodes","t":"array<object>"},{"n":"show","t":"object"},{"n":"season","t":"number"},{"n":"air_date","t":"string"},{"n":"timezone","t":"string"},{"n":"next_cursor","t":"string"},{"n":"has_more","t":"boolean"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"tvmaze_get_schedule","server":105,"verb":"get","cls":"get","resolver":false,"title":"Tvmaze Get Schedule","description":"List television episodes airing on a given date. Scope \"linear\" covers broadcast and cable networks in one country; \"streaming\" covers streaming services — global services such as Netflix and Prime Video when no country is given, or that country’s local streaming services when one is. Scope \"all\" merges both. The source caches schedule data for up to an hour, so a same-day listing can lag a late change.","input":[{"n":"channel","t":"string"},{"n":"date","t":"string"},{"n":"country","t":"string"},{"n":"scope","t":"enum(3)"},{"n":"timezone","t":"string"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"entries","t":"array<object>"},{"n":"date","t":"string"},{"n":"timezone","t":"string"},{"n":"next_cursor","t":"string"},{"n":"has_more","t":"boolean"},{"n":"applied_feeds","t":"array<string>"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"tvmaze_get_cast","server":105,"verb":"get","cls":"get","resolver":false,"title":"Tvmaze Get Cast","description":"List the credited cast of a show with the characters they play, optionally with crew; or list the guest cast of one episode, optionally with its guest crew such as the director and writers. Results are paged: cast rows come first, then crew rows, and each page splits them back into cast and crew. The source records no recurring-versus-guest distinction on a show’s cast list, so a name’s absence from it does not mean the performer never appeared — check an episode’s guest cast for that.","input":[],"output":[{"n":"cast","t":"array<object>"},{"n":"crew","t":"array<object>"},{"n":"cast_total","t":"number"},{"n":"crew_total","t":"number"},{"n":"scope","t":"enum(2)"},{"n":"subject_id","t":"number"},{"n":"next_cursor","t":"string"},{"n":"has_more","t":"boolean"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"tvmaze_get_person","server":105,"verb":"get","cls":"get","resolver":false,"title":"Get person","description":"Search people by name to return candidates, then select a person_id to list their cast, guest, or crew credits. Name searches never select a person automatically. Credits preserve source order and page at 50 rows by default, up to 250 per call; show_id chains to tvmaze_get_show or tvmaze_get_episodes, and guest episode_id chains to tvmaze_get_cast with scope \"episode\".","input":[{"n":"query","t":"string"},{"n":"person_id","t":"integer"},{"n":"credit_kind","t":"enum(3)"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"kind","t":"enum(2)"},{"n":"candidates","t":"array<object>"},{"n":"person","t":"object"},{"n":"credit_kind","t":"enum(3)"},{"n":"credits","t":"array<object>"},{"n":"has_more","t":"boolean"},{"n":"next_cursor","t":"string"},{"n":"effectiveQuery","t":"string"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"uklaw_search_legislation","server":106,"verb":"search","cls":"search","resolver":false,"title":"Search UK legislation","description":"Search the UK statute book on legislation.gov.uk by full text or title, or list legislation by type and year, filtered by geographical extent and point in time. Full-text search ranks by relevance; title searches and type/year listings run newest year first and carry type and year counts (facets) to narrow with. Each result gives the item path to pass to uklaw_get_document. For a known citation or short title, uklaw_lookup_citation is cheaper and exact.","input":[{"n":"text","t":"string"},{"n":"title","t":"string"},{"n":"types","t":"array<enum(39)>"},{"n":"year","t":"integer"},{"n":"year_from","t":"integer"},{"n":"year_to","t":"integer"},{"n":"extent","t":"array<enum(4)>"},{"n":"extent_match","t":"enum(2)"},{"n":"as_of","t":"string"},{"n":"limit","t":"integer"},{"n":"page","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"page","t":"number"},{"n":"limit","t":"number"},{"n":"has_more","t":"boolean"},{"n":"facets","t":"object"},{"n":"scope","t":"object"},{"n":"attribution","t":"array<string>"},{"n":"notice","t":"string"},{"n":"total","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"uklaw_get_document","server":106,"verb":"get","cls":"get","resolver":false,"title":"Read UK legislation text","description":"Read one item or one provision of UK legislation from legislation.gov.uk — as it stands now (revised), as enacted/made, or as it stood on a date — in Markdown, with its editorial status, annotations (the applied amendment history), the unapplied effects touching it, the versions available, and attribution. Provision-level reads are the main path; an item-level read returns the whole text only for small items and otherwise an outline of provision paths to read next. With match_text (item level), returns the provisions whose text matches. Revised text is an editorial consolidation that can lag: read editorial.caveat and unapplied_effects before relying on it, and use uklaw_get_amendments for every recorded effect on an item, applied or not.","input":[{"n":"item","t":"string","r":true},{"n":"provision","t":"string"},{"n":"version","t":"string"},{"n":"language","t":"enum(2)"},{"n":"match_text","t":"string"},{"n":"outline_offset","t":"integer"}],"output":[{"n":"kind","t":"enum(3)"},{"n":"item","t":"object"},{"n":"provision","t":"object"},{"n":"version","t":"object"},{"n":"language","t":"string"},{"n":"editorial","t":"object"},{"n":"text","t":"string"},{"n":"annotations","t":"array<object>"},{"n":"unapplied_effects","t":"array<object>"},{"n":"outline","t":"array<object>"},{"n":"outline_notice","t":"string"},{"n":"links","t":"object"},{"n":"attribution","t":"array<string>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"uklaw_get_amendments","server":106,"verb":"get","cls":"get","resolver":false,"title":"List amendments to or by legislation","description":"List the effects — amendments, repeals, revocations, commencements, modifications — recorded against an item (direction affected) or made by an item (direction affecting), from legislation.gov.uk's changes feeds. Filter by the other item (counterpart), by applied status (unapplied = the outstanding work on the revised text), and by provision. item may be partial (ukpga/2018 = all effects on 2018 Acts). Each effect names both sides with provision links, in-force dates, and why it is not applied. For the applied history of one provision in prose, read its annotations with uklaw_get_document.","input":[{"n":"item","t":"string","r":true},{"n":"direction","t":"enum(2)"},{"n":"counterpart","t":"string"},{"n":"status","t":"enum(3)"},{"n":"provision","t":"string"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"effects","t":"array<object>"},{"n":"query","t":"object"},{"n":"total","t":"number"},{"n":"has_more","t":"boolean"},{"n":"next_cursor","t":"string"},{"n":"scan","t":"object"},{"n":"attribution","t":"array<string>"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"uklaw_track_changes","server":106,"verb":"track","cls":"analyze","resolver":false,"title":"Track legislation.gov.uk publications","description":"Read the legislation.gov.uk Publication Log for a date window of up to 31 days: new items, new revised versions, newly recorded effects, and withdrawals, newest first — the compliance-monitoring view of \"what changed\". Filter by content type, effect direction, category, an item or type/year, first-time items only, or event. With a full item path it reads that item's own log, usually in one call; otherwise it walks the window day by day, newest first, so a broad window may need several calls. A changes event carries no effect detail — uklaw_get_amendments with that item has it. Continue with next_cursor.","input":[{"n":"start_date","t":"string","r":true},{"n":"end_date","t":"string"},{"n":"content_type","t":"enum(4)"},{"n":"direction","t":"enum(2)"},{"n":"category","t":"enum(3)"},{"n":"item","t":"string"},{"n":"new_only","t":"boolean"},{"n":"event","t":"enum(2)"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"events","t":"array<object>"},{"n":"window","t":"object"},{"n":"filters","t":"object"},{"n":"mode","t":"enum(2)"},{"n":"days","t":"array<object>"},{"n":"item_log_total","t":"number"},{"n":"read_back_to","t":"string"},{"n":"has_more","t":"boolean"},{"n":"next_cursor","t":"string"},{"n":"attribution","t":"array<string>"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"uklaw_lookup_citation","server":106,"verb":"lookup","cls":"resolve","resolver":true,"title":"Resolve a legislation citation","description":"Resolve a citation or short title to the canonical legislation.gov.uk item and provision: \"Data Protection Act 2018 s. 45\", \"2018 c. 12\", \"S.I. 2019/419\", \"S.S.I. 2020/123\", \"S.R. 2020/12\", \"2020 asp 13\", \"Regulation (EU) 2016/679 art. 28\", a legislation.gov.uk URI, or a short title. Returns the item path to pass to uklaw_get_document, and when a provision is given, whether it exists in the current version. A miss or an ambiguous title is a result with found false plus guidance or candidates, not an error. To find legislation by topic or by partial title words rather than a known citation, use uklaw_search_legislation.","input":[{"n":"citation","t":"string","r":true}],"output":[{"n":"found","t":"boolean"},{"n":"parsed","t":"object"},{"n":"item","t":"string"},{"n":"id_uri","t":"string"},{"n":"document_uri","t":"string"},{"n":"title","t":"string"},{"n":"title_cy","t":"string"},{"n":"type","t":"string"},{"n":"type_label","t":"string"},{"n":"year","t":"number"},{"n":"number","t":"string"},{"n":"made_date","t":"string"},{"n":"provision_path","t":"string"},{"n":"provision_uri","t":"string"},{"n":"provision_found","t":"boolean"},{"n":"candidates","t":"array<object>"},{"n":"guidance","t":"string"},{"n":"attribution","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"uklaw_list_reference","server":106,"verb":"list","cls":"list","resolver":false,"title":"List legislation reference vocabulary","description":"Decode the vocabulary the other uklaw_* tools take and return: legislation type codes (ukpga, uksi, eur, …) with their labels, categories and enacted keywords; type groups; extents; version keywords; document status; annotation letters (F, C, I, M, E, P, X); effect record fields; provision path forms and shorthand; accepted citation formats; Publication Log vocabulary and read modes; data coverage; and the attribution lines. Offline — no request to legislation.gov.uk.","input":[{"n":"topic","t":"enum(12)","r":true}],"output":[{"n":"topic","t":"enum(12)"},{"n":"entries","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"ukcrime_list_reference","server":107,"verb":"list","cls":"list","resolver":false,"title":"List UK Police Reference Data","description":"Decode the vocabulary the other ukcrime tools take: police force ids, crime category slugs, a force's neighbourhood ids, and data availability — the published months, and which forces published stop and search in each. Use it when a force, category, neighbourhood id or month is unknown; name_contains filters forces and neighbourhoods by name. The Metropolitan Police has about 680 neighbourhoods, so filter by name there; to get the force and neighbourhood covering a latitude and longitude, call ukcrime_find_neighbourhood instead.","input":[{"n":"topic","t":"enum(4)","r":true},{"n":"force","t":"string"},{"n":"name_contains","t":"string"},{"n":"month","t":"string"}],"output":[{"n":"topic","t":"enum(4)"},{"n":"forces","t":"array<object>"},{"n":"categories","t":"array<object>"},{"n":"availability","t":"object"},{"n":"neighbourhoods","t":"array<object>"},{"n":"force","t":"string"},{"n":"attribution","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"ukcrime_search_crimes","server":107,"verb":"search","cls":"search","resolver":false,"title":"Search UK Street-Level Crimes","description":"Search street-level crimes recorded in one month, or with month_from a range of up to 12 months, inside an area — a point with a 1-mile radius, a polygon, a snapped location_id from an earlier result, or a police neighbourhood — or list the crimes a force could not place on the map (area 'force_unplaced'). Returns the total, counts by category and by latest police outcome, the busiest map points, each month's total for a range, and a page of crimes, each with the persistent_id that ukcrime_get_crime_outcomes takes; for what police resolved in a month, whenever the crime was recorded, use ukcrime_search_outcomes. Locations are anonymised map points, not crime sites. data.police.uk can refuse an area holding more than about 10,000 crimes, whatever the category — then search smaller polygons.","input":[{"n":"area","t":"enum(5)","r":true},{"n":"lat","t":"number"},{"n":"lng","t":"number"},{"n":"polygon","t":"array<object>"},{"n":"location_id","t":"string"},{"n":"force","t":"string"},{"n":"neighbourhood_id","t":"string"},{"n":"month","t":"string"},{"n":"month_from","t":"string"},{"n":"category","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"month_from","t":"string"},{"n":"month","t":"string"},{"n":"area","t":"object"},{"n":"category","t":"object"},{"n":"total","t":"number"},{"n":"by_month","t":"array<object>"},{"n":"by_category","t":"array<object>"},{"n":"by_outcome","t":"array<object>"},{"n":"top_locations","t":"array<object>"},{"n":"crimes","t":"array<object>"},{"n":"next_offset","t":"number"},{"n":"attribution","t":"string"},{"n":"data_note","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"ukcrime_search_outcomes","server":107,"verb":"search","cls":"search","resolver":false,"title":"Search UK Police Outcomes","description":"List the police outcomes recorded in one month inside an area — a point with a 1-mile radius, a polygon, a location_id, or a neighbourhood — for crimes recorded that month or any earlier one. Returns the total, counts by crime category, outcome and the month each crime was recorded, and a page of outcomes, each with its crime and persistent_id. Use it for what police resolved in a month; ukcrime_search_crimes gives the latest outcome of the crimes recorded in a month instead. Court results are not published; the result says when a force publishes no outcomes.","input":[{"n":"area","t":"enum(4)","r":true},{"n":"lat","t":"number"},{"n":"lng","t":"number"},{"n":"polygon","t":"array<object>"},{"n":"location_id","t":"string"},{"n":"force","t":"string"},{"n":"neighbourhood_id","t":"string"},{"n":"month","t":"string"},{"n":"category","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"month","t":"string"},{"n":"area","t":"object"},{"n":"category","t":"object"},{"n":"total","t":"number"},{"n":"by_category","t":"array<object>"},{"n":"unfiltered_total","t":"number"},{"n":"by_outcome","t":"array<object>"},{"n":"by_crime_month","t":"array<object>"},{"n":"outcomes","t":"array<object>"},{"n":"next_offset","t":"number"},{"n":"attribution","t":"string"},{"n":"data_note","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"ukcrime_get_crime_outcomes","server":107,"verb":"get","cls":"get","resolver":false,"title":"Get UK Crime Outcome Histories","description":"Fetch the full police outcome history of up to 25 crimes per call by persistent_id — the 64-character id on crimes from ukcrime_search_crimes and ukcrime_search_outcomes. Accepts up to 1,000 raw elements or nonblank delimited tokens and 128,000 aggregate UTF-16 code units; remaining_ids carries unprocessed unique ids for the next call. Returns each crime with every outcome, oldest first, and lists the ids data.police.uk does not hold. Anti-social behaviour records carry no persistent id.","input":[{"n":"persistent_ids","t":"string|array<string>","r":true}],"output":[{"n":"remaining_ids","t":"array<string>"},{"n":"crimes","t":"array<object>"},{"n":"not_found","t":"array<string>"},{"n":"failed","t":"array<object>"},{"n":"guidance","t":"string"},{"n":"attribution","t":"string"},{"n":"data_note","t":"string"},{"n":"error","t":"object"}]},{"name":"ukcrime_search_stops","server":107,"verb":"search","cls":"search","resolver":false,"title":"Search UK Police Stop and Search","description":"Search police stop and search records for one month, or with month_from a range of up to 12 months, inside an area — a point with a 1-mile radius, a polygon, a location_id from an earlier result, or a police neighbourhood — or across a whole force with area 'force', which includes stops the force could not place. Returns the total and counts by search type, self-defined and officer-defined ethnicity, outcome, object of search, legislation, age range, gender, whether the outcome was linked to the object of search, and whether more than outer clothing was removed, each month's total for a range, and a page of stops. filters narrow the counts and the page together, so filtering one field and reading another's breakdown gives a cross-tab. Forces skip months and some publish none; the result names each force it finds for the area that did not publish, with the months it skipped.","input":[{"n":"area","t":"enum(5)","r":true},{"n":"lat","t":"number"},{"n":"lng","t":"number"},{"n":"polygon","t":"array<object>"},{"n":"location_id","t":"string"},{"n":"force","t":"string"},{"n":"neighbourhood_id","t":"string"},{"n":"month","t":"string"},{"n":"month_from","t":"string"},{"n":"filters","t":"array<object>"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"month_from","t":"string"},{"n":"month","t":"string"},{"n":"area","t":"object"},{"n":"filters","t":"array<object>"},{"n":"total","t":"number"},{"n":"unfiltered_total","t":"number"},{"n":"unplaced","t":"number"},{"n":"force_published","t":"boolean"},{"n":"by_month","t":"array<object>"},{"n":"by_type","t":"array<object>"},{"n":"by_self_defined_ethnicity","t":"array<object>"},{"n":"by_officer_defined_ethnicity","t":"array<object>"},{"n":"by_outcome","t":"array<object>"},{"n":"by_object_of_search","t":"array<object>"},{"n":"by_legislation","t":"array<object>"},{"n":"by_age_range","t":"array<object>"},{"n":"by_gender","t":"array<object>"},{"n":"by_outcome_linked_to_object_of_search","t":"array<object>"},{"n":"by_removal_of_more_than_outer_clothing","t":"array<object>"},{"n":"stops","t":"array<object>"},{"n":"next_offset","t":"number"},{"n":"attribution","t":"string"},{"n":"data_note","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"ukcrime_find_neighbourhood","server":107,"verb":"find","cls":"search","resolver":false,"title":"Find UK Police Neighbourhood","description":"Find the police force and neighbourhood policing team for a point, or look one up by force and neighbourhood id. Returns the team's description, contact channels and police stations, its current priorities with the action taken, team members' ranks and names, and upcoming engagement events. include adds the boundary polygon, needed only to split a neighbourhood too large to search into smaller polygons: ukcrime_search_crimes, ukcrime_search_outcomes and ukcrime_search_stops take the neighbourhood directly through area 'neighbourhood'.","input":[{"n":"lat","t":"number"},{"n":"lng","t":"number"},{"n":"force","t":"string"},{"n":"neighbourhood_id","t":"string"},{"n":"include","t":"array<enum(4)>"}],"output":[{"n":"found","t":"boolean"},{"n":"guidance","t":"string"},{"n":"located_from","t":"object"},{"n":"force","t":"object"},{"n":"neighbourhood","t":"object"},{"n":"priorities","t":"array<object>"},{"n":"team","t":"array<object>"},{"n":"events","t":"array<object>"},{"n":"events_total","t":"number"},{"n":"boundary","t":"object"},{"n":"gaps","t":"string"},{"n":"attribution","t":"string"},{"n":"data_note","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"comtrade_lookup_countries","server":108,"verb":"lookup","cls":"get","resolver":false,"title":"Lookup Countries / Areas","description":"Resolve country and area names to Comtrade M49 numeric codes used in all data queries. Accepts a partial name, full name, or ISO alpha-2/alpha-3 code (e.g. \"United States\", \"USA\", \"US\"). Returns matching entries with their numeric code, ISO identifiers, and a validAsReporter flag — regional groupings like \"World\" (code 0) are valid partners but not valid reporters. Use this before any trade data tool that requires reporter_code or partner_code. To aggregate across all partners, use partner code 0 (World) — no lookup needed.","input":[{"n":"query","t":"string","r":true},{"n":"role","t":"enum(3)"},{"n":"include_groups","t":"boolean"}],"output":[{"n":"matches","t":"array<object>"},{"n":"totalMatches","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"comtrade_search_commodities","server":108,"verb":"search","cls":"search","resolver":false,"title":"Search HS Commodity Codes","description":"Find HS commodity codes by keyword, partial description, or known code prefix. Returns matched codes at the requested aggregation level (2-, 4-, or 6-digit) with full descriptions, parent code, leaf status, and a recommended_query_code field indicating the best code level for subsequent trade queries (2-digit chapter for broad analysis, 4- or 6-digit for specific products). This is the critical resolution step — agents cannot derive HS codes from product names without this tool. Use aggr_level 2 to start broad; narrow with aggr_level 4 or 6 once you have a chapter. To get all commodities for an entire chapter, pass the 2-digit code as cmd_code in trade tools.","input":[{"n":"query","t":"string","r":true},{"n":"classification","t":"enum(8)"},{"n":"aggr_level","t":"const"},{"n":"limit","t":"integer"}],"output":[{"n":"matches","t":"array<object>"},{"n":"totalMatches","t":"number"},{"n":"shown","t":"number"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"comtrade_list_service_categories","server":108,"verb":"list","cls":"list","resolver":false,"title":"List Service Trade Categories (EBOPS)","description":"List EBOPS 2010 service trade categories — the equivalent of comtrade_search_commodities for the services domain. Returns category codes, descriptions, and parent codes. Filter by keyword to find a specific service type (e.g. \"transport\", \"financial\", \"travel\"), or browse from a parent category code. Use the returned id as service_code in comtrade_get_services_trade.","input":[{"n":"query","t":"string"},{"n":"parent_code","t":"string"},{"n":"limit","t":"integer"}],"output":[{"n":"categories","t":"array<object>"},{"n":"totalMatches","t":"number"},{"n":"shown","t":"number"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"comtrade_get_trade_flows","server":108,"verb":"get","cls":"get","resolver":false,"title":"Get Trade Flow Records","description":"Fetch bilateral trade flow records — the primary data retrieval tool. Returns trade value in USD (primaryValue — FOB for exports, CIF for imports), quantity, net weight, and period/commodity/partner metadata for each row. Accepts multiple periods and commodity codes per call; pass partner_code 0 to get totals aggregated across all partners. Omit cmd_code or pass \"TOTAL\" to aggregate all commodities. Preview makes one paced request per served period, with a 500-record cap per request. Use comtrade_lookup_countries to resolve reporter/partner codes and comtrade_search_commodities to resolve HS codes. For SITC, supply codes from the selected SITC revision.","input":[{"n":"reporter_code","t":"integer","r":true},{"n":"flow_code","t":"enum(4)","r":true},{"n":"period","t":"array<string>","r":true},{"n":"partner_code","t":"integer"},{"n":"cmd_code","t":"array<string>"},{"n":"classification","t":"enum(13)"},{"n":"freq","t":"enum(2)"}],"output":[{"n":"records","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"shown","t":"number"},{"n":"truncated","t":"boolean"},{"n":"truncationHint","t":"string"},{"n":"unservedPeriods","t":"array<string>"},{"n":"unservedCmdCodes","t":"array<string>"},{"n":"referenceNotice","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"comtrade_get_trade_balance","server":108,"verb":"get","cls":"get","resolver":false,"title":"Get Trade Balance","description":"Compute the trade balance for a country over one or more periods — total exports minus total imports — with optional HS or SITC commodity filter. Preview makes two paced requests per served period; authenticated calls batch periods. Returns the signed balance (USD), export value, import value, and coverage ratio (exports / imports). Note: mirror asymmetry is common — balance reflects values as reported by this country; the same flow may be recorded differently by the partner. Uses comtrade_lookup_countries to resolve reporter codes.","input":[{"n":"reporter_code","t":"integer","r":true},{"n":"period","t":"array<string>","r":true},{"n":"cmd_code","t":"array<string>"},{"n":"classification","t":"enum(13)"},{"n":"freq","t":"enum(2)"}],"output":[{"n":"periods","t":"array<object>"},{"n":"reporterCode","t":"number"},{"n":"reporterDesc","t":"string"},{"n":"cmdCodes","t":"array<string>"},{"n":"mirrorCaveat","t":"string"},{"n":"notice","t":"string"},{"n":"referenceNotice","t":"string"},{"n":"unservedPeriods","t":"array<string>"},{"n":"unservedCmdCodes","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"comtrade_get_top_partners","server":108,"verb":"get","cls":"get","resolver":false,"title":"Get Top Trading Partners","description":"Rank trading partners for a reporter by trade value for a given commodity and flow direction. Returns the top N partners sorted by descending value — answers \"who does country X mainly export product Y to?\" or \"where does country X mainly import product Z from?\" for a single period. Fetches a disaggregated breakdown across all partners then sorts locally. Omit cmd_code to rank partners for total trade.","input":[{"n":"reporter_code","t":"integer","r":true},{"n":"flow_code","t":"enum(2)","r":true},{"n":"period","t":"string","r":true},{"n":"cmd_code","t":"string"},{"n":"limit","t":"integer"}],"output":[{"n":"partners","t":"array<object>"},{"n":"reporterCode","t":"number"},{"n":"reporterDesc","t":"string"},{"n":"period","t":"string"},{"n":"flowCode","t":"string"},{"n":"cmdCode","t":"string"},{"n":"totalPartners","t":"number"},{"n":"totalValueUsd","t":"number"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"comtrade_get_top_commodities","server":108,"verb":"get","cls":"get","resolver":false,"title":"Get Top Trade Commodities","description":"Rank commodity categories for a reporter by trade value for a given flow direction and period. Returns the top N HS chapters (2-digit) or headings (4-digit) sorted by descending value — answers \"what does country X mainly export?\" or \"what does country X mainly import?\". Symmetric counterpart to comtrade_get_top_partners. Optionally filter to a single partner country.","input":[{"n":"reporter_code","t":"integer","r":true},{"n":"flow_code","t":"enum(2)","r":true},{"n":"period","t":"string","r":true},{"n":"aggr_level","t":"const"},{"n":"partner_code","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"commodities","t":"array<object>"},{"n":"reporterCode","t":"number"},{"n":"reporterDesc","t":"string"},{"n":"period","t":"string"},{"n":"flowCode","t":"string"},{"n":"aggrLevel","t":"number"},{"n":"totalCommodities","t":"number"},{"n":"totalValueUsd","t":"number"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"comtrade_get_data_availability","server":108,"verb":"get","cls":"get","resolver":false,"title":"Check Data Availability","description":"Check which reporter/period/classification combinations have published data before constructing expensive trade queries. Returns dataset records with period, classification, record count, and first/latest release dates. Call this before querying recent periods — annual data is typically published 3–12 months after the reference year and not all countries report every year. Omit all parameters to browse the full availability index.","input":[{"n":"reporter_code","t":"integer"},{"n":"period","t":"string"},{"n":"freq","t":"enum(2)"},{"n":"type_code","t":"enum(2)"},{"n":"classification","t":"string"}],"output":[{"n":"datasets","t":"array<object>"},{"n":"totalDatasets","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"comtrade_get_services_trade","server":108,"verb":"get","cls":"get","resolver":false,"title":"Get Services Trade Data","description":"Fetch international trade-in-services data (EBOPS 2010 classification). Same bilateral structure as goods trade: returns flow value in USD, period, and reporter/partner/category metadata for each row. Use comtrade_list_service_categories to find the right service code before querying. Preview makes one paced request per served period, capped at 500 records per request. Services coverage is more limited than goods trade.","input":[{"n":"reporter_code","t":"integer","r":true},{"n":"flow_code","t":"enum(2)","r":true},{"n":"period","t":"array<string>","r":true},{"n":"partner_code","t":"integer"},{"n":"service_code","t":"string"}],"output":[{"n":"records","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"shown","t":"number"},{"n":"truncated","t":"boolean"},{"n":"truncationHint","t":"string"},{"n":"unservedPeriods","t":"array<string>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"unesco_search_sites","server":109,"verb":"search","cls":"search","resolver":false,"title":"Search World Heritage sites","description":"Search the UNESCO World Heritage List by keyword, country, category (Cultural, Natural, Mixed), region, inscription criteria (i)–(x), inscription year range, Danger-list status, transboundary status, or distance from a point. Every keyword must appear at the start of a word in a site's name (any of six languages), description, or statement of Outstanding Universal Value, and name matches rank first. A country is an ISO 3166-1 alpha-2 or alpha-3 code and matches every site it shares, transboundary sites included. Set in_danger to true for the List of World Heritage in Danger; the data records the year of each site's current Danger-list entry but no threat factors. Criterion (vi) is inferred from each site's statement of Outstanding Universal Value and marked as inferred. Results page with next_cursor and carry facet counts over the whole match.","input":[{"n":"query","t":"string"},{"n":"country","t":"string"},{"n":"category","t":"enum(3)"},{"n":"region","t":"enum(5)"},{"n":"criteria","t":"array<enum(10)>"},{"n":"in_danger","t":"boolean"},{"n":"transboundary","t":"boolean"},{"n":"inscribed_from","t":"integer"},{"n":"inscribed_to","t":"integer"},{"n":"near","t":"object"},{"n":"sort","t":"enum(7)"},{"n":"include_description","t":"boolean"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"sites","t":"array<object>"},{"n":"next_cursor","t":"string"},{"n":"descriptions_omitted","t":"const"},{"n":"sources","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"applied_filters","t":"object"},{"n":"facets","t":"object"},{"n":"error","t":"object"}]},{"name":"unesco_get_site","server":109,"verb":"get","cls":"get","resolver":false,"title":"Get World Heritage site","description":"Fetch one World Heritage site's full record by id_no: its description, statement of Outstanding Universal Value, each inscription criterion with its meaning (criterion (vi) marked as inferred), States Parties, coordinates, area, inscription and later years, Danger-list year, component parts, names in six languages, and the main image with its copyright credit. description_language returns UNESCO's French, Spanish, Russian, Arabic, or Chinese description instead of the English one. Intangible heritage UNESCO links to the site is listed by unesco_search_intangible_heritage with world_heritage_site.","input":[{"n":"id_no","t":"string","r":true},{"n":"max_components","t":"integer"},{"n":"description_language","t":"enum(6)"}],"output":[{"n":"id_no","t":"string"},{"n":"name","t":"string"},{"n":"names","t":"object"},{"n":"category","t":"enum(3)"},{"n":"states","t":"array<string>"},{"n":"country_codes","t":"array<string>"},{"n":"region","t":"enum(5)"},{"n":"transboundary","t":"boolean"},{"n":"inscribed_year","t":"number"},{"n":"secondary_years","t":"array<number>"},{"n":"criteria","t":"array<object>"},{"n":"in_danger","t":"boolean"},{"n":"danger_listed_year","t":"number"},{"n":"area_hectares","t":"number"},{"n":"latitude","t":"number"},{"n":"longitude","t":"number"},{"n":"description","t":"string"},{"n":"description_language","t":"enum(6)"},{"n":"justification","t":"string"},{"n":"components","t":"array<object>"},{"n":"components_total","t":"number"},{"n":"components_unparsed","t":"number"},{"n":"image","t":"object"},{"n":"url","t":"string"},{"n":"sources","t":"array<object>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"unesco_search_intangible_heritage","server":109,"verb":"search","cls":"search","resolver":false,"title":"Search intangible heritage","description":"Search UNESCO's Intangible Cultural Heritage lists — the Representative List, the Urgent Safeguarding List, and the Register of Good Safeguarding Practices — by keyword, country, list, inscription year range, multinational status, or linked World Heritage site. Every keyword must appear at the start of a word in an element's English or French name, its UNESCO concept terms, or its description, and name matches rank first. A country is an ISO 3166-1 alpha-2 or alpha-3 code and matches every element it shares, multinational elements included. world_heritage_site takes a site's id_no and lists the elements UNESCO links to it. Rows omit the description; read it with unesco_get_intangible_heritage_element. Results page with next_cursor and carry facet counts over the whole match.","input":[{"n":"query","t":"string"},{"n":"country","t":"string"},{"n":"list","t":"enum(3)"},{"n":"multinational","t":"boolean"},{"n":"world_heritage_site","t":"string"},{"n":"inscribed_from","t":"integer"},{"n":"inscribed_to","t":"integer"},{"n":"sort","t":"enum(4)"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"elements","t":"array<object>"},{"n":"next_cursor","t":"string"},{"n":"sources","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"applied_filters","t":"object"},{"n":"facets","t":"object"},{"n":"error","t":"object"}]},{"name":"unesco_get_intangible_heritage_element","server":109,"verb":"get","cls":"get","resolver":false,"title":"Get intangible heritage element","description":"Fetch one Intangible Cultural Heritage element's full record by ich_ref: its description, the list it is inscribed on, the countries that share it, its inscription year, UNESCO concept terms, the World Heritage sites UNESCO links to it, its UNESCO page, and the main image with its caption and copyright credit. description_language fr returns UNESCO's French description instead of the English one.","input":[{"n":"ich_ref","t":"string","r":true},{"n":"description_language","t":"enum(2)"}],"output":[{"n":"ich_ref","t":"string"},{"n":"name","t":"string"},{"n":"name_fr","t":"string"},{"n":"list","t":"enum(3)"},{"n":"country_codes","t":"array<string>"},{"n":"countries","t":"array<string>"},{"n":"multinational","t":"boolean"},{"n":"inscribed_year","t":"number"},{"n":"description","t":"string"},{"n":"description_language","t":"enum(2)"},{"n":"concepts","t":"array<string>"},{"n":"concepts_secondary","t":"array<string>"},{"n":"world_heritage_sites","t":"array<object>"},{"n":"url","t":"string"},{"n":"image","t":"object"},{"n":"sources","t":"array<object>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"unesco_search_biosphere_reserves","server":109,"verb":"search","cls":"search","resolver":false,"title":"Search biosphere reserves","description":"Search the World Network of Biosphere Reserves (UNESCO Man and the Biosphere Programme) by keyword, country, region, MAB regional network, designation year range, transboundary or Small Island Developing States status, or distance from a point. Every keyword must appear at the start of a word in the reserve's name, introduction, or ecological or socio-economic description; there is no biome or ecosystem field, so an ecosystem search is a keyword search such as mangrove or alpine. A country is an ISO 3166-1 alpha-2 or alpha-3 code. A transboundary reserve appears once per participating country, each with its own mab_id. Results page with next_cursor and carry facet counts over the whole match.","input":[{"n":"query","t":"string"},{"n":"country","t":"string"},{"n":"region","t":"enum(5)"},{"n":"regional_network","t":"enum(7)"},{"n":"transboundary","t":"boolean"},{"n":"sids","t":"boolean"},{"n":"designated_from","t":"integer"},{"n":"designated_to","t":"integer"},{"n":"near","t":"object"},{"n":"sort","t":"enum(6)"},{"n":"include_description","t":"boolean"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"reserves","t":"array<object>"},{"n":"next_cursor","t":"string"},{"n":"sources","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"applied_filters","t":"object"},{"n":"facets","t":"object"},{"n":"error","t":"object"}]},{"name":"unesco_get_biosphere_reserve","server":109,"verb":"get","cls":"get","resolver":false,"title":"Get biosphere reserve","description":"Fetch one biosphere reserve's full record by mab_id: its introduction, ecological and socio-economic characteristics, core, buffer, and transition areas (terrestrial and marine, in hectares) with resident population by zone, designation, extension, renaming, and periodic-review years, coordinates, and its UNESCO page.","input":[{"n":"mab_id","t":"string","r":true}],"output":[{"n":"mab_id","t":"string"},{"n":"name","t":"string"},{"n":"country_code","t":"string"},{"n":"country","t":"string"},{"n":"regions","t":"array<enum(5)>"},{"n":"regional_network","t":"enum(7)"},{"n":"designation_year","t":"number"},{"n":"extension_years","t":"array<number>"},{"n":"renaming_years","t":"array<number>"},{"n":"periodic_review_years","t":"array<number>"},{"n":"transboundary","t":"boolean"},{"n":"sids","t":"boolean"},{"n":"area_hectares","t":"object"},{"n":"population","t":"object"},{"n":"latitude","t":"number"},{"n":"longitude","t":"number"},{"n":"introduction","t":"string"},{"n":"ecological_characteristics","t":"string"},{"n":"socio_economic_characteristics","t":"string"},{"n":"website","t":"string"},{"n":"url","t":"string"},{"n":"sources","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"unesco_search_geoparks","server":109,"verb":"search","cls":"search","resolver":false,"title":"Search UNESCO Global Geoparks","description":"Search UNESCO Global Geoparks by keyword, country, designation year range, transnational status, or distance from a point. Every keyword must appear at the start of a word in the geopark's name, introduction, description, or account of how it sustains local communities, and name matches rank first. A country is an ISO 3166-1 alpha-2 or alpha-3 code and matches every geopark it takes part in, transnational geoparks included. Geoparks UNESCO recognized before the Global Geopark label existed are dated 2015, the year it was created. Results page with next_cursor and carry facet counts over the whole match.","input":[{"n":"query","t":"string"},{"n":"country","t":"string"},{"n":"transnational","t":"boolean"},{"n":"designated_from","t":"integer"},{"n":"designated_to","t":"integer"},{"n":"near","t":"object"},{"n":"sort","t":"enum(6)"},{"n":"include_description","t":"boolean"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"geoparks","t":"array<object>"},{"n":"next_cursor","t":"string"},{"n":"sources","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"applied_filters","t":"object"},{"n":"facets","t":"object"},{"n":"error","t":"object"}]},{"name":"unesco_get_geopark","server":109,"verb":"get","cls":"get","resolver":false,"title":"Get UNESCO Global Geopark","description":"Fetch one UNESCO Global Geopark's full record by ugg_id: its countries, designation year, transnational status, area and resident population as recorded, coordinates, UNESCO's introduction and description, its account of how the geopark sustains local communities, its own website, and its UNESCO page.","input":[{"n":"ugg_id","t":"string","r":true}],"output":[{"n":"ugg_id","t":"string"},{"n":"name","t":"string"},{"n":"country_codes","t":"array<string>"},{"n":"countries","t":"array<string>"},{"n":"transnational","t":"boolean"},{"n":"designation_year","t":"number"},{"n":"area_hectares","t":"number"},{"n":"population","t":"number"},{"n":"latitude","t":"number"},{"n":"longitude","t":"number"},{"n":"introduction","t":"string"},{"n":"description","t":"string"},{"n":"sustaining_local_communities","t":"string"},{"n":"website","t":"string"},{"n":"url","t":"string"},{"n":"sources","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"unesco_list_reference","server":109,"verb":"list","cls":"list","resolver":false,"title":"List UNESCO reference vocabulary","description":"List the vocabulary the other unesco_ tools accept and the coverage of the underlying datasets: the ten inscription criteria with their meanings and site counts, the countries in each dataset with their ISO alpha-2 and alpha-3 codes and record counts, the five UNESCO regions, the three intangible heritage lists, the MAB regional networks, and each dataset's record count, license, and data date. Set filter to narrow a topic to matching entries, for example a country name to find its code.","input":[{"n":"topic","t":"enum(6)","r":true},{"n":"filter","t":"string"}],"output":[{"n":"topic","t":"enum(6)"},{"n":"criteria","t":"array<object>"},{"n":"countries","t":"array<object>"},{"n":"regions","t":"array<object>"},{"n":"intangible_lists","t":"array<object>"},{"n":"biosphere_networks","t":"array<object>"},{"n":"datasets","t":"array<object>"},{"n":"sources","t":"array<object>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"unhcr_list_reference","server":110,"verb":"list","cls":"list","resolver":false,"title":"UNHCR reference vocabulary","description":"Decode the vocabulary the unhcr_* tools take as input: countries (ISO3, ISO2, UNHCR code, names, UNHCR and UN regions), UNHCR’s regional bureaus, each dataset’s first and latest year, population-type definitions, and the asylum authority, stage, decision-level, and unit codes. Filter countries with name_contains to turn a country name into the ISO3 code that origin and asylum take.","input":[{"n":"topic","t":"enum(5)","r":true},{"n":"name_contains","t":"string"}],"output":[{"n":"topic","t":"enum(5)"},{"n":"countries","t":"array<object>"},{"n":"regions","t":"array<object>"},{"n":"coverage","t":"array<object>"},{"n":"nowcast","t":"object"},{"n":"population_types","t":"array<object>"},{"n":"asylum_codes","t":"object"},{"n":"notice","t":"string"},{"n":"totalCount","t":"number"},{"n":"error","t":"object"}]},{"name":"unhcr_get_population","server":110,"verb":"get","cls":"get","resolver":false,"title":"UNHCR displacement stocks","description":"Get UNHCR year-end displacement stocks (1951 to the latest year) by country of origin and/or asylum: refugees, asylum-seekers, other people in need of international protection, IDPs, stateless people, others of concern, and host communities, plus refugees and IDPs who returned during the year. Stocks count people in a situation on 31 December, not arrivals. Palestine refugees under UNRWA's mandate and IDMC's conflict-IDP estimate are separate series shown beside each row. Set include_nowcast for UNHCR's current-year estimate by asylum country; for sex and age breakdowns, use unhcr_get_demographics.","input":[{"n":"origin","t":"string|array<string>"},{"n":"asylum","t":"string|array<string>"},{"n":"expand","t":"enum(4)"},{"n":"year_from","t":"integer"},{"n":"year_to","t":"integer"},{"n":"include_nowcast","t":"boolean"},{"n":"sort_by","t":"enum(10)"},{"n":"limit","t":"integer"},{"n":"stage","t":"boolean"}],"output":[{"n":"rows","t":"array<object>"},{"n":"total_rows","t":"integer"},{"n":"complete","t":"boolean"},{"n":"measure","t":"enum(2)"},{"n":"applied_scope","t":"object"},{"n":"latest_year","t":"integer"},{"n":"dataset","t":"object"},{"n":"data_notes","t":"array<string>"},{"n":"attribution","t":"object"},{"n":"footnotes","t":"array<object>"},{"n":"footnotes_total","t":"integer"},{"n":"nowcast","t":"array<object>"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"unhcr_get_demographics","server":110,"verb":"get","cls":"get","resolver":false,"title":"UNHCR demographics","description":"Get UNHCR year-end stocks (2001 to the latest year) broken down by population type, sex, and age band (0–4, 5–11, 12–17, 18–59, 60+, unknown age), by country of origin and/or asylum. Coverage is partial: each row gives the share of its total that UNHCR could disaggregate by sex, and age bands are null where no breakdown exists. These totals come from a separate collection and need not match unhcr_get_population.","input":[{"n":"origin","t":"string|array<string>"},{"n":"asylum","t":"string|array<string>"},{"n":"expand","t":"enum(4)"},{"n":"year_from","t":"integer"},{"n":"year_to","t":"integer"},{"n":"population_types","t":"array<enum(9)>"},{"n":"sort_by","t":"enum(2)"},{"n":"limit","t":"integer"},{"n":"stage","t":"boolean"}],"output":[{"n":"rows","t":"array<object>"},{"n":"total_rows","t":"integer"},{"n":"complete","t":"boolean"},{"n":"measure","t":"enum(2)"},{"n":"applied_scope","t":"object"},{"n":"latest_year","t":"integer"},{"n":"dataset","t":"object"},{"n":"data_notes","t":"array<string>"},{"n":"attribution","t":"object"},{"n":"footnotes","t":"array<object>"},{"n":"footnotes_total","t":"integer"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"unhcr_get_asylum_applications","server":110,"verb":"get","cls":"get","resolver":false,"title":"UNHCR asylum applications","description":"Get asylum applications lodged per year (2000 to the latest year) by country of origin and/or asylum, split by default into application stage — new, repeat, appeal, and the combined stages some countries report — so new claims are not added to appeals of old ones. Counts given as cases are never added to counts of persons; each row states its unit. Decode stage, authority, and decision-level codes with unhcr_list_reference (topic asylum_codes).","input":[{"n":"origin","t":"string|array<string>"},{"n":"asylum","t":"string|array<string>"},{"n":"expand","t":"enum(4)"},{"n":"year_from","t":"integer"},{"n":"year_to","t":"integer"},{"n":"split_by","t":"array<enum(3)>"},{"n":"stages","t":"array<enum(11)>"},{"n":"sort_by","t":"enum(2)"},{"n":"limit","t":"integer"},{"n":"stage","t":"boolean"}],"output":[{"n":"rows","t":"array<object>"},{"n":"total_rows","t":"integer"},{"n":"complete","t":"boolean"},{"n":"measure","t":"enum(2)"},{"n":"applied_scope","t":"object"},{"n":"latest_year","t":"integer"},{"n":"dataset","t":"object"},{"n":"data_notes","t":"array<string>"},{"n":"attribution","t":"object"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"unhcr_get_asylum_decisions","server":110,"verb":"get","cls":"get","resolver":false,"title":"UNHCR asylum decisions","description":"Get asylum decisions per year (2000 to the latest year) by country of origin and/or asylum: recognized as refugees, complementary protection, rejected, and otherwise closed, with UNHCR's Refugee Recognition Rate and Total Protection Rate computed over substantive decisions (otherwise-closed cases excluded). By default all decision levels are summed and each row lists the levels it includes; appeal-stage decisions can concern people already decided at first instance, so split_by decision_level or filter decision_levels to FI for first-instance rates. Cases and persons are never added together.","input":[{"n":"origin","t":"string|array<string>"},{"n":"asylum","t":"string|array<string>"},{"n":"expand","t":"enum(4)"},{"n":"year_from","t":"integer"},{"n":"year_to","t":"integer"},{"n":"split_by","t":"array<enum(2)>"},{"n":"decision_levels","t":"array<enum(14)>"},{"n":"sort_by","t":"enum(5)"},{"n":"limit","t":"integer"},{"n":"stage","t":"boolean"}],"output":[{"n":"rows","t":"array<object>"},{"n":"total_rows","t":"integer"},{"n":"complete","t":"boolean"},{"n":"measure","t":"enum(2)"},{"n":"applied_scope","t":"object"},{"n":"latest_year","t":"integer"},{"n":"dataset","t":"object"},{"n":"data_notes","t":"array<string>"},{"n":"attribution","t":"object"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"unhcr_get_solutions","server":110,"verb":"get","cls":"get","resolver":false,"title":"UNHCR durable solutions","description":"Get durable solutions per year (1959 to the latest year) by country of origin and/or asylum: refugees who returned home, refugees resettled to a third country, refugees naturalised, and IDPs who returned. The asylum country means something different per column: the country refugees returned from, the country they were resettled to, the country that naturalised them; IDP returns sit on the origin country itself. Null means the figure was not collected for that country and year, not zero.","input":[{"n":"origin","t":"string|array<string>"},{"n":"asylum","t":"string|array<string>"},{"n":"expand","t":"enum(4)"},{"n":"year_from","t":"integer"},{"n":"year_to","t":"integer"},{"n":"sort_by","t":"enum(5)"},{"n":"limit","t":"integer"},{"n":"stage","t":"boolean"}],"output":[{"n":"rows","t":"array<object>"},{"n":"total_rows","t":"integer"},{"n":"complete","t":"boolean"},{"n":"measure","t":"enum(2)"},{"n":"applied_scope","t":"object"},{"n":"latest_year","t":"integer"},{"n":"dataset","t":"object"},{"n":"data_notes","t":"array<string>"},{"n":"attribution","t":"object"},{"n":"footnotes","t":"array<object>"},{"n":"footnotes_total","t":"integer"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"unhcr_dataframe_describe","server":110,"verb":"dataframe","cls":"query","resolver":false,"title":"Describe staged dataframes","description":"Describe a dataframe (df_XXXXX_XXXXX) staged by the unhcr_get_* tools — any response carrying a dataset handle staged its full result here — or list them all where this deployment allows listing. Each entry gives the source tool, query parameters, creation and expiry time, row count, whether the upstream fetch was complete, and the column schema. Read the columns here before writing SQL for unhcr_dataframe_query.","input":[{"n":"name","t":"string"}],"output":[{"n":"dataframes","t":"array<object>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"unhcr_dataframe_query","server":110,"verb":"dataframe","cls":"query","resolver":false,"title":"Query staged dataframes","description":"Run a single-statement SELECT against the dataframes staged by the unhcr_get_* tools. Check a dataframe’s columns with unhcr_dataframe_describe first. Writes, DDL, DROP, COPY, PRAGMA, ATTACH, file references, external-data functions, engine introspection, dynamic table lookup, and system catalogs are rejected; query() accepts only a single SQL string literal, checked by the same gate. Optional register_as saves the result as a new dataframe with a fresh TTL. Recompute rates from summed counts rather than averaging rate columns.","input":[{"n":"sql","t":"string","r":true},{"n":"register_as","t":"string"},{"n":"preview","t":"integer"},{"n":"row_limit","t":"integer"}],"output":[{"n":"complete","t":"boolean"},{"n":"incomplete_sources","t":"array<string>"},{"n":"metadata_withheld","t":"boolean"},{"n":"result_chunks","t":"object"},{"n":"columns","t":"array<string>"},{"n":"row_count","t":"integer"},{"n":"row_count_capped","t":"boolean"},{"n":"rows","t":"array<object>"},{"n":"registered_as","t":"string"},{"n":"expires_at","t":"string"},{"n":"evicted","t":"array<string>"},{"n":"attribution","t":"object"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"error","t":"object"}]},{"name":"uniprot_search_proteins","server":111,"verb":"search","cls":"search","resolver":false,"title":"uniprot-mcp-server: search proteins","description":"Search UniProtKB and return curated protein records. Pass text_search for a plain-language query (the 80% case) or query for the full Lucene field syntax (gene:TP53 AND organism_id:9606 AND reviewed:true) — exactly one is required. Reviewed (Swiss-Prot) entries are manually curated; unreviewed (TrEMBL) are computationally predicted and ~30x more numerous, so reviewed defaults to true to avoid drowning in predictions — set it false to search both tiers together (for TrEMBL only, put reviewed:false in query). The organism_id and reviewed filters apply to the whole query. Request facets (e.g. reviewed, model_organism) for server-side count breakdowns. Results page forward with an opaque cursor; UniProtKB has no offset paging. An inactive accession the query matches (merged, demerged, or deleted) comes back in inactive[] with the accessions that replace it, never as a result. This is the discovery entry point — chain results[].accession into uniprot_get_entry for full records, or uniprot_get_sequence for FASTA.","input":[{"n":"text_search","t":"string"},{"n":"query","t":"string"},{"n":"reviewed","t":"boolean"},{"n":"organism_id","t":"integer"},{"n":"fields","t":"string"},{"n":"facets","t":"string"},{"n":"size","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"results","t":"array<object>"},{"n":"inactive","t":"array<object>"},{"n":"facets","t":"array<object>"},{"n":"totalResults","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"cursor","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"uniprot_get_entry","server":111,"verb":"get","cls":"get","resolver":false,"title":"uniprot-mcp-server: get entry","description":"Fetch full curated UniProtKB entries by accession in one batch (up to 20). Each entry carries function, catalytic activity, cofactors, subcellular location, disease involvement, PTMs, natural variants, isoforms, domains, GO terms, keywords, and cross-references. Partial failures do not abort the batch — resolved entries land in succeeded[] and unknown or inactive (merged, demerged, deleted) accessions in failed[], where an inactive accession names its replacement or UniParc ID. Pass fields to trim the upstream projection. Initial responses exceeding 24,000 UTF-8 bytes across both output surfaces return kind: \"outline\": a single resolved record lists sections with byte sizes; a batch lists outlinedEntries in request order and retains failed[]. Re-call each outlined accession individually, e.g. accessions:[\"P04637\"], for its full record or section outline, then add sections:[\"disease\",\"variants\"] to select sections. sections takes exactly one accession; trim a batch with fields instead. All returned list items and cross-reference IDs render in full. A large list section pages with section_limit/section_offset on a re-call naming that one section. This tool does not search: accessions come from uniprot_search_proteins.results[].accession or uniprot_map_ids. Strip any isoform suffix (P04637-2 to P04637) before calling.","input":[{"n":"accessions","t":"array<string>","r":true},{"n":"fields","t":"string"},{"n":"sections","t":"array<string>"},{"n":"section_limit","t":"integer"},{"n":"section_offset","t":"integer"}],"output":[{"n":"kind","t":"enum(2)"},{"n":"succeeded","t":"array<object>"},{"n":"failed","t":"array<object>"},{"n":"sections","t":"array<object>"},{"n":"outlinedEntries","t":"array<object>"},{"n":"window","t":"object"},{"n":"notice","t":"string"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"nextOffset","t":"number"},{"n":"absentSections","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"uniprot_map_ids","server":111,"verb":"map","cls":"resolve","resolver":true,"title":"uniprot-mcp-server: map IDs","description":"Translate identifiers across databases via UniProt's ID-mapping service — gene names to accessions, accession to PDB / Ensembl / RefSeq / ChEMBL / GeneID, and back. The job runs asynchronously; this tool submits it and polls within a budget. A running job returns status \"running\" with a ticket; pass that ticket alone to poll the same job. A completed call returns status \"finished\" with one results page; when continuation is present, pass it alone to fetch the next completed page without re-submitting or polling the job. A gene name often maps to one reviewed Swiss-Prot accession plus dozens of unreviewed TrEMBL ones, so target UniProtKB-Swiss-Prot (reviewed only) for the usual intent, or UniProtKB to include TrEMBL. Pair a gene-symbol from_db with tax_id to disambiguate species. A row whose UniProtKB target is inactive (merged, demerged, or deleted) carries an inactive marker naming its replacements. Chain the resulting active accessions into uniprot_get_entry.","input":[{"n":"from_db","t":"enum(11)"},{"n":"to_db","t":"enum(12)"},{"n":"ids","t":"array<string>"},{"n":"tax_id","t":"integer"},{"n":"ticket","t":"string"},{"n":"continuation","t":"object"}],"output":[{"n":"status","t":"enum(2)"},{"n":"results","t":"array<object>"},{"n":"ticket","t":"string"},{"n":"continuation","t":"object"},{"n":"mappedCount","t":"number"},{"n":"unmappedIds","t":"array<string>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"uniprot_get_proteome","server":111,"verb":"get","cls":"get","resolver":false,"title":"uniprot-mcp-server: get proteome","description":"Fetch the reference proteome for an organism by UPID (e.g. \"UP000005640\") or NCBI taxon ID (e.g. 9606) — provide exactly one. Returns metadata inline: proteome type, total protein count, BUSCO completeness (score, complete/fragmented/missing counts, lineage dataset), and the genome assembly accession. The protein set is opt-in via include_proteins (it is large — human is ~147,506) and returns a capped page with a forward cursor; narrow it with the query filter (UniProtKB Lucene syntax) for a subset. Resolve an organism name to a taxon ID first with uniprot_get_taxonomy.","input":[{"n":"upid","t":"const|string"},{"n":"taxon_id","t":"integer"},{"n":"include_proteins","t":"boolean"},{"n":"query","t":"string"},{"n":"size","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"proteome","t":"object"},{"n":"proteins","t":"array<object>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"totalProteinsMatched","t":"number"},{"n":"cursor","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"uniprot_get_taxonomy","server":111,"verb":"get","cls":"get","resolver":false,"title":"uniprot-mcp-server: get taxonomy","description":"Resolve a taxonomy record by NCBI taxon ID (e.g. 9606) or scientific name (e.g. \"Homo sapiens\") — provide exactly one. Returns the scientific and common name, mnemonic, rank, parent, and the full lineage. Set include_children to also fetch immediate child taxa (a separate lookup — not inline on the record) in pages of 100 with the total child count; when more remain, pass the returned cursor to fetch the next page. Use this to turn an organism name into the taxon ID that uniprot_search_proteins (organism_id) and uniprot_get_proteome (taxon_id) expect.","input":[{"n":"taxon_id","t":"integer"},{"n":"name","t":"string"},{"n":"include_children","t":"boolean"},{"n":"cursor","t":"string"}],"output":[{"n":"taxon","t":"object"},{"n":"lineage","t":"array<object>"},{"n":"children","t":"array<object>"},{"n":"childCount","t":"number"},{"n":"totalChildren","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"cursor","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"uniprot_get_sequence","server":111,"verb":"get","cls":"get","resolver":false,"title":"uniprot-mcp-server: get sequence","description":"Fetch the canonical amino-acid sequence (FASTA) for a UniProtKB accession, with length and the parsed header. Set include_isoforms to also return the alternatively-spliced isoform sequences. This is the cheap sequence-only path — for the full functional record use uniprot_get_entry. A merged accession returns the sequences of its merge target, labelled with the target accession and the requested one in mergedFrom; a demerged or deleted accession fails not_found naming its replacements or UniParc ID. Accessions come from uniprot_search_proteins or uniprot_map_ids; strip any \"-N\" isoform suffix (P04637-2 to P04637) before calling.","input":[{"n":"accession","t":"string","r":true},{"n":"include_isoforms","t":"boolean"}],"output":[{"n":"accession","t":"string"},{"n":"mergedFrom","t":"string"},{"n":"canonical","t":"object"},{"n":"isoforms","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"drought_list_reference","server":112,"verb":"list","cls":"list","resolver":false,"title":"Look up drought reference data","description":"Look up drought categories, DSCI formulas, metric support, publication coverage and exact geography identifiers. Filter complete families by nameContains before paging. Use state for counties or climate_divisions; huc requires hucLevel 2, 4, 6 or 8 and accepts a shorter parentHuc. Follow nextCursor with the same filters to browse every match.","input":[{"n":"topic","t":"enum(9)","r":true},{"n":"nameContains","t":"string"},{"n":"state","t":"string"},{"n":"hucLevel","t":"const"},{"n":"parentHuc","t":"string"},{"n":"cursor","t":"string"},{"n":"limit","t":"integer"}],"output":[{"n":"topic","t":"enum(9)"},{"n":"records","t":"array<object>"},{"n":"totalCount","t":"integer"},{"n":"nextCursor","t":"string"},{"n":"hasMore","t":"boolean"},{"n":"bundleVersion","t":"string"},{"n":"sourceMetadata","t":"array<object>"},{"n":"provenance","t":"object"},{"n":"notice","t":"string"},{"n":"effectiveLimit","t":"integer"},{"n":"limitNotice","t":"string"},{"n":"error","t":"object"}]},{"name":"drought_get_current_severity","server":112,"verb":"get","cls":"get","resolver":false,"title":"Get a drought severity snapshot","description":"Get current or dated drought severity, cumulative and categorical area percentages, area square miles, supported population counts and experimental upstream DSCI. Resolve identifiers with drought_list_reference. DSCI changes use exactly 4 and 52 weeks earlier; missing observations remain null. US selects both CONUS and Total.","input":[{"n":"area","t":"object","r":true},{"n":"date","t":"string"}],"output":[{"n":"found","t":"boolean"},{"n":"requestedArea","t":"object"},{"n":"resolvedAreas","t":"array<object>"},{"n":"requestedDate","t":"string"},{"n":"effectiveMapDate","t":"string"},{"n":"latestMapDate","t":"string"},{"n":"availableFrom","t":"string"},{"n":"snapshots","t":"array<object>"},{"n":"guidance","t":"string"},{"n":"provenance","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"drought_get_timeseries","server":112,"verb":"get","cls":"get","resolver":false,"title":"Get weekly drought observations","description":"Get weekly drought metrics and experimental DSCI for 1–100 explicit areas sharing one geography type and HUC level. Resolve identifiers with drought_list_reference. Dates select inclusive Tuesday map weeks. Missing values remain null; summaries include every tied peak. Complete large results are staged; use the returned dataframe tools to read every row.","input":[{"n":"areas","t":"array<object>","r":true},{"n":"startDate","t":"string","r":true},{"n":"endDate","t":"string","r":true},{"n":"metric","t":"enum(4)"},{"n":"statisticsType","t":"enum(2)"},{"n":"canvas_id","t":"const|string"}],"output":[{"n":"guidance","t":"string"},{"n":"metadata_pages","t":"object"},{"n":"areas","t":"array<object>"},{"n":"requestedRange","t":"object"},{"n":"effectiveRange","t":"object"},{"n":"latestMapDate","t":"string"},{"n":"metric","t":"enum(4)"},{"n":"statisticsType","t":"enum(2)"},{"n":"unit","t":"string"},{"n":"rows","t":"array<object>"},{"n":"rowCount","t":"integer"},{"n":"missingAreas","t":"array<object>"},{"n":"missingObservations","t":"array<object>"},{"n":"summary","t":"array<object>"},{"n":"staging","t":"object"},{"n":"provenance","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"drought_compare_areas","server":112,"verb":"compare","cls":"analyze","resolver":false,"title":"Compare drought severity across areas","description":"Rank all supported states, or counties within an optional state, on one published map. Omit state for nationwide supported counties. With baselineDate, rank target minus exact baseline; missing sides are excluded explicitly. Equal values share competition rank. limit controls a staged preview, never discards comparable rows.","input":[],"output":[{"n":"scope","t":"enum(2)"},{"n":"state","t":"string"},{"n":"includedStates","t":"array<string>"},{"n":"metric","t":"enum(3)"},{"n":"unit","t":"enum(2)"},{"n":"changeUnit","t":"enum(2)"},{"n":"targetMapDate","t":"string"},{"n":"baselineMapDate","t":"string"},{"n":"rows","t":"array<object>"},{"n":"comparedCount","t":"integer"},{"n":"excludedAreas","t":"array<object>"},{"n":"staging","t":"object"},{"n":"provenance","t":"object"},{"n":"effectiveLimit","t":"integer"},{"n":"limitNotice","t":"string"},{"n":"notice","t":"string"},{"n":"totalCount","t":"integer"},{"n":"error","t":"object"}]},{"name":"drought_get_weeks_in_drought","server":112,"verb":"get","cls":"get","resolver":false,"title":"Get county weeks in drought","description":"Get authoritative consecutive streaks or non-consecutive week counts when any county area meets the selected drought category or worse. Supply states or one county, never both; omitted selectors mean supported nationwide counties. Counts are duration statistics, not program eligibility. Follow nextCursor with unchanged filters within five minutes.","input":[{"n":"startDate","t":"string","r":true},{"n":"endDate","t":"string","r":true},{"n":"minCategory","t":"enum(5)","r":true},{"n":"minWeeks","t":"integer","r":true},{"n":"mode","t":"enum(2)"},{"n":"states","t":"array<string>"},{"n":"county","t":"string"},{"n":"cursor","t":"string"},{"n":"limit","t":"integer"}],"output":[{"n":"guidance","t":"string"},{"n":"mode","t":"enum(2)"},{"n":"minCategory","t":"enum(5)"},{"n":"minWeeks","t":"integer"},{"n":"thresholdRule","t":"const"},{"n":"states","t":"array<string>"},{"n":"county","t":"object"},{"n":"requestedRange","t":"object"},{"n":"effectiveRange","t":"object"},{"n":"latestMapDate","t":"string"},{"n":"rows","t":"array<object>"},{"n":"totalCount","t":"integer"},{"n":"nextCursor","t":"string"},{"n":"hasMore","t":"boolean"},{"n":"provenance","t":"object"},{"n":"notice","t":"string"},{"n":"effectiveLimit","t":"integer"},{"n":"limitNotice","t":"string"},{"n":"error","t":"object"}]},{"name":"drought_dataframe_query","server":112,"verb":"dataframe","cls":"query","resolver":false,"title":"Query staged drought data","description":"Run one DuckDB read expression against staged drought tables, optionally ending with one semicolon. Get canvas_id from drought_get_timeseries or drought_compare_areas and inspect columns with drought_dataframe_describe. For every original row, SELECT * FROM the table ORDER BY row_id and follow next_offset until null. Arbitrary SQL pagination requires your own stable ORDER BY. Exact totals require SELECT COUNT(*).","input":[{"n":"canvas_id","t":"string","r":true},{"n":"sql","t":"string","r":true},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"canvas_id","t":"string"},{"n":"columns","t":"array<string>"},{"n":"rows","t":"array<object>"},{"n":"returnedCount","t":"integer"},{"n":"offset","t":"integer"},{"n":"next_offset","t":"integer"},{"n":"has_more","t":"boolean"},{"n":"countIsExact","t":"boolean"},{"n":"tableMetadata","t":"array<object>"},{"n":"effectiveLimit","t":"integer"},{"n":"limitNotice","t":"string"},{"n":"notice","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"integer"},{"n":"cap","t":"integer"},{"n":"error","t":"object"}]},{"name":"drought_dataframe_describe","server":112,"verb":"dataframe","cls":"query","resolver":false,"title":"Describe staged drought tables","description":"Inspect tables and column types in a canvas_id returned by drought_get_timeseries or drought_compare_areas. Supply table_name for its complete source query, area/date/metric, units, missing-data and provenance metadata. Omit table_name for bounded schema summaries. Tokens are shareable capabilities and expire; this tool never lists other tokens.","input":[{"n":"canvas_id","t":"string","r":true},{"n":"table_name","t":"const|string"},{"n":"metadata_field","t":"enum(4)"},{"n":"metadata_offset","t":"integer"},{"n":"metadata_limit","t":"integer"}],"output":[{"n":"canvas_id","t":"string"},{"n":"expires_at","t":"string"},{"n":"metadata_page","t":"object"},{"n":"tables","t":"array<object>"},{"n":"totalCount","t":"integer"},{"n":"error","t":"object"}]},{"name":"usaspending_list_agencies","server":113,"verb":"list","cls":"list","resolver":false,"title":"List Federal Agencies","description":"List all top-tier federal agencies with toptier codes, agency slugs, budget authority amounts, and obligation totals for the current fiscal year. Use this as the entry point for agency navigation — toptier codes and agency slugs are required inputs for usaspending_get_agency and agency-based filters on spending analysis tools.","input":[{"n":"sort","t":"enum(4)"},{"n":"order","t":"enum(2)"}],"output":[{"n":"results","t":"array<object>"},{"n":"total","t":"number"},{"n":"agency_count","t":"number"},{"n":"error","t":"object"}]},{"name":"usaspending_autocomplete_filters","server":113,"verb":"autocomplete","cls":"search","resolver":false,"title":"Autocomplete Codes and Names","description":"Look up valid code values for filter fields by searching free-text descriptions. Use the type parameter to select the lookup table: naics (NAICS industry codes), psc (product/service codes), cfda (CFDA/Assistance Listing program numbers), awarding_agency (agency and sub-agency names, each with its tier and top-tier parent — the agency_name filters take the top-tier name), or recipient (recipient names with UEI/DUNS). Call this before filtering awards when you know a description but not the exact code. Returns matching codes and names for use in other tool filters.","input":[{"n":"type","t":"enum(5)","r":true},{"n":"search_text","t":"string","r":true},{"n":"limit","t":"integer"}],"output":[{"n":"type","t":"string"},{"n":"search_text","t":"string"},{"n":"results","t":"array<object>"},{"n":"total","t":"number"},{"n":"lookup_type","t":"string"},{"n":"query","t":"string"},{"n":"result_count","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"usaspending_search_awards","server":113,"verb":"search","cls":"search","resolver":false,"title":"Search Federal Awards","description":"Search federal awards by keyword, recipient, agency, award type, NAICS code, assistance listing (CFDA) number, PSC, DEF code, location, or date range. Returns ranked award summaries including recipient names, amounts, awarding agencies, and generated award IDs for use with usaspending_get_award; loan rows carry loan value, subsidy cost, and issue date in place of award amount and dates. Award types: A/B/C/D = contracts, IDV_A–IDV_E = IDVs, 02/03/04/05/F001/F002 = grants, 06/10/F006/F007 = direct payments, 07/08/F003/F004 = loans, 09/11/-1/F005/F008/F009/F010 = other assistance. Dates must be ISO 8601 (YYYY-MM-DD). Earliest data: 2007-10-01 via search API. DoD contracts have a 90-day publication lag.","input":[{"n":"keyword","t":"string"},{"n":"award_type_codes","t":"array<string>"},{"n":"agency_name","t":"string"},{"n":"recipient_name","t":"string"},{"n":"naics_codes","t":"array<string>"},{"n":"assistance_listings","t":"array<string>"},{"n":"psc_codes","t":"array<string>"},{"n":"def_codes","t":"array<string>"},{"n":"time_period","t":"object"},{"n":"location_filter","t":"object"},{"n":"sort","t":"enum(9)"},{"n":"order","t":"enum(2)"},{"n":"limit","t":"integer"},{"n":"page","t":"integer"},{"n":"last_record_sort_value","t":"string"},{"n":"last_record_unique_id","t":"integer"},{"n":"filters","t":"object"}],"output":[{"n":"results","t":"array<object>"},{"n":"page_metadata","t":"object"},{"n":"page","t":"number"},{"n":"has_next","t":"boolean"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"upstream_messages","t":"array<string>"},{"n":"applied_keyword","t":"string"},{"n":"applied_agency_name","t":"string"},{"n":"applied_naics_codes","t":"string"},{"n":"applied_assistance_listings","t":"string"},{"n":"applied_psc_codes","t":"string"},{"n":"applied_def_codes","t":"string"},{"n":"applied_location","t":"string"},{"n":"applied_time_period_start","t":"string"},{"n":"applied_time_period_end","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"usaspending_get_award","server":113,"verb":"get","cls":"get","resolver":false,"title":"Get Award Details","description":"Fetch full details of a federal award by its generated unique award ID. Returns contract or assistance award data including recipient identity (UEI, parent organization, business categories), agency hierarchy, period of performance, place of performance, Assistance Listings with the obligation under each, loan face value and subsidy cost for loans, funding account linkages (account_obligations_by_defc), parent IDV information, and subaward count. Use generated_internal_id values from usaspending_search_awards as input. Recipient and parent recipient hashes can be passed to usaspending_get_recipient; NAICS codes can be used in usaspending_search_awards filters, and Assistance Listing numbers in its assistance_listings filter. For IDV-category awards (category=\"idv\"), use usaspending_get_idv_awards to list the child contracts and task/delivery orders placed under them.","input":[{"n":"award_id","t":"string","r":true}],"output":[{"n":"generated_unique_award_id","t":"string"},{"n":"piid","t":"string"},{"n":"fain","t":"string"},{"n":"type","t":"string"},{"n":"type_description","t":"string"},{"n":"category","t":"string"},{"n":"description","t":"string"},{"n":"total_obligation","t":"number"},{"n":"total_outlays","t":"number"},{"n":"base_and_all_options_value","t":"number"},{"n":"total_loan_value","t":"number"},{"n":"total_subsidy_cost","t":"number"},{"n":"subaward_count","t":"number"},{"n":"date_signed","t":"string"},{"n":"period_of_performance","t":"object"},{"n":"place_of_performance","t":"object"},{"n":"recipient","t":"object"},{"n":"awarding_agency","t":"object"},{"n":"funding_agency","t":"object"},{"n":"parent_award","t":"object"},{"n":"naics","t":"object"},{"n":"product_or_service_code","t":"object"},{"n":"assistance_listings","t":"array<object>"},{"n":"account_obligations_by_defc","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"usaspending_get_award_transactions","server":113,"verb":"get","cls":"get","resolver":false,"title":"Get Award Transactions","description":"List individual transactions (contract modifications, grant amendments) on a federal award. Each transaction represents a change event — obligation modifications, performance period extensions, scope changes, etc. Use this to trace the spending history and obligation changes over the life of an award. Award IDs come from usaspending_search_awards (generated_internal_id field).","input":[{"n":"award_id","t":"string","r":true},{"n":"sort","t":"enum(3)"},{"n":"order","t":"enum(2)"},{"n":"limit","t":"integer"},{"n":"page","t":"integer"}],"output":[{"n":"award_id","t":"string"},{"n":"results","t":"array<object>"},{"n":"page_metadata","t":"object"},{"n":"queried_award_id","t":"string"},{"n":"totalCount","t":"number"},{"n":"current_page","t":"number"},{"n":"has_next_page","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"usaspending_get_award_subawards","server":113,"verb":"get","cls":"get","resolver":false,"title":"Get Award Subawards","description":"List subaward contracts or grants under a prime federal award. Reveals the sub-contractor or sub-grantee layer — the organizations that actually perform the work. Each row shows the subaward number, amount, description, action date, and recipient. Check subaward_count on usaspending_get_award first to confirm subawards exist before calling this tool.","input":[{"n":"award_id","t":"string","r":true},{"n":"sort","t":"enum(5)"},{"n":"order","t":"enum(2)"},{"n":"limit","t":"integer"},{"n":"page","t":"integer"}],"output":[{"n":"award_id","t":"string"},{"n":"results","t":"array<object>"},{"n":"page_metadata","t":"object"},{"n":"prime_award_id","t":"string"},{"n":"totalCount","t":"number"},{"n":"current_page","t":"number"},{"n":"has_next_page","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"usaspending_get_award_federal_accounts","server":113,"verb":"get","cls":"get","resolver":false,"title":"Get Award Federal Accounts","description":"List the Treasury federal accounts that funded an award, with the amount obligated from each and the funding agency behind it. This is the award → appropriation link: each row returns federal_account (AGENCY-MAIN format, e.g. 080-0120) to chain into usaspending_get_federal_account for the account budget detail. The award_id must be a generated_unique_award_id — from usaspending_search_awards (generated_internal_id field) or usaspending_get_award. Distinct from usaspending_get_award account_obligations_by_defc, which breaks funding down by Disaster/Emergency Funding code rather than by account. An award_id that does not exist returns an empty list rather than an error.","input":[{"n":"award_id","t":"string","r":true},{"n":"limit","t":"integer"},{"n":"page","t":"integer"}],"output":[{"n":"award_id","t":"string"},{"n":"results","t":"array<object>"},{"n":"page_metadata","t":"object"},{"n":"totalCount","t":"number"},{"n":"current_page","t":"number"},{"n":"has_next_page","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"usaspending_get_idv_awards","server":113,"verb":"get","cls":"get","resolver":false,"title":"Get IDV Child Awards","description":"List child contracts and task/delivery orders placed under an IDV (Indefinite Delivery Vehicle) award. Each row includes the generated_unique_award_id to chain into usaspending_get_award for full detail. The award_id must be the generated_unique_award_id of the parent IDV — obtainable from usaspending_search_awards (generated_internal_id field) or from usaspending_get_award. IDV category awards returned by usaspending_get_award have child orders accessible via this tool.","input":[{"n":"award_id","t":"string","r":true},{"n":"type","t":"enum(3)"},{"n":"sort","t":"string"},{"n":"order","t":"enum(2)"},{"n":"limit","t":"integer"},{"n":"page","t":"integer"}],"output":[{"n":"award_id","t":"string"},{"n":"results","t":"array<object>"},{"n":"page_metadata","t":"object"},{"n":"parent_award_id","t":"string"},{"n":"current_page","t":"number"},{"n":"has_next_page","t":"boolean"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"usaspending_search_recipients","server":113,"verb":"search","cls":"search","resolver":false,"title":"Search Award Recipients","description":"Search for organizations or individuals receiving federal funds by name, UEI (Unique Entity Identifier), or DUNS. Returns recipient hash IDs, UEI/DUNS identifiers, total award amounts, and hierarchy level. Results are paginated — use page to retrieve matches beyond the first page; page_metadata.total reports the full match count. Recipient hash IDs from this tool can be passed to usaspending_get_recipient for full profiles. Recipient level: P = parent organization, C = child entity, R = standalone.","input":[{"n":"keyword","t":"string","r":true},{"n":"award_type","t":"enum(5)"},{"n":"limit","t":"integer"},{"n":"page","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"page_metadata","t":"object"},{"n":"recipient_count","t":"number"},{"n":"totalCount","t":"number"},{"n":"page","t":"number"},{"n":"has_next","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"usaspending_get_recipient","server":113,"verb":"get","cls":"get","resolver":false,"title":"Get Recipient Profile","description":"Fetch a recipient's full profile including address, business type codes, parent organization, alternate names, and total transaction and loan amounts. Recipient IDs are UUID hashes with a level suffix (-P parent, -C child, -R standalone) from usaspending_search_recipients or usaspending_get_award. Totals cover the trailing 12 months unless fiscal_year selects one fiscal year, and period names the window. For a recipient's totals by award type, use usaspending_spending_over_time with filters.recipient_id and award_type_codes. UEI and DUNS values can be used to cross-reference with SAM.gov and SEC EDGAR.","input":[{"n":"recipient_id","t":"string","r":true},{"n":"fiscal_year","t":"integer"}],"output":[{"n":"name","t":"string"},{"n":"uei","t":"string"},{"n":"duns","t":"string"},{"n":"recipient_id","t":"string"},{"n":"recipient_level","t":"string"},{"n":"parent_name","t":"string"},{"n":"parent_uei","t":"string"},{"n":"business_types","t":"array<string>"},{"n":"location","t":"object"},{"n":"period","t":"string"},{"n":"total_transaction_amount","t":"number"},{"n":"total_transactions","t":"number"},{"n":"total_face_value_loan_amount","t":"number"},{"n":"total_face_value_loan_transactions","t":"number"},{"n":"alternate_names","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"usaspending_get_agency","server":113,"verb":"get","cls":"get","resolver":false,"title":"Get Agency Overview","description":"Fetch an agency's fiscal-year overview including mission, budgetary resources, obligation and outlay totals (for the most recent fiscal year with reported budget data), sub-agency count, and DEF codes for disaster/emergency funding. Also returns a paginated sub-agency breakdown with obligation and transaction counts for the same fiscal year as the budget totals (the current fiscal year when no budget year is available within 5 seconds); sub_agency_fiscal_year names the year it covers. Accepts exactly one of a 3-digit toptier_code (e.g., 097 for DoD, 012 for Agriculture) or an agency_slug (e.g., department-of-defense) — both appear in usaspending_list_agencies results and award search results. When the budget or sub-agency request fails, the overview is still returned and unavailable_sections names each missing section with its reason.","input":[{"n":"toptier_code","t":"string"},{"n":"agency_slug","t":"string"},{"n":"page","t":"integer"}],"output":[{"n":"name","t":"string"},{"n":"abbreviation","t":"string"},{"n":"toptier_code","t":"string"},{"n":"agency_id","t":"number"},{"n":"mission","t":"string"},{"n":"fiscal_year","t":"number"},{"n":"budgetary_resources_amount","t":"number"},{"n":"obligated_amount","t":"number"},{"n":"outlay_amount","t":"number"},{"n":"subtier_agency_count","t":"number"},{"n":"sub_agencies","t":"array<object>"},{"n":"sub_agency_fiscal_year","t":"number"},{"n":"sub_agency_page_metadata","t":"object"},{"n":"def_codes","t":"array<object>"},{"n":"website","t":"string"},{"n":"sub_agency_page","t":"number"},{"n":"has_more_sub_agencies","t":"boolean"},{"n":"sub_agency_total","t":"number"},{"n":"unavailable_sections","t":"array<object>"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"usaspending_spending_by_geography","server":113,"verb":"spending","cls":"query","resolver":false,"title":"Spending by Geography","description":"Aggregate federal spending by state, county, or congressional district. Useful for per-capita analysis, regional comparisons, and mapping federal investment patterns. Filter by keyword, award type, agency, recipient, NAICS code, Assistance Listing, PSC, DEF code, or date range. Areas are ranked by obligation and capped at limit; to retrieve specific areas, including ones ranked past the cap, list their codes in shape_codes — a 2-letter postal code for state, a 5-digit state + county FIPS code for county, or a 4-digit state FIPS + district number for district — NOT place names. Resolve place names to these codes using a geocoding server (Census or OpenStreetMap) first. Chain per-capita results with Census population data for meaningful comparisons.","input":[{"n":"scope","t":"enum(2)","r":true},{"n":"geo_layer","t":"enum(3)","r":true},{"n":"filters","t":"object"},{"n":"limit","t":"integer"},{"n":"shape_codes","t":"array<string>"},{"n":"subawards","t":"boolean"}],"output":[{"n":"scope","t":"string"},{"n":"geo_layer","t":"string"},{"n":"results","t":"array<object>"},{"n":"total","t":"number"},{"n":"total_areas_available","t":"number"},{"n":"applied_scope","t":"string"},{"n":"applied_geo_layer","t":"string"},{"n":"area_count","t":"number"},{"n":"applied_shape_codes","t":"string"},{"n":"applied_keywords","t":"string"},{"n":"applied_agency_name","t":"string"},{"n":"applied_naics_codes","t":"string"},{"n":"applied_assistance_listings","t":"string"},{"n":"applied_psc_codes","t":"string"},{"n":"applied_def_codes","t":"string"},{"n":"applied_time_period_start","t":"string"},{"n":"applied_time_period_end","t":"string"},{"n":"applied_award_type_default","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"truncationCeiling","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"usaspending_spending_by_category","server":113,"verb":"spending","cls":"query","resolver":false,"title":"Spending by Category","description":"Aggregate federal spending grouped by a specific dimension: NAICS industry code, PSC product/service code, awarding agency, funding agency, CFDA assistance program, or recipient. Returns top items with obligation amounts — useful for trend and breakdown analysis. Filter by keyword, award type, agency, recipient, NAICS code, Assistance Listing, PSC, DEF code, or date range. Chain NAICS, PSC, and CFDA codes back into these filters, into usaspending_search_awards filters, or into usaspending_autocomplete_filters lookups. recipient_duns rows carry recipient_id, which opens the recipient profile in usaspending_get_recipient, and uei.","input":[{"n":"category","t":"enum(8)","r":true},{"n":"filters","t":"object"},{"n":"limit","t":"integer"},{"n":"page","t":"integer"}],"output":[{"n":"category","t":"string"},{"n":"results","t":"array<object>"},{"n":"page_metadata","t":"object"},{"n":"totalCount","t":"number"},{"n":"page","t":"number"},{"n":"has_next","t":"boolean"},{"n":"applied_keywords","t":"string"},{"n":"applied_agency_name","t":"string"},{"n":"applied_naics_codes","t":"string"},{"n":"applied_assistance_listings","t":"string"},{"n":"applied_psc_codes","t":"string"},{"n":"applied_def_codes","t":"string"},{"n":"applied_time_period_start","t":"string"},{"n":"applied_time_period_end","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"usaspending_spending_over_time","server":113,"verb":"spending","cls":"query","resolver":false,"title":"Spending Over Time","description":"Fetch aggregated federal obligation amounts grouped by fiscal year, fiscal quarter, or fiscal month. All grouping is relative to the US government fiscal year (Oct–Sep), so fiscal month 1 is October, not January. Filter by award type, agency, recipient, keyword, NAICS code, Assistance Listing, PSC, or DEF code to trace spending trends in a specific area; award types default to contracts. Returns per-period totals and optional breakdowns by award category (contracts, grants, direct payments, IDVs, loans, other).","input":[{"n":"group","t":"enum(3)","r":true},{"n":"filters","t":"object"},{"n":"subawards","t":"boolean"}],"output":[{"n":"group","t":"string"},{"n":"results","t":"array<object>"},{"n":"total_periods","t":"number"},{"n":"time_group","t":"string"},{"n":"period_count","t":"number"},{"n":"applied_keywords","t":"string"},{"n":"applied_agency_name","t":"string"},{"n":"applied_naics_codes","t":"string"},{"n":"applied_assistance_listings","t":"string"},{"n":"applied_psc_codes","t":"string"},{"n":"applied_def_codes","t":"string"},{"n":"applied_time_period_start","t":"string"},{"n":"applied_time_period_end","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"usaspending_disaster_spending","server":113,"verb":"spending","cls":"query","resolver":false,"title":"Disaster and Emergency Spending","description":"Fetch disaster and emergency supplemental spending (COVID-19, hurricanes, infrastructure law, etc.) broken down by agency, CFDA assistance program, recipient, or geography. Use the dimension parameter to select the breakdown axis: overview (top-level totals), agency, cfda, recipient, or geography. Filter by DEF codes (Disaster/Emergency Funding codes) to isolate a specific emergency appropriation. DEF codes appear in usaspending_get_award account_obligations_by_defc and usaspending_get_agency def_codes fields.","input":[{"n":"dimension","t":"enum(5)","r":true},{"n":"spending_type","t":"enum(2)"},{"n":"filters","t":"object"},{"n":"limit","t":"integer"},{"n":"page","t":"integer"}],"output":[{"n":"dimension","t":"string"},{"n":"spending_type","t":"string"},{"n":"overview","t":"object"},{"n":"totals","t":"object"},{"n":"results","t":"array<object>"},{"n":"page_metadata","t":"object"},{"n":"applied_dimension","t":"string"},{"n":"applied_def_codes","t":"string"},{"n":"applied_query","t":"string"},{"n":"totalCount","t":"number"},{"n":"current_page","t":"number"},{"n":"has_next_page","t":"boolean"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"truncationCeiling","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"usaspending_get_federal_account","server":113,"verb":"get","cls":"get","resolver":false,"title":"Get Federal Account","description":"Fetch a federal account's budget data: total obligations, gross outlays, and budgetary resources, plus the per-Treasury-Account-Symbol (TAS) component breakdown in children. Federal accounts connect appropriations law to actual agency spending. Account codes come from usaspending_search_federal_accounts (its account_number output field) or usaspending_get_award_federal_accounts (its federal_account field), and are formatted as AGENCY-MAIN (e.g., 097-0100 for DoD Operation and Maintenance). For obligations broken down by program activity or object class, use usaspending_get_federal_account_breakdown.","input":[{"n":"account_code","t":"string","r":true}],"output":[{"n":"account_title","t":"string"},{"n":"federal_account_code","t":"string"},{"n":"agency_identifier","t":"string"},{"n":"main_account_code","t":"string"},{"n":"parent_agency_name","t":"string"},{"n":"bureau_name","t":"string"},{"n":"total_obligated_amount","t":"number"},{"n":"total_gross_outlay_amount","t":"number"},{"n":"total_budgetary_resources","t":"number"},{"n":"fiscal_year","t":"number"},{"n":"children","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"usaspending_get_federal_account_breakdown","server":113,"verb":"get","cls":"get","resolver":false,"title":"Get Federal Account Breakdown","description":"Fetch a federal account's obligations broken down by program activity (what the money funds) or object class (what it buys — personnel, supplies, contracts). Use the dimension parameter to select the axis. Account codes are AGENCY-MAIN format and come from usaspending_search_federal_accounts (its account_number output field), usaspending_get_award_federal_accounts (its federal_account field), or usaspending_get_federal_account. Paginated with an honest total count. For the account's own metadata and top-level totals, use usaspending_get_federal_account.","input":[{"n":"account_code","t":"string","r":true},{"n":"dimension","t":"enum(2)","r":true},{"n":"limit","t":"integer"},{"n":"page","t":"integer"}],"output":[{"n":"account_code","t":"string"},{"n":"dimension","t":"string"},{"n":"results","t":"array<object>"},{"n":"page_metadata","t":"object"},{"n":"applied_dimension","t":"string"},{"n":"totalCount","t":"number"},{"n":"current_page","t":"number"},{"n":"has_next_page","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"usaspending_search_federal_accounts","server":113,"verb":"search","cls":"search","resolver":false,"title":"Search Federal Accounts","description":"List and keyword-search federal accounts by agency identifier or title keyword. Returns account numbers, names, managing agencies, and budgetary resources. Use account_number from results as input to usaspending_get_federal_account for full budget detail. Use usaspending_list_agencies to look up agency_identifier codes (3-digit strings, e.g. \"097\" for DoD).","input":[{"n":"keyword","t":"string"},{"n":"agency_identifier","t":"string"},{"n":"sort_field","t":"enum(4)"},{"n":"sort_direction","t":"enum(2)"},{"n":"limit","t":"integer"},{"n":"page","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"page_metadata","t":"object"},{"n":"totalCount","t":"number"},{"n":"page","t":"number"},{"n":"has_next","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"usda_list_nutrients","server":114,"verb":"list","cls":"list","resolver":false,"title":"List USDA Nutrients","description":"Look up the FDC nutrient reference table — all tracked nutrients with their numeric IDs, names, SR reference numbers, units, and categories. Use to resolve a nutrient name (e.g. \"vitamin C\") to its FDC ID (1162) before passing it to the nutrients[] filter on other tools. Filter by category (macronutrients, vitamins, minerals, lipids, amino_acids, or other) to narrow results. The data is static — call once and reuse the IDs.","input":[{"n":"category","t":"enum(6)"}],"output":[{"n":"nutrients","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"usda_search_foods","server":114,"verb":"search","cls":"search","resolver":false,"title":"Search USDA Foods","description":"Search USDA FoodData Central foods by keyword. Returns matching foods with FDC IDs and a preview of key nutrients (energy, protein, fat, carbs — not guaranteed complete). Use the returned fdcId with usda_get_food for the full nutrient profile, or usda_compare_foods for side-by-side comparisons. When dataType is omitted, defaults to SR Legacy (common whole foods with complete profiles) — or to Branded when brandOwner is set, since only Branded records carry one. Set dataType to [\"Branded\"] for packaged products, or include a UPC/GTIN code as the query. Pass brandOwner (e.g. \"General Mills\") to narrow branded results.","input":[{"n":"query","t":"string","r":true},{"n":"dataType","t":"array<enum(4)>"},{"n":"brandOwner","t":"string"},{"n":"foodCategory","t":"string"},{"n":"pageSize","t":"integer"},{"n":"pageNumber","t":"integer"}],"output":[{"n":"totalHits","t":"number"},{"n":"currentPage","t":"number"},{"n":"totalPages","t":"number"},{"n":"foods","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"error","t":"object"}]},{"name":"usda_get_food","server":114,"verb":"get","cls":"get","resolver":false,"title":"Get USDA Food","description":"Get the full nutrient profile for one food by FDC ID. Returns all available nutrients (or a filtered subset via the nutrients[] param) with optional per-portion scaling. Use usda_search_foods to discover FDC IDs. Provide quantity + unit to scale all nutrient values from per-100g to the specified portion (e.g. quantity=200, unit=\"g\" → per-200g values). Use unit=\"serving\" to scale to the food's first defined portion weight. Narrow nutrients[] to specific IDs to reduce response size for focused queries.","input":[{"n":"fdcId","t":"integer","r":true},{"n":"nutrients","t":"array<integer>"},{"n":"quantity","t":"number"},{"n":"unit","t":"enum(5)"}],"output":[{"n":"fdcId","t":"number"},{"n":"description","t":"string"},{"n":"dataType","t":"string"},{"n":"foodCategory","t":"string"},{"n":"publicationDate","t":"string"},{"n":"brandOwner","t":"string"},{"n":"brandName","t":"string"},{"n":"ingredients","t":"string"},{"n":"servingInfo","t":"object"},{"n":"allPortions","t":"array<object>"},{"n":"scaledTo","t":"object"},{"n":"nutrients","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"usda_get_foods","server":114,"verb":"get","cls":"get","resolver":false,"title":"Get USDA Foods (Batch)","description":"Fetch nutrient profiles for 2–20 foods in a single API call. More efficient than calling usda_get_food N times when you already have multiple FDC IDs. All values are per 100g (no portion scaling). Use the nutrients[] filter to limit response size — strongly recommended for batch calls. For side-by-side comparison with a formatted table, use usda_compare_foods instead. Failed IDs (not found or no data) are reported in the failed[] array rather than aborting the entire batch.","input":[{"n":"fdcIds","t":"array<integer>","r":true},{"n":"nutrients","t":"array<integer>"}],"output":[{"n":"foods","t":"array<object>"},{"n":"failed","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"usda_compare_foods","server":114,"verb":"compare","cls":"analyze","resolver":false,"title":"Compare USDA Foods","description":"Compare nutrients side-by-side for 2–5 foods. Returns a structured table — one row per nutrient, one column per food — formatted as markdown. Best for \"spinach vs kale iron\" or \"which has more protein?\" questions. Omit nutrients[] to use the 12 most common defaults (energy, protein, fat, saturated fat, carbs, fiber, sugars, sodium, potassium, calcium, iron, vitamin C); provide nutrients[] with specific FDC IDs to compare different nutrients. All values are scaled to the same gram basis (default 100g). If one or more FDC IDs are not found, the comparison proceeds with the valid foods — only throws too_few_foods when fewer than 2 IDs return data.","input":[{"n":"fdcIds","t":"array<integer>","r":true},{"n":"nutrients","t":"array<integer>"},{"n":"quantity","t":"number"},{"n":"unit","t":"enum(4)"}],"output":[{"n":"basis","t":"object"},{"n":"foods","t":"array<object>"},{"n":"nutrients","t":"array<object>"},{"n":"missingData","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"water_list_parameters","server":115,"verb":"list","cls":"list","resolver":false,"title":"Water List Parameters","description":"Look up USGS parameter codes — the 5-digit codes every other tool's parameterCd takes. With no query, lists a curated set of well-known codes with names, units, and thematic group, from a built-in table (no network call): 00060 = \"Discharge\" (ft³/s), 00065 = \"Gage height\" (ft), 00010 = \"Temperature, water\" (°C), 72019 = \"Depth to water level\" (ft), and others; filter it with group. For anything else — turbidity, nitrate, chlorophyll, suspended sediment, salinity — pass query to search the full USGS parameter-code catalog (~19,600 codes) by name and description, or pass a 5-digit code to look it up. A query returns at most 25 entries, matching curated codes first, with total counting every match.","input":[{"n":"group","t":"enum(6)"},{"n":"query","t":"string"}],"output":[{"n":"parameters","t":"array<object>"},{"n":"total","t":"integer"},{"n":"truncated","t":"boolean"},{"n":"query","t":"string"},{"n":"note","t":"string"},{"n":"error","t":"object"}]},{"name":"water_find_sites","server":115,"verb":"find","cls":"search","resolver":false,"title":"Water Find Sites","description":"Find USGS water monitoring sites by bounding box, state, county, or HUC watershed code, filtered by site type and parameter availability. Returns site numbers, names, coordinates, types, altitude, and (in expanded mode) drainage area. Call this first — water_get_readings, water_get_series, and water_get_conditions all require a site number. Supply exactly one major filter — bbox, stateCd, countyCd, or huc; siteType, parameterCd, and hasDataTypeCd only narrow within it and cannot stand alone. Page through matches with limit/offset (500 per page); truncated=true means matches remain after the returned window and upstreamTotal holds the full count. When the match set exceeds 500 and DataCanvas is enabled, the complete set also stages to a canvas (canvas_id/table_name) — inspect it with water_dataframe_describe, then retrieve it with water_dataframe_query.","input":[{"n":"bbox","t":"string"},{"n":"stateCd","t":"string"},{"n":"countyCd","t":"string"},{"n":"huc","t":"string"},{"n":"siteType","t":"string"},{"n":"parameterCd","t":"string"},{"n":"hasDataTypeCd","t":"string"},{"n":"siteOutput","t":"enum(2)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"},{"n":"canvas_id","t":"string"}],"output":[{"n":"sites","t":"array<object>"},{"n":"total","t":"integer"},{"n":"truncated","t":"boolean"},{"n":"upstreamTotal","t":"integer"},{"n":"canvas_id","t":"string"},{"n":"table_name","t":"string"},{"n":"filters","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"water_get_readings","server":115,"verb":"get","cls":"get","resolver":false,"title":"Water Get Readings","description":"Get the latest instantaneous (~15-min, real-time) values for up to 100 USGS sites in one call — per-site, per-parameter records with timestamp, value, unit, and provisional/approved qualifiers. Omitting parameterCd returns every parameter each site publishes. A site measuring one parameter with several sensors returns one series per method, each named by methodId and methodDescription. At most 100 series return per call — every site that returned data keeps at least one, and totalSeries reports how many NWIS returned; pass parameterCd or split the sites across calls to reach the rest. Each series returns only its 10 most recent records (totalValues reports the true count); truncated=true when either cap applied. Use water_get_series for a full date-range series. Sites NWIS returns nothing for are listed in missingSites, not dropped silently. Use water_find_sites first to discover site numbers and available parameters.","input":[{"n":"sites","t":"array<string>","r":true},{"n":"parameterCd","t":"array<string>"},{"n":"period","t":"string"}],"output":[{"n":"readings","t":"array<object>"},{"n":"total","t":"integer"},{"n":"totalSeries","t":"integer"},{"n":"truncated","t":"boolean"},{"n":"missingSites","t":"array<string>"},{"n":"query","t":"object"},{"n":"error","t":"object"}]},{"name":"water_get_series","server":115,"verb":"get","cls":"get","resolver":false,"title":"Water Get Series","description":"Get a daily or instantaneous time series for one USGS site and parameter over a date range, as time-ordered value records. NWIS can hold several series for one query — one per daily statistic (mean, maximum, minimum) and one per sensor (method); this returns one, reporting its statCd and methodId, and lists the rest in otherSeries so any can be re-requested with the statCd and methodId inputs. By default it returns the daily mean when NWIS returns one with values, and the method with the most records. Large sets (>500 records) return the most recent records inline with truncated=true — the last 500 without DataCanvas, and with DataCanvas enabled the complete series also spills to a canvas (canvas_id/table_name): inspect the staged table with water_dataframe_describe, then read the full series with water_dataframe_query. Use water_find_sites and water_list_parameters to resolve inputs.","input":[{"n":"site","t":"string","r":true},{"n":"parameterCd","t":"string","r":true},{"n":"startDate","t":"string","r":true},{"n":"endDate","t":"string","r":true},{"n":"seriesType","t":"enum(2)"},{"n":"statCd","t":"string"},{"n":"methodId","t":"string"},{"n":"canvas_id","t":"string"}],"output":[{"n":"siteNumber","t":"string"},{"n":"siteName","t":"string"},{"n":"parameterCd","t":"string"},{"n":"parameterName","t":"string"},{"n":"unitCode","t":"string"},{"n":"seriesType","t":"enum(2)"},{"n":"statCd","t":"string"},{"n":"statName","t":"string"},{"n":"methodId","t":"string"},{"n":"methodDescription","t":"string"},{"n":"values","t":"array<object>"},{"n":"totalRecords","t":"integer"},{"n":"truncated","t":"boolean"},{"n":"canvas_id","t":"string"},{"n":"table_name","t":"string"},{"n":"otherSeries","t":"array<object>"},{"n":"query","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"water_get_site_data_catalog","server":115,"verb":"get","cls":"get","resolver":false,"title":"Water Get Site Data Catalog","description":"Discover a USGS site’s parameters, sensors, statistics, and UTC record bounds before calling water_get_series. Find site numbers with water_find_sites. Each row is a distinct series; metadata bounds may contain gaps and lag observations. For water_get_series, take YYYY-MM-DD from beginDate/endDate, pass statCd only for daily rows, and obtain methodId from a water_get_series response; timeSeriesId is an OGC identifier, never an NWIS methodId. Rows with null seriesType are other computations and cannot be requested with water_get_series. Follow nextCursor with the same filters and limit until null.","input":[{"n":"site","t":"string","r":true},{"n":"parameterCd","t":"string"},{"n":"seriesType","t":"enum(2)"},{"n":"limit","t":"integer"},{"n":"cursor","t":"string"}],"output":[{"n":"siteNumber","t":"string"},{"n":"siteName","t":"string"},{"n":"series","t":"array<object>"},{"n":"nextCursor","t":"string"},{"n":"error","t":"object"}]},{"name":"water_get_conditions","server":115,"verb":"get","cls":"get","resolver":false,"title":"Water Get Conditions","description":"Get a USGS site's current reading ranked against its full period-of-record daily-mean percentiles for the same calendar day — a \"how unusual is this\" percentileClass (record-high to record-low), not a flood-stage or drought determination (this tool fetches no authoritative thresholds). The reading is instantaneous but the percentiles are daily-mean, so the ranking is approximate (see historicalContext.comparisonBasis). When the record is too short to rank, returns the reading with historicalContext=null instead of an error. A reading NWIS reports as no data (a seasonal, discontinued, dry, or malfunctioning gage) returns an empty currentValue with the qualifiers naming why, and is not ranked. When the site measures the parameter with several sensors (methods), one reading is used and named by methodId/methodDescription — from the sensor its percentile series is described as when one is, otherwise the most recent across them; water_get_readings lists every method. Use water_find_sites and water_list_parameters to resolve inputs.","input":[{"n":"site","t":"string","r":true},{"n":"parameterCd","t":"string","r":true}],"output":[{"n":"siteNumber","t":"string"},{"n":"siteName","t":"string"},{"n":"parameterCd","t":"string"},{"n":"parameterName","t":"string"},{"n":"unitCode","t":"string"},{"n":"methodId","t":"string"},{"n":"methodDescription","t":"string"},{"n":"currentValue","t":"string"},{"n":"currentDateTime","t":"string"},{"n":"qualifiers","t":"array<string>"},{"n":"historicalContext","t":"object"},{"n":"historicalContextStatus","t":"enum(5)"},{"n":"note","t":"string"},{"n":"error","t":"object"}]},{"name":"water_dataframe_query","server":115,"verb":"dataframe","cls":"query","resolver":false,"title":"Water Dataframe Query","description":"Run a read-only SQL SELECT against water data tables staged on a DataCanvas by water_get_series or water_find_sites. Workflow: run water_get_series or water_find_sites (get canvas_id + table_name) → water_dataframe_describe (confirm the table and its columns) → water_dataframe_query (SQL analysis), then optionally water_dataframe_drop (when this server enables it) to remove a table you are done with. Only SELECT statements are permitted. At most 10,000 rows are returned; a query matching more is capped and the response sets truncated=true — scope with WHERE/LIMIT, and use SELECT COUNT(*) or water_dataframe_describe to learn the true match count. Requires DataCanvas to be enabled on this server instance. Returns an error if DataCanvas is not available.","input":[{"n":"canvas_id","t":"string","r":true},{"n":"sql","t":"string","r":true}],"output":[{"n":"rows","t":"array<object>"},{"n":"row_count","t":"integer"},{"n":"truncated","t":"boolean"},{"n":"error","t":"object"}]},{"name":"water_dataframe_describe","server":115,"verb":"dataframe","cls":"query","resolver":false,"title":"Water Dataframe Describe","description":"List tables and columns staged on a DataCanvas by water_get_series or water_find_sites. Call this after water_get_series or water_find_sites returns a canvas_id to discover the exact table name and column types before writing a query. Then pass the table name to water_dataframe_query, or to water_dataframe_drop (when this server enables it) to remove a table you no longer need. Requires DataCanvas to be enabled on this server instance. Returns an error if DataCanvas is not available.","input":[{"n":"canvas_id","t":"string","r":true}],"output":[{"n":"tables","t":"array<object>"},{"n":"canvas_id","t":"string"},{"n":"error","t":"object"}]},{"name":"who_list_dimensions","server":116,"verb":"list","cls":"list","resolver":false,"title":"List GHO Dimension Types","description":"List all dimension type codes and human-readable titles available in the WHO Global Health Observatory API. Use this to discover valid dimension codes before calling who_list_dimension_values. Common dimensions include COUNTRY, REGION, SEX, WORLDBANKINCOMEGROUP, and AGEGROUP, but many additional types exist — this tool exposes them all.","input":[],"output":[{"n":"dimensions","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"who_list_dimension_values","server":116,"verb":"list","cls":"list","resolver":false,"title":"List GHO Dimension Values","description":"List valid codes and labels for a WHO GHO dimension type such as COUNTRY, REGION, SEX, WORLDBANKINCOMEGROUP, or AGEGROUP. Use this to discover valid filter values before calling who_query_indicator_data, or to confirm the correct ISO code for a country. Use who_list_dimensions to discover all available dimension type codes. Results are paged in a deterministic order — narrow hierarchical dimensions with parent_code (e.g. the countries in one WHO region), and page the rest with offset.","input":[{"n":"dimension","t":"string","r":true},{"n":"parent_code","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"dimension","t":"string"},{"n":"values","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"offset","t":"number"},{"n":"hasMore","t":"boolean"},{"n":"pageInfo","t":"string"},{"n":"nextOffset","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"who_search_indicators","server":116,"verb":"search","cls":"search","resolver":false,"title":"Search WHO GHO Indicators","description":"Search the WHO Global Health Observatory indicator catalog by keyword in the indicator name. Returns indicator codes and names for use with who_query_indicator_data. The search uses a substring match on indicator names — try terms like \"life expectancy\", \"immunization\", \"mortality\", \"diabetes\", or \"HIV\". If results are truncated, refine the query or page further into the same filtered result set with offset.","input":[{"n":"query","t":"string","r":true},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"indicators","t":"array<object>"},{"n":"effectiveQuery","t":"string"},{"n":"totalCount","t":"number"},{"n":"offset","t":"number"},{"n":"hasMore","t":"boolean"},{"n":"pageInfo","t":"string"},{"n":"nextOffset","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"who_list_indicators","server":116,"verb":"list","cls":"list","resolver":false,"title":"List WHO GHO Indicators","description":"Browse the WHO Global Health Observatory indicator catalog with pagination. Use when you want to explore indicators without a keyword, or to page through the full catalog. Use who_search_indicators when you have a keyword to narrow the results.","input":[{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"indicators","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"hasMore","t":"boolean"},{"n":"pageInfo","t":"string"},{"n":"error","t":"object"}]},{"name":"who_get_indicator_metadata","server":116,"verb":"get","cls":"get","resolver":false,"title":"Get WHO GHO Indicator Metadata","description":"Fetch metadata for one or more WHO GHO indicator codes: the full indicator name and the dimensions it supports (e.g. COUNTRY, REGION, SEX, YEAR, WORLDBANKINCOMEGROUP, AGEGROUP). Call this before querying data with who_query_indicator_data to confirm which filter dimensions are valid for a given indicator. Accepts up to 10 codes per call. Many valid indicators have no dimension listing upstream — those return an empty dimensions array with a dimensionsNote, not a not-found. Only codes absent from the catalog are reported in the notFound array, and that is reported rather than raised as an error.","input":[{"n":"indicator_codes","t":"array<string>","r":true}],"output":[{"n":"indicators","t":"array<object>"},{"n":"notFound","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"who_query_indicator_data","server":116,"verb":"query","cls":"query","resolver":false,"title":"Query WHO GHO Indicator Data","description":"Query data rows for a single WHO GHO indicator with optional spatial, temporal, and dimension filters. Returns rows with numeric values, uncertainty intervals (Low/High), and spatial/time metadata. This is the primary data-fetching tool in the find-then-query workflow: use who_search_indicators to find the indicator code, optionally call who_get_indicator_metadata to confirm which filter dimensions are valid, then call this tool. Spatial filters are mutually exclusive per call: provide only one of country_codes, region_codes, or income_group_codes — mixing them triggers an error. Omitting all spatial filters returns all geographies (may be large; use limit to cap). The sex filter only applies when the indicator uses SEX as its first cross-cutting dimension — if not, the filter returns empty rows; check who_get_indicator_metadata first if uncertain. Rows are returned in a deterministic order (most recent first by default), so a capped result is the top of a defined slice rather than an arbitrary sample; page through the rest with offset.","input":[{"n":"indicator_code","t":"string","r":true},{"n":"country_codes","t":"array<string>"},{"n":"region_codes","t":"array<string>"},{"n":"income_group_codes","t":"array<string>"},{"n":"year_from","t":"integer"},{"n":"year_to","t":"integer"},{"n":"sex","t":"enum(3)"},{"n":"dim1_value","t":"string"},{"n":"include_uncertainty","t":"boolean"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"},{"n":"sort","t":"enum(2)"}],"output":[{"n":"rows","t":"array<object>"},{"n":"appliedFilters","t":"object"},{"n":"totalRows","t":"number"},{"n":"totalCount","t":"number"},{"n":"truncated","t":"boolean"},{"n":"offset","t":"number"},{"n":"hasMore","t":"boolean"},{"n":"pageInfo","t":"string"},{"n":"nextOffset","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"wikidata_search_entities","server":117,"verb":"search","cls":"search","resolver":false,"title":"Search Wikidata Entities","description":"Search Wikidata for items or properties by text query. Returns QIDs or PIDs with labels, descriptions, and match metadata indicating whether the hit was on a label or alias. Use type=\"item\" for real-world concepts (people, places, works) and type=\"property\" to find predicate P-IDs. The API returns no total count — pagination is offset-based with no result ceiling indicator.","input":[{"n":"query","t":"string","r":true},{"n":"type","t":"enum(2)"},{"n":"language","t":"string"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"effectiveQuery","t":"string"},{"n":"searchType","t":"string"},{"n":"language","t":"string"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"truncated","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"wikidata_get_entity","server":117,"verb":"get","cls":"get","resolver":false,"title":"Get Wikidata Entity","description":"Fetch a Wikidata entity (item or property) by QID or PID. The fields parameter narrows the upstream fetch, not just the response — asking for labels alone costs a fraction of the whole entity, so name the fields you need. Omit fields for all data; a well-connected item is large enough to overflow, and an oversized entity returns kind: \"outline\" — the field categories with their byte sizes — instead of the data. Follow its retrieval_notice literally rather than picking from sections yourself — it names a fields set already measured to fit, since category sizes are additive and requesting them all would overflow again; for a category too large to deliver whole (statements or sitelinks on a major item) it names the sibling tool that can narrow it. Q-IDs (e.g. Q76) fetch items; P-IDs (e.g. P31) fetch properties from the correct endpoint automatically. Use wikidata_get_statements for deep claim traversal with label resolution, and whenever an entity's statements are large — its properties parameter selects individual P-IDs, granularity fields does not carry.","input":[{"n":"id","t":"string","r":true},{"n":"fields","t":"array<enum(5)>"},{"n":"languages","t":"array<string>"}],"output":[{"n":"id","t":"string"},{"n":"type","t":"string"},{"n":"kind","t":"enum(2)"},{"n":"data_type","t":"string"},{"n":"labels","t":"object"},{"n":"descriptions","t":"object"},{"n":"aliases","t":"object"},{"n":"statements","t":"object"},{"n":"sitelinks","t":"object"},{"n":"fieldsReturned","t":"array<string>"},{"n":"sections","t":"array<object>"},{"n":"retrieval_notice","t":"string"},{"n":"error","t":"object"}]},{"name":"wikidata_get_labels","server":117,"verb":"get","cls":"get","resolver":false,"title":"Get Wikidata Labels","description":"Resolve one or more QIDs or PIDs to their human-readable labels and descriptions. Lightweight — returns no claim data. Supports up to 50 IDs per call (batched automatically). Designed for the common agent pattern: receive QIDs from a SPARQL query, then humanize them.","input":[{"n":"ids","t":"array<string>","r":true},{"n":"languages","t":"array<string>"}],"output":[{"n":"entities","t":"object"},{"n":"found","t":"number"},{"n":"notFound","t":"array<string>"},{"n":"languages","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"wikidata_get_statements","server":117,"verb":"get","cls":"get","resolver":false,"title":"Get Wikidata Statements","description":"Fetch property claims for a Wikidata entity with qualifier and reference detail. Item QIDs and quantity units — in values, qualifiers, and references — are resolved to human-readable labels by default. Use the properties parameter to fetch only specific P-IDs — omitting it returns every statement, and a well-connected item (a country, a major city) carries hundreds of properties: more than fits inline. A set over 24,000 bytes before labels comes back as kind: \"outline\" — every available P-ID with its byte size, largest first — instead of the statements; re-call with the same id plus properties:[...] naming P-IDs whose sizes sum to 24,000 or less (the retrieval_notice names one such set). Labels are added after that check, so a returned set can run past 24,000 bytes by their size, and a property requested alone is always returned whole — on a major item one property can run to hundreds of kilobytes. Designed for fact verification: \"what does Wikidata say about this entity's {property}?\". Preferred-rank statements are the most current values.","input":[{"n":"id","t":"string","r":true},{"n":"properties","t":"array<string>"},{"n":"language","t":"string"},{"n":"resolve_labels","t":"boolean"}],"output":[{"n":"id","t":"string"},{"n":"kind","t":"enum(2)"},{"n":"statements","t":"object"},{"n":"sections","t":"array<object>"},{"n":"retrieval_notice","t":"string"},{"n":"propertyCount","t":"number"},{"n":"statementCount","t":"number"},{"n":"labelsResolved","t":"boolean"},{"n":"error","t":"object"}]},{"name":"wikidata_get_sitelinks","server":117,"verb":"get","cls":"get","resolver":false,"title":"Get Wikidata Sitelinks","description":"Fetch Wikipedia and Wikimedia project article URLs for a Wikidata item. A sitelink maps a site code (e.g., \"enwiki\") to a Wikipedia article title and URL. Major items can have 300+ sitelinks across languages. Use sites to filter to specific language editions, or wikis_only to return only Wikipedia links. Only Q-IDs (items) have sitelinks — properties (P-IDs) do not.","input":[{"n":"id","t":"string","r":true},{"n":"sites","t":"array<string>"},{"n":"wikis_only","t":"boolean"}],"output":[{"n":"id","t":"string"},{"n":"sitelinks","t":"object"},{"n":"count","t":"number"},{"n":"message","t":"string"},{"n":"error","t":"object"}]},{"name":"wikidata_sparql_query","server":117,"verb":"sparql","cls":"query","resolver":false,"title":"Wikidata SPARQL Query","description":"Execute a SPARQL SELECT query against the Wikidata Query Service. Full graph power: multi-hop traversals, aggregations, subqueries, OPTIONAL, FILTER, UNION, BIND. Standard Wikidata prefixes (wd:, wdt:, p:, ps:, pq:, wikibase:, bd:, rdfs:, schema:) are auto-injected. The wikibase:label SERVICE is also auto-injected when the query references a ?<var>Label, ?<var>Description, or ?<var>AltLabel variable and declares no label SERVICE of its own — so you can use ?itemLabel without writing the boilerplate. Hard server timeout is 60s; use LIMIT to keep queries fast. Bindings use the SPARQL 1.1 JSON format: each value is { type, value, \"xml:lang\"?, datatype? }. Each response is held to 64,000 bytes, cut between whole rows: a larger result returns its leading rows with returnedCount and totalCount and a notice — page with ORDER BY plus LIMIT/OFFSET, or aggregate in the query. Use wikidata_get_labels to humanize QID results from this tool.","input":[{"n":"query","t":"string","r":true},{"n":"language","t":"string"},{"n":"timeout","t":"integer"}],"output":[{"n":"results","t":"array<object>"},{"n":"variables","t":"array<string>"},{"n":"truncated","t":"boolean"},{"n":"totalCount","t":"number"},{"n":"returnedCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"wikidata_resolve_external_id","server":117,"verb":"resolve","cls":"resolve","resolver":true,"title":"Resolve Wikidata External ID","description":"Look up a Wikidata entity by an external identifier such as a DOI, PubMed ID, ORCID iD, or OpenAlex ID. Returns match=<entity> on success, match=null when not found, and match=null with multipleMatches populated when a Wikidata data integrity issue causes more than one entity to claim the same external ID. Common cross-server join use cases: CrossRef DOI → Wikidata paper QID (P356), PubMed PMID → Wikidata paper QID (P698), ORCID → author QID (P496), OpenAlex ID → entity QID (P10283). The property must be one whose Wikidata data type is external-id — item-valued or media properties (e.g. P31 instance-of, P18 image) are rejected rather than returning an empty match. Known value normalization is applied automatically: surrounding whitespace is trimmed, identifier-resolver URL prefixes are stripped (https://doi.org/, https://pubmed.ncbi.nlm.nih.gov/, https://orcid.org/), DOIs are uppercased, PMID prefixes stripped, ORCID hyphens normalized.","input":[{"n":"property","t":"string","r":true},{"n":"value","t":"string","r":true},{"n":"language","t":"string"}],"output":[{"n":"match","t":"object"},{"n":"property","t":"string"},{"n":"value","t":"string"},{"n":"multipleMatches","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"wikipedia_search_articles","server":118,"verb":"search","cls":"search","resolver":false,"title":"Search Wikipedia","description":"Search Wikipedia articles by full-text query. Returns ranked results with plain-text titles, short descriptions, Wikidata QIDs, snippets (HTML stripped), page IDs, and word counts — the description is usually enough to tell same-named articles apart without a summary call per result. When Wikipedia has a spelling correction for the query, it is returned as suggestion. Best when the exact article title is unknown or when multiple articles on a topic are needed. Pass a result title to wikipedia_get_summary, wikipedia_get_article, or wikipedia_get_sections for follow-up reads. Use offset to page beyond the first result page. Supports all Wikipedia language editions.","input":[{"n":"query","t":"string","r":true},{"n":"sort","t":"enum(5)"},{"n":"limit","t":"integer"},{"n":"offset","t":"integer"},{"n":"language","t":"string"}],"output":[{"n":"results","t":"array<object>"},{"n":"language","t":"string"},{"n":"sort","t":"enum(5)"},{"n":"requestedLimit","t":"integer"},{"n":"appliedLimit","t":"integer"},{"n":"effectiveQuery","t":"string"},{"n":"totalCount","t":"number"},{"n":"offset","t":"integer"},{"n":"shown","t":"integer"},{"n":"nextOffset","t":"integer"},{"n":"truncated","t":"boolean"},{"n":"cap","t":"integer"},{"n":"suggestion","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"wikipedia_get_summary","server":118,"verb":"get","cls":"get","resolver":false,"title":"Get Wikipedia Summary","description":"Fetch the short article summary that answers \"what is X?\". The extract is a truncated fragment from the start of the lead section — usually a sentence or two, and as little as a tenth of the lead — alongside the Wikidata QID (wikibase_item) for cross-referencing with wikidata-mcp-server, a short description, a thumbnail URL, the canonical article URL, the revision the extract was read from, and, for a geotagged article, latitude and longitude that pass straight to wikipedia_search_nearby to answer \"what else is notable near this\". For the lead section in full, call wikipedia_get_article with section_index 0. Redirect pages are followed automatically. When page_type is \"disambiguation\", the title matched a disambiguation page — call wikipedia_search_articles with a more specific query to find the intended article. Prefer this over wikipedia_get_article unless article depth is needed.","input":[{"n":"title","t":"string","r":true},{"n":"language","t":"string"}],"output":[{"n":"title","t":"string"},{"n":"page_type","t":"string"},{"n":"pageid","t":"number"},{"n":"wikibase_item","t":"string"},{"n":"description","t":"string"},{"n":"extract","t":"string"},{"n":"thumbnail_url","t":"string"},{"n":"latitude","t":"number"},{"n":"longitude","t":"number"},{"n":"url","t":"string"},{"n":"revision_id","t":"string"},{"n":"last_modified","t":"string"},{"n":"language","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"wikipedia_get_article","server":118,"verb":"get","cls":"get","resolver":false,"title":"Get Wikipedia Article","description":"Fetch article content as clean plain text. Without section_index: returns the full article with == Section == markers preserved for structure — or, when the article exceeds the size budget, a compact section outline (truncated: true) that points to wikipedia_get_sections plus a section_index read instead of the full text. With section_index (from wikipedia_get_sections): returns that section and every subsection nested under it, each heading above its own body. section_index 0 is the lead section, the text above the first heading, which is the full prose wikipedia_get_summary returns only a truncated fragment of. Section-targeted reads are faster and smaller when only part of the article is needed. Both paths keep superscripts and subscripts apart from the text beside them (10²³, H₂O), render formulas as their TeX, and render code samples as fenced blocks with their indentation intact. A section read also renders data tables as pipe-delimited rows (header row first) and infoboxes as \"label: value\" lines; a table too large to include leaves a \"[table omitted: N rows (table T)]\" marker. Pass table_index: T with section_index to read only that table in complete row pages whose table text fits within 40,000 UTF-8 bytes on both surfaces. Follow next_cursor as cursor with the same inputs to continue at the pinned revision; caption/header/delimiter appear once. An indivisible oversized row or first-page caption/header is returned alone with oversized_row: true. The full-article path carries no data tables or infoboxes, so read the section for those. Phylogenetic clade trees render as fenced, indented branches, with unnamed forks preserved; unparseable trees leave \"[table omitted: unparseable clade]\". Clade trees have no table_index. Tables used only for layout, such as multi-column lists, keep their content as ordinary text. Page furniture is omitted as well — maintenance banners, sister-project and library-resource boxes, portal bars, and spoken-article notices — while a hatnote naming a related article is kept. Every read returns the canonical article URL and the ID of the revision it was read from, for citation; a full read also returns that revision's timestamp. Redirect pages are followed automatically, and the citation fields name the target article.","input":[{"n":"title","t":"string","r":true},{"n":"section_index","t":"integer"},{"n":"table_index","t":"integer"},{"n":"cursor","t":"string"},{"n":"language","t":"string"}],"output":[{"n":"table_index","t":"number"},{"n":"table_count","t":"number"},{"n":"table_rows","t":"number"},{"n":"row_offset","t":"number"},{"n":"rows_returned","t":"number"},{"n":"table_continued","t":"boolean"},{"n":"next_cursor","t":"string"},{"n":"oversized_row","t":"boolean"},{"n":"redirected_from","t":"string"},{"n":"redirect_section","t":"string"},{"n":"title","t":"string"},{"n":"pageid","t":"number"},{"n":"content","t":"string"},{"n":"section_title","t":"string"},{"n":"content_type","t":"string"},{"n":"truncated","t":"boolean"},{"n":"original_length","t":"number"},{"n":"sections_suggested","t":"boolean"},{"n":"url","t":"string"},{"n":"revision_id","t":"string"},{"n":"last_modified","t":"string"},{"n":"language","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"wikipedia_get_sections","server":118,"verb":"get","cls":"get","resolver":false,"title":"Get Wikipedia Article Sections","description":"Fetch the table of contents for a Wikipedia article. Returns section titles, heading levels, section numbering (e.g. \"2.1\"), and section_index values. The first entry is the lead section, index 0, titled Introduction — the text above the first heading, which Wikipedia's own table of contents omits. Pass a section_index to wikipedia_get_article to retrieve just that section. Useful for enumerating article structure before doing a targeted section read. Redirect pages are followed automatically.","input":[{"n":"title","t":"string","r":true},{"n":"language","t":"string"}],"output":[{"n":"redirected_from","t":"string"},{"n":"redirect_section","t":"string"},{"n":"redirect_section_index","t":"integer"},{"n":"title","t":"string"},{"n":"pageid","t":"number"},{"n":"sections","t":"array<object>"},{"n":"total_sections","t":"number"},{"n":"language","t":"string"},{"n":"error","t":"object"}]},{"name":"wikipedia_search_nearby","server":118,"verb":"search","cls":"search","resolver":false,"title":"Search Wikipedia Nearby","description":"Find Wikipedia articles about places near a geographic coordinate. Returns articles sorted by distance from the query point, with titles, short descriptions, Wikidata QIDs, page IDs, coordinates, and distance in meters. Useful for \"what is notable near X?\" research workflows. Only articles carrying their own coordinate tag (GeoData, set on the article itself — not the Wikidata item's coordinate) are returned, and that tag is what places and measures each result; not all articles about locations are geotagged, and an article whose tag is wrong appears where the tag puts it, which its description usually makes plain.","input":[{"n":"latitude","t":"number","r":true},{"n":"longitude","t":"number","r":true},{"n":"radius_meters","t":"integer"},{"n":"limit","t":"integer"},{"n":"language","t":"string"}],"output":[{"n":"results","t":"array<object>"},{"n":"language","t":"string"},{"n":"requestedLimit","t":"integer"},{"n":"appliedLimit","t":"integer"},{"n":"queryLatitude","t":"number"},{"n":"queryLongitude","t":"number"},{"n":"radiusMetersUsed","t":"number"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"wikipedia_get_languages","server":118,"verb":"get","cls":"get","resolver":false,"title":"Get Wikipedia Article Languages","description":"List the language editions available for a Wikipedia article. Returns language codes, article titles in each language, and full URLs. Useful for cross-language research and for discovering the correct article title in a target language before fetching it. A popular article exists in hundreds of editions, so pass editions to narrow the answer to the codes you care about — the codes with no article come back under missing, and total_languages still reports the full count. Redirect pages are followed automatically, and source_title reports the resolved article the links belong to. The language parameter specifies which edition to query from.","input":[{"n":"title","t":"string","r":true},{"n":"language","t":"string"},{"n":"editions","t":"array<string>"}],"output":[{"n":"source_title","t":"string"},{"n":"source_language","t":"string"},{"n":"languages","t":"array<object>"},{"n":"total_languages","t":"number"},{"n":"missing","t":"array<string>"},{"n":"error","t":"object"}]},{"name":"worldbank_list_topics","server":119,"verb":"list","cls":"list","resolver":false,"title":"List World Bank Topics","description":"List all 21 World Bank thematic topics (Economy & Growth, Health, Education, and others) with descriptions. Use it to browse the indicator space by theme or to find a topic_id for worldbank_search_indicators.","input":[],"output":[{"n":"topics","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"worldbank_list_sources","server":119,"verb":"list","cls":"list","resolver":false,"title":"List World Bank Data Sources","description":"List the 70+ World Bank data sources (datasets), such as World Development Indicators, International Debt Statistics, and Doing Business. Returns source IDs and names for use as source_id in worldbank_search_indicators, one page at a time.","input":[{"n":"page","t":"integer"},{"n":"per_page","t":"integer"}],"output":[{"n":"sources","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"currentPage","t":"number"},{"n":"totalPages","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"worldbank_list_countries","server":119,"verb":"list","cls":"list","resolver":false,"title":"List World Bank Countries","description":"List countries and regional aggregates with metadata: ISO codes, region, income level, lending type, capital, and coordinates. Filter by region code (e.g. EAS, SSF, NAC), income level (LIC, LMC, UMC, HIC), and lending type (IDX for IDA, IBD for IBRD, IDB for Blend); filters combine by AND. Aggregate entries are excluded by default, leaving individual countries only; set include_aggregates=true to also return region, income group, and world aggregate entities.","input":[{"n":"region","t":"string"},{"n":"income_level","t":"string"},{"n":"lending_type","t":"const|enum(4)"},{"n":"include_aggregates","t":"boolean"},{"n":"page","t":"integer"},{"n":"per_page","t":"integer"}],"output":[{"n":"countries","t":"array<object>"},{"n":"appliedFilters","t":"object"},{"n":"totalCount","t":"number"},{"n":"currentPage","t":"number"},{"n":"totalPages","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"worldbank_get_country","server":119,"verb":"get","cls":"get","resolver":false,"title":"Get World Bank Country","description":"Fetch metadata for one country or aggregate entity: ISO codes, region, income level, lending type, capital, and coordinates. Accepts an ISO2 code (US, DE), an ISO3 code (USA, DEU), or a World Bank aggregate code (EAS, HIC, WLD); \"all\" and lists of codes are rejected. Use worldbank_list_countries to browse valid codes.","input":[{"n":"country_code","t":"string","r":true}],"output":[{"n":"id","t":"string"},{"n":"iso2","t":"string"},{"n":"name","t":"string"},{"n":"region","t":"object"},{"n":"incomeLevel","t":"object"},{"n":"lendingType","t":"string"},{"n":"capitalCity","t":"string"},{"n":"longitude","t":"string"},{"n":"latitude","t":"string"},{"n":"isAggregate","t":"boolean"},{"n":"error","t":"object"}]},{"name":"worldbank_search_indicators","server":119,"verb":"search","cls":"search","resolver":false,"title":"Search World Bank Indicators","description":"Search the 29,500+ World Bank indicator catalog by keyword, topic, or source, returning indicator IDs and metadata for worldbank_get_data. Provide at least one of query, topic_id, or source_id; a topic and a source together narrow to indicators in both. A keyword query matches every term against indicator ID, name, and full description, in any word order, across the whole catalog or the whole selected topic or source; punctuation is ignored, so the query needs at least one letter or digit. Exact ID or name matches rank first, then names starting with the phrase as whole words, then whole-phrase matches, then matches where every term is a whole word of the ID or name, then other ID/name matches, then description-only matches; within each of those, World Development Indicators series come first, then other live sources, then archives, and a series comes ahead of its own breakdowns by sex, area, or age. Each indicator ID appears once, even where the catalog publishes it under two sources. Each result carries the first 150 characters of its description; worldbank_get_indicator returns the whole of it. Find topic IDs with worldbank_list_topics and source IDs with worldbank_list_sources.","input":[{"n":"query","t":"string"},{"n":"topic_id","t":"string"},{"n":"source_id","t":"string"},{"n":"page","t":"integer"},{"n":"per_page","t":"integer"}],"output":[{"n":"indicators","t":"array<object>"},{"n":"appliedFilters","t":"object"},{"n":"effectiveQuery","t":"string"},{"n":"totalCount","t":"number"},{"n":"currentPage","t":"number"},{"n":"totalPages","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"worldbank_get_indicator","server":119,"verb":"get","cls":"get","resolver":false,"title":"Get World Bank Indicator","description":"Fetch metadata for one World Bank indicator by ID: name, description, unit, source dataset, source organization, and thematic topics. Use worldbank_search_indicators to find the ID when only the concept is known; \"all\" and lists of IDs are rejected.","input":[{"n":"indicator_id","t":"string","r":true}],"output":[{"n":"id","t":"string"},{"n":"name","t":"string"},{"n":"unit","t":"string"},{"n":"sourceId","t":"string"},{"n":"sourceName","t":"string"},{"n":"sourceNote","t":"string"},{"n":"sourceOrganization","t":"string"},{"n":"topics","t":"array<object>"},{"n":"error","t":"object"}]},{"name":"worldbank_get_data","server":119,"verb":"get","cls":"get","resolver":false,"title":"Get World Bank Indicator Data","description":"Query World Bank indicator values for one or more countries across a time range — the primary data-access tool; find indicator_id values with worldbank_search_indicators. Observations carry a null value where data is not available for a country×year cell, which is common for sparse series. Set at most one of date_range (a time window), mrv (the latest N periods across the requested countries), or mrnev (each country's own latest N values). Some series, such as Global Economic Monitor's, publish quarterly or monthly values beside annual ones: frequency picks the form mrv and mrnev select from (annual by default), and a date_range's own form (2024, 2024Q1, 2024M01) picks it for a window. lastUpdated gives the serving source's last update date, the data vintage to cite. For \"all\" countries, page through the results at up to 200 per page, since the API returns several hundred entries per indicator. Indicators the standard data endpoint does not serve — WDI Database Archives, PEFA, ICP, GDLD, International Debt Statistics: DSSI, Food Prices for Nutrition — are answered from their own dataset instead; the response then carries sourceScoped, naming that dataset and the release, classification, sector, or counterpart area applied (see dimension_value), because those values can be archived or superseded figures rather than current ones.","input":[{"n":"indicator_id","t":"string","r":true},{"n":"countries","t":"string|array<string>","r":true},{"n":"date_range","t":"string"},{"n":"mrv","t":"integer"},{"n":"mrnev","t":"integer"},{"n":"frequency","t":"const|enum(3)"},{"n":"dimension_value","t":"string"},{"n":"page","t":"integer"},{"n":"per_page","t":"integer"}],"output":[{"n":"data","t":"array<object>"},{"n":"sourceScoped","t":"object"},{"n":"indicator","t":"object"},{"n":"nullCount","t":"number"},{"n":"appliedFilters","t":"object"},{"n":"totalCount","t":"number"},{"n":"currentPage","t":"number"},{"n":"totalPages","t":"number"},{"n":"lastUpdated","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"worldbank_get_poverty","server":119,"verb":"get","cls":"get","resolver":false,"title":"Get World Bank Poverty and Inequality Estimates","description":"Query poverty and inequality estimates from the World Bank Poverty and Inequality Platform (PIP) for economies and for PIP's own aggregates — World, World Bank regions, income groups, lending groups, and fragility groups. Returns the poverty headcount ratio, poverty gap, and poverty severity at any poverty line, plus mean and median welfare and population. Use it for inequality and distribution questions too — survey-based economy rows carry the Gini coefficient, mean log deviation, polarization, and the ten decile income/consumption shares, because PIP returns poverty and inequality in the same row. PIP is a separate dataset from the WDI series worldbank_get_data reads: it measures welfare in PPP dollars per person per day, at a PPP vintage ppp_version selects, and computes its aggregates at any poverty line, where worldbank_get_data carries only the published lines. Every row reports how it was produced. On an economy, estimationType \"survey\" rows carry the full inequality block; \"interpolation\", \"extrapolation\", and \"CMD estimation\" rows are gap-filled estimates for years no survey covers, and their gini, mld, polarization, and decileShares are null — a documented gap in the source data, not an error. Aggregate rows (isAggregate true) are \"actual\", \"nowcast\", or \"projection\", add popInPoverty, and carry no distributional block.","input":[{"n":"countries","t":"string|array<string>","r":true},{"n":"year","t":"string"},{"n":"poverty_line","t":"number"},{"n":"welfare_type","t":"const|enum(2)"},{"n":"reporting_level","t":"const|enum(3)"},{"n":"ppp_version","t":"const|string"},{"n":"fill_gaps","t":"boolean"},{"n":"page","t":"integer"},{"n":"per_page","t":"integer"}],"output":[{"n":"estimates","t":"array<object>"},{"n":"appliedFilters","t":"object"},{"n":"totalCount","t":"number"},{"n":"currentPage","t":"number"},{"n":"totalPages","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"worldbank_search_projects","server":119,"verb":"search","cls":"search","resolver":false,"title":"Search World Bank Projects","description":"Search the World Bank lending portfolio — the individual loans, credits, and grants the Bank finances — by free text, country, region, status, financing window (IBRD, IDA, Grants, Other), and board approval date. Returns the project ID, name, borrowing country, region, status, board approval and closing dates, the commitment amount in USD with its IBRD, IDA, and grant parts, financing windows, major sectors, and a link to the project page. This is the operations catalogue, not the statistics catalogue: use it for \"what is the World Bank funding in Kenya\", \"which climate adaptation projects are active\", or \"how much was committed to education in South Asia since 2020\". For development statistics and time series, use worldbank_search_indicators and worldbank_get_data instead. Countries take the ISO3 or ISO2 codes the other tools take (BRA or BR), and multi-country operations carry a World Bank regional code such as 3A; WDI aggregates such as SSF or WLD are rejected, since the portfolio lists operations by economy — use region for those. Every filter is an exact match upstream and combines with the others by AND, so a narrow search can legitimately return nothing; when it does, the response says whether the country codes matched anything on their own.","input":[{"n":"query","t":"string"},{"n":"countries","t":"string|array<string>"},{"n":"status","t":"array<enum(4)>"},{"n":"region","t":"array<enum(9)>"},{"n":"financial_type","t":"array<enum(4)>"},{"n":"approved_from","t":"const|string"},{"n":"approved_to","t":"const|string"},{"n":"include_abstract","t":"boolean"},{"n":"page","t":"integer"},{"n":"per_page","t":"integer"}],"output":[{"n":"projects","t":"array<object>"},{"n":"appliedFilters","t":"object"},{"n":"totalCount","t":"number"},{"n":"currentPage","t":"number"},{"n":"totalPages","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"worms_list_reference","server":120,"verb":"list","cls":"list","resolver":false,"title":"Worms List Reference","description":"List supported external identifier systems, a non-exhaustive taxonomic-status guide grouped as accepted, unaccepted, uncertain, or technical, environment-flag semantics, observed worms_get_distributions filter values, live taxonomic ranks, or live trait definitions. Resume nextResultOffset as resultOffset with the same topic. Identifier codes, statuses, environment flags, and distribution terms are available offline. A record status can be the specific reason itself, such as junior subjective synonym, rather than unaccepted. IUCN identifiers are not threat categories; null flags mean not recorded. Trait definitions retain complete-tree preorder indices across pages; parents may be on earlier pages.","input":[{"n":"resultOffset","t":"integer"},{"n":"topic","t":"enum(6)","r":true}],"output":[{"n":"resultOffset","t":"integer"},{"n":"returnedCount","t":"integer"},{"n":"totalCount","t":"integer"},{"n":"nextResultOffset","t":"integer"},{"n":"byteBudget","t":"const"},{"n":"budgetLimited","t":"boolean"},{"n":"oversizedItem","t":"boolean"},{"n":"requiredBytes","t":"integer"},{"n":"topic","t":"enum(6)"},{"n":"entries","t":"array<object>"},{"n":"attribution","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"worms_resolve_taxon","server":120,"verb":"resolve","cls":"resolve","resolver":true,"title":"Worms Resolve Taxon","description":"Resolve exact or explicitly fuzzy scientific names, or search one vernacular name as a whole recorded common name or, with vernacularMatch: \"contains\", as part of one. Names default to marine and extant taxa; vernacular cannot filter. Resume scientific segments with nextInputOffset and nextMatchOffset against unchanged names and options; inputIndex preserves duplicates and partialGroup identifies split groups. For vernacular, consume nextResultOffset within the same upstream offset before advancing page.nextOffset and resetting resultOffset to zero. Full 50-match upstream groups remain completeness-unknown; accepted-name fields do not choose an ambiguous match.","input":[{"n":"inputOffset","t":"integer"},{"n":"matchOffset","t":"integer"},{"n":"resultOffset","t":"integer"},{"n":"names","t":"array<string>"},{"n":"vernacular","t":"string"},{"n":"vernacularMatch","t":"enum(2)"},{"n":"fuzzy","t":"boolean"},{"n":"marineOnly","t":"boolean"},{"n":"extantOnly","t":"boolean"},{"n":"offset","t":"integer"}],"output":[{"n":"byteBudget","t":"const"},{"n":"budgetLimited","t":"boolean"},{"n":"oversizedItem","t":"boolean"},{"n":"requiredBytes","t":"integer"},{"n":"nextInputOffset","t":"integer"},{"n":"nextMatchOffset","t":"integer"},{"n":"deferredCount","t":"integer"},{"n":"resultOffset","t":"integer"},{"n":"returnedCount","t":"integer"},{"n":"totalCount","t":"integer"},{"n":"nextResultOffset","t":"integer"},{"n":"mode","t":"enum(3)"},{"n":"results","t":"array<object>"},{"n":"page","t":"object"},{"n":"attribution","t":"object"},{"n":"notice","t":"string"},{"n":"echo","t":"object"},{"n":"error","t":"object"}]},{"name":"worms_get_taxon","server":120,"verb":"get","cls":"get","resolver":false,"title":"Worms Get Taxon","description":"Retrieve full Aphia records by IDs from worms_resolve_taxon in byte-budgeted segments. Resume nextInputOffset as inputOffset using unchanged aphiaIds and options; inputIndex preserves duplicate and missing positions. includeVernaculars (common names) or includeSources (original description, basis of record, and other sources) requires one submitted ID, one of the two per call; resume nextVernacularOffset as vernacularOffset or nextSourceOffset as sourceOffset, repeating the full primary record. Optional failure retains that record; unknown facts remain omitted or null.","input":[{"n":"inputOffset","t":"integer"},{"n":"vernacularOffset","t":"integer"},{"n":"sourceOffset","t":"integer"},{"n":"aphiaIds","t":"array<integer>","r":true},{"n":"includeVernaculars","t":"boolean"},{"n":"includeSources","t":"boolean"}],"output":[{"n":"byteBudget","t":"const"},{"n":"budgetLimited","t":"boolean"},{"n":"oversizedItem","t":"boolean"},{"n":"requiredBytes","t":"integer"},{"n":"nextInputOffset","t":"integer"},{"n":"deferredCount","t":"integer"},{"n":"nextVernacularOffset","t":"integer"},{"n":"nextSourceOffset","t":"integer"},{"n":"results","t":"array<object>"},{"n":"attribution","t":"object"},{"n":"notice","t":"string"},{"n":"echo","t":"object"},{"n":"error","t":"object"}]},{"name":"worms_get_classification","server":120,"verb":"get","cls":"get","resolver":false,"title":"Worms Get Classification","description":"Retrieve root-to-tip classification and optional direct children for an AphiaID from worms_resolve_taxon. resultOffset indexes lineage followed by fetched children; consume nextResultOffset with unchanged options and upstream offset before advancing page.nextOffset and resetting resultOffset to zero. Missing ranks remain unknown; child offset and filters are inactive without includeChildren. A full fetched 50-row child page has uncertain continuation and can lead to an empty page. An AphiaID that is not the accepted name keeps its own recorded lineage, and a notice names the accepted AphiaID.","input":[{"n":"resultOffset","t":"integer"},{"n":"aphiaId","t":"integer","r":true},{"n":"includeChildren","t":"boolean"},{"n":"offset","t":"integer"},{"n":"marineOnly","t":"boolean"},{"n":"extantOnly","t":"boolean"}],"output":[{"n":"resultOffset","t":"integer"},{"n":"returnedCount","t":"integer"},{"n":"totalCount","t":"integer"},{"n":"nextResultOffset","t":"integer"},{"n":"byteBudget","t":"const"},{"n":"budgetLimited","t":"boolean"},{"n":"oversizedItem","t":"boolean"},{"n":"requiredBytes","t":"integer"},{"n":"aphiaId","t":"integer"},{"n":"found","t":"boolean"},{"n":"ranks","t":"array<object>"},{"n":"children","t":"array<object>"},{"n":"page","t":"object"},{"n":"childrenError","t":"object"},{"n":"statusError","t":"object"},{"n":"guidance","t":"string"},{"n":"attribution","t":"object"},{"n":"notice","t":"string"},{"n":"echo","t":"object"},{"n":"error","t":"object"}]},{"name":"worms_get_synonyms","server":120,"verb":"get","cls":"get","resolver":false,"title":"Worms Get Synonyms","description":"Retrieve synonyms for the accepted taxon linked from an AphiaID obtained with worms_resolve_taxon. Consume nextResultOffset within the same upstream offset before advancing page.nextOffset and resetting resultOffset to zero. A present name without an accepted ID has no synonym lookup; inspect it with worms_get_taxon. A full fetched 50-row page has uncertain continuation and may lead to an empty page.","input":[{"n":"aphiaId","t":"integer","r":true},{"n":"offset","t":"integer"},{"n":"resultOffset","t":"integer"}],"output":[{"n":"resultOffset","t":"integer"},{"n":"returnedCount","t":"integer"},{"n":"totalCount","t":"integer"},{"n":"nextResultOffset","t":"integer"},{"n":"byteBudget","t":"const"},{"n":"budgetLimited","t":"boolean"},{"n":"oversizedItem","t":"boolean"},{"n":"requiredBytes","t":"integer"},{"n":"aphiaId","t":"integer"},{"n":"found","t":"boolean"},{"n":"validAphiaId","t":"integer"},{"n":"synonyms","t":"array<object>"},{"n":"page","t":"object"},{"n":"guidance","t":"string"},{"n":"attribution","t":"object"},{"n":"echo","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"worms_get_distributions","server":120,"verb":"get","cls":"get","resolver":false,"title":"Worms Get Distributions","description":"Retrieve recorded distributions for an AphiaID from worms_resolve_taxon in byte-budgeted segments; resume nextResultOffset as resultOffset with unchanged selectors and filters. WoRMS attaches records to individual name usages, so one AphiaID's rows can miss those of its synonyms: includeSynonyms combines the accepted taxon's rows with those of up to 10 synonyms per call, each row tagged sourceAphiaId; consume nextResultOffset before advancing synonymOffset to synonymUnion.nextSynonymOffset with resultOffset 0. Filters apply to the complete fetched set before pagination and combine by conjunction: recordStatus is exact, others use case-insensitive whole-value equality. Rows retain duplicates and source order; no rows does not prove biological or taxon absence. A notice flags an AphiaID that is not the accepted name.","input":[{"n":"recordStatus","t":"enum(3)"},{"n":"establishmentMeans","t":"string"},{"n":"invasiveness","t":"string"},{"n":"occurrence","t":"string"},{"n":"aphiaId","t":"integer","r":true},{"n":"resultOffset","t":"integer"},{"n":"includeSynonyms","t":"boolean"},{"n":"synonymOffset","t":"integer"}],"output":[{"n":"resultOffset","t":"integer"},{"n":"returnedCount","t":"integer"},{"n":"totalCount","t":"integer"},{"n":"nextResultOffset","t":"integer"},{"n":"byteBudget","t":"const"},{"n":"budgetLimited","t":"boolean"},{"n":"oversizedItem","t":"boolean"},{"n":"requiredBytes","t":"integer"},{"n":"aphiaId","t":"integer"},{"n":"unfilteredCount","t":"integer"},{"n":"filteredCount","t":"integer"},{"n":"distributions","t":"array<object>"},{"n":"synonymUnion","t":"object"},{"n":"statusError","t":"object"},{"n":"attribution","t":"object"},{"n":"echo","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"worms_get_traits","server":120,"verb":"get","cls":"get","resolver":false,"title":"Worms Get Traits","description":"Retrieve recorded attributes for an AphiaID from worms_resolve_taxon, including inherited attributes by default. Resume nextResultOffset as resultOffset with unchanged selectors and options. Whole rows retain original preorder nodeIndex and parentIndex across pages; parents may be on earlier pages. measurementType keeps each matching node with its subtree and ancestors, indices unchanged; totalCount counts that set and unfilteredCount the whole tree. Values, references and inheritance markers remain unchanged; on an accepted taxon WoRMS also returns attributes recorded on its synonyms whatever includeInherited is set to, marked by inheritedFrom. A notice flags an AphiaID that is not the accepted name. Missing traits do not prove biological absence; IUCN list membership is not a threat category.","input":[{"n":"resultOffset","t":"integer"},{"n":"aphiaId","t":"integer","r":true},{"n":"includeInherited","t":"boolean"},{"n":"measurementType","t":"string"}],"output":[{"n":"resultOffset","t":"integer"},{"n":"returnedCount","t":"integer"},{"n":"totalCount","t":"integer"},{"n":"nextResultOffset","t":"integer"},{"n":"byteBudget","t":"const"},{"n":"budgetLimited","t":"boolean"},{"n":"oversizedItem","t":"boolean"},{"n":"requiredBytes","t":"integer"},{"n":"aphiaId","t":"integer"},{"n":"unfilteredCount","t":"integer"},{"n":"traits","t":"array<object>"},{"n":"statusError","t":"object"},{"n":"attribution","t":"object"},{"n":"echo","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"worms_crosswalk_id","server":120,"verb":"crosswalk","cls":"resolve","resolver":true,"title":"Worms Crosswalk Id","description":"Crosswalk an AphiaID from worms_resolve_taxon to one or all nine external identifier systems, or reverse an externalId with required type to a full taxon record. Supply exactly one selector. Forward resultOffset indexes whole identifiers across types in requested order; resume nextResultOffset with unchanged selectors. typeTotals distinguishes successful absence from IDs on another segment; failed types remain separate. IDs stay opaque, including leading zeros and LSIDs. No IDs cannot establish taxon absence; IUCN identifiers are not threat categories.","input":[{"n":"resultOffset","t":"integer"},{"n":"aphiaId","t":"integer"},{"n":"externalId","t":"string"},{"n":"type","t":"enum(9)"}],"output":[{"n":"resultOffset","t":"integer"},{"n":"returnedCount","t":"integer"},{"n":"totalCount","t":"integer"},{"n":"nextResultOffset","t":"integer"},{"n":"byteBudget","t":"const"},{"n":"budgetLimited","t":"boolean"},{"n":"oversizedItem","t":"boolean"},{"n":"requiredBytes","t":"integer"},{"n":"direction","t":"enum(2)"},{"n":"aphiaId","t":"integer"},{"n":"externalId","t":"string"},{"n":"type","t":"enum(9)"},{"n":"found","t":"boolean"},{"n":"ids","t":"object"},{"n":"typeTotals","t":"object"},{"n":"failedTypes","t":"array<object>"},{"n":"record","t":"object"},{"n":"guidance","t":"string"},{"n":"attribution","t":"object"},{"n":"echo","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"wsdot_get_mountain_passes","server":121,"verb":"get","cls":"get","resolver":false,"title":"Get Mountain Pass Conditions","description":"Returns current road conditions for all Washington State mountain passes: status, weather, road condition, traction laws, temperature, and elevation. Includes all 16 passes (Snoqualmie, Stevens, White, Blewett, Cayuse, etc.). Use for \"is the pass open?\", traction law status, or winter driving planning.","input":[],"output":[{"n":"passes","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"wsdot_search_alerts","server":121,"verb":"search","cls":"search","resolver":false,"title":"Search Highway Alerts","description":"Returns active WA highway alerts: incidents, construction, closures, and restrictions. Filter by state route (\"I-90\", \"90\", \"SR 520\", or \"520\" all work), WSDOT region (Northwest, Olympic, Southwest, South Central, North Central, Eastern), or milepost range, matched against the alert's full extent. Omit all filters to return all current statewide alerts. Results are ordered by alertId and paged — pass offset/limit to page through the full set. A page ends at limit or at a 24,000-byte response budget, whichever comes first; the notice reports the next offset.","input":[{"n":"stateRoute","t":"string"},{"n":"region","t":"string"},{"n":"startMilepost","t":"number"},{"n":"endMilepost","t":"number"},{"n":"offset","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"alerts","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"nextOffset","t":"number"},{"n":"hasMore","t":"boolean"},{"n":"appliedFilters","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"wsdot_get_travel_times","server":121,"verb":"get","cls":"get","resolver":false,"title":"Get Travel Times","description":"Returns current vs. average travel times for named WA highway corridors (I-5, I-90, SR 520, SR 99, I-405, SR 167, etc.). Use for \"how congested is I-5?\" or commute time estimates. The route filter matches two ways: a route designation (\"I-5\", \"5\", \"SR 520\") returns every corridor measured on that route, and any text also matches corridor names (\"Everett\"). When current time exceeds average, the corridor is congested. Results are paged — pass offset/limit to page through the full set. A page ends at limit or at a 24,000-byte response budget, whichever comes first; the notice reports the next offset.","input":[{"n":"route","t":"string"},{"n":"offset","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"corridors","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"nextOffset","t":"number"},{"n":"hasMore","t":"boolean"},{"n":"routeFilter","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"wsdot_get_toll_rates","server":121,"verb":"get","cls":"get","resolver":false,"title":"Get Toll Rates","description":"Returns current dynamic toll rates for WA express lanes and tolled facilities: SR 99 (WSDOT Tunnel), SR 167 HOT Lanes, I-405 Express Lanes, SR 509 tolled segment, and the SR 520 Bridge. Rates are time-banded and change dynamically based on traffic conditions. Filter to one facility with stateRoute (\"SR 520\", \"520\", \"I-405\", or \"405\" all work). Each row reports stateRoute as the bare, zero-padded number the feed carries (\"099\", \"405\") — the posted designation is in the rendered text. Results are paged — pass offset/limit to page through the matching set. A page ends at limit or at a 24,000-byte response budget, whichever comes first; the notice reports the next offset.","input":[{"n":"stateRoute","t":"string"},{"n":"offset","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"rates","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"nextOffset","t":"number"},{"n":"hasMore","t":"boolean"},{"n":"appliedFilters","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"wsdot_get_border_waits","server":121,"verb":"get","cls":"get","resolver":false,"title":"Get Border Wait Times","description":"Returns current vehicle wait times at WA→Canada land border crossings: I-5 (Peace Arch, Blaine), SR 543 (Pacific Highway, Blaine), SR 539 (Lynden), and SR 9 (Sumas). Each crossing reports a general-purpose lane and a Nexus lane; SR 539 adds a truck lane and SR 543 adds truck and FAST truck lanes — eleven entries in crossings[], one per lane. crossingName is a route code (e.g. \"I5\", \"I5Nexus\", \"SR543Trucks\"); the readable name is in location.description. Wait times are in minutes. A crossing reporting no current data is still returned — only waitTimeInMinutes is omitted. Use for \"how long is the border wait?\" questions.","input":[],"output":[{"n":"crossings","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"wsdot_search_cameras","server":121,"verb":"search","cls":"search","resolver":false,"title":"Search Highway Cameras","description":"Returns WSDOT highway camera locations, descriptions, and image URLs. Camera images are copyright WSDOT — only metadata and image URLs are returned, not image bytes. Filter by state route (\"I-90\", \"90\", \"SR 520\", or \"520\" all work), WSDOT region, milepost range, or words in the camera title (\"Snoqualmie\"). Results are ordered by cameraId and paged — pass offset/limit to page through the full set. A page ends at limit or at a 24,000-byte response budget, whichever comes first; the notice reports the next offset.","input":[{"n":"stateRoute","t":"string"},{"n":"region","t":"string"},{"n":"startMilepost","t":"number"},{"n":"endMilepost","t":"number"},{"n":"titleContains","t":"string"},{"n":"offset","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"cameras","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"nextOffset","t":"number"},{"n":"hasMore","t":"boolean"},{"n":"appliedFilters","t":"object"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"wsdot_get_ferry_terminals","server":121,"verb":"get","cls":"get","resolver":false,"title":"Get Ferry Terminals","description":"Returns all WSF ferry terminals with their numeric IDs, names, abbreviations, and coordinates. Call this first to resolve human-readable terminal names (e.g. \"Bainbridge Island\", \"Seattle\", \"Kingston\") to the numeric terminal IDs required by the schedule and space tools. The terminal list is small (20 terminals) and rarely changes.","input":[],"output":[{"n":"terminals","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"wsdot_get_ferry_routes","server":121,"verb":"get","cls":"get","resolver":false,"title":"Get Ferry Routes","description":"Returns the main WSF ferry routes operating on a given date, each with the directed terminal pairs it serves that day (terminalPairs) — departing and arriving terminal IDs and names, which are exactly the pairs wsdot_get_ferry_schedule accepts for that date. Route IDs correspond to impactedRouteIds in ferry alerts from wsdot_get_ferry_alerts, though some alert route IDs (seasonal, San Juan interisland, or Sidney B.C.) may not appear in this list. For the full terminal list with coordinates, use wsdot_get_ferry_terminals.","input":[{"n":"tripDate","t":"string"}],"output":[{"n":"routes","t":"array<object>"},{"n":"tripDate","t":"string"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"wsdot_get_ferry_schedule","server":121,"verb":"get","cls":"get","resolver":false,"title":"Get Ferry Schedule","description":"Returns departure times for a specific WSF ferry route on a given date. Requires numeric terminal IDs — use wsdot_get_ferry_terminals to resolve terminal names to IDs; terminalPairs on wsdot_get_ferry_routes lists the pairs with service on a date. Set remainingOnly to true to show only future departures for today (useful for \"next ferry\" queries). For future dates, all sailings for that day are returned. Each sailing carries its vessel ID, WSF's loading-rule code, and the pair's annotations that apply to it — notes such as \"No interisland vehicles\" that decide whether a sailing takes a car. Sailing times are ISO 8601 UTC while tripDate is the Pacific service day, so evening sailings carry the next UTC date — convert to America/Los_Angeles before quoting a clock time. Cancellations are not carried here — WSF drops a cancelled sailing from the schedule instead of flagging it, so a listed sailing is not confirmation that it will run. Check wsdot_get_ferry_alerts for disruptions; those are scoped to a route, not an individual sailing.","input":[{"n":"departingTerminalId","t":"integer","r":true},{"n":"arrivingTerminalId","t":"integer","r":true},{"n":"tripDate","t":"string"},{"n":"remainingOnly","t":"boolean"}],"output":[{"n":"departingTerminalName","t":"string"},{"n":"arrivingTerminalName","t":"string"},{"n":"annotations","t":"array<string>"},{"n":"sailingNotes","t":"string"},{"n":"sailings","t":"array<object>"},{"n":"tripDate","t":"string"},{"n":"remainingOnly","t":"boolean"},{"n":"totalSailings","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"wsdot_get_vessel_locations","server":121,"verb":"get","cls":"get","resolver":false,"title":"Get Vessel Locations","description":"Returns real-time AIS positions, speed, heading, ETA, and dock status for all active WSF vessels. Use for \"where is the ferry now?\", vessel tracking, or checking if a vessel is in service. Position data may lag by 30–60 seconds. Many fields are null for vessels not currently operating.","input":[],"output":[{"n":"vessels","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"wsdot_get_terminal_space","server":121,"verb":"get","cls":"get","resolver":false,"title":"Get Terminal Space","description":"Returns real-time drive-up and reservable vehicle space available at WSF terminals for upcoming sailings. Use for \"will I make the ferry?\" or \"how full is the next sailing?\" questions. Optionally filter to a specific terminal by ID (use wsdot_get_ferry_terminals for the ID). driveUpSpaceCount is the key field — zero means the drive-up lane is full. Destinations are arrivingTerminalIds, not the itineraryLabel string: a sailing can serve several terminals, and those IDs are what wsdot_get_ferry_schedule accepts. Results are paged by terminal (default 5, max 20): offset/limit select whole terminals and totalCount counts matching terminals, not sailings — every sailing of a returned terminal is included, so page size varies with how many departures each terminal carries.","input":[{"n":"departingTerminalId","t":"integer"},{"n":"offset","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"terminals","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"nextOffset","t":"number"},{"n":"hasMore","t":"boolean"},{"n":"terminalFilter","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"wsdot_get_ferry_alerts","server":121,"verb":"get","cls":"get","resolver":false,"title":"Get Ferry Alerts","description":"Returns active WSF ferry service disruptions, delays, and bulletins. Each alert carries a one-line summary plus the bulletin title, kind, and full body — the body is where detail such as a replacement sailing appears. Each alert includes impacted route IDs — cross-reference with wsdot_get_ferry_routes to resolve route IDs to human-readable route names. Some IDs (seasonal, San Juan interisland, or international Sidney B.C. routes) may not appear in wsdot_get_ferry_routes for a given date.","input":[],"output":[{"n":"alerts","t":"array<object>"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"zenodo_search_records","server":122,"verb":"search","cls":"search","resolver":false,"title":"Search Zenodo records","description":"Search Zenodo's open research repository — datasets, software releases, publications, and other deposits — by keyword query plus filters for resource type, community, funder, grant, creator ORCID, file type, license, access status, and publication date. Returns one summary per deposit (ids, DOIs, title, type, version, creators, license, access, file totals, usage counts) plus facet counts over the full match set, every filter applied. Query terms are OR-ed unless joined with AND, quoted phrases match exactly, and field syntax works on record fields (metadata.title:\"…\", metadata.subjects.subject:\"…\"). Only the latest version of each deposit is searched unless all_versions is true, and only the first 10,000 matches are reachable by paging. Resolve community, funder, and grant names to ids with zenodo_lookup_vocabulary first; open one deposit in full with zenodo_get_record.","input":[{"n":"query","t":"string"},{"n":"resource_type","t":"array<enum(43)>"},{"n":"community","t":"string"},{"n":"funder","t":"string"},{"n":"award","t":"string"},{"n":"creator_orcid","t":"string"},{"n":"file_type","t":"array<string>"},{"n":"license","t":"string"},{"n":"access_status","t":"enum(4)"},{"n":"published_from","t":"string"},{"n":"published_to","t":"string"},{"n":"all_versions","t":"boolean"},{"n":"sort","t":"enum(7)"},{"n":"page","t":"integer"},{"n":"size","t":"integer"}],"output":[{"n":"total","t":"number"},{"n":"reachable","t":"number"},{"n":"page","t":"number"},{"n":"size","t":"number"},{"n":"has_more","t":"boolean"},{"n":"next_page","t":"number"},{"n":"hits","t":"array<object>"},{"n":"facets","t":"object"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"totalCount","t":"number"},{"n":"effectiveQuery","t":"string"},{"n":"appliedSort","t":"enum(7)"},{"n":"allVersions","t":"boolean"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"zenodo_get_record","server":122,"verb":"get","cls":"get","resolver":false,"title":"Get a Zenodo record","description":"Resolve one Zenodo deposit from a record id, a Zenodo DOI (10.5281/zenodo.N), a concept DOI or concept record id (resolves to the latest version), another DOI deposited on Zenodo, or a zenodo.org or doi.org URL, and return its full metadata: description, creators with ORCIDs and ROR affiliations, license, access and embargo, funding and grants, related identifiers, communities, version position, usage counts, and the first 25 files. Optionally includes a formatted citation. Long text and lists are cut at display caps with their totals reported; every cut except the file list (paged with zenodo_list_files) is listed in continuations with a cursor and the record id it is bound to, and passing both back returns the next window of that field (8,000 characters of text, or the next page of entries) in place of the record. A miss (an unknown id, a deleted record with its removal tombstone, restricted metadata, or a DOI not registered on Zenodo) returns found: false with guidance instead of an error.","input":[{"n":"id","t":"string","r":true},{"n":"citation_style","t":"enum(8)"},{"n":"cursor","t":"string"}],"output":[{"n":"found","t":"boolean"},{"n":"input_kind","t":"enum(4)"},{"n":"resolved_from","t":"enum(3)"},{"n":"miss_kind","t":"enum(4)"},{"n":"guidance","t":"string"},{"n":"tombstone","t":"object"},{"n":"record","t":"object"},{"n":"window","t":"object"},{"n":"continuations","t":"array<object>"},{"n":"citation","t":"string"},{"n":"citation_style","t":"string"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"zenodo_list_versions","server":122,"verb":"list","cls":"list","resolver":false,"title":"List Zenodo record versions","description":"List every version of a Zenodo deposit's version series, newest first, with each version's record id, DOI, version label, publication date, file totals, and usage counts. Accepts any identifier zenodo_get_record accepts; a concept DOI and any single version's DOI list the same series. Use it to find the version a paper cited or the current release. A miss (an unknown id, a deleted record with its removal tombstone, restricted metadata, or a DOI not registered on Zenodo) returns found: false with guidance instead of an error.","input":[{"n":"id","t":"string","r":true},{"n":"page","t":"integer"},{"n":"size","t":"integer"}],"output":[{"n":"found","t":"boolean"},{"n":"input_kind","t":"enum(4)"},{"n":"miss_kind","t":"enum(4)"},{"n":"guidance","t":"string"},{"n":"tombstone","t":"object"},{"n":"concept_recid","t":"string"},{"n":"concept_doi","t":"string"},{"n":"total_versions","t":"number"},{"n":"latest_recid","t":"string"},{"n":"page","t":"number"},{"n":"size","t":"number"},{"n":"has_more","t":"boolean"},{"n":"next_page","t":"number"},{"n":"versions","t":"array<object>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"zenodo_list_files","server":122,"verb":"list","cls":"list","resolver":false,"title":"List Zenodo record files","description":"Page through a Zenodo deposit's file manifest (key, size, MIME type, MD5, download URL, previewability), optionally filtered by a substring of the file key, or list the members inside one of its .zip files by setting archive_key. Restricted and embargoed files return the access status and embargo date with no entries. Read a small text file or ZIP member with zenodo_read_file.","input":[{"n":"id","t":"string","r":true},{"n":"archive_key","t":"string"},{"n":"key_contains","t":"string"},{"n":"offset","t":"integer"},{"n":"limit","t":"integer"}],"output":[{"n":"recid","t":"string"},{"n":"kind","t":"enum(2)"},{"n":"access_status","t":"string"},{"n":"files_access","t":"string"},{"n":"embargo_until","t":"string"},{"n":"files_enabled","t":"boolean"},{"n":"key_contains","t":"string"},{"n":"offset","t":"number"},{"n":"limit","t":"number"},{"n":"matched","t":"number"},{"n":"has_more","t":"boolean"},{"n":"next_offset","t":"number"},{"n":"file_count","t":"number"},{"n":"total_bytes","t":"number"},{"n":"entries","t":"array<object>"},{"n":"archive","t":"object"},{"n":"members","t":"array<object>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"zenodo_read_file","server":122,"verb":"read","cls":"get","resolver":false,"title":"Read a Zenodo file excerpt","description":"Read a bounded UTF-8 excerpt (up to 64 KiB per call) of one text file in a Zenodo deposit — a README, CITATION.cff, CSV head, notebook, or script — or of one member inside a .zip file, without downloading the archive. Continue a top-level file from next_offset. A file with a text MIME type or extension is read directly; an extensionless file Zenodo types application/octet-stream (LICENSE, COPYING, Makefile) is read and returned only when its content is UTF-8 text. Binary files, restricted files, and other types return metadata and the download URL without content. File content is depositor-supplied and carries the deposit’s license.","input":[{"n":"id","t":"string","r":true},{"n":"key","t":"string","r":true},{"n":"archive_member","t":"string"},{"n":"offset_bytes","t":"integer"},{"n":"max_bytes","t":"integer"}],"output":[{"n":"recid","t":"string"},{"n":"key","t":"string"},{"n":"archive_member","t":"string"},{"n":"status","t":"enum(4)"},{"n":"mimetype","t":"string"},{"n":"file_size","t":"number"},{"n":"md5","t":"string"},{"n":"text","t":"string"},{"n":"offset_bytes","t":"number"},{"n":"bytes_returned","t":"number"},{"n":"next_offset","t":"number"},{"n":"has_more","t":"boolean"},{"n":"replacement_chars","t":"number"},{"n":"rights","t":"array<object>"},{"n":"record_url","t":"string"},{"n":"download_url","t":"string"},{"n":"files_access","t":"string"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]},{"name":"zenodo_lookup_vocabulary","server":122,"verb":"lookup","cls":"get","resolver":false,"title":"Look up Zenodo filter ids","description":"Resolve names to the ids zenodo_search_records filters on, and browse Zenodo's reference vocabularies: communities (slug), funders (ROR id), awards and grants (award id), licenses (license id), and resource types (type id). Search by name, acronym, or keyword; awards can be scoped to one funder. Each entry names the zenodo_search_records parameter its id feeds.","input":[{"n":"vocabulary","t":"enum(5)","r":true},{"n":"query","t":"string"},{"n":"funder","t":"string"},{"n":"page","t":"integer"},{"n":"size","t":"integer"}],"output":[{"n":"vocabulary","t":"enum(5)"},{"n":"query","t":"string"},{"n":"total","t":"number"},{"n":"reachable","t":"number"},{"n":"page","t":"number"},{"n":"size","t":"number"},{"n":"has_more","t":"boolean"},{"n":"next_page","t":"number"},{"n":"entries","t":"array<object>"},{"n":"truncated","t":"boolean"},{"n":"shown","t":"number"},{"n":"cap","t":"number"},{"n":"totalCount","t":"number"},{"n":"notice","t":"string"},{"n":"error","t":"object"}]}],"composes":[[0,60],[0,100],[0,117],[1,13],[1,14],[1,23],[1,122],[2,64],[2,72],[2,76],[2,84],[2,95],[3,33],[3,34],[3,35],[3,72],[3,84],[3,87],[4,122],[5,52],[5,53],[6,45],[6,50],[6,117],[8,51],[8,95],[8,102],[9,74],[11,59],[11,71],[12,46],[13,14],[13,22],[13,23],[13,77],[13,85],[14,23],[14,122],[15,79],[15,92],[15,93],[15,94],[15,111],[16,43],[16,61],[16,66],[16,86],[17,47],[17,59],[17,71],[19,41],[19,104],[20,30],[20,41],[20,97],[20,106],[21,65],[21,79],[22,23],[22,28],[22,122],[23,77],[23,85],[23,122],[25,42],[25,46],[25,68],[25,69],[25,115],[26,63],[27,39],[27,76],[27,84],[27,115],[27,121],[28,47],[28,56],[28,93],[28,94],[28,111],[29,115],[30,31],[30,97],[30,106],[30,117],[31,36],[31,52],[31,53],[31,73],[31,110],[32,119],[33,34],[33,87],[35,87],[36,44],[36,52],[36,63],[36,114],[36,119],[37,107],[38,39],[39,84],[40,99],[40,104],[41,48],[41,113],[42,72],[42,96],[42,112],[42,115],[43,66],[43,86],[44,54],[44,76],[44,88],[44,109],[44,120],[45,55],[45,57],[46,76],[46,84],[46,87],[46,95],[47,56],[47,79],[47,90],[47,94],[47,111],[48,70],[48,113],[49,58],[49,82],[49,88],[49,117],[49,118],[50,102],[51,66],[51,95],[52,53],[52,73],[52,119],[53,73],[53,104],[53,119],[54,84],[55,58],[55,82],[55,118],[56,92],[56,111],[57,96],[59,71],[59,79],[59,90],[59,94],[60,100],[60,117],[60,118],[61,66],[61,86],[61,89],[62,117],[62,118],[63,76],[64,72],[64,76],[64,84],[64,109],[64,118],[66,86],[66,89],[66,102],[67,76],[67,112],[67,115],[68,72],[68,76],[68,121],[69,72],[70,80],[70,98],[70,99],[70,113],[71,79],[72,76],[72,112],[72,115],[73,108],[73,116],[73,119],[74,95],[74,118],[76,84],[76,87],[76,115],[77,122],[78,84],[79,81],[79,90],[80,98],[81,114],[84,87],[84,88],[84,107],[84,109],[85,122],[88,109],[88,118],[90,94],[91,117],[91,118],[92,111],[93,111],[94,111],[94,122],[96,110],[97,106],[97,117],[98,99],[98,113],[99,104],[100,117],[100,118],[104,113],[104,119],[106,107],[109,117],[110,116],[110,119],[112,115],[114,116],[117,122]],"shared":[{"a":1,"b":4,"fields":["doi"]},{"a":1,"b":13,"fields":["doi"]},{"a":1,"b":14,"fields":["doi"]},{"a":1,"b":22,"fields":["doi"]},{"a":1,"b":23,"fields":["doi"]},{"a":1,"b":44,"fields":["doi"]},{"a":1,"b":85,"fields":["doi"]},{"a":1,"b":88,"fields":["doi"]},{"a":1,"b":94,"fields":["doi"]},{"a":1,"b":122,"fields":["doi"]},{"a":4,"b":13,"fields":["doi"]},{"a":4,"b":14,"fields":["doi"]},{"a":4,"b":22,"fields":["doi"]},{"a":4,"b":23,"fields":["doi"]},{"a":4,"b":44,"fields":["doi"]},{"a":4,"b":85,"fields":["doi"]},{"a":4,"b":88,"fields":["doi"]},{"a":4,"b":94,"fields":["doi"]},{"a":4,"b":122,"fields":["doi"]},{"a":7,"b":44,"fields":["country_code"]},{"a":7,"b":46,"fields":["country_code"]},{"a":7,"b":76,"fields":["country_code"]},{"a":7,"b":103,"fields":["country_code"]},{"a":7,"b":109,"fields":["country_code"]},{"a":7,"b":113,"fields":["country_code"]},{"a":7,"b":116,"fields":["country_code"]},{"a":7,"b":119,"fields":["country_code"]},{"a":13,"b":14,"fields":["doi"]},{"a":13,"b":22,"fields":["doi","orcid"]},{"a":13,"b":23,"fields":["doi","orcid"]},{"a":13,"b":44,"fields":["doi"]},{"a":13,"b":85,"fields":["doi"]},{"a":13,"b":88,"fields":["doi"]},{"a":13,"b":94,"fields":["doi"]},{"a":13,"b":122,"fields":["doi"]},{"a":14,"b":22,"fields":["doi"]},{"a":14,"b":23,"fields":["doi"]},{"a":14,"b":44,"fields":["doi"]},{"a":14,"b":85,"fields":["doi"]},{"a":14,"b":88,"fields":["doi"]},{"a":14,"b":94,"fields":["doi"]},{"a":14,"b":122,"fields":["doi"]},{"a":16,"b":43,"fields":["cve"]},{"a":16,"b":61,"fields":["cwe"]},{"a":16,"b":66,"fields":["cve","cwe"]},{"a":22,"b":23,"fields":["doi","orcid"]},{"a":22,"b":44,"fields":["doi"]},{"a":22,"b":82,"fields":["isbn"]},{"a":22,"b":85,"fields":["doi"]},{"a":22,"b":88,"fields":["doi"]},{"a":22,"b":94,"fields":["doi"]},{"a":22,"b":122,"fields":["doi"]},{"a":23,"b":44,"fields":["doi"]},{"a":23,"b":85,"fields":["doi"]},{"a":23,"b":88,"fields":["doi"]},{"a":23,"b":94,"fields":["doi"]},{"a":23,"b":122,"fields":["doi"]},{"a":29,"b":34,"fields":["zip_code"]},{"a":29,"b":42,"fields":["zip_code"]},{"a":30,"b":97,"fields":["ecli"]},{"a":34,"b":42,"fields":["zip_code"]},{"a":43,"b":66,"fields":["cve"]},{"a":44,"b":46,"fields":["country_code"]},{"a":44,"b":76,"fields":["country_code"]},{"a":44,"b":85,"fields":["doi"]},{"a":44,"b":88,"fields":["doi"]},{"a":44,"b":94,"fields":["doi"]},{"a":44,"b":103,"fields":["country_code"]},{"a":44,"b":109,"fields":["country_code"]},{"a":44,"b":113,"fields":["country_code"]},{"a":44,"b":116,"fields":["country_code"]},{"a":44,"b":119,"fields":["country_code"]},{"a":44,"b":122,"fields":["doi"]},{"a":46,"b":76,"fields":["country_code"]},{"a":46,"b":103,"fields":["country_code"]},{"a":46,"b":109,"fields":["country_code"]},{"a":46,"b":113,"fields":["country_code"]},{"a":46,"b":116,"fields":["country_code"]},{"a":46,"b":119,"fields":["country_code"]},{"a":61,"b":66,"fields":["cwe"]},{"a":76,"b":103,"fields":["country_code"]},{"a":76,"b":109,"fields":["country_code"]},{"a":76,"b":113,"fields":["country_code"]},{"a":76,"b":116,"fields":["country_code"]},{"a":76,"b":119,"fields":["country_code"]},{"a":85,"b":88,"fields":["doi"]},{"a":85,"b":90,"fields":["pmid"]},{"a":85,"b":93,"fields":["pmid"]},{"a":85,"b":94,"fields":["doi","pmid"]},{"a":85,"b":122,"fields":["doi"]},{"a":88,"b":94,"fields":["doi"]},{"a":88,"b":122,"fields":["doi"]},{"a":90,"b":93,"fields":["pmid"]},{"a":90,"b":94,"fields":["pmid"]},{"a":93,"b":94,"fields":["pmid"]},{"a":94,"b":122,"fields":["doi"]},{"a":98,"b":99,"fields":["lei"]},{"a":103,"b":109,"fields":["country_code"]},{"a":103,"b":113,"fields":["country_code"]},{"a":103,"b":116,"fields":["country_code"]},{"a":103,"b":119,"fields":["country_code"]},{"a":109,"b":113,"fields":["country_code"]},{"a":109,"b":116,"fields":["country_code"]},{"a":109,"b":119,"fields":["country_code"]},{"a":113,"b":116,"fields":["country_code"]},{"a":113,"b":119,"fields":["country_code"]},{"a":116,"b":119,"fields":["country_code"]}],"unanswered":[]}
