Wellness Air

io.github.davidmosiah由 GitHub 帳號 davidmosiah 發布v0.5.6更新於 Oct 24, 2026

Local-first air-quality MCP for AI agents — AirGradient, AirThings, PurpleAir, IQAir, Awair.

已驗證STDIO僅桌面位置與生活資料與分析

概覽

AI 產生的概覽

本地優先的 MCP 伺服器,讓 AI 助理讀取公共與自有感測器的空氣品質資料,並提供 AQI 判斷、健康分級與趨勢分析。

可以做什麼
讀取最新感測器資料(PM2.5、CO₂、AQI、溫度、濕度),快速回答空氣品質是否良好並給出分級與建議,還可產生每日摘要、比較 2 至 10 個地點。探索 AirGradient 公共感測器,並列出已驗證 AirThings 帳號下的裝置。依 WHO、EPA、ASHRAE、UBA 標準分類讀值,並分析時間區間內的均值、中位數、變化速率與峰值。檢視支援的能力、連線狀態、指標清單,以及本機記錄與傳送給供應商的隱私稽核。讀取、更新並引導填寫共用的本機健康檔案,也可在設定前預覽範例資料。
適用情境
適合希望助理把室內空氣品質納入睡眠、恢復、專注或訓練建議的情境,也適合不需註冊即可查詢附近公共感測器。已在使用健康資料追蹤、想補上環境資訊的設定同樣適用。
執行需求
透過 npx 以本機程序執行(需要 Node.js)。預設使用 stdio 傳輸;可透過 WELLNESS_AIR_HOST、WELLNESS_AIR_PORT 與 WELLNESS_AIR_TRANSPORT 啟用僅限本機回環的 HTTP。讀取 AirGradient 公共資料只需數字 locationId,例如透過 WELLNESS_AIR_DEFAULT_LOCATION 設定。自有 AirGradient 感測器需要 AIRGRADIENT_API_TOKEN;AirThings 與 PurpleAir 需要自備供應商憑證。需要能連線至所設定的供應商網路。
安裝前請注意
AIRGRADIENT_API_TOKEN 以及 AirThings、PurpleAir 的金鑰在本機設定,應視為機密資訊保管。對外請求只會送往你設定的供應商,讀值會快取在本機目錄。多數工具為唯讀,但 air_profile_update 會寫入本機共用健康檔案,需明確意圖才會執行。不涉及生物特徵資料,輸出僅為環境資料。

安裝

在 SourceWeft 中

  1. 開啟 儀表板中的 Wellness Air,將其新增到工作區。
  2. 為需要使用其工具的對話啟用該服務。

Desktop only,透過 STDIO。 STDIO 服務會啟動本機處理程序,因此需要 SourceWeft 桌面主機。

其他 MCP 客戶端

參照 儲存庫 中的啟動說明。

README

Wellness Air

Local-first air-quality MCP for AI agents.
Plug an AirGradient/AirThings/PurpleAir sensor into your agent — no tokens leave your machine.

[npm version] [npm downloads] [License MIT] [Site]

[GitHub stars] [Built for MCP] [Hermes one-command setup] [OpenClaw one-command setup] [Delx Wellness Hub]

📡 Why this exists: your sleep / focus / training results are partly a room-quality problem. PM2.5 above 35, CO₂ above 1,000 ppm, low humidity — those wreck recovery and the agent can't see them. wellness-air gives any AI agent local-first environmental context to cross with WHOOP / Oura / Garmin / nourish.

⚡ One-command install — pick your runtime:

Or wire it standalone into Claude Desktop / Cursor / ChatGPT Desktop — see the install section below.


HTTP (v2 stateless)

Default is stdio. Optional Streamable HTTP — no session id, JSON responses, loopback only:

bash
npx -y [email protected] --http# GET  http://127.0.0.1:3000/health# POST http://127.0.0.1:3000/mcp   (sessionless)

Env: WELLNESS_AIR_HOST, WELLNESS_AIR_PORT, WELLNESS_AIR_TRANSPORT=http.

Overview

Wellness 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.

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.

Try It In 60 Seconds

bash
# 89 is a real, public AirGradient sensor (Prem Tinsulanonda School, Thailand).# Swap in one near you from https://www.airgradient.com/map/ — copy the numeric# locationId from the URL.
WELLNESS_AIR_DEFAULT_LOCATION=89 npx -y [email protected] doctorWELLNESS_AIR_DEFAULT_LOCATION=89 npx -y [email protected] current

That's it — no token, no signup, no telemetry. Public reads use AirGradient's token-free worldwide feed, so any locationId in that feed works out of the box.

Install in Claude Desktop / Cursor / ChatGPT Desktop / Codex

jsonc
{  "mcpServers": {    "wellness-air": {      "command": "npx",      "args": ["-y", "[email protected]"],      "env": {        "WELLNESS_AIR_DEFAULT_PROVIDER": "airgradient",        "WELLNESS_AIR_DEFAULT_LOCATION": "89"      }    }  }}

Reload your client. The agent now has 19 air-quality tools.

Tools (19 total)

ToolPurpose
air_agent_manifestRuntime contract: tool list, supported clients, env vars, recommended first calls
air_capabilitiesSupported providers, configured providers, available metrics, privacy modes
air_connection_statusHealth check + warnings the agent should surface
air_privacy_auditWhat is logged locally vs sent to providers
air_data_inventoryMetric catalog + AQI band thresholds
air_current_readingLatest sensor reading (PM2.5, CO₂, AQI, temp, humidity)
air_list_devicesList devices on an authenticated provider account (AirThings)
air_aqi_checkFast 'is the air OK?' answer with band + recommendation
air_daily_summarySynthesized daily snapshot
air_compare_locationsCompare AQI across 2-10 locations
air_search_public_sensorsDiscovery helper for AirGradient public map
air_quickstartPersonalized 3-step setup walkthrough based on current env state
air_profile_getRead the shared Delx Wellness profile (location, sensitivities, units)
air_profile_updatePersist a non-secret patch to the shared wellness profile (explicit intent required)
air_onboarding11-question onboarding flow for the shared wellness profile
air_demoRealistic example payloads — preview output before configuring anything
air_health_recommendationPM2.5/CO₂/VOC → WHO/EPA bands + plain-language actions
air_health_bandsClassify PM2.5/PM10/CO₂/VOC into WHO 2021 / EPA / ASHRAE / UBA bands + citations
air_trendWindowed trend analysis (mean/median/rate-of-change/peaks) for PM2.5/CO₂/VOC

Why local-first?

  • Public sensors require zero auth. AirGradient runs an open public API; just pass a locationId.
  • Owned-sensor tokens stay on your machine. Set AIRGRADIENT_API_TOKEN only if you own a sensor.
  • No telemetry. wellness-air never phones home. The only outbound calls go to the providers you configure.
  • 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.)

Cross-connector wedge

Where this gets interesting: pair it with the rest of the Delx Wellness stack.

WHOOP recovery 47   +   wellness-air AQI 132 (unhealthy_sensitive)       ↓                          ↓   Coach: "Recovery's low AND the bedroom AQI was unhealthy last night.           Skip outdoor cardio today — try mobility + low-intensity strength indoors with HEPA running."

Most agents miss the room-quality variable entirely. wellness-air closes that gap.

Privacy

Run wellness-air doctor to inspect the local privacy posture. Highlights:

  • All readings cached under ~/.wellness-air (configurable).
  • Provider tokens never returned to the agent.
  • No biometric data — environmental only.
  • Tool outputs explicitly tagged with their data source for downstream auditability.

Roadmap

Shipped: AirGradient (public + owned) · AirThings · PurpleAir adapters · WHO/EPA/ASHRAE/UBA health bands · windowed trend analysis (air_trend) · shared Delx Wellness profile + onboarding.

Next:

  • IQAir AirVisual + Awair adapters.
  • Cross-correlation helper (e.g. air_correlate_with_sleep) against the rest of the Delx Wellness stack.
  • Webhook trigger for AQI thresholds (agent gets notified when AQI crosses a band).

📧 Contact & Support

License

MIT — see LICENSE.

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.

Skill or MCP

Same package, two doors. MCP registers tools on stdio/HTTP. The skill can drive the same tools through the CLI when the client has no MCP:

bash
npx -y [email protected] call air_connection_status --json '{}'

Copy skill/SKILL.md into your agent skills dir.

0.8.0 — candidate (2026-11-02)

This is a release candidate, not evidence of an npm publication. Existing installations are not updated automatically.

Migration and security boundaries

  • HTTP transport accepts loopback only. LAN addresses and wildcard binds are rejected; use stdio or a local loopback client instead.
  • Wellness profiles are validated, limited to 256 KiB, and protected with a cooperative lock. Oversized or invalid existing profiles must be corrected before use. Symbolic links, including dangling links and legacy profile paths, are rejected. These checks do not guarantee safety against a hostile local filesystem or non-cooperating processes.
  • MCP inputs have a 10,000-element budget and HTTP bodies are limited to 1 MiB; compressed request bodies are rejected. Previously accepted oversized requests may now fail; reduce request sizes rather than disabling validation.
  • Dependency fixes are included. Upgrade explicitly after publication and restart the connector; old installations retain their previous behavior.

來源:README.md,提交 0cc0f1c

工具

0
SourceWeft 尚未在沙箱中啟動過該軟體包,因此其工具未知。

版本歷史

1
  1. v0.5.6最新Sep 16, 2026

評分

已滿足適用檢查項的 50%

該評分衡量此收錄條目的完整程度,依據註冊中心條目、端點與公開來源計算得出。它不是對伺服器本身的評價,也不表示伺服器安全或目前可用:可連通性是帶日期的檢查結果,評分也不包含安裝量或使用者評價。

  • 近 30 天內可連通25 分

    請保持端點能夠回應 MCP 握手;SourceWeft 每 30 天探測一次。

  • 已宣告認證方式10 分

    請在註冊中心條目中宣告憑證請求標頭,或保持端點能夠回應探測,以便判定其認證方式。

  • 已列出工具15 分

    請讓伺服器在無憑證時回應 tools/list,或發布可在沙箱中無憑證啟動的軟體包。

  • 描述必需15 分
  • 圖示10 分
  • 文件15 分
  • 授權條款10 分