Search iNaturalist sightings, identification threads, phenology, and look-alike species.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
One-click editor setup isnβt available for this listing yet β we donβt have a confirmed install command, and weβd rather show nothing than point your editor at the wrong package or host. Follow the projectβs own setup instructions, linked above.
Search wildlife sightings, read identification threads, rank species by area, chart phenology, and find look-alike taxa from iNaturalist via MCP. STDIO or Streamable HTTP.
Public Hosted Server: https://inaturalist.caseyjhand.com/mcp
iNaturalist's index of 380M+ georeferenced citizen-science observations of plants, animals, and fungi. Search sightings by area, date, taxon, and annotation; read the community identification thread behind a record; chart when a taxon appears in a place; rank the species of an area; and check what a look-alike is most often confused with. Keyless and read-only, running as a stdio process, a local Streamable HTTP server, or the public hosted endpoint above.
Composes with servers covering institutional specimen records, botanical nomenclature, and geocoding β this one contributes the observation, identification-thread, and phenology layer.
| Tool | Description |
|---|---|
inaturalist_list_reference | Decode the controlled vocabularies the other tools filter on β annotation attributes and values, quality grades, licences, ranks, iconic taxa, conservation-status codes |
inaturalist_resolve_name | Resolve a common or scientific name to a taxon id, or a place, project, or observer name to its id, as ranked candidates |
inaturalist_find_places | Resolve a place name to a place id, or list the places covering a map area, each with its bounding box and containment chain |
inaturalist_search_observations | Search georeferenced sightings by area, date, taxon, quality grade, annotation, conservation status, observer, project, and licence |
inaturalist_get_observation | Fetch up to 10 observations by id with their community identification thread and consensus taxon |
inaturalist_get_species_counts | Rank the distinct species recorded in an area and period, most-observed first β optionally for one observer or one project |
inaturalist_get_histogram | Build a phenology histogram for a taxon in an area β which months, weeks, or years it is recorded in |
inaturalist_get_leaderboard | Rank the most active observers or identifiers for an area, period, and taxon |
inaturalist_get_similar_species | List the taxa a genus-or-finer taxon is most often misidentified as, ranked by how many times identifiers made the correction |
inaturalist_get_taxon | Fetch a taxon profile β taxonomic path, conservation listings by authority, encyclopedia summary, photos, and children |
| Resource | Description |
|---|---|
inaturalist://taxa/{taxon_id} | Taxon profile by numeric taxon id, as injectable context |
inaturalist://observations/{observation_id} | One observation with its identification thread expanded, as injectable context |
Both resources mirror data also reachable through inaturalist_get_taxon and inaturalist_get_observation β useful for clients that don't surface MCP resources.
inaturalist_list_reference tooltopic selects one table: controlled_terms, quality_grades, licenses, ranks, iconic_taxa, conservation_status_codes; source reports whether it came from iNaturalist or the published spectaxon_id applies only to controlled_terms and adds observed_usage β which annotation pairs identifiers have actually recorded for that taxon, with counts. Each row carries term_id and term_value_id, ready to pass to the annotation filters; labels repeat across attributes ("Egg" is both a Life Stage and an Evidence of Presence value), so filter by the idsinaturalist_resolve_name tooltype: taxon (name-prefix autocomplete) or place / project / user / any (scored cross-kind search); rank narrows taxa only; limit 1β30 (default 10), applied in-process on every typefound: false with guidance naming why, rather than an errorkind and id β the identifier every other tool takes. A user candidate also carries login, the value leaderboard entries and an observation's observer relay; its name is the display nameinaturalist_find_places toolq (place-name prefix) or all four of nelat, nelng, swlat, swlng; neither or both fails as invalid_geography, as does a box with nelat south of swlat. A blank q reads as unset, and nelng west of swlng is an antimeridian-crossing box, not an errorq returns places[]; the bounding box returns standard[] and community[] as separate listsbbox, place_type, admin_level, ancestor_place_ids, location, and slug; boundary polygons are stripped, since one upstream response carries 247 KB of themper_page (1β30, default 10) binds the bounding-box arm only, where it bounds standard[] and community[] separately, so cap is per_page Γ 2. The name-prefix endpoint publishes no page size, and its fixed page is disclosed through the truncation enrichmentinaturalist_search_observations toolplace_id, the lat+lng+radius triple in kilometres (0 < radius β€ 500), or the four-corner bounding box with nelat at or north of swlat; partial, mixed, a zero radius, or an inverted box fails as invalid_geographytaxon_id, d1/d2, quality_grade, captive, term_id+term_value_id, iconic_taxa, hrank/lrank, csi, threatened/native/introduced/endemic, user_id or user_login, project_id, licensed/photo_licensed, license/photo_license, and q+search_onuser_id, user_login, and project_id come from inaturalist_resolve_name (a login also rides leaderboard entries and every observation's observer). Passing both observer forms fails as conflicting_observer; an unknown observer or project fails as unknown_user or unknown_project_idlicense and photo_license take licence codes β cc0, cc-by, cc-by-nc, cc-by-nd, cc-by-sa, cc-by-nc-nd, cc-by-nc-sa, any case β joined as OR, so ["cc-by","cc0"] finds sightings reusable with attribution only. photo_license matches a record with any photo under the code, independently of the record's own licence. licensed/photo_licensed only test for a non-null licenced1 after d2 fails as inverted_date_range (on every tool that takes dates), and an hrank finer than lrank as inverted_rank_range. Equal pairs are validquality_grade: ["research"] and captive: false, echoed back as applied_filters on every callper_page 1β25 (default 10); page walks the first 10,000 results under any ordering. Past that, order by id descending and pass each page's next_cursor as cursor β next_cursor is issued only on an id-descending page, since no other ordering can be continued by id. Passing page and cursor together fails, and a cursor forces the id ordering, which is echoedinclude expands photos, annotations, sounds. identifications and comments are deliberately absent β one thread measures 28 KB, so the thread lives on inaturalist_get_observationinaturalist_get_observation toolNo reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/inaturalist-mcp-server)<a href="https://allmcps.com/mcp/inaturalist-mcp-server"><img src="https://allmcps.com/api/badge/inaturalist-mcp-server?style=directory" alt="Inaturalist MCP Server on AllMCPs" /></a>