Joomla MCP Server
Provides tools for managing Joomla content including articles, categories, tags, modules, menus, media, languages, templates, extensions, and multilingual associations via Joomla's Web Services API.
MCP Server for Joomla
A Joomla 4, 5 and 6 component that exposes a Model Context Protocol (MCP) server over HTTP JSON-RPC. It lets MCP clients such as Claude Desktop and Cursor work with Joomla content through the site's own Joomla Web Services API.
Version: 1.4.2 · Requires: Joomla 4, 5 or 6 · PHP 8.1+ · Licence: GPL-2.0-or-later
Features
Administrator dashboard with request summary (totals, error rate and auth failures), a requests-per-day chart, top tools and methods, and a requests log
Security with bearer token authentication, optional IP allow-listing and CORS origin control
Configurable fixed-window rate limiting
Response caching through Joomla's cache layer
JSON Schema validation for MCP tool inputs
Health endpoint for monitoring
Joomla update server metadata for official releases
Related MCP server: MCP Terminal Tool Server
MCP Tools
The component exposes 66 tools grouped by Joomla domain. List tools include a pagination object (total_count, count, offset, has_more, next_offset) so agents can page through large result sets. Write tools use Joomla's Web Services API where possible; a small number of behaviours not exposed cleanly through Web Services (custom module HTML writes, multilingual associations, template file editing) are handled through Joomla's database or filesystem APIs.
Articles
Tool | Description |
| Retrieve a Joomla article by ID |
| Search Joomla articles |
| Create a new Joomla article |
| Update an existing Joomla article |
| Delete a Joomla article (trashes it first when needed, then deletes permanently) |
Categories
Tool | Description |
| List Joomla content categories (use to discover valid |
| Retrieve a Joomla content category by ID |
| Create a new Joomla content category |
| Update an existing Joomla content category |
| Delete a Joomla content category (trashes first, then deletes; the category must be empty) |
Tags
Tool | Description |
| List Joomla tags |
| Retrieve a Joomla tag by ID |
| Create a new Joomla tag |
| Update an existing Joomla tag |
| Delete a Joomla tag (trashes first, then deletes) |
Article versions
Tool | Description |
| List saved versions (content history) for a Joomla article |
| Retrieve a single article version from content history |
| Toggle the "keep forever" flag on an article version |
| Delete a single article version from content history |
| Restore a Joomla article to a previous saved version |
Article versioning tools require Joomla article versioning to be enabled.
Custom modules
Tool | Description |
| Create a new Joomla "Custom" ( |
| List all Joomla "Custom" ( |
| Retrieve a Joomla "Custom" module by ID |
| Update the content of a Joomla "Custom" module |
Modules
Tool | Description |
| List all Joomla modules |
| Retrieve a Joomla module by ID |
| Create a new module of any installed type (type-specific settings via |
| Update any Joomla module (all types); merges type-specific params |
| Delete a Joomla module and its page assignments |
Menus and menu items
Tool | Description |
| List all Joomla menus (menu types) |
| Create a new Joomla menu (menu type) |
| List menu items, optionally filtered by menu type |
| Retrieve a Joomla menu item by ID |
| Create a new Joomla menu item |
| Update an existing Joomla menu item |
| Delete a Joomla menu item (trashes first, then deletes) |
Media
Tool | Description |
| List Joomla media files and folders |
| Retrieve a single Joomla media file or folder by path |
| Upload a new Joomla media file |
| Create a new folder in the Joomla media library |
| Rename, move or replace an existing media file or folder |
| Delete a Joomla media file or folder by path |
Content languages
Tool | Description |
| List Joomla content languages (tags assignable to articles, menu items, etc.) |
| Retrieve a Joomla content language by ID |
| Create a new Joomla content language |
| Update an existing Joomla content language |
| Delete a Joomla content language by ID |
Installed languages
Tool | Description |
| List languages installed on the Joomla site (site and administrator clients) |
Template styles
Tool | Description |
| List Joomla template styles for the chosen client |
| Retrieve a Joomla template style by ID |
| Create a new template style for an already-installed template |
| Update an existing Joomla template style |
| Delete a Joomla template style |
Installed templates
Tool | Description |
| List templates installed on the Joomla site (site and administrator clients) |
Template files
Tool | Description |
| List editable source files of an installed template (Joomla's "Customise" view) |
| Read the source of a single template file |
| Overwrite the source of an existing template file |
| Create a template override by copying a core view, module, plugin or layout into the template |
Extensions
Tool | Description |
| List installed extensions (components, modules, plugins, templates, languages, …) |
| Enable or disable an installed extension (e.g. activate a plugin after installing it) |
| Install a Joomla extension from a base64 zip or a download URL (arbitrary code execution — restrict to trusted callers) |
| Uninstall an extension by |
install_extension, uninstall_extension and update_template_file are disabled by default because they allow code execution on the server. Remove them from the Disabled Tools list in the component options to opt in.
Multilingual associations
Tool | Description |
| List cross-language associations for a Joomla article |
| Set cross-language associations for a Joomla article |
| List cross-language associations for a Joomla site menu item |
| Set cross-language associations for a Joomla site menu item |
Not covered (by design)
User management, Joomla global configuration, custom fields (com_fields), contacts, banners and redirects are deliberately not exposed as tools. User accounts and global configuration in particular would widen the blast radius of a leaked bearer token well beyond content management. If your workflow needs one of these domains, open an issue — they are candidates for opt-in tools in a future release.
Installation
Download the latest com_mcpserver-<version>.zip package from the GitHub releases page, then install it in Joomla Administrator via System → Install → Extensions.
For a local development build:
./build.shThe build creates com_mcpserver-<version>.zip at the repository root. The version is read from mcpserver.xml.
Configuration
Open Administrator → Components → MCP Server → Options.
Key settings:
Server Name: identifier returned in MCP server information.Base URL: base URL of the Joomla site. Leave empty to use the current site.API Token: Joomla Web Services API token used for outbound REST calls.Verify SSL: verifies SSL certificates for outbound requests.Resolve Host To IP: optional. Pins the Base URL hostname to a specific IP (e.g.127.0.0.1) for the component's outbound REST calls only. Use when the server cannot reach its own public hostname (NAT hairpinning); the Host header and TLS validation still use the real hostname, soVerify SSLcan stay on.Cache TTL: response cache lifetime in seconds.Require Auth: requires MCP clients to send a bearer token.MCP Bearer Token: token clients must send inAuthorization: Bearer.IP Allow List: comma-separated client IP allow list.Allowed Origins: comma-separated CORS origin allow list.Trusted Proxies: comma-separated proxy IPs trusted forX-Forwarded-For.Read-Only Mode: when enabled, only read-only tools may run; every tool that writes, deletes or installs anything is blocked.Disabled Tools: comma- or newline-separated MCP tool names to block (e.g.delete_article). Defaults to the code-execution tools (install_extension,uninstall_extension,update_template_file); remove them to opt in, or enternoneto allow all tools (an emptied field reverts to the defaults when saved).Rate Limit RequestsandRate Limit Window: fixed-window rate limit settings.
Configuring the API Token
The API Token setting holds a Joomla Web Services API token. The component uses it to make outbound REST calls to your site's own Joomla Web Services API, which is how most MCP tools read and write content. Without a valid token, those tools will fail.
Enable the Web Services API. In the Joomla administrator, go to System → Global Configuration → Server and ensure the Web Services components are available. The relevant plugins live under System → Plugins; enable Web Services - Content (and any other
Web Services -plugins for the data you want to access). The API plugin System - Joomla API Authentication must also be enabled — it is by default.Create a token for a user. Tokens are tied to a Joomla user account, and API calls run with that user's permissions, so use an account that has the access the MCP tools need (for full functionality, a Super User or an account with the equivalent component permissions).
Go to Users → Manage, edit the chosen user, and open the Joomla API Token tab.
Set Token Enabled to Yes, click Save, then copy the generated token. (If the tab is missing, enable the User - Joomla API Token plugin under System → Plugins.)
Paste the token into the component options. Back in Components → MCP Server → Options, paste the value into API Token and click Save.
To verify the token works, call the health endpoint or issue any MCP tool that reads content; an authentication error in the response usually means the token is missing, disabled, or belongs to a user without sufficient permissions.
Security note: treat the API token like a password. It grants the token user's level of access to your site. Store it only in trusted configuration, and regenerate it (by toggling Token Enabled off and on) if it may have been exposed.
Endpoints
Method | Path | Description |
|
| MCP JSON-RPC endpoint in the site application |
|
| Server-Sent Events stream used by the stdio bridge |
|
| Site health endpoint |
|
| MCP JSON-RPC endpoint in the administrator application |
|
| Administrator health endpoint |
Desktop Client Bridge
For MCP clients that use stdio transport, run the included Node.js bridge. After installation it is located at components/com_mcpserver/mcp-http-bridge.js in your Joomla site root. When working from a repository checkout or extracted release zip, use site/mcp-http-bridge.js instead.
node components/com_mcpserver/mcp-http-bridge.js <endpoint-url> [bearer-token]Example:
node components/com_mcpserver/mcp-http-bridge.js "https://example.com/index.php?option=com_mcpserver&task=rpc.handle" "$MCP_BEARER_TOKEN"MCP client configuration
For your agent e.g. Codex, Cursor, Claude, Hermes, OpenClaw, etc., add a remote MCP proxy to your MCP client configuration file:
{
"mcpServers": {
"joomla": {
"command": "npx",
"args": [
"-y",
"mcp-remote",
"https://example.com/index.php?option=com_mcpserver&task=rpc.handle",
"--header",
"Authorization:${AUTH_HEADER}"
],
"env": {
"AUTH_HEADER": "Bearer your-mcp-bearer-token"
}
}
}
}The bearer token can also be supplied through HTTP_AUTH_BEARER. Set MCP_IGNORE_SSL=1 only for local development with self-signed certificates.
Release Build
composer validate --working-dir=admin --no-check-publish
./build.shLicence
MCP Server for Joomla is free software released under GPL-2.0-or-later.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/OnepointConsultingLtd/joomla-mcp-server'
If you have feedback or need assistance with the MCP directory API, please join our Discord server