Symfony AI - Mate Component
The Mate component provides an MCP (Model Context Protocol) server that enables AI assistants to interact with PHP applications (including Symfony) through standardized tools. This is a development tool, not intended for production use.
Installation
1
$ composer require --dev symfony/ai-mate
Purpose
Symfony AI Mate is a development tool that creates a local MCP server to enhance your AI assistant (JetBrains AI, Claude, GitHub Copilot, Cursor, etc.) with specific knowledge about your PHP application and development environment.
Important: This is intended for development and debugging only, not for production deployment.
This is the core package that creates and manages your MCP server. It works with any PHP application - while it includes Symfony-specific tools via bridges, the core functionality is framework-agnostic.
Quick Start
Install with composer:
1
$ composer require --dev symfony/ai-mate
Initialize configuration:
1
$ vendor/bin/mate init
This creates:
.mate/directory with configuration filesmate/directory for custom extensionsmcp.jsonfor MCP client configuration
It also updates your composer.json with the following configuration:
1 2 3 4 5 6 7 8 9 10 11 12 13
{
"autoload": {
"psr-4": {
"App\\Mate\\": "mate/"
}
},
"extra": {
"ai-mate": {
"scan-dirs": ["mate"],
"includes": ["services.php"]
}
}
}
After running mate init, update your autoloader:
1
$ composer dump-autoload
Discover available extensions:
1
$ vendor/bin/mate discover
Start the MCP server:
1
$ vendor/bin/mate serve
Add Custom Tools
The easiest way to add tools is to create a mate folder next to your src and tests directories,
then add a class with a method using the #[McpTool] attribute:
1 2 3 4 5 6 7 8 9 10 11 12 13
// mate/MyTool.php
namespace App\Mate;
use Mcp\Capability\Attribute\McpTool;
class MyTool
{
#[McpTool(name: 'my_tool', description: 'My custom tool')]
public function execute(string $param): array
{
return ['result' => $param];
}
}
More about attributes and how to configure Prompts, Resources and more can be found at the MCP SDK documentation.
Configuration
The configuration folder is called .mate and is located in your project's root directory.
It contains two important files:
.mate/extensions.php- Enable/disable extensions.mate/services.php- Configure settings
Tip
The folder and default configuration is automatically generated by running mate init.
Extensions Configuration
1 2 3 4 5 6 7 8
// .mate/extensions.php
// This file is managed by 'mate discover'
// You can manually edit to enable/disable extensions
return [
'vendor/package-name' => ['enabled' => true],
'vendor/another-package' => ['enabled' => false],
];
Services Configuration
1 2 3 4 5 6 7 8 9 10 11 12 13 14
// .mate/services.php
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
return static function (ContainerConfigurator $container): void {
$container->parameters()
// Override default parameters here
// ->set('mate.cache_dir', sys_get_temp_dir().'/mate')
// ->set('mate.env_file', ['.env'])
;
$container->services()
// Register your custom services here
;
};
Disabling Specific Features
Use the MateHelper class to disable specific features:
1 2 3 4 5 6 7 8
use Symfony\AI\Mate\Container\MateHelper;
use Symfony\Component\DependencyInjection\Loader\Configurator\ContainerConfigurator;
return static function (ContainerConfigurator $container): void {
MateHelper::disableFeatures($container, [
'symfony/ai-mate' => ['php-version', 'operating-system'],
]);
};
Environment Variables
Use %env(VAR_NAME)% syntax in service configuration to reference environment variables.
See the Symfony documentation on environment variables for more information.
Adding Third-Party Extensions
Install the package:
1
$ composer require vendor/symfony-toolsDiscover available tools (auto-generates/updates
.mate/extensions.php):1
$ vendor/bin/mate discoverOptionally disable specific extensions:
1 2 3 4 5
// .mate/extensions.php return [ 'vendor/symfony-tools' => ['enabled' => true], 'vendor/unwanted-tools' => ['enabled' => false], ];
To create a third party extension, see Creating MCP Extensions.
Available Bridges
Symfony Bridge
The Symfony bridge (symfony/ai-symfony-mate-extension) provides container introspection tools
for Symfony applications:
symfony-services- List all Symfony services from the compiled container
Configure the cache directory:
1 2
$container->parameters()
->set('ai_mate_symfony.cache_dir', '%root_dir%/var/cache');
Troubleshooting
Container not found:
Ensure the cache directory parameter points to the correct location. The bridge looks for
the compiled container XML file (e.g., App_KernelDevDebugContainer.xml) in the cache directory.
Services not appearing:
- Clear Symfony cache:
bin/console cache:clear - Ensure the container is compiled (warm up cache)
- Verify the container XML file exists in the cache directory
Monolog Bridge
The Monolog bridge (symfony/ai-monolog-mate-extension) provides log search and analysis tools:
monolog-search- Search log entries by text term with optional filtersmonolog-search-regex- Search log entries using regex patternsmonolog-context-search- Search logs by context field valuemonolog-tail- Get the last N log entriesmonolog-list-files- List available log filesmonolog-list-channels- List all log channelsmonolog-by-level- Get log entries filtered by level
Configure the log directory:
1 2
$container->parameters()
->set('ai_mate_monolog.log_dir', '%root_dir%/var/log');
Troubleshooting
Logs not found:
Ensure the log directory parameter points to the correct location where your Monolog log files are stored.
Log parsing errors:
- Verify log format is standard Monolog line format or JSON
- Check file permissions on log files
- Ensure log files are not empty or corrupted
Built-in Tools
The core package provides basic system information tools:
php-version- Get the PHP versionoperating-system- Get the operating systemoperating-system-family- Get the OS familyphp-extensions- List loaded PHP extensions
Commands
mate init-
Initialize AI Mate configuration and create the
.mate/directory. mate discover-
Scan for MCP extensions in installed packages. This command will:
- Scan your vendor directory for packages with
extra.ai-mateconfiguration - Generate or update
.mate/extensions.phpwith discovered extensions - Preserve existing enabled/disabled states for known extensions
- Default new extensions to enabled
- Scan your vendor directory for packages with
mate serve- Start the MCP server with stdio transport.
mate clear-cache- Clear the MCP server cache.
Security
For security, no vendor extensions are enabled by default. You must explicitly enable packages
in .mate/extensions.php by setting their enabled flag to true.
The local mate/ directory is always enabled for rapid development.