Skip to main content
Glama

cern-opendata-mcp-server

Get CERN Open Data Records

cern_opendata_get_records
Read-onlyIdempotent

Fetch full metadata for 1-20 records in one call, by recid, DOI, CMS dataset path (/Primary/Era/TIER) or documentation slug. Returns the description, run periods, collision and distribution details, related records, a software-environment summary, the license and a ready citation, plus what a record states of its variable dictionary, physics category, pile-up, keywords, and LHCb magnet polarity and stripping. Documentation and news pages include their markdown body in slices of at most 30,000 characters; body_offset with that one id reads on from where a slice stops. Each response holds to 64,000 bytes, except that the first record always comes back whole: records past the budget, and ids past the first 20, are listed under deferred, to pass back as ids. File lists are not included; use cern_opendata_list_files. Identifiers that do not resolve come back under missing with guidance; they do not fail the call.

Tool call template

Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.

{
  "id": 1,
  "jsonrpc": "2.0",
  "method": "tools/call",
  "params": {
    "arguments": {
      "ids": "<ids>"
    },
    "name": "cern_opendata_get_records"
  }
}

Input Schema

NameRequiredDescriptionDefault
idsYesIdentifiers to resolve: up to 100, of which the first 20 distinct are looked up and the rest returned under deferred. Forms may be mixed; exact duplicates collapse.
body_offsetNoWith exactly one documentation or news id: where its body slice starts, in characters (UTF-16 code units), usually the body_next_offset an earlier call returned. 0 (the default) is the body's start and is accepted with any ids; above 0 needs exactly one id.

Output Schema

NameRequiredDescriptionDefault
errorNoPresent when the call failed. Absent on success.
noticeNoContinuation calls for a cut documentation body, budget-deferred records or ids past the first 20 left unread; absent when none.
missingNoIdentifiers that resolved to no record; empty when every id resolved.
recordsNoResolved records, in the order of their first matching input.
deferredNoContinuation ids: budget-omitted records in input order, then ids past the first 20, not looked up. The response budget is 64,000 bytes; the first record is always whole even when larger. Pass as ids to fetch them; empty when none.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed29 schema fields changed
    • changedOutput schema / properties / deferred / description
      Previous value: -"Inputs left for another call, in input order: those whose records were left out to hold the response to 64,000 bytes (never the first record, which is returned whole even when larger), then ids past the first 20, which were not looked up. Pass them as ids to fetch them. Empty when nothing was left out."New value: +"Continuation ids: budget-omitted records in input order, then ids past the first 20, not looked up. The response budget is 64,000 bytes; the first record is always whole even when larger. Pass as ids to fetch them; empty when none."
    • changedOutput schema / properties / notice / description
      Previous value: -"Caveats about the returned records: a documentation body with more to read, records deferred by the response budget, or ids past the first 20 that were not looked up, each with the call that continues it."New value: +"Continuation calls for a cut documentation body, budget-deferred records or ids past the first 20 left unread; absent when none."
    • changedOutput schema / properties / records / items / description
      Previous value: -"One record with its metadata, license and citation; file lists are not included."New value: +"Record metadata, license and citation; no file lists."
    • changedOutput schema / properties / records / items / properties / availability_details / description
      Previous value: -"File counts by availability state (online, on demand), as the portal reports them."New value: +"Portal-reported online/on-demand file counts."
    • changedOutput schema / properties / records / items / properties / body / description
      Previous value: -"Docs and news: the page body (markdown), at most 30,000 characters (UTF-16 code units) from body_offset."New value: +"Docs/news markdown: up to 30,000 characters (UTF-16 code units) from body_offset."
    • changedOutput schema / properties / records / items / properties / body_length / description
      Previous value: -"Docs and news: length of the whole body in characters (UTF-16 code units)."New value: +"Whole docs/news body length in UTF-16 code units."
    • changedOutput schema / properties / records / items / properties / body_next_offset / description
      Previous value: -"Docs and news: where the rest of the body starts, present only when more follows; pass it as body_offset with this id alone to continue."New value: +"Next docs/news slice start; absent at end. Pass as body_offset with this id alone to continue."
    • changedOutput schema / properties / records / items / properties / body_offset / description
      Previous value: -"Docs and news: where this body slice starts in the whole body; 0 for its start."New value: +"Docs/news slice start in UTF-16 code units; 0 is the body start."
    • changedOutput schema / properties / records / items / properties / body_truncated / description
      Previous value: -"Docs and news: true when more body follows this slice (see body_next_offset)."New value: +"More docs/news body follows; continue at body_next_offset."
    • changedOutput schema / properties / records / items / properties / category / properties / primary / description
      Previous value: -"Physics category, such as Standard Model Physics or Higgs, exactly as stored (the search category filter)."New value: +"Exact physics category for the search category filter (Standard Model Physics, Higgs, etc.)."
    • changedOutput schema / properties / records / items / properties / collections / description
      Previous value: -"Portal collections, exact and case-sensitive (the search collection filter)."New value: +"Exact, case-sensitive collections for the search collection filter."
    • changedOutput schema / properties / records / items / properties / dataset_semantics / description
      Previous value: -"Pages describing the dataset variables, on the portal; a record with an inline dictionary carries variables instead."New value: +"Portal variable-description pages; inline dictionaries appear in variables instead."
    • changedOutput schema / properties / records / items / properties / distribution / description
      Previous value: -"Distribution summary: formats, events, files and size."New value: +"Formats, event/file counts and byte size."
    • changedOutput schema / properties / records / items / properties / id / description
      Previous value: -"Portal id: the recid for records, the slug for documentation and news."New value: +"Portal id: recid for records, slug for docs and news."
    • changedOutput schema / properties / records / items / properties / kind / description
      Previous value: -"doc for documentation and news pages (they carry a slug), record otherwise."New value: +"doc for docs and news (slug); record otherwise."
    • changedOutput schema / properties / records / items / properties / license / properties / basis / description
      Previous value: -"record: stated on the record; cern_terms_default: a Dataset with no license of its own, CC0 under the CERN Open Data Terms of Use; not_stated: no license stated."New value: +"record: explicit license; cern_terms_default: Dataset without its own license, CC0 under CERN Open Data Terms of Use; not_stated: unstated."
    • changedOutput schema / properties / records / items / properties / links / description
      Previous value: -"Links from the abstract, note, usage, validation, use_with and pile-up sections and software links; empty when none."New value: +"Metadata and software links, with origin in source; empty when none."
    • changedOutput schema / properties / records / items / properties / matched_inputs / description
      Previous value: -"The requested ids that resolved to this record, as given."New value: +"Requested ids resolving here, as given."
    • changedOutput schema / properties / records / items / properties / pileup_html / description
      Previous value: -"Simulated data: how pile-up events were mixed in, HTML as the portal sent it; the pile-up datasets are in links with source pileup."New value: +"Pile-up mixing, original HTML; pile-up datasets appear in links with source pileup."
    • changedOutput schema / properties / records / items / properties / recid / description
      Previous value: -"Record id: digits (6004), or an experiment prefix and digits (atlas-160006); absent on docs and news."New value: +"Recid: digits (6004) or prefixed digits (atlas-160006); absent on docs and news."
    • changedOutput schema / properties / records / items / properties / relations / items / properties / type / description
      Previous value: -"Relation type as the portal states it (isParentOf, isChildOf, isRelatedTo); the portal applies it inconsistently."New value: +"Portal relation (isParentOf, isChildOf, isRelatedTo), inconsistently applied upstream."
    • changedOutput schema / properties / records / items / properties / run_numbers / description
      Previous value: -"Run numbers the record covers, as strings."New value: +"Covered run numbers, as strings."
    • changedOutput schema / properties / records / items / properties / stripping / description
      Previous value: -"LHCb datasets and stripping pages: the stripping stream and version."New value: +"LHCb dataset/stripping-page stream and version."
    • changedOutput schema / properties / records / items / properties / system_details / description
      Previous value: -"Software environment summary; cern_opendata_get_analysis_env expands it."New value: +"Software environment; cern_opendata_get_analysis_env expands it."
    • changedOutput schema / properties / records / items / properties / title_additional / description
      Previous value: -"Descriptive secondary title; used in the citation when present."New value: +"Secondary title; included in the citation when present."
    • changedOutput schema / properties / records / items / properties / type / description
      Previous value: -"Record type as the portal classifies it."New value: +"Portal record classification."
    • changedOutput schema / properties / records / items / properties / type / properties / primary / description
      Previous value: -"Primary type: Dataset, Software, Environment, Documentation, Supplementaries or News. Empty when the record states none."New value: +"Dataset, Software, Environment, Documentation, Supplementaries or News; empty when unstated."
    • changedOutput schema / properties / records / items / properties / type / properties / secondary / description
      Previous value: -"Secondary types, such as Collision or Simulated; empty when none."New value: +"Secondary types (Collision, Simulated, etc.); empty when none."
    • changedOutput schema / properties / records / items / properties / variables / description
      Previous value: -"The variable dictionary of a derived or event-level dataset, every entry."New value: +"Complete variable dictionary of a derived or event-level dataset."
  2. Changed4 schema fields changed
    • changedInput schema / properties / ids / description
      Previous value: -"Identifiers to resolve, 1-20: an array, or one comma-separated string. Forms may be mixed; duplicates collapse."New value: +"Identifiers to resolve: up to 100, of which the first 20 distinct are looked up and the rest returned under deferred. Forms may be mixed; exact duplicates collapse."
    • changedInput schema / properties / ids / maxItems
      Previous value: -20New value: +100
    • changedOutput schema / properties / deferred / description
      Previous value: -"Inputs whose records were left out to hold the response to 64,000 bytes, in input order; pass them as ids to fetch those records. Empty when every resolved record is returned."New value: +"Inputs left for another call, in input order: those whose records were left out to hold the response to 64,000 bytes (never the first record, which is returned whole even when larger), then ids past the first 20, which were not looked up. Pass them as ids to fetch them. Empty when nothing was left out."
    • changedOutput schema / properties / notice / description
      Previous value: -"Caveats about the returned records: a documentation body with more to read, or records deferred by the response budget, each with the call that continues it."New value: +"Caveats about the returned records: a documentation body with more to read, records deferred by the response budget, or ids past the first 20 that were not looked up, each with the call that continues it."
  3. First observed

TDQS

A4.4/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Annotations already cover the safety profile (readOnly, idempotent, openWorld), and the description adds real operational context: a 64,000-byte response budget, the guarantee that the first record is always returned whole, the deferred list for overflow and ids past 20, and 30,000-character body slicing. Unresolvable identifiers degrade to a 'missing' list rather than failing the call — exactly the kind of non-obvious behavior an agent needs.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Front-loaded with the core action and identifier forms in the first sentence, with limits and edge cases after. It is dense and somewhat over-packed, and the long enumeration of returned fields is partly redundant given an output schema exists.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a two-parameter lookup tool, the description covers input forms, batching limits, response-size behavior, pagination of document bodies, overflow handling, and unresolved-id handling — and an output schema exists to carry return shape. Nothing material is missing for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 100%, so both parameters are already fully documented, including the body_offset chaining to body_next_offset and the 'above 0 needs exactly one id' rule. The description restates these rather than adding new semantics, so the baseline of 3 applies.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

States a specific verb and resource (fetch full metadata for records) and enumerates the exact identifier forms accepted (recid, DOI, CMS dataset path, documentation slug). An agent can immediately tell this apart from list_files, search_records, and the analysis-env siblings.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly routes file-list needs to cern_opendata_list_files and explains the deferred/missing outcomes so the agent knows how to continue. It does not mention search_records as the way to discover ids in the first place, which would have made the when-to-use story complete.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.