A Model Context Protocol (MCP) server that integrates WordPress Coding Standards (WPCS) with Claude AI. Automatically check and fix your WordPress plugin/theme code to meet WordPress.org standards.
Don't use Claude AI? No problem! See GIT-HOOKS-SETUP.md for standalone Git hooks, GitHub Actions, and CI/CD setup.
For automatic WPCS checks on every commit without Claude AI:
curl -sSL https://raw.githubusercontent.com/vapvarun/wpcs-mcp-server/main/scripts/install-hooks.sh | bashThis installs phpcs + WPCS + PHPCompatibility and sets up pre-commit hooks in your current repo.
If you're developing WordPress plugins or themes, your code must follow WordPress Coding Standards to:
- ✅ Get approved on WordPress.org plugin/theme directory
- ✅ Write consistent, readable code
- ✅ Follow security best practices
- ✅ Make your code maintainable
This MCP server lets Claude AI automatically check and fix your PHP code against WPCS before you commit.
Before installing, ensure you have all requirements:
| Requirement | Minimum Version | Check Command | Install Guide |
|---|---|---|---|
| Node.js | 18+ | node -v |
nodejs.org |
| PHP | 8.2+ | php -v |
See PHP Setup below |
| Composer | 2.0+ | composer -V |
getcomposer.org |
| Claude Desktop or Claude Code | Latest | claude --version |
claude.ai |
macOS with Laravel Herd (Recommended)
# Herd installs PHP at:
# ~/Library/Application Support/Herd/bin/php
# Verify Herd PHP
~/Library/Application\ Support/Herd/bin/php -v
# Should show PHP 8.2+
# Herd also provides Composer at:
# ~/Library/Application Support/Herd/bin/composermacOS with Homebrew
# Install PHP 8.4
brew install php@8.4
# Add to PATH in ~/.zshrc
export PATH="/opt/homebrew/opt/php@8.4/bin:$PATH"
# Verify
php -vmacOS with MAMP
# MAMP PHP location
/Applications/MAMP/bin/php/php8.2.x/bin/php
# Add to PATH in ~/.zshrc
export PATH="/Applications/MAMP/bin/php/php8.2.x/bin:$PATH"Windows
# Install via Chocolatey
choco install php --version=8.4
# Or download from php.net and add to PATHLinux (Ubuntu/Debian)
sudo apt update
sudo apt install php8.2 php8.2-cli composergit clone https://github.com/vapvarun/wpcs-mcp-server.git ~/.mcp-servers/wpcs-mcp-server
cd ~/.mcp-servers/wpcs-mcp-server
npm install --include=dev && npm run buildImportant: Use
npm install --include=devto ensure TypeScript compiler is available for building.
The server attempts auto-install, but for reliability, install manually:
# Allow the composer installer plugin
composer global config allow-plugins.dealerdirect/phpcodesniffer-composer-installer true
# Install phpcs, WPCS, and PHPCompatibility
composer global require squizlabs/php_codesniffer wp-coding-standards/wpcs phpcompatibility/phpcompatibility-wp dealerdirect/phpcodesniffer-composer-installer
# Verify installation
~/.composer/vendor/bin/phpcs -i
# Should show: WordPress, WordPress-Core, WordPress-Docs, WordPress-Extra, PHPCompatibility, PHPCompatibilityWPChoose your setup method:
Option A: Using CLI Command (Global)
claude mcp add wpcs --scope user -- node ~/.mcp-servers/wpcs-mcp-server/build/index.jsThen manually add the PATH environment in ~/.claude.json:
{
"mcpServers": {
"wpcs": {
"type": "stdio",
"command": "node",
"args": ["/Users/YOUR_USERNAME/.mcp-servers/wpcs-mcp-server/build/index.js"],
"env": {
"PATH": "/Users/YOUR_USERNAME/Library/Application Support/Herd/bin:/Users/YOUR_USERNAME/.composer/vendor/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin"
}
}
}
}Option B: Manual Configuration (Global)
Add to ~/.claude.json under the mcpServers key at root level:
{
"mcpServers": {
"wpcs": {
"type": "stdio",
"command": "node",
"args": ["/Users/YOUR_USERNAME/.mcp-servers/wpcs-mcp-server/build/index.js"],
"env": {
"PATH": "/Users/YOUR_USERNAME/Library/Application Support/Herd/bin:/Users/YOUR_USERNAME/.composer/vendor/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin"
}
}
}
}Option C: Project-Level Configuration
Add to ~/.claude.json under a specific project:
{
"projects": {
"/path/to/your/wordpress-project": {
"mcpServers": {
"wpcs": {
"type": "stdio",
"command": "node",
"args": ["/Users/YOUR_USERNAME/.mcp-servers/wpcs-mcp-server/build/index.js"],
"env": {
"PATH": "/Users/YOUR_USERNAME/Library/Application Support/Herd/bin:/Users/YOUR_USERNAME/.composer/vendor/bin:/usr/local/bin:/usr/bin:/bin"
}
}
}
}
}
}macOS - Edit ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"wpcs": {
"command": "node",
"args": ["/Users/YOUR_USERNAME/.mcp-servers/wpcs-mcp-server/build/index.js"],
"env": {
"PATH": "/Users/YOUR_USERNAME/Library/Application Support/Herd/bin:/Users/YOUR_USERNAME/.composer/vendor/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin"
}
}
}
}Windows - Edit %APPDATA%\Claude\claude_desktop_config.json:
{
"mcpServers": {
"wpcs": {
"command": "node",
"args": ["C:\\Users\\YOUR_USERNAME\\.mcp-servers\\wpcs-mcp-server\\build\\index.js"],
"env": {
"PATH": "C:\\php;C:\\Users\\YOUR_USERNAME\\AppData\\Roaming\\Composer\\vendor\\bin;%PATH%"
}
}
}
}Choose the correct PATH based on your PHP installation:
| PHP Setup | PATH Value |
|---|---|
| Herd (macOS) | ~/Library/Application Support/Herd/bin:~/.composer/vendor/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin |
| Homebrew (macOS) | /opt/homebrew/opt/php@8.4/bin:~/.composer/vendor/bin:/opt/homebrew/bin:/usr/local/bin:/usr/bin:/bin |
| MAMP (macOS) | /Applications/MAMP/bin/php/php8.2.x/bin:~/.composer/vendor/bin:/usr/local/bin:/usr/bin:/bin |
| System PHP (Linux) | ~/.composer/vendor/bin:/usr/local/bin:/usr/bin:/bin |
| Windows | C:\php;C:\Users\YOU\AppData\Roaming\Composer\vendor\bin |
Important: Replace
~with your full home path (e.g.,/Users/yourname) in JSON configs.
# Check MCP server status
claude mcp list
# Should show:
# wpcs: node ~/.mcp-servers/wpcs-mcp-server/build/index.js - ✓ Connectedcd ~/.mcp-servers/wpcs-mcp-server
PATH="YOUR_PHP_PATH:$HOME/.composer/vendor/bin:$PATH" node build/index.js
# Should output:
# Starting WPCS MCP Server...
# phpcs path: /Users/you/.composer/vendor/bin/phpcs
# Available standards: ... WordPress, WordPress-Core, WordPress-Docs, WordPress-Extra, PHPCompatibility ...
# WPCS MCP Server running on stdio| Tool | What It Does |
|---|---|
wpcs_pre_commit |
Most useful! Auto-fix staged files, re-stage, report remaining issues |
wpcs_check_staged |
Check all staged PHP files before commit |
wpcs_check_file |
Check a single PHP file |
wpcs_check_directory |
Check all PHP files in a directory |
wpcs_fix_file |
Auto-fix WPCS violations in a file |
wpcs_check_php_compatibility |
Check PHP 8.1/8.2/8.3/8.4 compatibility |
Just ask Claude in natural language:
"Check my staged files for WPCS issues"
"Run wpcs_pre_commit before I commit"
"Fix WPCS issues in includes/class-my-plugin.php"
"Check the entire src/ directory for coding standards"
"Check PHP 8.2 compatibility for my plugin"
"Is my code compatible with PHP 8.1 to 8.4?"
- Write your WordPress plugin/theme code
- Stage your changes:
git add . - Ask Claude: "Run wpcs_pre_commit"
- Claude will:
- Auto-fix what can be fixed (spacing, formatting, etc.)
- Re-stage the fixed files
- Report any remaining issues that need manual fixes
- Commit your clean code!
The WordPress ruleset includes:
| Standard | What It Checks |
|---|---|
| WordPress-Core | Naming conventions, spacing, formatting, PHP compatibility |
| WordPress-Extra | Discouraged functions, loose comparisons, Yoda conditions |
| WordPress-Docs | PHPDoc comments, inline documentation |
- ❌
if($x == true)→ ✅if ( true === $x ) - ❌ Missing spaces in function calls
- ❌ Using
extract(),eval(),create_function() - ❌ Missing or incorrect PHPDoc blocks
- ❌ Incorrect text domain in translations
- ❌ Direct database queries without preparation
Check if your code works with PHP 8.1, 8.2, 8.3, and 8.4:
"Check PHP 8.2 compatibility for src/"
"Is my plugin compatible with PHP 8.1-8.4?"
| Issue Type | Example |
|---|---|
| Removed Functions | create_function() removed in PHP 8.0 |
| Deprecated Features | ${var} string interpolation deprecated in 8.2 |
| New Syntax | Named arguments require PHP 8.0+ |
| Type Changes | Return type changes in built-in functions |
| Removed Constants | FILTER_SANITIZE_STRING removed in 8.1 |
"8.1" → Check for PHP 8.1 compatibility only
"8.2" → Check for PHP 8.2 compatibility only
"7.4-" → Check PHP 7.4 and all newer versions
"8.1-8.4" → Check PHP 8.1 through 8.4 compatibility
WordPress.org requires PHP 7.4+ minimum, so use "7.4-" to ensure broad compatibility.
Add to ~/.claude/settings.json:
{
"permissions": {
"allow": [
"mcp__wpcs__wpcs_check_staged",
"mcp__wpcs__wpcs_check_file",
"mcp__wpcs__wpcs_check_directory",
"mcp__wpcs__wpcs_fix_file",
"mcp__wpcs__wpcs_pre_commit",
"mcp__wpcs__wpcs_check_php_compatibility"
]
}
}Add a Claude Code hook to automatically check WPCS before every commit.
Create ~/.claude/hooks/wpcs-pre-commit.sh:
#!/bin/bash
export PATH="$HOME/.composer/vendor/bin:$PATH"
STAGED_PHP=$(git diff --cached --name-only --diff-filter=ACM | grep -E '\.php$' || true)
if [ -z "$STAGED_PHP" ]; then
exit 0
fi
PHP_COUNT=$(echo "$STAGED_PHP" | wc -l | tr -d ' ')
echo "WPCS: Found $PHP_COUNT staged PHP file(s). Run wpcs_pre_commit to check."
exit 0Add to ~/.claude/settings.json:
{
"hooks": {
"PreToolUse": [
{
"matcher": "Bash(git commit*)",
"hooks": [
{
"type": "command",
"command": "bash \"$HOME/.claude/hooks/wpcs-pre-commit.sh\""
}
]
}
]
}
}Most common cause: Wrong PHP version in PATH.
# Check which PHP the MCP server sees
cd ~/.mcp-servers/wpcs-mcp-server
PATH="YOUR_CONFIG_PATH" node build/index.js 2>&1 | head -5
# If you see "PHP Fatal error: Composer detected issues... require PHP >= 8.2"
# Your PATH doesn't include PHP 8.2+Fix: Update the PATH in your MCP config to include your PHP 8.2+ binary directory FIRST.
# Install manually
composer global config allow-plugins.dealerdirect/phpcodesniffer-composer-installer true
composer global require squizlabs/php_codesniffer wp-coding-standards/wpcs phpcompatibility/phpcompatibility-wp dealerdirect/phpcodesniffer-composer-installer
# Verify
~/.composer/vendor/bin/phpcs --version# Check available standards
~/.composer/vendor/bin/phpcs -i
# If WordPress not listed, reinstall:
composer global remove wp-coding-standards/wpcs dealerdirect/phpcodesniffer-composer-installer
composer global require wp-coding-standards/wpcs dealerdirect/phpcodesniffer-composer-installercd ~/.mcp-servers/wpcs-mcp-server
rm -rf node_modules
npm install --include=dev
npm run buildThis happens when:
- PHP version is too old (need 8.2+)
- Composer version is too old (need 2.0+)
- Network issues
Fix: Install dependencies manually (see Step 2 above).
- Verify the path in your config uses absolute paths (no
~) - Ensure you ran
npm run build - Restart Claude Desktop completely (quit and reopen)
- Check the path exists:
ls -la ~/.mcp-servers/wpcs-mcp-server/build/index.js
git clone https://github.com/vapvarun/wpcs-mcp-server.git
cd wpcs-mcp-server
npm install --include=dev
npm run build
# Watch mode for development
npm run devUse this checklist to ensure everything is configured correctly:
- Node.js 18+ installed (
node -v) - PHP 8.2+ installed and in PATH (
php -v) - Composer 2.0+ installed (
composer -V) - Repository cloned to
~/.mcp-servers/wpcs-mcp-server - Built with dev dependencies (
npm install --include=dev && npm run build) - WPCS installed globally via Composer
- phpcs shows WordPress standards (
~/.composer/vendor/bin/phpcs -i) - MCP config added to
~/.claude.jsonor Claude Desktop config - PATH includes PHP binary directory in MCP env config
- PATH includes composer/vendor/bin in MCP env config
- Server shows Connected (
claude mcp list)
GPL-2.0-or-later
Varun Dubey (@vapvarun)
- Website: wbcomdesigns.com
- Email: varun@wbcomdesigns.com
Contributions are welcome! Please feel free to submit a Pull Request.