PHPocalypse-MCP
@plapinski
MCP server for vibe developers that are too busy to run tests and static analysis.
Overview
What is PHPocalypse-MCP?
PHPocalypse-MCP is an MCP (Model Context Protocol) server that lets LLM-powered coding tools execute PHP development commands—such as static analysis, code style fixes, and test suites—by running user-defined commands from a YAML configuration file. It is aimed at developers who want to delegate running PHP tools to their AI assistant.
How to use PHPocalypse-MCP?
Clone the repository, run npm install, and add an MCP server entry in your Cursor settings (or other MCP-compatible editor). The entry points npx tsx at src/index.ts with a --config argument pointing to a phpocalypse-mcp.yaml file in your PHP project. Then create that YAML file and define the tools you want the LLM to invoke (e.g., php-cs-fixer, phpstan, tests-unit).
Key features of PHPocalypse-MCP
- Define PHP tools by name and shell command in a YAML config.
- Works with any PHP project structure.
- Supports arbitrary commands (e.g.,
make,docker compose,vendor/bin/*). - Intended for non-interactive CLI output.
- Proof-of-concept; interactive prompts are not supported.
Use cases of PHPocalypse-MCP
- Run PHPStan static analysis from an AI chat without leaving the editor.
- Execute PHP-CS-Fixer code style corrections on demand.
- Run both unit and Behat test suites via a single LLM command.
- Automate quality checks without manual terminal switching.
FAQ from PHPocalypse-MCP
What prerequisites are needed?
You need Node.js, npx, and tsx installed on your system.
How do I define tools in the YAML config?
Create a phpocalypse-mcp.yaml file with a tools array, each entry requiring a name and a command string. Example tools: php-cs-fixer, phpstan, tests-unit, tests-behat.
What will not work with this MCP server?
Any interactive CLI input will not work. For example, Behat prompts for snippet generation must be run in non-interactive mode (using --no-interaction or similar flags).
Are there known limitations?
Yes. Larger command outputs are not handled correctly yet. To work around this, try using claude-3.7-sonnet as the LLM or craft your commands to produce shorter, meaningful output.
Does the server support authentication or multiple transport types?
The README only describes a local stdio-based transport (via npx command). No authentication details are mentioned.