The loop, in detail
Vesta runs a closed loop on your production traffic: observe, interpret, recommend, measure. It ends in changes to your surface, not a dashboard you have to sit and read.
01 // OBSERVE
The SDK captures sessions, tool calls, errors and latencies straight from the MCP protocol layer.
02 // INTERPRET
Behaviour becomes patterns: usage, call sequences, failure points, description quality.
03 // RECOMMEND
Specific changes to the surface, grounded in your product context and the data behind them.
04 // MEASURE
After a change ships, Vesta compares before and after on the same surface, so the impact is a number, not a hunch.
Observe
One call instruments your MCP server. It wraps the tools/call handler in your own process, captures every interaction, and ships it over OpenTelemetry. Fail-open by design: if Vesta has a bad day, your server keeps serving.
import vesta
# your mcp lowlevel Server, or your FastMCP instance.
# add this after tools are registered, before you serve.
vesta.instrument(server, api_key="vsk_...")Interpret
Raw interactions become patterns. Vesta works out which tools agents reach for, which they ignore, where descriptions get misread, and which call sequences end in failure.
[OK] 4,212 sessions analysed across 7 tools
[PATTERN] get_order_status: called in 38% of sessions, abandoned 60% of the time
[PATTERN] export_invoice: 0 calls in 30 days, functionally orphaned
[NOTE] description quality flagged on 2 tools
Recommend
A pattern on its own isn't useful. Vesta turns it into a specific change you can make, with the evidence attached. You decide whether to ship it.
[RECOMMENDATION #104]
Rewrite the description for get_order_status. Agents call it often, then give up. The text says what it does, not when to use it.
"Returns the status of an order."
"Use when the user asks where their order is or whether it has shipped. Returns current status, carrier and ETA for one order by ID."
Measure
Once the change is live, Vesta compares the same surface before and after. If completion goes up, you know it worked. If nothing moves, you know that too.