seed-skills/chrome-devtools-mcp-performance/SKILL.md
Teach agents to use the Chrome DevTools MCP server for performance testing with traces, Core Web Vitals, throttling, and evidence-based analysis.
npx skillsauth add PramodDutta/qaskills Chrome DevTools MCP PerformanceInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
You are a web performance engineer who drives Chrome DevTools through an MCP server to capture traces, measure Core Web Vitals, analyze network and CPU bottlenecks, and turn observations into targeted fixes.
Install the MCP server and prepare a local performance target.
npm install --save-dev @playwright/test typescript
npm pkg set scripts.perf:serve='vite --host 127.0.0.1'
npm pkg set scripts.perf:smoke='tsx scripts/perf-smoke.ts'
Configure your agent to expose Chrome DevTools MCP according to your MCP client.
{
"mcpServers": {
"chrome-devtools": {
"command": "npx",
"args": ["chrome-devtools-mcp@latest"]
}
}
}
Keep performance evidence and scripts outside normal E2E tests.
performance/
traces/
budgets/
web-vitals.json
notes/
checkout-lcp.md
scripts/
perf-smoke.ts
summarize-trace.ts
Use this loop when asked to investigate performance.
Use Playwright to collect browser-side performance entries for quick checks.
// scripts/perf-smoke.ts
import { chromium } from '@playwright/test';
const url = process.env.PERF_URL || 'http://127.0.0.1:5173';
const browser = await chromium.launch();
const page = await browser.newPage();
await page.goto(url, { waitUntil: 'networkidle' });
const metrics = await page.evaluate(() => {
const nav = performance.getEntriesByType('navigation')[0] as PerformanceNavigationTiming;
const resources = performance.getEntriesByType('resource') as PerformanceResourceTiming[];
return {
domContentLoaded: Math.round(nav.domContentLoadedEventEnd - nav.startTime),
load: Math.round(nav.loadEventEnd - nav.startTime),
transferKb: Math.round(resources.reduce((sum, item) => sum + item.transferSize, 0) / 1024),
resourceCount: resources.length,
};
});
console.log(JSON.stringify(metrics, null, 2));
await browser.close();
Turn repeated findings into a simple local budget.
// scripts/check-performance-budget.ts
type Metrics = {
domContentLoaded: number;
load: number;
transferKb: number;
resourceCount: number;
};
const budget = {
domContentLoaded: 2000,
load: 3500,
transferKb: 900,
resourceCount: 90,
};
export function assertBudget(metrics: Metrics): void {
const failures = Object.entries(budget).filter(([key, limit]) => {
return metrics[key as keyof Metrics] > limit;
});
if (failures.length > 0) {
throw new Error(`Performance budget failed: ${JSON.stringify(failures)}`);
}
}
When reviewing a trace, inspect these areas in order.
| Signal | DevTools Evidence | Likely Fix | |---|---|---| | Slow LCP | LCP element and waterfall | Preload image, reduce server time, optimize hero | | High CLS | Layout shift records | Reserve dimensions, avoid late banners | | Poor INP | Long tasks near input | Split JavaScript and reduce handler work | | High TTFB | Navigation timing | Cache, optimize backend, use edge | | Large JS | Coverage and network | Code split and remove unused libraries | | Slow fonts | Waterfall and rendering | Preload, swap, subset fonts |
development
Generate test data from the schemas you already have. Read OpenAPI, JSON Schema, SQL DDL, or TypeScript models and produce deterministic factories, boundary and negative cases, relational datasets with valid foreign keys, cleanup scripts, and PII-safe synthetic data. Production records never leave the machine.
development
Diagnose flaky test failures from Playwright reports, traces, and rerun history. Classify each failure as product, test, environment, data, or unknown with cited evidence and a proposed fix. Never auto-modifies code without opt-in.
tools
Test LLM, RAG, MCP, and agentic systems end to end. Build golden datasets, run deterministic checks and LLM judges, score retrieval, probe prompt injection, verify tool use, and gate CI on thresholds. Orchestrates DeepEval, Ragas, promptfoo, and Langfuse.
development
Analyze a git diff, map affected risks, select the tests that matter, detect coverage gaps on changed lines, run configurable quality gates, and produce a go/no-go release report with cited evidence. Recommends only; never merges or deploys.