MCP HeartbeatTHE MCP OBSERVATORY
Public workspace

Explore

Evidence for your next connection.

Independent measurements of remote MCP servers. Every observation has a timestamp.

Read-only probes

MCP server · Data access / search

org.aquaview/aquaview-mcp

AQUAVIEW MCP Server - Search and access global oceanographic and environmental datasets.

Checks passed
9 / 22

5 failed · 8 not measured

Median response
437 ms

Median of successful probes over 7 days

30-day uptime
Not measured

Share of countable probes over 30 days, including daily rollups. Auth challenges are excluded.

Discovered tools
6

Tool definitions returned by this server

Independent monitoring

Health & checks

Status history

Outdated check

Last connection measurement is over 24 hours old. Current availability is unknown.

Last checked
Check summary by test group
Test areaPassedFailedUnmeasured
ConnectionCan a client connect and discover tools?
500
Reliability & speedDoes it respond consistently and quickly?
004
Access & authenticationWhat is required to use this server?
102
Tool qualityAre the tool definitions usable by an agent?
220
Publisher identityCan the publisher be traced to its source?
132

Unmeasured means there is not enough evidence to decide. How these checks work

Inspect individual checks 22 recorded

Core

  • Pass
    Reachable

    Latest probe returned HTTP 200 in 437 ms.

  • Pass
    Valid handshake

    protocolVersion 2025-11-25, serverInfo.name AQUAVIEW MCP Server.

  • Pass
    Lists tools

    tools/list returned 6 tools.

  • Pass
    Current protocol

    Negotiated 2025-11-25. The bar is 2025-06-18 or newer.

  • Pass
    HTTPS

    The endpoint URL is https.

Performance

  • Not measured
    Fast (p50)

    Median latency 437 ms over 1 samples in 7 days. The bar is 1000 ms. Need at least 5 samples.

  • Not measured
    Consistent (p95)

    95th percentile 437 ms over 1 samples in 7 days. The bar is 3000 ms. Need at least 20 samples.

  • Not measured
    Reliable (uptime)

    1 of 1 attempts returned a tool list in 30 days (100%). The bar is 99%. Need at least 30 samples.

  • Not measured
    Stable tool list

    Fewer than two successful probes in 30 days, so tool-list stability is not measured.

Access

  • Pass
    Open access

    tools/list succeeded with no credential, and the record declares none.

  • Not measured
    Standard auth

    Auth is not required, so the OAuth metadata check does not apply.

  • Not measured
    Free tier cited

    No publisher quote has been checked.

Tools

  • Pass
    Tools described

    Every tool description is at least 20 characters.

  • Pass
    Valid input schemas

    Every inputSchema is a JSON Schema object.

  • Fail
    Parameters documented

    0 of 42 parameters have a description (0%). The bar is 80%.

  • Fail
    Safety hints

    6 tools set neither readOnlyHint nor destructiveHint.

Publisher

  • Pass
    Verified namespace

    Listed in the Official MCP Registry.

  • Fail
    Website matches publisher

    The website host does not match the reverse-domain namespace.

  • Fail
    Source repo linked

    No repository URL is on file.

  • Not measured
    Repo owner matches

    This namespace is not an io.github login, so the owner comparison does not apply.

  • Fail
    Recently updated

    Updated 2025-10-31T00:14:26.751185Z, which is older than 180 days.

  • Not measured
    Open-source licence

    No GitHub repository to ask about a licence.

Start using org.aquaview/aquaview-mcp

Connect to this server

Choose your client, copy the configuration, then enable the server in your client’s MCP settings.

Run this command in your terminal, then restart Claude Code.

Claude Code

claude mcp add --transport http org-aquaview-aquaview-mcp https://mcp.aquaview.org/mcp

Capabilities

Tools 6

aggregate

Run aggregation queries on the AQUAVIEW catalog — get counts, spatial distributions, temporal distributions, and per-collection breakdowns without fetching individual items. Args: aggregations: Comma-separated aggregation types (required). Valid types: total_count, datetime_max, datetime_min, datetime_frequency, collection_frequency, geometry_geohash_grid_frequency, geometry_geotile_grid_frequency. collections: Comma-separated collection IDs to scope the aggregation (e.g., "NOAA,NDBC"). exclude_collections: Comma-separated collection IDs to omit from the aggregation (e.g., "INCIDENT_NEWS"). Applied as a CQL2 NOT filter, so it composes with `filter`. bbox: Bounding box as "west,south,east,north". datetime: Temporal filter (same format as search_datasets). q: Free-text search to scope the aggregation. Multi-word queries are tokenised on whitespace and OR-combined to mirror search_datasets semantics (aggregate compiles q to CQL2 LIKE clauses on title/description; a raw %multi word% substring match would return 0 for most queries). filter: CQL2-JSON filter as an object or JSON-encoded string. Flat example: {"op": "=", "args": [{"property": "aquaview:institution"}, "NOAA"]}. Nested example: {"op": "<=", "args": [{"property": "aquaview:column_stats_summary.variables.Pressure.min"}, 10]}. license: Comma-separated SPDX license id(s) to scope the aggregation (e.g., "CC-BY-4.0,CC0-1.0"), or one of "public-domain", "proprietary", "various", "unknown". Matched against `aquaview:license`. precision: Grid precision for geo aggregations (1-12, higher = finer grid). Applied to whichever geo aggregation type is requested. datetime_frequency_interval: Interval for datetime_frequency (e.g., "month", "year", "day"). output_format: "csv" (default, sectioned CSV — ~50% fewer tokens than TOON for bucket responses), "json" (structured STAC API response), or "toon". Use "json" for deterministic/structured consumers. Returns: Aggregation results. In CSV mode: one `## <name>` section per aggregation; scalars render on a single line; bucket aggregations render as CSV with a `# rows: N` header, a `# key=value` line for columns that are constant across all rows, and a conventional CSV table of the varying columns. In JSON/TOON mode: the raw SFEOS response with `name`, `data_type`, and `value`/`buckets` for each requested aggregation.

Discovered
get_data

Pull actual observation rows from an AQUAVIEW data source — not catalog metadata. Use this whenever the question needs the measurements themselves (temperature profiles, float positions, buoy readings), rather than which datasets exist. Call list_data_sources first for a source's canonical variable names, its `qc_modes`, and its `engine` (gridded "xarray" sources have no rows to pull). READ 'returned' FIRST. It is one of three values: - 'complete': 'rows' holds EVERY matching row (or your whole 'limit'). Safe to compute anything from. - 'head': 'rows' holds the FIRST rows in the source's natural order (see 'head.order'), out of 'head.of' total. These are not a random sample — later rows differ systematically — so never average or take a maximum from them. To get more, set 'limit' up to 'head.max_inline'; beyond that, narrow the request or fetch 'download_url'. - 'none': no rows. 'refusal.reason' says why. 'unscoped_query' means add a bbox/datetime/depth/filter. 'no_natural_order' means the source has no column to order a partial read by, so no partial set can be given honestly — narrow until it fits, or use 'stats'. The rest are transient; retry. OTHER FIELDS: - 'stats': exact minimum, maximum, mean and spread computed over EVERY matching row. Use these for any numeric claim — exact at any data size. - 'stats_basis': what shaped those numbers. If 'qc' is null the values are UNSCREENED and may include implausible outliers from bad sensor readings; say so, or re-run with a quality filter. When a mode was applied, 'qc_screened' lists the variables it actually checked — a variable not in it was NOT flag-checked, and an empty list means nothing was screened despite 'qc' naming a mode. 'qc_note', when present, explains that the screen drops whole rows, so it shapes every variable's figures. - 'structure': how many distinct floats/stations/profiles matched — often the real answer ("16 profiles from 5 floats"), which no row count gives. - 'sample': a genuinely random sample, included only when rows were withheld. For seeing what the data looks like — do NOT compute from it. - 'download_url': the full result as a file, in 'download_format'. Fetch it if you can run code; otherwise give it to the user. Absent for restricted sources and for matches too large to stage synchronously. - 'schema': each column's real type. Needed when reading the CSV download, which stores no types — without it a reader infers them and can get them wrong (an id column read as a number loses leading zeros). - 'omitted': names any part that could not be computed. An absent field is unknown, NOT zero. Args: source: Source id from list_data_sources (e.g. "gadr", "wod", "ndbc"). variables: Comma-separated canonical variable names (e.g. "temperature,salinity,depth"). bbox: Bounding box "west,south,east,north" (e.g. "-161,18,-154,23"). datetime: ISO-8601 instant or range ("2022-06-01/2022-06-30"; ".." for an open end). depth: Depth range in metres below surface, "min,max" (e.g. "0,200"). filters: JSON object of extra column filters on ordinary columns, e.g. {"data_mode": "D"}. For QUALITY screening prefer `qc` below — a source that defines modes applies them to each measurement correctly, where filtering a raw flag column yourself is easy to get wrong. qc: Named quality mode, and the right way to screen. Unfiltered ocean data contains sentinel values that make maxima and means physically implausible, so screen before any scientific claim. list_data_sources reports each source's `qc_modes`; pass one of those here. Passing a mode to a source with none is an error. A source with no modes may still expose per-measurement quality columns you can filter directly via `filters` — list_data_sources shows its variables. limit: Maximum rows to return, honored up to what fits inline. Omit for a default-sized head. When a response comes back as a head, `head.max_inline` tells you the largest limit worth asking for on that request. format: Encoding of `download_url`. Default "parquet" — it keeps every column's type, is ~5x smaller and ~2x faster, and `pd.read_parquet(url)` reads it. Choose "csv" when the link is going to a person who will open it by hand rather than into code, or when you can fetch a URL but cannot run code; then use `schema` to set the column types yourself. include_sample: Set False to skip the random sample and return slightly faster. output_format: 'csv' (compact, default), 'json', or 'toon'.

Discovered
get_item

Fetch a single AQUAVIEW dataset item with full details, properties, and download links (assets). STAC items embed assets inline — each asset includes an href (download URL) and media type, so there is no need for a separate "files" call. Args: collection: The collection ID the item belongs to (e.g., "NOAA", "NDBC", "WOD"). Available from search results or list_collections. item_id: The unique item identifier (e.g., "wod_xbt_ZZ144579"). Available from search results. output_format: "toon" (default) or "json". Returns: Full STAC item with geometry, properties (title, description, datetime, institution, variables, per-variable descriptions under aquaview:variable_descriptions when available, etc.), and assets (download links with media types).

Discovered
list_collections

List all available AQUAVIEW data collections (sources). Returns a summary of each collection with ID, title, description, spatial/temporal extent, and keywords. Use collection IDs to filter searches. These are CATALOG collections. Several are also queryable row by row — see list_data_sources for the sources get_data can pull observations from. A collection's bbox and temporal range are OUTER BOUNDS, not a promise of coverage. They are the envelope around everything in the collection, so most of the box usually holds no data at all — an Argo collection spans the global ocean, a partner collection with one point either side of the date line spans the whole planet. An empty result for a point or window inside the extent is the normal answer, not a failure: report "no data there", not "the query did not work", and do not widen a search on the strength of a bbox alone. Args: tag: Only collections with this tag, e.g. "uxs" for uncrewed systems. Pass the returned IDs as `collections` to search_datasets to search only those. output_format: "csv" (default, sectioned CSV — ~20% fewer tokens than TOON for this tabular response), "json", or "toon". Use "json" for deterministic/structured consumers. Returns: List of collections with count. CSV mode emits a single `## collections` section with columns id,title,bbox,temporal,keywords,description; bbox is rendered as "west,south,east,north"; temporal as "min|max"; keywords ";"-joined.

Discovered
list_data_sources

List the AQUAVIEW data sources you can pull actual rows from, or describe one in detail. Call this BEFORE get_data on a source you have not used. Variable names are canonical per source and cannot be guessed — this is where they come from. With an API key, sources your account is entitled to appear here too. Args: source_id: Omit to list every visible source. Give one (e.g. "gadr") to get its full detail: canonical variable names, units, row limits, and filterable columns. output_format: 'csv' (compact, default), 'json', or 'toon'.

Discovered
search_datasets

Search the AQUAVIEW catalog — a comprehensive collection of 268K+ global oceanographic, atmospheric, and marine datasets from 15 sources (NOAA, NDBC, IOOS, WOD, CoastWatch, etc.), intended for scientific research, data analysis, and environmental monitoring. This searches METADATA — which datasets exist. To pull the actual observations (temperature profiles, buoy readings, float positions), use get_data instead; list_data_sources shows which sources support it. You must provide at least one of: q, bbox, datetime, collections, filter, or token. Hint: When the user asks for a region, prefer the 'bbox' parameter over including region name in 'q'. Use the geo_hints resource for common bounding boxes. Args: q: Free-text search across title, description, and keywords (e.g., "sea surface temperature"). Case-insensitive, OR logic across terms. bbox: Bounding box as "west,south,east,north" (e.g., "-98,24,-80,31" for Gulf of Mexico). datetime: Temporal filter. Single datetime, range ("2020-01-01T00:00:00Z/2024-12-31T23:59:59Z"), or open-ended ("../2024-01-01T00:00:00Z" or "2020-01-01T00:00:00Z/.."). collections: Comma-separated collection IDs to search within (e.g., "NOAA,NDBC,WOD"). Use list_collections to see available IDs. exclude_collections: Comma-separated collection IDs to omit from results (e.g., "INCIDENT_NEWS" to drop oil-spill reports from free-text searches). Applied as a CQL2 NOT filter, so it composes with `filter`. filter: CQL2-JSON filter as an object or JSON-encoded string. Supports flat and nested property paths. Flat example: {"op": "=", "args": [{"property": "aquaview:institution"}, "NOAA/NCEI"]}. Nested example (filter by per-variable stats summary): {"op": "<=", "args": [{"property": "aquaview:column_stats_summary.variables.Pressure.min"}, 10]}. Supported operators: =, <>, <, >, <=, >=, like, between, in, and, or, not. license: Comma-separated SPDX license id(s) to match exactly (e.g., "CC-BY-4.0,CC0-1.0"). Also accepts the controlled extra values "public-domain", "proprietary", "various", "unknown". Matched against `aquaview:license`, which is normalized on every item regardless of source. sortby: Sort specification as "+field,-field" (e.g., "+properties.datetime,-id"). + = ascending, - = descending. limit: Number of results to return, 1-100. Defaults to 10. token: Pagination token from a previous response's 'next_token' field. Pass this to get the next page of results. fields: Comma-separated list of fields to include in results (e.g., "id,geometry,properties.title"). Reduces response size. When set in CSV mode, emits projected columns (no canonical columns, no asset_keys, no `## assets` section). include_assets: If False (default), asset download records are omitted to save ~60-70% of response tokens; CSV mode still emits a capped `asset_keys` hint column (e.g. `column_stats;overview;gdac_prof;+[N]`) so an agent can see what kinds of assets exist. To get full URLs, call `get_item(collection, item_id)` for the specific id. If True, assets are included inline (full dict for JSON/TOON; `## assets` section with item_id,key,href,type,title rows for CSV). output_format: "csv" (default, sectioned CSV — canonical columns including asset_keys hint), "json", or "toon". Returns: Search results with metadata (total matched, returned, next_token) and items. CSV mode emits `## metadata` + `## items` sections and a `## assets` section when include_assets=True; columns are id,collection,bbox,datetime,title,institution, platform_type,cdm_data_type,variables,keywords,source_url,description, column_stats_summary,geometry,asset_keys. JSON/TOON return the STAC feature shape, with the `assets` dict present only when include_assets=True.

Discovered

Recent measurements

Probe history

View status
Latest stored probes. Raw probe rows are kept for 14 days.
CheckedResultResponseTools
Connected437 ms6