mcp-ambee
OfficialAmbee MCP Server
The official Model Context Protocol server for Ambee. It gives any MCP-compatible AI assistant — Claude, ChatGPT, Cursor, VS Code, Ollama, and more — direct access to live air quality, pollen, and weather data.
Point your assistant at this server and it can answer questions like "Is it a bad tree pollen day in Atlanta?" or "Should we move the Saturday offsite indoors?" by calling Ambee's data directly, instead of guessing from stale training data.
Looking for a ready to access server? Try our host Ambee MCP
Table of contents
Related MCP server: mcp-weather
Tools
Six tools — latest conditions and a 48-hour forecast for each of the three datasets:
Tool | Endpoint | Returns |
|
| AQI + CO/NO2/O3/PM10/PM2.5/SO2, dominant pollutant, category. 1 record. |
|
| Same fields, hourly. Up to 48 records. |
|
| Temperature, apparent temp, humidity, dew point, pressure, cloud cover, precipitation, wind, UV index, ozone, visibility, summary. 1 record. |
|
| Same fields, hourly. Up to 48 records. |
|
| Tree/grass/weed counts + risk levels, optional per-species breakdown. 1 record. |
|
| Same fields, hourly. Up to 48 records. |
Every tool accepts either:
lat+lng(numbers), orplace(free text, e.g."Bengaluru")
Sending both, or neither, is rejected client-side before any request is made. All /v3 endpoints accept place natively, so no separate geocoding step is needed.
Optional parameters:
locale(boolean) — adds alocalTimefield to each record.aqiStandard(air quality only) —EPA(default),IN,UK,CN, orCA.units(weather only) —imperial(default),metric, orsi.speciesRisk(pollen only) — include per-species risk levels where the region supports it.
Error handling
Every response is checked against Ambee's documented status codes:
Code | Meaning | How this server handles it |
200 | OK | Returned as normal tool output. |
206 | Partial data (quota ran out mid-response) | Returned as usable data, with a |
400 | Bad request | Returned as a tool error explaining likely cause (missing/invalid params). |
401 | Unauthorized | Returned as a tool error — check |
403 | Forbidden | Returned as a tool error — key lacks permission for this endpoint. |
404 | Not found | Returned as a tool error — no data for that location. |
422 | Quota exceeded | Returned as a tool error — plan quota hit. |
429 | Rate limited | Returned as a tool error — back off and retry. |
500 | Internal server error | Returned as a tool error — retry later. |
299 | Deprecated | Returned as a tool error — endpoint/feature not supported. |
Every non-2xx response comes back as an MCP tool error (isError: true) with a human-readable message combining Ambee's own error text and a short hint on what to do next, so the calling assistant can explain the failure instead of just surfacing a raw status code.
Requirements
Node.js 18+
An Ambee API key — get one free at the Ambee API dashboard
Install
git clone https://github.com/getambee/ambee-mcp-server.git
cd ambee-mcp-server
npm installConfigure
export AMBEE_API_KEY="your-ambee-api-key"Never commit your key or put it in a config file that goes into version control. See SECURITY.md for more on handling credentials safely.
Run standalone
npm startYou should see [ambee-mcp-server] running on stdio on stderr. The process communicates over stdio and will wait for MCP messages — that's expected.
Connect a client
The server speaks standard MCP over stdio, so it works with any compliant client. The command and environment variable are the same everywhere — only the config file format changes.
Claude Code
claude mcp add --transport stdio ambee \
-- node /absolute/path/to/ambee-mcp-server/src/index.js \
--env AMBEE_API_KEY=your-ambee-api-key
claude mcp list # confirm it shows as connectedClaude Desktop
Add to claude_desktop_config.json:
{
"mcpServers": {
"ambee": {
"command": "node",
"args": ["/absolute/path/to/ambee-mcp-server/src/index.js"],
"env": {
"AMBEE_API_KEY": "your-ambee-api-key"
}
}
}
}Cursor
Add to ~/.cursor/mcp.json (or the project-level .cursor/mcp.json):
{
"mcpServers": {
"ambee": {
"command": "node",
"args": ["/absolute/path/to/ambee-mcp-server/src/index.js"],
"env": {
"AMBEE_API_KEY": "your-ambee-api-key"
}
}
}
}VS Code (GitHub Copilot / MCP extension)
Add to .vscode/mcp.json:
{
"servers": {
"ambee": {
"command": "node",
"args": ["/absolute/path/to/ambee-mcp-server/src/index.js"],
"env": {
"AMBEE_API_KEY": "your-ambee-api-key"
}
}
}
}Windsurf
Add to ~/.codeium/windsurf/mcp_config.json:
{
"mcpServers": {
"ambee": {
"command": "node",
"args": ["/absolute/path/to/ambee-mcp-server/src/index.js"],
"env": {
"AMBEE_API_KEY": "your-ambee-api-key"
}
}
}
}Cline (VS Code extension)
Open Cline's MCP settings panel and add a new server with:
Command:
nodeArgs:
/absolute/path/to/ambee-mcp-server/src/index.jsEnvironment variable:
AMBEE_API_KEY=your-ambee-api-key
Or edit cline_mcp_settings.json directly using the same command / args / env shape as the examples above.
Zed
Add to Zed's settings.json under context_servers:
{
"context_servers": {
"ambee": {
"command": {
"path": "node",
"args": ["/absolute/path/to/ambee-mcp-server/src/index.js"],
"env": {
"AMBEE_API_KEY": "your-ambee-api-key"
}
}
}
}
}Ollama
Ollama's native app doesn't speak MCP directly yet, but any Ollama model can call this server through an MCP-aware bridge or agent framework, since Ollama exposes an OpenAI-compatible API that MCP client libraries (such as mcp-use or LangChain's MCP adapters) can route tool calls through. A minimal example using mcp-use with a local Ollama model:
from mcp_use import MCPAgent, MCPClient
from langchain_ollama import ChatOllama
client = MCPClient.from_dict({
"mcpServers": {
"ambee": {
"command": "node",
"args": ["/absolute/path/to/ambee-mcp-server/src/index.js"],
"env": {"AMBEE_API_KEY": "your-ambee-api-key"},
}
}
})
llm = ChatOllama(model="llama3.1")
agent = MCPAgent(llm=llm, client=client)
result = agent.run("What's the air quality in Bengaluru right now?")
print(result)ChatGPT (developer mode / custom connectors)
ChatGPT's MCP connector support (developer mode, Team/Enterprise workspaces) expects a remote HTTP server rather than a local stdio process. To expose this server that way, run it behind an MCP-to-HTTP gateway (e.g. mcp-remote or a small reverse proxy) and register the resulting URL as a custom connector in ChatGPT's settings.
Any other MCP client
Every MCP client ultimately needs the same three things — a command, args, and an env block:
{
"command": "node",
"args": ["/absolute/path/to/ambee-mcp-server/src/index.js"],
"env": {
"AMBEE_API_KEY": "your-ambee-api-key"
}
}Consult your client's docs for where this config block goes.
Example prompts
"How bad is the air in Los Angeles right now?"
"When is PM2.5 lowest tomorrow so I can run outside?"
"My kid has a grass allergy — is Saturday morning in Austin going to be rough for her?"
"What's the UV index at 90210 right now, in metric units?"
"Compare air quality between our Bengaluru and Austin offices."
Support
Issues / bugs: GitHub Issues
API support: support.getambee.com
API status: docs.ambeedata.com/api-status
Security reports: see SECURITY.md
Contributing
Contributions are welcome — see CONTRIBUTING.md for how to propose changes, our code style, and the PR process.
Notes
All tools are read-only; nothing here can modify your Ambee account or data.
MCP calls draw from the same Ambee API quota/rate limits as REST calls.
Only "latest" and "48-hour forecast" are exposed today. Ambee's
/v3API also supports historical data and 120-hour forecasts — see open issues or open a feature request.
License
Available Tools
6 toolsair_quality_forecastAir Quality – 48-Hour ForecastA
Returns an hourly air quality forecast for the next 48 hours: AQI plus CO, NO2, ozone, PM10, PM2.5, and SO2 concentrations for each hour, with the dominant pollutant and category. Returns up to 48 hourly records, or no data if none is available.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | Latitude of the location, -90 to 90. Required if place is not provided. | |
| lng | No | Longitude of the location, -180 to 180. Required if place is not provided. | |
| place | No | Place or city name, e.g. "Bengaluru". Required if lat/lng are not provided. Never send both place and lat/lng. | |
| locale | No | If true, the response includes a localTime field alongside each record. | |
| aqiStandard | No | AQI standard to calculate against. Defaults to EPA. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure. It does usefully mention that up to 48 records are returned and that no data is returned when unavailable. However, it does not describe behavior around missing or conflicting location parameters, invalid inputs, or response timezone/localization nuances, leaving some uncertainty.
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?
The description is two sentences with no filler. The first sentence explains the core return value and scope, and the second succinctly caps the record count and addresses the empty-data case. Every sentence earns its place.
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 read-only forecast tool with no output schema and no annotations, the description gives a solid picture of the response contents and shape. It does not restate the lat/lng-or-place requirement (which is covered in the schema), but it could have added a brief note about how locale or aqiStandard affect the output. Overall, it is largely complete.
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?
The input schema has 100% parameter description coverage, documenting lat, lng, place, locale, and aqiStandard with constraints and defaults. The tool description adds no parameter-specific semantics beyond the general output content, so the baseline of 3 is appropriate.
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 specific action ('returns an hourly air quality forecast'), a clear resource (air quality for the next 48 hours), and the contents (AQI, pollutant concentrations, dominant pollutant, category). It also naturally distinguishes itself from air_quality_latest by explicitly mentioning the forecast horizon and hourly granularity.
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?
The description clearly conveys that this tool is for future-facing air quality data over a 48-hour window, which sets it apart from 'latest' siblings. However, it does not explicitly name alternatives like air_quality_latest or weather_forecast, nor does it state conditions such as 'use this when you need forecast rather than current conditions'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
air_quality_latestAir Quality – LatestA
Returns the latest air quality reading for a location: AQI plus CO, NO2, ozone, PM10, PM2.5, and SO2 concentrations, with the dominant pollutant and category. Returns a single record for the current hour, or no data if none is available for that location.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | Latitude of the location, -90 to 90. Required if place is not provided. | |
| lng | No | Longitude of the location, -180 to 180. Required if place is not provided. | |
| place | No | Place or city name, e.g. "Bengaluru". Required if lat/lng are not provided. Never send both place and lat/lng. | |
| locale | No | If true, the response includes a localTime field alongside each record. | |
| aqiStandard | No | AQI standard to calculate against. Defaults to EPA. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the behavioral disclosure burden. It usefully discloses that the tool returns a single record for the current hour, may return no data, and includes dominant pollutant and category. It could add more detail about response shape or edge cases, but it covers the most important behavioral traits.
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?
The description is two sentences with no filler. It front-loads the core purpose, then immediately lists the returned measurements and the single-record/no-data behavior. Every sentence earns its place.
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, so a good description must convey what the tool returns; this one does, including pollutant set and cardinality. Combined with full parameter documentation in the schema, the definition gives an agent enough to select and call the tool correctly, though a bit more detail on response structure would be helpful.
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%, so the schema already documents all five parameters including lat/lng/place mutual exclusivity, locale behavior, and aqiStandard enum. The description adds no parameter-level meaning, but the baseline of 3 is appropriate because the schema does the heavy lifting.
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 specific verb ('Returns') and resource ('latest air quality reading for a location'), enumerates the exact pollutants and derived fields, and clarifies it returns a single current-hour record or no data. This clearly distinguishes it from the forecast and weather/pollen 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?
The 'latest' versus forecast distinction is implied by the sibling names and by the explicit 'current hour' phrasing, so an agent can infer when to use it. However, it does not explicitly state 'use this for current conditions, use air_quality_forecast for predictions' or list any exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pollen_forecastPollen – 48-Hour ForecastB
Returns an hourly pollen forecast for the next 48 hours: tree, grass, and weed pollen counts and risk levels, plus a per-species breakdown where the region supports it. Returns up to 48 hourly records, or no data if none is available.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | Latitude of the location, -90 to 90. Required if place is not provided. | |
| lng | No | Longitude of the location, -180 to 180. Required if place is not provided. | |
| place | No | Place or city name, e.g. "Bengaluru". Required if lat/lng are not provided. Never send both place and lat/lng. | |
| locale | No | If true, the response includes a localTime field alongside each record. | |
| speciesRisk | No | If true, also include per-species risk forecasts where supported. Defaults to false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It does disclose meaningful traits: returns 'up to 48 hourly records,' handles the no-data case, and warns that per-species breakdown is conditional on regional support. It does not cover error behavior, data freshness, or any operational constraints, but for a simple read-oriented forecast tool the key edge cases are surfaced.
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 sentences with no filler; the core purpose is front-loaded and the second sentence efficiently covers the maximum record count and the no-data case. Minor redundancy between '48 hours' and '48 hourly records' is the only blemish.
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 moderate-complexity tool with five parameters, no output schema, and no annotations, the description covers the return content and the main edge cases adequately. It falls short of complete because it does not describe the record structure or units, and it leaves the distinction from pollen_latest to inference rather than stating it.
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%, so the baseline is 3. The schema already thoroughly documents each parameter, including mutual exclusivity ('Never send both place and lat/lng'), defaults, and required-if logic. The description adds only marginal context by linking speciesRisk to the per-species breakdown mentioned in the output.
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 uses a specific verb and resource ('Returns an hourly pollen forecast for the next 48 hours') and details the content: tree, grass, and weed counts, risk levels, and per-species breakdown. It is clearly a forecast tool rather than a current-conditions tool, though it never explicitly names the sibling pollen_latest to draw the contrast.
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 context is implied by the 'next 48 hours' framing, so an agent can infer this is for forward-looking pollen data. However, with five siblings including pollen_latest and air_quality_forecast, there is no explicit guidance on when to choose this tool over alternatives or when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pollen_latestPollen – LatestA
Returns the latest pollen data for a location: tree, grass, and weed pollen counts and risk levels, plus a per-species breakdown where the region supports it. Returns a single record for the current hour, or no data if none is available.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | Latitude of the location, -90 to 90. Required if place is not provided. | |
| lng | No | Longitude of the location, -180 to 180. Required if place is not provided. | |
| place | No | Place or city name, e.g. "Bengaluru". Required if lat/lng are not provided. Never send both place and lat/lng. | |
| locale | No | If true, the response includes a localTime field alongside each record. | |
| speciesRisk | No | If true, also include per-species risk levels where supported. Defaults to false. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden, and it discloses several behavioral traits: it returns a single record rather than a series, it returns no data when none is available for the current hour, and per-species breakdown is conditional on regional support. These edge-case disclosures meaningfully shape agent expectations beyond a plain 'returns pollen data' statement.
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 sentences, front-loaded with the primary purpose, followed by record-shape and edge-case behavior. Every sentence earns its place; there is no filler or redundancy with the schema.
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?
Given there is no output schema and no annotations, the description adequately covers return contents, record count, and the empty-result case. Minor gaps remain, such as units, timezone handling, or how recent the 'current' hour's data is, but the core calling decision is well supported.
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%, so the baseline of 3 applies. The description adds minimal parameter-level meaning beyond the schema; the mention of per-species breakdown loosely echoes the speciesRisk parameter, but the schema already documents that behavior. No new parameter semantics are contributed.
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 uses a specific verb ('Returns'), a clear resource ('latest pollen data'), and concrete contents ('tree, grass, and weed pollen counts and risk levels'). The temporal qualifiers 'latest' and 'single record for the current hour' distinguish it from the pollen_forecast sibling without needing to name 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?
The usage context is implied by 'latest' and 'current hour' — an agent can infer this is the snapshot/current-conditions tool versus pollen_forecast. However, there is no explicit guidance on when to choose this over the forecast sibling, and no exclusions or alternative routing stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
weather_forecastWeather – 48-Hour ForecastA
Returns an hourly weather forecast for the next 48 hours: temperature, apparent temperature, humidity, dew point, pressure, cloud cover, precipitation, wind speed/gust/bearing, UV index, ozone, visibility, and a summary for each hour. Returns up to 48 hourly records, or no data if none is available.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | Latitude of the location, -90 to 90. Required if place is not provided. | |
| lng | No | Longitude of the location, -180 to 180. Required if place is not provided. | |
| place | No | Place or city name, e.g. "Bengaluru". Required if lat/lng are not provided. Never send both place and lat/lng. | |
| units | No | Unit system for the weather values. Defaults to imperial. | |
| locale | No | If true, the response includes a localTime field alongside each record. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It discloses the maximum number of records ('up to 48 hourly records'), the no-data case ('or no data if none is available'), and the full set of returned fields. This is substantial transparency for a read-only forecast tool.
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?
The description is two sentences with no filler. The first sentence front-loads the core action and data scope, and the second covers the edge case of no available data. Every sentence earns its place.
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?
Given the absence of an output schema, the description does a good job enumerating what the response contains and its limits. Combined with the fully documented input schema and clear divergence from sibling tools, an agent has enough to select and invoke the tool correctly. Minor gaps like exact response shape or timezone handling are not critical for this forecast tool.
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%, so the schema already explains every parameter, including lat/lng/place mutual requirements and the units enum. The tool description adds no parameter-level detail, but the baseline of 3 is appropriate when the schema fully documents parameters.
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 specific verb ('Returns') and resource ('hourly weather forecast for the next 48 hours') and enumerates the returned fields. This clearly differentiates it from sibling tools like weather_latest, air_quality_forecast, and pollen_forecast.
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?
The description establishes clear usage context: it is for the next 48 hours at hourly granularity, which distinguishes it from weather_latest and air quality/pollen tools. It does not explicitly name alternatives or state when not to use it, but the temporal and domain framing makes the intended use clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
weather_latestWeather – LatestA
Returns the latest weather observation for a location: temperature, apparent temperature, humidity, dew point, pressure, cloud cover, precipitation, wind speed/gust/bearing, UV index, ozone, visibility, and a human-readable summary. Returns a single record for the current hour, or no data if none is available.
| Name | Required | Description | Default |
|---|---|---|---|
| lat | No | Latitude of the location, -90 to 90. Required if place is not provided. | |
| lng | No | Longitude of the location, -180 to 180. Required if place is not provided. | |
| place | No | Place or city name, e.g. "Bengaluru". Required if lat/lng are not provided. Never send both place and lat/lng. | |
| units | No | Unit system for the weather values. Defaults to imperial. | |
| locale | No | If true, the response includes a localTime field alongside each record. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. It does well by stating it returns exactly one record for the current hour and may return no data if none is available, which is valuable beyond the schema. It could add more about data coverage or error behavior, but the core behavior is transparent.
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 tightly written sentences with no filler. The main action and output fields are front-loaded, and the single-record/no-data behavior is stated at the end. Every sentence earns its place.
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?
The description compensates for the absence of an output schema by listing all returned weather fields and clarifying the singular record/no-data behavior. Combined with a fully described schema, an agent has enough to select and invoke the tool correctly. It only misses explicit routing to forecast siblings, which is not essential for invocation.
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%, so the baseline is 3; the schema already documents lat, lng, place, units, locale, and the exclusivity of place versus lat/lng. The description does not add parameter-level meaning, but it does not need to because the schema is complete.
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 opens with a specific verb and resource: 'Returns the latest weather observation for a location.' It enumerates the exact fields returned, making the tool's scope immediately clear. The 'current hour' phrasing distinguishes it from forecast and air-quality/pollen sibling tools even though none are named.
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?
The description implies this tool is for current observations rather than forecasts, but it never explicitly says when to use weather_latest versus weather_forecast or other siblings. There is no wnen-not guidance or alternative tool mention, so the agent must infer the boundary from the word 'latest' and sibling names.
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. Dates show when Glama detected each change.
6 tool updates
v2.0.0- First observed
air_quality_forecast - First observed
air_quality_latest - First observed
pollen_forecast - First observed
pollen_latest - First observed
weather_forecast - First observed
weather_latest
TDQS
Each tool is clearly separated by data domain (air quality, weather, pollen) and temporal mode (latest vs. forecast). There is no overlap or ambiguity between tool purposes.
All tool names follow the exact same pattern: domain_latest or domain_forecast. This is perfectly consistent and makes the tool set easy to navigate.
Six tools is well-scoped for an environmental data server covering air quality, weather, and pollen for both current conditions and forecasts. Each tool serves a distinct and necessary purpose.
The server provides both latest and forecast data for all three environmental domains, which covers the core use case. Historical data or location search tools are not included, but those are not necessarily implied by the server's apparent purpose.
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
Hosted MCP server for Xweather weather data: conditions, forecasts, alerts, and more.
1Air Quality MCP — wraps air-quality-api.open-meteo.com (free, no auth)
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Related MCP Servers
- AlicenseBqualityDmaintenanceA Model Context Protocol server that provides comprehensive weather data and forecasts through the OpenWeatherMap API, enabling AI assistants to access real-time weather information, forecasts, air quality data, and location services.11265MIT
- FlicenseNot gradedqualityDmaintenanceA Model Context Protocol (MCP) server built with the mcp-framework to provide weather-related tools and data to AI clients. It enables integration of weather capabilities and custom tools into the MCP ecosystem for use with platforms like Claude Desktop.23-
- AlicenseNot gradedqualityDmaintenanceAn MCP server that wraps the Ambient Weather REST API. Query your personal weather stations conversationally from Claude Code, Claude.ai, or any MCP-compatible client.1MIT
- FlicenseNot gradedqualityDmaintenanceProvides real-time weather, forecasts, historical data, and air quality for AI assistants via the Model Context Protocol.-
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/ambeelabs/ambee-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server