Skip to main content
Glama
ambeelabs

mcp-ambee

Official
by ambeelabs

Ambee MCP Server

License: MIT Node.js >= 18

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

air_quality_latest

GET /v3/aq/latest

AQI + CO/NO2/O3/PM10/PM2.5/SO2, dominant pollutant, category. 1 record.

air_quality_forecast

GET /v3/aq/forecast/48hrs

Same fields, hourly. Up to 48 records.

weather_latest

GET /v3/weather/latest

Temperature, apparent temp, humidity, dew point, pressure, cloud cover, precipitation, wind, UV index, ozone, visibility, summary. 1 record.

weather_forecast

GET /v3/weather/forecast/48hrs

Same fields, hourly. Up to 48 records.

pollen_latest

GET /v3/pollen/latest

Tree/grass/weed counts + risk levels, optional per-species breakdown. 1 record.

pollen_forecast

GET /v3/pollen/forecast/48hrs

Same fields, hourly. Up to 48 records.

Every tool accepts either:

  • lat + lng (numbers), or

  • place (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 a localTime field to each record.

  • aqiStandard (air quality only) — EPA (default), IN, UK, CN, or CA.

  • units (weather only) — imperial (default), metric, or si.

  • 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 warning field explaining it's trimmed.

400

Bad request

Returned as a tool error explaining likely cause (missing/invalid params).

401

Unauthorized

Returned as a tool error — check AMBEE_API_KEY.

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

Install

git clone https://github.com/getambee/ambee-mcp-server.git
cd ambee-mcp-server
npm install

Configure

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 start

You 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 connected

Claude 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: node

  • Args: /absolute/path/to/ambee-mcp-server/src/index.js

  • Environment 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

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 /v3 API also supports historical data and 120-hour forecasts — see open issues or open a feature request.

License

MIT

Available Tools

6 tools
air_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.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude of the location, -90 to 90. Required if place is not provided.
lngNoLongitude of the location, -180 to 180. Required if place is not provided.
placeNoPlace or city name, e.g. "Bengaluru". Required if lat/lng are not provided. Never send both place and lat/lng.
localeNoIf true, the response includes a localTime field alongside each record.
aqiStandardNoAQI standard to calculate against. Defaults to EPA.

TDQS

A4/5.0
Behavior3/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude of the location, -90 to 90. Required if place is not provided.
lngNoLongitude of the location, -180 to 180. Required if place is not provided.
placeNoPlace or city name, e.g. "Bengaluru". Required if lat/lng are not provided. Never send both place and lat/lng.
localeNoIf true, the response includes a localTime field alongside each record.
aqiStandardNoAQI standard to calculate against. Defaults to EPA.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

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

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude of the location, -90 to 90. Required if place is not provided.
lngNoLongitude of the location, -180 to 180. Required if place is not provided.
placeNoPlace or city name, e.g. "Bengaluru". Required if lat/lng are not provided. Never send both place and lat/lng.
localeNoIf true, the response includes a localTime field alongside each record.
speciesRiskNoIf true, also include per-species risk forecasts where supported. Defaults to false.

TDQS

B3.4/5.0
Behavior3/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters3/5

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.

Purpose4/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude of the location, -90 to 90. Required if place is not provided.
lngNoLongitude of the location, -180 to 180. Required if place is not provided.
placeNoPlace or city name, e.g. "Bengaluru". Required if lat/lng are not provided. Never send both place and lat/lng.
localeNoIf true, the response includes a localTime field alongside each record.
speciesRiskNoIf true, also include per-species risk levels where supported. Defaults to false.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude of the location, -90 to 90. Required if place is not provided.
lngNoLongitude of the location, -180 to 180. Required if place is not provided.
placeNoPlace or city name, e.g. "Bengaluru". Required if lat/lng are not provided. Never send both place and lat/lng.
unitsNoUnit system for the weather values. Defaults to imperial.
localeNoIf true, the response includes a localTime field alongside each record.

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude of the location, -90 to 90. Required if place is not provided.
lngNoLongitude of the location, -180 to 180. Required if place is not provided.
placeNoPlace or city name, e.g. "Bengaluru". Required if lat/lng are not provided. Never send both place and lat/lng.
unitsNoUnit system for the weather values. Defaults to imperial.
localeNoIf true, the response includes a localTime field alongside each record.

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines3/5

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.

  1. 6 tool updatesv2.0.0
    • First observedair_quality_forecast
    • First observedair_quality_latest
    • First observedpollen_forecast
    • First observedpollen_latest
    • First observedweather_forecast
    • First observedweather_latest

TDQS

A4/5.0
Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

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

Related MCP Servers

  • A
    license
    B
    quality
    D
    maintenance
    A 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.
    11
    26
    5
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    A 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
    -
  • A
    license
    Not graded
    quality
    D
    maintenance
    An 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.
    1
    MIT

Latest Blog Posts

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