WP Manifestindependent plugin directory
manifest / developer / ent-companion

Ent Companion WP Registry grade C-. High-severity findings · 1 findingWP RegistryHigh-severity findings · 1 findingOpen the reportC-

Ent Companion — WordPress abilities engine for MCP Adapter

★ 0stars
16release downloads
≈10active sites
v2.2.0latest · 4mo ago

Install

Download ent-companion-2.2.0.zip From the v2.2.0 release on GitHub, Jun 23, 2026

Upload it under Plugins → Add New Plugin → Upload Plugin, then activate.

Install straight from GitHub with WP-CLI:

wp plugin install https://github.com/roots-and-fruit/ent-companion/releases/download/v2.2.0/ent-companion-2.2.0.zip
Updates itself. It ships its own updater, so new versions appear under Dashboard → Updates.

Ent Companion — abilities engine for WordPress MCP Adapter (snippets, preview, safe plugin updates).

Description

Registers a least-privilege ent-companion/* ability surface for Cursor agents via MCP Adapter. Site-specific abilities are added through FluentSnippets or Code Snippets — not bundled in the plugin.

Ability catalog

  • ent-companion/ping
  • ent-companion/list-plugins

When Public Post Preview is active:

  • ent-companion/enable-public-preview
  • ent-companion/get-public-preview-url

When FluentSnippets and/or Code Snippets is active:

  • ent-companion/snippets-list
  • ent-companion/snippets-get
  • ent-companion/snippets-create
  • ent-companion/snippets-update
  • ent-companion/snippets-activate
  • ent-companion/snippets-deactivate
  • ent-companion/snippets-verify

When WP Rollback is active:

  • ent-companion/plugin-update-safe

Custom abilities via snippets

  1. Create a snippet with ent-companion/snippets-create (tagged ec-ability, saved as draft).
  2. Use templates/ec-ability-snippet.example.php and ec_register_agent_abilities() inside wp_abilities_api_init.
  3. Activate with ent-companion/snippets-activate after review.
  4. Call ent-companion/snippets-verify after update/activate.

Dependencies

  • WordPress 6.9+ (Abilities API)
  • MCP Adapter plugin
  • FluentSnippets and/or Code Snippets (snippet workflow)
  • Public Post Preview (preview abilities; optional)
  • WP Rollback (plugin-update-safe; optional)

Installation

  1. Copy the plugin folder to wp-content/plugins/ent-companion/
  2. Activate via Plugins screen
  3. Confirm ent-companion/ping appears in MCP discover

Changelog

2.2.0

  • Fix plugin-update-safe: resolve package URLs from update_plugins transient (same as wp-admin) instead of the full WordPress.org versions map.
  • Fallback to plugins_api downloadlink, then downloads.wordpress.org URL for explicit target_version.

2.1.0

  • Add ent-companion/list-plugins — installed plugin inventory with optional status/search filters and update metadata.

2.0.0

  • Fork as Ent Companion (ent-companion/* namespace).
  • Remove bundled content CRUD and Block MCP bridge.
  • Add Code Snippets provider alongside FluentSnippets.
  • GitHub repo: Roots-and-Fruit/ent-companion (Git Updater).

Releases

3 releases. Each count is every asset in that release; expand a row for the breakdown.

Tag
Published
Assets
Downloads
v2.2.0 latest
Jun 23, 2026 4mo ago
ent-companion-2.2.0.zip
6
Jun 23, 2026 4mo ago
ent-companion-2.1.0.zip
9
Jun 23, 2026 4mo ago
ent-companion-2.0.0.zip
1

Active-site estimate ≈10 comes from the median of recent superseded releases. Method.

C- grade

Security

Ent Companion 2.2.0 · audited by WP Registry

High-severity findings.

1 high
Audited release
2.2.0
Findings
1
Worst severity
high
Content hash
4c2a66473680e1d4b2e26269…

Findings

  • high Editor can create and activate arbitrary PHP snippets via MCP abilities

    rce

    All seven snippet abilities (list/get/create/update/activate/deactivate/verify) use permission_callback EC_Permissions::can_manage_snippets, which is only current_user_can('unfiltered_html'). The inline comment claims this matches FluentSnippets REST; FluentSnippets actually requires install_plugins AND unfiltered_html for create/edit, and Code Snippets defaults to manage_options (code_snippets_cap). On a default single-site WordPress install, the Editor role has unfiltered_html and lacks both install_plugins and manage_options, so Editors are blocked in those UIs but allowed here. The abilities are mcp.public, so MCP Adapter's default server will list and execute them for any authenticated user who passes the ability callback (default MCP transport is logged-in + read). Execute paths call FluentSnippets\App\Helpers\Helper::createSnippet / updateSnippet / Snippet::updateSnippet and Code Snippets DB add/update/save with no second capability check. validate_ability_snippet_code only requires the PHP string to mention wp_abilities_api_init and a register helper; arbitrary PHP can be smuggled alongside those tokens. Observable: POST MCP tools/call execute-ability ability_name=ent-companion/snippets-create with name+code, then snippets-activate; a published PHP file appears under the FluentSnippets storage dir (or an active Code Snippets row) and runs on subsequent front-end/admin requests. Subscriber/Author/unauth are stopped. Administrators already have this power by design.

    includes/class-permissions.php:76-81

    Recommendation

    Require the same capabilities the snippet backends use: current_user_can('install_plugins') && current_user_can('unfiltered_html') when FluentSnippets is the provider, and current_user_can(code_snippets()->get_cap()) (default manage_options) when Code Snippets is the provider. Do not treat unfiltered_html alone as sufficient for writing executable PHP. Keep create as draft-only and require the tightened cap on activate/update as well.

WP Registry hashes the installable build and reports on that exact bytes-for-bytes copy. Embargoed findings are withheld until they are disclosed, so a clean verdict means nothing public is outstanding. WP Manifest does not audit code itself.