[HOW IT WORKS]

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.

[DIAGRAM.01 // THE LOOP][RUNNING]
STAGE_01

01 // OBSERVE

The SDK captures sessions, tool calls, errors and latencies straight from the MCP protocol layer.

• transport: stdio / http
• setup: one call
STAGE_02

02 // INTERPRET

Behaviour becomes patterns: usage, call sequences, failure points, description quality.

• tools used vs idle
• sequences that fail
ACTIVE

03 // RECOMMEND

Specific changes to the surface, grounded in your product context and the data behind them.

• rewrite a description
• deprecate an orphan tool
STAGE_04

04 // MEASURE

After a change ships, Vesta compares before and after on the same surface, so the impact is a number, not a hunch.

• completion: 42% → 61%
• window: 14 days
* Vesta is analytical, not operational. It runs on accumulated traffic and produces periodic recommendations, not live alerts.
[01 / INSTALL]

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.

instrument.py
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_...")

[02 / PATTERNS]

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.

analysis.log

[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


[03 / RECOMMENDATION]

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.

Before
"Returns the status of an order."
Suggested
"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."

[04 / IMPACT]

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.

[BEFORE / AFTER]

BEFORE42%
AFTER61%
CHANGE+19 pts
METRICcompletion
[EARLY ACCESS]

Stop guessing how agents use your surface.