Give any AI assistant live environmental data. The Ambee MCP server exposes air quality, pollen, and weather present conditions and 48-hour forecasts as six tools that Claude, Cursor, VS Code, ChatGPT, and any other MCP client can call directly. One HTTPS endpoint, one API key, no SDK to install.
The Model Context Protocol (MCP) is an open standard that lets AI applications discover and call external tools at runtime. Instead of writing glue code for every assistant you want to support, you point the assistant at a server URL and it reads the available tools for itself.
The Ambee MCP server wraps the same environmental datasets served by our REST APIs and presents them in the shape an AI agent expects: named tools, typed parameters, and descriptions the model reads before deciding what to call. Ask “Should I wear a mask if I’m going out in New York? I’m allergic to tree pollen.” and the assistant picks pollen_latest, calls Ambee, and responds with realtime pollen information.
Anyone building on top of an AI assistant: health and allergy apps, HVAC and smart-building agents, agronomy copilots, logistics planners, or an internal Slack bot that answers “should we move the offsite indoors?”. If your product already reasons in natural language, MCP is the shortest path to grounding it in Ambee data.
Prefer plain REST?
The MCP server is an additional interface, not a replacement. All endpoints remain available.
Browse API referenceYour MCP client opens a session with the Ambee server over HTTPS, asks it what tools exist, and hands that list to the model. When the model decides to use one, the client sends a tools/call request with your API key in the header. Ambee resolves the location, queries the underlying dataset, and streams the result back as structured JSON the model can reason over.
| Property | Value |
|---|---|
| Server URL | https://api-mcp-server.ambeedata.com/mcp |
| Transport | Streamable HTTP (JSON-RPC 2.0 over POST, responses as text/event-stream) |
| Protocol version | 2025-06-18 |
| Authentication | Authorization: Bearer <API_KEY> |
Discovery is open, data is not. Any client can call tools/list without a key to see what the server offers. Every tools/call requires a valid Ambee API key and counts against your plan.
Three steps from nothing to a working connection. This example uses Claude Code, every other client is covered in Connect your client.
Sign in to the Ambee API dashboard and copy your key. If you don’t have an account yet, sign up free.
Register the remote server with your API key as a bearer token.
claude mcp add --transport http ambee \
https://api-mcp-server.ambeedata.com/mcp \
--header "Authorization: Bearer YOUR_API_KEY"List registered servers and confirm Ambee shows as connected.
claude mcp listStart a session and let the model choose the tool.
What's the air quality in Denver right now,
and will pollen get worse over the next two days?The assistant calls air_quality_latest and pollen_forecast, then answers from the returned readings.
Replace YOUR_API_KEY before running. Shell history keeps what you type. Export the key as an environment variable and reference it, or paste the command into a scratch file you delete afterwards.
The MCP server uses the same API key as every other Ambee product. There is no separate MCP credential and no OAuth flow the key travels in an HTTP header on each request, and your MCP client stores it in its own configuration file.
Send the key on every request. The server accepts either header use Authorization unless your client cannot set it.
Authorization: Bearer YOUR_API_KEYMost MCP clients let you declare headers alongside the server URL in their configuration file. The next section shows the exact syntax for each one.
After generating the API key, it is absolutely essential to keep it secure. Each key uniquely identifies and grants access to your Ambee account, allowing anyone with the key to use it without your knowledge.
MCP configuration files live on disk in plain text ~/.cursor/mcp.json, claude_desktop_config.json, and .vscode/mcp.json among them. Keep them out of version control, and prefer environment-variable interpolation where your client supports it.
Key scope
A single private key carries your permissions, rate limits, daily quota, and API usage. MCP calls draw from the same quota as REST calls.
Authentication referenceIf you suspect that your key has been compromised, either regenerate it from the API dashboard or contact support immediately.
MCP is an open protocol, so the server works with any compliant client. Pick yours below the server URL and header are identical everywhere, only the file format changes.
Register the server from your terminal. The --header flag is stored with the server entry and sent on every call.
claude mcp add --transport http ambee \
https://api-mcp-server.ambeedata.com/mcp \
--header "Authorization: Bearer YOUR_API_KEY"
# confirm it connected
claude mcp listAdd --scope project to share the server with your team via .mcp.json but keep the key in an environment variable if you do.
The server exposes six tools, a present conditions reading and a 48-hour hourly forecast for each of the three datasets. All are read-only: nothing the model calls can change state in your account.
| Dataset | Tool | Returns | Duration |
|---|---|---|---|
| Air Quality | air_quality_latest | Current AQI and individual pollutant concentrations | Present conditions |
| air_quality_forecast | Hourly AQI and pollutant forecast | 48 hours | |
| Pollen | pollen_latest | Tree, weed, and grass pollen counts with risk levels | Present conditions |
| pollen_forecast | Hourly pollen count and risk forecast | 48 hours | |
| Weather | weather_latest | Temperature, humidity, wind, and UV index observation | Present conditions |
| weather_forecast | Hourly weather forecast | 48 hours |
Every tool shares the same location contract and locale switch. Understanding these four rules covers all six tools.
Each tool accepts either lat and lng, or a free-text place. Passing both at once is rejected.
| Form | Use when | Example |
|---|---|---|
| lat + lng | You already hold coordinates a device GPS fix, a stored site, a map click. | lat: 40.7128, lng: -74.0060 |
| place | You have a name a human typed or said. The API resolves it server-side. | "5th Avenue, New York" |
Because resolution happens inside the tool, the model should not call a geocoding service first. The tool descriptions state this explicitly, which keeps assistants from burning a turn on an unnecessary lookup.
| Format | Example |
|---|---|
| City | "Denver" |
| Street and city | "5th Avenue, New York" |
| Postcode with country | "90210, US" |
| City with region | "Austin, Texas" |
Set locale: true to add the location’s local time to each record. On the present conditions tools this annotates a single reading on the forecast tools it annotates all 48 hourly entries useful when the model needs to say “tomorrow morning” rather than quoting a UTC timestamp.
Pick one location form. Sending lat, lng, and place together is an invalid request not a fallback chain.
You do not call tools by name you describe what you want, and the model reads the tool descriptions to decide. These prompts each resolve to a specific tool without naming it.
| Say this | Tool the model picks |
|---|---|
| “How bad is the air in Los Angeles right now?” | air_quality_latest with aqiStandard: "EPA" |
| “When is PM2.5 lowest tomorrow so I can run outside?” | air_quality_forecast |
| “Is it a bad tree pollen day in Atlanta?” | pollen_latest |
| “Should we move the Saturday offsite indoors? Check pollen and weather.” | pollen_forecast + weather_forecast |
| “What’s the UV index at 90210 right now?” | weather_latest |
| “Compare air quality between our Denver and Atlanta offices.” | air_quality_latest, called twice |
No. The same private API key works across REST and MCP, and all of them draw from one quota.
Request a tool
Want wildfire, historical air quality, or elevation as MCP tools? Tell us what you’re building and we’ll prioritise accordingly.
Raise a requestYes
No