MCP Server for ESS-DIVE API providing tools for accessing and analyzing data from ESS-DIVE and ESS-DeepDive APIs
ESS-DIVE MCP Server demonstrates solid definition quality with consistent naming conventions (18/18 tools start with action verbs: search-, get-, next-, previous-, doi-, essdive-, parse-, generate-, lookup-, coords-), clear descriptions for all tools (avg ~150 chars, meeting 10-1024 char baseline), and explicit input schemas with type definitions. However, several critical gaps prevent a higher score: (1) output schemas are not documented, tool descriptions state WHAT is returned but not the structure agents should expect; (2) parameter descriptions lack detail on constraints, formats, ranges, and error conditions; (3) pagination tools (next-search-page, previous-search-page, next-dataset-versions-page, previous-dataset-versions-page) expose implicit stateful cursor management without documenting how cursor state is tracked server-side or what happens on concurrent requests; (4) no error guidance, LLMs receive no recovery hints when tools fail; (5) composition relies on undocumented assumptions about result field naming and availability across tools. All 18 tools have names, descriptions, and input schemas present, avoiding the hard MUST-FAIL conditions, but the schemas lack richness (e.g., 'coordinates' in coords-to-map-links lacks nested field definitions, 'geographicBounds' and 'nearbySearch' in search-datasets lack detailed structure). The tool definitions are production-grade but not LLM-optimized for agentic planning.
Convert points or a bounding box to viewable map links (e.g., geojson.io).
Convert Digital Object Identifiers (DOI) to ESS-DIVE dataset IDs. Handles multiple DOI formats (doi:10.xxxx, https://doi.org/10.xxxx, etc.).
Convert ESS-DIVE dataset IDs to standardized DOI format.
Generate a consistent data citation with repository and access details for ESS-DIVE metadata, with Crossref fallback for other DOIs.
Retrieve detailed metadata for a specific dataset, including top-level package fields such as isPublic, dateUploaded, dateModified, citation, and available data files.
Get sharing and access permission information for datasets.
Output schemas not documented. Tool descriptions do not specify the structure of returned data (fields, types, nested objects). LLMs cannot plan multi-step workflows or extract the right fields for downstream tool calls.
Pagination state management undocumented and stateful. Tools next-search-page, previous-search-page, next-dataset-versions-page, previous-dataset-versions-page rely on implicit server-side cursor tracking (visible in code: _SINGLE_CLIENT_SESSION_KEY, PAGINATION_STATE_TTL_SECONDS). No documentation of how state is keyed, how long it persists, or what happens on concurrent requests. Violates stateless protocol requirement.
Inferred effective spec: 2026-07-28+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 63 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 23 | - | v1 |
Get workflow/status metadata for a dataset from the /packages/{identifier}/status endpoint.
List visible versions of a dataset from newest to oldest, with cursor-based pagination support for version history navigation.
Retrieve detailed field information and metadata for a specific file in the ESS-DeepDive database.
Get comprehensive file-level information including field names, data types, summary statistics, and download metadata from ESS-DeepDive.
Look up ESS-DIVE-related project names, acronyms, descriptions, and portal URLs from shared local project reference data.
Navigate to the next page of the most recent dataset-version history request without exposing raw pagination cursors.
Navigate to the next page of the most recent dataset-search result set without exposing raw pagination cursors.
Parse File Level Metadata (FLMD) CSV files to extract filename and description mappings for dataset files.
Navigate to the previous page of the most recent dataset-version history request without exposing raw pagination cursors.
Navigate to the previous page of the most recent dataset-search result set without exposing raw pagination cursors.
Full-text search across ESS-DIVE datasets with filtering by creator, provider, publication date, temporal coverage, keywords, geographic bounds/nearby search, and local metadata-aware post-filters for fields exposed on full dataset records. Supports pagination and multiple result formats.
Search the ESS-DeepDive fusion database for data fields by name, definition, value (text/numeric/date), and record count. Supports multi-page results.
Parameter descriptions lack constraint details. Schemas show types but descriptions do not specify ranges (e.g., page size limits), allowed values for filter fields, format expectations (ISO 8601 for dates?), or error conditions. E.g., 'Filter by publication date' does not explain format or range.
No error handling guidance. Code does not show error responses or recovery hints. LLMs receive no actionable guidance on what to do if a tool fails (retry? ask user? try alternative?). Error messages are likely raw HTTP status codes or exceptions.
Complex nested parameters lack detailed schema definitions. 'geographicBounds' and 'nearbySearch' in search-datasets are objects but nested field types/descriptions not shown. 'coordinates' in coords-to-map-links similarly opaque. LLMs cannot construct valid inputs without explicit field schemas.
Result limits not enforced or documented. Search tools (search-datasets, search-ess-deepdive) do not state max result count per call. Large result sets can blow context window; best practice is to cap at 20-50 items and offer pagination.
Composition chains undocumented. No guidance on which tool outputs contain IDs needed by downstream tools. E.g., does search-datasets return dataset IDs in a 'id' or 'datasetId' field? Without explicit field naming contracts, agents waste calls on discovery lookups.