{
  "markdown": "<!-- delx-wellness header v2 -->\n<h1 align=\"center\">Wellness Air</h1>\n\n<h3 align=\"center\">\n  Local-first air-quality MCP for AI agents.<br>\n  Plug an AirGradient/AirThings/PurpleAir sensor into your agent — <strong>no tokens leave your machine</strong>.\n</h3>\n\n<p align=\"center\">\n  <a href=\"https://www.npmjs.com/package/wellness-air\"><img src=\"https://img.shields.io/npm/v/wellness-air?style=for-the-badge&labelColor=0F172A&color=10B981&logo=npm&logoColor=white\" alt=\"npm version\" /></a>\n  <a href=\"https://www.npmjs.com/package/wellness-air\"><img src=\"https://img.shields.io/npm/dm/wellness-air?style=for-the-badge&labelColor=0F172A&color=0EA5A3&logo=npm&logoColor=white\" alt=\"npm downloads\" /></a>\n  <a href=\"LICENSE\"><img src=\"https://img.shields.io/badge/LICENSE-MIT-22C55E?style=for-the-badge&labelColor=0F172A\" alt=\"License MIT\" /></a>\n  <a href=\"https://wellness.delx.ai/connectors/air\"><img src=\"https://img.shields.io/badge/SITE-wellness.delx.ai-0EA5A3?style=for-the-badge&labelColor=0F172A\" alt=\"Site\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/davidmosiah/wellness-air/stargazers\"><img src=\"https://img.shields.io/github/stars/davidmosiah/wellness-air?style=for-the-badge&labelColor=0F172A&color=FBBF24&logo=github\" alt=\"GitHub stars\" /></a>\n  <a href=\"https://modelcontextprotocol.io\"><img src=\"https://img.shields.io/badge/BUILT_FOR-MCP-7C3AED?style=for-the-badge&labelColor=0F172A\" alt=\"Built for MCP\" /></a>\n  <a href=\"https://github.com/davidmosiah/delx-wellness-hermes\"><img src=\"https://img.shields.io/badge/HERMES-one--command_setup-10B981?style=for-the-badge&labelColor=0F172A\" alt=\"Hermes one-command setup\" /></a>\n  <a href=\"https://github.com/davidmosiah/delx-wellness-openclaw\"><img src=\"https://img.shields.io/badge/OPENCLAW-one--command_setup-FB923C?style=for-the-badge&labelColor=0F172A\" alt=\"OpenClaw one-command setup\" /></a>\n  <a href=\"https://github.com/davidmosiah/delx-wellness\"><img src=\"https://img.shields.io/badge/Delx_Wellness-Hub-10B981?style=for-the-badge&labelColor=0F172A&logoColor=white\" alt=\"Delx Wellness Hub\" /></a>\n</p>\n\n<p align=\"center\">\n  <strong>📡 Why this exists:</strong> your sleep / focus / training results are partly a <em>room-quality</em> problem. PM2.5 above 35, CO₂ above 1,000 ppm, low humidity — those wreck recovery and the agent can't see them. <code>wellness-air</code> gives any AI agent <strong>local-first</strong> environmental context to cross with WHOOP / Oura / Garmin / nourish.\n</p>\n\n> ⚡ **One-command install** — pick your runtime:\n> - [Delx Wellness for Hermes](https://github.com/davidmosiah/delx-wellness-hermes): `npx -y delx-wellness-hermes setup`\n> - [Delx Wellness for OpenClaw](https://github.com/davidmosiah/delx-wellness-openclaw): `npx -y delx-wellness-openclaw setup`\n>\n> Or wire it standalone into Claude Desktop / Cursor / ChatGPT Desktop &mdash; see the install section below.\n\n---\n\n## HTTP (v2 stateless)\n\nDefault is **stdio**. Optional Streamable HTTP — no session id, JSON responses, loopback only:\n\n```bash\nnpx -y wellness-air --http\n# GET  http://127.0.0.1:3000/health\n# POST http://127.0.0.1:3000/mcp   (sessionless)\n```\n\nEnv: `WELLNESS_AIR_HOST`, `WELLNESS_AIR_PORT`, `WELLNESS_AIR_TRANSPORT=http`.\n\n\n<!-- /delx-wellness header v2 -->\n\n## Overview\n\nWellness Air is a local MCP server that exposes air-quality readings to any MCP-aware AI agent. It ships with first-class **AirGradient** support (open hardware + free public API — no auth needed for the 2,000+ public sensors in the worldwide feed). **AirThings** and **PurpleAir** are implemented (bring your own free API credentials); **IQAir AirVisual** and **Awair** are on the roadmap.\n\n> If wellness-air helps your agent, please star the repo. Stars make the project easier for other AI builders to discover and help Delx keep shipping local-first wellness infrastructure.\n\n## Try It In 60 Seconds\n\n```bash\n# 89 is a real, public AirGradient sensor (Prem Tinsulanonda School, Thailand).\n# Swap in one near you from https://www.airgradient.com/map/ — copy the numeric\n# locationId from the URL.\n\nWELLNESS_AIR_DEFAULT_LOCATION=89 npx -y wellness-air doctor\nWELLNESS_AIR_DEFAULT_LOCATION=89 npx -y wellness-air current\n```\n\nThat's it — no token, no signup, no telemetry. Public reads use AirGradient's\ntoken-free worldwide feed, so any locationId in that feed works out of the box.\n\n## Install in Claude Desktop / Cursor / ChatGPT Desktop / Codex\n\n```jsonc\n{\n  \"mcpServers\": {\n    \"wellness-air\": {\n      \"command\": \"npx\",\n      \"args\": [\"-y\", \"wellness-air\"],\n      \"env\": {\n        \"WELLNESS_AIR_DEFAULT_PROVIDER\": \"airgradient\",\n        \"WELLNESS_AIR_DEFAULT_LOCATION\": \"89\"\n      }\n    }\n  }\n}\n```\n\nReload your client. The agent now has 19 air-quality tools.\n\n## Tools (19 total)\n\n| Tool | Purpose |\n|---|---|\n| `air_agent_manifest` | Runtime contract: tool list, supported clients, env vars, recommended first calls |\n| `air_capabilities` | Supported providers, configured providers, available metrics, privacy modes |\n| `air_connection_status` | Health check + warnings the agent should surface |\n| `air_privacy_audit` | What is logged locally vs sent to providers |\n| `air_data_inventory` | Metric catalog + AQI band thresholds |\n| **`air_current_reading`** | **Latest sensor reading (PM2.5, CO₂, AQI, temp, humidity)** |\n| `air_list_devices` | List devices on an authenticated provider account (AirThings) |\n| **`air_aqi_check`** | **Fast 'is the air OK?' answer with band + recommendation** |\n| `air_daily_summary` | Synthesized daily snapshot |\n| `air_compare_locations` | Compare AQI across 2-10 locations |\n| `air_search_public_sensors` | Discovery helper for AirGradient public map |\n| `air_quickstart` | Personalized 3-step setup walkthrough based on current env state |\n| `air_profile_get` | Read the shared Delx Wellness profile (location, sensitivities, units) |\n| `air_profile_update` | Persist a non-secret patch to the shared wellness profile (explicit intent required) |\n| `air_onboarding` | 11-question onboarding flow for the shared wellness profile |\n| `air_demo` | Realistic example payloads — preview output before configuring anything |\n| `air_health_recommendation` | PM2.5/CO₂/VOC → WHO/EPA bands + plain-language actions |\n| `air_health_bands` | Classify PM2.5/PM10/CO₂/VOC into WHO 2021 / EPA / ASHRAE / UBA bands + citations |\n| `air_trend` | Windowed trend analysis (mean/median/rate-of-change/peaks) for PM2.5/CO₂/VOC |\n\n## Why local-first?\n\n- **Public sensors require zero auth.** AirGradient runs an open public API; just pass a `locationId`.\n- **Owned-sensor tokens stay on your machine.** Set `AIRGRADIENT_API_TOKEN` only if you own a sensor.\n- **No telemetry.** wellness-air never phones home. The only outbound calls go to the providers you configure.\n- **Read-only.** No tool mutates anything upstream. (`air_profile_update` writes only to your local shared wellness profile, never to a provider, and requires explicit user intent.)\n\n## Cross-connector wedge\n\nWhere this gets interesting: pair it with the rest of the Delx Wellness stack.\n\n```\nWHOOP recovery 47   +   wellness-air AQI 132 (unhealthy_sensitive)\n       ↓                          ↓\n   Coach: \"Recovery's low AND the bedroom AQI was unhealthy last night.\n           Skip outdoor cardio today — try mobility + low-intensity strength indoors with HEPA running.\"\n```\n\nMost agents miss the room-quality variable entirely. wellness-air closes that gap.\n\n## Privacy\n\nRun `wellness-air doctor` to inspect the local privacy posture. Highlights:\n\n- All readings cached under `~/.wellness-air` (configurable).\n- Provider tokens never returned to the agent.\n- No biometric data — environmental only.\n- Tool outputs explicitly tagged with their data source for downstream auditability.\n\n## Roadmap\n\n**Shipped:** AirGradient (public + owned) · AirThings · PurpleAir adapters · WHO/EPA/ASHRAE/UBA health bands · windowed trend analysis (`air_trend`) · shared Delx Wellness profile + onboarding.\n\n**Next:**\n- IQAir AirVisual + Awair adapters.\n- Cross-correlation helper (e.g. `air_correlate_with_sleep`) against the rest of the Delx Wellness stack.\n- Webhook trigger for AQI thresholds (agent gets notified when AQI crosses a band).\n\n## 📧 Contact & Support\n\n- 📨 **support@delx.ai** — general questions, integration help, partnerships\n- 🐛 **Bug reports / feature requests** — [GitHub Issues](https://github.com/davidmosiah/wellness-air/issues)\n- 🐦 **Updates** — [@delx369](https://x.com/delx369) on X\n- 🌐 **Site** — [wellness.delx.ai](https://wellness.delx.ai)\n\n\n## License\n\nMIT — see [LICENSE](LICENSE).\n\n<sub>wellness-air is an unofficial connector. AirGradient, AirThings, PurpleAir, IQAir, and Awair are trademarks of their respective owners. None of those companies are affiliated with or endorse this project.</sub>\n\n## Skill or MCP\n\nSame package, two doors. MCP registers tools on stdio/HTTP. The [skill](skill/SKILL.md) can drive the **same** tools through the CLI when the client has no MCP:\n\n```bash\nnpx -y wellness-air call air_connection_status --json '{}'\n```\n\nCopy `skill/SKILL.md` into your agent skills dir.\n",
  "bytes": 9089,
  "sha": "5c742e5d4248d7562ca4c03aefa89fe1b969f0d2d3e5b2f5a70d7440f92b7184",
  "repo_slug": "davidmosiah/wellness-air",
  "fonte": "repo",
  "truncated": false,
  "api": "https://agentalog.com/api/listings/mcp_io_github_davidmosiah_wellness_air_08e4ec60/readme"
}