protogrid

Search / org.aquaview/aquaview-mcp

aquaview-mcp

R0· no sign-in

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

v0.2.0 · active · descriptor JSON · versions

An agent can connect right now, no human step.Remote endpoint, no authentication, reachable on the last probe.
Quality76good
Trust69of 100
Uptime, 30 days100%
Latency p50136 ms

Connect

8 clients · secrets stay placeholders
{
  "mcpServers": {
    "aquaview-mcp": {
      "type": "http",
      "url": "https://mcp.aquaview.org/mcp"
    }
  }
}
claude mcp add --transport http aquaview-mcp https://mcp.aquaview.org/mcp
[mcp_servers.aquaview-mcp]
url = "https://mcp.aquaview.org/mcp"
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "aquaview-mcp": {
      "type": "remote",
      "url": "https://mcp.aquaview.org/mcp",
      "enabled": true
    }
  }
}
{
  "mcpServers": {
    "aquaview-mcp": {
      "type": "http",
      "url": "https://mcp.aquaview.org/mcp"
    }
  },
  "deeplink": "cursor://anysphere.cursor-deeplink/mcp/install?name=aquaview-mcp&config=eyJ0eXBlIjoiaHR0cCIsInVybCI6Imh0dHBzOi8vbWNwLmFxdWF2aWV3Lm9yZy9tY3AifQ%3D%3D"
}
{
  "servers": {
    "aquaview-mcp": {
      "type": "http",
      "url": "https://mcp.aquaview.org/mcp"
    }
  }
}
{
  "mcpServers": {
    "aquaview-mcp": {
      "httpUrl": "https://mcp.aquaview.org/mcp"
    }
  }
}
extensions:
  "aquaview-mcp":
    enabled: true
    name: "aquaview-mcp"
    type: streamable_http
    uri: "https://mcp.aquaview.org/mcp"
    timeout: 300

Quality 76 / 100good

protocol75 · weight 25
  • warn
    protocol.modernnewest supported version is 2025-11-25; 2026-07-28 not supported, older versions are deprecated until 2027-07-28
  • n/a
    protocol.statelessonly applies to 2026-07-28 servers
  • pass
    protocol.transportstreamable HTTP
  • n/a
    protocol.list_ttlonly applies to 2026-07-28 servers
authorizationn/a · weight 15
  • n/a
    auth.prm, auth.as_metadata, auth.cimdno remote uses OAuth
  • n/a
    auth.secret_in_urlno templated URL
tool hygiene64 · weight 30
  • pass
    tools.descriptionsevery tool has a description
  • warn
    tools.description_length4 tools have descriptions over 1,024 characters, which crowds the context
  • pass
    tools.schemasevery tool has an object input schema
  • fail
    tools.annotationsno tool declares readOnlyHint or destructiveHint, so clients cannot tell safe calls from risky ones
  • fail
    tools.directory_hintsno tool declares all four of readOnlyHint, destructiveHint, idempotentHint and openWorldHint; missing: search_datasets (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); aggregate (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); list_data_sources (readOnlyHint, destructiveHint, idempotentHint, openWorldHint); …
  • pass
    tools.token_costabout 4,252 tokens to load every tool
  • pass
    tools.api_dumptools are not a one-to-one API dump
stability100 · weight 15
  • pass
    stability.changes2 tool changes in 30 days
  • pass
    stability.rug_pullno tool changed its meaning under the same name
dependenciesn/a · weight 15
  • n/a
    deps.known_vulns, deps.mcp_sdk_version, deps.resolvableno npm or PyPI package

6 tools, about 4,252 tokens to load them all · tool set 5eb2aae461ae · tools last changed 2026-10-16 · checked 2026-10-20 23:27 UTC

Tool changes

  • get_datachangeddescription
    before

    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 declares no ordering, 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. - '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, e.g. {"data_mode": "D"}. Some sources expose per-measurement quality columns (GADR has temperature_qc, salinity_qc, pressure_qc — "1" is good, "4" is bad). Filtering on those is strongly recommended for any scientific claim: unfiltered data contains sentinel values that make maxima and means physically implausible. qc: Named quality mode. Only some sources define these — list_data_sources reports a source's `qc_modes`, and passing one to a source with none is an error. Sources without modes usually expose per-measurement quality columns you filter on directly via `filters` instead. 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 cod

    after · 87% of words in common

    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

  • list_collectionschangeddescription
    before

    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. 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.

    after · 65% of words in common

    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.

Full history: list_changes · trend: quality JSON.

Checks run on what our credential-free, read-only probes observe; tools are never called and no code audit is performed. How it is computed.

Trust 69 / 100

no-repository
provenance45
liveness100
freshness45
hygiene80

+dns-namespace +reachable +uptime-100% -stale-355d -no-repository

Derived from observable signals (official registry feed and our own credential-free probes); no code audit performed. How it is computed.

Endpoints

remoteauthreachableuptime 30dp50protocollast ok
https://mcp.aquaview.org/mcp streamable-httpnoneyes100%136 ms2025-11-252026-10-20
https://mcp.aquaview.org/sse ssenoneyes100%132 ms2025-11-252026-10-20

Tools (6)

aggregateRun 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.
get_dataPull 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'.
get_itemFetch 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).
list_collectionsList 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.
list_data_sourcesList 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'.
search_datasetsSearch 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.

Schemas: list_tools.

Similar MCP servers

Official server.json
{
  "name": "org.aquaview/aquaview-mcp",
  "$schema": "https://static.modelcontextprotocol.io/schemas/2025-10-17/server.schema.json",
  "remotes": [
    {
      "url": "https://mcp.aquaview.org/mcp",
      "type": "streamable-http"
    },
    {
      "url": "https://mcp.aquaview.org/sse",
      "type": "sse"
    }
  ],
  "version": "0.2.0",
  "description": "AQUAVIEW MCP Server - Search and access global oceanographic and environmental datasets."
}