WordPress/mcp-adapter

GitHub ↗ · How this check works

Per-setup public labels: Linux / Haiku: Works

Static status badge · SVG · read-only JSON. Embed with ![Coldpass status](https://coldpass.dev/badge/WordPress--mcp-adapter.svg).

mcp-server

Works

README claims checked out on 1 recorded setup.

Answers apply to each recorded setup, revision and operation. Earlier observations remain in Run details.

Tested on Linux
PlatformHaikuLuna
Linuxyes

Linux / Haiku 5.5: yes · Oct 25, 2026 · f6bb4b7d703b · claude-code / 2.1.310 (Claude Code)
Recorded operation: wp --path=<guest-path> mcp-adapter serve --server=mcp-adapter-default-server --user=admin · local stdio MCP start + initialize + tools/list

Does what it says
2 of 2 claims checked out
  • Abilities must be opted in with meta.public to be exposed over MCP; the opted-in ability is executable through the default server: Real input produced the expected result: HELLO COLDPASS

    Source: Set `meta.public` (or `meta.mcp.public`) to `true` to expose one

    Input: {"tool": "mcp-adapter-execute-ability", "arguments": {"ability_name": "demo/echo-note", "parameters": {"note": "hello coldpass"}}}

    Expected: upper-cased echo returned

    Command: wp --path=<guest-path> mcp-adapter serve --server=mcp-adapter-default-server --user=admin tools/call {"tool": "mcp-adapter-execute-ability", "arguments": {"ability_name": "demo/echo-note", "parameters": {"note": "hello coldpass"}}}

    Observed: HELLO COLDPASS\"}}"}], "isError": false, "structuredContent": {"success": true, "data": {"echo": "HELLO COLDPASS"}}}

  • WP-CLI STDIO serving of the default MCP server works: Real input produced the expected result: HELLO COLDPASS

    Source: Connect via WP-CLI over STDIO

    Input: {"tool": "mcp-adapter-execute-ability", "arguments": {"ability_name": "demo/echo-note", "parameters": {"note": "hello coldpass"}}}

    Expected: tool result text containing HELLO COLDPASS

    Command: wp --path=<guest-path> mcp-adapter serve --server=mcp-adapter-default-server --user=admin tools/call {"tool": "mcp-adapter-execute-ability", "arguments": {"ability_name": "demo/echo-note", "parameters": {"note": "hello coldpass"}}}

    Observed: HELLO COLDPASS\"}}"}], "isError": false, "structuredContent": {"success": true, "data": {"echo": "HELLO COLDPASS"}}}

MCP
Yes, observed
Local or hosted
local
Local: runs on your machine
Needs keys or browser
None seen
Maintained
Maintained
actively maintained: last commit 4 days ago; 78 commits and 80 merged PRs in 90 days; 61 open issues, 26 open PRs; 6 of 26 recent threads got a maintainer reply, median first reply 30.9h; latest release 2026-10-16

Last commit Oct 21, 2026

Setup time
5 min 50 s
5 min 50 s to a working result
Issue
none found in recorded check
Examples
1 of 1 ran as expected
  • Documented WP-CLI list of MCP servers: command completed successfully

    Source: docs/guides/cli-usage.md

    Input: wp mcp-adapter list --format=json

    Expected: default server listed

    Command: wp --path=<guest-path> mcp-adapter list --format=json

    Observed: [{"ID":"mcp-adapter-default-server","Name":"MCP Adapter Default Server","Version":"v1.0.0","Tools":3,"Resources":0,"Prompts":0}]

  • Documented PHP test suite: Requires wp-env (Docker) which is not installed in this guest; Docker-based npm run test:php was not run. Only the WP-CLI route was exercised.

    Source: docs/guides/testing.md

    Expected: documented command completes successfully

    Observed: Requires wp-env (Docker) which is not installed in this guest; Docker-based npm run test:php was not run. Only the WP-CLI route was exercised.

Evidence
README behavior checked
Agent interfaces
MCP
MCP

Observed interfaces were exercised by the checker. Documentation alone does not confirm compatibility.

MCP context
3 tools · about 624 tokens
3 tools · about 624 tokens

Largest returned tools/list page in these observations. Compact UTF-8 definition bytes ÷ 4, rounded up; approximate, excluding client framing and tool results. This is context size, not proof that every tool works.

Measured on linux with Haiku 5.5 · Oct 25, 2026 on f6bb4b7d703b

Tested with
Claude Code / Haiku 5.5
  • Linux: Claude Code / Haiku 5.5 · agent 2.1.310 (Claude Code) · Checked operation passed · Oct 25, 2026 on f6bb4b7d703b

Each entry describes its recorded operation and source revision.

Safety
Made outbound connections: yes (hosts not recorded) by npm lifecycle

Review signals across current setups: connection review, sensitive read. 58 listed items (named-host connections, static matches, dependency advisories) are below and do not change this verdict.

Repository processes attempted these non-loopback connections; proxies can hide the final hostname. 7 distinct locations. 23 attributed processes.

Gitleaks found a possible hardcoded secret; value withheld. 2 distinct locations. 9 findings.

OSV reports a known vulnerability in this dependency version. 13 distinct locations. 20 findings.

A repository process attempted to read this sensitive path. 2 distinct locations. 2 findings. 83 attributed processes.

Reviewed as expected for a test run: attempted writes that failed, so nothing was written; resolver address lookups that send no data.

Full event, path and process lists for each observed setup:

Run details

Haiku 5.5

Native agent · Checked operation passed

Checked operation wp --path=<guest-path> mcp-adapter serve --server=mcp-adapter-default-server --user=admin · local stdio MCP start + initialize + tools/list

Agent-reported scope: Expose a WordPress ability over MCP through the documented WP-CLI STDIO server (wp mcp-adapter serve) and call it with a real tool result

MCP server returned: MCP Adapter Default Server · version v1.0.0.

MCP tools returned: mcp-adapter-discover-abilities, mcp-adapter-get-ability-info, mcp-adapter-execute-ability. Tool listing does not establish authenticated tool-call success.

Run details
run
WordPress--mcp-adapter-claude-haiku-5-5-1792971575358921748
date
Oct 25, 2026
time to working
350.3s
product hosting / execution
Local stdio MCP server in the guest
recorded operation scope
product operation
model
claude-haiku-5-5
agent / version
claude-code / 2.1.310 (Claude Code)
platform
linux
reported cost
$0.022551
Recorded source
https://github.com/WordPress/mcp-adapter
Backend
hyperv
Tool transport
mcp-assigned-vm
Requested source pin (not an observed revision)
{"commit": "f6bb4b7d703bb21ddc496d729550e907ad57ee3e", "url": "https://github.com/WordPress/mcp-adapter"}
Test version
readme-ca496ea10bb07418d1d8f1c256c2433a55547acc0fb62d8b6d86ae33c976fbfa
revision
f6bb4b7d703bb21ddc496d729550e907ad57ee3e
Whose fault: not assigned · resolved

Safety: Review signals: 9 hardcoded secret, 20 known vulnerability.

Review signals: 9 hardcoded secret, 20 known vulnerability.

Gitleaks found a possible hardcoded secret; value withheld. 2 distinct locations. 9 findings.

OSV reports a known vulnerability in this dependency version. 13 distinct locations. 20 findings.

OSV scanned supported lockfiles; unpinned dependencies and unsupported formats are outside this check.

A short run cannot establish that code is safe.

Connections show IP addresses; proxies can hide the final hostname.

Tracing covers dispatched commands and their children, not the whole OS; guest root can interfere with tracing.

Full safety evidence →

Answers recorded for this run
  • Abilities must be opted in with meta.public to be exposed over MCP; the opted-in ability is executable through the default server: Real input produced the expected result: HELLO COLDPASS

    Source: Set `meta.public` (or `meta.mcp.public`) to `true` to expose one

    Input: {"tool": "mcp-adapter-execute-ability", "arguments": {"ability_name": "demo/echo-note", "parameters": {"note": "hello coldpass"}}}

    Expected: upper-cased echo returned

    Command: wp --path=<guest-path> mcp-adapter serve --server=mcp-adapter-default-server --user=admin tools/call {"tool": "mcp-adapter-execute-ability", "arguments": {"ability_name": "demo/echo-note", "parameters": {"note": "hello coldpass"}}}

    Observed: HELLO COLDPASS\"}}"}], "isError": false, "structuredContent": {"success": true, "data": {"echo": "HELLO COLDPASS"}}}

  • WP-CLI STDIO serving of the default MCP server works: Real input produced the expected result: HELLO COLDPASS

    Source: Connect via WP-CLI over STDIO

    Input: {"tool": "mcp-adapter-execute-ability", "arguments": {"ability_name": "demo/echo-note", "parameters": {"note": "hello coldpass"}}}

    Expected: tool result text containing HELLO COLDPASS

    Command: wp --path=<guest-path> mcp-adapter serve --server=mcp-adapter-default-server --user=admin tools/call {"tool": "mcp-adapter-execute-ability", "arguments": {"ability_name": "demo/echo-note", "parameters": {"note": "hello coldpass"}}}

    Observed: HELLO COLDPASS\"}}"}], "isError": false, "structuredContent": {"success": true, "data": {"echo": "HELLO COLDPASS"}}}

Examples

  • Documented WP-CLI list of MCP servers: command completed successfully

    Source: docs/guides/cli-usage.md

    Input: wp mcp-adapter list --format=json

    Expected: default server listed

    Command: wp --path=<guest-path> mcp-adapter list --format=json

    Observed: [{"ID":"mcp-adapter-default-server","Name":"MCP Adapter Default Server","Version":"v1.0.0","Tools":3,"Resources":0,"Prompts":0}]

  • Documented PHP test suite: Requires wp-env (Docker) which is not installed in this guest; Docker-based npm run test:php was not run. Only the WP-CLI route was exercised.

    Source: docs/guides/testing.md

    Expected: documented command completes successfully

    Observed: Requires wp-env (Docker) which is not installed in this guest; Docker-based npm run test:php was not run. Only the WP-CLI route was exercised.

Local or hosted: local

What the agent did

Expose a WordPress ability over MCP through the documented WP-CLI STDIO server (wp mcp-adapter serve) and call it with a real tool result

cd <guest-path> && pwd && ls -la && git status 2>&1 | head -3; id -u; cat /etc/os-release | head -2; python3 --version; which node npm uv composer php 2>&1
cd <guest-path> && cat README.md | head -c 7000
cd <guest-path> && ls -la .coldpass; ls <guest-path>; ls <guest-path> 2>&1; ls /inputs 2>&1; php -v 2>&1 | head -1; composer -V 2>&1 | head -1; wp --version 2>&1; which docker mysql mariadb 2>&1; node -v; npm -v; cat .nvmrc; grep -n '"php"\|"require"' -A3 composer.json | head -20
cd <guest-path> && cat docs/guides/cli-usage.md | head -c 6000
cd <guest-path> && sed -n 1,80p CONTRIBUTING.md | head -c 4000; echo ----; head -c 3000 docs/guides/testing.md
head -c 5000 <guest-path>; echo; grep -n "def \|--validate\|--replay" <guest-path> | head -60
cd <guest-path> && cat mcp-adapter.php; grep -in "requires\|tested up\|abilities" readme.txt | head -20; sudo -n true && echo SUDO_OK; apt-cache policy php8.3-cli mariadb-server 2>/dev/null | head -6
sudo apt-get -o DPkg::Lock::Timeout=300 update -qq 2>&1 | tail -3; sudo DEBIAN_FRONTEND=noninteractive apt-get -o DPkg::Lock::Timeout=300 install -y -qq php8.3-cli php8.3-mysql php8.3-curl php8.3-xml php8.3-mbstring php8.3-zip php8.3-gd php8.3-intl mariadb-server unzip curl composer > /tmp/apt-install.log 2>&1; echo "exit=$?"; tail -5 /tmp/apt-install.log; php -v | head -1; composer -V 2>&1 | head -1
sudo systemctl start mariadb 2>&1 | tail -2; sudo mysql -e "CREATE DATABASE IF NOT EXISTS wp_mcp; CREATE USER IF NOT EXISTS 'wpuser'@'localhost' IDENTIFIED BY 'wppass'; GRANT ALL ON wp_mcp.* TO 'wpuser'@'localhost'; FLUSH PRIVILEGES;" && echo DB_OK; mkdir -p <guest-path> && curl -sSfL -o <guest-path> https://raw.githubusercontent.com/wp-cli/builds/gh-pages/phar/wp-cli.phar && php <guest-path> --info | head -3; curl -sI https://wordpress.org/latest.zip | head -1
sudo install -m 755 <guest-path> /usr/local/bin/wp && mkdir -p <guest-path> && cd <guest-path> && wp core download --version=6.9 --locale=en_US 2>&1 | tail -2 && wp config create --dbname=wp_mcp --dbuser=wpuser --dbpass=wppass --dbhost=localhost --skip-check 2>&1 | tail -1 && wp core install --url=http://localhost:8080 --title=MCPTest --admin_user=admin --admin_password=password <email> --skip-email 2>&1 | tail -1; wp core version
cd <guest-path> && composer install --no-interaction --prefer-dist > <guest-path> 2>&1; echo "exit=$?"; tail -4 <guest-path>; ln -sfn <guest-path> <guest-path> && cd <guest-path> && wp plugin activate mcp-adapter 2>&1 | tail -3; wp plugin list --format=table 2>&1 | head -8
cd <guest-path> && wp mcp-adapter list 2>&1 | head -20; echo ---; wp mcp-adapter list --format=json 2>&1 | head -c 1500; echo; echo ---; wp eval 'print_r(array_keys(wp_get_abilities()));' 2>&1 | head -30
cd <guest-path> && printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}' '{"jsonrpc":"2.0","method":"notifications/initialized"}' '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}' '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"mcp-adapter/discover-abilities","arguments":{}}}' | timeout 60 wp --path=<guest-path> mcp-adapter serve --server=mcp-adapter-default-server --user=admin 2>&1 | cut -c1-900
cd <guest-path> && printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}' '{"jsonrpc":"2.0","method":"notifications/initialized"}' '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"mcp-adapter-discover-abilities","arguments":{}}}' '{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"mcp-adapter-get-ability-info","arguments":{"ability_name":"core/get-site-info"}}}' | timeout 60 wp --path=<guest-path> mcp-adapter serve --server=mcp-adapter-default-server --user=admin 2>&1 | tail -n +2 | cut -c1-1200
cd <guest-path> && grep -n "wp_register_ability\|'public'\|mcp' *=>\|'category'\|wp_register_ability_category\|wp_abilities_api_init\|execute_callback\|permission_callback\|input_schema" docs/guides/creating-abilities.md | head -40
mkdir -p <guest-path> && cat > <guest-path> <<'EOF'
<?php
/* Local test site helper: exposes one public ability so the MCP tools have a real target. */
add_action( 'wp_abilities_api_init', function () {
	wp_register_ability( 'demo/echo-note', [
		'label'               => 'Echo note',
		'description'         => 'Returns the given note text in upper case.',
		'category'            => 'site',
		'input_schema'        => [
			'type'       => 'object',
			'properties' => [ 'note' => [ 'type' => 'string' ] ],
			'required'   => [ 'note' ],
		],
		'execute_callback'    => function ( $input ) {
			return [ 'echo' => strtoupper( (string) $input['note'] ) ];
		},
		'permission_callback' => function () { return current_user_can( 'read' ); },
		'meta'                => [ 'public' => true, 'mcp' => [ 'public' => true ] ],
	] );
} );
EOF
cd <guest-path> && wp eval 'echo "ok\n";' 2>&1 | tail -1; printf '%s\n' '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"t","version":"1"}}}' '{"jsonrpc":"2.0","method":"notifications/initialized"}' '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"mcp-adapter-discover-abilities","arguments":{}}}' '{"jsonrpc":"2.0","id":4,"method":"tools/call","params":{"name":"mcp-adapter-execute-ability","arguments":{"ability_name":"demo/echo-note","parameters":{"note":"hello coldpass"}}}}' | timeout 60 wp --path=<guest-path> mcp-adapter serve --server=mcp-adapter-default-server --user=admin 2>&1 | tail -n +2 | cut -c1-900
cd <guest-path> && grep -rniE "wp_schedule|add_action\( *'(cron|init)|cron|webhook|--once|--now" includes mcp-adapter.php | head -8; echo "---scripts"; python3 -c 'import json;print(json.load(open("composer.json")).get("scripts"))' ; python3 -c 'import json;print({k:v for k,v in json.load(open("package.json")).get("scripts",{}).items()})'
mkdir -p <guest-path> && cat > <guest-path> <<'EOF'
{"kind":"mcp","argv":["wp","--path=<guest-path>","mcp-adapter","serve","--server=mcp-adapter-default-server","--user=admin"],"cwd":"<guest-path>","tool":"mcp-adapter-execute-ability","arguments":{"ability_name":"demo/echo-note","parameters":{"note":"hello coldpass"}},"expected_text":"HELLO COLDPASS"}
EOF
cat > <guest-path> <<'EOF'
[{"kind":"claim","claim":"Abilities must be opted in with meta.public to be exposed over MCP; the opted-in ability is executable through the default server","source":"Set `meta.public` (or `meta.mcp.public`) to `true` to expose one","input":"demo/echo-note with note hello coldpass","expected":"upper-cased echo returned","probe_kind":"mcp","argv":["wp","--path=<guest-path>","mcp-adapter","serve","--server=mcp-adapter-default-server","--user=admin"],"tool":"mcp-adapter-execute-ability","arguments":{"ability_name":"demo/echo-note","parameters":{"note":"hello coldpass"}},"expected_text":"HELLO COLDPASS","cwd":"<guest-path>"},
{"kind":"claim","claim":"WP-CLI STDIO serving of the default MCP server works","source":"Connect via WP-CLI over STDIO","input":"tools/call mcp-adapter-execute-ability over wp mcp-adapter serve","expected":"tool result text containing HELLO COLDPASS","probe_kind":"mcp","argv":["wp","--path=<guest-path>","mcp-adapter","serve","--server=mcp-adapter-default-server","--user=admin"],"tool":"mcp-adapter-execute-ability","arguments":{"ability_name":"demo/echo-note","parameters":{"note":"hello coldpass"}},"expected_text":"HELLO COLDPASS","cwd":"<guest-path>"}]
EOF
echo '{"detected":false,"reason":"Inspected composer.json, package.json, mcp-adapter.php and includes/: no wp_schedule_event, cron, webhook or --once/--now entry point; the only init hook is plugin bootstrap (includes/Core/McpAdapter.php:78). The server runs on request (wp mcp-adapter serve over STDIO or HTTP REST), so no product cycle exists.","checks":[]}' > <guest-path>
echo '[{"kind":"example","claim":"Documented WP-CLI list of MCP servers","source":"docs/guides/cli-usage.md","input":"wp mcp-adapter list --format=json","expected":"default server listed","argv":["wp","--path=<guest-path>","mcp-adapter","list","--format=json"],"cwd":"<guest-path>","expected_text":"mcp-adapter-default-server"},{"kind":"example","claim":"Documented PHP test suite","source":"docs/guides/testing.md","reason":"Requires wp-env (Docker) which is not installed in this guest; Docker-based npm run test:php was not run. Only the WP-CLI route was exercised.","deferred":true}]' > <guest-path>
cd <guest-path> && for f in .coldpass/*.json; do python3 -I -m json.tool "$f" >/dev/null && echo "ok $f"; done
cd <guest-path> && <env-var>=<guest-path> timeout 600 python3 -I <guest-path> --validate --replay 2>&1 | tail -c 4000; echo "exit=${PIPESTATUS[0]}"
cd <guest-path> && <env-var>=<guest-path> timeout 600 python3 -I <guest-path> --validate --replay > <guest-path> 2>&1; echo "exit=$?"; python3 -I -c '
import json,sys
t=open("<guest-path>").read()
i=t.find("{")
d=json.loads(t[i:])
print({k:(v if not isinstance(v,(dict,list)) else type(v).__name__) for k,v in d.items()})
print("problems:", d.get("problems"))
' 2>&1 | head -c 1500
pgrep -af "mcp-adapter serve" || echo "no serve processes"; cat > <guest-path> <<'EOF'
{"outcome":"working","fault_owner":null,"operation":"Expose a WordPress ability over MCP through the documented WP-CLI STDIO server (wp mcp-adapter serve) and call it with a real tool result","operation_scope":"WordPress 6.9 with MariaDB, PHP 8.3, WP-CLI, plugin activated on a local site; one test ability (demo/echo-note) registered by a site-side mu-plugin; STDIO transport only. HTTP transport and the wp-env/Docker test suite were not exercised.","steps":["apt-get install php8.3-cli php8.3-mysql php8.3-curl php8.3-xml php8.3-mbstring php8.3-zip php8.3-gd php8.3-intl mariadb-server unzip curl composer","Downloaded wp-cli.phar and installed it as wp","wp core download --version=6.9; wp config create; wp core install (in <guest-path>)","composer install (in plugin source, per CONTRIBUTING.md Installation step 2)","Symlinked the workspace into wp-content/plugins/mcp-adapter; wp plugin activate mcp-adapter","wp mcp-adapter list (default server listed with 3 tools)","wp --path=<guest-path> mcp-adapter serve --server=mcp-adapter-default-server --user=admin; JSON-RPC initialize, tools/list, tools/call mcp-adapter-execute-ability -> HELLO COLDPASS"],"deviations":["CONTRIBUTING.md/testing.md route (npm run wp-env start) needs Docker, which is not installed in the guest; used the README's WP-CLI route with a manually installed WordPress 6.9 instead. npm run test:php was not run (deferred example).","Added a site-side mu-plugin at <guest-path> registering demo/echo-note with meta.public=true, because the product exposes no abilities by default (discover returned an empty list). Product source was not edited.","Tool names are hyphenated (mcp-adapter-execute-ability), not the slash names in the README (mcp-adapter/execute-ability); the slash names returned 'Tool not found'.","Plugin is linked from the workspace; composer install created vendor/ in the workspace.","The /inputs/coldpass-preflight.py path given in the task does not exist; the checker at <guest-path> was run instead with --validate --replay.","The workspace is not a git repository and the git fetch/reset pin step was not performed, so the workspace was not verified against commit f6bb4b7d703bb21ddc496d729550e907ad57ee3e."],"stuck_step":null,"main_blocker":null,"plain_failure":null,"suggested_fix":"None required for this run. Optional: the README's documented plugin paths (/wp-json/mcp/mcp-adapter-default-server HTTP endpoint and mcp/mcp-adapter/... tool names) differ from the hyphenated tool names actually returned, so the README tool-name wording could be aligned with the real names."}
EOF
python3 -I -m json.tool <guest-path> >/dev/null && echo report_ok; ls -la <guest-path>