Skip to main content
Glama

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

qingping_current

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

qingping_history

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

qingping_alerts

Triggered alerts (thresholds set in the app)

qingping_set_intervals

Measurement and cloud upload intervals

Related MCP server: mcp-airq-cloud

Setup

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

  2. Build the server:

    git clone https://github.com/nicolascoutureau/qingping-mcp.git
    cd qingping-mcp
    npm install && npm run build
  3. Put the keys in a .env file at the project root (it is git-ignored):

    QINGPING_APP_KEY=...
    QINGPING_APP_SECRET=...

    or pass them as environment variables.

  4. 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_intervals can 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 Inspector

License

MIT

Available Tools

4 tools
qingping_alertsTriggered alertsA
Read-only

Alerts triggered by a Qingping sensor over a period (thresholds set in the Qingping app, e.g. CO₂ > 1000 ppm).

NameRequiredDescriptionDefault
endNoEnd, ISO 8601. Default: now.
hoursNoThe last N hours (default 24). Ignored when start is given.
startNoStart, ISO 8601 (e.g. 2026-11-06T22:00:00+01:00).
deviceNoDevice name or MAC address. Optional when the account has a single device.

TDQS

A3.5/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 readingsA
Read-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.

NameRequiredDescriptionDefault
deviceNoDevice name or MAC address. Optional when the account has a single device.

TDQS

A3.7/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 historyA
Read-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".

NameRequiredDescriptionDefault
endNoEnd, ISO 8601. Default: now.
hoursNoThe last N hours (default 24). Ignored when start is given.
startNoStart, ISO 8601 (e.g. 2026-11-06T22:00:00+01:00).
deviceNoDevice name or MAC address. Optional when the account has a single device.
metricsNoRestrict to these metrics (e.g. ["co2","pm25"]). Default: all.
max_pointsNoMax number of points in the returned series (0 = summary only, default 0).

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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 intervalsA
Idempotent

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.

NameRequiredDescriptionDefault
deviceNoDevice name or MAC address. Optional when the account has a single device.
report_interval_minYesUpload to the cloud every N minutes.
collect_interval_minYesMeasure every N minutes.

TDQS

A3.6/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

  1. 4 tool updatesv0.1.0
    • First observedqingping_alerts
    • First observedqingping_current
    • First observedqingping_history
    • First observedqingping_set_intervals

TDQS

A4/5.0

Scored across 4 tools

Disambiguation5/5

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.

Naming Consistency5/5

All tools use a consistent `qingping_` prefix followed by a concise snake_case noun or verb phrase. The pattern is predictable and readable throughout.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo recent community issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables interaction with the World Air Quality Index to fetch real-time air quality data for cities and coordinates worldwide via Model Context Protocol (MCP).
    1
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP 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 PyPI
    Apache 2.0
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables 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.
    -