Optimise your product
for AI agents
Agents come back to what works. Vesta analyses how they use your tools, names the exact optimisation to make, and proves the impact on your traffic.
How Vesta works, in 1 minute
The agentic race has already started.
Automated traffic has overtaken humans on the web, and AI agents are its fastest-growing part. They're becoming a real way your product gets used, and they choose what works best for them.
By 2035, as much as 80% of internet traffic could be driven by AI agents.
Source: Gartner, Futures Lab: The Future of Identity, April 2025
Across 856 tools on 103 MCP servers, 97% of tool descriptions carried at least one quality issue, and 56% did not state their purpose clearly.
Source: Queen's University, study of MCP tool descriptions, 2026
By 2031, autonomous agents are predicted to handle up to $3.5 trillion in transactions and serve 1.3 billion users, buying on price, schema and fulfilment speed.
Source: Forrester
Agents are becoming first-class users of your product. Build for them, or lose them, and the revenue they bring.
If an agent can finish the job easily with your product, it comes back.
It comes down to four numbers. Vesta improves each one.
Higher task completion
More of the jobs agents start, they finish.
More task types
Agents can do more with you, not fewer.
Fewer turns
Faster to the result, with less back and forth.
Fewer tokens
Lower cost for an agent to use your product. Less context bloat.
Every recommendation is a specific change to your product, with the evidence behind it.
priority is typed as free-text, but the schema expects an integer
Change priorityto an integer 1–4 and document the mapping in the tool description, instead of accepting a free-text string.
Agents send priority as “High” or “Urgent”; the schema wants an integer, so the call errors and the agent stalls or abandons the task.
first-try success on save_issue is 41% — 34 points below your tool median (95% CI 37–45%).
update_issue.Compared against v2.Observe. Interpret. Recommend. Measure.
Capture behaviour
One call captures every session, tool call, error and latency.
Find the patterns
Read the behaviour across sessions to find what works and what fails.
Specific changes
Specific changes, grounded in your product context, straight into your dev process.
Prove the impact
Compare before and after, so you know whether a change worked.
Powerful, automated analytics.
Blocked sessions
Stalled on repeated failures
Small (4.5%) but the sharpest signal on the surface: 74% of calls fail and 82% of these sessions are abandoned. Concentrated on list_issues and save_issue.
~14 sessions lost this window
Suggested fixIssue managers
Create and update issues across projects
The workhorse segment: long sessions (avg 6 calls) that browse projects and issues, mostly while creating and updating them. save_issue and list_issues lead their calls.
~5 sessions lost this window
Suggested fixIssue searchers
Find work by query
Query-led sessions (avg 2.5) that search for specific issues, cycles or teams rather than browsing. Search makes up the largest share of their calls.
~3 sessions lost this window
Suggested fixBoard browsers
Scan, click, make no changes
Short, read-only sessions (avg 1.6) that list issues, labels and users, then leave: no records, no writes. The lowest error rate of any archetype.
~1 sessions lost this window
Suggested fixTicket inspectors
Open one issue and quit
Precise single-fetch sessions (avg 1.3): pull up one issue, diff or team and stop. Cheap and reliable.
~1 sessions lost this window
Suggested fixQuick capturers
Log new items without browsing
Write-first sessions (avg 1.4, 87% writes) that create an issue, label or attachment with no exploration first. They abandon 0% of the time: they know what they came to do.
Healthy · 0 sessions lost
131 sessions · first 3 tools.
Hover a block to trace a path; click to pin it. Read left to right: where sessions start, and where they go next.
Getting started is easy
A few lines of code. Sensible defaults, but you have control where needed.
pip install vesta-sdkimport vesta
vesta.instrument(
server, # mcp or fastmcp
api_key="vsk_live_...",
session_context=lambda r: {
"user_id": user_id_from(r), # who the end user is
},
)Isn't this just observability?
Observability tells you where agents fail and hands you the shovel. Vesta names the specific change to make, then measures what it did to task completion. It is optimisation, not a dashboard — analysis of the surface, not the agent. It sits on top of your logs and traces, it does not replace them.
Will the SDK slow my server down?
No. It wraps your tools/call handler and exports asynchronously over OpenTelemetry. It is fail-open: if Vesta breaks, your server keeps serving.
What happens to my data?
You decide what gets captured, and redaction runs in your own process before anything leaves it.
Which servers are supported?
Python, both the official mcp SDK and FastMCP, and TypeScript on the official MCP SDK. OpenTelemetry underneath, over stdio, streamable HTTP or SSE.