A Model Context Protocol (MCP) server for RollDev + Magento 2 development environments. This server enables Claude and other LLMs to interact with RollDev projects, manage environments, execute commands, and initialize new Magento 2 projects seamlessly.
- Environment Control: List, start, and stop RollDev project environments
- Service Management: Control RollDev system services (database, Redis, OpenSearch, etc.)
- Project Initialization: Create new Magento 2 projects with automatic configuration
- Database Operations: Execute SQL queries directly in project databases
- PHP Script Execution: Run PHP scripts within project containers
- Magento CLI Access: Execute Magento commands through
roll magento - Composer Integration: Run Composer commands in project environments
- Command Timeouts: All commands have appropriate timeouts to prevent hanging (5-15 min depending on operation)
- Output File Redirection: Option to save command output to log files for later investigation
- RollDev installed and configured
- Node.js 18+
- Active RollDev project environments (for some operations)
{
"mcpServers": {
"rolldev": {
"command": "npx",
"args": [
"-y",
"@disrex/rolldev-mcp-server"
]
}
}
}Add this configuration to your Claude for Desktop config file:
- macOS:
~/Library/Application Support/Claude/claude_desktop_config.json - Windows:
%APPDATA%\Claude\claude_desktop_config.json
- Clone this repository:
git clone https://github.com/dockergiant/rolldev-mcp-server.git
cd rolldev-mcp-server- Install dependencies:
npm install- Add to Claude configuration:
{
"mcpServers": {
"rolldev": {
"command": "node",
"args": ["/path/to/rolldev-mcp-server/server.js"]
}
}
}Lists all running RollDev environments with structured information including project names, paths, URLs, Docker networks, and container counts.
Starts a RollDev project environment.
- project_path: Path to the project directory
Stops a RollDev project environment.
- project_path: Path to the project directory
Starts RollDev system services.
- project_path: Path to the project directory
Stops RollDev system services.
- project_path: Path to the project directory
Executes SQL queries in project databases.
- project_path: Path to the project directory
- query: SQL query to execute
- database: Database name (optional, defaults to "magento")
Runs PHP scripts inside project containers.
- project_path: Path to the project directory
- script_path: Path to PHP script relative to project root
- args: Additional arguments (optional)
Executes Magento CLI commands (5 minute timeout).
- project_path: Path to the project directory
- command: Magento command (without 'bin/magento' prefix)
- args: Additional arguments (optional)
- save_output_to_file: Save full output to a log file (optional, default: false)
Runs Composer commands in project environments (10 minute timeout).
- project_path: Path to the project directory
- command: Composer command (e.g., "install", "update", "require symfony/console")
- save_output_to_file: Save full output to a log file (optional, default: false)
Initializes new Magento 2 projects with automatic configuration (15 minute timeout).
- project_name: Project name (lowercase, letters, numbers, hyphens only)
- magento_version: Magento version (optional, defaults to "2.4.x")
- target_directory: Target directory (optional, defaults to current directory)
These tools read from Roll Inspector (https://inspector.<TRAEFIK_DOMAIN>) and never change the environment. Each takes project_path, reads ROLL_ENV_NAME, TRAEFIK_DOMAIN and ROLL_INSPECTOR the way roll does (${ROLL_HOME_DIR:-~/.roll}/.env.roll, then .env there, then the nearest project .env.roll, each overriding the one before), and accepts save_output_to_file like the tools above. Output is compact text plus a JSON block. Anything over 60,000 characters is cut off with a hint to use save_output_to_file.
| Tool | Returns |
|---|---|
rolldev_inspector_overview |
Service health, warnings and their copyable fixes |
rolldev_inspector_traces |
Trace list with cost split per category. Filters: route, min_ms, sort, limit |
rolldev_inspector_trace |
Analysis of one trace id: cost per category, hot spans, repeated (N+1) calls, slowest calls. Raw spans only with include_spans, capped at 200 by self time |
rolldev_inspector_hotspots |
Slowest routes, most expensive operations and repeated calls across all stored traces. limit sets the rows per section |
rolldev_inspector_request |
Timeline entry for a url (or xid): Varnish result and the PHP, cache and search lanes. limit returns more matches, newest first |
rolldev_inspector_service |
section health (default) or info of kind varnish, redis, search or rabbitmq |
Connection details:
- The tool connects with
node:httpsand trusts roll's root CA from${ROLL_SSL_DIR}/rootca/certs/ca.cert.pem.ROLL_SSL_DIRdefaults to${ROLL_HOME_DIR}/sslandROLL_HOME_DIRto~/.roll, as inbin/roll. Set either variable in the MCP server's environment to override. - Requests time out after 10 seconds.
- With
ROLL_INSPECTORunset or0, the tool answers with the fix: setROLL_INSPECTOR=1in.env.rolland runroll env up. - It reports a stopped Inspector container (
roll env up), certificate problems (roll sign-certificate <domain>), an unresolvable host and a 403 from the gate in plain words. rolldev_inspector_traceandrolldev_inspector_hotspotsneed an Inspector image with the analysis and hotspots endpoints. Older images get a message to update.
Trace and hotspot answers need the project's .env.roll to have ROLL_INSPECTOR=1 and ROLL_INSPECTOR_TRACE=1. Varnish HITs have no trace, so rolldev_inspector_request finds nothing for them. User docs: roll-docker-stack/docs/inspector/api-and-extensions.md.
The logic lives in inspector.cjs, and test/inspector.test.js runs it against a fake transport.
Here are some example interactions you can try with Claude after setting up the RollDev MCP server:
- "Can you list all my RollDev environments?"
- "Start the project at /path/to/my-magento-project"
- "Stop the services for my current project"
- "Run the query 'SELECT * FROM admin_user LIMIT 5' in my project"
- "Show me all enabled modules in the database"
- "Check the current configuration values for my store"
- "Execute 'cache:flush' Magento command in my project"
- "Run 'setup:upgrade' on my Magento installation"
- "List all available Magento CLI commands"
- "Initialize a new Magento 2.4.7 project called 'my-store'"
- "Create a Magento project with the latest version in /Users/dev/projects"
- "Install dependencies with Composer in my project"
- "Require the symfony/console package in my project"
- "Run setup:upgrade and save the output to a file for investigation"
- "Execute composer install with output saved to a log file"
These prompts only read; no Inspector tool purges, flushes or switches anything. 16. "Why is /category-1.html slow? Check the Inspector trace" 17. "Show the Inspector hotspots for this project" 18. "Which routes in this project repeat the same SQL query (N+1)?" 19. "Is RabbitMQ healthy? Ask Inspector for the overview" 20. "Was the last request to /checkout/cart a Varnish MISS, and why?"
# Start in development mode with debugging
npm run dev
# Run tests
npm testYou can test the server using the MCP Inspector:
npx @modelcontextprotocol/inspector node server.js- Fork the repository from dockergiant/rolldev-mcp-server
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
This project is licensed under the MIT License - see the LICENSE file for details.
If you encounter any issues or have questions:
- Check the GitHub Issues section
- Consult the MCP documentation at modelcontextprotocol.io
- Open a new issue with detailed reproduction steps
