Endpoints: 28,729MCP servers: 18,413Payout addresses: 2,071Paid calls: 1,547Letters: 14Defects: 1,324counted just now
teppi

Server definition

Hash
sha256:dd35444615c6107a0a51c784d4df0e4af400a4c420d88a91682d2749ede23f6a
What it is
What a remote MCP server returned when asked what it offers: 15 tools

The blob, as servednamed by its sha256

{ "instructions": "Hermes is an air quality information server for London, built by South London Scientific. It provides ambient monitoring data with detailed coverage of Southwark and London-wide capability.\n\n## Tool catalogue\n\n**Start here** — comprehensive single-call assessment:\n- `assess_location_aq` — one-call AQ assessment: current readings, trends, and monitor context\n\n**Live data tools** — use these for specific queries or follow-up:\n- `get_current_aq` — most recent readings near a location, with DAQI and health advice\n- `get_aqi_summary` — AQI assessment with WHO compliance check\n- `compare_locations` — side-by-side AQ comparison across multiple locations\n\n**Historical & trend tools** — use these for analysis over time:\n- `get_historical_aq` — historical data for a date range, with summary statistics\n- `trend_analysis` — long-term trend with statistical significance (Theil-Sen + Mann-Kendall)\n- `regulatory_stats` — LAQM-style annual statistics (means, percentiles, exceedances)\n- `time_patterns` — diurnal, day-of-week, and monthly pollution profiles\n\n**Visualisation:**\n- `chart_aq_trend` — time series chart as inline PNG image\n\n**Monitor discovery:**\n- `list_monitors` — find monitoring sites near a location with operational status\n\n**Knowledge base** — curated, evidence-based reference documents:\n- `kb_get_guidelines` — DAQI bands, WHO guidelines, UK legal limits\n- `kb_get_health_effects` — pollutant-specific health evidence by population group\n- `kb_get_local_context` — area-specific AQ context (Southwark, London boroughs)\n- `kb_get_practical_advice` — generic protective actions (e.g. \"should anyone exercise on a high-pollution day?\"). For *personalised* advice keyed to the user's own context (asthma, pregnancy, gas cooker, tube commute), call Clara's `contextual_advice` instead.\n- `kb_get_monitoring_explainer` — how monitors work, data interpretation\n\n## Scope\n- **Can do:** Ambient air quality data for London and UK regulatory monitoring networks. Historical trends, regulatory compliance, temporal patterns, health context.\n- **Cannot do:** Personalised health advice and personal exposure assessment (use the Clara MCP server), forecasting, indoor air quality.\n\n## Composition with Clara (personal-health questions)\nWhen the user asks a question that ties air quality to their own situation — e.g. \"I have asthma, is it safe to run outside?\", \"should I cycle today with my kid?\", \"my child has a cough, is the air bad?\" — Hermes alone is the wrong shape. The right pattern is:\n\n1. Call Hermes `get_current_aq` (or `assess_location_aq`) for the user's location to get live pm25 and no2 numbers.\n2. Pass those numbers + the user's context (audience, setting, indoor sources) to Clara's `contextual_advice` tool.\n3. Present Clara's advice, attributing the live data to Hermes and the personalised context to Clara.\n\nHermes' own `kb_get_practical_advice` is a **fallback** for when Clara is unavailable or the user wants only generic guidance, not a substitute for the composition above.\n\n## Key principle\nA monitor reading is NOT personal exposure. Always contextualise with distance, monitor type, and the difference between ambient monitoring and what people actually breathe.\n\n## Response structure\nAll tools return structured JSON with a `summary` or `narrative` field containing plain-English interpretation. Present this to users first, then use the raw data fields for detail. Error responses use `{\"error\": {\"type\": \"...\", \"message\": \"...\"}}`.\n\n## Attribution\nBuilt by South London Scientific (southlondonscientific.com). Data from UK regulatory networks (AURN, AQE, LMAM, SAQN) and Breathe London via Aeolus.", "tools": [ { "description": "Comprehensive air quality assessment for a location in one call.\n\nCombines nearby monitor discovery and current readings with DAQI into\na single response. Use this as the first tool call for any air quality\nquestion about a location.\n\nFor long-term trend analysis, use the dedicated `trend_analysis` tool.\n\nReturns a structured 'summary' dict with purpose-appropriate sections.\nPresent the summary description to users first.\n\nArgs:\n location: Postcode, place name, or \"lat,lon\".\n purpose: What the user needs — \"general\" (default), \"health\"\n (safety/worry), \"exercise\" (outdoor activity), or \"planning\"\n (homebuying/school assessment/long-term).\n", "inputSchema": { "properties": { "location": { "title": "Location", "type": "string" }, "purpose": { "default": "general", "title": "Purpose", "type": "string" } }, "required": [ "location" ], "title": "assess_location_aqArguments", "type": "object" }, "name": "assess_location_aq", "outputSchema": null }, { "description": "Generate a time series chart of air quality data.\n\nReturns a PNG chart image with a brief text summary. Use this when\nusers ask about trends, patterns, or want to visualise air quality\nover time.\n\nArgs:\n start_date: Start date (ISO format, e.g. \"2025-01-01\").\n end_date: End date (ISO format).\n location: Postcode, place name, or \"lat,lon\". Provide this or site_code.\n site_code: Direct site code. Provide this or location.\n pollutants: Optional filter, e.g. [\"NO2\", \"PM2.5\"]. Defaults to\n NO2, PM2.5, PM10, O3 if not specified.\n frequency: \"hourly\", \"daily\", or \"monthly\" (default \"daily\").\n show_who_guidelines: Show WHO guideline reference lines (default True).\n show_daqi_bands: Show DAQI band background shading (default True).\n", "inputSchema": { "properties": { "end_date": { "title": "End Date", "type": "string" }, "frequency": { "default": "daily", "title": "Frequency", "type": "string" }, "location": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Location" }, "pollutants": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "default": null, "title": "Pollutants" }, "show_daqi_bands": { "default": true, "title": "Show Daqi Bands", "type": "boolean" }, "show_who_guidelines": { "default": true, "title": "Show Who Guidelines", "type": "boolean" }, "site_code": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Site Code" }, "start_date": { "title": "Start Date", "type": "string" } }, "required": [ "start_date", "end_date" ], "title": "chart_aq_trendArguments", "type": "object" }, "name": "chart_aq_trend", "outputSchema": null }, { "description": "Compare current air quality across multiple locations side-by-side.\n\nReturns a ranked comparison by pollutant with DAQI bands and distance to\nnearest monitor. Useful for comparing development sites, school locations,\nor residential options.\n\nArgs:\n locations: List of 2–6 locations (postcodes, place names, or \"lat,lon\").\n pollutants: Optional filter, e.g. [\"NO2\", \"PM2.5\"]. Default: all available.\n", "inputSchema": { "properties": { "locations": { "items": { "type": "string" }, "title": "Locations", "type": "array" }, "pollutants": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "default": null, "title": "Pollutants" } }, "required": [ "locations" ], "title": "compare_locationsArguments", "type": "object" }, "name": "compare_locations", "outputSchema": null }, { "description": "Get an AQI assessment with health advice and WHO compliance check.\n\nReturns a 'summary' with a plain-English health assessment, advice for\ngeneral and at-risk populations, and WHO guideline context. Present the\nsummary to users first. Also returns raw 'aqi' and 'who_compliance' data.\n\nArgs:\n location: Postcode, place name, or \"lat,lon\".\n index: AQI system — \"UK_DAQI\" (default), \"WHO\", or \"US_EPA\".\n period: \"current\", \"today\", \"this_week\", or \"this_month\".\n", "inputSchema": { "properties": { "index": { "default": "UK_DAQI", "title": "Index", "type": "string" }, "location": { "title": "Location", "type": "string" }, "period": { "default": "current", "title": "Period", "type": "string" } }, "required": [ "location" ], "title": "get_aqi_summaryArguments", "type": "object" }, "name": "get_aqi_summary", "outputSchema": null }, { "description": "Get the most recent air quality readings near a location, with health context.\n\nReturns a 'summary' with a plain-English health assessment and advice\nfor general and at-risk populations. Present the summary to users first.\nAlso returns individual 'readings' from nearby monitors and 'metadata'\nabout data freshness and sources.\n\nArgs:\n location: Postcode, place name, or \"lat,lon\".\n radius_km: Search radius in kilometres (default 2.0).\n pollutants: Optional filter, e.g. [\"NO2\", \"PM2.5\"].\n sources: Optional filter, e.g. [\"AURN\", \"BREATHE_LONDON\"].\n", "inputSchema": { "properties": { "location": { "title": "Location", "type": "string" }, "pollutants": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "default": null, "title": "Pollutants" }, "radius_km": { "default": 3.5, "title": "Radius Km", "type": "number" }, "sources": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "default": null, "title": "Sources" } }, "required": [ "location" ], "title": "get_current_aqArguments", "type": "object" }, "name": "get_current_aq", "outputSchema": null }, { "description": "Get historical air quality data for a site or location, with health context.\n\nReturns a 'narrative' with plain-English interpretation of trends,\nWHO guideline exceedances, and guideline comparisons. Present the\nnarrative to users first. Also returns raw 'data' and 'summary' statistics.\n\nArgs:\n start_date: Start date (ISO format, e.g. \"2025-01-01\").\n end_date: End date (ISO format).\n location: Postcode, place name, or \"lat,lon\". Provide this or site_code.\n site_code: Direct site code. Provide this or location.\n pollutants: Optional filter, e.g. [\"NO2\", \"PM2.5\"].\n frequency: \"hourly\", \"daily\", or \"monthly\" (default \"daily\").\n", "inputSchema": { "properties": { "end_date": { "title": "End Date", "type": "string" }, "frequency": { "default": "daily", "title": "Frequency", "type": "string" }, "location": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Location" }, "pollutants": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "default": null, "title": "Pollutants" }, "site_code": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Site Code" }, "start_date": { "title": "Start Date", "type": "string" } }, "required": [ "start_date", "end_date" ], "title": "get_historical_aqArguments", "type": "object" }, "name": "get_historical_aq", "outputSchema": null }, { "description": "Get current air quality guideline and target values.\n\nArgs:\n framework: \"WHO\", \"UK\", \"EU\", or \"all\" (default).\n pollutant: Optional filter for a specific pollutant.\n\nReturns the full guidelines document (markdown).\n", "inputSchema": { "properties": { "framework": { "default": "all", "title": "Framework", "type": "string" }, "pollutant": { "anyOf": [ { "type": "string" }, { "type": "null" } ], "default": null, "title": "Pollutant" } }, "title": "kb_get_guidelinesArguments", "type": "object" }, "name": "kb_get_guidelines", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "kb_get_guidelinesOutput", "type": "object" } }, { "description": "Get health evidence summaries for a pollutant and population group.\n\nArgs:\n pollutant: \"NO2\", \"PM2.5\", \"PM10\", or \"O3\".\n population_group: \"general\", \"children\", \"elderly\", \"respiratory\",\n \"cardiovascular\", or \"pregnant\" (default \"general\").\n\nReturns health effects document (markdown).\n", "inputSchema": { "properties": { "pollutant": { "title": "Pollutant", "type": "string" }, "population_group": { "default": "general", "title": "Population Group", "type": "string" } }, "required": [ "pollutant" ], "title": "kb_get_health_effectsArguments", "type": "object" }, "name": "kb_get_health_effects", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "kb_get_health_effectsOutput", "type": "object" } }, { "description": "Get area-specific contextual information.\n\nArgs:\n area: \"southwark\", \"london\", or a specific neighbourhood.\n\nReturns local context document (markdown).\n", "inputSchema": { "properties": { "area": { "default": "southwark", "title": "Area", "type": "string" } }, "title": "kb_get_local_contextArguments", "type": "object" }, "name": "kb_get_local_context", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "kb_get_local_contextOutput", "type": "object" } }, { "description": "Get plain-language explanations of monitoring methods and limitations.\n\nArgs:\n topic: One of \"how_monitors_work\", \"regulatory_vs_lowcost\",\n \"what_readings_mean\", \"why_numbers_differ\",\n \"representativeness\", \"data_quality\", \"what_monitors_measure\".\n\nReturns monitoring explainer document (markdown).\n", "inputSchema": { "properties": { "topic": { "title": "Topic", "type": "string" } }, "required": [ "topic" ], "title": "kb_get_monitoring_explainerArguments", "type": "object" }, "name": "kb_get_monitoring_explainer", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "kb_get_monitoring_explainerOutput", "type": "object" } }, { "description": "Generic protective-action guidance for a category of situation\n(NOT keyed to an individual user's context).\n\nFor *personalised* advice that takes the user's specific health\nsituation into account (asthma, pregnancy, gas cooker, tube commute,\nindoor sources), prefer the Clara MCP server's `contextual_advice`\ntool — it composes Hermes live readings with personal context to\ngive an answer keyed to *this* user, *now*. Use this KB tool only\nas a fallback or when Clara is not available.\n\nArgs:\n situation: One of \"high_pollution_day\", \"commuting\", \"exercise\",\n \"school_run\", \"indoor_air\", \"planning_objection\", \"pregnancy\",\n \"child_asthma\".\n\nReturns practical advice document (markdown).\n", "inputSchema": { "properties": { "situation": { "title": "Situation", "type": "string" } }, "required": [ "situation" ], "title": "kb_get_practical_adviceArguments", "type": "object" }, "name": "kb_get_practical_advice", "outputSchema": { "properties": { "result": { "title": "Result", "type": "string" } }, "required": [ "result" ], "title": "kb_get_practical_adviceOutput", "type": "object" } }, { "description": "List air quality monitoring sites near a location, with context.\n\nReturns a 'summary' explaining how many monitors were found, their\noperational status, and what each monitor type represents. Present the\nsummary to users first. Also returns a 'monitors' list with full metadata.\n\nArgs:\n location: Postcode, place name, or \"lat,lon\".\n radius_km: Search radius in kilometres (default 5.0).\n sources: Optional filter, e.g. [\"AURN\", \"BREATHE_LONDON\"].\n", "inputSchema": { "properties": { "location": { "title": "Location", "type": "string" }, "radius_km": { "default": 5, "title": "Radius Km", "type": "number" }, "sources": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "default": null, "title": "Sources" } }, "required": [ "location" ], "title": "list_monitorsArguments", "type": "object" }, "name": "list_monitors", "outputSchema": null }, { "description": "Get LAQM Annual Status Report-style statistics for a location.\n\nReturns annual means, percentiles, exceedance counts, data capture\npercentages, and compliance assessment against UK legal limits and\nWHO guidelines.\n\nArgs:\n location: Postcode, place name, or \"lat,lon\".\n year: Calendar year to report on (default: most recent complete year).\n pollutants: Optional filter, e.g. [\"NO2\", \"PM2.5\"]. Default: all available.\n", "inputSchema": { "properties": { "location": { "title": "Location", "type": "string" }, "pollutants": { "anyOf": [ { "items": { "type": "string" }, "type": "array" }, { "type": "null" } ], "default": null, "title": "Pollutants" }, "year": { "anyOf": [ { "type": "integer" }, { "type": "null" } ], "default": null, "title": "Year" } }, "required": [ "location" ], "title": "regulatory_statsArguments", "type": "object" }, "name": "regulatory_stats", "outputSchema": null }, { "description": "Analyse when pollution is highest — hour of day, day of week, and month.\n\nReturns temporal profiles showing typical patterns. Useful for advising on\nbest times for outdoor exercise, school runs, or commuting.\n\nArgs:\n location: Postcode, place name, or \"lat,lon\".\n pollutant: Pollutant to analyse — \"NO2\", \"PM2.5\", \"PM10\", \"O3\" (default \"NO2\").\n period: Time window — \"last_month\", \"last_3_months\", \"last_6_months\",\n or \"last_year\" (default).\n", "inputSchema": { "properties": { "location": { "title": "Location", "type": "string" }, "period": { "default": "last_year", "title": "Period", "type": "string" }, "pollutant": { "default": "NO2", "title": "Pollutant", "type": "string" } }, "required": [ "location" ], "title": "time_patternsArguments", "type": "object" }, "name": "time_patterns", "outputSchema": null }, { "description": "Analyse the long-term trend in a pollutant near a location.\n\nUses Theil-Sen slope estimation with Mann-Kendall significance testing\nto determine whether air quality is improving, worsening, or stable.\nRobust to outliers and missing data.\n\nReturns a 'summary' with plain-English trend description and statistical\ndetails. Present the summary to users first.\n\nArgs:\n location: Postcode, place name, or \"lat,lon\".\n pollutant: Pollutant to analyse — \"NO2\", \"PM2.5\", \"PM10\", \"O3\" (default \"NO2\").\n years: Number of years of data to analyse (default 5, range 2–5).\n Requests outside this range are clamped; the response includes\n ``metadata.years_clamped`` and a note in ``summary`` when so.\n", "inputSchema": { "properties": { "location": { "title": "Location", "type": "string" }, "pollutant": { "default": "NO2", "title": "Pollutant", "type": "string" }, "years": { "default": 5, "title": "Years", "type": "integer" } }, "required": [ "location" ], "title": "trend_analysisArguments", "type": "object" }, "name": "trend_analysis", "outputSchema": null } ] }
Verify it yourselfcurl -s https://api.teppi.xyz/v1/evidence/sha256:dd35444615c6107a0a51c784d4df0e4af400a4c420d88a91682d2749ede23f6a | sha256sum