Skip to content

1.2.0

Latest

Choose a tag to compare

@karamble karamble released this 09 Oct 20:00
7fe4b95

A security release. An external report (issue #11) showed the read tools checked the calling token's scope and nothing else: a token bound to a Load Only MODX user could read every resource with its content, every element, and every plugin's code — none of which that user can open in the Manager. That contract is now enforced, and mapping the fix turned up two further holes.

Highlights

  • Every tool asks MODX for the permission the Manager requires for the same action, and refuses by name. Resource-group and element-category policies apply per object; search reports the kinds a user may not read instead of silently narrowing; site_info withholds gated listings.
  • The standalone endpoint mcp.php now ships disabled behind the modxmcp.enable_standalone_endpoint system setting (404 until enabled). On the optional standalone route MODX had been evaluating no policy at all; both routes now start and discard a session, and a request MODX can't evaluate fail-closes with a 503.
  • Tool arguments are validated against each tool's declared inputSchema: unknown keys refused with a suggestion, wrong-typed values refused rather than cast (an array id no longer becomes 1, the start page).
  • The Manager connector processors (token create/revoke, audit clear, settings) now enforce the settings permission they declared but never checked.
  • ToolRegistry::get() and a documented replace-on-register contract let an extra wrap a built-in tool without reflection.
  • The pre-install validator now refuses PHP < 8.2, matching the manifest.

Upgrade notes

The upgrade rewrites files only — system settings, tokens, the audit log and the endpoint resource are preserved. Two behaviour changes: the standalone route is off unless you enable its setting (a site using mcp.php must turn it on after upgrading), and a token bound to a user with a narrower policy than its work now gets a refusal naming the permission where it previously got data — which is the fix.

Full detail in core/components/modxmcp/docs/changelog.txt.

Package: modxmcp-1.2.0-pl.transport.zip · build 35272584d0d0 · sha256 6095428174f8cd5042a69c06d24959f1275447edb9720222665f40756da7b6e2.