Repository navigation
feat(eval): measure the MCP server against Chrome DevTools MCP (chapter 6) - #284
Merged
Merged
Conversation
The grader of the MCP evals reads the report and the tool calls of a run: whether the report names the cause the fixture has, and how the agent measured, as published snippets run through the webperf MCP server, published scripts given to evaluate_script of Chrome DevTools MCP (as code or by path), code the agent wrote itself, or other tools such as a performance trace. The summary takes the medians of tokens, turns and time per case and setup. Its tests run in test:prompt, with those of the Copy prompt evals.
…with a known answer npm run eval:mcp asks the same question about a local page to an agent with the webperf MCP server, with Chrome DevTools MCP 1.11.0 and the webperf skills (loaded as a temporary plugin), and with Chrome DevTools MCP alone, each isolated from the settings, skills and MCP servers of the machine. The prompts name no tool or snippet. One page loads its LCP image in 2 s, a noise image so Chrome accepts it as a candidate; on the other, the "Add to cart" button blocks the main thread for 250 ms. It runs by hand, not in CI: a full run takes about 10 minutes and a million input tokens.
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
This was referenced Oct 19, 2026
This branch was successfully deployed
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Sixth chapter of the MCP server (phase 8a): an eval that asks the same question about a local page to an agent with three setups, and measures what each one costs to get the answer.
node cli/src/bin.js mcp).Each run is
claude -pisolated from the settings, skills and MCP servers of the machine (--setting-sources "",--strict-mcp-config), with only the tools of its setup. The prompts read like a person asking and name no tool or snippet. Two fixtures with a known answer, checked first with the server's own tools: an LCP image that the server sends in 2 s (a noise image, so Chrome takes it as a candidate; a flat one is discarded and the LCP falls on the heading), and an "Add to cart" button whose handler blocks the main thread for 250 ms. The grader checks that the report names the cause, and records how the agent measured: published snippets through the server, published scripts given toevaluate_script(as code or bysourcePath), its own code, or other tools.npm run eval:mcpruns it by hand; it is not part of CI.Results
Sonnet, 3 runs per case and setup, medians:
LCPBreakdowninsight; for INP it wrote an Event Timing observer.context: fork) every time they were invoked (3 times), and the fork answered that it had no page or URL to measure, as a fork does not get the conversation. No published script ran in the 6 runs of that setup. This is a problem of the generated skills, to fix in its own pull request.Test plan
test:prompt, 72/72 (local).imgwith 98% in resource load time; INP 256 ms onbutton#addwith 251 ms of processing (local).bashtool and got "No such tool available": the isolation holds (local).validatepassed in 6m50s on a re-run. The first run failed inthird-party-impact.test.js(a domain with 0 ms of main-thread time instead of over 250), a test this pull request does not touch; it looks intermittent and is noted to follow up if it comes back.