Skip to main content
Glama
p4it-kft

Phpactor MCP Server

by p4it-kft
README.md
# Phpactor MCP Server

MCP server that wraps [Phpactor](https://phpactor.readthedocs.io/en/master/) to provide project-wide **semantic** PHP refactoring tools for AI assistants (Claude Code, etc.).

## What it does

Exposes 6 tools that require Phpactor's type-aware engine — things a text-based AI cannot reliably do with grep:

| Tool | Description |
|---|---|
| `phpactor_index_build` | Build/rebuild project index (prerequisite for other tools) |
| `phpactor_find_references` | Find all semantic references to a class or member |
| `phpactor_rename_class` | Rename class + update ALL references project-wide |
| `phpactor_rename_member` | Rename method/property/constant project-wide |
| `phpactor_move_class` | Move class to new file/namespace + update references |
| `phpactor_class_info` | Query class info (implements, implementations) |

See [docs/spec.md](docs/spec.md) for full specification.

## Prerequisites

- **Node.js** >= 18
- **Phpactor** installed and available in PATH (or set `PHPACTOR_BIN` env var)
  ```bash
  # Install Phpactor (PHAR)
  curl -Lo phpactor https://github.com/phpactor/phpactor/releases/latest/download/phpactor.phar
  chmod +x phpactor
  mv phpactor ~/.local/bin/
  ```
- **PHP** >= 8.1
- A PHP project with **Composer** and **PSR-4 autoload** configured

### Yii2 / non-PSR-4 projects

Phpactor requires PSR-4 autoload mappings. For Yii2 projects, add this to `composer.json`:

```json
{
  "autoload": {
    "psr-4": {
      "common\\": "common/",
      "backend\\": "backend/",
      "frontend\\": "frontend/",
      "console\\": "console/",
      "modules\\": "modules/"
    }
  }
}
```

Then run `composer dump-autoload`.

## Install

```bash
npm install -g @p4it-kft/phpactor-mcp
```

No build step needed — the package is published prebuilt to npm.

### From source (development)

```bash
git clone https://github.com/p4it-kft/@p4it-kft/phpactor-mcp
cd @p4it-kft/phpactor-mcp
npm install
npm run build
```

## Configure in Claude Code

Add to `~/.claude/settings.json` (or project-level `.claude/settings.json`):

```json
{
  "mcpServers": {
    "phpactor": {
      "command": "npx",
      "args": ["-y", "@p4it-kft/phpactor-mcp"]
    }
  }
}
```

Optionally set `PHPACTOR_BIN` if Phpactor is not in PATH:

```json
{
  "mcpServers": {
    "phpactor": {
      "command": "npx",
      "args": ["-y", "@p4it-kft/phpactor-mcp"],
      "env": {
        "PHPACTOR_BIN": "/path/to/phpactor"
      }
    }
  }
}
```

## Usage

Once configured, the tools are available to Claude. Typical workflow:

1. **Build the index first** — Claude calls `phpactor_index_build` with your project path
2. **Use tools** — find references, rename, move classes as needed
3. **Rebuild index** after significant file changes

## Testing

```bash
# Run all integration tests (requires tmp/p4it-website test project)
bash test-phpactor.sh
```

## Development

```bash
npm run dev    # Watch mode — recompiles on changes
npm run build  # One-time build
```

TDQS

A4.1/5.0

Scored across 6 tools

Disambiguation5/5

Each tool has a clearly distinct purpose: class info, find references, build index, move class, rename class (only references), rename member. The descriptions explicitly contrast move_class vs rename_class, so an agent can easily differentiate.

Naming Consistency4/5

All tools start with 'phpactor_' and use snake_case, but the verb_noun pattern is not fully consistent: 'class_info' and 'index_build' deviate slightly. However, the overall pattern is predictable and readable.

Tool Count5/5

6 tools is well-scoped for a PHP code intelligence server, covering indexing, querying, and refactoring. No tool is redundant, and the count is appropriate for the domain.

Completeness4/5

The tool set covers core operations (index, inspect, move/rename class, rename member) but lacks capabilities like listing classes or getting method details. Minor gaps exist, but the surface is usable for common tasks.

Maintenance

ActivityInactive
ResponsivenessNo issues