Model Context Protocol server for Symfony applications — read-only introspection of routes, services, entities, controllers, database schema, migrations, composer packages, and logs
Symfony Agent MCP has a well-structured tool discovery pattern with strong meta-tool design, but significant gaps in parameter descriptions, output schema documentation, and error handling guidance. 7 tools total: 5 discovery meta-tools + 2 Caddy-specific tools. All tools have clear action-verb names (list_, search_, activate_, get_, deactivate_) and descriptions in the 100-250 character range. However, parameter descriptions are inconsistent (search_tools has good descriptions; list_caddy_server_config lacks detail on what 'app_path' should reference), and output schemas are entirely undocumented. The tool discovery pattern itself is well-designed (stateless activation, context budgeting), but without visible output schema definitions, downstream tool chaining is unreliable. Error handling is minimal, no recovery guidance, no validation error examples, and no structured error taxonomy. Security is strong (no secrets in params, read-only operations), but documentation of these guarantees in tool descriptions is absent.
Activate all tools in a category for this session. After activation the MCP client will receive the full tool definitions on the next tools/list refresh. Use list_tool_categories to see available categories and their token costs. Pass force=true to override the token budget guard.
Remove a previously activated category from this session to free up context budget. Useful when switching between different areas of the codebase.
Show which tool categories are currently active in this session, how many tools are exposed, and the estimated token cost. Use this to understand your current context budget.
Statistics for Caddy server configuration: count of config files, directives analyzed, TLS/reverse_proxy/encode entries, and total issues
Analyse Caddy server configuration files (Caddyfile, caddy.json, docker/Caddyfile) for missing TLS, missing gzip/zstd encoding, reverse_proxy without health checks, and root directive settings
Output schemas completely undocumented across all 7 tools. Downstream LLM reasoning and tool chaining are unreliable without knowing what fields to expect.
Parameter descriptions in Caddy tools (list_caddy_server_config, get_caddy_server_config_stats) lack format constraints, path validation rules, and examples. 'app_path' does not specify if it must be absolute, relative, exist beforehand, or what happens on missing paths.
No error handling or recovery guidance in any tool description. Tools do not document failure modes, retryability, or how to respond to missing/invalid inputs. E.g., list_caddy_server_config does not explain what happens if app_path does not exist or contains no Caddyfile.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 55 | 2026-07-28+ | v2 |
List all available tool categories with descriptions, tool counts, and estimated token cost. Use this first to understand what groups of tools exist before activating them. Only the categories you activate will be shown in subsequent tools/list calls.
Search for specific tools by describing what you want to do. Returns the top matching tool definitions (name + description + input schema) ready to call immediately — no activation needed for one-off use. For repeated use of a group, call activate_category instead.
'search_tools' and 'activate_category' descriptions reference searching and limiting, but no ranking algorithm or tie-breaking logic is documented. LLMs cannot predict which N tools will be returned from a query.
Parameter constraints not formally expressed. 'limit' in search_tools mentions range (8 - 20) in description text, but no JSON Schema min/max/enum constraints are visible. 'category' in activate_category and deactivate_category lacks enum definition of valid categories.