Birding Planner
FreeNot checkedMCP server for birding trip planning with migration forecasts, hotspot analysis, and daily email briefings, integrating eBird, BirdCast, NWS, and iNaturalist da
About
MCP server for birding trip planning with migration forecasts, hotspot analysis, and daily email briefings, integrating eBird, BirdCast, NWS, and iNaturalist data.
README
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 |
|---|---|
plan_birding_trip |
Ranks nearby hotspots by recent species count + migration activity |
migration_forecast |
BirdCast radar data + NWS weather interpretation |
hotspot_details |
Recent species and notable sightings at a single hotspot |
compare_hotspots |
Side-by-side species comparison with iNaturalist verification |
species_finder |
Where a species has been seen recently near a location |
best_day_to_bird |
Recommends the best day in a date range using migration + weather |
birding_weather |
NWS overnight/morning forecast interpreted for migration prediction |
verify_sighting |
Cross-references eBird reports against iNaturalist photo-verified obs |
birding_window |
Sunrise, civil twilight, and recommended arrival time |
species_frequency |
Historical peak week and current phenology status via BirdCast |
plan_vacation_birding |
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.
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 keys
Every env var is documented in SPEC §6.2.
3. Install dependencies
npm install
ajv 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.json scripts/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 system
See SPEC.md for the full specification.
Install Birding Planner in Claude Desktop, Claude Code & Cursor
unyly install birding-plannerInstalls into Claude Desktop, Claude Code, Cursor & VS Code — handles npx, uvx and build-from-source repos for you.
First time? Get the CLI: curl -fsSL https://unyly.org/install | sh
Or configure manually
Run in your terminal:
claude mcp add birding-planner -- npx -y github:minikdj/ebird-birding-plannerFAQ
Is Birding Planner MCP free?
Yes, Birding Planner MCP is free — one-click install via Unyly at no cost.
Does Birding Planner need an API key?
No, Birding Planner runs without API keys or environment variables.
Is Birding Planner hosted or self-hosted?
Self-hosted: the server runs locally on your machine via the install command above.
How do I install Birding Planner in Claude Desktop, Claude Code or Cursor?
Open Birding Planner on unyly.org, pick your client tab (Claude Desktop, Claude Code, Cursor) and press Install — the config is generated automatically, no JSON editing.
Related MCPs
Gmail
Read, send and search emails from Claude
by GoogleSlack
Send, search and summarize Slack messages
by SlackRunbear
No-code MCP client for team chat platforms, such as Slack, Microsoft Teams, and Discord.
Discord Server
A community discord server dedicated to MCP by [Frank Fiegel](https://github.com/punkpeye)
Compare Birding Planner with
Not sure what to pick?
Find your stack in 60 seconds
Author?
Embed badge for your README
Browse similar
All communication MCPs
