birdnet-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@birdnet-mcpWhat birds were heard this morning?"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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(checkhttp://your-host:8080/api/v2/health)
Related MCP server: eBird MCP Server
Configuration
Variable | Required | Description |
| yes | Base URL of the instance, e.g. |
| 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-mcpClaude 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 |
| Latest detections |
| Detections for a day, hour window, or species |
| Historical search by species, date range, confidence, verification status, and time of day |
| Full detail for one detection, with audio and spectrogram URLs |
| Per-species counts, first/last heard, and average confidence |
| Species first detected within a recent period |
| Detection counts per day, or per hour for one day |
| Rarity and taxonomy for a scientific name |
| 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 # lintTo exercise the server against a real instance:
BIRDNET_GO_URL=http://birdnet.local:8080 npx @modelcontextprotocol/inspector uv run birdnet-mcpTroubleshooting
"Cannot reach BirdNET-Go" — verify
BIRDNET_GO_URLand 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 toolsget_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.
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ||
| species | No | ||
| end_date | No | ||
| start_date | No | ||
| granularity | No | daily |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| detection_id | Yes | ||
| include_media_urls | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| date | No | ||
| hour | No | ||
| limit | No | ||
| offset | No | ||
| species | No | ||
| duration | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| days | No | ||
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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).
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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".
| Name | Required | Description | Default |
|---|---|---|---|
| scientific_name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| end_date | No | ||
| start_date | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| page | No | ||
| sort_by | No | date_desc | |
| species | No | ||
| date_end | No | ||
| date_start | No | ||
| time_of_day | No | any | |
| confidence_max | No | ||
| confidence_min | No | ||
| verified_status | No | any |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
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.
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.
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.
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.
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.
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
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.
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.
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.
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
Related MCP Connectors
Provides access to Civic Plus - See Click Fix, allowing you to interact with your data via an LLM.…
Gateway between LLM agents and world data through eight tools and a bundled endpoint catalog.
Connect AI clients to biomedical data and tools.
Query and audit AppSheet apps in natural language via Knotrik's pre-scanned definitions.
Related MCP Servers
- AlicenseAqualityDmaintenanceCross-reference your BirdNET-Pi data with eBird observations using natural language3121MIT
- AlicenseNot gradedqualityDmaintenanceIntegrates 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.5MIT
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to query and retrieve biodiversity data from the Global Biodiversity Information Facility (GBIF), including species, occurrences, datasets, and literature.
- AlicenseNot gradedqualityCmaintenanceEnables querying biodiversity data from the Global Biodiversity Information Facility (GBIF) API v1, supporting species occurrence searches and other GBIF endpoints through natural language.5MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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