OpenCode plugin for AI-assisted C++ legacy code refactoring and new feature development with MCP-driven safety nets.
┌─────────────────────────────────────────────────────────────┐
│ opencode │
│ │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ NPM Plugin: opencode-cpp-refactory │ │
│ │ ├── 17 custom tools (bash scripts + TS modules) │ │
│ │ ├── Event hooks (session / tool-guard / env-inject) │ │
│ │ └── MCP client ─────────────────┐ │ │
│ └───────────────────────────────────┼────────────────────┘ │
│ │ stdio (JSON-RPC 2.0) │
└──────────────────────────────────────┼──────────────────────┘
│
┌──────────────▼──────────────────┐
│ Docker Container (user-managed) │
│ └── clang-ast-mcp server │
│ ├── ASTEngine (libclang-18) │
│ ├── list_functions │
│ ├── globals_finder │
│ ├── virtual_calls │
│ └── macro_jungle │
└──────────────────────────────────┘
Three components, each with its own role:
| Component | What | How |
|---|---|---|
| NPM Plugin | Entry point — tools, hooks, workflow enforcement | npm install opencode-cpp-refactory |
| MCP | Communication protocol (JSON-RPC over stdio) | Configured in opencode.json |
| Docker | clang-ast-mcp server runtime (user builds & runs) | docker build + docker run |
This plugin requires the OpenCode fork with plugin and MCP support. Install it first:
Linux:
curl -fsSL https://github.com/LeXwDeX/opencode/releases/latest/download/opencode-linux-x64.tar.gz | tar xz
sudo mv opencode /usr/local/bin/macOS (Apple Silicon):
curl -fsSL -o opencode.zip https://github.com/LeXwDeX/opencode/releases/latest/download/opencode-darwin-arm64.zip
unzip opencode.zip && sudo mv opencode /usr/local/bin/Windows:
Invoke-WebRequest -Uri "https://github.com/LeXwDeX/opencode/releases/latest/download/opencode-windows-x64.zip" -OutFile opencode.zip
Expand-Archive opencode.zip -DestinationPath .
# Move opencode.exe to a directory in your PATHVerify installation:
opencode --versionNode.js >= 18.0.0 is required (for the NPM plugin).
Docker Engine >= 20.10 is required (for the clang-ast-mcp server).
npm install opencode-cpp-refactoryThe clang-ast-mcp server runs inside a Docker container with full LLVM/Clang 18 toolchain. Build it from this repo:
git clone https://github.com/LeXwDeX/Cpp_Refactory.git
cd Cpp_Refactory
docker build -t cpp-refactory -f docker/Dockerfile .The build automatically runs the test suite (42 assertions + E2E refactor tests). Any failure aborts the build.
Add both the plugin and the MCP server to your project's opencode.json:
{
"plugin": ["opencode-cpp-refactory"],
"mcp": {
"clang-ast": {
"type": "local",
"command": [
"docker", "run", "--rm", "-i",
"-v", "/path/to/your/cpp/project:/work:ro",
"cpp-refactory"
],
"enabled": true
}
}
}Configuration breakdown:
| Field | Purpose |
|---|---|
"plugin" |
Registers the NPM plugin with opencode |
"mcp.clang-ast" |
Tells opencode how to start the MCP server |
"-v ...:/work:ro" |
Mounts your C++ project read-only into the container |
"docker run -i" |
-i is required — MCP uses stdin/stdout for JSON-RPC |
Tip: Replace
/path/to/your/cpp/projectwith your actual project path. The container only reads your source files; all analysis happens in-memory.
Open opencode in your C++ project and call the cpp-bootstrap tool. If everything is wired correctly:
- Plugin hooks fire (
session.createdlogs appear) - MCP tools are available (
clang_ast_load,clang_ast_list_functions, etc.) cpp-bootstrapinitializes.cpp_refactory/workspace
- Open a C++ project in OpenCode
- Call
cpp-bootstrapto initialize.cpp_refactory/workspace - Call
cpp-scanto scan the project - Follow the 6-phase pipeline: scan → analyze → plan → execute → verify → record
These 17 tools are registered by the NPM plugin and available immediately after installation:
| Tool | Description |
|---|---|
cpp-scan |
Project pre-scan: C++ standard, file hotspots, god functions, #ifdef jungle index |
cpp-seam-finder |
Seam discovery via regex heuristics (fallback path, >30% false positive rate) |
cpp-bigfile-map |
Large file navigation map: Section Map + Function Index + Cut Points |
cpp-verify-tools |
Verify toolchain completeness (clang-tidy, cppcheck, bear, ccache) |
cpp-bootstrap |
Initialize cpp_refactory workspace in target project |
cpp-characterize |
Characterization test generation helper |
cpp-ast-cache |
AST disk cache management (stats/clean/list) |
ledger-init |
Initialize three-layer ledger (Wave/Batch/Partition) |
ledger-wave-add |
Create Wave (campaign-level goal) |
ledger-batch-add |
Create Batch (single-session goal) |
ledger-partition-add |
Create Partition (minimum execution unit, ~4h) |
ledger-promote |
Advance partition status (PLANNED→IN_PROGRESS→VERIFIED→DONE) |
ledger-status |
View current ledger overview |
ledger-list |
List all partition details |
cpp-diagnose |
One-click environment diagnosis: checks 17 items including toolchain availability, compile_commands.json validity, Docker/MCP connectivity |
cpp-pipeline |
Refactoring pipeline verification: runs compilation + tests + static analysis on changed files, returns structured pass/fail result |
cpp-quality-gate |
Incremental quality gate: records baseline of current warnings/tests/errors, then compares and reports ONLY new issues (delta) |
These tools are provided by the clang-ast-mcp server running in Docker. They require the MCP configuration from Step 3:
| Tool | Description |
|---|---|
clang_ast_load |
Pre-warm AST cache for a file |
clang_ast_list_functions |
List functions with cyclomatic complexity and line boundaries |
clang_ast_globals |
Global variable analysis (SIOF risk detection) |
clang_ast_virtual_calls |
Virtual call sites + override candidates |
clang_ast_macro_jungle |
Preprocessor complexity report |
Automatically reads state/ files and injects them into conversation context. Warns if cpp_refactory is not initialized.
Blocks cpp-refactory tools (except cpp-bootstrap) if .cpp_refactory/ doesn't exist. Warns about open tool gaps.
Injects CPP_REFACTORY_ROOT, CPP_REFACTORY_SCRIPTS, CPP_REFACTORY_RESOURCES into all shell sessions.
The Docker image supports multiple run modes:
# MCP server mode (default — used by opencode.json)
docker run --rm -i -v /path/to/project:/work:ro cpp-refactory
# Interactive shell (debugging)
docker run --rm -it -v /path/to/project:/work cpp-refactory shell
# Run test suite
docker run --rm cpp-refactory test --all
# Full sandbox validation
docker run --rm cpp-refactory bash /opt/cpp_refactory/docker/validate-sandbox.shexport CPP_PROJECT_PATH=/path/to/your/cpp/repo
# Start MCP server
docker compose -f docker/docker-compose.yml run --rm -T mcp-server
# Run tests
docker compose -f docker/docker-compose.yml run --rm test
# Interactive shell
docker compose -f docker/docker-compose.yml run --rm shell| Measure | Description |
|---|---|
read_only: true |
Read-only root filesystem |
no-new-privileges |
Prevent privilege escalation |
cap_drop: ALL |
Remove all Linux capabilities |
cap_add: DAC_READ_SEARCH |
Only allow reading mounted files |
networks: internal |
No external network access |
memory: 4G / cpus: 4.0 |
Resource limits |
/work:ro |
Host project mounted read-only |
| Component | Source | Purpose |
|---|---|---|
| LLVM/Clang 18 | Ubuntu 24.04 apt | C++ compilation + AST analysis |
| libclang-18-dev | Ubuntu 24.04 apt | Python binding for AST |
| clang-tidy / clang-format | Ubuntu 24.04 apt | Static analysis / formatting |
| cppcheck | Ubuntu 24.04 apt | Complementary static analysis |
| bear | Ubuntu 24.04 apt | Generate compile_commands.json |
| clang-ast-mcp | This repo (mcp/) |
MCP server with 7 AST tools |
The plugin also integrates with these optional MCP servers (configure separately in opencode.json):
- codegraph — Tree-sitter structural queries (impact analysis, call graph, symbol search)
- hindsight — Biomimetic agent memory with fact extraction, semantic/graph/temporal recall, and reflection
The plugin degrades gracefully when they're unavailable.
# Plugin development
npm install
npm test # 38 tests, node:test + tsx
npm run build # tsup → dist/index.js
npm run typecheck # tsc --noEmit
# Docker image
docker build -t cpp-refactory -f docker/Dockerfile .
docker run --rm cpp-refactory test --allAGPL-3.0-or-later. See LICENSE.