Skip to main content
Glama

birdnet-mcp

An MCP server that lets LLM clients such as Claude query a BirdNET-Go bird-detection instance. It runs over stdio, talks to BirdNET-Go's /api/v2 HTTP API, and never writes anything — no database access, no mutations.

Ask questions like "what birds were heard this morning?", "when did the first Wood Thrush of the year arrive?", or "which species are most active at dawn?" and let the client compose answers from the tools below.

Requirements

  • A BirdNET-Go instance recent enough to serve /api/v2 (check http://your-host:8080/api/v2/health)

  • uv

Related MCP server: eBird MCP Server

Configuration

Variable

Required

Description

BIRDNET_GO_URL

yes

Base URL of the instance, e.g. http://birdnet.local:8080

BIRDNET_GO_TIMEOUT

no

HTTP timeout in seconds (default 10)

The server sends no credentials. BirdNET-Go's read endpoints are public by default, and its bearer tokens expire hourly, so there is no durable secret to configure. If your instance has authentication or private mode enabled, allow your network in its config via security.allowsubnetbypass.

Install

Claude Code

claude mcp add birdnet -e BIRDNET_GO_URL=http://birdnet.local:8080 \
  -- uv run --directory /path/to/birdnet-mcp birdnet-mcp

Claude Desktop

Add to claude_desktop_config.json:

{
  "mcpServers": {
    "birdnet": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/birdnet-mcp", "birdnet-mcp"],
      "env": { "BIRDNET_GO_URL": "http://birdnet.local:8080" }
    }
  }
}

Tools

Tool

Purpose

get_recent_detections

Latest detections

get_detections

Detections for a day, hour window, or species

search_detections

Historical search by species, date range, confidence, verification status, and time of day

get_detection

Full detail for one detection, with audio and spectrogram URLs

get_species_summary

Per-species counts, first/last heard, and average confidence

get_new_species

Species first detected within a recent period

get_activity_pattern

Detection counts per day, or per hour for one day

get_species_info

Rarity and taxonomy for a scientific name

get_instance_status

Reachability and health of the instance

Dates use YYYY-MM-DD. Analytics are calendar-day granularity — a BirdNET-Go API limitation.

Development

uv sync            # install dependencies
uv run pytest      # run tests
uv run ruff check  # lint

To exercise the server against a real instance:

BIRDNET_GO_URL=http://birdnet.local:8080 npx @modelcontextprotocol/inspector uv run birdnet-mcp

Troubleshooting

  • "Cannot reach BirdNET-Go" — verify BIRDNET_GO_URL and that the web UI loads from the machine running the MCP server.

  • HTTP 401/403 — your instance has authentication or private mode enabled; allow your network via security.allowsubnetbypass.

  • Timeouts — raise BIRDNET_GO_TIMEOUT.

  • "Today" looks off by a day — the server computes today's date in its own local timezone; a remote instance in another timezone may disagree near midnight.

Available Tools

9 tools
get_activity_patternA

Temporal detection activity: counts per day over a date range, or per hour for one day.

Analytics are calendar-day granularity; hourly data is available per single day only.

Args:
    granularity: "daily" (counts per day over start_date..end_date) or
        "hourly" (24 hourly counts; requires date and species).
    species: Species name (required for hourly, optional filter for daily).
    date: Day for hourly granularity, YYYY-MM-DD.
    start_date: Range start for daily granularity, YYYY-MM-DD.
    end_date: Range end for daily granularity, YYYY-MM-DD.
ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
speciesNo
end_dateNo
start_dateNo
granularityNodaily

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.6/5.0
Behavior4/5

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

No annotations are provided, so the description carries the behavioral disclosure burden. It clearly reveals that results are aggregated counts, that analytics follow calendar-day granularity, and that hourly granularity is limited to one day. It does not mention timezone handling or limits, but these are minor for this read-style analytics 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 opening sentence immediately conveys the tool's purpose and output shape, and the Args section is compact, parallel, and free of filler. Every line adds meaningful guidance.

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?

All five parameters are semantically covered, the two modes are fully described, and the output schema handles return-value details. An agent has enough information to select and invoke the tool correctly without additional lookup.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must compensate, and it does thoroughly. It defines each granularity value, explains which arguments apply to which mode, states that species is required for hourly but optional for daily, and gives the YYYY-MM-DD date format.

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 states a specific operation and resource: temporal detection activity, returning counts per day over a date range or per hour for one day. This clearly distinguishes it from sibling tools that return individual detections or species summaries, even though no sibling is named.

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?

It gives clear usage context by explaining the two granularity modes and their constraints, such as hourly data being available for a single day only and requiring date and species. It does not explicitly cite alternative tools, but the nature of the output makes the appropriate scenario obvious.

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

get_detectionA

Get full details for a single detection, including weather context if recorded.

Args:
    detection_id: The detection's numeric id.
    include_media_urls: Include URLs for the audio clip and spectrogram (URLs only, not bytes).
ParametersJSON Schema
NameRequiredDescriptionDefault
detection_idYes
include_media_urlsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/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 behavioral disclosure burden. It usefully reveals that weather context is conditional ('if recorded') and that media URLs are returned as URLs only, not bytes. It doesn't mention read-only behavior, auth, or error conditions, but the getter nature and output schema mitigate that gap.

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 purpose is front-loaded in a single sentence, followed by a compact Args list. Every sentence adds value, with no redundancy or padding.

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?

With only two parameters, an output schema, and a clearly singular purpose, the description is sufficient. The weather-context caveat prevents false expectations, and the 'single detection' wording makes the contrast with sibling tools evident.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, and the description fully compensates: detection_id is explained as 'the detection's numeric id,' and include_media_urls is clarified as returning URLs for the audio clip and spectrogram, explicitly excluding bytes. This adds real meaning beyond the bare schema types.

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?

States specific verb 'Get' and object 'full details for a single detection,' including weather context. The singular scope clearly distinguishes it from sibling plural tools like get_detections and search_detections.

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 'for a single detection' provides clear context for when to use this tool versus the plural/list siblings. It doesn't explicitly name alternatives or exclusion conditions, but the singleton scope is a strong situational pointer.

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

get_detectionsA

Get bird detections for a specific day, optionally narrowed to an hour window or species.

Args:
    date: Day to query, YYYY-MM-DD (default: today in the MCP server's local timezone).
    hour: Starting hour 0-23 to narrow to an hourly window (optional).
    duration: Window length in hours 1-24 when hour is set (default 1).
    species: Filter to a species (common or scientific name, optional).
    limit: Max detections to return (1-100, default 25).
    offset: Pagination offset (default 0).
ParametersJSON Schema
NameRequiredDescriptionDefault
dateNo
hourNo
limitNo
offsetNo
speciesNo
durationNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.4/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 behavioral disclosure burden. It does reveal that the date defaults to today in the server's local timezone and documents limit bounds, but it does not mention ordering, timezone interpretation for the hour window, or any other caveats. For a read-only 'get' 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 front-loaded with a one-sentence summary followed by a compact bulleted argument list. Every line provides needed semantics such as formats, defaults, and ranges. There is no fluff or redundant information.

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?

With six parameters and no annotations, the description covers all parameter semantics, defaults, validation bounds, and even timezone context for the default date. Since an output schema exists, the return shape is already structured, so nothing needed to call the tool correctly is missing.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, but the description fully compensates by explaining every parameter: date format and default, hour range, duration window, species name forms, limit range with default, and offset semantics. This goes well beyond the bare 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 clearly states a specific verb and resource: 'Get bird detections for a specific day.' It also distinguishes itself from siblings by emphasizing 'specific day' and optional filters, which sets it apart from get_recent_detections, get_detection, and search_detections without requiring schema inspection.

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 querying detections on a particular day with optional narrowing by hour, species, and pagination. It does not explicitly name alternatives or state when not to use it, but the context is clear enough for an agent to pick the right tool among siblings.

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

get_instance_statusA

Check whether the BirdNET-Go instance is reachable and report its health.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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, and it does disclose that the tool tests reachability and reports health. However, it does not describe what 'health' consists of, whether it pings a remote service, or how it behaves when the instance is unreachable. The output schema may cover return values, but behavioral expectations beyond that are unspecified.

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?

A single, direct, front-loaded sentence with no filler. Every word contributes to explaining the tool's purpose and behavior.

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 zero-parameter status-check tool with an output schema present, the description is largely complete for selection and invocation. It could add a little more about what 'health' entails or how to interpret the result, but the low complexity and existing output schema moderate that need.

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 schema imposes no interpretation burden. The description confirms the tool performs a no-input health check, which is sufficient given the baseline of 4 for parameterless tools.

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 states a specific verb ('Check') and a clear resource ('BirdNET-Go instance'), and defines the outcome as reporting health. It is clearly distinct from the sibling tools, which all operate on detections or species rather than instance status.

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 a health-check use case, and the sibling tools' detection/species focus makes it obvious this is the odd one out, but no explicit when-to-use or when-not-to-use guidance is provided. An agent can infer usage but is not told, for instance, to run this before issuing detection queries.

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

get_new_speciesA

Species detected for the first time ever within the recent period ("anything new lately?").

Args:
    days: Look-back window in days (default 30).
    limit: Max species to return (1-100, default 25).
ParametersJSON Schema
NameRequiredDescriptionDefault
daysNo
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

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 explaining behavior; it does clarify that 'new' means globally first-ever detection, which is important. It does not disclose other behavioral traits such as sort order, computational cost, or whether species with no recent detections are excluded, though the output schema may cover the return shape.

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 compact, with the semantic intent front-loaded and the argument documentation precise and easy to scan. Every sentence earns its place without unnecessary filler.

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 two-parameter, zero-required lookup tool with an output schema available, the definition is nearly complete: purpose, look-back window, and limit constraints are all present. The only meaningful gap is an explicit pointer to sibling tools for disambiguation, but that is not essential for executing the call correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description fully compensates: 'days' is defined as the look-back window with default 30, and 'limit' as max species to return with range 1-100 and default 25. This adds real meaning beyond the raw integer types in the input 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 defines the resource (species) and the unique criterion ('detected for the first time ever') with a temporal window, making it clearly distinct from sibling tools like get_recent_detections. The quoted user intent 'anything new lately?' reinforces the function's purpose. Though it lacks an explicit imperative verb, the tool name and phrasing make the action 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 quoted use case ('anything new lately?') provides a clear trigger for when to choose this tool. However, the description does not explicitly state when not to use it or name alternatives such as get_recent_detections for ordinary recent detections, leaving the contrast only implied.

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

get_recent_detectionsA

Get the most recent bird detections ("what's been heard lately?").

Args:
    limit: Number of detections to return (1-50, default 15).
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.1/5.0
Behavior3/5

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

No annotations are provided, so the description bears the behavioral disclosure burden. It conveys that the operation is a read, that results are ordered by recency, and that the limit has a range of 1-50. However, it does not mention time-window semantics, pagination, empty-result behavior, or any permissions/rate limits, leaving partial transparency.

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 compact and front-loaded with the purpose, followed by a single essential parameter explanation. Every sentence earns its place; there is no filler or redundant explanation.

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 read-only tool with one optional parameter and an output schema, the description covers the core semantics: what is returned, the recency ordering, and the limit's range/default. It could more explicitly state how recency is determined and how this tool differs from siblings, but it is largely complete for correct invocation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single parameter is fully explained in the description: 'Number of detections to return (1-50, default 15).' This adds meaning beyond the input schema, which only provides type and default. The range and semantic intent are exactly what an agent needs.

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 names a precise action and resource: 'Get the most recent bird detections.' The plain-language cue 'what's been heard lately?' reinforces the recency focus and clearly separates this tool from siblings like get_detections (generic list) and search_detections (search).

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 natural use case—retrieving the latest detections—but does not explicitly explain when to choose this over get_detections or search_detections, nor does it state exclusions or prerequisites. Usage guidance is present only by implication.

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

get_species_infoA

Species details (rarity for this location) and taxonomy for a scientific name.

Args:
    scientific_name: Full scientific name including genus and species,
        e.g. "Cardinalis cardinalis".
ParametersJSON Schema
NameRequiredDescriptionDefault
scientific_nameYes

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.6/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 usefully reveals that rarity is location-specific and that taxonomy is included, but it does not explain what 'this location' refers to, how rarity is determined, or any error behavior. It is not misleading, but it is limited.

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 compact and front-loaded: the first sentence states the tool's purpose, and the Args block documents the only parameter without unnecessary detail. Every sentence 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 phrase 'rarity for this location' is ambiguous because no location context is defined anywhere in the description or schema. While the output schema covers return structure, an agent may not know what location is being referenced, and there is no usage guidance to disambiguate. Adequate for a simple single-parameter lookup but with a clear gap.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema only specifies a string type with zero description coverage. The tool description fully compensates by explaining that scientific_name must be the full genus and species and provides a concrete example ('Cardinalis cardinalis'). This gives the agent everything needed to construct the parameter correctly.

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 that the tool returns species details (rarity for a location) and taxonomy for a scientific name. It conveys the resource and purpose, though it lacks an explicit verb like 'get' or 'retrieve' and does not explicitly distinguish itself from the similar sibling tool get_species_summary.

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 given about when to use this tool instead of its siblings, nor any exclusions or alternatives. The only implied condition is that a scientific name is required, which is already clear from the parameter schema.

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

get_species_summaryA

Per-species statistics: detection counts, first/last heard, average confidence.

Args:
    start_date: Earliest date, YYYY-MM-DD (optional; omit for all time).
    end_date: Latest date, YYYY-MM-DD (optional).
    limit: Max species to return (1-200, default 50), ordered by detection count.
ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
end_dateNo
start_dateNo

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A3.9/5.0
Behavior4/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 does well by specifying the output content, the ordering by detection count, the default limit, and the semantics of omitting dates. It does not mention error behavior or the absence of side effects, but for a read-only summary tool it is reasonably transparent.

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 compact, front-loaded with the core purpose, and uses a clear args section. Every sentence adds useful information with no filler or repetition.

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 optional-parameter query tool with an output schema, the description covers the essential call semantics: what the result contains, how dates and limit behave, and the ordering. It lacks explicit guidance on edge cases like empty results, but the output schema helps fill structural detail, so overall it is sufficiently complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema provides only titles and defaults with no descriptions, so the description must compensate. It does so fully: start_date and end_date are explained with format and all-time behavior, and limit is given a numeric range, default, and ordering effect. This is comprehensive parameter documentation.

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 tool as returning per-species statistics with concrete fields (detection counts, first/last heard, average confidence), making its function specific. It does not explicitly differentiate from siblings like get_species_info or get_detections, but the aggregated-statistics framing is distinct enough.

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 gives no guidance on when to use this tool versus sibling tools such as get_detections, search_detections, or get_species_info. Parameter semantics are covered, but the contextual decision of when to choose this summary view is left entirely to the agent.

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

search_detectionsA

Search historical detections with flexible filters. Results are paginated 20 per page.

Args:
    species: Species filter (common or scientific name; empty = all species).
    date_start: Earliest date, YYYY-MM-DD (empty = no lower bound).
    date_end: Latest date, YYYY-MM-DD (empty = no upper bound).
    confidence_min: Minimum confidence 0.0-1.0.
    confidence_max: Maximum confidence 0.0-1.0.
    verified_status: One of: any, correct, unverified, falsePositive.
    time_of_day: One of: any, day, night, sunrise, sunset.
    page: 1-based page number.
    sort_by: One of: date_desc, date_asc, species_asc, species_desc, confidence_desc.
ParametersJSON Schema
NameRequiredDescriptionDefault
pageNo
sort_byNodate_desc
speciesNo
date_endNo
date_startNo
time_of_dayNoany
confidence_maxNo
confidence_minNo
verified_statusNoany

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/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 full burden and does it well: it discloses pagination ('20 per page'), date format expectations, empty-value behavior for filters, and explicit allowed enum values. Minor omissions like response ordering or max page count are acceptable given the output schema covers return shape.

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 front-loaded with a one-sentence purpose, then uses a clean Arg list that documents every parameter without redundancy. Each line earns its place and the structure makes the tool's behavior easy to scan.

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 9-parameter search tool with no annotations and no schema-level descriptions, the description covers everything needed to invoke it correctly: all parameters, their allowed values, defaults, date formats, and pagination behavior. The output schema handles return-value documentation, so no gap remains.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, so the description must fully compensate, and it does. Every parameter is documented with meaningful semantics: date format, bounds, confidence range, enumerated allowed values, 1-based page numbering, and sort options. This goes far beyond the schema's bare titles and defaults.

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?

Description names a specific verb+resource: 'Search historical detections with flexible filters.' It clearly conveys the tool's core function and the filtering/pagination focus. However, it does not distinguish itself from similarly named siblings like get_detections or get_recent_detections.

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 implies use for filtered historical searches, but it never states when to choose this tool over alternatives such as get_recent_detections or get_detections. There are no explicit usage conditions, exclusions, or sibling comparisons.

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

TDQS

A4.2/5.0
Disambiguation4/5

The detection-fetching tools (get_recent_detections, get_detections, search_detections) overlap somewhat, but their scopes are clearly separated by time window, filters, and pagination. Species statistics, new species, activity patterns, status, and taxonomy tools are all distinct.

Naming Consistency5/5

All tools use lowercase snake_case with a consistent get_/search_ verb prefix followed by a clear noun. Singular and plural forms like get_detection and get_detections are predictable, and search_detections fits the same pattern.

Tool Count5/5

Nine tools cover the server's read-only bird-detection analytics scope without redundancy. Each tool contributes a distinct query type, and the count fits comfortably within a well-scoped tool set.

Completeness5/5

The surface covers recent detections, single-detection detail, day/hour filtering, flexible historical search, species summaries, new species discovery, temporal activity, taxonomy, and instance health. For a read-only monitoring and analytics server, no significant workflow dead ends are apparent.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • 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
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables AI assistants to query and retrieve biodiversity data from the Global Biodiversity Information Facility (GBIF), including species, occurrences, datasets, and literature.
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables querying biodiversity data from the Global Biodiversity Information Facility (GBIF) API v1, supporting species occurrence searches and other GBIF endpoints through natural language.
    5
    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/jbeker/birdnet-mcp'

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