iNaturalist MCP
An MCP server that interfaces with iNaturalist's index of 387M+ georeferenced citizen-science observations. It allows agents to search sightings by area, date, taxon, and annotation; read identification threads; chart phenology; rank species by area; and identify look-alike taxa. It supports STDIO or Streamable HTTP transports and requires no API key.
Package and access
Local package with source-attributed installation metadata. Koskamo does not execute packages during review.
What you can do with it
- Search georeferenced wildlife sightings by area, date, and taxon
- Read community identification threads for specific observation records
- Chart phenology histograms showing when a taxon appears in an area
- Find look-alike species that a taxon is most often misidentified as
Source and maintenance
- Maintenance checked
Packages and installation
Source-provided package data. Koskamo has not executed or live-probed this package.
@cyanheads/inaturalist-mcp-server 0.3.0
{
"version": "0.3.0",
"transport": "stdio",
"identifier": "@cyanheads/inaturalist-mcp-server",
"runtimeHint": "npx",
"registryType": "npm",
"registryBaseUrl": "https://registry.npmjs.org",
"environmentVariables": [
{
"name": "MCP_LOG_LEVEL",
"format": "string",
"default": "info",
"description": "Sets the minimum log level for output (e.g., 'debug', 'info', 'warn')."
},
{
"name": "INATURALIST_CLAMP_LIMITS",
"format": "string",
"default": "true",
"description": "Clamp oversized read limits and defer oversized by-id batches. Set false to restore strict rejection."
},
{
"name": "INATURALIST_USER_AGENT",
"format": "string",
"description": "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."
},
{
"name": "INATURALIST_MIN_REQUEST_INTERVAL_MS",
"format": "number",
"default": "1100",
"description": "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."
},
{
"name": "INATURALIST_MAX_CONCURRENT_REQUESTS",
"format": "number",
"default": "4",
"description": "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."
},
{
"name": "INATURALIST_DAILY_REQUEST_BUDGET",
"format": "number",
"default": "9000",
"description": "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."
}
]
}Tools
Reported by the attributed source; not independently observed by Koskamo.
Connect from your client
Each snippet configures the same source-provided package; replace placeholders before use.
Cursor
{
"mcpServers": {
"inaturalist-mcp": {
"command": "npx",
"args": [
"-y",
"@cyanheads/inaturalist-mcp-server@0.3.0"
],
"env": {
"MCP_LOG_LEVEL": "<YOUR_MCP_LOG_LEVEL>",
"INATURALIST_CLAMP_LIMITS": "<YOUR_INATURALIST_CLAMP_LIMITS>",
"INATURALIST_USER_AGENT": "<YOUR_INATURALIST_USER_AGENT>",
"INATURALIST_MIN_REQUEST_INTERVAL_MS": "<YOUR_INATURALIST_MIN_REQUEST_INTERVAL_MS>",
"INATURALIST_MAX_CONCURRENT_REQUESTS": "<YOUR_INATURALIST_MAX_CONCURRENT_REQUESTS>",
"INATURALIST_DAILY_REQUEST_BUDGET": "<YOUR_INATURALIST_DAILY_REQUEST_BUDGET>"
}
}
}
}Cline
{
"mcpServers": {
"inaturalist-mcp": {
"command": "npx",
"args": [
"-y",
"@cyanheads/inaturalist-mcp-server@0.3.0"
],
"env": {
"MCP_LOG_LEVEL": "<YOUR_MCP_LOG_LEVEL>",
"INATURALIST_CLAMP_LIMITS": "<YOUR_INATURALIST_CLAMP_LIMITS>",
"INATURALIST_USER_AGENT": "<YOUR_INATURALIST_USER_AGENT>",
"INATURALIST_MIN_REQUEST_INTERVAL_MS": "<YOUR_INATURALIST_MIN_REQUEST_INTERVAL_MS>",
"INATURALIST_MAX_CONCURRENT_REQUESTS": "<YOUR_INATURALIST_MAX_CONCURRENT_REQUESTS>",
"INATURALIST_DAILY_REQUEST_BUDGET": "<YOUR_INATURALIST_DAILY_REQUEST_BUDGET>"
}
}
}
}VS Code
{
"servers": {
"inaturalist-mcp": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@cyanheads/inaturalist-mcp-server@0.3.0"
],
"env": {
"MCP_LOG_LEVEL": "<YOUR_MCP_LOG_LEVEL>",
"INATURALIST_CLAMP_LIMITS": "<YOUR_INATURALIST_CLAMP_LIMITS>",
"INATURALIST_USER_AGENT": "<YOUR_INATURALIST_USER_AGENT>",
"INATURALIST_MIN_REQUEST_INTERVAL_MS": "<YOUR_INATURALIST_MIN_REQUEST_INTERVAL_MS>",
"INATURALIST_MAX_CONCURRENT_REQUESTS": "<YOUR_INATURALIST_MAX_CONCURRENT_REQUESTS>",
"INATURALIST_DAILY_REQUEST_BUDGET": "<YOUR_INATURALIST_DAILY_REQUEST_BUDGET>"
}
}
}
}Claude Desktop
{
"mcpServers": {
"inaturalist-mcp": {
"command": "npx",
"args": [
"-y",
"@cyanheads/inaturalist-mcp-server@0.3.0"
],
"env": {
"MCP_LOG_LEVEL": "<YOUR_MCP_LOG_LEVEL>",
"INATURALIST_CLAMP_LIMITS": "<YOUR_INATURALIST_CLAMP_LIMITS>",
"INATURALIST_USER_AGENT": "<YOUR_INATURALIST_USER_AGENT>",
"INATURALIST_MIN_REQUEST_INTERVAL_MS": "<YOUR_INATURALIST_MIN_REQUEST_INTERVAL_MS>",
"INATURALIST_MAX_CONCURRENT_REQUESTS": "<YOUR_INATURALIST_MAX_CONCURRENT_REQUESTS>",
"INATURALIST_DAILY_REQUEST_BUDGET": "<YOUR_INATURALIST_DAILY_REQUEST_BUDGET>"
}
}
}
}Let your agent find its tools
Find servers like iNaturalist MCP from your agent. Add Koskamo once to search the index for endpoints, access requirements, and client setup. Public discovery needs no key.