Birding Planner
Birding Planner helps birders plan trips and get migration insights by combining eBird hotspot data, BirdCast forecasts, NWS weather, and iNaturalist verification. It defaults to Cincinnati, OH but works for any region.
Plan a birding trip – Find and rank nearby hotspots by recent species diversity, notable sightings, and migration activity.
Get migration forecasts – View BirdCast data on last night's traffic, expected species, and seasonal totals (available Mar–Jun and Aug–Nov).
Explore hotspot details – See recent species, notable sightings, and seasonal frequency for a specific eBird hotspot.
Compare hotspots – Side-by-side comparison of unique/shared species, notable sightings, and checklist activity.
Find a species – Locate where a specific bird has been seen recently near a location, sorted by most recent observation.
Find the best day to bird – Get an optimal day recommendation within a date range based on migration, weather, and historical frequency; supports targeting a specific species.
Get birding weather – NWS forecasts interpreted for birding, including overnight wind (key migration predictor) and morning conditions.
Verify a sighting – Cross-reference an eBird report against iNaturalist photo-verified observations for a confidence level and research-grade record count.
Calculate your birding window – Get sunrise, civil twilight, and recommended arrival time for a location and date, with optional temperature-based activity cutoff.
Check species frequency – Look up a species' historical peak week, current probability, and phenology status (early/on-time/late).
Sends daily briefing emails about birding migration conditions via Resend's email API.
Click on "Deploy 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., "@Birding Planner Plan a birding trip near Cincinnati this weekend"
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.
Birding Planner
MCP server + daily / on-demand email briefing for migration monitoring. Defaults to Cincinnati, configurable for any region.
Full specification: SPEC.md. Tests: TESTING.md. Email rendering rules: routine-prompt.md.
MCP Server Tools
All 11 tools, used interactively from Claude Desktop:
Tool | What it does |
| Ranks nearby hotspots by recent species count + migration activity |
| BirdCast radar data + NWS weather interpretation |
| Recent species and notable sightings at a single hotspot |
| Side-by-side species comparison with iNaturalist verification |
| Where a species has been seen recently near a location |
| Recommends the best day in a date range using migration + weather |
| NWS overnight/morning forecast interpreted for migration prediction |
| Cross-references eBird reports against iNaturalist photo-verified obs |
| Sunrise, civil twilight, and recommended arrival time |
| Historical peak week and current phenology status via BirdCast |
| Discovery report for a travel destination: target species, top hotspots, birding window. Works weeks or months ahead using historical bar-chart data. |
Per-tool details (inputs/outputs, edge cases) are in SPEC §3.5; each tool
lives in src/handlers/<name>.js.
Related MCP server: SHEARLINE
Setup
1. API keys
eBird API key (required): https://ebird.org/api/keygen — free
BirdCast API key (required): contact https://birdcast.info
Resend API key (for email): https://resend.com — 3,000 emails/month free
Anthropic API key (for on-demand briefing only): console.anthropic.com
2. Environment
cp .env.example .env # then fill in keysEvery env var is documented in SPEC §6.2.
3. Install dependencies
npm installajv is required for schema validation; sanitize-html for email
delivery. Both ship in package.json dependencies — no extra steps.
4. Claude Desktop integration
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"ebird-birding-planner": {
"command": "node",
"args": ["/absolute/path/to/ebird-birding-planner/src/index.js"],
"env": {
"EBIRD_API_KEY": "your_key_here",
"BIRDCAST_API_KEY": "your_key_here",
"EBIRD_LIFE_LIST_CSV": "/path/to/MyEBirdData.csv"
}
}
}
}Daily briefing (Anthropic Routine)
Cloud-hosted scheduled agent — no machine needs to be on.
Routine runs at 09:00 UTC daily
scripts/triage.jsoutputs a JSON decision (FULL_BRIEFING / QUIET_PERIOD / SILENT_SKIP)scripts/aggregate.jsruns comprehensive data aggregation → single JSON blob (conforms toschemas/aggregate-output.schema.json)Agent reads the JSON, writes the email body as HTML, saves to
./briefing-draft.jsonscripts/send.jsdelivers via Resend (SendGrid + disk fallbacks)
See routine-prompt.md for the exact prompt to paste into the Routine.
Required secrets: SPEC §6.2.
On-demand reports (mobile)
Trigger an ad-hoc report from your iPhone via the home-screen web app
(bird-report.html). The page POSTs workflow_dispatch to
.github/workflows/report-on-demand.yml, which runs the same
triage → aggregate → generate-email → send pipeline with
claude-sonnet-4-5 (Anthropic SDK, tool-use mode) writing the HTML.
The PAT stored in localStorage must be a fine-grained PAT scoped to
this repo only, Actions Read+Write. Classic PATs are not supported (see
SPEC §5.2). Workflow rate-capped at 20 dispatches per 24h.
Local testing
npm run test:unit # 171 unit tests, no keys
node scripts/test-regressions.js # ~30 security/contract tests
BRIEFING_TEST_FIXTURE=full_lifer npm run aggregate # offline fixture run
node scripts/aggregate.js | npm run validate:schema -- /dev/stdin
node scripts/triage.js # live triage (keys required)Fixture scenarios: full_lifer, full_rain, full_fallout,
quiet_period, silent_skip. See TESTING.md.
Architecture (post Wave 2C decomp)
src/
index.js entry: loadConfig + clients + startServer
server.js MCP stdio dispatch
config.js frozen env-var config object
lifelist.js JSON-cache-first life list loader
migration-scoring.js unified rateNight() + threshold loader
utils.js Cache, fetchWithRetry, resolveLocation, …
handlers/ one file per MCP tool
_shared.js createContext(), InputError, helpers
index.js HANDLERS[] + TOOL_HANDLERS Map
<tool>.js { tool, handle } per tool
*-client.js 6 external API wrappers (retry + timeout + redaction)
scripts/
triage.js fast decision (~10s)
aggregate.js comprehensive data (~25s, schema-validated)
generate-email.js on-demand: Anthropic tool-use → draft
send.js sanitize → Resend → SendGrid → disk; idempotency
validate-schema.js Ajv against schemas/aggregate-output.schema.json
test-unit.js 171 tests
test-regressions.js ~30 security + contract invariants
fixtures/ pre-baked triage / aggregate JSON
schemas/aggregate-output.schema.json data contract (CI-gated)
.github/workflows/report-on-demand.yml on-demand pipeline
routine-prompt.md daily briefing prompt + design systemSee SPEC.md for the full specification.
Available Tools
10 toolsbest_day_to_birdB
Recommend the best day to go birding within a date range, combining BirdCast migration forecasts, historical eBird frequency data, and recent observation trends.
Inputs: location, date_range, target_species.
birding_weatherA
Get NWS weather data interpreted for birding: overnight wind direction/speed (the key migration predictor), morning forecast, and a plain-English migration interpretation. Automatically combined into migration_forecast output.
Inputs: lat, lng, date.
birding_windowB
Calculate sunrise, civil twilight, and recommended arrival time for a birding session at a given location and date.
Inputs: lat, lng, date, temp_f.
compare_hotspotsA
Compare multiple eBird hotspots side-by-side: unique species, shared species, notable sightings, and checklist activity at each.
Inputs: hotspots (required), location.
hotspot_detailsA
Get detailed info about a specific eBird hotspot: recent species, notable sightings, and frequency data for this time of year.
Inputs: hotspot (required), location.
migration_forecastA
Get BirdCast migration data for a region: last night's traffic, expected species, seasonal totals, and a plain-English summary. Only available during migration seasons (Mar-Jun, Aug-Nov).
Inputs: region_code, date.
plan_birding_tripB
Plan a birding trip by finding the best nearby hotspots, combining recent species diversity, notable sightings, and BirdCast migration data. Returns ranked hotspots with migration context.
Inputs: location, date, radius_km.
species_finderB
Find where a specific bird species has been seen recently near a location, sorted by most recent observation.
Inputs: species (required), location, radius_km.
species_frequencyA
Look up historical frequency data for a species in a region using BirdCast bar chart data. Returns peak week, current probability, and whether the species is early/on-time/late relative to its historical peak.
Inputs: species (required), region_code, date.
verify_sightingA
Cross-reference an eBird species sighting against iNaturalist photo-verified observations nearby. Returns confidence level and count of research-grade (photo-verified) reports.
Inputs: species (required), lat, lng, radius_km, +1 more.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 10 tools
Each tool has a clearly distinct purpose: from finding the best day, weather, and timing to hotspot comparison, species finding, and sighting verification. There is no overlapping functionality; even related tools like 'best_day_to_bird' and 'migration_forecast' serve different needs.
Tool names are predominantly descriptive with a consistent verb_noun or noun_noun pattern using snake_case (e.g., 'compare_hotspots', 'species_finder'). The only minor inconsistency is 'best_day_to_bird', which uses a phrase instead, but it remains clear and does not cause confusion.
With 10 tools, the server is well-scoped for the birding planning domain. Each tool covers a specific aspect without redundancy, and the number is neither too few nor too many for effective use by an agent.
The tool set offers comprehensive coverage of birding planning: trip planning, weather, timing, hotspot details, species frequency, migration forecasts, and sighting verification. There are no obvious gaps; users can perform end-to-end planning without dead ends.
Maintenance
Related MCP Connectors
MCP server for weather with reasoning — umbrella advice, outdoor checks, city comparisons.
Hosted MCP server for Xweather weather data: conditions, forecasts, alerts, and more.
Official MCP server for twitterapis.com. Twitter/X search, users, DMs, Grok, monitoring and writes.
An MCP server for deep research or task groups
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server that allows AI assistants to access bird observation data, hotspots, and taxonomy information from eBird.29 npm8MIT
- AlicenseAqualityDmaintenanceA free, MIT-licensed MCP server that provides AI agents with analyst-grade US severe-weather tools, including live warning polygons, SPC outlooks, radar-derived hail and rotation products, and a composite threat brief.1028 PyPI1MIT
- AlicenseNot gradedqualityDmaintenanceAn MCP server that integrates with the eBird API to help plan bird-watching trips through Claude, enabling hotspot discovery, recent observations, rare bird sightings, and species information retrieval.29 npmMIT
- FlicenseNot gradedqualityDmaintenanceMCP server that provides current weather and forecasts via Open-Meteo API, with an optional ML-based next-day max temperature prediction.-