Skip to content

Build1 publisher2 min readPublished

Skills files got Claude Haiku to use Symfony's Mate in 15 of 20 test runs

Symfony AI Mate deleted its MCP server in August and now exposes profiler data through console commands that SKILL.md files tell the agent to run. The author of the community bundle Mate replaced has deprecated his.

The Engineer · Build desk

Illustration accompanying Skills files got Claude Haiku to use Symfony's Mate in 15 of 20 test runs

What happened

  • Hamdi Laadhari has deprecated mcp-profiler-bundle, the March 2025 Symfony bundle that let coding agents read profiler requests, queries and exceptions, now that Symfony ships an official equivalent.
  • Symfony AI Mate shipped on 23 December 2025 as an MCP dev server for a Symfony app's internals, about nine months after the bundle's 0.1.0 tag, with profiler access arriving in Mate 0.3 in January 2026.
  • Mate 0.13 deleted that MCP server in August 2026 in PR #2380, dropped the mcp/sdk dependency, and now has the agent call vendor/bin/mate tools:call and resources:read directly.
  • Johannes Wachter ran Claude Haiku on two tasks with injected performance bugs, ten runs per setup: the bare CLI scored 0 of 20, the MCP server 5 of 20, and the CLI with skills 10 of 10 and 5 of 10.

Compiled by The EngineerSomething wrong?How this is made

Why it matters

  • decision The measured gap sits in the description layer, so a team wiring an agent into an internal system has a reason to write the triage procedure before arguing about transports.
  • cost Mate's maintainers shed a JSON-RPC server and an SDK dependency, and pay for it in per-client discovery: skill files written to .agents/skills/ and mirrored into .claude/skills/.
  • constraint Ten runs per setup on one model leaves open whether a CLI or an MCP server is the better interface, and Wachter says so himself.
  • precedent A framework's own dev tool dropping the SDK that framework co-published makes skills-plus-CLI an easier design to defend in other ecosystems.

An MCP client advertises the server's tools for you. The handshake calls tools/list, and whatever comes back sits in the model's context before the first prompt. In Hamdi Laadhari's deprecated bundle that whole path was one match statement over four methods: initialize, tools/list, tools/call and notifications/initialized [5]. Symfony announced the official PHP MCP SDK in September 2025, built with The PHP Foundation and Anthropic's MCP team [9], and Mate ran on it for roughly eight months [4]. The agent only knows a console command exists if something tells it [16].

So discovery moved into files. Mate installs SKILL.md files into .agents/skills/ and mirrors them into .claude/skills/, and they tell the agent when to reach for which tool [17]. The profiler skill is written as a triage procedure: filter for the failing request instead of scrolling, check which collectors the profile has, then read them in symptom order, exception first for a 5xx, then time, db and memory for a slow request [18].

Johannes Wachter, who made the change, measured only whether the agent touched Mate at all [19]. The two skills runs add to 15 of 20, three times the MCP server's tally [1].

Wachter said "transport alone wasn't the deciding variable. Visibility was." He also calls the result a pattern from a small sample, not a proven effect [21][22]. The metric is permissive too. It counts the agent opening the tool, not the agent finding the bug [19]. Two things have to hold before the ratio transfers to another codebase: the fault has to be visible in the profiler at all, and the client has to read the directory Mate writes skills into [17].

Symfony's spotlight on Mate opens on the premise Laadhari started from, that an agent can read all your code and still not know what happened on the last request [12]. His bundle exposed four tools with one-line descriptions, among them "Lists available profiler tokens." [24][4]. "That's the half I got wrong. I treated exposing the data as the product," he wrote [23]. Rereading the code for the deprecation notice, he found PHPStan reporting an always-true while loop on line 40 and an unreachable statement on line 61, on a CI step he had marked continue-on-error: true the day he set up CI [25]. The linter had been finding both since then.

Mate is past 100,000 installs a month [13]. The bundle finished with 11 stars, 2 forks and roughly 5,900 Packagist installs [6], which at Mate's rate is under two days of downloads [2].

What to watch

  • Whether Wachter repeats the ten-run test on a larger model or more tasks, and whether the skills advantage holds up.
  • Whether Symfony's official mcp/sdk keeps a consumer inside the framework now that Mate has dropped it.
  • Whether other agent clients read .agents/skills/ directly or each one needs its own mirrored directory.
Loading claim ledger
Loading source directory links
Loading share composer
Loading topic controls
Loading related stories