The Paper
"Agent Seer: Synthesizing Scenarios from Specification Understanding" was published in June 2026 by Harish Karumuri, Mahesh Vemula, and David Lopes Pegna of Apple. The central claim is that a tool specification on its own - function names, natural-language descriptions, and typed parameter schemas - already encodes enough semantic information to synthesize a complete evaluation harness, with no seed examples, no live tool execution, and no domain-specific tuning. Running the pipeline over seven public Model Context Protocol specifications produced 337 scenarios that score a mean 0.911 on tool-calling correctness and 0.855 on conversational coherence, with complete tool coverage on every specification up to 56 tools.
Read the Paper on arXiv →The Problem Before This Paper
Agent evaluation has good benchmarks and no way to get one for the tool suite you actually run. GAIA2 (Froger et al., ICLR 2026), AgentBench (Liu et al., 2023), WorkArena (Drouin et al., ICML 2024), and the MCP-native suites that followed - MCPVerse, MCP-AgentBench (Guo et al., AAAI 2026), Toolathlon - are all built by manual curation or require live tool access, and all of them freeze the moment they are released. That produces three specific gaps the paper names. The curation bottleneck: writing a realistic scenario means connecting a user goal to a tool sequence, filling every parameter with a plausible value, and knowing how practitioners actually chain the calls, which is domain expertise that does not scale across the combinatorial space of tool pathways. The static benchmark problem: an agent scoring well against a snapshot may be graded against tool descriptions that no longer match production. The multi-turn gap: follow-up turns that react to specific tool outputs require real tool responses to write against. Synthetic data work mostly assumes execution - APIGen verifies through real calls, TOUCAN (Xu et al., 2025) scaled to 1.5M trajectories by driving live MCP servers - while simulated environments such as tau-bench (Yao et al., 2025), tau2-bench (Barres et al., 2025), and ToolSandbox (Lu et al., 2025) replace the tools but still need someone to build the environment. The residual is what the authors call the cold-start evaluation problem: producing realistic evaluation data for a tool suite that has none, which is the normal condition for new, private, or fast-moving internal APIs.
What They Built
Agent Seer is a four-stage pipeline where each stage consumes validated structured output from the
previous one, so a schema violation is caught at the boundary instead of propagating. Stage one,
tool interpretation, prompts an LLM for four semantic fields per tool: a functional description,
required parameters with semantic roles, a primary use case, and organizational context. Stage two,
scenario generation, emits enterprise workflow scenarios at two complexity levels, each carrying a
title, a user-facing instruction, an ordered list of expected tool calls with concrete parameter
values, and a follow-up question. The output schema forces reasoning fields into the generation
itself: every call carries a quick_explanation for why it fires, and every scenario a
novelty_reason for its evaluation value. Stage three synthesizes a mock JSON response
per call, tagged with a grounding tier of high, medium, or low that records whether reference
material was available; supplying real example outputs is optional, which makes the pipeline a
spectrum rather than a binary. Stage four expands a scenario into multi-turn dialogue, splitting at
natural phase boundaries so the resulting turns preserve the two patterns BFCL v3 formalizes -
multi-step, where each call depends on the previous result, and multi-hop, where independent calls
gather information that must be synthesized. Follow-up turns quote concrete values from the mock
outputs, entity names and counts and status codes, rather than restating the task. When expansion
yields a single turn the scenario is discarded on the assumption it lacked the substance to split.
The product is a self-contained harness: a prompt, an ordered list of expected calls held out as the
oracle, mock outputs to feed as tool responses, and the conversation. Any MCP-compatible framework
can run an agent against it without touching the real tools.
The scoring is where the paper earns its result. Rather than a pass/fail on the call, an LLM judge scores four dimensions on 0-10, normalized to 0-1, with argument correctness decomposed into six sub-dimensions and cascading penalties enforced through the judge prompt:
TC_turn = mean(usage, selection, ordering*, arguments)
arguments = mean(completeness, name, value,
type, format, relevancy)
wrong name or missing required -> value = type = format = 0
wrong value -> type = format = relevancy = 0
* ordering is dropped when the turn calls one tool
A single critical error therefore collapses the argument mean rather than shaving a few points off it, which is the mechanism that makes argument failures visible at all. Usage correctness captures necessity, whether a tool was warranted; overuse is recorded as a diagnostic but excluded from the aggregate. Selection averages correctness, specificity, and completeness of the tools chosen. Ordering averages sequence logic, dependency handling, and execution efficiency. Coherence is scored separately and never folded in:
Coh = mean(logical flow, completeness, conciseness,
topic relevance, context retention)
each sub-aspect on 1-3, normalized to 0-1
Generation ran on Gemini 2.5 Flash Lite in structured-output mode at temperature 0.7, with up to three retries on validation failure before the record was discarded. Judging ran on Gemini 2.5 Flash at temperature 0. The seven specifications span Illustrator (64 tools, nested objects), Selenium (56, flat but stateful), Redis (47, flat key-value), Git (33, deeply nested with 11.2 parameters per tool), Elasticsearch (20, nested query DSL), Slack (16, mixed), and Filesystem (14, flat).
Key Findings
- Parameter schema complexity predicts quality; tool count does not. At the per-MCP grain, mean parameters per tool correlates at r = -0.60 with tool-calling score and optional-parameter fraction at r = -0.66, while tool count correlates positively but weakly at r = +0.40. Disaggregating to the 222 unique tools that appear in any scenario confirms the direction at a usable sample size: r = -0.29 and -0.30 on tool calling, both p < 0.001, and r = -0.41 and -0.34 on coherence. Selenium at 56 tools scores 0.935; Git at 33 tools with 11.2 average parameters is last at 0.857.
- Arguments are the failure mode, and values are the sub-failure. Usage is perfect on 98% of records and selection on 77%, but arguments are perfect on only 42%, with 57% partial. Attributing each failing record to its lowest sub-dimension, value accuracy accounts for 223 records against relevancy 44, format 35, type 31, completeness 16, and name accuracy 11. The pipeline picks the right function and the right parameter names, then fills them with subtly wrong values.
- Git fails two different ways at two different complexities. On simple scenarios the pipeline emits real Git CLI commands that are not in the specification -
fetch,revert,filter-repo- a pretraining-knowledge leak past the spec. That is 3 of 893 tool invocations corpus-wide, 0.336%, all of them in Git, and it accounts for half of Git's records scoring below 0.5. On complex scenarios the mechanism is parameter overload localized to specific tools: Git averages 11.2 parameters at 95% optional, andrefappears in seven tools meaning three different things. Selection stays reasonable at 0.802 while arguments fall to 0.780, and to 0.726 on complex scenarios. - Coverage is complete up to 56 tools and breaks at 64. Every tool in Redis, Selenium, Git, Elasticsearch, Slack, and Filesystem appears in at least one scenario. Illustrator, the only specification above that range, reaches 56%. Usage is close to uniform, with Gini coefficients from 0.146 (Redis) to 0.340 (Git); Selenium is the outlier at 0.676 because its 9.7-call workflows concentrate on core navigation tools.
- Multi-turn expansion is the thin stage. Only 54 of 337 scenarios expanded into dialogue, 16.0% overall, skewed to 30.8% for complex scenarios against 2.8% for simple ones, because the stage needs enough workflow substance to produce a follow-up that references real output. Multi-turn conclusions therefore rest on n = 54.
Results
Mean unsupervised tool-calling across the corpus is 0.911 (95% bootstrap CI [0.897, 0.925], median 0.979) and mean coherence is 0.855 ([0.838, 0.872], median 0.933), from 337 scenarios yielding 391 evaluation records. The distribution is top-heavy: 31.7% of records score a perfect 1.0 on tool calling and only 2.3% fall below 0.5. Per specification, Redis leads at 0.966 tool calling and 0.902 coherence, followed by Selenium at 0.935, Elasticsearch at 0.930, Illustrator at 0.898, Slack at 0.886, Filesystem at 0.876, and Git last at 0.857 with the worst coherence at 0.757. Slack scores the highest coherence at 0.938 despite mid-pack tool calling, and the two dimensions stay weakly correlated at the record level (r = +0.23, n = 381) and the tool level (r = +0.16, n = 222), so they carry largely independent diagnostic signal. Complex scenarios cost 7.3 points of tool calling (0.949 to 0.877) and 5.3 points of coherence (0.883 to 0.830), with non-overlapping confidence intervals in both dimensions; Elasticsearch degrades hardest at 12.2 points and Git at 11.1 (0.910 to 0.799), while Selenium is flat at 0.932 to 0.935. Re-scoring the entire corpus with an out-of-family judge, Qwen3.5-122B-A10B-FP8, leaves tool calling essentially unchanged - no mean shift, 95% CI [-0.009, +0.008], paired r = 0.79 over 384 records, MCP ranking preserved at rho = 0.86 - and reproduces argument value accuracy as the dominant sub-failure by a 4-5x margin under both judges. Coherence does not replicate as cleanly: the second judge is systematically stricter by about 0.16, paired correlation drops to 0.42, rank preservation to rho = 0.46, and the worst-coherence specification changes identity between judges. The authors report absolute coherence levels as judge-dependent rather than defending them.
Why This Matters for AI and Automation
- An internal MCP server can have an eval harness the day it ships. Most teams building agents on private tools have zero evaluation data and no path to any, so they ship on vibes and a handful of hand-written smoke tests. A pipeline that turns the specification you already wrote into 40-100 graded scenarios with mock outputs changes the default from nothing to something, and the harness is a static artifact you can version alongside the spec.
- The metric decides what you can see. The Redis example is the whole argument: the
settool takes an optional expiry, scenarios that imply time-bounded storage omit it, and a name-match metric scores those records fully correct. Decomposing arguments into six sub-dimensions is what surfaces the dominant failure mode at all. This is the same lesson as Week 26's injection study, where a 5.6% aggregate concealed a 25.5% channel: the reporting granularity is the finding. - Schema design is now eval design, and probably agent design. Optional-parameter fraction correlates negatively with both dimensions, and Git's
refparameter carrying three different meanings across seven tools is a naming problem, not a model problem. If generated scenarios degrade on your schema, a real agent calling that schema is working against the same ambiguity. Splitting overloaded parameters, trimming optional fields, and giving each parameter one meaning is cheaper than any prompt fix. - Treat generated ground truth as a regression scaffold, not a verdict. Generation and judging both run on LLMs from the same family, and the authors are direct that the framework is a proxy tool for finding broad capability gaps and relative differences. Use it to catch the day your agent stops calling a tool it used to call correctly, not to claim a number.
- Spec-only generation inherits pretraining leakage, which is worth watching. The hallucinated Git commands are the pipeline reaching past the spec into what it knows about Git from training. That is a bug here, and it is also a canary: if generation keeps producing calls your spec does not contain, the model's prior about your domain disagrees with your API surface, which is exactly where a real agent will improvise too.
My Take
The contribution the authors claim is the four-stage structure with validated boundaries, and the contribution I think actually matters is the argument sub-dimension decomposition with cascading penalties, because it turns a 42%-perfect argument rate into something diagnosable rather than a number to feel bad about. The correlation result is the practically useful half: parameter density, not tool count, is what degrades quality, and it holds at both grains with 222 tools behind the tool-level version, which is a large enough sample to design against. What the paper does not do, and what I kept waiting for, is the downstream experiment - nobody runs a real agent against these harnesses and shows that the scores separate a strong model from a weak one. Everything reported is the quality of the generated data as graded by a judge, so the harness is validated as data and not yet as an instrument, and "0.911 tool-calling correctness" is a statement about the generator, not about anything you would learn from running it. The circularity concern is handled about as well as it can be without humans: an out-of-family judge replicates tool calling at paired r = 0.79 and reproduces the failure taxonomy, which is real evidence, but coherence moving 0.16 under a judge swap says the coherence numbers are a property of Gemini's taste. The limitation I would fix first is cross-call referential integrity, since mock outputs for dependent calls are generated independently and IDs may not line up across a chain, which quietly undercuts exactly the multi-step workflows the harness exists to test; the authors name the fix, a shared state dictionary across the workflow, and it is not hard. The coverage ceiling at 64 tools is the other thing to watch, because enterprise MCP servers do not stop at 64, and coverage-aware sampling is the difference between a harness that exercises your tool suite and one that exercises the third of it the generator finds interesting.
Discussion question: The pipeline picks the right tool 77% of the time and the right function name almost always, but fills arguments perfectly only 42% of the time, with wrong values outnumbering wrong parameter names 223 to 11. If argument values are the hard part for a generator reading your spec, what evidence do you have that they are not also the hard part for the agent calling it in production, and does your evaluation score arguments below the level of the function name?