mcpbeat Sign in

Inaturalist MCP Server

answering

Inaturalist MCP Server is answering right now. Last checked 4 min ago. 333 installs a week from npm. It exposes 10 tools. Last commit 20 Sep 2026.

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

Installs per day peak 333 · avg 11
a month agotoday
Uptime history 30 hours of history · worst hour 67%
30 hours agonow
97.8%
Uptime 24h
89 of 91 checks
10
Tools
read from the server
405 ms
Response time
average over 24h
333
Installs / week
npm and PyPI

Inaturalist MCP Server does not always answer

Over the last week it answered 98.2% of our checks. We check every 15 minutes, so you hear about the next outage within the hour — not from your users.

Three servers free · no card

Connect this server

Endpoint below is the one we actually reach during checks — not the one copied from a README. Last verified 4 min ago.

run in your terminal
claude mcp add inaturalist-mcp-server --transport http https://inaturalist.caseyjhand.com/mcp
~/Library/Application Support/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "inaturalist-mcp-server": {
      "url": "https://inaturalist.caseyjhand.com/mcp"
    }
  }
}
~/.codex/config.toml
[mcp_servers.inaturalist-mcp-server]
url = "https://inaturalist.caseyjhand.com/mcp"
.cursor/mcp.json
{
  "mcpServers": {
    "inaturalist-mcp-server": {
      "url": "https://inaturalist.caseyjhand.com/mcp"
    }
  }
}
.vscode/mcp.json
{
  "mcpServers": {
    "inaturalist-mcp-server": {
      "url": "https://inaturalist.caseyjhand.com/mcp"
    }
  }
}

This one needs environment variables set before it will start: MCP_HTTP_HOST (The hostname for the HTTP server.), MCP_HTTP_PORT (The port to run the HTTP server on.), MCP_HTTP_ENDPOINT_PATH (The endpoint path for the MCP server.), MCP_AUTH_MODE (Authentication mode to use: 'none', 'jwt', or 'oauth'.), MCP_LOG_LEVEL (Sets the minimum log level for output (e.g., 'debug', 'info', 'warn').), INATURALIST_USER_AGENT (User-Agent sent on every request to api.inaturalist.org. Defaults to the package name, its version, and the repository URL. Keep a contact URL in any override — the published terms ask for identifiable clients.), INATURALIST_MIN_REQUEST_INTERVAL_MS (Minimum spacing between outbound request starts, in milliseconds. The default holds the sustained rate near 54 requests per minute, under the 60 the upstream asks for and well under its 100 ceiling.), INATURALIST_MAX_CONCURRENT_REQUESTS (Maximum outbound requests in flight. Separate from the start interval: spacing bounds the sustained rate, this bounds the burst so one slow call does not stall the lane.), INATURALIST_DAILY_REQUEST_BUDGET (Outbound requests allowed per UTC day, counted in-process. The default sits under the 10,000 per day the upstream asks for, and exhaustion fails loudly rather than degrading silently. The counter is per process and resets on restart.). The author declared them in the registry entry; get the values from the project itself.

Available tools 10

Read directly from the server with tools/list, grouped by what they act on. If a tool disappears, we record the date.

inaturalist
inaturalist_find_places
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.
inaturalist_get_histogram
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.
inaturalist_get_leaderboard
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.
inaturalist_get_observation
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.
inaturalist_get_similar_species
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.
inaturalist_get_species_counts
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.
inaturalist_get_taxon
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.
inaturalist_list_reference
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.
inaturalist_resolve_name
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.
inaturalist_search_observations
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.

Endpoints

URLTransportStateLatencyChecked
https://inaturalist.caseyjhand.com/mcp streamable-http answering 214 ms 4 min ago

Alternatives to Inaturalist MCP Server

same job, measured the same way
Inaturalist MCP
by mrfentmen

Search species and recent observations from iNaturalist. No key required.

local only
Pawlisty Pet Listings
by pawlisty

Search live Pawlisty pet listings by species, breed, location, and price.

4 tools answering
FTIR.fun Spectral Search
by jxbaoxiaodong

FTIR spectral search and material identification for AI agents via MCP.

71 installs/wk answering
Cards
by mycardfolio

Sports card database: card search, full set checklists, parallel lookup, card identification.

7 tools answering
AI Dictionary MCP
by donjguido

Look up, search, cite, discuss, and track AI phenomenology terms

235 installs/wk local only
MCP Factcheck
by carlisia

An MCP server that validates content against MCP specification using semantic search and AI

local only
Pondlog Inaturalist
by andrewschristison

iNaturalist MCP server. Wildlife observations, species counts, taxa, and places worldwide.

31 installs/wk local only
Nationale Vacaturebank Jobs
by nationalevacaturebank-www

Search and retrieve job postings on Nationale Vacaturebank, the largest Dutch jobs site (read-only).

2 tools answering

Inaturalist MCP Server — questions

Answers built from our own checks of this server.

What can Inaturalist MCP Server do?
It exposes 10 tools, read directly from the server on our last check. Among them: inaturalist_find_places, inaturalist_get_histogram, inaturalist_get_leaderboard, inaturalist_get_observation, inaturalist_get_similar_species, inaturalist_get_species_counts and 4 more. The full list with descriptions is on this page — we take it from the server itself via tools/list, not from a README. How MCP servers expose tools in the first place →
Is Inaturalist MCP Server working right now?
We send a real MCP handshake every 15 minutes. Over the last 24 hours 89 of 91 checks got a reply (97.8%), average response time 405 ms. The bar chart above shows every period we have measured.
How do I connect Inaturalist MCP Server?
Copy the ready config from this page — we generate it for Claude Code, Claude Desktop, Codex, Cursor and VS Code, each with the file path that client actually reads. It is a remote server, so there is nothing to install — the client connects to the address.
Does Inaturalist MCP Server need an API key?
No. Inaturalist MCP Server completed a full MCP handshake with us as an anonymous client and listed its tools without asking for anything. All 10 of them are readable on this page. This is what we observed, not what the docs claim.
How fast is Inaturalist MCP Server?
It answers our handshake in 405 ms on average, which is faster than 39% of all working MCP servers we measure. The comparison comes from our own checks across the whole registry, every 15 minutes.
How many people use Inaturalist MCP Server?
The npm package @cyanheads/inaturalist-mcp-server was installed 333 times in the last week. We show installs rather than GitHub stars on purpose: a star is a bookmark, an install is someone actually running it.
Is Inaturalist MCP Server open source?
Yes — it is published under the Apache-2.0 licence, written in TypeScript, 1 stars on GitHub and 9 open issues. The source link is on this page, so you can read exactly what it does with your data before you connect it.