birdnet-go-mcp 是一个面向 BirdNET-Go 生物声学观测站的高性能 Model Context Protocol(MCP)服务器与 CLI 工具。它旨在将 Claude、Antigravity、OpenClaw 以及本地大语言模型连接到用户后院的鸟类监测站。
用途 该工具用于以只读方式访问 BirdNET-Go 观测站数据,包括查询最近的鸟类检测记录、流式获取麦克风遥测数据、解析局域网音频录音,以及查看观测记录。它直接对接 BirdNET-Go 的 v2 REST API,通过局域网或 localhost 通信,无需锁定原始数据库,也不依赖未维护的 Python 依赖。
主要能力
- 原生支持 BirdNET-Go:直接与 BirdNET-Go v2 REST API 交互,无需原始数据库锁定或未维护的 Python 依赖。
- 即时运行:可通过 npx -y birdnet-go-mcp 立即启动,无需 Go 工具链。
- 零依赖静态二进制:单一 Go 二进制文件(CGO_ENABLED=0),支持 Linux、macOS 和 Windows。
- 双模式(CLI + MCP):提供面向人类的 CLI,用于快速终端健康检查(birdnet-mcp status);同时提供完整的 stdio 与 SSE MCP 服务器,供 AI 智能体使用。
- 上下文保护(8KB 信封):硬性限制输出,防止数百条检测查询溢出模型上下文窗口。
- 只读且并行安全:省略所有修改/破坏性端点;所有工具都标注 readOnlyHint 和 idempotentHint,便于快速并行调用。
- 音频与片段访问:解析局域网 Caddy/Nginx 的 .wav 片段 URL,并内置 base64 音频流,供多模态模型使用。
使用方式
- 通过 NPX 即时运行(推荐 Claude Desktop 与 Node 用户):无需安装 Go,会自动下载对应平台的本地二进制文件。
- 通过 Go 安装。
- 预编译二进制文件:从 GitHub Releases 下载适用于自身架构的最新静态二进制文件,包括 darwin-arm64(Apple Silicon M1/M2/M3/M4)、darwin-amd64(Intel Mac)、linux-amd64(x86_64 服务器、Proxmox LXC、Docker)、linux-arm64(Raspberry Pi 4 / 5)、linux-armv7(Raspberry Pi 2 / 3 / Zero 2 W)。
客户端与运行框架配置
- Claude Desktop 与 Cursor:编辑 macOS 的 ~/Library/Application Support/Claude/claude_desktop_config.json、Windows 的 %APPDATA%\Claude\claude_desktop_config.json,或在 Cursor Settings ➔ Features ➔ MCP 下添加。也可通过 CLI 直接添加。
- Google Antigravity:在 Antigravity MCP 配置(~/.gemini/antigravity/mcp/ 或项目设置)中添加。
- OpenClaw:在 ~/.openclaw/openclaw.json 中配置,并添加到智能体的 tools.allow 列表中。
- 远程/无头智能体(SSE HTTP 模式):若智能体运行在另一台机器或云端且无法访问本地 stdio,可将智能体指向 http://<your-server-ip>:8092/sse。
交互式 CLI 命令 birdnet-mcp 既是面向人类的完整 CLI 工具,也是面向智能体的 MCP 服务器。可用于检查站点与 RTSP 麦克风健康、查看最近观测记录、下载音频录音。
MCP 工具参考
- birdnet://station/health:Pi 麦克风流与 BirdNET-Go 引擎的实时 JSON 快照。
- birdnet://detections/recent:最近 10 条检测记录。
- birdnet://species/summary:物种出现情况聚合摘要。
- daily_backyard_brief:面向常驻鸟类智能体的晨间简报工作流模板。
- investigate_detection:对照 eBird 评估异常观测的深入分析模板。
生产环境实战经验与加固 birdnet-go-mcp 并非在理论真空中构建,而是在真实的后院生物声学观测站中经过实战检验和验证:
- 麦克风站点:Raspberry Pi Zero 2 W 安装在室外,配备防风雨驻极体麦克风,通过 RTSP(mediamtx)以约 75 KB/s 的速率在 Wi-Fi 上流式传输 48kHz 单声道音频。
- 检测器主机:BirdNET-Go 运行在 Debian 12 Proxmox LXC 容器中(amd64,AMD Ryzen 5 PRO),使用 Cornell Lab of Ornithology 的神经网络分析音频块。
- 片段 Web 服务器:Caddy 反向代理通过 HTTP 在端口 8091 上提供 /var/lib/birdnet-go/clips/ 目录。
- 智能体网格:OpenClaw 运行在 Apple Silicon Mac Mini 上,运行自主常驻智能体:Blenda(基础设施智能体,GLM-5.3)负责监控服务器健康、管理网关重启并监督工具权限;Leopold(常驻博物学家,Gemini 3.8 Flash)负责撰写每日后院野生动物简报、标记异常物种(东蓝鸲、卡罗莱纳鹪鹩、北美黑啄木鸟)并检查音频频谱图。
真实世界经验与“Incident Zero”
- Caddy 目录权限陷阱(Incident Zero):BirdNET-Go 会创建按月划分的片段目录(/clips/YYYY/MM/),权限为 750(drwxr-x---)。以自身系统用户身份运行的外部 Web 服务器(Caddy、Nginx)在向智能体或 Discord webhook 提供音频片段时会遇到 HTTP 403 Forbidden。修复方法:将现有月份文件夹权限设为 755,并将 Web 服务器用户加入 birdnet 组:sudo chmod -R 755 /var/lib/birdnet-go/clips 与 sudo usermod -aG birdnet caddy。
- Apple Silicon AMFI 与交叉编译:从 Linux 交叉编译 macOS Go 二进制文件(GOOS=darwin GOARCH=arm64)并剥离调试符号(-ldflags="-s -w")时,macOS Apple Mobile File Integrity(AMFI)会立即以 SIGKILL(退出码 137)终止进程。所有 Darwin ARM64 发布版本均已正确进行 ad-hoc 代码签名(codesign -s - --force)。
- 上下文窗口 Token 预算保护:将原始 base64 WAV 录音输入多模态 LLM 对于验证困难鸟叫非常有用,但单个 15 秒 WAV 会消耗约 1.9MB(约 500,000 tokens),一次工具调用就可能占用 100 万 token 上下文窗口的 50%。birdnet-go-mcp 严格将所有结构化 JSON 工具响应限制在 8KB 信封上限内,同时明确豁免 get_audio_clip_base64,使模型可以有意调用它,而不会在日常简报流程中意外导致上下文爆炸。
贡献与开发、致谢与许可 基于 mark3labs/mcp-go 构建。为 tphakala/birdnet-go 设计。鸟类识别神经网络由 Cornell Lab of Ornithology 与 Chemnitz University of Technology 开发。采用 MIT 许可证。