geo-agent
This server provides tools for AI agents to access live earth-science data and search climate science reports:
get_recent_earthquakes: Retrieve recent significant earthquakes worldwide from USGS, filterable by minimum magnitude (default: 4.5) and time window (default: last 7 days).get_climate_point_data: Get recent daily temperature, precipitation, and solar radiation for any latitude/longitude from NASA POWER.search_climate_papers: Perform semantic search over IPCC climate science reports (AR6, SR15) to find relevant passages with source and page references.
Provides climate data retrieval from NASA POWER API, including daily temperature, precipitation, and solar radiation for any location.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@geo-agentWhat earthquakes happened in the last 3 days above magnitude 4?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
geo-agent
Live earth-science data, in two shapes: a tool for AI agents, and an app for humans.
๐ Live demo: https://kavyaagarwal-geo-agent.streamlit.app
๐ง MCP server: exposes the same data as tools for any MCP compatible AI client (Claude Desktop, Cursor, etc.)
๐ Writeup: https://kavya855084.substack.com/p/building-geo-agent-an-mcp-server
What this is
This project exposes earth-science data through two interfaces, because they solve different problems.
The Streamlit app is for humans. Open it, click around, look at charts, maps, and search results.
The MCP server is for agents. It lets an AI assistant decide, on its own, to pull live data or search reference material as one step while reasoning about something else entirely.
Three data sources, both interfaces: live earthquakes (USGS), live climate data (NASA POWER), and semantic search over real climate science reports (IPCC AR6, SR15).
Related MCP server: quake-mcp
Components
1. MCP server (server.py)
Exposes earth-science data as tools any MCP client can call.
Tools:
get_recent_earthquakes(min_magnitude, days): recent significant earthquakes worldwide, via USGS. Read-only, annotated.get_climate_point_data(latitude, longitude, days): recent daily temperature, precipitation, and solar radiation for any location, via NASA POWER. Read-only, annotated. Handles NASA's processing-lag fill values gracefully instead of printing raw placeholder data.search_climate_papers(query, n_results): semantic search over real climate science reports, see Component 3 below.
uv sync
uv run mcp dev server.pyOpens the MCP Inspector in your browser for testing tools directly.
2. Live web app (app.py)
Three tabs, same underlying data sources, built for human exploration:
Earthquakes: live filtering by magnitude and time window, a magnitude reference guide, an interactive map, and a raw data table.
Climate: pick a location (presets or custom coordinates), see temperature, precipitation, and solar radiation as time series, plus a location map.
Paper Search: ask a question, get back cited passages from real climate science reports, the same retrieval pipeline as the MCP tool.
uv run streamlit run app.py3. Climate paper search
A local retrieval-augmented search system over real climate science reports (IPCC AR6 Synthesis Report, SR15), available both as an MCP tool and as a tab in the web app, so the same retrieval logic is usable by an agent or a person.
Pipeline:
Ingestion (
ingest.py, run once): PDFs inpapers/are read page by page withpypdf, split into ~800-character chunks with 100-character overlap so meaning isn't lost at chunk boundaries, and embedded withsentence-transformers(all-MiniLM-L6-v2, runs locally, no API key or cost).Storage: chunks, their embeddings, and metadata (source filename, page number) are persisted to a local Chroma vector database, just a folder on disk, no server process to run.
Retrieval: a query is embedded with the same model, and Chroma returns the chunks whose embeddings are nearest to it by semantic similarity, not keyword overlap. Every result carries its source and page, so answers are traceable to a real document instead of generated from training data alone.
Two interfaces, same pipeline:
search_climate_papers(query, n_results), an MCP tool, callable autonomously by an agentThe Paper Search tab in the web app, the same retrieval logic, for direct human use, with a visible note confirming results come from local search, not the internet
uv run python ingest.py
uv run pytest tests/test_retrieval.py -vValidation: tests/test_retrieval.py checks that 5 real climate questions each return a relevant passage in their top 3 results. This is a lightweight check (keyword presence in top-k), not a full IR evaluation; a more rigorous version would use precision@k, MRR, or a framework like Ragas.
Known limitations, documented honestly rather than hidden:
The corpus is small and curated (2 reports), not comprehensive literature coverage.
Overlapping chunks can produce near-duplicate results from the same page; results are not currently deduplicated by source/page.
PDF text extraction is occasionally noisy (e.g. figure captions interleaved with body text), a known limitation of plain-text PDF extraction, not something this project works around.
Tech stack
Python, MCP SDK, Streamlit, Plotly, httpx, Chroma, sentence-transformers, pytest, uv
Status
See commit history for progress. Connected to Claude Desktop and confirmed it correctly chooses between live-data tools and paper search depending on the question, and correctly recognizes when a question needs more than these three tools can offer. Next: a router agent that makes that same tool-selection decision explicitly, in code, instead of relying on the client's built-in reasoning.
Author
Available Tools
1 toolget_recent_earthquakesARead-onlyIdempotent
Get recent significant earthquakes worldwide from USGS.
Args: min_magnitude: minimum magnitude to include (default 4.5) days: how many days back to search (default 7)
| Name | Required | Description | Default |
|---|---|---|---|
| min_magnitude | No | ||
| days | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations (readOnlyHint, destructiveHint, idempotentHint, openWorldHint) already communicate key behavioral traits. The description adds the data source (USGS) and default parameter values, but does not disclose potential traits like data latency, rate limits, or that results may change over time (open world). Given annotation coverage, a score of 3 is appropriate.
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?
Description is extremely concise: two sentences plus a clean Args list. No wasted words, purpose is front-loaded. Every sentence adds value.
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 simple tool with 2 optional parameters and an output schema, the description adequately covers purpose and parameters. It does not detail return values, but the output schema exists. Could mention data freshness or that results are from USGS near-real-time feed, but overall complete enough.
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 coverage is 0%, so description compensates by explaining both parameters: min_magnitude (minimum magnitude, default 4.5) and days (how many days back, default 7). This adds meaning beyond the schema's type/default, though it could mention acceptable ranges or data formats.
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?
Clearly states the verb 'Get' and resource 'recent significant earthquakes worldwide from USGS'. Distinguishes from any potential sibling by specifying data source and scope ('worldwide'), making the purpose unambiguous.
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?
Implicitly indicates usage for retrieving recent seismic events with configurable magnitude and time range. The description is clear but does not explicitly mention when not to use or compare to alternatives, though no siblings exist to differentiate from.
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 tool update
v0.1.0- First observed
get_recent_earthquakes
TDQS
Only one tool exists, so there is no risk of confusion between tools.
With a single tool, naming consistency is inherent; the name follows a clear verb_noun pattern.
A single tool for a server named 'geo-agent' is insufficient; the name suggests a broader geographic capability.
The tool only covers recent earthquakes, leaving out many expected geospatial operations such as location search, weather, or other natural disasters.
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
Geospatial MCP server for earthquake, tsunami, volcano, disaster, and FX data queries.
Real-world data for agents: air quality, geocoding, quakes, holidays, web search
- UnifAPIOAuthcom.unifapi
Hosted MCP server for live public-data APIs and Skills for AI agents.
A registry of AI agent tools โ MCP servers, APIs, CLIs, SDKs โ kept current by automated ingestion.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA powerful MCP server that connects AI assistants to authoritative natural hazard data sources, enabling monitoring of earthquakes, tsunamis, volcanoes, and solar events with configurable alerts and webhooks.1MIT
- AlicenseAqualityCmaintenanceMCP server wrapping the USGS Earthquake Hazards API, enabling AI assistants to search the global earthquake catalog, look up event details, count quakes, find 'Did You Feel It' reports, and read realtime feeds.5MIT
- AlicenseAqualityDmaintenanceReal-time earthquake data and seismic monitoring for AI agents via the USGS Earthquake Catalog API.8MIT
- AlicenseNot gradedqualityBmaintenanceAn MCP server that gives AI agents grounded access to US natural-hazard data โ weather alerts, forecasts, earthquakes, and FEMA flood zones โ from free, keyless US government APIs.MIT
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/KavyaAgarwal2001/geo-agent'
If you have feedback or need assistance with the MCP directory API, please join our Discord server