Skip to main content
Glama
maschmann

symfony-php-mcp

by maschmann

Server Configuration

Describes the environment variables required to run the server.

NameRequiredDescriptionDefault
CONSOLE_PATHNoPath to bin/console relative to SYMFONY_PROJECT_ROOT. Defaults to 'bin/console'.bin/console
PHP_EXECUTABLENoPHP binary or wrapper command. Use 'ddev php', 'lando php', or a full path like '/usr/bin/php8.3'. Defaults to 'php'.php
COMMAND_TIMEOUTNoSeconds before a PHP subprocess is killed. Increase for large projects or slow containers. Defaults to '30'.30
DOCKER_CONTAINERNoDocker container name. When set, commands run as 'docker exec <container> php …'. Takes precedence over PHP_EXECUTABLE.
DOCKER_EXEC_USERNoOptional -u <user> for docker exec. Useful when the container runs PHP as www-data.
SYMFONY_PROJECT_ROOTYesRequired. Absolute path to your Symfony project (the directory containing composer.json). Defaults to current working directory..

Capabilities

Features and capabilities supported by this server

CapabilityDetails
tools
{
  "listChanged": false
}
prompts
{
  "listChanged": false
}
resources
{
  "subscribe": false,
  "listChanged": false
}
experimental
{}

Tools

Functions exposed to the LLM to take actions

NameDescription
get_project_overviewA

Return a Markdown overview of the Symfony project.

Reads composer.json, symfony.lock (or composer.lock), and .env to report:

  • PHP version requirement

  • Exact Symfony version installed

  • All installed packages, grouped by category

  • PSR-4 autoload namespaces

  • Composer scripts

  • APP_ENV setting

Call this tool first before using other tools to understand the project.

find_routeA

Find Symfony routes matching a URL pattern or route name.

Runs php bin/console debug:router --format=json and filters the results.

Args: url_pattern: Substring or regex to match against route paths and route names. Examples: "/api/users", "user_show", "^/admin" method: Optional HTTP method filter (GET, POST, PUT, PATCH, DELETE). Empty string = no filter (matches all methods).

Returns a Markdown table with: route name, path, allowed methods, controller. For single matches, the full route definition is included.

Requires PHP and bin/console to be accessible (configure via DOCKER_CONTAINER or PHP_EXECUTABLE if using Docker/DDEV/Lando).

analyze_twigA

Analyse a Twig template and return its structural metadata.

No PHP execution required – pure filesystem analysis.

Extracts:

  • extends parent (inheritance chain)

  • {% include %} and {% embed %} directives

  • {% import %} and {% from ... import %} macro imports

  • {% block %} definitions

  • Template variables referenced in {{ }} expressions

Args: template_name: Template path as used in Twig (e.g. "user/show.html.twig") or a partial name (e.g. "show" or "user/show"). The templates/ directory is searched recursively.

Returns a structured Markdown report.

list_servicesA

List Symfony service definitions.

Two modes:

  1. YAML mode (default, fast, no PHP required): Reads config/services.yaml directly. Shows explicitly defined services.

  2. Container debug mode (use_container_debug=true): Runs php bin/console debug:container --format=json. Shows the full compiled container including auto-wired services – useful for finding framework/bundle services.

Args: filter_pattern: Regex or substring to filter service IDs or class names. Examples: "App\Service", "mailer", "doctrine" Empty = show all defined services. use_container_debug: Set to true to query the full compiled DI container. Requires PHP and bin/console to be accessible.

Returns a Markdown table with: service ID, class, public flag, tags.

read_code_contextA

Read a file from the Symfony project, with optional comment stripping.

Stripping PHPDoc / block comments (/* ... */) significantly reduces token usage without losing functional information – use strip_doc_comments=true (the default) for faster, cheaper analysis.

Args: file_path: Path relative to the project root. Examples: "src/Controller/UserController.php" "src/Entity/User.php" Absolute paths inside the project are also accepted. strip_doc_comments: Remove /** ... / and / ... */ blocks. Default: true. strip_line_comments: Also remove // single-line comments. Default: false (inline comments are useful context).

Returns the file content with line numbers and a token-savings summary.

Security: only files inside the project root can be read (path traversal is blocked).

build_indexA

Scan PHP files and build (or update) the symbol index.

The index stores all classes, interfaces, traits, enums, and their methods so that find_symbol can locate any symbol instantly without re-scanning.

The index is persisted to /.symfony-mcp-index.json and loaded automatically on next server start. Only changed files are re-scanned (incremental), so subsequent calls are fast.

Args: directories: Directories to scan, relative to the project root. Default: auto-detected (src/, app/, lib/). Example: ["src", "lib"] force: Re-scan every file even if it hasn't changed. Use this after a major refactor or rename.

Run this once after pointing the server at a new project, then again after significant code changes.

find_symbolA

Search the symbol index for a PHP class, interface, trait, enum, or method.

Returns file paths and line numbers — use the result directly with read_code_context to inspect the implementation.

Requires build_index to have been run at least once.

Args: name: Name to search for (case-insensitive substring or full name). Examples: "UserController", "UserRepo", "findByEmail", "App\Entity" kind: Optional filter. One of: class, interface, trait, enum, method. Empty = search all symbol types.

Typical workflow:

  1. build_index — index the project (once, or after big changes)

  2. find_symbol "Foo" — locate the file and line

  3. read_code_context — read the file for full implementation

search_codeA

Live regex/substring search across project files.

No index required — scans files directly each time. Useful for finding usages, checking for patterns, or searching non-PHP files.

Args: pattern: Python regex or plain substring to search for. Examples: "UserRepository", "findByEmail(", "#[Route" path_glob: Glob relative to project root. Default: /*.php Other examples: src//.php, templates/**/.twig, config/**/*.yaml, **/*.php context_lines: Lines of surrounding context to show (0–5). Default: 2. max_results: Max matching snippets to return (1–200). Default: 30.

Returns highlighted snippets with file path and line number.

Prompts

Interactive templates invoked by user choice

NameDescription

No prompts

Resources

Contextual data attached and managed by the client

NameDescription

No resources

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/maschmann/symfony-php-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server