It joins your stack; it does not ask to replace it

Ingestion is a standard, not a plugin. Everything else is a small number of connections that are built properly rather than a catalogue of a hundred logos that mostly forward a webhook. Here is every one of them, and what each actually does.

OTLP
in, from any OpenTelemetry SDK
MCP
your telemetry, readable by a coding agent
OIDC + SAML
single sign-on, both live

Getting data in

Any OpenTelemetry SDK

Go, Java, Python, Node, .NET, Ruby, Rust — if it exports OTLP over HTTP, it works. Set the endpoint and the key as environment variables and nothing in your code changes.

The browser SDK

Error capture, session replay masked before capture, and a feedback widget. The errors entry point is its own module, so error capture costs you nothing of the recorder’s weight.

The command line

One npm package. It uploads the source maps that make a stack trace readable, and sends a change for review from a build step.

Collectors and sidecars

An OpenTelemetry Collector exports to SnagSpy like any other OTLP backend, which is the right shape if you are already fanning telemetry out to more than one place.

Your coding agent can read your production errors

The same command line runs an MCP server. Point Claude Code, or any other MCP client, at it and the agent editing your code can read the issues, events and traces from the project it is editing.

That is a small feature with a disproportionate effect: the agent stops reasoning about your code in the abstract and starts reasoning about the exception your users are actually hitting. What it can see is bounded by the scopes on the key you give it — read-only access to events yields a strictly smaller tool set than one that can also write to issues, and a key carrying neither is refused at startup rather than quietly degraded.

Register the MCP server
npx snagspy mcp

# it reads the key from the environment
SNAGSPY_API_KEY=<a key with events:read>

Getting told about it

DestinationWhat it is
EmailAlerts and digests, in the recipient’s own language. Delivery is through a verified sending domain rather than direct SMTP from the application host.
WebhookA signed POST to a URL you own. The address is checked before it is saved, so a destination cannot be pointed at a private network address to make the platform fetch something on somebody’s behalf.

There is no Slack app and no PagerDuty app. Both are reachable through an incoming webhook today, and calling that "a Slack integration" on this page would be dressing up a URL field as a product.

Filing the work

An issue can become a ticket in Jira Cloud or in Linear, filed with the context that makes it actionable rather than a link and a title. Filing is idempotent: pressing the button twice does not open two tickets, and neither does a retry after a timeout that actually succeeded.

Knowing what changed

GitHub and GitLab deployment webhooks feed the timeline that root-cause analysis reads. They are separate providers rather than one with a flag, because they authenticate differently: one signs the body, the other sends a shared secret in a header, and the second proves strictly less than the first. Treating them as the same thing would mean treating the weaker proof as the stronger one.

Signing in

OpenID Connect and SAML 2.0, on one connection, so an organisation is not asked which of the two the product happens to prefer. Discovery is used where the provider offers it; assertions are checked against a pinned certificate, with the audience, the conditions and the request binding all verified rather than assumed.

Google and GitHub sign-in work through OpenID Connect rather than as named one-click buttons. SCIM provisioning is not built.

Building your own

There is a REST API with scoped keys behind everything above, and the scopes are real boundaries rather than labels: a key’s scopes decide which routes answer it and which refuse it, and a refusal names the permission that was missing instead of returning a generic denial you then have to guess at.

Start with the one you already have

If your services emit OpenTelemetry, you are two environment variables from a working dashboard. Everything else on this page can wait until you want it.