# NOAA Public Data MCP Server (`rl1987/noaa-data-mcp`) Actor

MCP server exposing search/filter tools for NOAA OneStop, NCEI Dataset Search, NCEI Content Search, and NCEI Storm Events Database.

- **URL**: https://apify.com/rl1987/noaa-data-mcp.md
- **Developed by:** [R.L.](https://apify.com/rl1987) (community)
- **Categories:** MCP servers
- **Stats:** 1 total users, 0 monthly users, 0.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $10.00 / 1,000 mcp tool calls

This Actor is paid per event and usage. You are charged both the fixed price for specific events and for Apify platform usage.

Learn more: https://docs.apify.com/platform/actors/running/actors-in-store#pay-per-event

## What's an Apify Actor?

Actors are web data automations that power AI and operations. They run on the Apify platform to scrape websites, process data, connect APIs, and automate workflows.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.
Actors are written with capital "A".

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.
The best way to integrate Actors is as follows.

- **AI agents and MCP clients** — the [Apify MCP server](https://docs.apify.com/integrations/mcp.md) at `https://mcp.apify.com` (remote, streamable HTTP, OAuth on first use).
- **Agentic workflows and local Actor development** — [Agent Skills](https://apify.com/.well-known/agent-skills/index.json) with the [Apify CLI](https://docs.apify.com/cli/docs.md): `npm install -g apify-cli`, then `apify login`.
- **JavaScript/TypeScript projects** — the official [JS/TS client](https://docs.apify.com/api/client/js/docs.md): `npm install apify-client`.
- **Python projects** — the official [Python client](https://docs.apify.com/api/client/python/docs.md): `pip install apify-client`.
- **Any other language** — the [REST API](https://docs.apify.com/api/v2.md).

For usage examples, see the [API](#api) section below.

For more details, see Apify documentation as [Markdown index](https://docs.apify.com/llms.txt) and [Markdown full-text](https://docs.apify.com/llms-full.txt).

# README

### What does NOAA Public Data MCP Server do?

Four NOAA search sites, zero manual browsing: **NOAA Public Data MCP Server** turns [data.noaa.gov/onestop](https://data.noaa.gov/onestop/), [ncei.noaa.gov/search/content](https://www.ncei.noaa.gov/search/content), [ncei.noaa.gov/access/search/dataset-search](https://www.ncei.noaa.gov/access/search/dataset-search/), and [ncei.noaa.gov/stormevents](https://www.ncei.noaa.gov/stormevents/) into MCP tools any AI agent can call directly. Ask for "Gulf of Mexico sea surface temperature datasets from 2020" or "Texas tornadoes in January 2020" in plain language and get back real, structured results with working links — not a screen-scrape of a form you have to fill in yourself.

Each of the four tools covers that source's **real** search/filter surface — full-text query, facets, keywords, spatial bounding box, date ranges, event type/severity, sort, pagination — reverse-engineered from the actual site (documented JSON API where NOAA has one, clean HTML parsing where it doesn't). Results carry **links** to dataset landing pages, access servers, and event detail pages. The Actor never downloads a dataset file or PDF — it only tells you where they are, so you stay lightweight and in control of what you actually fetch.

Because it runs on Apify in [Standby mode](https://docs.apify.com/platform/actors/development/programming-interface/standby), it behaves like a normal always-on HTTP MCP endpoint — no cold start per query — plus you get Apify's monitoring, scheduling, and proxy infrastructure for free if you need it.

### Why use NOAA Public Data MCP Server?

- **Skip four different websites and four different query languages.** One consistent tool interface instead of learning OneStop's facet JSON, NCEI's REST params, a Drupal search form, and a JSP CGI form.
- **Agent-ready by design.** Point Claude (or any MCP client) at real NOAA data during research, reporting, or analysis — no copy-pasting URLs, no manual form-filling, no HTML to eyeball.
- **Structured, linked, lightweight.** Every result is JSON with the actual landing-page/access/detail links attached — pull exactly the dataset or event you need, on your own terms, without the Actor pre-downloading anything for you.
- **Built for real workflows.** Pull Storm Events Database records (tornadoes, floods, hail, etc.) for a state/date range straight into an agent workflow, dashboard, or notebook.

### How to use NOAA Public Data MCP Server

1. Deploy this Actor to Apify (or use the published one) with Standby mode enabled.

2. Add it to your MCP client as an HTTP/Streamable-HTTP server:

   ```bash
   claude mcp add --transport http noaa-data \
     https://rl1987--noaa-data-mcp.apify.actor/mcp \
     --header "Authorization: Bearer $APIFY_TOKEN"
   ```

   The token is **your own** Apify API token (Console → Settings → Integrations), not the Actor owner's — export it as `$APIFY_TOKEN` in your shell, or substitute your own.

3. Verify the connection and tool count:

   ```bash
   claude mcp list
   # or, inside a Claude Code session:
   /mcp
   ```

4. Ask your agent to search, e.g. *"Use noaa-data to find OneStop datasets about hurricanes with a THREDDS download link"* or *"List Texas tornado events from January 2020 via search\_storm\_events."*

A team can commit a `.mcp.json` with just the URL (no token) to a shared repo; each teammate runs `claude mcp add --scope local` once with their own token.

### Tools

| Tool | Source | Covers |
|---|---|---|
| `search_onestop_data` | [OneStop](https://data.noaa.gov/onestop/) | full-text query, facet filters (science, locations, instruments, platforms, projects, data centers, data/file formats, link protocols), date range, bounding box, collection/granule search, pagination |
| `search_ncei_dataset_search` | [NCEI Dataset Search](https://www.ncei.noaa.gov/access/search/dataset-search/) | full-text query, date range, bounding box, GCMD keywords, pagination |
| `search_ncei_content` | [NCEI Content Search](https://www.ncei.noaa.gov/search/content) | full-text query, content type, topic filters, sort, pagination |
| `search_storm_events` | [Storm Events Database](https://www.ncei.noaa.gov/stormevents/) | state, event type, date range, hail/tornado/wind severity filters, sort |

Every tool returns JSON with result metadata and a `links`/`detailUrl` field pointing at the real NOAA page or access server — datasets and PDFs are **never** fetched or stored by this Actor.

#### Example output (`search_storm_events`, abbreviated)

```json
{
  "source": "https://www.ncei.noaa.gov/stormevents/",
  "count": 14,
  "truncated": false,
  "results": [
    {
      "EVENT_ID": "873054",
      "CZ_NAME_STR": "WISE CO.",
      "BEGIN_DATE": "01/10/2020",
      "EVENT_TYPE": "Tornado",
      "TOR_F_SCALE": "EF0",
      "STATE_ABBR": "TX",
      "detailUrl": "https://www.ncei.noaa.gov/stormevents/eventdetails.jsp?id=873054"
    }
  ]
}
```

### Pricing / cost

This Actor uses Apify's [Pay Per Event](https://docs.apify.com/platform/actors/publishing/monetize#pay-per-event-pricing-model) model — see `.actor/pay_per_event.json` for the configured `tool-call` price. You're charged once per completed tool call, not per underlying HTTP request the tool makes internally.

### Tips

- `search_storm_events` caps at 500 records (NOAA's own limit) — narrow by state, event type, or a shorter date range if you hit it.
- For OneStop, valid facet values (e.g. under `science`, `dataFormats`) are visible in the `facets` field of a prior, broader query.
- Use `search_type='granule'` with `collection_id` on `search_onestop_data` to list files within a specific dataset collection.

### FAQ, disclaimers and support

All data queried here is public NOAA/NCEI information. This Actor only relays search results and links; it does not mirror, cache, or redistribute NOAA datasets. Respect NOAA's own terms of use for anything you download via the returned links. Found a bug or need a custom variant? Open an issue on the Actor's Issues tab.

# Actor input Schema

## Actor input object example

```json
{}
```

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("rl1987/noaa-data-mcp").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("rl1987/noaa-data-mcp").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call rl1987/noaa-data-mcp --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,rl1987/noaa-data-mcp"
        }
    }
}

```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/bpplB7iKbHfVFMCEB/builds/huRxHRPOcAGHE0LDB/openapi.json
