Repository navigation
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;
searchreports the kinds a user may not read instead of silently narrowing;site_infowithholds gated listings. - The standalone endpoint
mcp.phpnow ships disabled behind themodxmcp.enable_standalone_endpointsystem 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 becomes1, the start page). - The Manager connector processors (token create/revoke, audit clear, settings) now enforce the
settingspermission 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.