# io.github.rpconroy/gdex-mcp (remote · gdex-mcp.k8s.ucar.edu)

MCP server for the GDEX (Geoscience Data Exchange) data portal: datasets, files, metrics, subsetting

- Trust score: 66/100 (medium)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-29

## Components

- remote · `gdex-mcp.k8s.ucar.edu`: 66/100 (this document), [markdown](https://verifymcp.io/servers/rpconroy-gdex-mcp/gdex-mcp.md), [page](https://verifymcp.io/servers/rpconroy-gdex-mcp/gdex-mcp)

## Channel facts

- Endpoint: `https://gdex-mcp.k8s.ucar.edu/mcp`
- Transports: `streamable-http`
- Auth: `none`
- Version: `0.1.0`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically against the live server, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-09-29.

- **Endpoint Security**: 63/100
  - The endpoint's TLS certificate is valid, in date, and uses a strong key.
  - Authorisation not fully verified: no authorisation is required to call this server, and 30 tool(s) never declared a destructiveHint. The MCP spec treats an absent hint as destructive by default, so we cannot call this surface safe.
  - HTTPS is enforced; there's no plaintext access path.
  - The HSTS (Strict-Transport-Security) header is present.
  - DNSSEC check failed: this domain isn't protected by DNSSEC.
- **Transport & Reachability**: 100/100
  - Verified streamable-http transport via a live MCP handshake.
- **Schema Quality & AI Usability**: 81/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 4519 tokens (~145/item across 31 items; 30 tools + 1 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 17/100
  - Stability observed for 5 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 71/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 0% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 75/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "purge_request" implies "purge" and declares no destructiveHint at all, which the MCP spec reads as destructive by default.
  - An AI judge read all 31 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### How do I install the io.github.rpconroy/gdex-mcp server?

io.github.rpconroy/gdex-mcp is a hosted endpoint at https://gdex-mcp.k8s.ucar.edu/mcp, so there is nothing to install locally. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add --transport http rpconroy-gdex-mcp 'https://gdex-mcp.k8s.ucar.edu/mcp'
```

### Cursor

```json
{
  "mcpServers": {
    "rpconroy-gdex-mcp": {
      "url": "https://gdex-mcp.k8s.ucar.edu/mcp"
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "rpconroy-gdex-mcp": {
      "type": "http",
      "url": "https://gdex-mcp.k8s.ucar.edu/mcp"
    }
  }
}
```

### Codex

```toml
[mcp_servers.rpconroy-gdex-mcp]
url = "https://gdex-mcp.k8s.ucar.edu/mcp"
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "rpconroy-gdex-mcp": {
      "type": "remote",
      "url": "https://gdex-mcp.k8s.ucar.edu/mcp",
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add rpconroy-gdex-mcp --url 'https://gdex-mcp.k8s.ucar.edu/mcp' --transport streamable-http
```

### Hermes

```yaml
mcp_servers:
  rpconroy-gdex-mcp:
    url: "https://gdex-mcp.k8s.ucar.edu/mcp"
```

### Netclaw

```json
{
  "McpServers": {
    "rpconroy-gdex-mcp": {
      "Transport": "http",
      "Url": "https://gdex-mcp.k8s.ucar.edu/mcp"
    }
  }
}
```

### Vellum

```bash
assistant mcp add rpconroy-gdex-mcp -t streamable-http -u 'https://gdex-mcp.k8s.ucar.edu/mcp'
```

### Other

```json
{
  "mcpServers": {
    "rpconroy-gdex-mcp": {
      "type": "http",
      "url": "https://gdex-mcp.k8s.ucar.edu/mcp"
    }
  }
}
```

The mcpServers block is a cross-client convention. Remote transports vary, so check your client's docs.

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-09-28 (score 66, +1)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-09-26 (score 65, +1)

No change was recorded against any check on this day. Stability & Change Management went from 3 to 7. That category is still filling its 30-day observation window: 1 days of observed history at the previous scan, 2 at this one. The score rises as the window fills, whether or not the server changes.

### 2026-09-25 (score 64, 0)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-09-24 (score 64)

First indexed and scored.

## MCP tools (30)

### `list_datasets` (~159 tokens)

List datasets available on GDEX, with their IDs and titles.

    The full catalog has ~1700 datasets — far too many to return at once.
    Always pass `query` to filter by keyword unless the user specifically
    wants to browse the whole catalog page by page.

    Args:
        query: Keyword(s) to filter by, matched case-insensitively as a substring
               against dataset id and title. Leave empty to browse unfiltered.
        limit: Max number of datasets to return (default 50, capped at 500)
        offset: Number of matching datasets to skip, for paging through results

Input parameters:

- `limit` (integer)
- `offset` (integer)
- `query` (string)

Output parameters:

- `result` (string)

### `get_dataset_metadata` (~59 tokens)

Return full metadata for a GDEX dataset (parameters, temporal range, spatial coverage, etc.).

    Args:
        dsid: Dataset ID (dNNNNNN), e.g. d083002

Input parameters:

- `dsid` (string, required)

Output parameters:

- `result` (string)

### `get_dataset_field` (~157 tokens)

Return one metadata field for a dataset.

    Prefer describe_dataset when the user wants a general summary covering
    several of these at once (abstract, temporal, spatial_coverage,
    variables, data_formats, volume) — this tool is for pulling a single
    field, including the fields describe_dataset doesn't cover
    (publications, contributors, related_datasets, documentation).

    Args:
        dsid: Dataset ID (dNNNNNN), e.g. d083002
        field: One of: abstract, variables, temporal, spatial_coverage,
               publications, contributors, data_formats, volume,
               related_datasets, documentation

Input parameters:

- `dsid` (string, required)
- `field` (string, required)

Output parameters:

- `result` (string)

### `describe_dataset` (~118 tokens)

Return a combined overview of a dataset — abstract, temporal coverage,
    spatial coverage, variables, data formats, and volume — in a single call.

    Prefer this over calling get_dataset_field repeatedly when the user wants
    a general summary of a dataset. If one of the underlying fields fails to
    load, it's returned as {"error": ...} rather than failing the whole call.

    Args:
        dsid: Dataset ID (dNNNNNN), e.g. d083002

Input parameters:

- `dsid` (string, required)

Output parameters:

- `result` (string)

### `get_file_groups` (~341 tokens)

Return file groups for a dataset. Pass gindex to get child groups under a parent.

    Groups nest (dataset -> format -> year -> month, or similar, varying by
    dataset) and there's no way to predict a child's gindex in advance — each
    group's gindex/url is dataset-specific and only knowable from the parent
    response. To drill down, read the gindex (or url) off a row in this
    response and pass that as the next call's gindex.

    This never returns file rows, only groups — every response stays small
    regardless of how many files the dataset holds, unlike get_dataset_files.
    Descend until a call returns empty ({} or []): that means the gindex you
    just called with is a leaf with no further subgroups, so it's safe to
    call get_dataset_files there for the actual files. find_dataset_files
    automates exactly this walk if you'd rather not do it by hand.

    At the top level, watch for a "Kerchunk Reference Files" (or similar
    ARCO-related) group alongside the raw-format groups. For an analysis
    task, prefer pulling from there (see also has_arco/get_arco_variables)
    over a raw data file when one's available — it avoids downloading a
    whole file just to read a subset of it.

    Args:
        dsid: Dataset ID (dNNNNNN), e.g. d083002
        gindex: Optional group index to fetch child groups

Input parameters:

- `dsid` (string, required)
- `gindex` (string)

Output parameters:

- `result` (string)

### `get_dataset_files` (~406 tokens)

Return a paginated file listing for a dataset or a specific group.

    Depending on how deep gindex is in the group hierarchy, this returns
    either actual file rows or another layer of subgroup summaries — there's
    no way to tell in advance which you'll get. If you get subgroups, read
    the gindex (or url) off a row and call again with that gindex to go one
    level deeper; gindex values are dataset-specific and can't be guessed.

    A shallow gindex on a large dataset can return a very large response
    (thousands of files) — the file-row portion of the response is capped at
    500 rows (look for "_truncated": true). Two ways to avoid hitting that
    cap instead of drilling down group by group: pass filter_wfile with a
    filename pattern (e.g. a date like "20220808") to filter down to matching
    files, or page through a known group's results with `page`. filter_wfile
    only filters actual file rows, so it has no effect at a gindex that's
    still returning a subgroup summary rather than files — if a first attempt
    comes back unfiltered, descend one level (see get_file_groups) and retry
    there.

    Args:
        dsid: Dataset ID (dNNNNNN), e.g. d083002
        gindex: Optional group index to filter files
        page: Page number to fetch (for a group with more files than fit on one page)
        filter_wfile: Filter files by name pattern, e.g. "20220808" to match a date
        fl: File list source (defaults to "web" server-side)

Input parameters:

- `dsid` (string, required)
- `filter_wfile` (string)
- `fl` (string)
- `gindex` (string)
- `page` (integer)

Output parameters:

- `result` (string)

### `find_dataset_files` (~397 tokens)

Search a dataset's file-group hierarchy for files matching a name
    pattern (e.g. a date like "20220808"), without ever pulling a large,
    context-blowing file listing.

    Automates the pattern described in get_file_groups: recursively calls
    get_file_groups, descending into every child gindex, until a gindex
    returns no further children (a leaf group) — then calls get_dataset_files
    there with filter_wfile=name_pattern and keeps only the matches. Prefer
    this over manually drilling with get_file_groups/get_dataset_files when
    you don't already know roughly where in the hierarchy to look.

    A dataset's hierarchy can be large (hundreds of leaf groups), and this
    tool has no way to know in advance which branches might contain a match,
    so it may need to visit many groups to be thorough. Pass start_gindex if
    you already know a good starting point (e.g. from a prior get_file_groups
    call, or a related dataset's structure) to narrow and speed up the
    search. If the number of groups visited hits max_groups_visited, the
    search stops early and `stopped_early` comes back true — narrow with
    start_gindex and retry, or raise the cap.

    Args:
        dsid: Dataset ID (dNNNNNN), e.g. d083002
        name_pattern: Filename substring/pattern to match, e.g. "20220808" for a date
        start_gindex: Optional group index to start the search from, instead of the dataset root
        max_groups_visited: Safety cap on groups traversed before giving up (default 300)

Input parameters:

- `dsid` (string, required)
- `max_groups_visited` (integer)
- `name_pattern` (string, required)
- `start_gindex` (string)

Output parameters:

- `result` (string)

### `get_filesearch_datatypes` (~103 tokens)

Return the file-search datatypes available for a dataset (a subset of
    "grid", "cyclone_fix", "sensor"). Call this before the other filesearch_*
    tools to know which one(s) apply — a dataset only supports search for the
    datatypes it actually contains.

    Args:
        dsid: Dataset ID (dNNNNNN), e.g. d083002

Input parameters:

- `dsid` (string, required)

Output parameters:

- `result` (string)

### `get_filesearch_grid_filters` (~230 tokens)

Return the valid parameter/product/grid/level codes and date range for
    "grid" datatype file search on a dataset. Use this to discover the codes
    to pass to get_filesearch_grid_files, optionally narrowed by any filters
    you already know you want.

    Args:
        dsid: Dataset ID (dNNNNNN), e.g. d083002
        valid_datetime_min: Restrict to data valid on/after "YYYY-MM-DD HH:MM"
        valid_datetime_max: Restrict to data valid on/before "YYYY-MM-DD HH:MM"
        parameters: Restrict to specified parameter code(s)
        products: Restrict to specified product code(s)
        grids: Restrict to specified grid code(s)
        levels: Restrict to specified vertical level code(s)

Input parameters:

- `dsid` (string, required)
- `grids` (array)
- `levels` (array)
- `parameters` (array)
- `products` (array)
- `valid_datetime_max` (string)
- `valid_datetime_min` (string)

Output parameters:

- `result` (string)

### `get_filesearch_cyclone_fix_filters` (~127 tokens)

Return the valid date range and other filters for "cyclone_fix"
    datatype file search on a dataset.

    Args:
        dsid: Dataset ID (dNNNNNN), e.g. d083002
        valid_datetime_min: Restrict to data valid on/after "YYYY-MM-DD HH:MM"
        valid_datetime_max: Restrict to data valid on/before "YYYY-MM-DD HH:MM"

Input parameters:

- `dsid` (string, required)
- `valid_datetime_max` (string)
- `valid_datetime_min` (string)

Output parameters:

- `result` (string)

### `get_filesearch_sensor_filters` (~117 tokens)

Return the valid date range and other filters for "sensor" datatype
    file search on a dataset.

    Args:
        dsid: Dataset ID (dNNNNNN), e.g. d083002
        valid_date_min: Restrict to data valid on/after "YYYY-MM-DD"
        valid_date_max: Restrict to data valid on/before "YYYY-MM-DD"

Input parameters:

- `dsid` (string, required)
- `valid_date_max` (string)
- `valid_date_min` (string)

Output parameters:

- `result` (string)

### `get_filesearch_grid_files` (~259 tokens)

Search for data files containing "grid" datatype data, filtered by
    parameter code(s) and optionally by time range, product, grid, or level.
    Results are paginated; use get_filesearch_result_page with the returned
    result_id to fetch additional pages. Use get_filesearch_grid_filters
    first to find valid parameter/product/grid/level codes for this dataset.

    Args:
        dsid: Dataset ID (dNNNNNN), e.g. d083002
        parameters: Parameter code(s) to search for (required, at least one)
        valid_datetime_min: Restrict to data valid on/after "YYYY-MM-DD HH:MM"
        valid_datetime_max: Restrict to data valid on/before "YYYY-MM-DD HH:MM"
        products: Restrict to specified product code(s)
        grids: Restrict to specified grid code(s)
        levels: Restrict to specified vertical level code(s)

Input parameters:

- `dsid` (string, required)
- `grids` (array)
- `levels` (array)
- `parameters` (array, required)
- `products` (array)
- `valid_datetime_max` (string)
- `valid_datetime_min` (string)

Output parameters:

- `result` (string)

### `get_filesearch_cyclone_fix_files` (~149 tokens)

Search for data files containing "cyclone_fix" datatype data, optionally
    filtered by time range. Results are paginated; use get_filesearch_result_page
    with the returned result_id to fetch additional pages.

    Args:
        dsid: Dataset ID (dNNNNNN), e.g. d083002
        valid_datetime_min: Restrict to data valid on/after "YYYY-MM-DD HH:MM"
        valid_datetime_max: Restrict to data valid on/before "YYYY-MM-DD HH:MM"

Input parameters:

- `dsid` (string, required)
- `valid_datetime_max` (string)
- `valid_datetime_min` (string)

Output parameters:

- `result` (string)

### `get_filesearch_sensor_files` (~138 tokens)

Search for data files containing "sensor" datatype data, optionally
    filtered by date range. Results are paginated; use get_filesearch_result_page
    with the returned result_id to fetch additional pages.

    Args:
        dsid: Dataset ID (dNNNNNN), e.g. d083002
        valid_date_min: Restrict to data valid on/after "YYYY-MM-DD"
        valid_date_max: Restrict to data valid on/before "YYYY-MM-DD"

Input parameters:

- `dsid` (string, required)
- `valid_date_max` (string)
- `valid_date_min` (string)

Output parameters:

- `result` (string)

### `get_filesearch_result_page` (~141 tokens)

Return a page of results from a previous get_filesearch_*_files call, by
    its result_id. Use this to page through file-search results beyond the
    first page (see the "pagination" block of a files/results response for
    num_pages and next_page).

    Args:
        dsid: Dataset ID (dNNNNNN), e.g. d083002
        result_id: The result_id from a previous filesearch files/results response
        page_num: Page number to retrieve

Input parameters:

- `dsid` (string, required)
- `page_num` (integer, required)
- `result_id` (string, required)

Output parameters:

- `result` (string)

### `get_data_access` (~58 tokens)

Return data access options for a dataset — download links, Globus URLs, access methods.

    Args:
        dsid: Dataset ID (dNNNNNN), e.g. d083002

Input parameters:

- `dsid` (string, required)

Output parameters:

- `result` (string)

### `has_arco` (~206 tokens)

Check whether Analysis-Ready Cloud-Optimized (ARCO) data is available for a dataset.

    For analysis tasks, call this (and check for a "Kerchunk Reference Files"
    group via get_file_groups) before reaching for raw data files — reading
    through ARCO/kerchunk references avoids downloading whole files just to
    subset them. When picking among kerchunk reference variants, always use
    the one with "-osdf" in its name (see get_arco_variables) — other
    variants' chunk targets can be internal paths that only resolve on
    NCAR's network. Open it with xr.open_dataset(url, engine="kerchunk",
    storage_options={"remote_protocol": "https", "lazy": True}) rather than
    hand-building an fsspec reference filesystem.

    Args:
        dsid: Dataset ID (dNNNNNN), e.g. d083002

Input parameters:

- `dsid` (string, required)

Output parameters:

- `result` (string)

### `get_arco_variables` (~265 tokens)

Return the list of ARCO variables available for a dataset.

    Each row's type (index 2) is either "zarr" or "reference" (kerchunk).
    A "reference" variable is often listed multiple times, once per kerchunk
    reference variant (plain, "-remote-https", "-remote-osdf", etc.) — always
    pick the "-osdf" variant's URL; the others' chunk targets can be internal
    paths that only resolve on NCAR's network. Open it with
    xr.open_dataset(url, engine="kerchunk", storage_options={"remote_protocol":
    "https", "lazy": True}) — that's better behaved than hand-building an
    fsspec reference filesystem. A "zarr" row needs no variant picking — its
    URL already routes through the OSDF director (rewritten automatically);
    open it directly with xr.open_dataset(url, engine="zarr").

    Results are capped at 300 rows (look for "truncated": true); narrow with
    search_arco_variables if you hit the cap.

    Args:
        dsid: Dataset ID (dNNNNNN), e.g. d083002

Input parameters:

- `dsid` (string, required)

Output parameters:

- `result` (string)

### `search_arco_variables` (~185 tokens)

Search ARCO variables by name for a dataset.

    As with get_arco_variables, a "reference" (kerchunk) match is often
    listed once per variant — always pick the "-osdf" variant's URL (reachable
    from anywhere), and open it with xr.open_dataset(url, engine="kerchunk",
    storage_options={"remote_protocol": "https", "lazy": True}). A "zarr"
    match needs no variant picking — its URL already routes through the OSDF
    director (rewritten automatically); open it directly with
    xr.open_dataset(url, engine="zarr").

    Args:
        dsid: Dataset ID (dNNNNNN), e.g. d083002
        query: Search text to match against variable names

Input parameters:

- `dsid` (string, required)
- `query` (string, required)

Output parameters:

- `result` (string)

### `get_portal_metrics` (~66 tokens)

Return a GDEX portal-wide metric.

    Args:
        metric: One of: volume_downloaded, unique_users, total_datasets,
                total_citations, gdex_volume, total_requests, top_datasets, ai_datasets

Input parameters:

- `metric` (string)

Output parameters:

- `result` (string)

### `get_dataset_metrics` (~72 tokens)

Return a per-dataset metric.

    Args:
        dsid: Dataset ID (dNNNNNN), e.g. d083002
        metric: One of: users_month, users_year, volume_month, volume_year

Input parameters:

- `dsid` (string, required)
- `metric` (string)

Output parameters:

- `result` (string)

### `get_staff` (~48 tokens)

Return GDEX staff contacts, optionally filtered to a specific dataset.

    Args:
        dsid: Optional dataset ID. If omitted, returns all staff.

Input parameters:

- `dsid` (string)

Output parameters:

- `result` (string)

### `list_request_statuses` (~26 tokens)

List all subsetting request statuses for the authenticated user. Requires GDEX_TOKEN.

Output parameters:

- `result` (string)

### `check_request_status` (~45 tokens)

Check the status of a specific subsetting request. Requires GDEX_TOKEN.

    Args:
        rindex: Request index/ID

Input parameters:

- `rindex` (string, required)

Output parameters:

- `result` (string)

### `get_request_files` (~46 tokens)

Return the output files for a completed subsetting request. Requires GDEX_TOKEN.

    Args:
        rindex: Request index/ID

Input parameters:

- `rindex` (string, required)

Output parameters:

- `result` (string)

### `get_control_file_template` (~56 tokens)

Return the control file template for building a subsetting request for a dataset.

    Args:
        dsid: Dataset ID (dNNNNNN), e.g. d083002

Input parameters:

- `dsid` (string, required)

Output parameters:

- `result` (string)

### `validate_subset_request` (~110 tokens)

Check a subset request body against the dataset's control file template,
    without submitting anything. Use this before submit_subset_request to catch
    missing or unrecognized fields fast, instead of finding out from a failed
    API call.

    Args:
        dsid: Dataset ID (dNNNNNN), e.g. d083002
        request_json: JSON string of the subsetting request body to validate

Input parameters:

- `dsid` (string, required)
- `request_json` (string, required)

Output parameters:

- `result` (string)

### `submit_subset_request` (~76 tokens)

Submit a data subset request to GDEX. Requires GDEX_TOKEN.

    Args:
        request_json: JSON string of the subsetting request body. Use get_control_file_template
                      to get the expected structure for a dataset, or validate_subset_request
                      to check it before submitting.

Input parameters:

- `request_json` (string, required)

Output parameters:

- `result` (string)

### `submit_and_wait_for_request` (~265 tokens)

Submit a subset request and poll its status until it finishes, fails, or
    timeout_s elapses — instead of calling submit_subset_request and then
    manually looping on check_request_status. Requires GDEX_TOKEN.

    GDEX's API schema doesn't document the exact status vocabulary, so
    "finished" is a best-effort match on the status text (words like
    "complete" vs. "error"/"fail"). If the outcome comes back "timeout", that
    means the request is still pending by our reading, not that it failed —
    keep polling with check_request_status(rindex), or re-run this tool with
    a longer timeout_s. If it comes back "unknown", the status payload didn't
    contain a field we recognize; inspect the raw "status" value yourself.

    Args:
        request_json: JSON string of the subsetting request body (see get_control_file_template).
        poll_interval_s: Seconds between status checks (default 15, minimum 5).
        timeout_s: Give up and return the last-seen status after this many seconds (default 600).

Input parameters:

- `poll_interval_s` (integer)
- `request_json` (string, required)
- `timeout_s` (integer)

Output parameters:

- `result` (string)

### `purge_request` (~46 tokens)

Delete a subsetting request and its output files. Requires GDEX_TOKEN.

    Args:
        rindex: Request index/ID to purge

Input parameters:

- `rindex` (string, required)

Output parameters:

- `result` (string)

## Diagnostics

Captured diagnostic sections: TLS, DNSSEC, Authorisation, Transports. The full working is on the page: https://verifymcp.io/servers/rpconroy-gdex-mcp/gdex-mcp#diagnostics

## Score history

- 2026-09-29: 66
- 2026-09-28: 66
- 2026-09-27: 65
- 2026-09-26: 65
- 2026-09-25: 64
- 2026-09-24: 64

## Common questions

### What is the io.github.rpconroy/gdex-mcp server?

io.github.rpconroy/gdex-mcp is listed in the public MCP registry as io.github.rpconroy/gdex-mcp. MCP server for the GDEX (Geoscience Data Exchange) data portal: datasets, files, metrics, subsetting. This page covers its hosted endpoint (https://gdex-mcp.k8s.ucar.edu/mcp).

### Is the io.github.rpconroy/gdex-mcp server safe to use?

io.github.rpconroy/gdex-mcp scores 66 out of 100 on VerifyMCP. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the io.github.rpconroy/gdex-mcp server expose?

io.github.rpconroy/gdex-mcp exposes 30 tools: list_datasets, get_dataset_metadata, get_dataset_field, describe_dataset, get_file_groups, and 25 more. Their descriptions and schemas cost roughly 4,471 tokens of context every time the server is loaded.

### Does the io.github.rpconroy/gdex-mcp server require authentication?

No. We connected to io.github.rpconroy/gdex-mcp without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.

### Is the io.github.rpconroy/gdex-mcp server still maintained?

io.github.rpconroy/gdex-mcp is still listed as active in the MCP registry. We last reached this channel on 29 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

## Links

- Remote endpoint: https://gdex-mcp.k8s.ucar.edu/mcp
- Repository: https://github.com/NCAR/gdex-mcp
- Changelog RSS feed: https://verifymcp.io/servers/rpconroy-gdex-mcp/gdex-mcp.xml
- Changelog JSON feed: https://verifymcp.io/servers/rpconroy-gdex-mcp/gdex-mcp.json
- HTML version of this page: https://verifymcp.io/servers/rpconroy-gdex-mcp/gdex-mcp
