io.github.cyanheads/paleobiology-mcp-server
REMOTE · PALEOBIOLOGY.CASEYJHAND.COM · 2 COMPONENTS
Search fossil occurrences, taxon ranges, diversity through deep time, and the geologic time scale.
Available components
Last scanned (10 hours ago)
Scores higher than 96% of remote servers
Reachable. Last reached 5 Nov 2026.
Category Health and Science
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. How we score → Why this is hard to score →
Endpoint Security83
- The endpoint's TLS certificate is valid, in date, and uses a strong key. View diagnostics → Pass
- No authorisation is required to call this server. Every tool declares its destructiveHint and none is destructive, so open access doesn't expose one. See how to fix → View diagnostics → Partial
- HTTPS is enforced; there's no plaintext access path. View diagnostics → Pass
- The HSTS (Strict-Transport-Security) header is present. View diagnostics → Pass
- DNSSEC is configured correctly; the domain's records validate against the full chain to the root. View diagnostics → Pass
Transport & Reachability100
- Verified streamable-http transport via a live MCP handshake. View diagnostics → Pass
Schema Quality & AI Usability73
- 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).Pass
- AI-judged instruction clarity (excellent).Pass
- Context-footprint check failed: tool/resource definitions use about 3856 tokens (~428/item across 9 items; 8 tools + 1 resources), over budget; trim descriptions and params. See how to fix → Fail
- Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
- No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
- 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
- 100% of tool parameters carry a description.Pass
- Structured output schemas are declared (100% of tools); any adoption earns full credit.Pass
Tool Safety100
- No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
- We read all 8 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
- An AI judge read all 10 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
- Implements a current MCP spec version (2026-07-28).Pass
Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.
- 1 Nov 26 +2
- The server rewrote its instructions, which are the text every model session reads security
- Tool “paleobiology_dataframe_query” rewrote its description, which is the text the model reads security
- Tool “paleobiology_search_occurrences” rewrote its description, which is the text the model reads security
- Tool “paleobiology_get_taxon” rewrote its description, which is the text the model reads security
- Tool “paleobiology_get_references” rewrote its description, which is the text the model reads security
- First check of Schema quality: 100 functional
- New resource “paleobiology-guide” functional
- Server version: 0.4.0 → 0.5.0 functional
- “paleobiology_get_diversity” added an optional parameter “formation” cosmetic
- “paleobiology_get_diversity” added an optional parameter “country” cosmetic
- “paleobiology_search_occurrences” added an optional parameter “formation” cosmetic
- “paleobiology_search_occurrences” added an optional parameter “country” cosmetic
- “paleobiology_search_collections” added an optional parameter “country” cosmetic
- “paleobiology_get_diversity” added an optional parameter “recent” cosmetic
- “paleobiology_get_diversity” added an optional parameter “lngmin” cosmetic
- “paleobiology_get_diversity” added an optional parameter “lngmax” cosmetic
- “paleobiology_get_diversity” added an optional parameter “latmin” cosmetic
- “paleobiology_get_diversity” added an optional parameter “latmax” cosmetic
- “paleobiology_get_diversity” added an optional parameter “environment” cosmetic
- “paleobiology_get_diversity” reworded the description of “base_id” cosmetic
- “paleobiology_search_occurrences” reworded the description of “limit” cosmetic
- “paleobiology_search_occurrences” reworded the description of “canvas_id” cosmetic
- “paleobiology_search_occurrences” reworded the description of “base_id” cosmetic
- “paleobiology_search_collections” reworded the description of “limit” cosmetic
- “paleobiology_search_collections” reworded the description of “formation” cosmetic
- “paleobiology_search_collections” reworded the description of “base_id” cosmetic
- “paleobiology_list_intervals” reworded the description of “min_ma” cosmetic
- “paleobiology_list_intervals” reworded the description of “max_ma” cosmetic
- “paleobiology_get_references” reworded the description of “reference_nos” cosmetic
- 15 Oct 26 0
- The server rewrote its instructions, which are the text every model session reads security
- Tool “paleobiology_search_occurrences” rewrote its description, which is the text the model reads security
- Tool “paleobiology_dataframe_query” rewrote its description, which is the text the model reads security
- Schema quality: 3338 → 3719 ▼ functional
- Server version: 0.3.7 → 0.4.0 functional
- New tool “paleobiology_get_references” functional
- “paleobiology_dataframe_query” reworded the description of “sql” cosmetic
- “paleobiology_search_occurrences” reworded the description of “limit” cosmetic
- “paleobiology_search_occurrences” reworded the description of “canvas_id” cosmetic
- “paleobiology_search_collections” reworded the description of “limit” cosmetic
- “paleobiology_list_intervals” reworded the description of “max_ma” cosmetic
- “paleobiology_get_taxon” reworded the description of “taxon_no” cosmetic
- 4 Oct 26 0
- Server version: 0.3.6 → 0.3.7 functional
- 28 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 25 Sept 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
- 24 Sept 26 0
- Stability: 0.97 → pass security
- 19 Sept 26 0
- Server version: 0.3.5 → 0.3.6 functional
- 26 Aug 26 0
- We updated how we score, so this day's move reflects our rubric, not a change to the server See what changed → functional
Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.
Captured 5 Nov 2026 · Probed https://paleobiology.caseyjhand.com/mcp
TLS valid
Negotiated TLS 1.3 with TLS_AES_128_GCM_SHA256 .
| Subject | Issuer | Valid from | Valid until | Key | Signature | Serial |
|---|---|---|---|---|---|---|
| CN=caseyjhand.com | CN=WE1,O=Google Trust Services,C=US | 2 Nov 2026 | 31 Jan 2027 | ECDSA 256 | ECDSA-SHA256 | 995a30681ab772540e934241ca1d576c |
| SANs: caseyjhand.com, *.caseyjhand.com | ||||||
| CN=WE1,O=Google Trust Services,C=US (CA) | CN=GTS Root R4,O=Google Trust Services LLC,C=US | 13 Dec 2023 | 20 Feb 2029 | ECDSA 256 | ECDSA-SHA384 | 7ff31977972c224a76155d13b6d685e3 |
| CN=GTS Root R4,O=Google Trust Services LLC,C=US (CA) | CN=GlobalSign Root CA,OU=Root CA,O=GlobalSign nv-sa,C=BE | 15 Nov 2023 | 28 Jan 2028 | ECDSA 384 | SHA256-RSA | 7fe530bf331343bedd821610493d8a1b |
Background: What to check on a remote MCP endpoint →
DNSSEC secure
Validation of paleobiology.caseyjhand.com. — Secure
| Zone | DS | Keys | Algorithms | Outcome |
|---|---|---|---|---|
| . | trust_anchor | 20326, 38696 | 8, 8 | Verified |
| com. | present | 19718 | 13 | Verified |
| caseyjhand.com. | present | 2371 | 13 | Verified |
| paleobiology.caseyjhand.com. | Verified address RRset verified with the apex keys |
Authentication No authorisation required
The endpoint answered without asking for a token. Anyone who knows the URL can reach it.
| Result | No authorisation required |
|---|---|
| HTTP status | 200 |
| Header | Value |
|---|---|
| strict-transport-security | max-age=63072000; includeSubDomains; preload |
| x-content-type-options | nosniff |
Background: How OAuth 2.1 works in the 2026 MCP spec →
Transports 2 probes
| Transport | URL | Outcome | Status | Location |
|---|---|---|---|---|
| streamable-http | https://paleobiology.caseyjhand.com/mcp | Verified | 200 | |
| http (plaintext) | http://paleobiology.caseyjhand.com/mcp | HTTPS enforced | 301 | https://paleobiology.caseyjhand.com/mcp |
The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →
paleobiology_dataframe_describe paleobiology-mcp-server: describe staged canvas tables ~75
List the tables and their columns staged on a DataCanvas by paleobiology_search_occurrences. Call this before paleobiology_dataframe_query to discover the exact table_name and column names to reference in SQL.
| Name | Type | Req | Description |
|---|---|---|---|
| canvas_id | string | yes | Canvas id returned by paleobiology_search_occurrences when its result spilled. |
| Name | Type | Req | Description |
|---|---|---|---|
| error | object | – | Present when the call failed. Absent on success. |
| tables | array | – | Tables staged on the canvas. |
No examples provided.
paleobiology_dataframe_query paleobiology-mcp-server: query staged occurrences with SQL ~271
Run a read-only SQL SELECT against occurrence result sets staged on a DataCanvas by paleobiology_search_occurrences. This is how you analyze a large fossil set without re-fetching it: count occurrences by early_interval, group by formation, country (cc), or accepted_name, or filter by a paleo/modern coordinate range. The classification column is JSON — roll up by rank with json_extract_string(classification, '$.family') (also $.phylum, $.class, $.order, $.genus). Staged rows are occurrences, so collection-only fields such as lithology are not present. Reference tables by the table_name that paleobiology_search_occurrences returned — call paleobiology_dataframe_describe first if you do not know the table or column names. Every row supplied by the canvas is returned; choose smaller pages with SQL LIMIT/OFFSET. Results exceeding the canvas row cap include a notice naming the stable ORDER BY … LIMIT/OFFSET continuation. SELECT only; writes and file-reading functions are rejected.
| Name | Type | Req | Description |
|---|---|---|---|
| canvas_id | string | yes | Canvas id returned by paleobiology_search_occurrences when its result spilled. |
| sql | string | yes | A read-only SQL SELECT. Reference tables by the names paleobiology_search_occurrences / paleobiology_dataframe_describe returned. |
| Name | Type | Req | Description |
|---|---|---|---|
| error | object | – | Present when the call failed. Absent on success. |
| notice | string | – | Guidance when row_count stopped at the canvas row cap, including SQL LIMIT/OFFSET continuation. |
| row_count | number | – | Rows the query produced, counted up to the canvas row cap — exact unless truncated is true, when it equals the cap and the result is larger. |
| rows | array | – | Every result row supplied by the canvas, in query order. Keys are the selected column names. Use SQL LIMIT/OFFSET to choose smaller pages. |
| truncated | boolean | – | True when the query produced more rows than the canvas row cap, so row_count stopped counting at the cap. |
No examples provided.
paleobiology_get_diversity paleobiology-mcp-server: diversity through time ~699
Compute a diversity / origination / extinction curve for a clade across geologic time, binned by period, epoch, or age — answers "plot dinosaur genus diversity across the Mesozoic." Pass a clade-inclusive base_name (or base_id, the same clade by resolved taxon id — exactly one of the two) and bound the span by a named interval (e.g. "Mesozoic") or a max_ma/min_ma range; choose what to count (genera, species, or families) and the bin resolution. The full bin set returns inline — a diversity series is a bounded set of geologic intervals — so you read the curve, the turnover, and the per-bin origination/extinction directly. Counts reflect SAMPLED diversity, biased by collection effort and rock availability, not true past diversity.
| Name | Type | Req | Description |
|---|---|---|---|
| base_id | integer | – | Clade-inclusive taxon to count, by PBDB taxon id — use accepted_no from paleobiology_get_taxon or an occurrence row for an accepted-clade search. Supply this or base_name (exactly one is required, ne… |
| base_name | string | – | Clade-inclusive taxon to count, e.g. "Dinosauria" or "Ammonoidea" — this taxon and all descendants. Supply this or base_id (exactly one is required, never both). |
| count | string | – | What to count per bin: "genera" (default), "species", or "families". |
| country | string | – | PBDB country or continent codes, e.g. "US", "NOA,^US", or "!EUR,^IS". |
| environment | string | – | Depositional environment: marine, terrestrial, or freshwater (lacustrine + fluvial). |
| formation | string | – | Stored formation name, e.g. "Hell Creek"; comma lists and SQL wildcards are passed unchanged. Do not append Formation unless it is part of the stored name. |
| interval | string | – | Named geologic interval bounding the span, e.g. "Mesozoic". Alternative to max_ma/min_ma. |
| latmax | number | – | Northern latitude edge in degrees; valid alone as a half-plane. PBDB normalizes inverted latitude bounds. |
| latmin | number | – | Southern latitude edge in degrees; valid alone as a half-plane. |
| lngmax | number | – | Eastern longitude edge in degrees; requires lngmin. |
| lngmin | number | – | Western longitude edge in degrees; requires lngmax. A pair may cross the antimeridian. |
| max_ma | number | – | Older bound of the span in millions of years ago. Alternative to interval. When paired with min_ma it must be strictly greater — max_ma is the deeper-time end of the span. |
| min_ma | number | – | Younger bound of the span in millions of years ago. Alternative to interval. When paired with max_ma it must be strictly smaller — min_ma is the nearer-to-present end of the span. |
| recent | boolean | – | When true, extend taxa PBDB knows are extant to the present instead of ending their ranges at the latest selected fossil. Default false preserves fossil-only counts; selection-boundary effects still… |
| resolution | string | – | Bin resolution: "period" (default, coarse), "epoch", or "age" (finest). |
| Name | Type | Req | Description |
|---|---|---|---|
| attribution | string | – | CC-BY data attribution for the Paleobiology Database. |
| bins | array | – | Per-interval diversity bins over the span, ordered oldest-first (oldest geologic interval, highest max_ma, first). |
| error | object | – | Present when the call failed. Absent on success. |
| notice | string | – | Sampled-turnover interpretation, effective extant-range policy, selection-boundary guidance, empty-result selectors and ignored-filter warnings. |
| totalCount | number | – | Number of geologic-interval bins returned. |
No examples provided.
paleobiology_get_references paleobiology-mcp-server: get bibliographic references ~165
Resolve PBDB reference_no values — the source publication on every paleobiology_search_occurrences and paleobiology_search_collections row — to full citations with authors, year, title, publication, volume, pages, and DOI. Pass the ids from a page of rows in one call: the first 500 distinct ids are resolved and any beyond that come back in remaining_reference_nos for a follow-up call. Ids PBDB has no reference for are listed in not_found. Results keep the order the ids were given.
| Name | Type | Req | Description |
|---|---|---|---|
| reference_nos | array | yes | PBDB reference ids to resolve, from occurrence or collection rows. Repeats are resolved once. The first 500 distinct ids are resolved per call; any remaining ids are returned for continuation. |
| Name | Type | Req | Description |
|---|---|---|---|
| attribution | string | – | CC-BY data attribution for the Paleobiology Database. |
| error | object | – | Present when the call failed. Absent on success. |
| not_found | array | – | Requested ids PBDB has no reference for. Empty when every id resolved. |
| notice | string | – | Guidance when some ids had no PBDB reference, or when more ids remain than one call resolves. |
| references | array | – | The references PBDB has, in the order their ids were given. |
| remaining_reference_nos | array | – | Distinct ids past the first 500, not resolved by this call — pass them as reference_nos to resolve the rest. Present only when the input held more than 500 distinct ids. |
No examples provided.
paleobiology_get_taxon paleobiology-mcp-server: get taxon record and fossil range ~285
Resolve a taxon by name (e.g. "Tyrannosaurus") or integer taxon_no. The matched name, rank, parent, occurrence count and first/last appearance range describe taxon_no; accepted_no, accepted_name and accepted_rank identify PBDB's accepted taxon separately, and status carries its taxonomic opinion verbatim. Pass accepted_no as base_id to paleobiology_search_occurrences, paleobiology_get_diversity or paleobiology_search_collections for accepted-clade searches. Set show_children to page immediate child taxa with their own ranks and statuses.
| Name | Type | Req | Description |
|---|---|---|---|
| children_offset | integer | – | Number of immediate children to skip before the returned page — used only when show_children is true. Advance it by 200 while children_truncated is true to walk the whole child list. |
| name | string | – | Taxon name to resolve, e.g. "Tyrannosaurus" or "Ammonoidea". Provide this or taxon_no. |
| show_children | boolean | – | When true, include a page of the immediate child taxa of this taxon (at most 200 per call — children_truncated says whether more remain). |
| taxon_no | integer | – | PBDB taxon id from a prior get_taxon, or accepted_no on an occurrence row. Provide this or name, never both. |
| Name | Type | Req | Description |
|---|---|---|---|
| accepted_name | string | – | PBDB accepted name (may differ from the searched name). |
| accepted_no | integer | – | Accepted PBDB taxon id; pass as base_id to occurrence, diversity or collection searches. |
| accepted_rank | string | – | Rank of the accepted PBDB taxon. |
| attribution | string | – | CC-BY data attribution for the Paleobiology Database. |
| children | array | – | One page of immediate child taxa, at most 200 — present only when show_children was true. A taxon with more children than that returns a page, not the full list; read children_truncated before treati… |
| children_offset | integer | – | Position in the child list this page started at (0 is the first child). Present only when show_children was true. |
| children_truncated | boolean | – | True when more immediate children remain past this page — re-call with children_offset advanced by 200 to read the next. False means this page runs to the end of the child list. Present only when sho… |
| classification | object | – | Higher classification of the taxon. Each level is present only when PBDB resolves it; unspecified-rank sentinels are omitted at every level. |
| error | object | – | Present when the call failed. Absent on success. |
| extant | boolean | – | True if the clade survives to the present day; false if entirely extinct. |
| first_appearance | object | – | A first- or last-appearance window. Empty when PBDB has no dated occurrences. |
| last_appearance | object | – | A first- or last-appearance window. Empty when PBDB has no dated occurrences. |
| name | string | – | Matched PBDB taxon name. |
| notice | string | – | Guidance when the child list was cut off at the per-page cap (naming the children_offset that reaches the next page), or when children_offset ran past the end of the child list. |
| occurrence_count | number | – | Number of fossil occurrences recorded in PBDB, when reported. |
| parent_name | string | – | Name of the immediate parent taxon, when known. |
| parent_no | integer | – | PBDB taxon id of the immediate parent, when known. |
| rank | string | – | Taxonomic rank, e.g. "genus", "family", "order". |
| status | string | – | PBDB taxonomic status verbatim, when the name is not accepted. |
| taxon_no | integer | – | Matched PBDB taxon id; the name, rank, parent, count and range describe this record. Use accepted_no for accepted-clade searches. |
No examples provided.
paleobiology_list_intervals paleobiology-mcp-server: list geologic intervals ~398
Look up the geologic time scale — eons, eras, periods, epochs, and ages with their absolute-age boundaries in millions of years (Ma) and nesting. This is the reference that grounds every temporal filter on the other tools and translates a named interval like "Late Cretaceous" to its 100.5–66.0 Ma boundaries (and back). Filter by a name substring, a Ma range (overlap match), and/or a level; call with no filters to browse the full scale. Browsing and every name on the bundled ICS international-scale snapshot are answered offline. A name the snapshot does not carry — the sub-stage and regional names that occurrence and collection rows report, such as "Late Maastrichtian" or "Lancian" — costs one PBDB lookup across its other time scales; the response names which source answered and which scale the interval belongs to.
| Name | Type | Req | Description |
|---|---|---|---|
| level | string | – | Restrict to one rank of the international scale: eon, era, period, epoch, or age (finest). Browsing is bounded to that scale, so the sub-stage and regional ranks are not selectable here. |
| max_ma | number | – | Older bound of an age window (Ma); intervals must overlap by more than a boundary point, including when only one bound is supplied. Must be at least min_ma when both are supplied; equal bounds includ… |
| min_ma | number | – | Younger bound of an age window (Ma); intervals must overlap by more than a boundary point, including when only one bound is supplied. Equal min_ma and max_ma select all intervals containing that poin… |
| name | string | – | Case-insensitive substring of the interval name, e.g. "cretaceous" or "Jurassic". A name the bundled international scale does not carry is matched exactly against PBDB's other time scales. |
| Name | Type | Req | Description |
|---|---|---|---|
| error | object | – | Present when the call failed. Absent on success. |
| intervals | array | – | Matching geologic intervals, sorted oldest-first. |
| notice | string | – | Guidance when no interval matched the filters. |
| snapshot_version | string | – | ICS chart version and generation date of the bundled time scale, for citation. |
| source | string | – | Which source answered: "bundled_ics" for the offline international-scale snapshot, "pbdb_upstream" for a name resolved live against PBDB's other time scales. |
| totalCount | number | – | Number of intervals matched by the filters. |
No examples provided.
paleobiology_search_collections paleobiology-mcp-server: search fossil collections ~734
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.
| Name | Type | Req | Description |
|---|---|---|---|
| base_id | integer | – | Clade-inclusive taxon filter by PBDB taxon id — the accepted_no from paleobiology_get_taxon or an occurrence row. Same semantics as base_name, but unambiguous where a name is not (homonyms, synonyms,… |
| base_name | string | – | Clade-inclusive taxon filter — localities yielding this taxon or its descendants, e.g. "Dinosauria". Supply this or base_id, never both. |
| country | string | – | PBDB country/continent codes, comma-separated; ! excludes a list and ^ subtracts a code, e.g. NOA,^US. |
| environment | string | – | Depositional environment: "marine", "terrestrial", or "freshwater" (lacustrine + fluvial). Omit for all. |
| formation | string | – | Stored geologic formation name or PBDB list/wildcard expression, e.g. "Hell Creek"; passed unchanged, without stripping Formation, Group, or Member. |
| interval | string | – | Named geologic interval bounding the age, e.g. "Maastrichtian". Alternative to max_ma/min_ma. |
| latmax | number | – | Northern edge of the bounding box, decimal degrees (−90…90). Valid on its own — a lone latitude edge filters as a half-plane. |
| latmin | number | – | Southern edge of the bounding box, decimal degrees (−90…90). Valid on its own — a lone latitude edge filters as a half-plane. |
| limit | integer | – | Maximum localities to return per page, up to 10000, subject to PBDB_MAX_OCCURRENCES. Every fetched row is returned; the notice discloses a lower configured cap. |
| lithology | string | – | Lithology (rock type) to filter by, e.g. "sandstone". |
| lngmax | number | – | Eastern edge of the bounding box, decimal degrees (−180…180). Longitude is a closed pair — supply lngmin with it or neither. |
| lngmin | number | – | Western edge of the bounding box, decimal degrees (−180…180). Longitude is a closed pair — supply lngmax with it or neither. |
| max_ma | number | – | Older 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_ma | number | – | Younger 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. |
| offset | integer | – | Number of localities to skip — page with limit by advancing offset. |
| Name | Type | Req | Description |
|---|---|---|---|
| attribution | string | – | CC-BY data attribution for the Paleobiology Database. |
| cap | number | – | The per-page limit that was applied (set when truncated). |
| collections | array | – | Matching localities for this page. |
| error | object | – | Present when the call failed. Absent on success. |
| notice | string | – | Applied filters and guidance when no locality matched, localities remain past this page, offset ran past the match set, or PBDB ignored a filter value. |
| shown | number | – | Number of localities returned in this page (set when truncated). |
| totalCount | number | – | Total localities matching the filters upstream, across all pages. |
| truncated | boolean | – | True when localities remain past this page — advance offset for more. |
No examples provided.
paleobiology_search_occurrences paleobiology-mcp-server: search fossil occurrences ~933
Search fossil occurrences by clade-inclusive base_name or base_id, exact taxon_name, interval or max_ma/min_ma, modern geographic bounds, country, formation, environment, or collection_no. At least one filter is required. Formation matches PBDB stored names and preserves list/wildcard syntax; suffixes are not removed. Resolve uncertain taxon names with paleobiology_get_taxon. Rows carry modern lng/lat, reconstructed paleolng/paleolat, age, strata, classification, and source reference_no; keep the coordinate systems distinct. Every served page row is returned, with total matches and the offset that continues the page. When this deployment has DataCanvas enabled, a first page with additional matches stages up to 50,000 occurrences on a canvas: use paleobiology_dataframe_describe for columns, then paleobiology_dataframe_query for SQL over the staged set; the notice distinguishes complete from partial coverage. Later offsets and complete pages stage nothing and leave any supplied canvas untouched.
| Name | Type | Req | Description |
|---|---|---|---|
| base_id | integer | – | Clade-inclusive taxon filter by PBDB taxon id — the accepted_no from paleobiology_get_taxon or an occurrence row. Same clade-inclusive semantics as base_name, but unambiguous where a name is not (hom… |
| base_name | string | – | Clade-inclusive taxon filter — this taxon and all descendants, e.g. "Dinosauria". The usual choice. Supply this or base_id, never both. |
| canvas_id | string | – | Canvas id from a prior call to restage onto the same workspace. Used only on a first page with matches beyond that page: replaces the prior occurrence table atomically with a bounded matching set, wi… |
| collection_no | integer | – | Restrict to one collection (locality) by its PBDB collection_no — the fauna found together at that site. Take the id from a paleobiology_search_collections row to drill from a locality into its occur… |
| country | string | – | PBDB country/continent codes, comma-separated; ! excludes a list and ^ subtracts a code, e.g. NOA,^US. |
| environment | string | – | Depositional environment: "marine", "terrestrial", or "freshwater" (lacustrine + fluvial). Omit for all. |
| formation | string | – | Stored formation name or PBDB list/wildcard expression, passed unchanged; suffixes such as Formation are not removed. |
| interval | string | – | Named geologic interval bounding the age, e.g. "Cretaceous" or "Maastrichtian". Alternative to max_ma/min_ma. |
| latmax | number | – | Northern edge of the bounding box, decimal degrees (−90…90). Valid on its own — a lone latitude edge filters as a half-plane. |
| latmin | number | – | Southern edge of the bounding box, decimal degrees (−90…90). Valid on its own — a lone latitude edge filters as a half-plane. |
| limit | integer | – | Maximum occurrences to return per page, up to 10000, subject to PBDB_MAX_OCCURRENCES. Every fetched page row is returned; the notice discloses a lower configured cap. Pair with offset to walk the mat… |
| lngmax | number | – | Eastern edge of the bounding box, decimal degrees (−180…180). Longitude is a closed pair — supply lngmin with it or neither. |
| lngmin | number | – | Western edge of the bounding box, decimal degrees (−180…180). Longitude is a closed pair — supply lngmax with it or neither. |
| max_ma | number | – | Older age bound in millions of years ago. Alternative to interval. When paired with min_ma it must be strictly greater — max_ma is the deeper-time end of the window. |
| min_ma | number | – | Younger age bound in millions of years ago. Alternative to interval. When paired with max_ma it must be strictly smaller — min_ma is the nearer-to-present end of the window. |
| offset | integer | – | Number of matching occurrences to skip before this page — page with limit by advancing offset. The response notice names the exact offset that reaches the next page. |
| taxon_name | string | – | Exact taxon filter — only this taxon, not descendants. Use instead of base_name when you want a single taxon. |
| Name | Type | Req | Description |
|---|---|---|---|
| attribution | string | – | CC-BY data attribution for the Paleobiology Database. |
| canvas_id | string | – | Canvas id holding the staged occurrence set — pass it to paleobiology_dataframe_describe for columns, then paleobiology_dataframe_query for SQL. Present only when spilled is true; complete pages and… |
| error | object | – | Present when the call failed. Absent on success. |
| notice | string | – | Applied filters and empty/past-end guidance, page continuation, ignored upstream filters, staged-set coverage, or optional staging unavailability. |
| occurrences | array | – | Every occurrence in the requested page, subject to the configured page cap. When spilled is true, the canvas holds the bounded matching set independently of this page; the notice states whether stagi… |
| row_count | number | – | Rows staged on the canvas when spilled (at most 50,000); otherwise occurrences returned inline. Compare against totalCount for full-match coverage. |
| spilled | boolean | – | True when the first page had additional matches and the bounded matching set was written to the canvas. |
| table_name | string | – | Canvas table holding the staged occurrence set — the FROM target in paleobiology_dataframe_query SQL, and the table paleobiology_dataframe_describe reports columns for. Present only when spilled is t… |
| totalCount | number | – | Total occurrences matching the filters upstream — the number this call was drawn from, which may exceed the staged set. |
No examples provided.
How do I install the io.github.cyanheads/paleobiology-mcp-server server?
io.github.cyanheads/paleobiology-mcp-server is a hosted endpoint at https://paleobiology.caseyjhand.com/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.
remote · paleobiology.caseyjhand.com
claude mcp add --transport http cyanheads-paleobiology-mcp-server 'https://paleobiology.caseyjhand.com/mcp'
What is the io.github.cyanheads/paleobiology-mcp-server server?
io.github.cyanheads/paleobiology-mcp-server is listed in the public MCP registry as io.github.cyanheads/paleobiology-mcp-server. Search fossil occurrences, taxon ranges, diversity through deep time, and the geologic time scale. This page covers its hosted endpoint (https://paleobiology.caseyjhand.com/mcp).
Is the io.github.cyanheads/paleobiology-mcp-server server safe to use?
io.github.cyanheads/paleobiology-mcp-server scores 88 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.cyanheads/paleobiology-mcp-server server expose?
io.github.cyanheads/paleobiology-mcp-server exposes 8 tools: paleobiology_search_occurrences, paleobiology_get_taxon, paleobiology_get_diversity, paleobiology_list_intervals, paleobiology_search_collections, and 3 more. Their descriptions and schemas cost roughly 3,560 tokens of context every time the server is loaded.
Does the io.github.cyanheads/paleobiology-mcp-server server require authentication?
No. We connected to io.github.cyanheads/paleobiology-mcp-server without credentials and it answered, so anything it exposes is reachable by anyone who knows the address.
Is the io.github.cyanheads/paleobiology-mcp-server server still maintained?
io.github.cyanheads/paleobiology-mcp-server is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.