Skip to main content
Glama
woodcreeper
by woodcreeper

Birding Buddy MCP

Your AI-powered birding companion. A TypeScript MCP server that connects Claude to the eBird API and Xeno-canto — with personal intelligence like life list tracking, route-based hotspot discovery, and Xeno-canto recording enrichment.

28 tools across 6 categories: core eBird API, hotspot & checklist access, life list management, compound intelligence, Xeno-canto enrichment, and utilities.

The server includes a Birding Buddy persona — always-active instructions that tell Claude how to route your questions to the right tools, group results by bird category, highlight rarities, and offer recording gap analysis when relevant. Just talk naturally.


Deploy your own Birding Buddy server in under 5 minutes. Works with Claude Desktop, Claude.ai, and the Claude mobile app.

What you'll need

Deploy

git clone https://github.com/woodcreeper/birding-buddy-mcp.git
cd birding-buddy-mcp
npm install
./deploy.sh

The deploy script will:

  1. Log you into Cloudflare (if needed)

  2. Create a KV namespace for your life list

  3. Prompt for your eBird and Xeno-canto API keys (stored as Cloudflare secrets — never in code)

  4. Build and deploy the Worker

When it finishes, you'll see your server URL:

https://birding-buddy.<your-subdomain>.workers.dev/mcp

Connect to Claude

Claude Desktop / Claude.ai / Claude mobile:

Add your server URL as a remote MCP server:

  1. Open Claude → Settings → MCP Servers (or Integrations)

  2. Add a new server with the URL from the deploy step

  3. That's it — Birding Buddy tools appear automatically

Import your life list

  1. Go to ebird.org/lifelist

  2. Click Download (CSV)

  3. In Claude, say: "Import my eBird life list" and paste the CSV content

Your life list is stored in your own Cloudflare KV namespace — private to you, accessible from any device.


Related MCP server: eBird MCP Server

Local Setup (Claude Desktop only)

If you prefer to run the server locally instead of on Cloudflare:

1. Get your API keys

2. Clone and build

git clone https://github.com/woodcreeper/birding-buddy-mcp.git
cd birding-buddy-mcp
npm install
npm run build

3. Add to Claude Desktop

Edit ~/Library/Application Support/Claude/claude_desktop_config.json:

{
  "mcpServers": {
    "ebird": {
      "command": "node",
      "args": ["/absolute/path/to/birding-buddy-mcp/dist/index.js"],
      "env": {
        "EBIRD_API_KEY": "your-ebird-key-here",
        "XC_API_KEY": "your-xeno-canto-key-here"
      }
    }
  }
}

Restart Claude Desktop after saving.

4. Import your life list

  1. Go to ebird.org/lifelist and click Download (CSV)

  2. In Claude, say:

Import my eBird life list from /Users/you/Downloads/ebird_world_life_list.csv

Your life list is stored locally at ~/.ebird-mcp/life-list.json and persists across Claude sessions.


Why build this?

Existing eBird MCP servers are thin API wrappers — they give Claude access to eBird data, but they don't know anything about you. This server adds a personal layer:

  • Your life list — imported from eBird's CSV export, so every query can filter for species you haven't seen

  • Route intelligence — finds birding hotspots along a driving route, not just near a single point

  • Recording enrichment — checks Xeno-canto for species with the fewest quality recordings, so you can target your sound recording efforts

  • Checklist access — resolve hotspots by name, browse recent checklists, and view full species lists — with direct eBird links throughout

The eBird API provides the raw data. Claude provides the intelligence — it already knows which species are endemic, how to prioritize a birding itinerary, and how to reason about detection probability. This server bridges the two.


Your Life List — The Killer Feature

Your life list is what makes this server different from every other eBird tool. Once imported, it powers all the "intelligence" tools — turning generic queries like "what birds are here?" into personal ones like "what birds are here that I haven't seen?"

How it works

  1. Import once — the import_life_list tool parses your eBird life list CSV. On Cloudflare, it's stored in your personal KV namespace. Locally, it's saved at ~/.ebird-mcp/life-list.json. Either way, it persists across sessions — you don't need to re-import every time.

  2. Automatic filtering — the compound tools (get_life_list_gaps_nearby, get_life_list_gaps_at_hotspot) automatically cross-reference live eBird observations against your life list. Species you've already seen are filtered out; what remains are your potential lifers, ranked by how frequently they're being reported.

  3. Re-import to refresh — after a trip where you added new species, re-download your CSV from eBird and re-import. The new file overwrites the old one.

What you can ask

Question

What happens

"What lifers can I get near me?"

Queries nearby observations, filters against your life list, ranks by report frequency

"Is Resplendent Quetzal on my life list?"

Looks up the species by scientific name

"How many species have I seen?"

Summarizes your list with breakdowns by country and year

"What haven't I seen at this hotspot?"

Gets recent observations at the hotspot, removes species you've seen

"What new birds could I find on my drive from A to B?"

Finds hotspots along the route, then filters each for your life list gaps


Example Conversations

These are real things you can say to Claude once the server is running. Claude will call the appropriate tools automatically.

Roadside Birding — "I've got 30 minutes, what can I find?"

You: I'm at a rest stop near Merida, Mexico (20.97, -89.62). What birds nearby would be lifers for me?

Claude: (calls get_life_list_gaps_nearby with your coordinates)

I found 12 potential lifers within 25km of your location. Here are the top targets:

  • Yucatan Woodpecker — 8 recent reports, nearest at Parque Centenario

  • Turquoise-browed Motmot — 6 reports, nearest at Reserva Ecológica Cuxtal

  • Orange Oriole — 4 reports, nearest at Hacienda Temozon

  • ...

Trip Route Planning — "Help me plan my drive"

You: We're landing in Cancun on April 5th and driving to Progreso. Find me the best birding stops along the route, especially for Yucatan endemics.

Claude: (calls get_hotspots_along_route with Cancun → Progreso coordinates, then cross-references results with your life list)

Route: 312 km, ~3.5 hour drive. I found 47 hotspots along your route. Here are the top stops ranked by species richness:

  1. Reserva de la Biosfera Ria Lagartos [L1234567] — 287 species all-time

  2. Cenote Ik Kil [L2345678] — 156 species

  3. ...

For Yucatan endemics specifically, I'd prioritize stops 1 and 5 — both have recent reports of Yucatan Wren, Yucatan Jay, and Orange Oriole. These are all species you haven't seen.

At a Hotspot — "What should I look for here?"

You: I'm at Celestun Biosphere Reserve (L456789). What species here would be new for my life list? Prioritize endemics.

Claude: (calls get_life_list_gaps_at_hotspot)

23 species recently reported here that aren't on your life list:

Yucatan endemics / near-endemics you should target:

  • Mexican Sheartail (4 recent reports)

  • Yucatan Wren (7 recent reports)

  • Yellow-lored Parrot (2 recent reports)

Other lifers with good recent detection:

  • American Flamingo (12 reports)

  • Clapper Rail (3 reports)

  • ...

Life List Stats — "How am I doing?"

You: Give me a summary of my life list — how many species, which countries, best years.

Claude: (calls get_life_list_stats)

Life List Summary Total species: 847

By country:

  • United States: 612

  • Mexico: 198

  • Costa Rica: 145

  • ...

By year:

  • 2024: 89 new species

  • 2023: 67 new species

  • ...

Species Lookup — "Tell me about this bird"

You: What's the eBird species code for Resplendent Quetzal? And is it on my life list?

Claude: (calls get_taxonomy then check_life_list)

Resplendent Quetzal (Pharomachrus mocinno) — species code: resque1, Family: Trogonidae.

Not on your life list — this would be a lifer!

Detection Probability — "Is this the right time?"

You: What are the chances of seeing a Painted Bunting in coastal South Carolina in mid-April?

Claude: (calls resolve_region_code for SC, then get_observation_frequency)

Painted Bunting in US-SC around April 15: Detected in 2/3 years checked (67%) Likelihood: Likely

Mid-April is right at the start of their breeding season arrival. You should have good odds, especially at coastal scrub and marsh edge habitats.

Exploring a New Region — "What's birding like there?"

You: I'm thinking about a trip to Oaxaca. How many species have been recorded there? What are the top hotspots?

Claude: (calls get_species_list for MX-OAX, then get_hotspots_in_region)

Oaxaca has 764 species recorded — one of the most biodiverse states in Mexico.

Top hotspots by all-time species count:

  1. Teotitlan del Valle Road (342 species)

  2. Huatulco National Park (289 species)

  3. ...


Tools Reference (28 total)

Core eBird API (13 tools)

Tool

Description

Key Parameters

get_recent_observations

Recent sightings in a region

regionCode, back (days), maxResults

get_notable_observations

Rare/unusual sightings in a region

regionCode, back

get_nearby_observations

Sightings near a lat/lng

lat, lng, dist (km)

get_nearby_notable_observations

Rarities near a location

lat, lng, dist

get_observations_for_species

Sightings of one species in a region

regionCode, speciesCode

get_nearest_observations_for_species

Closest sighting of a species

speciesCode, lat, lng

get_historic_observations

Sightings on a specific date

regionCode, year, month, day

get_hotspots_in_region

Birding hotspots in a region

regionCode, back

get_nearby_hotspots

Hotspots near a lat/lng

lat, lng, dist

get_hotspot_info

Details for a specific hotspot

locId

resolve_hotspot

Find a hotspot by name (fuzzy match)

name, lat, lng, dist

get_taxonomy

Species taxonomy lookup

species (codes), locale

get_species_list

All species ever recorded in a region

regionCode

Checklist Access (3 tools)

Tool

Description

Key Parameters

get_hotspot_observations

Recent observations at a specific hotspot

locId, back, maxResults

get_recent_checklists

Recent checklists at a hotspot, region, or near a location

locId, regionCode, or lat+lng

view_checklist

Full species list for a specific checklist

subId

Life List (3 tools)

Tool

Description

Key Parameters

import_life_list

Import your eBird life list CSV

csvPath or csvContent

check_life_list

Check if a species is on your list

scientificName

get_life_list_stats

Summary: total species, by country, by year

Compound Intelligence (3 tools)

Tool

Description

Key Parameters

get_life_list_gaps_nearby

Find potential lifers near your location

lat, lng, dist, back

get_life_list_gaps_at_hotspot

Species at a hotspot not on your life list

locId, back

get_hotspots_along_route

Birding stops along a driving route (uses OSRM)

startLat/Lng, endLat/Lng, hotspotRadius

Xeno-canto Enrichment (2 tools)

Tool

Description

Key Parameters

get_recording_counts

Recording count by quality grade (A-E) for a species

speciesName, country

enrich_species_list

Batch XC enrichment, sorted by fewest A-grade recordings

species (array), country

Reference & Utility (5 tools)

Tool

Description

Key Parameters

get_region_info

Details about an eBird region

regionCode

get_sub_regions

Sub-regions within a region

regionCode, regionType

resolve_region_code

Fuzzy match place names to eBird region codes

placeName

get_observation_frequency

Estimate detection probability for a species/date

regionCode, speciesCode, month, day


How It Works

You → Claude → MCP Protocol → Birding Buddy server (local or Cloudflare Worker)
                                   ├── eBird API 2.0 (observations, hotspots, taxonomy)
                                   ├── OSRM (driving routes)
                                   ├── Xeno-canto API v3 (recording counts by quality grade)
                                   └── Your life list (Cloudflare KV or local JSON file)

The server handles all API calls and data plumbing. Claude handles the intelligence — it knows endemic species, understands birding priorities, and can synthesize data from multiple tools into trip plans and recommendations.

The Birding Buddy persona (delivered via MCP server instructions) tells Claude how to route your questions, present results grouped by bird category, and offer Xeno-canto enrichment at the right time.

External APIs

API

Purpose

Auth

Rate Limits

eBird API 2.0

Observations, hotspots, taxonomy

API key

~200 req/hr

OSRM

Driving route calculation

None

Fair use (public demo server)

Xeno-canto API v3

Recording counts by quality grade

API key

Fair use


eBird Region Codes

Many tools accept an eBird region code. Common formats:

Level

Format

Example

Country

2-letter ISO

US, MX, CR, BR

State/Province

Country-State

US-NY, MX-ROO, CA-ON

County

Country-State-County

US-NY-061

Don't know the code? Use the resolve_region_code tool — just say "What's the region code for Quintana Roo?" and Claude will look it up.


Development

npm install              # Install dependencies
npm run build            # Compile TypeScript (local server)
npm run build:worker     # Compile TypeScript (Cloudflare Worker)
npm run dev              # Watch mode (recompiles on save)
npm run deploy           # Build worker + deploy to Cloudflare
npm start                # Run locally (needs EBIRD_API_KEY env var)

Project Structure

src/
├── index.ts              # Local entry point (stdio transport)
├── worker.ts             # Cloudflare Worker entry point
├── server.ts             # MCP server setup, registers all tools
├── clients/
│   ├── ebird.ts          # eBird API 2.0 client (typed)
│   ├── osrm.ts           # OSRM routing client
│   └── xeno-canto.ts     # Xeno-canto API v3 client
├── prompts/
│   └── birding-buddy.ts  # Birding Buddy persona instructions
├── data/
│   ├── life-list.ts      # Life list CSV parsing and core logic
│   ├── local-store.ts    # Local filesystem storage (~/.ebird-mcp/)
│   └── kv-store.ts       # Cloudflare KV storage
├── tools/
│   ├── observations.ts   # 7 observation tools
│   ├── hotspots.ts       # 4 hotspot tools (incl. resolve_hotspot)
│   ├── checklists.ts     # 3 checklist access tools
│   ├── taxonomy.ts       # 2 taxonomy tools
│   ├── reference.ts      # 3 reference + region resolver tools
│   ├── life-list.ts      # 3 life list tools
│   ├── compound.ts       # 3 compound intelligence tools
│   ├── xeno-canto.ts     # 2 Xeno-canto enrichment tools
│   └── frequency.ts      # 1 frequency estimation tool
└── utils/
    ├── geo.ts            # Haversine distance, waypoint sampling
    └── region-resolver.ts # Fuzzy region code matching

License

MIT

Available Tools

28 tools
check_life_listA

Check if a species is on your life list. Returns first observation date and country if found.

ParametersJSON Schema
NameRequiredDescriptionDefault
scientificNameYesScientific name or common name of the species (e.g., 'Haliaeetus leucocephalus' or 'Bald Eagle')

TDQS

A3.8/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the burden. It does disclose key return behavior ('Returns first observation date and country if found'), which is useful. However, it does not state whether the operation is read-only, if authentication is required, or how it behaves when the species is not on the list. For a simple check tool, this is adequate but not rich.

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 concise: two short sentences that effectively front-load the main purpose and then detail the return value. Every word earns its place with no fluff or redundancy.

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 a simple tool with one parameter and no output schema, the description provides sufficient context: it states the purpose and the expected return fields. It slightly lacks detail on the 'not found' case, but overall it is complete enough for straightforward usage.

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 covers the parameter fully with a clear description and example. The tool description adds no additional semantic value beyond what the schema provides. With 100% schema coverage, the baseline of 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 clearly states the tool's purpose with a specific verb ('Check') and resource ('your life list'), and distinguishes it from sibling tools like get_life_list_stats or import_life_list. It also specifies the exact output (first observation date and country), making the tool's function unambiguous.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the use case: when you want to check if a single species is on your life list. However, it provides no explicit guidance on when not to use it or mentions alternatives, such as using get_life_list_gaps_nearby for broader gap analysis. The context is clear but exclusions are absent.

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

enrich_species_listA

Append Xeno-canto recording counts and quality grades to an array of species. Call this ONLY after presenting a species list to the user AND receiving explicit confirmation that they want to see recording gap data. This tool makes one API call per species and can be slow for large lists — warn the user if the list exceeds 20 species. For 50 species expect ~10 seconds. Returns the input list sorted by fewest A-grade recordings first, so the highest-priority recording targets appear at the top.

ParametersJSON Schema
NameRequiredDescriptionDefault
countryNoFilter XC counts to a specific country
speciesYesArray of species to enrich with XC data

TDQS

A4.7/5.0
Behavior5/5

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

With no annotations provided, the description fully discloses key behavioral traits: one API call per species, potential slowness, the ~10 second estimate for 50 species, and the sorting of results. This gives the agent and user a concrete expectation of cost and output, exceeding the basic safety profile.

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 efficiently cover the action, usage timing, performance warning, and return behavior without repetition or fluff. The description is front-loaded with the core purpose and each 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?

Despite having no output schema, the description explains both the return format (input list sorted) and the meaning of that order (highest-priority targets first). It also covers performance expectations and usage preconditions, making the tool fully understandable for an agent.

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 provides descriptions for both parameters (species and country) with 100% coverage, so the baseline is 3. The description adds no direct parameter-level detail beyond the schema, though it does add contextual behavior about sorting and performance which is not parameter-specific.

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 clearly states the tool appends Xeno-canto recording counts and quality grades to a species array, using the specific verb 'append' and identifying the resource. The distinct sorting behavior (fewest A-grade first) further differentiates it from siblings like get_recording_counts, making its purpose 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?

It explicitly states the only valid usage context: 'Call this ONLY after presenting a species list to the user AND receiving explicit confirmation.' It also warns about performance and instructs to warn the user for large lists, providing clear when-to-use guidance and a precaution against misuse.

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

get_historic_observationsA

Get bird observations from a specific date in history at a region

ParametersJSON Schema
NameRequiredDescriptionDefault
dayYesDay (1-31)
yearYesYear
monthYesMonth (1-12)
maxResultsNoMax results
regionCodeYeseBird region code

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of disclosing behavior. It only says 'Get', which implies a read operation, but does not disclose response format, pagination, or any limitations. The description is too minimal to provide meaningful transparency beyond the obvious.

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 single, concise sentence that front-loads the action and resource. No filler words or redundant details; it earns its place perfectly.

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 simplicity (4 required parameters, no output schema), the description provides essential context: it identifies the date and region scope. However, it omits mention of optional maxResults and does not describe the return structure, though the schema covers parameter details. Overall, it is adequate for a basic retrieval tool.

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 schema descriptions cover all 5 parameters at 100% coverage, providing clear meaning for each (e.g., 'eBird region code', 'Day (1-31)'). The description adds no additional parameter context, 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.

Purpose5/5

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

The description clearly states the action ('Get'), the resource ('bird observations'), and the scope ('from a specific date in history at a region'). This distinguishes it from sibling tools like get_recent_observations and get_nearby_observations, which focus on different time/location dimensions.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (when you need historical observations for a specific date at a region) but does not explicitly mention alternatives or exclusions. There is no reference to sibling tools like get_recent_observations or guidance on when not to use this tool, making usage context only implicit.

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

get_hotspot_infoC

Get detailed info about a specific birding hotspot

ParametersJSON Schema
NameRequiredDescriptionDefault
locIdYeseBird hotspot location ID (e.g., L1234567)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are present, so the description carries full responsibility for behavioral disclosure. It only says 'Get detailed info' without explaining what info is returned, whether authentication is needed, or any side effects. This is insufficient for a tool that likely returns a complex data structure.

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 a single concise sentence that directly states the tool's purpose. It is efficient and front-loaded, though it lacks additional structural elements like usage context or examples.

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

Completeness2/5

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

With only one parameter and no output schema, the description should clarify what 'detailed info' includes. It does not, leaving the agent uncertain about the return value's structure and content. The description is too minimal to be fully contextual.

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 schema description covers the single parameter locId with an example (e.g., L1234567), so schema coverage is 100%. The description adds no extra parameter context, but the baseline of 3 is appropriate given the schema's completeness.

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 identifies the action ('Get detailed info') and resource ('a specific birding hotspot'). It is distinct from sibling tools like get_hotspots_in_region or get_nearby_hotspots, though it does not explicitly differentiate itself.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No guidance is provided on when to use this tool versus alternatives. The description only states what it does, with no mention of scenarios, prerequisites, or exclusions.

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

get_hotspot_observationsA

Get recent bird observations at a specific eBird hotspot by location ID. Use resolve_hotspot first if you only have a name.

ParametersJSON Schema
NameRequiredDescriptionDefault
backNoNumber of days back (1-30, default 14)
locIdYeseBird hotspot location ID (e.g., L1234567)
maxResultsNoMax results to return

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It states it returns observations but doesn't disclose defaults like the 14-day window (though the schema does) or response structure. It does clarify that the input is a hotspot location ID, which is useful context, but lacks details on pagination or sorting.

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 two sentences, with no wasted words. It includes both a purpose statement and a practical usage tip.

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?

Without an output schema, the description could hint at return shape, but for a 'get observations' tool this is likely self-evident. The description is complete enough for a simple read tool, though it doesn't explain what makes observations 'recent' beyond the 'back' parameter.

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 schema covers 100% of parameters with descriptions (locId, back, maxResults), so the description doesn't need to add param details. Baseline 3 is appropriate since the description adds no extra semantic info about parameters.

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 uses a specific verb ('Get') and resource ('recent bird observations') scoped to 'a specific eBird hotspot by location ID,' which clearly differentiates it from sibling tools like get_recent_observations or get_hotspot_info. The mention of resolve_hotspot further clarifies its scope.

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 directs users to 'Use resolve_hotspot first if you only have a name,' giving a clear prerequisite and an alternative tool. It doesn't enumerate exclusions relative to other observation tools, but the scope is clear enough for typical use.

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

get_hotspots_along_routeA

Find birding hotspots along a driving route between two points — perfect for road trip planning

ParametersJSON Schema
NameRequiredDescriptionDefault
endLatYesEnding latitude
endLngYesEnding longitude
startLatYesStarting latitude
startLngYesStarting longitude
hotspotRadiusNoRadius around waypoints to search for hotspots in km (default 10)
waypointIntervalNoDistance between route sample points in km (default 20)

TDQS

A3.6/5.0
Behavior2/5

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

No annotations are provided, so the description must disclose behavior. It only states the action without explaining how the route is sampled or what parameters control the search. Key details like waypoint interval and hotspot radius are left to the schema, and the response format is entirely undisclosed.

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 single, front-loaded sentence with no redundant wording. It clearly communicates the primary purpose and use case in minimal space.

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

Completeness2/5

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

No output schema or annotations exist, so the description must compensate. It does not explain return values, route processing logic, or limitations. It is sufficient for selection but inadequate for full invocation context.

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 provides complete descriptions for all six parameters, including units and defaults. The description adds no parameter-level meaning, but baseline is 3 due to 100% schema coverage.

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 clearly states the tool finds birding hotspots along a route between two points, with a specific verb ('find'), resource ('birding hotspots'), and scope ('along a driving route'). This distinguishes it from nearby/region hotspot tools like get_nearby_hotspots.

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 phrase 'perfect for road trip planning' implies the use case, but it does not explicitly contrast with alternatives or state when not to use it. The context is clear but lacks exclusions or mentions of sibling tools.

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

get_hotspots_in_regionA

Get birding hotspots in a region — great for trip planning

ParametersJSON Schema
NameRequiredDescriptionDefault
backNoOnly hotspots with observations in last N days
regionCodeYeseBird region code (e.g., US-NY, MX-ROO)

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral disclosure. It only states the basic get action and a use case, omitting details such as what data is returned, whether it is read-only, any rate limits, or prerequisites beyond the schema. This is insufficient for an agent to understand the tool's full behavior.

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 one sentence, front-loaded with the core action, and the trailing use-case phrase adds value without redundancy. Every word earns its place.

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

Completeness3/5

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

Given the tool's simplicity (2 params, 1 required) and no output schema, the description provides purpose and usage context, but lacks behavioral details like response format, sorting, or how it relates to other hotspot tools. It is minimally viable but not complete for an agent that needs to anticipate return values or limitations.

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?

Both parameters are fully documented in the schema, so the baseline is 3. The description adds no additional meaning beyond the schema, such as clarifying the expected format of regionCode or the effect of the 'back' parameter.

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 clearly states it 'Get birding hotspots in a region', specifying the verb, resource, and scope. This distinguishes it from sibling tools like get_nearby_hotspots (coordinate-based) and get_hotspot_info (details for a specific hotspot). The 'great for trip planning' reinforces the intended purpose.

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 phrase 'great for trip planning' provides a clear context for when to use this tool, but it does not explicitly mention alternatives or when not to use it (e.g., when working with coordinates rather than a region code). This is clear context without exclusions.

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

get_life_list_gaps_at_hotspotA

Find species at a specific hotspot that are NOT on your life list

ParametersJSON Schema
NameRequiredDescriptionDefault
backNoDays back for recent observations (1-30, default 14)
locIdYeseBird hotspot location ID (e.g., L1234567)
native_onlyNoIf true, exclude introduced/exotic species (default false)

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It fails to mention that results depend on recent observations within the 'back' time window, which is a critical behavioral constraint. It also does not explicitly state that this is a safe, read-only operation.

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 single, front-loaded sentence that conveys the core purpose without wasted words. It is concise and immediately understandable.

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

Completeness2/5

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

Given no output schema and no annotations, the description plus schema is incomplete. It fails to disclose that the 'back' parameter limits results to a recent observation window, which could lead an agent to expect all-time species records at the hotspot. This missing information is essential for correct usage.

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%, so the baseline is 3. The description does not add value beyond the schema's parameter descriptions; it only implies 'locId' via 'specific hotspot' and otherwise adds no additional parameter meaning.

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 uses a specific verb 'Find' with a clear resource ('species at a specific hotspot') and a distinct criterion ('NOT on your life list'). This unambiguously distinguishes it from siblings like get_life_list_gaps_nearby and get_recent_observations.

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 clearly states the intended context: discovering species missing from one's life list at a particular hotspot. However, it does not provide explicit exclusions or name alternative tools for comparison, so it lacks the 'when-not-to-use' guidance.

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

get_life_list_gaps_nearbyA

Find birds near you that you've NEVER seen — your potential lifers! Requires life list to be imported first.

ParametersJSON Schema
NameRequiredDescriptionDefault
latYesYour latitude
lngYesYour longitude
backNoDays back (1-30, default 14)
distNoSearch radius in km (0-50, default 25)
native_onlyNoIf true, exclude introduced/exotic species (default false)

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It does mention the prerequisite of having a life list imported, which is useful, but it does not discuss return format, error handling, or any limitations. This adds some value but lacks depth.

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 two short, engaging sentences with no fluff. It front-loads the core purpose immediately and adds the prerequisite in a clear, separate sentence. Every word earns its place.

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

Completeness3/5

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

The tool has 5 parameters and no output schema, so the description must compensate. It covers the core behavior and prerequisite, but does not explain what the response looks like or how optional parameters like 'back' or 'native_only' affect results. Given the schema covers parameters, this is adequate but not fully complete.

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%, so each parameter is already documented. The description does not add any parameter-specific meaning beyond the schema, but it does not need to. The baseline of 3 applies given the schema's completeness.

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 clearly states the tool's function: 'Find birds near you that you've NEVER seen' — a specific verb and resource that directly conveys the purpose. It differentiates from siblings like get_nearby_observations (all sightings) and get_life_list_gaps_at_hotspot (hotspot-specific) by emphasizing the 'near you' and 'never seen' aspects.

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 provides a clear usage context (finding potential lifers near a location) and includes an important prerequisite ('Requires life list to be imported first'). However, it does not explicitly mention alternatives or when not to use this tool, so it falls short of full guidelines.

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

get_life_list_statsA

Get summary statistics about your life list — total species count, breakdown by country, and breakdown by year of first observation

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior3/5

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

With no annotations, the description carries the behavioral burden. It clearly indicates a read-only operation ('Get') and what is returned, but it does not discuss limitations, data source, or performance implications. This is adequate but not rich.

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 single, front-loaded sentence with no filler. Every component contributes directly to understanding what the tool does, earning full marks for conciseness.

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 a no-parameter, no-output-schema tool, the description explains the key return values thoroughly. It could specify the output format or prerequisites (e.g., needing an imported life list), but the core information is complete enough for an agent.

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?

There are zero parameters, so the baseline is 4. The description adds meaning by enumerating the statistics returned (total, by country, by year), which goes beyond the empty schema and helps an agent understand output semantics.

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 uses a specific verb 'Get' and clearly identifies the resource ('your life list') along with the exact output statistics. It distinguishes itself from sibling tools like gap checkers by focusing on summary statistics.

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 tool should be used when aggregate life list statistics are needed, offering clear context. However, it does not explicitly name alternatives or state when not to use it, so it stops short of a 5.

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

get_nearby_hotspotsA

Find birding hotspots near a latitude/longitude — perfect for 'where should I bird near here'

ParametersJSON Schema
NameRequiredDescriptionDefault
latYesLatitude
lngYesLongitude
backNoOnly hotspots active in last N days
distNoSearch radius in km (0-50, default 25)

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It states the main behavior (find hotspots near coordinates) and implies a read-only search, but it does not mention result limits, sorting, default radius, or whether only currently active hotspots are included. The schema supplies some parameter semantics, but the description itself adds minimal behavioral context beyond the core action.

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 single sentence that front-loads the primary action and resource, then adds a practical use case. Every word earns its place; there is no fluff or repetition of schema details. It is appropriately sized for the tool's simplicity.

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 a simple geospatial search tool, the description provides enough context for agent selection and invocation: it states the input (latitude/longitude) and the user need. The schema covers all parameters, and no output schema exists, but a list-returning search tool is adequately described by 'find hotspots'. It could mention output format or distance defaults, but these are implied or captured in the schema.

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% for all four parameters, so the baseline is 3 even though the description does not mention parameters. The description adds no semantic value to the schema's already clear parameter descriptions for lat, lng, back, and dist. The coordinate context is implicit in the description, but the schema already defines each parameter.

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 'Find' and resource 'birding hotspots' near a latitude/longitude. This clearly distinguishes it from the region-based sibling 'get_hotspots_in_region' and from 'get_hotspot_info' which targets a specific hotspot. The quoted use case 'where should I bird near here' reinforces the tool's intent.

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 phrase 'near a latitude/longitude' together with 'perfect for' gives clear context for when to use this tool: coordinate-based proximity searches. It does not explicitly mention alternatives or exclusions, but the coordinate scoping effectively separates it from region-based tools. No misleading guidance is present.

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

get_nearby_notable_observationsA

Get rare/unusual observations near a location

ParametersJSON Schema
NameRequiredDescriptionDefault
latYesLatitude
lngYesLongitude
backNoDays back (1-30)
distNoSearch radius in km (0-50)

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the purpose and does not explain what constitutes 'rare/unusual', whether results are sorted by distance, if authentication is needed, or what response format to expect. This is a notable gap for a tool with zero annotation support.

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 single sentence of seven words, front-loaded with the verb and resource. Every word is meaningful, with no redundancy or filler, making it highly concise and well-structured.

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

Completeness2/5

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

Despite a relatively simple schema, the description is incomplete for an agent to confidently use this tool. It lacks usage guidelines, differentiation from similar sibling tools (e.g., get_nearby_observations, get_notable_observations), and behavioral context. The absence of an output schema further increases the need for description details that are not provided.

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%, with all four parameters (lat, lng, back, dist) having descriptions. The tool description adds no additional meaning beyond the schema, so the baseline score of 3 applies.

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 'Get rare/unusual observations near a location' clearly states a specific verb (get), resource (observations), and qualifiers (rare/unusual, near a location). This distinguishes it from siblings like get_nearby_observations (likely all observations) and get_notable_observations (possibly without location focus).

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 tool is for finding notable bird sightings in a specific area, offering clear context for use. However, it does not explicitly mention when not to use it or name alternative tools, so it falls short of a full when/when-not/alternatives explanation.

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

get_nearby_observationsB

Get recent observations near a latitude/longitude — useful for 'what birds are near me right now'

ParametersJSON Schema
NameRequiredDescriptionDefault
latYesLatitude
lngYesLongitude
backNoDays back (1-30)
distNoSearch radius in km (0-50, default 25)
hotspotNoOnly hotspot observations
maxResultsNoMax results

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of disclosing behavior. It does not mention read-only nature, authentication requirements, rate limits, result sorting, pagination, or potential side effects. The description only restates information already present in the tool name and schema.

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 single, front-loaded sentence that immediately communicates the purpose and a use case. There is zero fluff or repetition of schema details, making it highly efficient.

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

Completeness2/5

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

With no output schema and no annotations, the description should compensate by explaining return format, sorting, or other behavioral details. It only provides a high-level purpose and use case. The tool has 6 parameters and many siblings, so more context is needed to make it self-sufficient.

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% (all 6 parameters have descriptions), so baseline is 3. The description adds no parameter-specific semantics beyond what the schema already provides, which is acceptable but not additive.

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 clearly states the tool gets recent observations near a latitude/longitude, with a concrete use case ('what birds are near me right now'). This differentiates it from siblings like get_recent_observations (which likely lacks location filtering) and get_nearby_notable_observations (which adds a notable filter).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides a clear use case ('what birds are near me right now') which implies when to use it, but it does not explicitly mention alternatives or when not to use it. Given the large sibling list with overlapping tools, more explicit guidance would be beneficial.

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

get_nearest_observations_for_speciesB

Find the nearest recent observation of a specific species to a location

ParametersJSON Schema
NameRequiredDescriptionDefault
latYesLatitude
lngYesLongitude
backNoDays back (1-30)
distNoSearch radius in km
speciesCodeYeseBird species code

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden of behavioral transparency. It indicates a read operation ('Find') but does not disclose return format, default values for 'recent' or 'nearest' (back/dist), or any potential limits. The schema provides parameter definitions, but the description does not explain behavioral details such as sorting, number of results, or whether the operation is safe and idempotent.

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 single, front-loaded sentence with no filler or redundancy. It efficiently conveys the core functionality without wasting tokens.

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

Completeness2/5

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

With 5 parameters, no annotations, and no output schema, the description is too thin. It does not explain what the response looks like, how 'recent' and 'nearest' are defined (though back/dist parameters exist), or how to handle edge cases. The lack of alternative tool guidance also leaves the agent under-informed for tool selection.

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 has 100% description coverage for all 5 parameters, each with clear understanding (e.g., speciesCode, lat, lng, back, dist). The description adds no additional parameter-specific meaning beyond what the schema already provides, so it meets the baseline but does not exceed it.

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 clearly states the action ('Find'), the resource ('nearest recent observation of a specific species'), and the context ('to a location'). This distinguishes it from sibling tools like get_nearby_observations (general nearby observations) and get_observations_for_species (species-specific without location context).

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage for finding nearest recent observations of a species near a location, but does not explicitly state when to use this over alternatives or provide exclusions. Sibling tools like get_nearby_observations or get_observations_for_species are not mentioned, leaving the agent to infer the distinguishing use case from the wording.

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

get_notable_observationsB

Get rare/unusual bird observations in a region — great for finding rarities

ParametersJSON Schema
NameRequiredDescriptionDefault
backNoDays back (1-30)
maxResultsNoMax results
regionCodeYeseBird region code

TDQS

B3.4/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden of behavioral disclosure. It only gives a high-level purpose and does not mention whether results are limited to recent sightings, how 'notable' is determined, or any response format or pagination details.

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 single, well-structured sentence with no unnecessary words. It is front-loaded with the key action and resource, making it easy to parse.

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

Completeness2/5

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

With no output schema and no annotations, the description should provide more context. It fails to clarify the distinction from sibling tools like get_recent_observations or get_nearby_notable_observations, and does not explain limits, interpretation of results, or any additional behavior.

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 descriptions for all three parameters, so the baseline is 3. The tool description adds no extra meaning beyond the schema, such as how 'back' interacts with rarity or how maxResults is applied.

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 clearly states 'Get rare/unusual bird observations in a region' with a specific verb and resource, and the qualifier 'rare/unusual' distinguishes it from general observation tools like get_recent_observations. The phrase 'great for finding rarities' reinforces its unique value.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description offers a use case ('great for finding rarities') but does not explicitly compare to alternatives like get_nearby_notable_observations or explain when not to use it. The guidance is implied via the rarity focus rather than stated as a selection rule.

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

get_observation_frequencyB

Estimate how likely a species is to be seen at a location during a specific week — uses historic observation data as a proxy for detection probability

ParametersJSON Schema
NameRequiredDescriptionDefault
dayYesDay of month (1-31) — center of the week to check
monthYesMonth (1-12)
regionCodeYeseBird region code
speciesCodeYeseBird species code

TDQS

B3.2/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of explaining behavioral traits. It does add a useful caveat that the result is a proxy based on historic observation data, not a true detection probability. However, it does not disclose what the output looks like (e.g., a numeric probability, a rating, a category), nor does it mention edge cases, data coverage limitations, or whether the estimate is deterministic. This is a significant gap for a tool that produces a computed value.

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 single, tightly written sentence that front-loads the core purpose before adding a methodological qualifier. Every clause earns its place: the first clause states the action and scope, the second explains the underlying mechanism. There is no redundancy, fluff, or repetitive phrasing.

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

Completeness2/5

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

Given that there is no output schema, the description should compensate by explaining what the tool returns, but it remains silent on the output format. For a tool that estimates a probability or frequency, the agent needs to know whether the result is a float between 0 and 1, a percentage, a category, or something else. Additionally, the absence of usage guidance and any mention of data limitations makes the description incomplete for an agent to reliably invoke and interpret the tool.

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 has 100% description coverage for all four parameters, so the baseline is 3. The description adds no extra meaning beyond the schema; it mentions 'location' and 'species' which map to regionCode and speciesCode, and 'specific week' which maps to month/day, but it does not clarify formats, units, or relationships beyond what the schema already states. Therefore, no additional value is provided, but the schema is sufficient.

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 clearly states what the tool does: estimates how likely a species is to be seen at a location during a specific week. The verb 'estimate' is specific, the resource is observation frequency, and it includes the keyscopes (location, species, week). This distinguishes it from sibling tools that return raw observations or lists (e.g., get_historic_observations, get_recent_observations) by focusing on likelihood rather than actual records.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It does not mention any exclusions or conditions, nor does it reference sibling tools. For example, it does not say 'use this when you need detection probability rather than raw observations' or 'for exact historical counts, use get_historic_observations instead.' The usage context is entirely implied by the tool's purpose, which is not sufficient.

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

get_observations_for_speciesC

Get recent observations of a specific species in a region

ParametersJSON Schema
NameRequiredDescriptionDefault
backNoDays back (1-30)
maxResultsNoMax results
regionCodeYeseBird region code
speciesCodeYeseBird species code (e.g., baleag for Bald Eagle)

TDQS

C2.9/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It only says 'Get recent observations' which implies a read operation, but does not disclose details like what 'recent' means, whether results are limited, or any rate limits or authentication needs. The 'back' parameter in the schema adds some context, but the description itself is minimal.

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 a single efficient sentence with no wasted words. It is concise and easy to parse, though it omits some contextual details that could be helpful.

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

Completeness2/5

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

Given the tool has 4 parameters, no output schema, and no annotations, the description is too terse to be complete. It does not explain what the response looks like, the meaning of 'recent', or how this tool differs from the many similar sibling tools. The schema covers parameters, but the description lacks broader context.

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%, so the baseline is 3. The description adds no additional meaning beyond the schema, but the schema already provides clear descriptions for all four parameters, including an example for speciesCode. The description does not need to compensate.

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 gets recent observations for a specific species in a region, which is a specific verb+resource combination. It distinguishes from generic recent observations but does not explicitly differentiate from sibling tools like get_recent_observations or get_nearest_observations_for_species.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives, no conditions, and no exclusions. It merely states what the tool does without contextual usage cues.

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

get_recent_checklistsA

Get recent checklists submitted at a hotspot or in a region. Returns subId for each checklist so a specific one can be viewed with view_checklist. Use resolve_hotspot first if you only have a hotspot name.

ParametersJSON Schema
NameRequiredDescriptionDefault
latNoLatitude (use with lng to find checklists near a location)
lngNoLongitude (use with lat)
locIdNoeBird hotspot location ID (e.g., L1234567)
maxResultsNoMax results to return (default 10)
regionCodeNoeBird region code (e.g., US-NJ)

TDQS

A4.1/5.0
Behavior3/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It reveals that the tool returns subId and focuses on recent checklists, but does not clarify parameter combinations (hotspot vs region vs lat/lng) or the time window for 'recent.' Some useful behavior is disclosed, but significant gaps remain.

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 earning its place: it states the purpose, explains the return value, and gives a prerequisite. No redundant or extraneous information.

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

Completeness3/5

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

Given the tool has 5 optional parameters and no output schema, the description provides partial context: it mentions the subId return and prerequisite, but doesn't specify whether hotspot and region parameters are mutually exclusive or what the default time range is. This leaves some ambiguity for an agent deciding how to invoke the tool.

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 descriptions already cover all 5 parameters at 100%, so the baseline is 3. The tool description adds value by linking hotspot ID usage to resolve_hotspot, which helps with the locId parameter. It does not elaborate on other parameters but provides a practical hint.

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 clearly states the tool's function with a specific verb and resource: 'Get recent checklists submitted at a hotspot or in a region.' It also distinguishes itself from the many observation-focused sibling tools by mentioning it returns subId for use with view_checklist.

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?

Provides clear usage context by noting the return value can be used with view_checklist and advising to 'Use resolve_hotspot first if you only have a hotspot name.' This gives an explicit prerequisite and downstream use, though it does not explicitly mention alternatives like get_recent_observations.

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

get_recent_observationsC

Get recent bird observations in a region (e.g., US-NY, MX-ROO, CA-ON)

ParametersJSON Schema
NameRequiredDescriptionDefault
backNoNumber of days back (1-30, default 14)
hotspotNoOnly include observations from hotspots
maxResultsNoMax results to return
regionCodeYeseBird region code (e.g., US-NY, MX, BR-SP)

TDQS

C2.9/5.0
Behavior2/5

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

No annotations are provided, so the description carries the full burden. It only says 'get recent bird observations' without disclosing default time windows, filtering behavior, pagination, or return format. The schema provides parameter details, but the description itself adds no behavioral nuance beyond the basic action.

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 single clear sentence with no redundancy or filler. Every word contributes to understanding the tool's core function, making it appropriately concise.

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

Completeness2/5

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

The tool has no output schema, so the description should explain what the tool returns or provide contextual details. It does not clarify what 'recent' means as a default (the schema says back default 14, but the description omits it), nor does it mention any limitations or how it differs from sibling tools. Given the rich context of related observation tools, the description is incomplete.

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 for parameters is 100%, so the baseline is 3. The description adds some value by giving example region code formats (US-NY, MX-ROO, CA-ON) that clarify the expected format for regionCode. However, it does not add meaningful semantics for the other parameters, leaving that to the schema.

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 gets recent bird observations in a region, with specific verb ('get'), resource ('bird observations'), and scope ('in a region'). It provides concrete region code examples, which helps clarify the purpose. However, it does not explicitly differentiate from sibling tools like get_historic_observations or get_notable_observations, 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 Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

There is no guidance on when to use this tool versus alternatives. The description does not mention that this is for recent observations within a named region, as opposed to historic, notable, or nearby observations. With many sibling observation tools, the absence of usage context makes it harder for an agent to select correctly.

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

get_recording_countsA

Get a summary count of Xeno-canto recordings for a species broken down by quality grade (A=best through E=worst). Use this ONLY after you have already presented a species list to the user and they have confirmed they want recording gap data. Do not call this speculatively. Returns total count and per-grade breakdown. Ideal for identifying which species in a list are underrepresented and would most benefit from new recordings.

ParametersJSON Schema
NameRequiredDescriptionDefault
countryNoFilter to a specific country (e.g., "Mexico")
speciesNameYesScientific name of the species (e.g., 'Cardinalis cardinalis'). Common names will not work.

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It explains the output (total count and per-grade breakdown) and the non-speculative usage policy. However, it doesn't disclose potential edge cases like species not found, zero recordings, or rate limits, so transparency is partial but not contradicted.

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 concise (three sentences), front-loaded with the primary purpose, then usage guidance, and the use case. Every sentence contributes meaningful information without repetition or fluff.

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 a simple tool with 2 parameters and no output schema, the description sufficiently explains the return values (total count and per-grade breakdown) and the context for when to call it. It lacks fine-grained output format details, but the tool's simplicity makes this a minor gap.

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 both 'speciesName' and 'country' already described in the input schema. The description repeats the scientific name requirement but adds no new parameter semantics beyond what the schema provides, so the baseline score of 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 clearly states the tool returns a summary count of Xeno-canto recordings broken down by quality grade (A-E). It specifies the exact resource (Xeno-canto recordings) and the unique output format (per-grade breakdown), distinguishing it from sibling tools that handle observations or checklists.

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 provides explicit usage conditions: 'Use this ONLY after you have already presented a species list to the user and they have confirmed they want recording gap data' and 'Do not call this speculatively.' It does not name alternative tools, but the clear when/when-not instructions exceed the 'clear context' threshold, just missing explicit alternatives.

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

get_region_infoB

Get info about an eBird region — name, coordinates, bounds

ParametersJSON Schema
NameRequiredDescriptionDefault
regionCodeYeseBird region code (e.g., US-NY, MX)

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It implies a read-only operation ('Get'), but does not explicitly state this or any other behaviors such as error conditions, data formats, or permissions. The description adds minimal context beyond what the tool name already conveys.

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 single, front-loaded sentence that conveys the core purpose and key outputs in a compact manner. Every word earns its place, with no filler or redundancy.

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

Completeness3/5

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

There is no output schema, so the description should explain what the tool returns. It lists 'name, coordinates, bounds' but does not clarify the structure or format of these fields (e.g., coordinate system, bounds shape). For a simple tool with one parameter, this is adequate but not comprehensive.

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 schema has 100% coverage for the single parameter 'regionCode', so the baseline is 3. The description does not add any additional meaning to the parameter itself; it only lists output fields (name, coordinates, bounds) which are not parameters. As a result, the schema fully handles parameter semantics.

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's purpose: 'Get info about an eBird region — name, coordinates, bounds'. This provides a specific verb ('Get') and resource ('eBird region') along with the key output fields. It is distinct enough from siblings like get_hotspot_info (which is for hotspots) and get_sub_regions (for sub-regions), though it does not explicitly mention alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives. It simply states what it does without any context on prerequisites, exclusions, or preferred scenarios. There is no mention of when to choose get_region_info over resolve_region_code or get_sub_regions.

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

get_species_listA

Get all species ever recorded in a region — returns species codes

ParametersJSON Schema
NameRequiredDescriptionDefault
regionCodeYeseBird region code (e.g., US-NY, MX-ROO)

TDQS

A3.7/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral burden. It does indicate this is a read operation ('Get') and reveals the output format ('species codes'), but it does not mention potential large response size, pagination, permissions, or rate limits. It adds some useful context but falls short of rich behavioral disclosure.

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 single, compact sentence that front-loads the primary action and outcome. Every word is meaningful, with no redundancy or filler.

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 low complexity (one parameter, no output schema), the description sufficiently conveys the purpose and the return type. The statement 'returns species codes' provides enough output context for an agent to select and invoke this tool correctly.

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 provides a full description and example for the only parameter (regionCode), and the description adds no additional parameter-level meaning. With 100% schema coverage, a score of 3 is the appropriate baseline.

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 uses a specific verb ('Get'), resource ('all species ever recorded in a region'), and explicitly states the output ('returns species codes'). This clearly differentiates it from sibling tools like get_recent_observations or get_taxonomy by emphasizing the historical, comprehensive scope and the code-only return.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines2/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides no guidance on when to use this tool versus alternatives such as get_recent_observations or get_observations_for_species. It lacks any prerequisites, exclusions, or explicit use cases beyond restating the tool's basic function.

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

get_sub_regionsA

Get sub-regions of a parent region (e.g., states within a country, counties within a state)

ParametersJSON Schema
NameRequiredDescriptionDefault
regionCodeYesParent region code (e.g., 'MX' for Mexico, 'US-NY' for New York)
regionTypeYesType of sub-regions to list

TDQS

A3.6/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It only restates the function without elaborating on the nature of the returned data, potential ambiguity about whether sub-regions are immediate children or all descendants, or any edge cases. This adds little beyond the tool name.

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 single, front-loaded sentence that includes examples. Every word contributes to understanding the tool's purpose, with no redundancy or filler.

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

Completeness2/5

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

The tool is relatively simple, but with no output schema and sparse annotations, the description should clarify the return value and the relationship between regionCode and regionType. The current description leaves ambiguity about whether it returns a list of child region objects or codes, and how the hierarchy works, making it incomplete for an agent to confidently invoke the tool.

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 schema covers 100% of parameters with descriptions and examples, so the baseline is 3. The tool description does not add significant semantic detail beyond the schema, making it adequate but not enhanced.

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 clearly states the tool's function with a specific verb ('Get') and resource ('sub-regions of a parent region'), and provides concrete examples (states within a country, counties within a state). This effectively differentiates it from sibling tools like get_region_info, which likely returns details about a single region.

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 provides clear context on when to use the tool, supported by examples that illustrate typical use cases. However, it does not explicitly mention alternatives or when not to use it, but the context is sufficient for an agent to infer the primary scenario.

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

get_taxonomyA

Look up bird taxonomy — species codes, scientific names, families. Use 'species' param to look up specific species codes.

ParametersJSON Schema
NameRequiredDescriptionDefault
localeNoLocale for common names (e.g., 'en', 'es', 'fr')
speciesNoComma-separated species codes to look up (e.g., 'baleag,rewbla')

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description must carry the burden of behavioral disclosure. It states the tool is a lookup (implying a read operation) and lists the types of data returned (species codes, scientific names, families). However, it does not disclose behavior when the species parameter is omitted, nor does it mention any potential limitations or return format specifics.

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 concise and well-structured: two short sentences that immediately state the purpose and give a key usage note. There is no filler or redundant information.

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 a simple tool with two optional parameters and no output schema, the description covers the purpose and gives a usage hint. It does not specify the default behavior when no species is provided, but the schema and clear naming make the tool selectable and invocable. The absence of an output schema is somewhat mitigated by listing the content types returned.

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 fully describes both parameters (locale and species) with examples and descriptions, so the schema coverage is 100%. The description adds only a minor usage hint for the species parameter, providing no additional semantic meaning beyond what the schema already offers.

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 clearly states the tool's function: 'Look up bird taxonomy — species codes, scientific names, families.' It uses a specific verb ('look up') and resource ('bird taxonomy'), and this is distinct from sibling tools that focus on observations, hotspots, and life lists.

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 provides a clear usage instruction: 'Use ''species'' param to look up specific species codes.' This indicates when to use the species parameter, but it does not explicitly mention alternatives or exclusions relative to sibling tools. The context is clear enough for selecting this tool.

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

import_life_listA

Import your eBird life list from a CSV export. Go to https://ebird.org/downloadMyData to get the file. Provide either a file path or paste the CSV content directly.

ParametersJSON Schema
NameRequiredDescriptionDefault
csvPathNoAbsolute path to the eBird CSV export file (local mode)
csvContentNoRaw CSV content pasted directly (remote/cloud mode)

TDQS

A3.7/5.0
Behavior2/5

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

With no annotations, the description carries full responsibility for disclosing side effects. It only says 'Import' without revealing whether the operation replaces or merges the existing life list, requires authentication, or affects other data. This is a significant gap for a mutation tool, mirroring the deficiencies seen in the update_drive calibration example.

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 two sentences, front-loaded with the main purpose, and includes only essential information (source URL and input methods). No unnecessary words or repetition.

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

Completeness3/5

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

The description covers the data source and input options, partially leveraging the rich schema. However, it omits behavioral expectations such as what happens post-import, success/failure reporting, and the implicit constraint that exactly one of the two parameters should be provided. For a tool with no output schema and no annotations, this is adequate but incomplete.

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 schema already provides detailed descriptions for both parameters (csvPath and csvContent) including mode labels. The description's 'Provide either a file path or paste the CSV content directly' reinforces the either/or relationship but adds no new semantic value beyond what the schema states.

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 clearly states the action ('Import your eBird life list') with the specific source ('CSV export'). Including the URL for obtaining the file further clarifies the exact resource. This distinguishes the tool from sibling read-only tools like check_life_list or get_life_list_stats.

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 provides clear context: use when you have an eBird life list CSV, with explicit instructions to download from ebird.org/downloadMyData. It also explains the two input modes (file path vs. pasted content). However, it does not explicitly mention alternatives or when not to use it, though the uniqueness among siblings makes this less critical.

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

resolve_hotspotA

Find an eBird hotspot by common name. Returns locId, full name, coordinates, and a direct eBird URL. If multiple matches are found, returns them sorted by distance from your location.

ParametersJSON Schema
NameRequiredDescriptionDefault
latYesYour current latitude
lngYesYour current longitude
distNoSearch radius in km (default 50)
nameYesHotspot name to search for (e.g., 'Coral Avenue' or 'Coral Avenue Cape May Point')

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the behavioral disclosure burden. It clearly reveals that the tool returns specific fields (locId, full name, coordinates, URL) and that multiple matches are sorted by distance. It does not cover edge cases like no-match handling or exact vs. fuzzy matching, but the core behavior is adequately disclosed for a read-only search tool.

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 two sentences, front-loaded with the verb and resource, and contains no filler. Every sentence adds meaningful information about purpose or behavior, making it highly efficient and easy to parse.

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 a simple lookup tool with 4 parameters and no output schema, the description covers the essential context: what it does, what it returns, and how multiple results are ordered. It omits no-match behavior and pagination details, but these are not critical for a basic search tool, and the description is sufficiently complete for an agent to use correctly.

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 coverage is 100%, so the baseline is 3. The description adds value by explaining that 'name' is a common name (not an exact ID) and that lat/lng are used for sorting by distance, which clarifies their role beyond just 'current latitude/longitude'. However, it does not add information about the 'dist' parameter, which is already well documented in 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 uses a specific verb ('Find') and resource ('eBird hotspot by common name'), clearly distinguishing it from sibling tools like get_nearby_hotspots. It also lists the return fields (locId, full name, coordinates, URL) and the sorting behavior, making the tool's function unmistakable.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies when to use the tool (when you have a common name and need hotspot details) and that lat/lng are used for sorting matches. However, it does not explicitly contrast with alternatives (e.g., get_nearby_hotspots or get_hotspot_info) or state when not to use it, leaving the usage context somewhat implicit.

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

resolve_region_codeA

Fuzzy-match a place name to an eBird region code (e.g., 'Quintana Roo' → MX-ROO, 'New York' → US-NY)

ParametersJSON Schema
NameRequiredDescriptionDefault
placeNameYesPlace name to look up (e.g., 'Quintana Roo', 'Ontario', 'Brazil')

TDQS

A3.5/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of disclosing behavior. It mentions 'fuzzy-match', which hints at tolerant matching, but does not explain what happens on no match, multiple matches, or ambiguous names, nor does it describe the exact output structure or return value. Significant behavioral gaps remain.

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 single, well-structured sentence with concrete examples. It is front-loaded with the action and resource, contains zero filler, and every word contributes meaning.

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

Completeness3/5

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

This is a simple one-parameter lookup tool with no output schema. The description conveys the input format and shows example outputs, but does not explicitly state the return type or behavior on failure (e.g., what if no region matches?). Given the low complexity, it is minimally adequate but lacks a few important details.

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%, with the placeName parameter already documented clearly with examples. The tool description adds the concept of fuzzy matching but does not add new parameter-level meaning beyond the schema's existing explanation. 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 clearly states the tool's function: fuzzy-matching a place name to an eBird region code, with concrete examples (e.g., 'Quintana Roo' → MX-ROO). This specific verb+resource distinguishes it from sibling tools like resolve_hotspot, which resolves to a different entity type.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The examples imply the use case (converting a place name to a region code for eBird queries), but the description does not explicitly state when to use this tool versus alternatives like resolve_hotspot, or any preconditions/edge cases. Usage is inferred rather than directly guided.

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

view_checklistA

View the full species list for a specific eBird checklist. The subId can come from get_recent_checklists or directly from observation results which already include subId in their payload — in that case call this directly with no extra queries needed. WARNING: Never call this in a loop or batch across multiple subIds. One call per explicit user request only.

ParametersJSON Schema
NameRequiredDescriptionDefault
subIdYeseBird checklist submission ID (e.g., S12345678)

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It adds essential context about the batching/looping restriction and the source of subId, which are beyond the schema. It stops short of stating read-only behavior explicitly, but 'View' implies it, so the added warning earns a solid score.

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 purposeful: a clear definition, a source/usage hint, and a critical warning. No redundancy or filler, and the warning is visually emphasized with caps for attention. Front-loaded with the core purpose.

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 simple one-parameter tool with no output schema, the description covers the essential information: what it does, where the input comes from, and a critical constraint. The return content is implied by 'full species list', and no further details seem necessary for correct invocation.

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 fully describes subId with an example, so baseline is 3. The description enhances it by explaining where to obtain subId (from get_recent_checklists or observation payloads) and when to skip extra queries, adding practical meaning beyond the schema's basic type definition.

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 clearly states 'View the full species list for a specific eBird checklist' with a specific verb and resource. It distinguishes itself from sibling observation tools by focusing on a checklist's species list, not individual observations or region data.

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?

Explicitly explains when to use: when you have a subId from get_recent_checklists or observation results. It even directs to 'call this directly with no extra queries needed' and includes a strong warning against looping/batching, providing clear usage constraints and alternatives.

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. Dates show when Glama detected each change.

  1. 28 tool updatesv1.0.0
    • First observedcheck_life_list
    • First observedenrich_species_list
    • First observedget_historic_observations
    • First observedget_hotspot_info
    • First observedget_hotspot_observations
    • First observedget_hotspots_along_route
    • First observedget_hotspots_in_region
    • First observedget_life_list_gaps_at_hotspot
    • First observedget_life_list_gaps_nearby
    • First observedget_life_list_stats
    • First observedget_nearby_hotspots
    • First observedget_nearby_notable_observations
    • First observedget_nearby_observations
    • First observedget_nearest_observations_for_species
    • First observedget_notable_observations
    • First observedget_observation_frequency
    • First observedget_observations_for_species
    • First observedget_recent_checklists
    • First observedget_recent_observations
    • First observedget_recording_counts
    • First observedget_region_info
    • First observedget_species_list
    • First observedget_sub_regions
    • First observedget_taxonomy
    • First observedimport_life_list
    • First observedresolve_hotspot
    • First observedresolve_region_code
    • First observedview_checklist

TDQS

A3.5/5.0
Disambiguation4/5

Tools have mostly distinct purposes: observations are split by region, location, species, and hotspot; life list gaps separate nearby vs hotspot. Some subtle overlap exists between get_recent_observations and get_hotspot_observations, but descriptions clarify which to use.

Naming Consistency4/5

The majority follow a get_<modifier>_<resource> pattern, but there are exceptions like import_life_list, resolve_hotspot, and enrich_species_list. Despite the verb variation, all names are snake_case and readable, making the set mostly consistent.

Tool Count2/5

At 28 tools, this exceeds the 25-tool threshold considered 'too many' in the rubric. While each tool serves a specific niche, the sheer number may overwhelm agents and suggests some consolidation could be beneficial.

Completeness5/5

The tool surface covers the full birding workflow: observations, hotspots, regions, life lists, checklists, frequency, and recordings. No obvious gaps for the domain, and the inclusion of life-list gap analysis and recording enrichment is thorough.

Maintenance

ActivityInactive
ResponsivenessResponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A Model Context Protocol server that allows AI assistants to access bird observation data, hotspots, and taxonomy information from eBird.
    10
    7
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Integrates the eBird API with Claude to query bird observation data, including recent sightings, rare bird reports, contributor statistics, hotspot locations, and taxonomy information through natural language.
    5
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    SongSage is a Model Context Protocol (MCP) server that connects BirdNET-Analyzer-Sierra with Claude Desktop, enabling natural language interaction with bioacoustic data for wildlife monitoring and conservation research.
    4
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/woodcreeper/birding-buddy-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server