Skip to main content
Glama

paleobiology-mcp-server: search fossil collections

paleobiology_search_collections
Read-onlyIdempotent

Find fossil collections (localities) by area and geologic time — "what has been dug up here, and from what rock." Each locality returns its location, age (named interval and Ma), formation and strata, lithology, depositional environment, and the count of co-occurring fossils. Filter by a clade-inclusive base_name (or base_id, the same clade by resolved taxon id), a named interval or max_ma/min_ma range, a lng/lat bounding box, a formation or lithology name, and/or an environment. Results page inline via limit/offset (the response discloses when more remain). Take a collection_no from a row and pass it — or the same bbox+interval — to paleobiology_search_occurrences to see the actual fauna found together.

Input Schema

NameRequiredDescriptionDefault
limitNoMaximum localities to return per page. Up to 500 are pulled per call; a larger value is served at 500, and the paging notice names that cap when more matches remain. A page can show fewer rows than it pulled when more would exceed the inline response size — the notice then names the offset that continues.
latmaxNoNorthern edge of the bounding box, decimal degrees (−90…90). Valid on its own — a lone latitude edge filters as a half-plane.
latminNoSouthern edge of the bounding box, decimal degrees (−90…90). Valid on its own — a lone latitude edge filters as a half-plane.
lngmaxNoEastern edge of the bounding box, decimal degrees (−180…180). Longitude is a closed pair — supply lngmin with it or neither.
lngminNoWestern edge of the bounding box, decimal degrees (−180…180). Longitude is a closed pair — supply lngmax with it or neither.
max_maNoOlder age bound in millions of years ago. When paired with min_ma it must be strictly greater — max_ma is the deeper-time end of the window.
min_maNoYounger age bound in millions of years ago. When paired with max_ma it must be strictly smaller — min_ma is the nearer-to-present end of the window.
offsetNoNumber of localities to skip — page with limit by advancing offset.
base_idNoClade-inclusive taxon filter by PBDB taxon id — the taxon_no from paleobiology_get_taxon, or accepted_no on an occurrence row. Same semantics as base_name, but unambiguous where a name is not (homonyms, synonyms, unresolved spellings). Supply this or base_name, never both.
intervalNoNamed geologic interval bounding the age, e.g. "Maastrichtian". Alternative to max_ma/min_ma.
base_nameNoClade-inclusive taxon filter — localities yielding this taxon or its descendants, e.g. "Dinosauria". Supply this or base_id, never both.
formationNoGeologic formation name to filter by, e.g. "Hell Creek".
lithologyNoLithology (rock type) to filter by, e.g. "sandstone".
environmentNoDepositional environment: "marine", "terrestrial", or "freshwater" (lacustrine + fluvial). Omit for all.

Output Schema

NameRequiredDescriptionDefault
capNoThe per-page limit that was applied (set when truncated).
errorNoPresent when the call failed. Absent on success.
shownNoNumber of localities returned in this page (set when truncated).
noticeNoGuidance when no locality matched, when localities remain past this page or it was cut to fit the inline response size (naming the offset that reaches the next one), when offset ran past the end of the match set, or when a filter value was not recognized and ignored.
truncatedNoTrue when localities remain past this page — advance offset for more.
totalCountNoTotal localities matching the filters upstream, across all pages.
attributionNoCC-BY data attribution for the Paleobiology Database.
collectionsNoMatching localities for this page.

Schema Changelog

Changes observed during successful MCP inspections.

  1. Changed6 schema fields changed
    • changedInput schema / properties / limit / description
      Previous value: -"Maximum localities to return per page (1–500)."New value: +"Maximum localities to return per page. Up to 500 are pulled per call; a larger value is served at 500, and the paging notice names that cap when more matches remain. A page can show fewer rows than it pulled when more would exceed the inline response size — the notice then names the offset that continues."
    • changedInput schema / properties / limit / maximum
      Previous value: -500New value: +10000
    • changedOutput schema / properties / collections / items / properties / reference_no / description
      Previous value: -"PBDB bibliographic reference id for provenance."New value: +"PBDB bibliographic reference id — the publication this collection was entered from. Resolve it to a full citation with paleobiology_get_references."
    • changedOutput schema / properties / error / properties / data / properties / reason / description
      Previous value: -"Machine-readable failure mode. Declared by this tool: `missing_filter`: The call carried only pagination fields — no taxon, time, place, formation, lithology, or environment filter. `conflicting_taxon_filter`: Both base_name and base_id were supplied — PBDB accepts only one clade selector. `incomplete_bbox`: Exactly one of lngmin/lngmax was supplied — a longitude box needs both edges. `inverted_ma_range`: min_ma was greater than or equal to max_ma — the age window is inverted or empty. Other values are possible when a failure originates below the handler."New value: +"Machine-readable failure mode. Declared by this tool: `missing_filter`: The call carried only pagination fields — no taxon, time, place, formation, lithology, or environment filter. `conflicting_taxon_filter`: Both base_name and base_id were supplied — PBDB accepts only one clade selector. `incomplete_bbox`: Exactly one of lngmin/lngmax was supplied — a longitude box needs both edges. `inverted_ma_range`: min_ma was greater than or equal to max_ma — the age window is inverted or empty. `pbdb_invalid_parameter`: PBDB refused a filter value it could not use, such as an unknown interval or lithology name — the message quotes its reason. Other values are possible when a failure originates below the handler."
    • changedOutput schema / properties / error / properties / data / properties / reason / examples
      Previous value: -[
      -  "missing_filter",
      -  "conflicting_taxon_filter",
      -  "incomplete_bbox",
      -  "inverted_ma_range"
      -]New value: +[
      +  "missing_filter",
      +  "conflicting_taxon_filter",
      +  "incomplete_bbox",
      +  "inverted_ma_range",
      +  "pbdb_invalid_parameter"
      +]
    • changedOutput schema / properties / notice / description
      Previous value: -"Guidance when no locality matched, when localities remain past this page, or when a filter value was not recognized and ignored."New value: +"Guidance when no locality matched, when localities remain past this page or it was cut to fit the inline response size (naming the offset that reaches the next one), when offset ran past the end of the match set, or when a filter value was not recognized and ignored."
  2. First observed

TDQS

A4.8/5.0
Behavior5/5

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

Annotations cover the safety profile (readOnly, idempotent, openWorld), and the description adds real behavioral context beyond them: the 500-row pull cap, that pages can show fewer rows than pulled when the inline response size would be exceeded, and that the paging notice names the continuing offset. That pagination/truncation behavior is not derivable from the annotations.

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?

Dense but front-loaded: what it finds, then returned fields, then filters, then paging, then the handoff to the sibling tool. For a 14-parameter tool the length is justified, though the em-dash-laden prose could be trimmed slightly.

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?

With an output schema present and annotations carrying the safety profile, the description needn't explain return shape — yet it still covers filtering, paging caps, and cross-tool routing. Nothing an agent needs to call this correctly is missing.

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

Parameters4/5

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

Schema coverage is 100%, so the baseline is 3. The description goes slightly beyond by grouping the filters (base_name vs base_id as "the same clade by resolved taxon id", named interval vs max_ma/min_ma, bbox lng/lat, formation, lithology, environment) and clarifying the taxon-filter alternatives, though most per-parameter detail still lives in the schema.

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 ("Find fossil collections (localities)") and immediately anchors it with the framing "what has been dug up here, and from what rock." It enumerates returned fields and names the sibling (paleobiology_search_occurrences) it is distinct from, so an agent can separate the two without opening schemas.

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

Usage Guidelines5/5

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

Explicitly routes the agent: "Take a collection_no from a row and pass it — or the same bbox+interval — to paleobiology_search_occurrences to see the actual fauna found together." It names the alternative tool and the exact condition/inputs that select it, leaving nothing to inference.

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.