qingping-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@qingping-mcpWhat's the CO₂ level in the bedroom right now?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
qingping-mcp
MCP server for Qingping air quality monitors (Air Monitor CGS1, Air Monitor 2, Lite, thermometers…), through the official cloud Open API.
Ask Claude (or any MCP client): "what's the CO₂ in the bedroom?", "did CO₂ go above 1000 ppm last night?", "show me the PM2.5 curve over 7 days".
Tools
Tool | What it does |
| Latest readings (CO₂, PM2.5, PM10, tVOC, temperature, humidity, battery…) with a plain-language level (good / high — ventilate…), the age of the reading and a warning when it is stale |
| History over a period: min / max / average per metric, time of the peak, minutes above thresholds (CO₂ > 1000 / 1500 ppm, PM2.5 > 15 / 35, humidity > 60 / 70 %), share of the period actually covered, optional series to draw a chart |
| Triggered alerts (thresholds set in the app) |
| Measurement and cloud upload intervals |
Related MCP server: mcp-airq-cloud
Setup
On developer.qingping.co, log in with the Qingping+ / Qingping IoT account that owns your sensors, then Access management → copy the App Key and App Secret.
Build the server:
git clone https://github.com/nicolascoutureau/qingping-mcp.git cd qingping-mcp npm install && npm run buildPut the keys in a
.envfile at the project root (it is git-ignored):QINGPING_APP_KEY=... QINGPING_APP_SECRET=...or pass them as environment variables.
Add the server to Claude Code:
claude mcp add -s user qingping -- node /path/to/qingping-mcp/dist/index.js
Troubleshooting
The device is listed but has no reading at all (
readingAt: null, empty history, "No historical data" in the app): the sensor is not reaching the Qingping cloud. Check the date and time on the sensor's screen: if they are wrong (e.g. 2015), it is connected to Wi-Fi but has no Internet access. Reset its Wi-Fi and pair it again in the app (2.4 GHz network). The app's "Now" values may arrive over Bluetooth and hide the problem.Freshness: the cloud only knows what the sensor uploads (every 15 min by default).
qingping_set_intervalscan bring it down to a few minutes for a plugged-in device.tVOC: the API returns it in ppb (the app shows mg/m³).
Development
npm test # tests (simulated API)
npm run inspect # MCP InspectorLicense
MIT
Available Tools
4 toolsqingping_alertsTriggered alertsARead-only
Alerts triggered by a Qingping sensor over a period (thresholds set in the Qingping app, e.g. CO₂ > 1000 ppm).
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | End, ISO 8601. Default: now. | |
| hours | No | The last N hours (default 24). Ignored when start is given. | |
| start | No | Start, ISO 8601 (e.g. 2026-11-06T22:00:00+01:00). | |
| device | No | Device name or MAC address. Optional when the account has a single device. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The readOnlyHint annotation already establishes this as a safe read. The description adds genuinely useful context by noting thresholds are configured in the Qingping app, implying this tool cannot create or modify alerts. However, it says nothing about result ordering, empty results when no alerts fired, or how many alerts can be returned.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with no filler; the parenthetical example earns its place by making the alert concept concrete. Slightly compressed phrasing ('over a period') is the only weakness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter read-only query with full schema coverage and no output schema, the description covers what the tool returns conceptually and where thresholds come from. Missing only return-shape hints, which is a minor gap given the annotations and schema do the rest.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so start, end, hours and device are already fully documented with defaults and constraints. The description only echoes the 'over a period' notion and adds no detail about the optional device scoping or the hours-vs-start precedence beyond what the schema states.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific resource (alerts triggered by a Qingping sensor) and a scope (over a period), with a concrete example of what an alert looks like (CO₂ > 1000 ppm). It implicitly separates itself from qingping_current and qingping_history by returning alerts rather than readings, though it never names those siblings.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the tool for threshold breach events rather than raw measurements, but the description gives no explicit when-to-use or when-not-to-use guidance and never points to the sibling tools for readings or interval settings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qingping_currentCurrent readingsARead-only
Latest readings of Qingping sensors (CO₂, PM2.5, PM10, tVOC, temperature, humidity, battery…) with a plain-language level (good / high — ventilate…). readingAt / ageMin give the time and age of the reading: the sensor only sends to the cloud once per report interval (often 15 min). staleWarning appears when the reading is late relative to that interval.
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | Device name or MAC address. Optional when the account has a single device. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations only declare readOnlyHint, but the description supplies genuinely useful behavioral context: the cloud only receives data once per report interval (often 15 min), so readings can be late, and staleWarning signals lateness. That freshness semantics is exactly the kind of non-obvious trait an agent needs. It stops short of covering failure modes such as unknown device names or multi-device ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loaded with the resource and the metric list, then the freshness semantics; every sentence carries information. The parenthetical metric enumeration with an ellipsis and the 'good / high — ventilate…' shorthand make it slightly loose, but nothing is padding.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly takes on the burden of explaining return fields (readingAt, ageMin, staleWarning) and the level interpretation, which is what an agent needs to reason about the payload. Only the device-resolution behavior is left unaddressed.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100% for the single optional 'device' parameter, so the schema already explains that a name or MAC is accepted and optional for single-device accounts. The description never mentions device selection at all, adding nothing beyond the schema — baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Latest readings of Qingping sensors') and enumerates the covered metrics (CO₂, PM2.5, PM10, tVOC, temperature, humidity, battery). The word 'Latest' implicitly separates it from qingping_history, but no sibling is named, so differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: 'Latest' suggests polling current state rather than retrieving a time series (qingping_history) or configuring reporting (qingping_set_intervals). There is no explicit when-to-use or when-not-to-use statement and no routing to alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qingping_historyReading historyARead-only
History of a Qingping sensor over a period. Returns, per metric, min / max / average / first / last value, the time of the min and max, and the minutes spent above thresholds (CO₂ > 1000 and > 1500 ppm, PM2.5 > 15 and > 35, humidity > 60 and > 70 %). With max_points > 0, also returns the series (averaged per bucket) to draw a chart. coverage gives the share of the period actually measured: an empty or partial history means "no data", not "nothing to report".
| Name | Required | Description | Default |
|---|---|---|---|
| end | No | End, ISO 8601. Default: now. | |
| hours | No | The last N hours (default 24). Ignored when start is given. | |
| start | No | Start, ISO 8601 (e.g. 2026-11-06T22:00:00+01:00). | |
| device | No | Device name or MAC address. Optional when the account has a single device. | |
| metrics | No | Restrict to these metrics (e.g. ["co2","pm25"]). Default: all. | |
| max_points | No | Max number of points in the returned series (0 = summary only, default 0). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
readOnlyHint=true already tells the agent this is a safe read, so the description's job is to add behavior — and it does: it discloses the exact summary fields returned, that series points are averaged per bucket, and the important caveat that partial coverage should be read as 'no data', not 'nothing to report'. It does not mention auth/device prerequisite handling beyond what the schema says, but the return-side transparency is substantial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two dense sentences, front-loaded with the resource and the return shape; every clause carries information. The long parenthetical threshold list is verbose but genuinely useful, so it earns its place; a slightly more scannable structure would push this higher.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, yet the description adequately documents the return shape (statistics, timestamps, exceedance minutes, optional series, coverage) and flags the key interpretive pitfall. For a 6-parameter read tool this is nearly complete; small gaps remain around units, pagination/limits, and how metrics default interacts with per-metric results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 100%, so baseline would be 3; the description earns a 4 by explaining what max_points functionally changes (series vs summary-only, bucketed averaging) and by defining the threshold semantics behind the exceedance counts (CO₂ > 1000/1500 ppm, PM2.5 > 15/35, humidity > 60/70 %). It adds no extra meaning for device, start, end, or hours beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a concrete resource and action — a Qingping sensor's history over a time period — and enumerates the returned statistics (min/max/avg/first/last, timestamps, threshold-exceedance minutes). It clearly implies the historical, over-a-period framing that separates it from qingping_current, but it never names the sibling or explicitly contrasts with it.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: 'With max_points > 0, also returns the series ... to draw a chart' hints at the charting use case, and the coverage note warns that empty/partial history means 'no data'. However, there is no explicit when-to-use versus qingping_current, no mention of qingping_alerts for threshold breaches, and no guidance on choosing hours vs start/end.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
qingping_set_intervalsSet intervalsAIdempotent
Changes the measurement (collect) and cloud upload (report) intervals of a Qingping sensor. A short report interval gives fresher data but drains the battery faster when the device is not plugged in.
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | Device name or MAC address. Optional when the account has a single device. | |
| report_interval_min | Yes | Upload to the cloud every N minutes. | |
| collect_interval_min | Yes | Measure every N minutes. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, so safety and repeat-call behavior are covered. The description adds one genuinely useful non-obvious trait — a short report interval drains battery when unplugged — but says nothing about whether the device must be online, whether changes apply immediately, or whether intervals affect already-stored history.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: purpose first, then the battery tradeoff that affects how the agent should choose report_interval_min. No filler, no restating of the title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a full-coverage schema and annotations carrying the safety profile, the description only needs purpose plus the operational caveat, both of which are present. The remaining gap is preconditions for a write against physical hardware (device reachability, effect timing), which an agent would otherwise have to guess.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already states 'Measure every N minutes' and 'Upload to the cloud every N minutes', so the description's collect/report mapping is largely redundant. The optional 'device' parameter is not mentioned at all in the description.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb ('Changes') and two specific resources ('measurement (collect)' and 'cloud upload (report) intervals of a Qingping sensor'), and even disambiguates the collect/report naming. It does not reference any sibling tool, but the write-to-device scope makes it clearly distinct from the read-oriented qingping_current/history/alerts.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied: an agent can infer this is the tool for tuning sampling/upload frequency. There is no explicit when-to-use, no when-not-to-use, no prerequisites (device online, plugged in, account permissions), and no mention of alternatives such as reading current settings first via qingping_current.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.1.0- First observed
qingping_alerts - First observed
qingping_current - First observed
qingping_history - First observed
qingping_set_intervals
TDQS
Scored across 4 tools
The four tools map to clearly distinct operations: latest readings, historical aggregation, alert retrieval, and interval configuration. There is no meaningful overlap between current vs. history or alerts vs. readings.
All tools use a consistent `qingping_` prefix followed by a concise snake_case noun or verb phrase. The pattern is predictable and readable throughout.
Four tools is well-scoped for a focused sensor-monitoring server, with each tool covering a distinct part of the lifecycle. No tool feels redundant or out of place.
The surface covers live readings, history, alerts, and device interval configuration, which are the core monitoring workflows. A device listing or sensor inventory tool would help multi-sensor setups, but the existing set is otherwise complete.
Maintenance
Related MCP Connectors
Air Quality MCP — wraps air-quality-api.open-meteo.com (free, no auth)
OpenAQ MCP — global air-quality measurements via the OpenAQ v3 API.
Hosted MCP server for Xweather weather data: conditions, forecasts, alerts, and more.
OpenWeather MCP — wraps the OpenWeatherMap API (openweathermap.org)
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables interaction with the World Air Quality Index to fetch real-time air quality data for cities and coordinates worldwide via Model Context Protocol (MCP).1MIT
- AlicenseNot gradedqualityCmaintenanceMCP server for the air-Q Cloud API, enabling remote retrieval of air quality sensor data and historical analysis through read-only tools like listing devices, fetching readings, and exporting charts or data.46 PyPIApache 2.0
- AlicenseNot gradedqualityCmaintenanceEnables querying of official Netherlands air quality data from the RIVM Luchtmeetnet API via MCP tools.428 npmMIT
- FlicenseNot gradedqualityCmaintenanceEnables retrieval of real-time air quality data from IQAir, including AQI, pollutant levels, weather, and forecasts for any location, via an MCP-compatible interface without an official API key.-