What is Baton

Baton is actionable product analytics for MCP servers. When a customer's agent calls your server and your API can't meet the request, you often get a 200 with an empty body or a vague error. The customer's intent vanishes with no ticket and no trace. Baton captures that friction at the moment it happens: what the customer was trying to do, the call the agent made, what it expected, and what it got.

You instrument your server once. Whatever agent your customers use (Claude, Cursor, ChatGPT) keeps working exactly as before.

Which path is mine

Three ways to capture. They emit the same events in the same wire format to the same sinks, so the choice is about where the code goes, not what you get. You only need one.

baton-sdk

A server you own. Goes inside it and captures your real customers. Python or TypeScript. Quickstart →

Gateway

Many servers behind a gateway. Capture once, in front of all of them, without touching any. Quickstart →

baton-proxy

A server you don't own, or your own before you change any code. Wraps it from outside. Quickstart →

Instrumenting is two lines. Here is the SDK path in full:

from baton import install_baton

install_baton(mcp, dsn="https://baton_pk_...@baton.goodtiming.ai/ten_.../acme-kb")

The DSN is one string from /account holding your workspace, this server and the key that binds them, so nothing else needs configuring. You can also run without a key and read the events on your own machine first. Choosing paths →

Next steps

Send events to the Console

Every path can write to your own machine instead. One DSN string swaps the sink for the hosted Console, where friction is deduped and ranked across every customer. Console →

Capture intent, not just calls

The intent parameters are how a call carries why it was made. They are what turns an event log into a roadmap. Intent parameters →

Choose a sink

stderr, a file, an https:// collector of your own, or several at once. Sinks →

Check what gets scrubbed

Payloads run through a pattern-based scrubber before they reach any sink. Read what it does and does not catch. PII scrubbing →