Cybersalt Extensions Documentation
Guides and reference for Cybersalt's Joomla extensions
  1. You are here:  
  2. Home
  3. Extensions
  4. MCP for JCE

MCP for JCE

MCP for JCE is a free add-on for MCP for J. It gives an AI app connected to your Joomla site 21 tools for JCE editor profiles: who gets which profile, what's on the toolbar, what each profile allows, and a read-only audit for the signs of a known attack. It works with JCE Free and Pro.

New to MCP for JCE? This page is the reference manual. For an overview of what MCP for JCE does, and the download, see its page on cybersalt.com.

Release history. This page documents version 1.0.4. For what changed in each version, see the changelog.

Requirements. Joomla 5 or 6, PHP 8.2 or newer, MCP for J, and JCE (Free or Pro). Write tools are refused on JCE below 2.9.99.5, which carries CVE-2026-48907. Reads still work there, so you can find out what happened. The add-on is released under the GNU GPL v2 or later.

What's in the package

One plugin, System - MCP for JCE (element csmcpforjjce). It adds its tools to MCP for J and has no admin screen of its own. The tools appear in your AI app the next time it asks MCP for J for its tool list.

Installing

Install MCP for J first and connect your AI app to it. Then pick one of these:

  1. From inside Joomla (recommended). Open Components → MCP for J → Browse MCP Add-ons and install the JCE add-on. Updates then arrive through System → Update → Extensions.
  2. From the zip. Download it from the product page and install it in System → Install → Extensions.

First steps

Ask your AI app "Audit my JCE profiles" and "Is anything wrong with my JCE setup?". Both are read-only. Take a backup before you let any AI app make changes to a site you care about.

Permissions

The AI can never do more than the Joomla account it acts for could do in JCE itself. Each tool needs MCP for J's Use permission (reading) or Write permission (changes), and on top of that:

ToolsThe account needs, in JCE
Version and editionAccess Component
Profiles, assignment, toolbar, profile settings, plugins, the health check and the auditAccess Component and Editor Profiles
Reading JCE's global settingsAccess Component and Editor Global Configuration

Super Users pass every check. A Super User can grant these in JCE's Options, on the Permissions tab. The refusal names what's missing.

The set_jce_profile_state response for a Manager account: refused because the account does not have JCE's Access Component permission ⤢ Click to enlarge
A Manager account with no access to JCE.

Updating from 1.0.2 or earlier? Before 1.0.3, any account with MCP access could use every tool. If a non-Super User connects an AI app, check that account's permissions in JCE after you update.

HTML in profiles. Profile names, descriptions and component lists refuse HTML, because JCE's own save strips it. Settings are stored with special characters encoded, as JCE stores them, and the response lists the ones that changed.

The tools

21 tools in 5 groups. Your AI app picks the right one from what you ask.

GroupWhat they do
Profiles (8)List, read, create, change, delete, duplicate, publish or unpublish, and reorder.
Assignment (3)Read and set who a profile is for, and work out which profile a given user gets.
Editor (4)Read and set the toolbar, and read and set profile settings.
Plugins (2)List JCE's plugins and toolbar names, and read one plugin's settings.
Diagnostics (4)Version and edition, global settings, a health check, and the security audit.

The security audit

JCE below 2.9.99.5 carried CVE-2026-48907. One way it was used was to plant an editor profile that allowed PHP uploads, then upload a webshell through JCE's own file browser. Updating JCE doesn't remove that profile.

audit_jce_profiles is read-only. It reads every profile and reports the indicators that matter: executable types in upload lists, a profile pinned above the others, a folder outside the media root, MIME checks switched off, assignment to the Public group, and profiles it couldn't read because their settings are encrypted. It also checks your JCE version.

The audit_jce_profiles response: verdict critical, one profile with findings, and a demo profile named Demo Hostile that allows php uploads ⤢ Click to enlarge
The audit finding a hostile demo profile on a test site.

A clean audit isn't a clean site. This finds the profile half of a compromise only. Webshells on disk, rogue Super Users, scheduled tasks and changed .htaccess files are out of its scope. If it finds something, record the profile first, then update JCE and investigate. Don't delete it yet.

Why writes are careful

  • Executable upload types are refused every time, for everyone, in any position. The whole call is refused so you always know what happened. There's no override.
  • There's no profile import. Each write is a named, field-level change.
  • Writes are refused on JCE below 2.9.99.5. Reads still work there.
  • Encrypted settings are refused both ways, so a write can't replace them with plain text by accident.
  • Security flags only tighten from here. You can't loosen them through these tools.
The set_jce_profile_params response refusing php in browser.extensions, explaining the CVE and that there is no override ⤢ Click to enlarge
Trying to allow .php uploads.

Which profile does someone get?

JCE uses the first published profile that matches on group, component, area and device. resolve_jce_profile_for replays that for a given user and shows every profile it considered, with each test it passed or failed.

The resolve_jce_profile_for response: the context, the matched profile and a trace of the tests ⤢ Click to enlarge
Working out a Super User's profile in articles.

Toolbars and silent faults

JCE accepts an unknown toolbar name and then quietly drops the button. set_jce_profile_toolbar checks every name against what's installed on your site first, and refuses the whole change if one is wrong. A button also has to be in both the toolbar and the plugin list, and check_jce_health finds those gaps, along with faults such as having no published profile, which leaves everyone with no editor.

The set_jce_profile_toolbar response refusing an unknown button name ⤢ Click to enlarge
An unknown toolbar name.
The check_jce_health response: warnings for buttons in the toolbar whose plugins are not enabled ⤢ Click to enlarge
Health check warnings on JCE's default profiles.

Profile settings

set_jce_profile_params sets or removes settings by path. Everything you didn't name is kept, and the response lists each change. It has a preview. API keys kept in profile settings, such as the AI Assistant plugin's apikey, read [redacted] everywhere, and are stored as set.

The get_jce_profile_params response: aia.apikey shown as redacted beside the other settings ⤢ Click to enlarge
An API key masked in a profile's settings.

Troubleshooting

SymptomCause and fix
No JCE tools in the AI appCheck that MCP for J is installed, System - MCP for JCE is enabled in System → Plugins, and the AI app has refreshed its tool list.
A tool says "Refused: …"The account is missing that JCE permission. See Permissions.
Every write is refusedJCE is older than 2.9.99.5. Update it, then run the audit.
A button doesn't showRun check_jce_health. The button probably isn't in both the toolbar and the plugin list.
A Pro button reads as unknownThe JCE Pro system plugin is off, or JCE was moved from Pro to Free and a profile still lists it.

Getting help

Questions and bug reports are welcome through the Cybersalt support form. Please include your Joomla, PHP, JCE, MCP for J and add-on versions, and the tool response that surprised you.


MCP for JCE is developed by Cybersalt Consulting Ltd. and released under the GNU General Public License v2 or later. It is not made or endorsed by Widget Factory.

A permission refusal — click anywhere to closeClose ×A permission refusal The security audit — click anywhere to closeClose ×The security audit An executable type refused — click anywhere to closeClose ×An executable type refused Which profile wins — click anywhere to closeClose ×Which profile wins An unknown toolbar name — click anywhere to closeClose ×An unknown toolbar name Health check warnings — click anywhere to closeClose ×Health check warnings A masked API key — click anywhere to closeClose ×A masked API key

Subcategories

Changelog

Main Menu

  • Home
  • Extensions A-Z
  • Guides