MCP server for direct HTTP communication with air-Q air quality sensor devices
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag β we're steadily working through the catalog.
π‘ Paste into ~/Library/Application Support/Claude/claude_desktop_config.json (macOS) or %APPDATA%\Claude\claude_desktop_config.json (Windows)
Inspect callable tools, capabilities, and parameters exposed to AI agents by Air Q.
list_devicesList all configured air-Q devices (with location/group if set)
get_air_qualityGet sensor readings β by `device`, `location`, or `group
get_air_quality_historyGet historical sensor data as column-oriented JSON
plot_air_quality_historyRender one historical chart per sensor across all matching devices
export_air_quality_historyExport one historical sensor as one `csv`/`xlsx` across matching devices
get_device_infoGet device metadata (name, model, firmware version)
MCP server for air-Q air quality sensor devices. Enables Claude Desktop, Claude Code, and other MCP clients to directly query and configure air-Q devices on your local network.
Built on aioairq, the official async Python library for air-Q.
The same mcp-airq executable also works as a direct CLI when you pass a tool
name as a subcommand.
Or run directly with uvx:
Use the same command directly from the shell:
For historical plots and exports:
device, location, and group to combine all configured devices into one artifactlocation or group to combine only the matching devicesplot_air_quality_history returns one file per requested sensor, with one series per matching deviceexport_air_quality_history returns one CSV/XLSX file per request, with rows for all matching devicesThe CLI subcommands mirror the MCP tool names. Both styles work:
To force MCP server mode from an interactive terminal, run:
The CLI is pipe-friendly: successful command output goes to stdout, while
tool errors go to stderr with exit code 1.
Create a JSON file with your device(s), e.g. ~/.config/airq-devices.json:
Each entry requires:
address β IP address or mDNS hostname (e.g. abcde_air-q.local)password β Device password (default: airqsetup)name (optional) β Human-readable name; defaults to addresslocation (optional) β Physical room/area for grouping (e.g. "Living Room")group (optional) β Second grouping dimension, orthogonal to location (e.g. "Home", "Work")Then restrict access to the file (it contains passwords):
Alternatively, pass the device list inline via the AIRQ_DEVICES environment variable as a JSON string.
Add to your claude_desktop_config.json:
Register the server once via the CLI:
This writes to ~/.claude/settings.json and is automatically picked up by the Claude Code VSCode extension as well β no separate configuration needed.
If the server fails to connect: MCP servers run in a subprocess that may not inherit your shell's PATH. Replace
uvxwith its full path (which uvxβ e.g./home/you/.local/bin/uvx):
Register the server once via the CLI:
This writes to ~/.codex/config.toml and is automatically picked up by the Codex VSCode extension as well.
If the server fails to connect: Use the full path to
uvx(see note above).
| Tool | Description |
|---|---|
list_devices | List all configured air-Q devices (with location/group if set) |
get_air_quality | Get sensor readings β by device, location, or group |
get_air_quality_history | Get historical sensor data as column-oriented JSON |
plot_air_quality_history | Render one historical chart per sensor across all matching devices |
export_air_quality_history | Export one historical sensor as one csv/xlsx across matching devices |
get_device_info | Get device metadata (name, model, firmware version) |
get_config | Get full device configuration |
get_logs | Get device log entries |
identify_device | Make device blink its LEDs for visual identification |
get_led_theme | Get current LED visualization theme |
get_possible_led_themes | List all available LED visualization themes |
get_night_mode | Get current night mode configuration |
get_brightness_config | Get current LED brightness configuration |
| Tool | Description |
|---|---|
set_device_name | Rename a device |
set_led_theme | Change LED visualization (COβ, VOC, Humidity, PM2.5, β¦) |
set_night_mode | Configure night mode schedule and settings |
set_brightness | Adjust LED brightness (day/night) |
configure_network | Set static IP or switch to DHCP |
| Tool | Description |
|---|---|
restart_device | Restart the device (~30s downtime) |
shutdown_device | Shut down the device (manual restart required) |
When multiple devices are configured, specify which device to query:
"air-Q Pro""pro", "radon"If only one device is configured, it is selected automatically.
get_air_quality accepts two optional grouping parameters:
location β query all devices in the same room (e.g. "Living Room")group β query all devices sharing a group tag (e.g. "Home")Both are independent: a device can have a location, a group, both, or neither. Matching is case-insensitive and substring-based.
Exactly one of device, location, or group may be specified per call.
Three tools provide access to data stored on the device's SD card:
plot_air_quality_history renders a chart for one sensor. When multiple devices
match, each device becomes a separate series in the same chart.

Single device (24 h, area chart, PNG)

Multiple devices at one location (24 h, area chart, PNG)
Output formats: png (default), webp, svg, html (interactive Plotly chart with hover tooltips and zoom)
Customization: --title, --x-axis-title, --y-axis-title, --chart-type (line/area), --dark, --timezone-name
export_air_quality_history produces one CSV or Excel file containing all matching devices.
get_air_quality_history returns column-oriented JSON, useful for programmatic analysis.
| Parameter | Default | Description |
|---|---|---|
--last-hours | 1 (history) / 24 (plot) | Hours of data to retrieve |
--from-datetime / --to-datetime | β | ISO 8601 time range (overrides --last-hours) |
--max-points | 300 | Downsample to at most N evenly spaced points |
--timezone-name | UTC | IANA timezone for timestamps (e.g. Europe/Berlin) |
The repository uses a project-local .venv plus uv.lock for reproducible tooling.
Run all developer commands through uv run, for example:
version in pyproject.toml.v0.1.1.The publish workflow validates that the release tag matches pyproject.toml, uploads the package to PyPI, and then publishes the same version to the MCP Registry.
Apache License 2.0 β see LICENSE.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/air-q)<a href="https://allmcps.com/mcp/air-q"><img src="https://allmcps.com/api/badge/air-q?style=directory" alt="Air Q on AllMCPs" /></a>