Macrostrat MCP — geologic map / column / unit data for North America and beyond.
Three well-named tools with clear, domain-specific descriptions (194 - 250 chars each). All tools have complete input schemas with typed properties and descriptions. However, output schemas are not formally documented, responses are inferred from code. Parameter descriptions are adequate but lack constraint details (ranges, formats, enums). Error handling is basic (generic error objects). No tool annotations (readOnlyHint, idempotentHint). find_units has a complex conditional logic (lat+lng OR strat_name OR lith) that could be clearer in the description. Overall solid for a geoscience API wrapper, but lacks production-grade polish.
Look up Macrostrat lithology definitions. Provide a lith name (e.g. "granite", "limestone") to match, or omit to list all lithologies (capped at 50). Returns lithology id, name, type, group, and class. Keyless.
List Macrostrat stratigraphic columns near a geographic point. Provide lat and lng (decimal degrees). Returns the columns covering that location with column name, regional group, coordinates, unit count, and area. Keyless.
Find geologic rock units from Macrostrat by location + age, by stratigraphic name, or by lithology. Provide lat+lng (optionally with age in millions of years, Ma), or a strat_name (e.g. "Hell Creek"), or a lith (e.g. "granite"). Returns units with formation/group, stratigraphic column, bottom/top ages (Ma) and time intervals, lithology, and max thickness. Keyless. North America and beyond.
Output schemas not documented. Callers must infer response structure from code (e.g., {count, units} for find_units). LLMs cannot plan downstream operations without knowing what fields to expect.
find_units parameter logic is complex (lat+lng OR strat_name OR lith) but not clearly documented. Description says 'Provide lat+lng... or a strat_name... or a lith' but does not explicitly state these are mutually exclusive or that at least one is required. LLMs may pass conflicting combinations.
No tool annotations (readOnlyHint, idempotentHint, destructiveHint). All three tools are read-only and idempotent, but this is not declared in the schema. Clients cannot infer safety properties.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | C | 66 | 2026-07-28+ | v2 |
Numeric parameters (lat, lng, age, limit) lack range constraints in descriptions. E.g., lat should be -90 to 90, lng -180 to 180, limit should have a max (e.g., 1000). LLMs may pass invalid values.
Error responses are generic ({error: string}). No guidance on recovery (e.g., 'Invalid lat/lng, must be within [-90, 90] and [-180, 180]'). LLMs cannot self-correct.