MCP PHPCS Server
An MCP server that runs PHP_CodeSniffer (phpcs) and PHP Code Beautifier and Fixer (phpcbf) — lint PHP code against a coding standard and auto-fix violations directly from your MCP client.
Documentation
MCP PHPCS Server
A Model Context Protocol server that brings PHP_CodeSniffer into your AI coding workflow — lint PHP against your coding standard and auto-fix violations, straight from any MCP client.
Implemented in pure PHP with zero Composer dependencies. Drop it into any project or run it standalone — it speaks JSON-RPC 2.0 over stdio and works with Claude Desktop, Claude Code, Cursor, and any other MCP-compatible client.
Tools
| Tool | Description |
|---|---|
phpcs_check | Runs PHP_CodeSniffer against a file or directory and returns a readable report of violations. |
phpcbf_fix | Runs PHP Code Beautifier and Fixer (phpcbf) to automatically fix fixable violations. |
Both tools take a single required path (absolute or project-relative file/directory).
Requirements
- PHP 8.1+
phpcsandphpcbfbinaries available (via PHP_CodeSniffer, e.g. a project'svendor/binor a global install)
Quick start
-
Clone the repository (or copy it into your project):
git clone https://github.com/larspohlmann/mcp-phpcs-server.git -
Make the entrypoint executable:
chmod +x mcp-phpcs-server/bin/mcp-phpcs -
Register it with your MCP client (see below).
Configuration
Configure via environment variables or config/config.json. Environment variables take precedence.
| Variable | config.json key | Description | Default |
|---|---|---|---|
MCP_PHPCS_PATH | phpcsPath | Path to the phpcs binary | phpcs on PATH |
MCP_PHPCBF_PATH | phpcbfPath | Path to the phpcbf binary | phpcbf on PATH |
MCP_PHPCS_RULESET | rulesetPath | Path to a coding-standard ruleset | auto-discovered |
If no ruleset is provided, the server searches upward from the current working directory for one of phpcs.xml, phpcs.xml.dist, or ruleset.xml.
Client setup
Claude Desktop / Claude Code
Add the server to your MCP config:
{
"mcpServers": {
"phpcs": {
"command": "/absolute/path/to/mcp-phpcs-server/bin/mcp-phpcs",
"env": {
"MCP_PHPCS_PATH": "/usr/local/bin/phpcs",
"MCP_PHPCBF_PATH": "/usr/local/bin/phpcbf",
"MCP_PHPCS_RULESET": "/path/to/your/phpcs.xml"
}
}
}
}
Then ask your assistant something like "Run phpcs on src/Service/UserService.php and fix what you can."
Example tool call
{
"name": "phpcs_check",
"arguments": { "path": "src/Service/UserService.php" }
}
Architecture
The server follows a light Domain-Driven Design layout:
src/Domain— tool contracts and result value objectssrc/Application— JSON-RPC MCP server and tool registrysrc/Infrastructure— process runner, config, ruleset discovery, tool implementationsbin/mcp-phpcs— stdio entrypoint
It implements the MCP methods initialize, tools/list, and tools/call.
Notes
- STDOUT carries only JSON-RPC messages; all logs go to STDERR.
- A non-zero exit code from
phpcsmeans violations were found — it is reported as findings, not treated as a fatal error.