Why it mattersA team paying for Sentry mainly to get its phone push can now run one Go binary, keep the events on its own database, and let a coding agent query them over MCP.
Boop is a self-hosted notification inbox for developers, written in Go with an embedded Svelte UI and a SwiftUI iOS app. Applications post events to a project API key, the server stores them in SQLite, and it pushes directly to Apple's APNs using your own .p8 key. There is no hosted relay, no account system, and no telemetry. The repository is MIT-licensed, was created on 28 August 2026, and has reached 733 stars and 35 forks.
The pieces you actually run
One Go binary, one SQLite file, one Docker container. The web UI ships inside the binary. Static builds exist for Linux, macOS, and Windows on amd64 and arm64, and the SQLite driver is pure Go so CGO_ENABLED=0 works everywhere. The push carries only the title, body, and event id, and the phone fetches the full event from your server with its own device credential.
Events accept five levels (info, success, warning, error, critical), a fingerprint for grouping repeat occurrences into one row (KeyError x47), and up to three actions that render as buttons on the notification itself and open a URL or an app scheme. Sensitive keys such as password, token, api_key, and authorization are replaced with [REDACTED] before storage, and the list is extendable from Settings.
Sentry SDK on the wire
Boop implements the Sentry envelope endpoint that every current server-side Sentry SDK uses, including gzipped bodies. Point an existing Python, Node, Go, Ruby, or PHP SDK's DSN at your Boop host with a project API key as the public key and reports flow in with no code change. Exceptions become titles, fatal maps to critical, and Sentry's grouping fingerprint is preserved so silence rules work per error group. Transactions and sessions are accepted and ignored.
MCP endpoint for the agent
The server exposes a read-only Model Context Protocol endpoint at /mcp over Streamable HTTP. It ships five tools: list_projects, list_events with filters and a time window, search_events, get_event for the full payload, and get_event_group for every occurrence of a fingerprint. There is no model inside Boop; the endpoint just serves the structured context that a coding agent can query with prompts like "what errors happened overnight" or "what started failing after 14:00". A bearer token, a device credential, or the admin login can authorise the endpoint, and Settings has a switch that turns it off.
A hosted error tracker's mobile app is an interface the coding agent cannot read from. A local boop.db next to a Go binary is a queryable source of truth an agent can hold context on across sessions, which is the pattern the README calls out with a Claude MCP install line.
The scope is narrow on purpose. Boop covers events, grouping, and push. It has no source maps, no session replay, no performance monitoring, and no user tracking. The value case is a team using Sentry mainly for the phone push and the error grouping who wants those two things on its own database, at the cost of building and signing the iOS app itself and managing an APNs .p8 key.
Source
Source: chrisgreg on GitHub
This item was written by an AI system from the linked source. Reveneau is responsible for what it publishes.
Get AI News in your inbox
New developer tools, model and agent releases, and how teams are actually shipping with them. Short, and only when there is something worth reading.