# io.github.andrewschristison/pondlog-inaturalist (npm · @pondlog/mcp-inaturalist)

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

- Trust score: 66/100 (medium)
- Change this week: +24
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-08-03

## Components

- npm · `@pondlog/mcp-inaturalist`: 66/100 (this document), [markdown](https://verifymcp.io/servers/andrewschristison-pondlog-inaturalist/pondlog-mcp-inaturalist.md), [page](https://verifymcp.io/servers/andrewschristison-pondlog-inaturalist/pondlog-mcp-inaturalist)

## Channel facts

- Registry: `npm`
- Package: `@pondlog/mcp-inaturalist`
- Version: `0.1.3`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-08-03.

- **Supply Chain Security**: 87/100
  - No malware found by supply-chain analysis.
  - Only part of the dependency tree could be resolved (97 of 101), so this covers what we could see, not the whole tree.
  - No install/post-install scripts declared.
  - Only part of the dependency tree could be resolved (97 of 101), so this covers what we could see, not the whole tree.
- **Provenance & Transparency**: 45/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (MIT).
  - Actively maintained (last published 82 days ago).
  - Disclosure check failed: no security disclosure policy was found in the source repository.
- **Schema Quality & AI Usability**: 63/100
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 1952 tokens (~216/item across 9 items; 9 tools + 0 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 27/100
  - Stability observed for 8 of 30 days with no destabilising changes; credit accrues until the full window elapses.
- **Tool Coverage**: 95/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 86% of tool parameters carry a description.
- **Capabilities**: 100/100
  - Implements a supported MCP spec version (2025-11-25); the latest is 2026-07-28.

## Install

### Claude

```bash
claude mcp add andrewschristison-pondlog-inaturalist -- npx -y @pondlog/mcp-inaturalist
```

### Codex

```bash
codex mcp add andrewschristison-pondlog-inaturalist -- npx -y @pondlog/mcp-inaturalist
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "andrewschristison-pondlog-inaturalist": {
      "type": "local",
      "command": [
        "npx",
        "-y",
        "@pondlog/mcp-inaturalist"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add andrewschristison-pondlog-inaturalist --command npx --arg -y --arg @pondlog/mcp-inaturalist
```

### Hermes

```yaml
mcp_servers:
  andrewschristison-pondlog-inaturalist:
    command: "npx"
    args: ["-y", "@pondlog/mcp-inaturalist"]
```

### Other

```json
{
  "mcpServers": {
    "andrewschristison-pondlog-inaturalist": {
      "command": "npx",
      "args": [
        "-y",
        "@pondlog/mcp-inaturalist"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-08-02 (score 66, +61)

- [security regression] Provenance: unverified → fail
- [security improvement] Install scripts: unverified → pass
- [security improvement] Known CVEs: unverified → partial
- [security improvement] Malware scan: unverified → pass
- [functional improvement] Stability: unverified → 0.23
- [functional improvement] MCP protocol: unverified → pass
- [functional improvement] Maintenance: unverified → pass
- [functional improvement] Dependency health: unverified → partial
- [functional improvement] License: unverified → pass
- [functional improvement] Tool coverage: unverified → 100
- [functional improvement] Schema quality: unverified → excellent
- [functional] Licence: MIT

### 2026-08-01 (score 5, −13)

- [functional regression] Tool coverage: 100 → unverified

### 2026-07-31 (score 18, −24)

- [functional] We updated how we score, so this day's move reflects our rubric, not a change to the server

### 2026-07-30 (score 42, +18)

- [functional regression] Security disclosure: unverified → fail
- [functional improvement] Tool coverage: unverified → 100

### 2026-07-28 (score 24, −18)

- [functional regression] Security disclosure: fail → unverified
- [functional regression] Tool coverage: 100 → unverified
- [functional] First check of Schema quality: unverified

### 2026-07-27 (score 42)

First indexed and scored.

## MCP tools (9)

### `search_observations` (~637 tokens)

Search iNaturalist Observations

Search recent iNaturalist observations with rich filters: geographic radius, taxon, iconic group, date range, and quality grade. Returns up to `per_page` normalized observations (species name, observer, place, observed date, coordinates, URL). Use this when the caller asks for specific kinds of observations ('show me bird sightings near Olympic National Park last month'). For a simple 'what's nearby' query, prefer `get_nearby_observations`. For aggregate counts, prefer `get_species_counts`.

Input parameters:

- `d1` (string): Start date (inclusive), ISO YYYY-MM-DD. Example: 2025-04-01.
- `d2` (string): End date (inclusive), ISO YYYY-MM-DD. Example: 2025-04-30.
- `iconic_taxa` (array): Filter to one or more iNaturalist iconic-taxa groups. Aves = birds; Amphibia = frogs, salamanders, newts; Mammalia = mammals; Reptilia = reptiles; Insecta = insects; Arachnida = spiders, scorpions, m…
- `lat` (number): WGS84 latitude in decimal degrees, between -90 and 90. Example: 48.118 for Port Angeles, WA.
- `lng` (number): WGS84 longitude in decimal degrees, between -180 and 180. Example: -123.4307 for Port Angeles, WA.
- `order_by` (string): Sort order. 'observed_on' for chronological by sighting date (most useful); 'created_at' for upload order; 'votes' for community-favorited.
- `page` (integer): Page number, 1-indexed. iNaturalist caps page * per_page at 10,000.
- `per_page` (integer): Results per page. Default 30, maximum 200.
- `place_id` (integer): iNaturalist place ID. Use `search_places` first to look one up. Filters to a named region rather than lat/lng radius.
- `quality_grade` (string): iNaturalist quality grade. 'research' = community-verified IDs (most reliable); 'needs_id' = uploaded but not yet verified; 'casual' = excluded from research-grade pool. Default: no filter (all grade…
- `radius_km` (number): Geographic search radius in km. Required if `lat`/`lng` are provided. Default 25 when geo-searching. Maximum 500.
- `taxon_name` (string): Taxon name to filter by. Accepts common name (e.g. 'frog', 'bald eagle') or scientific name (e.g. 'Pseudacris regilla'). Partial matches work.

### `get_observation` (~76 tokens)

Get iNaturalist Observation Detail

Fetch a single observation by its iNaturalist ID, with full detail: photos, description, identification count, comment count, plus all the fields from the search response. Use after `search_observations` returns a result the caller wants to drill into.

Input parameters:

- `id` (required): iNaturalist observation ID. Numeric or numeric string.

### `get_species_counts` (~369 tokens)

iNaturalist Species Counts at a Location

Returns a count of observations per species for a geographic + temporal query. Each row: taxon name, common name, iconic group, observation count. Use this for 'what species have been seen here' rather than 'show me each individual sighting'. For a higher-level summary grouped by iconic taxa, use `get_iconic_taxa_summary` instead.

Input parameters:

- `d1` (string)
- `d2` (string)
- `iconic_taxa` (array): Filter to one or more iNaturalist iconic-taxa groups. Aves = birds; Amphibia = frogs, salamanders, newts; Mammalia = mammals; Reptilia = reptiles; Insecta = insects; Arachnida = spiders, scorpions, m…
- `lat` (number): WGS84 latitude in decimal degrees, between -90 and 90. Example: 48.118 for Port Angeles, WA.
- `lng` (number): WGS84 longitude in decimal degrees, between -180 and 180. Example: -123.4307 for Port Angeles, WA.
- `page` (integer)
- `per_page` (integer)
- `place_id` (integer)
- `radius_km` (number): Search radius in kilometers. Maximum 500. Default 25. Use smaller values (5-25 km) for hyper-local queries; larger values (50-200 km) for regional surveys.

### `search_taxa` (~113 tokens)

Search iNaturalist Taxa

Search the iNaturalist taxonomy by name (common or scientific). Returns up to 30 matching taxa with id, scientific name, common name, rank (species/genus/family/etc.), and iconic group. Use this to look up a taxon ID before passing it to other tools, or to confirm a species is in iNat's taxonomy.

Input parameters:

- `query` (string, required): Search term. Common name ('bald eagle') or scientific name ('Haliaeetus leucocephalus'). Partial matches work.

### `get_taxon` (~59 tokens)

Get iNaturalist Taxon Detail

Fetch a single taxon by ID, with full detail: ancestry chain, Wikipedia URL, total observations count, default photo. Use after `search_taxa` to drill into a specific match.

Input parameters:

- `id` (required): iNaturalist taxon ID.

### `get_nearby_observations` (~171 tokens)

Get Nearby iNaturalist Observations

Convenience tool for the most common query: 'what wildlife has been seen near these coordinates recently?' Returns up to 50 observations within `radius_km` over the last `days` days, ordered by observation date. For more control (taxon filters, date ranges, sort order), use `search_observations` instead.

Input parameters:

- `days` (integer): Default 7 days.
- `lat` (number, required): WGS84 latitude in decimal degrees, between -90 and 90. Example: 48.118 for Port Angeles, WA.
- `lng` (number, required): WGS84 longitude in decimal degrees, between -180 and 180. Example: -123.4307 for Port Angeles, WA.
- `radius_km` (number): Default 25 km.

### `get_iconic_taxa_summary` (~268 tokens)

Iconic Taxa Summary at a Location

Returns a high-level breakdown of recent activity grouped by iconic taxa group (Aves, Amphibia, Mammalia, etc.). For each group, returns the total observation count and the top 5 species by count. Useful for at-a-glance summaries. Aves = birds; Amphibia = frogs, salamanders, newts; Mammalia = mammals; Reptilia = reptiles; Insecta = insects; Arachnida = spiders, scorpions, mites; Mollusca = snails, slugs, clams, octopuses; Plantae = plants; Fungi = fungi, lichens; Actinopterygii = ray-finned fish; Animalia = catch-all animal kingdom (use only when others don't fit); Protozoa, Chromista = microscopic eukaryotes.

Input parameters:

- `days` (integer): Default 7 days.
- `lat` (number, required): WGS84 latitude in decimal degrees, between -90 and 90. Example: 48.118 for Port Angeles, WA.
- `lng` (number, required): WGS84 longitude in decimal degrees, between -180 and 180. Example: -123.4307 for Port Angeles, WA.
- `radius_km` (number): Default 25 km.

### `search_places` (~106 tokens)

Search iNaturalist Places

Look up an iNaturalist 'place' (named region: park, county, country, etc.) by name. Returns up to 10 matches with id, display name, and (when available) coordinates. Use to convert a place name into a `place_id` you can pass to `search_observations` or `get_species_counts`.

Input parameters:

- `query` (string, required): Place name. Example: 'Olympic National Park', 'Clallam County', 'Port Angeles'.

### `get_observers` (~153 tokens)

Top iNaturalist Observers at a Location

Returns the top observers (most prolific iNaturalist users) for a given geographic + temporal query. Each row: user id, login, display name, observation count, species count. Use this to find local naturalists or to credit who is documenting an area.

Input parameters:

- `days` (integer): Default 7 days.
- `lat` (number, required): WGS84 latitude in decimal degrees, between -90 and 90. Example: 48.118 for Port Angeles, WA.
- `lng` (number, required): WGS84 longitude in decimal degrees, between -180 and 180. Example: -123.4307 for Port Angeles, WA.
- `radius_km` (number): Default 25 km.

## Diagnostics

Captured diagnostic sections: Provenance, Dependencies. The full working is on the page: https://verifymcp.io/servers/andrewschristison-pondlog-inaturalist/pondlog-mcp-inaturalist#diagnostics

## Score history

- 2026-08-03: 66
- 2026-08-02: 66
- 2026-08-01: 5
- 2026-07-31: 18
- 2026-07-30: 42
- 2026-07-28: 24
- 2026-07-27: 42

## Links

- npm package: https://www.npmjs.com/package/@pondlog/mcp-inaturalist
- Socket report: https://socket.dev/npm/package/@pondlog/mcp-inaturalist
- Repository: https://github.com/andrewschristison/pondlog
- Changelog RSS feed: https://verifymcp.io/servers/andrewschristison-pondlog-inaturalist/pondlog-mcp-inaturalist/changelog.xml
- Changelog JSON feed: https://verifymcp.io/servers/andrewschristison-pondlog-inaturalist/pondlog-mcp-inaturalist/changelog.json
- HTML version of this page: https://verifymcp.io/servers/andrewschristison-pondlog-inaturalist/pondlog-mcp-inaturalist
