Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
113 commits
Select commit Hold shift + click to select a range
e03f248
Add Tmux terminal wrapper
noelsaw1 Mar 6, 2026
6c54b1e
Update README.md
noelsaw1 Mar 6, 2026
1a3e215
Add Tmux Crash Loop Script
noelsaw1 Mar 6, 2026
3eade00
Update README.md
noelsaw1 Mar 6, 2026
78617ad
Add Playwright Auth helper (pw-auth) for WP admin login
noelsaw1 Mar 7, 2026
f292d13
Create P1-AUTO-LOGIN.md
noelsaw1 Mar 7, 2026
1a62811
Update WP auto login
noelsaw1 Mar 7, 2026
9039407
Improve Playwright auth and allow .test dev login hosts
noelsaw1 Mar 7, 2026
01ee272
Add one time login clarification
noelsaw1 Mar 7, 2026
c00e940
Harden pw-auth Local auth flow
noelsaw1 Mar 7, 2026
b600e83
Canonicalize local-wp bin wrapper
noelsaw1 Mar 7, 2026
d6cd2f7
Deprecate root local-wp shim
noelsaw1 Mar 7, 2026
befa999
Fix wrapper temp cleanup edge cases
noelsaw1 Mar 7, 2026
937f502
Add wrapper cleanup regression harness
noelsaw1 Mar 7, 2026
78b46bc
Fix local-wp matching and dev login host validation
noelsaw1 Mar 8, 2026
4424179
Create ROADMAP-PERPLEXITY.md
noelsaw1 Mar 8, 2026
df585ab
Add Roadmap and MCP plans
noelsaw1 Mar 8, 2026
7101289
Update P1-MCP-SERVER.md
noelsaw1 Mar 8, 2026
df11356
Update P1-MCP-SERVER.md
noelsaw1 Mar 8, 2026
11f614b
Add MCP server Phase 1 LocalWP tools
noelsaw1 Mar 8, 2026
1685b47
Add MCP server Phase 2 WPCC tools
noelsaw1 Mar 8, 2026
0e31c5f
Complete MCP server Phase 2 WPCC resources
noelsaw1 Mar 8, 2026
1f6ee5a
Harden MCP allowlist and WPCC scan validation
noelsaw1 Mar 9, 2026
446f6a2
Clarify MCP pw-auth cache status contract
noelsaw1 Mar 9, 2026
13b8fd9
Harden MCP tmux send and AJAX URL validation
noelsaw1 Mar 9, 2026
6eecf5d
feat: ship MCP server integration and docs
noelsaw1 Mar 9, 2026
523c793
Merge pull request #10 from Hypercart-Dev-Tools/feat/add-mcp-server
noelsaw1 Mar 10, 2026
7789149
Add pw-auth doctor and complete Phase 1 validation
noelsaw1 Mar 10, 2026
2ab3cd2
Add pw-auth check dom MVP and real-site validation
noelsaw1 Mar 10, 2026
98da125
Refresh AGENTS guidance and bump v1.0.40
noelsaw1 Mar 11, 2026
409ba7b
Update tracked .DS_Store
noelsaw1 Mar 11, 2026
17d8ecc
docs: Add comprehensive MCP setup instructions to AGENTS.md and updat…
noelsaw1 Mar 11, 2026
8cca9fc
Fix local-wp Local run discovery
noelsaw1 Mar 12, 2026
2c12cbf
fix: add LOCAL_WP_MEMORY_LIMIT to local-wp to prevent OOM on heavy sites
noelsaw1 Mar 13, 2026
1a9b547
fix: add MCP server auto-build launcher to prevent startup crash loop
noelsaw1 Mar 21, 2026
89fa142
Update CHANGELOG.md
noelsaw1 Mar 21, 2026
95fe3fa
Add optional Valet clone-lab recipe
noelsaw1 Mar 22, 2026
ef894fa
Update gitignore
noelsaw1 Mar 22, 2026
278e39e
docs: Add P1-SCD-FEEDBACK.md - AI-DDTK Documentation & Feature Improv…
noelsaw1 Mar 22, 2026
b1e394f
docs: Phase 1 - Complete CLI Reference Documentation
noelsaw1 Mar 22, 2026
3f32951
docs: Update P1-SCD-FEEDBACK.md - Phase 1 Complete
noelsaw1 Mar 22, 2026
290fa67
docs: Update AGENTS.md - Add CLI Reference Documentation links
noelsaw1 Mar 22, 2026
c850881
docs: Add Phase 2.5 - README Consolidation & AGENTS.md Expansion
noelsaw1 Mar 22, 2026
d638860
chore: Remove duplicate AGENTS.md from PROJECT/2-WORKING
noelsaw1 Mar 22, 2026
4cb0a59
Initial plan
Copilot Mar 22, 2026
9c70e8e
docs: Phase 2 - Comprehensive Troubleshooting Guide
Copilot Mar 22, 2026
ef05ff7
Merge pull request #13 from Hypercart-Dev-Tools/copilot/add-troublesh…
noelsaw1 Mar 22, 2026
ed84fcd
Initial plan
Copilot Mar 22, 2026
3823a78
Phase 2.5: README consolidation and AGENTS.md expansion
Copilot Mar 22, 2026
7003e1f
Merge pull request #14 from Hypercart-Dev-Tools/copilot/consolidate-r…
noelsaw1 Mar 22, 2026
6d74293
Mark Phase 2.5 as complete in feedback document
noelsaw1 Mar 22, 2026
fd6c06c
Initial plan
Copilot Mar 22, 2026
6c7f364
docs: Phase 3 Quick Start — WordPress testing guide and Playwright ex…
Copilot Mar 22, 2026
f4f0075
Merge pull request #15 from Hypercart-Dev-Tools/copilot/create-quicks…
noelsaw1 Mar 22, 2026
8a09000
Update Phase 3 status to complete in feedback document
noelsaw1 Mar 22, 2026
80b706a
docs: Add P1 implementation plan for WordPress MCP Adapter integration
claude Mar 22, 2026
9624b14
docs: Add Valet clone-lab integration to WP MCP Adapter plan
claude Mar 22, 2026
f4c9104
docs: Add real-world use case justifications to each phase
claude Mar 22, 2026
714ab09
Merge pull request #17 from Hypercart-Dev-Tools/claude/evaluate-mcp-a…
noelsaw1 Mar 22, 2026
5934428
Initial plan
Copilot Mar 22, 2026
92d445b
Phase 4: CI/CD Integration Examples
Copilot Mar 22, 2026
9284167
docs: Add FAQ section clarifying relationship to existing MCP server
claude Mar 22, 2026
6e81ba2
docs: Add prerequisites section with WP 6.9+ requirement
claude Mar 22, 2026
b516128
Merge pull request #18 from Hypercart-Dev-Tools/copilot/add-ci-cd-wor…
noelsaw1 Mar 22, 2026
fbeebc1
Merge pull request #19 from Hypercart-Dev-Tools/claude/evaluate-mcp-a…
noelsaw1 Mar 22, 2026
f2c22bf
docs: Complete Phase 0 technical spike — dual-server MCP + Valet vali…
noelsaw1 Mar 22, 2026
3b98107
docs: Fold Phase 0.1a into Valet Clone-Lab Integration phase
noelsaw1 Mar 22, 2026
6cbfe7d
Update docs
noelsaw1 Mar 22, 2026
8e1da04
Initial plan
Copilot Mar 22, 2026
c72677b
Phase 1 & 2: Content Scaffolding, Migration & Introspection abilities
Copilot Mar 22, 2026
2c0c19a
Update Gitignore
noelsaw1 Mar 22, 2026
4b65053
Merge branch 'development' of https://github.com/Hypercart-Dev-Tools/…
noelsaw1 Mar 22, 2026
5bb9167
feat: validate Phase 1 & 2 MCP Adapter abilities on myfriendcom-09-30
noelsaw1 Mar 23, 2026
26da9a5
docs: add WP MCP Adapter to README navigation and tools table
noelsaw1 Mar 23, 2026
a628b22
Update Docs
noelsaw1 Mar 23, 2026
fdfb372
Merge pull request #20 from Hypercart-Dev-Tools/copilot/featmcp-adapt…
noelsaw1 Mar 23, 2026
c7683cb
Add MCP server test
noelsaw1 Mar 23, 2026
9cb5847
fix: clean up TSDoc comments and add MCP server CI workflow
noelsaw1 Mar 23, 2026
d0ff7e0
docs: add security-rationale comments to allowlist.ts
noelsaw1 Mar 23, 2026
f8031e5
feat: add Phase 7 plan — Query Monitor MCP integration with spike fin…
noelsaw1 Mar 23, 2026
a08cb0c
Update P1-MCP-SERVER.md
noelsaw1 Mar 23, 2026
22b4398
refine: Phase 7 plan — address review feedback
noelsaw1 Mar 23, 2026
dc50626
refine: reorder Phase 7 — frontend page profiling is primary, REST en…
noelsaw1 Mar 23, 2026
b67a916
feat: Phase 7 — Query Monitor frontend page profiling
noelsaw1 Mar 23, 2026
e48c38b
fix: QM bridge auth + cookie decode, add test-delays fixture plugin
noelsaw1 Mar 23, 2026
79e4fec
feat: persist QM profiles to temp/qm-profiles/<domain>_<timestamp>.json
noelsaw1 Mar 23, 2026
c50c7c9
Update Gitignore
noelsaw1 Mar 23, 2026
ac0a94e
Merge development into feat/mcp-adapter-official and resolve .DS_Stor…
noelsaw1 Mar 23, 2026
670c5e3
Merge pull request #21 from Hypercart-Dev-Tools/feat/mcp-adapter-offi…
noelsaw1 Mar 23, 2026
49262e5
Update CHANGELOG.md
noelsaw1 Mar 23, 2026
dceef98
Update P1-WP-MCP-ADAPTER.md
noelsaw1 Mar 23, 2026
e10b0ac
fix: refresh install.sh MCP guidance and updater
noelsaw1 Mar 23, 2026
6d99e48
Add roadmap for Theme Crash Script in comments
noelsaw1 Mar 23, 2026
4f3020e
Add segmentation fault detection to theme-crash-loop.sh log scanning
noelsaw1 Mar 23, 2026
a86435f
Add PHPStan setup and harden AJAX and QM handlers
noelsaw1 Mar 23, 2026
7c47c5a
Harden wp-ajax-test nonce field parsing
noelsaw1 Mar 23, 2026
c9ec9ad
Genericize MCP site configuration for distribution
noelsaw1 Mar 23, 2026
99ae4e8
Add local MCP config helper and example
noelsaw1 Mar 23, 2026
661ba61
Expand local MCP workflow guidance
noelsaw1 Mar 23, 2026
e8afc79
Add MCP dry-run mode and temp scaffold
noelsaw1 Mar 23, 2026
81037d8
Fix wp-ajax-test nopriv flow and validate MCP snippets
noelsaw1 Mar 23, 2026
4f43298
Redesign README as a feature-driven home page
claude Mar 23, 2026
c19293d
docs: add Phase 3 update-options ability plan to mcp-adapter-abilitie…
claude Mar 23, 2026
e5084ee
feat: Phase 3 — add ai-ddtk/update-options ability with dangerous-key…
claude Mar 23, 2026
6b7caeb
Merge pull request #22 from Hypercart-Dev-Tools/claude/document-mcp-s…
noelsaw1 Mar 23, 2026
cf1991d
fix: add value validation for dangerous keys, fix doc contradictions,…
claude Mar 23, 2026
ad08952
Add canonical Valet clone helper and docs
noelsaw1 Mar 23, 2026
6173f17
fix: add admin_email validation and redact_values flag for secret pro…
claude Mar 23, 2026
576235f
Merge pull request #23 from Hypercart-Dev-Tools/claude/phase-3-update…
noelsaw1 Mar 23, 2026
7f75be8
Restructure CHANGELOG: drop Unreleased, add maintainer rules, add 1.1…
noelsaw1 Mar 23, 2026
b170a6d
fix: code review audit fixes — security, error handling, and repo hyg…
noelsaw1 Mar 24, 2026
1e6f727
feat: add --auth-state flag to wp-ajax-test for pw-auth cookie reuse
noelsaw1 Mar 24, 2026
ba6063d
fix: quote $log_file in tmux pipe-pane and glob prefix in wpcc
noelsaw1 Mar 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Binary file modified .DS_Store
Binary file not shown.
36 changes: 36 additions & 0 deletions .github/workflows/ci-mcp-server.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
name: MCP Server CI

on:
push:
paths:
- 'tools/mcp-server/**'
pull_request:
paths:
- 'tools/mcp-server/**'

jobs:
build-and-test:
runs-on: ubuntu-latest

strategy:
matrix:
node-version: [18, 20, 22]

steps:
- uses: actions/checkout@v4

- uses: actions/setup-node@v4
with:
node-version: ${{ matrix.node-version }}

- name: Install dependencies
working-directory: tools/mcp-server
run: npm ci

- name: Build
working-directory: tools/mcp-server
run: npm run build

- name: Test
working-directory: tools/mcp-server
run: npm test
20 changes: 18 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,11 @@
!temp/README.md
!temp/*/.gitkeep
!temp/*/*/.gitkeep
!temp/mcp/
!temp/mcp/local-snippets/
!temp/mcp/notes/
!temp/mcp/local-snippets/.gitkeep
!temp/mcp/notes/.gitkeep

# Credentials (never commit these)
*.credentials
Expand All @@ -20,7 +25,9 @@ playwright-auth.json

# IDE files
.DS_Store
.vscode/
.vscode/*
!.vscode/tasks.json
!.vscode/launch.json
.idea/
*.sublime-*
*.swp
Expand Down Expand Up @@ -57,4 +64,13 @@ coverage/
*.bak
*.cache

.DS_Store
# Root-level shell transcript artifacts from script(1)
/typescript
/typescript.[0-9]*

/.claude
/.mcp.local.json

# Machine-specific symlinks (never commit these)
/npx
/playwright
109 changes: 109 additions & 0 deletions .mcp.README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,109 @@
# .mcp.json — MCP Server Configuration for Claude Code

`.mcp.json` is how Claude Code discovers MCP servers for this project.
JSON does not support comments, so this companion file documents the config.

## Repo Safety Reminder

Do not commit site-specific LocalWP names, internal hostnames, user IDs, filesystem paths, bearer tokens, cookies, auth-state files, or other confidential environment details into `.mcp.json` or related MCP docs.

Keep the checked-in `.mcp.json` generic and public-safe. If you need a second WordPress MCP Adapter entry for a real site, keep that variant local-only and store working snippets or notes under `temp/` instead of committing them.

Tracked helpers for local use:
- `.mcp.local.example.json` shows a generic dual-server shape with placeholders.
- `./bin/mcp-local-config` merges `.mcp.json` with any local-only snippets under `temp/mcp/local-snippets/`.
- `examples/mcp/local-snippet.example.json` shows the exact snippet shape expected under `temp/mcp/local-snippets/`.

Scaffolded local snippet directories are kept in git with:
- `temp/mcp/local-snippets/.gitkeep`
- `temp/mcp/notes/.gitkeep`

## Current: Single-Server (AI-DDTK)

The checked-in `.mcp.json` now defaults to the public-safe AI-DDTK server only. Add a second WordPress MCP Adapter entry locally when you want site-specific abilities without committing a real Local site name into the repo.

## Dual-Server Config: AI-DDTK + WordPress MCP Adapter

To run the WP MCP Adapter alongside AI-DDTK, replace `.mcp.json` with:

```json
{
"mcpServers": {
"ai-ddtk": {
"command": "bash",
"args": ["tools/mcp-server/start.sh"]
},
"wordpress": {
"command": "./bin/local-wp",
"args": [
"<site-name>",
"mcp-adapter", "serve",
"--server=mcp-adapter-default-server",
"--user=1"
]
}
}
}
```

You can also keep the checked-in `.mcp.json` generic, place one or more real local adapter snippets in `temp/mcp/local-snippets/*.json`, and generate a merged local config with:

```bash
./bin/mcp-local-config --write .mcp.local.json
```

`/.mcp.local.json` is gitignored on purpose.

Preview a write target without modifying files:

```bash
./bin/mcp-local-config --dry-run --write .mcp.local.json
```

If you intentionally want to overwrite the repo-root `.mcp.json` for local-only work, the helper supports that too but requires an explicit warning acknowledgment:

```bash
printf 'OVERWRITE\n' | ./bin/mcp-local-config --write-root
```

### Notes

- Replace `<site-name>` with your Local site (e.g. `love2hugcom-clone`).
- Use `--user=1` (user ID), not `--user=admin` — admin usernames vary per site.
- Do not commit the resolved site name, internal domain, or user identifier from your local environment back into the checked-in `.mcp.json`.
- For Valet sites, use system WP-CLI instead of `./bin/local-wp`:
```json
"wordpress": {
"command": "wp",
"args": [
"--path=/Users/<you>/Valet-Sites/<site>",
"mcp-adapter", "serve",
"--server=mcp-adapter-default-server",
"--user=admin"
]
}
```

### Tool namespaces (no collisions)

| Server | Tools | Prefix |
|---|---|---|
| ai-ddtk | 18 | `local_wp_*`, `pw_auth_*`, `tmux_*`, `wpcc_*`, `wp_ajax_test` |
| wordpress | 3 | `mcp-adapter-*` (discover, get-info, execute) |

### Custom ability requirements

Abilities must set three things to be visible via MCP Adapter:
1. Hook: `add_action('wp_abilities_api_init', ...)`
2. Category: `'category' => 'site'` (or `user`, `mcp-adapter`)
3. MCP flag: `'meta' => ['mcp' => ['public' => true]]`

See `P1-WP-MCP-ADAPTER.md` Phase 0.2 for the full mu-plugin pattern.

### No-parameter abilities — omit `input_schema`

Abilities that take no parameters must **not** include an `input_schema`. Using `'properties' => new stdClass()` triggers two bugs in `ExecuteAbilityAbility` v0.4.1. See [docs/MCP-ADAPTER-SETUP.md](docs/MCP-ADAPTER-SETUP.md#abilities-with-no-parameters-must-omit-input_schema) for details.

---
Validated 2026-03-22 on Local and Valet test sites.
Validated 2026-03-21 on a Local WordPress 6.9.4 site — all 12 Phase 1+2 abilities confirmed.
8 changes: 8 additions & 0 deletions .mcp.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
{
"mcpServers": {
"ai-ddtk": {
"command": "bash",
"args": ["tools/mcp-server/start.sh"]
}
}
}
18 changes: 18 additions & 0 deletions .mcp.local.example.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
{
"mcpServers": {
"ai-ddtk": {
"command": "bash",
"args": ["tools/mcp-server/start.sh"]
},
"wordpress-local": {
"command": "./bin/local-wp",
"args": [
"<site-name>",
"mcp-adapter",
"serve",
"--server=mcp-adapter-default-server",
"--user=1"
]
}
}
}
48 changes: 48 additions & 0 deletions .vscode/launch.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
{
"version": "0.2.0",
"configurations": [
{
"name": "MCP Server (stdio)",
"type": "node",
"request": "launch",
"program": "${workspaceFolder}/tools/mcp-server/dist/src/index.js",
"outFiles": ["${workspaceFolder}/tools/mcp-server/dist/**/*.js"],
"sourceMaps": true,
"console": "integratedTerminal",
"cwd": "${workspaceFolder}/tools/mcp-server",
"preLaunchTask": "MCP: Build"
},
{
"name": "MCP Server (HTTP :3100)",
"type": "node",
"request": "launch",
"program": "${workspaceFolder}/tools/mcp-server/dist/src/index.js",
"args": ["--http"],
"outFiles": ["${workspaceFolder}/tools/mcp-server/dist/**/*.js"],
"sourceMaps": true,
"console": "integratedTerminal",
"cwd": "${workspaceFolder}/tools/mcp-server",
"preLaunchTask": "MCP: Build"
},
{
"name": "MCP Server Tests",
"type": "node",
"request": "launch",
"program": "${workspaceFolder}/tools/mcp-server/dist/test/${input:testFile}",
"args": ["--test"],
"outFiles": ["${workspaceFolder}/tools/mcp-server/dist/**/*.js"],
"sourceMaps": true,
"console": "integratedTerminal",
"cwd": "${workspaceFolder}/tools/mcp-server",
"preLaunchTask": "MCP: Build"
}
],
"inputs": [
{
"id": "testFile",
"description": "Test file to debug (e.g. local-wp.test.js)",
"type": "promptString",
"default": "local-wp.test.js"
}
]
}
87 changes: 87 additions & 0 deletions .vscode/tasks.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
{
"version": "2.0.0",
"inputs": [
{
"id": "siteUrl",
"description": "WordPress site URL (e.g. http://my-site.local)",
"type": "promptString"
},
{
"id": "siteName",
"description": "Local by Flywheel site name",
"type": "promptString"
},
{
"id": "ajaxUrl",
"description": "WordPress site URL for AJAX testing",
"type": "promptString"
},
{
"id": "ajaxAction",
"description": "WordPress AJAX action name",
"type": "promptString"
},
{
"id": "scanPaths",
"description": "Path(s) to scan with WPCC (relative to workspace)",
"type": "promptString",
"default": "."
}
],
"tasks": [
{
"label": "MCP: Start Server (stdio)",
"type": "shell",
"command": "npm run mcp",
"options": { "cwd": "${workspaceFolder}/tools/mcp-server" },
"group": "none",
"problemMatcher": []
},
{
"label": "MCP: Start Server (HTTP)",
"type": "shell",
"command": "npm run mcp:http",
"options": { "cwd": "${workspaceFolder}/tools/mcp-server" },
"group": "none",
"problemMatcher": [],
"isBackground": true
},
{
"label": "MCP: Build",
"type": "shell",
"command": "npm run build",
"options": { "cwd": "${workspaceFolder}/tools/mcp-server" },
"group": "build",
"problemMatcher": ["$tsc"]
},
{
"label": "MCP: Test",
"type": "shell",
"command": "npm test",
"options": { "cwd": "${workspaceFolder}/tools/mcp-server" },
"group": "test",
"problemMatcher": []
},
{
"label": "WPCC: Run Scan",
"type": "shell",
"command": "wpcc --paths ${input:scanPaths} --format json",
"group": "none",
"problemMatcher": []
},
{
"label": "pw-auth: Login",
"type": "shell",
"command": "pw-auth login --site-url ${input:siteUrl} --wp-cli 'local-wp ${input:siteName}'",
"group": "none",
"problemMatcher": []
},
{
"label": "AJAX Test",
"type": "shell",
"command": "wp-ajax-test --url ${input:ajaxUrl} --action ${input:ajaxAction} --format json",
"group": "none",
"problemMatcher": []
}
]
}
Loading
Loading