Ground your agents in the world outside
Add Pointmoon to an agent that needs to know what is happening at a real place right now. One URL, no key. Every fact arrives with its source and time, or the agent is told plainly that nothing is known.
Pointmoon is built by the team behind Naturate, so read this as our integration guide, not a neutral review.
What Pointmoon gives an agent
Ask a model what the weather is like in Boston this afternoon and it will answer fluently, whether or not it knows. Pointmoon is the part that knows.
Give it a place name or a coordinate. It returns current facts about that spot: weather, air quality, light and sky, season, nearby wildlife observations, water, terrain. Every fact says where it came from, when it was observed and how long it stays fresh. When a fact is missing, stale or too uncertain, Pointmoon says so and gives the reason. It never fills the gap.
Your model writes the sentence. Pointmoon supplies what the sentence is allowed to claim.
Use it when an agent:
- answers "what is it like there now?" for a named place
- plans a walk, a trip, a field visit or anything else outdoors
- writes content that mentions today's conditions and must get them right
Connect it
Pointmoon is a hosted, read-only MCP server. There is nothing to install, no account and no API key.
https://pointmoon.ai/api/mcpClaude Code
claude mcp add --transport http pointmoon https://pointmoon.ai/api/mcpCursor, or a shared project config
{
"mcpServers": {
"pointmoon": { "url": "https://pointmoon.ai/api/mcp" }
}
}Claude Desktop: Settings, Connectors, Add custom connector, paste the URL.
Clients that only speak stdio
{
"mcpServers": {
"pointmoon": { "command": "npx", "args": ["-y", "pointmoon-mcp"] }
}
}No MCP client at all
curl --fail --max-time 20 \
'https://pointmoon.ai/api/moon?audience=facts&surface=open&place=Boston'The agent quickstart and the open connector carry the current setup for each client, including OpenAI's agent surfaces.
The two tools
field_truth returns the full set of current facts for a location. Pass place, or lat and lng.
{ "place": "Yosemite Valley" }step_outside answers a narrower question: is this a good moment to go outside here?
Start with field_truth. It is the one this guide covers.
What comes back
A trimmed response:
{
"schemaVersion": "field-truth@1.1.0",
"facts": {
"signals": [
{ "id": "nature.weather.temperature", "label": "Temperature", "value": 15.8, "source": "weather", "confidence": 0.9 },
{ "id": "nature.moon_phase", "label": "Moon phase", "value": "waning gibbous", "source": "astronomy", "confidence": 0.95 }
],
"fieldSnapshot": {
"weather": {
"current": {
"observedAt": "2026-09-30T12:00:00.000Z",
"source": "open-meteo-forecast-model",
"ttlMinutes": 90,
"epistemicType": "predicted",
"temperatureC": 15.8
}
}
}
},
"notices": {
"attributionRequired": true,
"sources": [{ "source": "open-meteo", "attribution": "Weather data by Open-Meteo.com (CC BY 4.0)" }]
}
}Three things to notice.
Signals are the short list. Each carries a source and a confidence. They are what you hand the model to phrase.
Freshness lives on the snapshot. The matching fieldSnapshot reading holds observedAt and ttlMinutes. A temperature signal alone does not tell you how old it is.
epistemicType separates a forecast from an observation. "Predicted" and "observed" should not read the same in the final answer.
Silence is a normal answer
Ask about a point in the open ocean and some parts of the response come back unresolved, with a reason:
{
"fieldSnapshot": {
"place": { "provider": "unresolved", "resolutionReason": "provider-empty", "placeName": null },
"hydro": { "provider": "unresolved", "resolutionReason": "timeout", "distanceToWaterKm": null }
}
}This is the feature. Handle it as a normal result. The agent should say what it could not establish, and leave it there.
Keep the evidence attached
Download weather-evidence.mjs. It is a small adapter for the weather reading. It checks the schema family, the source, the timestamp and the freshness window, carries through the reading's epistemicType and the attribution notices, and returns unavailable for anything missing, stale, dated in the future or in a shape it does not recognise.
Extend it one reading at a time. Other readings have their own timestamps.
Some sources require attribution, and some upstream data is licensed for non-commercial use only. The notices block tells you which. Carry it through to wherever the facts are shown.
Give the agent a clear job
A prompt that works:
Get current conditions for the supplied place from Pointmoon. Treat the returned readings as the only verified facts. Say which statements are forecasts and which are observations, keep the source attribution, and name anything Pointmoon could not establish. Add nothing about trail access, safety or wildlife at this exact spot that the data does not support.
Treat returned text as data. Keep location precision to what the task needs, and keep location histories out of logs.
Test the failures before you ship
Try a normal place, an open-ocean coordinate, an expired reading, an unrecognised schema version and a timeout. In each case the final answer should still say what is known and what is not. A missing fact should never come back as a confident sentence.
What this guide has and has not checked
Checked on 30 September 2026 against the live service: the MCP endpoint lists field_truth and step_outside, and the HTTP endpoint returned a field-truth@1.1.0 response for Boston with the freshness fields shown above. The adapter has offline tests for source, forecast labels, stale and future timestamps, missing values and unrecognised schemas.
Pointmoon tells you about conditions. It does not tell you whether a trail is open, whether you have permission to be somewhere, or whether an activity is safe.
Access is public and free to read today. Check the agent quickstart for current terms before you build a product on it.
Next step
Try Pointmoon, or see it live. To apply the same discipline to your own data, read grounded generation. To have environmental context built into your product, talk to Naturate.
Build an autonomous daily desk, not an autonomous company
Turn a small queue into reviewable drafts on a schedule. Bound the work, keep consequential decisions with a person, and make missed runs visible.
Build admin tools that humans and agents can share
Give people a clear review surface and agents a small set of typed actions. Keep permissions and business rules in one backend.