Skip to main content
Glama

inaturalist-mcp-server

Server Details

Search iNaturalist sightings, identification threads, phenology, and look-alike species.

If you are the author of this connector, you can claim ownership with GitHub, an HTTP challenge, or a DNS record. Claimed connector authors can inspect health checks, view analytics, and manage their listing.
Status
Healthy
Last Tested
Transport
Streamable HTTP · MCP 2025-11-25
URL
Repository
cyanheads/inaturalist-mcp-server
GitHub Stars
0
Server Listing
@cyanheads/inaturalist-mcp-server

TDQS

A4.5/5.0

Scored across 10 tools

Disambiguation5/5

Each tool targets a distinct resource/action: places, taxa, individual observations, observation searches, species counts, histograms, leaderboards, similar species, and reference vocabularies. Cross-references in descriptions (e.g., use leaderboard vs species counts) further prevent confusion.

Naming Consistency5/5

All tools share the inaturalist_ prefix and a snake_case verb_noun pattern such as get_taxon, search_observations, and resolve_name. Verb variations reflect semantic distinctions but remain predictable and consistent across the set.

Tool Count5/5

Ten tools is a well-scoped size for a read-only naturalist data server. Each tool earns its place by covering a distinct query type without redundancy or bloat.

Completeness4/5

Core area/taxon observation workflows are well covered: resolve names, find places, search observations, fetch details, species counts, histograms, leaderboards, and reference data. Minor gaps remain: resolve_name can resolve projects and observers, but no other tool consumes those IDs, and there is no direct observation-by-observer or observation-by-project search.

Available Tools

10 tools
inaturalist_find_placesInaturalist Find PlacesA
Read-only
Inspect

Resolve a place name to a place id, or list the places containing a map area. Pass q to match a place-name PREFIX, or all four of nelat, nelng, swlat and swlng to list every place covering that box — exactly one of the two, never both. Each result carries the bounding box, place type, and containment chain an area search needs. Place geometry is stripped: a single nearby response carries 247 KB of boundary polygons upstream, none of which reaches the caller.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoPlace-name prefix to search. Matches the start of a name, not words inside it. Mutually exclusive with the bounding box.
nelatNoNorth-east corner latitude of the map area. All four corners or none.
nelngNoNorth-east corner longitude of the map area. All four corners or none.
swlatNoSouth-west corner latitude of the map area. All four corners or none.
swlngNoSouth-west corner longitude of the map area. All four corners or none.
per_pageNoMaximum places to return. Honoured on the bounding-box arm only — the name-prefix endpoint publishes no page size and returns a fixed page.

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoThe page size that bounded this response — per_page on the bounding-box arm, the fixed page upstream served on the name-prefix arm.
errorNoPresent when the call failed. Absent on success.
shownNoHow many places this response carries.
noticeNoGuidance when nothing matched, or when the page capped the result set.
placesNoName-prefix matches. Present on the q arm.
standardNoCurated administrative places covering the area. Present on the bounding-box arm.
communityNoMember-created places covering the area. Present on the bounding-box arm.
truncatedNoTrue when more places matched than were returned.
totalCountNoTotal places upstream matched, before any page limit.

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the readOnlyHint and openWorldHint annotations, the description adds valuable behavioral context: each result contains the bounding box, place type, and containment chain, and place geometry is deliberately stripped to save bandwidth, citing a concrete 247 KB payload reduction. This gives the agent a clear picture of response behavior and performance tradeoffs.

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

Conciseness5/5

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

The description is four sentences, each carrying distinct and useful information: purpose, usage modes with exclusivity, result contents, and payload-stripping behavior. There is no repetition of schema details and no fluff, and the most important decision information is front-loaded.

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-mode lookup tool with no required parameters SF DA, the description covers the decision point, the mutual-exclusion rule, what each result contains, and an important performance behavior. The schema and output schema fill in the remaining structural details, so nothing needed to invoke the tool correctly is missing.

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?

The input schema already documents all six parameters with 100% coverage, including mutual exclusivity, corner constraints, and the per_page behavior on only the bounding-box arm. The description reinforces the q-vs-box framing but adds little new parameter meaning beyond what the schema already provides, so the baseline of 3 is appropriate.

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

Purpose4/5

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

The description clearly states the two things the tool does: resolving a place name to a place id and listing places covering a bounding box. It is explicit about the resource ('place') and the two modes, but it does not explicitly distinguish itself from a sibling like inaturalist_resolve_name, so the differentiation is implicit rather than named.

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?

The description gives explicit invocation guidance for both modes: pass q for a prefix match, pass all four bounding-box corners to list covering places. It also states the critical constraint that exactly one of the two modes must be used, never both, which is exactly the usage decision an agent needs.

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

inaturalist_get_histogramInaturalist Get HistogramA
Read-only
Inspect

Build a phenology histogram for a taxon in an area — which months, weeks, or years it is recorded in. The default month_of_year interval answers "when does this bloom or appear here" in twelve buckets; the absolute intervals (year, month, week, day, hour) bucket real dates and upstream applies a default start date to them. An area is given in exactly one form: place_id, the lat/lng/radius triple in kilometres, or a four-corner bounding box. Omit taxon_id to chart every taxon in the area. Defaults to research-grade, wild-only records and echoes those defaults back.

ParametersJSON Schema
NameRequiredDescriptionDefault
d1NoEarliest observation date, YYYY-MM-DD. Inclusive. With interval set to day or hour, a wide range can exceed the 800-bucket cap — narrow d1/d2 to reach buckets past it.
d2NoLatest observation date, YYYY-MM-DD. Inclusive.
latNoLatitude of the search centre, in decimal degrees. Requires lng and radius.
lngNoLongitude of the search centre, in decimal degrees. Requires lat and radius.
nelatNoNorth-east corner latitude of the bounding box. All four corners or none.
nelngNoNorth-east corner longitude of the bounding box. All four corners or none.
swlatNoSouth-west corner latitude of the bounding box. All four corners or none.
swlngNoSouth-west corner longitude of the bounding box. All four corners or none.
radiusNoSearch radius around lat/lng, in KILOMETRES. Requires lat and lng. The upstream publishes no bound; 500 is a verified ceiling this server imposes.
captiveNoWhether to include captive and cultivated records — zoo animals, garden plantings. Defaults to wild organisms only.
intervalNoBucketing. month_of_year and week_of_year fold every year together into a seasonal curve; the rest bucket absolute dates. day and hour over a wide date range can generate thousands of buckets — the response is capped at 800, kept from the start of the range; narrow d1/d2 or use a coarser interval to see the rest.month_of_year
place_idNoNumeric iNaturalist place id from inaturalist_find_places. Mutually exclusive with the lat/lng/radius triple and the bounding box. A non-numeric value answers HTTP 500 upstream.
taxon_idNoRestrict to this taxon and its descendants. Omit to chart every taxon in the area. Resolve a name to an id with inaturalist_resolve_name.
date_fieldNoWhich date to bucket by: when the organism was observed, or when the record was uploaded.observed
quality_gradeNoIdentification confidence tiers to include. Defaults to research-grade only; adding "needs_id" roughly doubles the corpus and lowers identification confidence.

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoThe bucket cap that was applied.
errorNoPresent when the call failed. Absent on success.
shownNoHow many buckets this response carries.
totalNoSum of every bucket count upstream returned, including buckets past the cap that are not in the buckets array.
noticeNoGuidance when every bucket came back zero, or when the cap was reached.
bucketsNoEvery bucket upstream returned, in order, including the zero ones — up to 800, the first in upstream key order. See the truncated/shown/cap enrichment when more exist.
intervalNoThe bucketing that was applied.
truncatedNoTrue when upstream returned more than 800 buckets.
applied_filtersNoThe server-applied defaults that determine what this answer means.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already indicate read-only and open-world behavior, and the description adds meaningful context: the default interval is month_of_year, absolute intervals get a default start date upstream, and results echo defaults back. This goes beyond the schema by explaining upstream behavior and default semantics, which helps the agent anticipate responses.

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

Conciseness5/5

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

Four dense sentences, each earning its place: the tool's purpose, interval behavior, area specification, and default filtering. No filler or redundancy. The most important distinction — histogram vs raw observations — is front-loaded.

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?

Given 15 parameters, a rich input schema, an output schema, and safety annotations, the description covers the non-obvious aspects: what the buckets mean, the exact area forms, the default interval, and default record filters. Nothing essential for selecting and invoking the tool correctly is missing.

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 coverage is 100%, with every parameter already described in detail. The description adds no parameter-level meaning beyond what the schema provides; it only restates the area exclusivity and taxon omission. This is a solid baseline-3 case where the schema carries the parameter documentation burden.

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?

Description starts with a specific verb-resource pair: 'Build a phenology histogram for a taxon in an area,' and immediately clarifies the output buckets: months, weeks, or years. This clearly differentiates it from sibling tools like get_species_counts or search_observations, which return counts or observation lists rather than a temporal histogram.

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?

The description gives clear context on when this tool is appropriate: to answer 'when does this bloom or appear here' with the default month_of_year interval. It also explains area selection constraints and the option to omit taxon_id, but it does not explicitly state when-not-to-use it or name an alternative tool for similar queries.

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

inaturalist_get_leaderboardInaturalist Get LeaderboardA
Read-only
Inspect

Rank the most active observers or identifiers for an area, period, and taxon — who knows this place or this group. kind selects which: observers are ranked by how many observations they recorded, identifiers by how many identifications they made. An area is given in exactly one form: place_id, the lat/lng/radius triple in kilometres, or a four-corner bounding box. Both endpoints rank only the top 500 entries, so page multiplied by per_page must stay at or below 500 — narrow the area, period, or taxon to bring someone further down into reach. For the most-recorded species rather than the most active people, use inaturalist_get_species_counts.

ParametersJSON Schema
NameRequiredDescriptionDefault
d1NoEarliest observation date, YYYY-MM-DD. Inclusive.
d2NoLatest observation date, YYYY-MM-DD. Inclusive.
latNoLatitude of the search centre, in decimal degrees. Requires lng and radius.
lngNoLongitude of the search centre, in decimal degrees. Requires lat and radius.
kindYesWhich leaderboard: "observers" ranks by observations recorded, "identifiers" by identifications made.
pageNoPage number. Defaults to 1.
nelatNoNorth-east corner latitude of the bounding box. All four corners or none.
nelngNoNorth-east corner longitude of the bounding box. All four corners or none.
swlatNoSouth-west corner latitude of the bounding box. All four corners or none.
swlngNoSouth-west corner longitude of the bounding box. All four corners or none.
radiusNoSearch radius around lat/lng, in KILOMETRES. Requires lat and lng. The upstream publishes no bound; 500 is a verified ceiling this server imposes.
per_pageNoEntries per page, maximum 250. An entry costs roughly 140 bytes across structuredContent and the rendered text together, so 250 is a full page near 34 KB — and two such pages cover the whole 500-entry window these endpoints rank.
place_idNoNumeric iNaturalist place id from inaturalist_find_places. Mutually exclusive with the lat/lng/radius triple and the bounding box. A non-numeric value answers HTTP 500 upstream.
taxon_idNoRestrict to this taxon and its descendants. Resolve a name to an id with inaturalist_resolve_name.
quality_gradeNoIdentification confidence tiers to include. Defaults to research-grade only; adding "needs_id" roughly doubles the corpus and lowers identification confidence.

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoThe per_page that was applied.
kindNoWhich leaderboard was ranked.
errorNoPresent when the call failed. Absent on success.
shownNoHow many entries this page carries.
noticeNoGuidance when nobody matched, or how to reach further down the ranking.
entriesNoThe ranked members, most active first.
truncatedNoTrue when the page filled per_page and more entries follow.
count_metricNoWhat the count on each entry measures.
total_resultsNoHow many people upstream reports as matching. Far larger than the 500 this leaderboard can actually address.
applied_filtersNoThe server-applied default that determines what this answer means.

TDQS

A4.3/5.0
Behavior4/5

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

The annotations already declare readOnlyHint=true and openWorldHint=true, so the bar is lower; the description adds genuine value by disclosing the hard 500-entry ranking ceiling and the page × per_page ≤ 500 constraint, plus the hint to narrow area/period/taxon to bring lower-ranked entries into reach. No contradiction with annotations is present.

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?

The description is dense but every sentence carries functional weight — purpose, kind semantics, area exclusivity, pagination ceiling, and sibling routing are all present and front-loaded. The em-dash flourish "who knows this place or this group" is mildly ornamental, but the overall structure is efficient for a tool with 15 parameters.

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

Completeness4/5

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

Given the tool's high complexity — 15 parameters, cross-field exclusivity rules, and a pagination ceiling — the description covers the cross-parameter constraints an agent most needs to call it correctly: area-form exclusivity, page/per_page limits, and kind semantics. Minor caveats like the HTTP 500 on non-numeric place_id live only in the schema, and the output schema covers return values, so the description is reasonably complete.

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 description coverage is 100%, so the baseline is 3, but the description adds meaning beyond the schema: it synthesizes the mutually exclusive area forms (place_id vs lat/lng/radius vs bounding box), explains the pagination relationship between page and per_page, and clarifies what kind selects. This is genuine added value on top of the parameter-level schema descriptions.

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?

The description names a specific verb and resource — "Rank the most active observers or identifiers for an area, period, and taxon" — and clarifies what each kind measures. It also distinguishes itself from the closest sibling tool, inaturalist_get_species_counts, so an agent can tell them apart without opening either schema.

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?

The description explicitly routes the agent away from this tool toward inaturalist_get_species_counts when the goal is species frequency rather than person activity. It also gives clear context on when to use it (area, period, taxon) and how kind selects the ranking basis, though it does not address every potentially confusable sibling such as get_histogram.

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

inaturalist_get_observationInaturalist Get ObservationA
Read-onlyIdempotent
Inspect

Fetch up to 10 observations by id with their community identification thread — who identified what, whether each identification agrees, and the consensus taxon the community landed on. The whole batch costs one upstream request, so resolving ten ids here is far cheaper than ten separate lookups. A missing id is reported per id in unresolved rather than failing the batch; the call fails only when nothing resolved.

ParametersJSON Schema
NameRequiredDescriptionDefault
includeNoEmbedded arrays to expand per record. identifications is the default and is what carries the thread; the others cost context, so check photo_count and sound_count first.
observation_idYesObservation ids to fetch, 1 to 10. Find current ids for an area with inaturalist_search_observations.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
noticeNoGuidance when part of the batch did not resolve.
unresolvedNoRequested ids upstream returned nothing for. They may have been deleted, or never existed.
observationsNoThe observations that resolved, with the expansions that were requested.

TDQS

A4.5/5.0
Behavior5/5

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

Annotations already cover read-only and idempotent safety. The description adds valuable behavioral detail beyond that: the batch costs one upstream request, missing IDs are reported per-id in 'unresolved' rather than failing the batch, and the call fails only when nothing resolves. This gives the agent clear expectations for error handling and cost, exceeding the baseline provided by annotations.

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

Conciseness5/5

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

The description is three sentences, each carrying essential information: the core purpose, the cost efficiency of batching, and the error-handling behavior. It is front-loaded with the primary function and contains no filler or redundancy.

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?

The description covers the key aspects an agent needs: what the tool returns (identification thread and consensus), batch behavior, and failure conditions. The output schema exists, so return format is documented elsewhere. The schema parameter descriptions handle parameter details. Nothing critical 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% – both parameters (observation_id and include) have descriptive text, including guidance on the include array. The main description does not add parameter-specific semantics beyond what the schema provides, but it doesn't need to given the high coverage. Baseline 3 is appropriate.

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?

The description states a specific verb ('Fetch'), resource ('observations by id'), and adds concrete detail about the community identification thread (who identified, agreement status, consensus taxon). This distinguishes it clearly from sibling tools like search_observations or get_species_counts, leaving no ambiguity about what the tool does.

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?

The description implies the use case (fetching observations by known IDs) and explicitly notes batch efficiency ('far cheaper than ten separate lookups'). The schema parameter description for observation_id further routes the agent to inaturalist_search_observations for finding IDs, but the main description itself does not explicitly exclude other tools or state 'use when you have IDs'. This is a minor gap.

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

inaturalist_get_similar_speciesInaturalist Get Similar SpeciesA
Read-only
Inspect

List the taxa this one is most often misidentified as, ranked by how many times identifiers made the correction — the field-identification check before committing to a look-alike. Scope it to an area in exactly one form (place_id, the lat/lng/radius triple in kilometres, or a four-corner bounding box) to see the confusion set a specific region actually produces, or leave the area off for the global set. Resolve the organism name to a taxon id with inaturalist_resolve_name first.

ParametersJSON Schema
NameRequiredDescriptionDefault
d1NoEarliest observation date, YYYY-MM-DD. Inclusive.
d2NoLatest observation date, YYYY-MM-DD. Inclusive.
latNoLatitude of the search centre, in decimal degrees. Requires lng and radius.
lngNoLongitude of the search centre, in decimal degrees. Requires lat and radius.
limitNoMaximum look-alikes to return. Applied in-process — the upstream endpoint publishes no page size and returns its whole confusion set.
nelatNoNorth-east corner latitude of the bounding box. All four corners or none.
nelngNoNorth-east corner longitude of the bounding box. All four corners or none.
swlatNoSouth-west corner latitude of the bounding box. All four corners or none.
swlngNoSouth-west corner longitude of the bounding box. All four corners or none.
radiusNoSearch radius around lat/lng, in KILOMETRES. Requires lat and lng. The upstream publishes no bound; 500 is a verified ceiling this server imposes.
captiveNoWhether to include captive and cultivated records — zoo animals, garden plantings. Defaults to wild organisms only.
place_idNoNumeric iNaturalist place id from inaturalist_find_places. Mutually exclusive with the lat/lng/radius triple and the bounding box. A non-numeric value answers HTTP 500 upstream.
taxon_idYesNumeric taxon id to find look-alikes for. Resolve a name to an id with inaturalist_resolve_name.
quality_gradeNoIdentification confidence tiers to include. Defaults to research-grade only; adding "needs_id" roughly doubles the corpus and lowers identification confidence.

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoThe limit that was applied.
errorNoPresent when the call failed. Absent on success.
shownNoHow many look-alikes this response carries.
noticeNoGuidance when no look-alikes are recorded, or when the limit cut the set.
taxon_idNoThe taxon the look-alikes were found for.
truncatedNoTrue when the limit cut the confusion set.
totalCountNoHow many look-alikes upstream returned, before the limit was applied.
similar_speciesNoLook-alikes ranked by misidentification_count, most-confused first.
truncationCeilingNoMisidentification count of the last look-alike shown. The ranking is descending, so no omitted look-alike exceeds it.

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint and openWorldHint, so the safety profile is covered; the description adds behavioral context beyond annotations by explaining the ranking basis (identifier corrections) and the area-scoped vs global behavior. No contradictions with annotations.

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

Conciseness5/5

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

Three sentences front-load the core purpose first, then area scoping, then the prerequisite. There is no filler; each sentence contributes actionable guidance.

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 14-parameter tool with a fully described schema and an output schema, the description covers the high-level purpose, area-scoping rules, and prerequisite call. The schema supplies remaining parameter detail, and the output schema removes the need to document return values.

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 description coverage is 100%, so the schema carries detailed per-parameter meaning; the description adds value by consolidating the three mutually exclusive area forms into one rule and stating the global-set fallback. It mostly re-frames schema content, hence not a 5, but the conceptual grouping is genuinely helpful.

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

Purpose4/5

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

The description clearly states the tool lists taxa most often misidentified as a given taxon, ranked by identifier corrections — a specific verb and resource that distinguish it from siblings like inaturalist_get_species_counts or inaturalist_get_histogram. It does not explicitly name an alternative tool for contrast, so it stops short of a 5.

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?

It gives concrete when-to-use guidance: scope by exactly one area form (place_id, lat/lng/radius, or bounding box) or leave off for the global set, and the explicit prerequisite to resolve names via inaturalist_resolve_name first. It does not discuss when not to use this tool versus another, but the context is clear.

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

inaturalist_get_species_countsInaturalist Get Species CountsA
Read-only
Inspect

Rank the distinct species recorded in an area and period, most-observed first — the "what lives here" answer, without paging through individual sightings. An area is given in exactly one form: place_id, the lat/lng/radius triple in kilometres, or a four-corner bounding box. Narrow to a clade by passing taxon_id, e.g. the birds of a park. Defaults to research-grade, wild-only records and echoes those defaults back. For the most active people rather than the most recorded species, use inaturalist_get_leaderboard.

ParametersJSON Schema
NameRequiredDescriptionDefault
d1NoEarliest observation date, YYYY-MM-DD. Inclusive.
d2NoLatest observation date, YYYY-MM-DD. Inclusive.
latNoLatitude of the search centre, in decimal degrees. Requires lng and radius.
lngNoLongitude of the search centre, in decimal degrees. Requires lat and radius.
pageNoPage number. Defaults to 1.
nelatNoNorth-east corner latitude of the bounding box. All four corners or none.
nelngNoNorth-east corner longitude of the bounding box. All four corners or none.
swlatNoSouth-west corner latitude of the bounding box. All four corners or none.
swlngNoSouth-west corner longitude of the bounding box. All four corners or none.
radiusNoSearch radius around lat/lng, in KILOMETRES. Requires lat and lng. The upstream publishes no bound; 500 is a verified ceiling this server imposes.
captiveNoWhether to include captive and cultivated records — zoo animals, garden plantings. Defaults to wild organisms only.
term_idNoAnnotation attribute ids, from inaturalist_list_reference topic controlled_terms — e.g. 1 for Life Stage.
per_pageNoSpecies per page, maximum 50. A ranked species costs roughly 860 bytes across structuredContent and the rendered text together, so 50 is a full page near 43 KB. Upstream would serve 500 in one page — raise page rather than asking for it.
place_idNoNumeric iNaturalist place id from inaturalist_find_places. Mutually exclusive with the lat/lng/radius triple and the bounding box. A non-numeric value answers HTTP 500 upstream.
taxon_idNoRestrict to this taxon and its descendants. Resolve a name to an id with inaturalist_resolve_name.
iconic_taxaNoBroad organism groups, by their scientific iconic-taxon name. A common-name value such as "Birds" matches nothing upstream, so only the listed values are accepted.
quality_gradeNoIdentification confidence tiers to include. Defaults to research-grade only; adding "needs_id" roughly doubles the corpus and lowers identification confidence.
term_value_idNoAnnotation value ids, from the same attribute listing — e.g. 6 for Larva. Requires term_id; sent alone it is ignored upstream and the unfiltered corpus comes back.

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoThe per_page that was applied.
errorNoPresent when the call failed. Absent on success.
shownNoHow many species this page carries.
noticeNoGuidance when nothing matched, or how to reach the species beyond this page.
speciesNoThe species, ranked by observation_count, most-observed first.
truncatedNoTrue when the page filled per_page and more species follow.
total_resultsNoHow many distinct species match. An estimate over a live index — it drifts between calls seconds apart.
applied_filtersNoThe server-applied defaults that determine what this answer means.
truncationCeilingNoObservation count of the last species shown. The ranking is descending, so no species left off this page exceeds it.

TDQS

A4.4/5.0
Behavior4/5

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

The annotations only convey read-only and open-world behavior, so the description adds value by disclosing aggregation semantics, research-grade/wild defaults, and the mutually exclusive area-selector rule. It doesn't mention error cases or rate limits, but for a read-only tool the core behavioral context is present.

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

Conciseness5/5

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

Three sentences, each earning its place: the first states the core behavior, the second covers area-parameter constraints, and the third covers filters/defaults plus the leaderboard alternative. It is compact, front-loaded, and free of filler.

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

Completeness4/5

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

For an 18-parameter tool, the description plus fully documented schema and output schema cover invocation well: area forms, defaults, clade narrowing, and a sibling pointer are all present. It does not explicitly state what happens if no area selector is supplied, and it only names one of several nearby siblings, so it is strong but not exhaustive.

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 coverage is 100%, so the baseline applies and the schema already explains each parameter in detail. The description adds useful high-level framing such as the three mutually exclusive area forms and a concrete taxon example, but it doesn't materially expand individual parameter meaning beyond 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?

The description names a specific, informative verb+resource pair: it ranks distinct species in an area by observation count. It also clearly distinguishes itself from paginating individual sightings and from the leaderboard sibling, so an agent can tell what the tool does at a glance.

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?

It explicitly states that the area must be given in exactly one of three forms, how to narrow by clade, and what the default filtering is. It also names the sibling tool to use when ranking people rather than species, giving a concrete when-not-to-use case.

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

inaturalist_get_taxonInaturalist Get TaxonA
Read-onlyIdempotent
Inspect

Fetch a taxon profile: the taxonomic path, per-authority conservation listings, the encyclopedia summary, the photo gallery, immediate children, and observation counts. Resolve a name to a taxon id with inaturalist_resolve_name first. The upstream record is 95 KB for a common species, so it is projected before anything else happens; a taxon that still overflows comes back as an outline of its sections with their byte sizes, and naming those sections in a re-call returns only those. The valid section names are summary, taxonomy, children, conservation, photos, and encyclopedia.

ParametersJSON Schema
NameRequiredDescriptionDefault
sectionsNoSections to return: summary, taxonomy, children, conservation, photos, encyclopedia. Omit for the whole profile, or an outline of it when it overflows. A selection returns whatever it names, at whatever size, so sum the byte sizes from the outline before asking for several.
taxon_idYesNumeric taxon id. A non-numeric value answers HTTP 422 with an empty message upstream, so the integer is enforced here. Resolve a name to an id with inaturalist_resolve_name.

Output Schema

ParametersJSON Schema
NameRequiredDescription
idNoTaxon id.
kindNo"full" when the profile itself is returned, "outline" when it overflowed and only the section list came back.
nameNoScientific name.
rankNoTaxonomic rank, e.g. "species".
errorNoPresent when the call failed. Absent on success.
noticeNoHow to re-call for specific sections. Present on the outline.
photosNoGallery photos, each with its own licence.
visionNoTrue when the taxon is covered by the upstream image classifier.
extinctNoTrue when the taxon is recorded as extinct.
childrenNoImmediate children of this taxon.
sectionsNoAvailable sections and their byte sizes, largest first. Present on the outline.
taxonomyNoAncestors from the root of the tree down to the taxon’s parent.
is_activeNoFalse for a taxon superseded by a taxonomic change; its id still resolves.
rank_levelNoNumeric rank level — 70 kingdom, 30 family, 10 species, 5 subspecies.
common_nameNoPreferred common name, when one is recorded.
conservationNoConservation listings for the taxon.
encyclopediaNoThe encyclopedia text and link upstream carries for the taxon.
sections_appliedNoSections this response carries. Empty when the whole profile came back, so an absent section means the taxon has none rather than that it was never asked for.
iconic_taxon_nameNoBroad organism group, e.g. "Insecta". Usable as an iconic_taxa filter value.
listed_taxa_countNoHow many place checklists include this taxon. The checklist entries themselves are not relayed.
observations_countNoHow many observations carry this taxon or a descendant of it.

TDQS

A5/5.0
Behavior5/5

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

Annotations declare readOnlyHint, openWorldHint, and idempotentHint, and the description adds substantial behavior not captured there: the 95 KB upstream projection, the overflow outline with byte sizes, and the selective-section re-call semantics. This materially changes how an agent should invoke the tool and interpret large responses.

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

Conciseness5/5

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

The description is front-loaded with the main purpose, then moves through prerequisite, projection behavior, overflow handling, and valid section names in logical order. Every sentence earns its place, including the concrete 95 KB detail that justifies the projection step. No filler or redundancy.

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?

The description fully equips an agent to use this tool correctly: it covers what the profile contains, how to resolve a name first, what happens on large records, how to recover from overflow, and which section names are valid. An output schema exists for return values, so the description doesn't need to restate them.

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

Parameters5/5

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

Although schema coverage is 100%, the description enriches both parameters beyond the JSON Schema. For taxon_id it warns about the upstream HTTP 422 on non-numeric values and explains why the integer is enforced. For sections it defines the omit-for-whole-profile behavior, overflow outline, and the need to sum byte sizes before requesting multiple sections.

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?

The description opens with a specific verb and resource: 'Fetch a taxon profile', then enumerates the concrete content (taxonomic path, conservation listings, summary, photos, children, observation counts). This clearly differentiates it from siblings like inaturalist_get_observation and inaturalist_get_species_counts by focusing on the taxon entity and its composite sections.

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?

It explicitly states the prerequisite workflow: 'Resolve a name to a taxon id with inaturalist_resolve_name first.' It also provides conditional guidance for overflow handling, telling the agent to re-call with section names when the projected profile still overflows. This gives clear when-to-use and how-to-proceed direction beyond the schema.

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

inaturalist_list_referenceInaturalist List ReferenceA
Read-only
Inspect

Decode the vocabularies the other iNaturalist tools take as input: annotation attributes and values, quality grades, license codes, taxonomic ranks, iconic taxa, and IUCN conservation-status codes. An unrecognized filter value is not rejected upstream — it silently returns nothing — so read the codes here before filtering. Note that the conservation codes are the normalised csi search filter; a taxon record’s own conservation_statuses[].status is authority-specific free text and reads differently. With topic controlled_terms and a taxon_id, the response also carries which annotations identifiers have actually recorded for that taxon, with counts.

ParametersJSON Schema
NameRequiredDescriptionDefault
topicYesWhich vocabulary to decode. controlled_terms is fetched live and cached; the rest are spec-derived static tables.
taxon_idNoAdd observed annotation usage for this taxon, ranked by how often each attribute/value pair has been recorded. Valid only with topic controlled_terms. Resolve a name to an id with inaturalist_resolve_name.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
topicNoThe vocabulary that was decoded.
noticeNoGuidance when the requested taxon has no recorded annotations yet.
sourceNo"upstream" when the table was fetched from iNaturalist, "static" when spec-derived.
entriesNoThe vocabulary, one entry per code or attribute.
observed_usageNoObserved annotation usage for taxon_id, most-used first. Present only when taxon_id was given.

TDQS

A4.3/5.0
Behavior5/5

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

Annotations only convey readOnlyHint and openWorldHint, so the description carries the behavioral burden — and it delivers. It discloses the critical silent-return-nothing failure mode upstream, the distinction between normalized csi search-filter conservation codes and the authority-specific free text in conservation_statuses[].status, and the conditional payload of annotation counts when topic=controlled_terms plus taxon_id is supplied. No contradiction with annotations (read-only reference, open world).

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?

Four dense sentences with the purpose front-loaded and every sentence carrying a distinct load-bearing fact: scope, failure-mode warning, conservation-code caveat, and conditional payload. It is on the longer side, but there is no filler — each sentence justifies its place.

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

Completeness4/5

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

Given 2 params (1 required), a 6-value enum, an output schema, and read-only/open-world annotations, the description covers the essential runtime behaviors an agent needs to invoke and interpret results safely. Combined with the schema's parameter details and the resolve_name pointer, nothing critical for correct usage is missing, though explicit rate-limit or pagination behavior could push it to a 5.

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%, and the schema already documents each topic value, the live-fetch/cached distinction, the taxon_id constraints ('Valid only with topic controlled_terms'), and the resolve_name pointer. The description adds semantic context linking the enum values to real-world filter concepts, but the schema carries the heavy lifting, so a baseline 3 is appropriate.

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?

The description opens with a specific verb and resource — 'Decode the vocabularies the other iNaturalist tools take as input' — and then enumerates the six vocabulary categories (annotation attributes/values, quality grades, license codes, taxonomic ranks, iconic taxa, conservation codes), which maps directly onto the topic enum. It unambiguously differentiates this reference tool from its search/get 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?

The description gives clear when-to-use context: 'read the codes here before filtering,' since unrecognized filter values silently return nothing rather than failing. It also positions the tool as the companion to inaturalist_resolve_name for resolving taxon names to IDs. It does not explicitly state when NOT to use this vs. a named sibling, but the decoder role is self-evident relative to the search tools.

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

inaturalist_resolve_nameInaturalist Resolve NameA
Read-only
Inspect

Resolve a common or scientific name to a taxon id, or a place, project, or observer name to its id. Returns ranked candidates carrying the identifiers every other tool takes. A miss is a result rather than a failure: found comes back false with guidance naming why. Taxon lookup matches a name PREFIX, not words inside a name, so "monarch butterfly" misses where "monarch" hits.

ParametersJSON Schema
NameRequiredDescriptionDefault
qYesThe name to resolve. On type "taxon" this is a name prefix or an exact taxon id; on the other types it is matched across the record text.
rankNoRestrict taxon candidates to one rank. Honoured only on type "taxon" — the cross-kind search has no rank filter.
typeNoWhich kind of record to resolve. "taxon" uses the taxon autocomplete; the rest use the scored cross-kind search, and "any" searches every kind at once. For a place’s bounding box and containment chain rather than just its id, use inaturalist_find_places instead.taxon
limitNoMaximum candidates to return.

Output Schema

ParametersJSON Schema
NameRequiredDescription
errorNoPresent when the call failed. Absent on success.
foundNoTrue when at least one candidate matched.
guidanceNoWhy nothing matched and what to try instead. Present only when found is false — this is the primary result of a miss.
candidatesNoRanked candidates, best match first.
totalCountNoTotal candidates upstream matched, before the limit was applied.

TDQS

A4.9/5.0
Behavior5/5

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

Beyond the annotations (readOnlyHint and openWorldHint), the description discloses important runtime behavior: misses return found=false with guidance rather than throwing, candidates are ranked, and taxon lookup is prefix-based rather than substring-based. This gives the agent a clear model of the tool's behavior without needing to call it blindly.

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

Conciseness5/5

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

Three dense sentences with no filler. The front-loaded first sentence states the core purpose, the second explains the result shape and error semantics, and the third delivers a critical querying caveat. Every sentence earns its place.

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?

Given the rich schema, full parameter coverage, annotations, and existing output schema, the description covers everything an agent needs to select and invoke the tool correctly: what it returns, how misses behave, the prefix limitation, and an alternative tool for richer place data. Nothing essential 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?

The schema already documents all parameters at 100% coverage, so the baseline is 3. The description adds meaningful semantic context beyond the schema: taxon q is a name prefix or exact taxon id, while other types match across record text; rank is only honored for type 'taxon'; and the find_places alternative clarifies the type parameter's boundary. These additions justify a 4.

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?

The description states a specific verb ('resolve') and resource ('common or scientific name...place, project, or observer name') and the output ('taxon id...its id'). It also distinguishes the tool as the provider of identifiers that every other tool takes, which sets it apart from sibling tools like inaturalist_get_taxon or inaturalist_find_places.

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?

The description explains when to use this tool: when you need identifiers to feed into other tools. It also gives an explicit when-not case, noting that for a place's bounding box and containment chain, use inaturalist_find_places instead. The prefix-behavior guidance further sets expectations for successful use.

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

inaturalist_search_observationsInaturalist Search ObservationsA
Read-only
Inspect

Search georeferenced wildlife sightings by area, date, taxon, quality grade, annotation, and conservation status. Returns a projected record per sighting with coordinates, licence, first photo, and identification counts. An area is given in exactly one form — place_id, the lat/lng/radius triple in kilometres, or a four-corner bounding box — and defaults to research-grade, wild-only records, which are echoed back on every call. Identifications and comments are deliberately not expandable here (one thread is 28 KB); fetch them for specific records with inaturalist_get_observation. Results past 10,000 need the cursor from the previous page rather than a higher page number.

ParametersJSON Schema
NameRequiredDescriptionDefault
qNoFree text matched across observation properties.
d1NoEarliest observation date, YYYY-MM-DD. Inclusive.
d2NoLatest observation date, YYYY-MM-DD. Inclusive.
csiNoIUCN-normalised conservation status codes to include, e.g. ["EN","CR"]. Decode them with inaturalist_list_reference topic conservation_status_codes.
latNoLatitude of the search centre, in decimal degrees. Requires lng and radius.
lngNoLongitude of the search centre, in decimal degrees. Requires lat and radius.
pageNoPage number within the first 10,000 results. Defaults to 1. Mutually exclusive with cursor.
hrankNoHighest taxonomic rank of the identification to accept.
lrankNoLowest taxonomic rank of the identification to accept.
nelatNoNorth-east corner latitude of the bounding box. All four corners or none.
nelngNoNorth-east corner longitude of the bounding box. All four corners or none.
orderNoSort direction.desc
swlatNoSouth-west corner latitude of the bounding box. All four corners or none.
swlngNoSouth-west corner longitude of the bounding box. All four corners or none.
cursorNonext_cursor from a previous page, to continue past the 10,000-result window — a positive integer observation id, sent upstream as id_below. Mutually exclusive with page, and forces an id ordering.
nativeNoRestrict to taxa native to the observation location.
radiusNoSearch radius around lat/lng, in KILOMETRES. Requires lat and lng. The upstream publishes no bound; 500 is a verified ceiling this server imposes.
captiveNoWhether to include captive and cultivated records — zoo animals, garden plantings. Defaults to wild organisms only.
endemicNoRestrict to taxa endemic to the observation location.
includeNoEmbedded arrays to expand per record. Check photo_count and sound_count first — expanding costs context.
term_idNoAnnotation attribute ids, from inaturalist_list_reference topic controlled_terms — e.g. 1 for Life Stage.
licensedNoRestrict to records whose own license_code is not null.
order_byNoSort field. Forced to id when cursor is supplied, since a cursor only continues an id ordering.observed_on
per_pageNoRecords per page, maximum 25. A projected record costs roughly 1.9 KB across structuredContent and the rendered text together, so 25 is a full page near 49 KB and the default of 10 near 20 KB. Walk further with page or cursor rather than a larger page.
place_idNoNumeric iNaturalist place id from inaturalist_find_places. Mutually exclusive with the lat/lng/radius triple and the bounding box. A non-numeric value answers HTTP 500 upstream.
taxon_idNoRestrict to this taxon and its descendants. Resolve a name to an id with inaturalist_resolve_name.
search_onNoNarrow what q matches against. Requires q.
introducedNoRestrict to taxa introduced to the observation location.
threatenedNoRestrict to taxa considered threatened where observed.
iconic_taxaNoBroad organism groups, by their scientific iconic-taxon name. A common-name value such as "Birds" matches nothing upstream, so only the listed values are accepted.
quality_gradeNoIdentification confidence tiers to include. Defaults to research-grade only; adding "needs_id" roughly doubles the corpus and lowers identification confidence.
term_value_idNoAnnotation value ids, from the same attribute listing — e.g. 6 for Larva. Requires term_id; sent alone it is ignored upstream and the unfiltered corpus comes back.
photo_licensedNoRestrict to records with at least one licensed photo.

Output Schema

ParametersJSON Schema
NameRequiredDescription
capNoThe per_page that was applied.
errorNoPresent when the call failed. Absent on success.
shownNoHow many records this page carries.
noticeNoGuidance when nothing matched, or how to continue past a full page.
has_moreNoTrue when this page filled per_page, so more records follow.
truncatedNoTrue when the page filled per_page and more records follow.
next_cursorNoPass back as cursor to continue past this page. Absent when has_more is false.
observationsNoThe matching sightings, projected.
total_resultsNoHow many records upstream reports as matching. An estimate over a live index — it drifts between calls seconds apart.
applied_filtersNoThe server-applied defaults and overrides that determine what this answer means.

TDQS

A4.7/5.0
Behavior4/5

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

Annotations declare readOnlyHint=true and openWorldHint=true, so the safety profile is already covered. The description adds meaningful behavioral context beyond annotations: default research-grade/wild-only records are 'echoed back on every call', identifications/comments are deliberately not expandable, and the 10,000-result cursor behavior. It also discloses the upstream HTTP 500 for non-numeric place_id in the schema. Minor gap: it doesn't explicitly state that results are sorted by observed_on desc by default, but that is in the schema. A 4 is appropriate because the description adds substantial behavioral context without contradicting annotations.

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

Conciseness5/5

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

The description is a compact paragraph that front-loads the core purpose and return shape, then packs the most decision-relevant constraints (area exclusivity, defaults, non-expandable threads, cursor pagination) into four sentences. Every sentence earns its place; there is no filler or repetition of schema content.

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?

Given the tool's complexity (33 parameters, no required params, output schema present), the description covers the critical operational constraints: area selection exclusivity, default filters, pagination beyond 10,000, and the cost/context tradeoff of per_page and include. The output schema exists, so return values need not be described. Sibling routing is provided. Nothing essential for correct invocation 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 description coverage is 100%, so the baseline is 3. The description adds value beyond the schema by explaining the area exclusivity rule, the cursor-vs-page mutual exclusion, the per_page context-cost warning (1.9 KB per record), and the default research-grade/wild-only behavior. It also clarifies that term_value_id requires term_id and that iconic_taxa common names match nothing. This is above the baseline but not a 5 because the description doesn't enumerate every parameter's semantics; it relies on the schema for most field-level details.

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?

The description opens with a specific verb and resource: 'Search georeferenced wildlife sightings' and enumerates the filter dimensions (area, date, taxon, quality grade, annotation, conservation status). It also states the return shape ('projected record per sighting with coordinates, licence, first photo, and identification counts'), which distinguishes it from sibling tools like inaturalist_get_observation or inaturalist_get_species_counts. The scope is unambiguous.

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?

The description gives explicit when-to-use guidance: it names the sibling inaturalist_get_observation for fetching identifications/comments, explains why (28 KB thread size), and states the area constraint ('exactly one form'). It also gives a concrete pagination rule ('Results past 10,000 need the cursor... rather than a higher page number'). This is strong routing and exclusion guidance.

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

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 10 tool updates
    • First observedinaturalist_find_places
    • First observedinaturalist_get_histogram
    • First observedinaturalist_get_leaderboard
    • First observedinaturalist_get_observation
    • First observedinaturalist_get_similar_species
    • First observedinaturalist_get_species_counts
    • First observedinaturalist_get_taxon
    • First observedinaturalist_list_reference
    • First observedinaturalist_resolve_name
    • First observedinaturalist_search_observations

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables querying citizen-science species observations from iNaturalist via the Pipeworx MCP gateway. Provides read-only access to species data without authentication.
    1 npm
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables querying a global plant database with over 1 million species, providing access to plant records and species search via natural language.
    2 npm
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to query and retrieve biodiversity data from the Global Biodiversity Information Facility (GBIF), including species, occurrences, datasets, and literature.
    -
Try in Browser

Glama MCP Gateway

Add one secure layer between your agents and this server.