MODX MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| MODX_MCP_TOKEN | Yes | Authentication token for the MODX MCP API | |
| MODX_MCP_SITE_URL | Yes | URL of the MODX MCP API endpoint | |
| MODX_MCP_AUDIT_HOOK | No | Optional external audit hook |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| modx_list_elementsC | List MODX elements of a type (id + name). Supports an optional name filter and pagination. |
| modx_make_staticA | Convert a chunk/snippet/template/plugin to a static file under core/elements/ (writes the file, sets static=1 + source=Filesystem). One element via {type,id}, or a batch via {items:[{type,id}]}. Edit the resulting files directly afterwards. (See also the modxmcp.auto_static setting to do this automatically on every create/update.) |
| modx_get_site_stateB | Read the connector-authoritative site revision and atomic-precondition capability used by Site Agent Runtime. |
| modx_get_elementA | Read a MODX element (returns its fields + full code). For a large chunk/snippet/template/plugin you only need to edit, prefer modx_view_element (numbered, windowable) so you don't pull the whole body into context. |
| modx_update_element_propertyB | Change ONLY the value of one EXISTING default property of a snippet, chunk, plugin or template. Requires expected_value (compare-and-swap); preserves other property definitions and source code, uses standard MODX update processor. |
| modx_update_elementA | Update a MODX element by REPLACING its whole content (send the complete new |
| modx_create_elementD | Create a new MODX element. |
| modx_delete_elementA | Delete a MODX element. Run with dry_run:true FIRST — it returns what would be deleted plus where the element is still referenced (for resources: child-resource count), without deleting. Review that before the real delete. |
| modx_view_elementA | View a chunk/snippet/template/plugin as NUMBERED lines (like |
| modx_edit_element_linesA | Edit a chunk/snippet/template/plugin BY LINE, sending only the changed lines (no need to resend the whole element). Each edit replaces the inclusive range [start_line..end_line] with |
| modx_list_system_settingsC | List MODX system settings. |
| modx_get_system_settingC | Get one MODX system setting by key. |
| modx_create_system_settingC | Create a MODX system setting. |
| modx_update_system_settingC | Update a MODX system setting by key. |
| modx_delete_system_settingC | Delete a MODX system setting by key. |
| modx_list_media_sourcesC | List MODX media sources. |
| modx_get_media_sourceC | Get one MODX media source. |
| modx_create_media_sourceB | Create a media (file) source. class_key defaults to sources.modFileMediaSource. 'properties' is a {name:value} map of source params (e.g. {"basePath":"assets/files/","baseUrl":"assets/files/"}) merged into the source. |
| modx_update_media_sourceB | Update a media source. 'properties' is a {name:value} map merged into the source's params (others preserved) — use it to set basePath/baseUrl/etc. |
| modx_delete_media_sourceC | Delete a media source by id. |
| modx_list_media_source_filesC | List files and folders inside a media source. |
| modx_read_media_source_fileC | Read a file inside a media source. |
| modx_list_installed_componentsB | List installed MODX components from core/components and assets/components. |
| modx_get_component_filesC | List files and folders inside an installed MODX component. |
| modx_read_component_fileC | Read a file from an installed MODX component. |
| modx_get_resource_tvsC | Get a resource's template-variable (TV) values. |
| modx_update_resource_tvsC | Update a resource's template-variable (TV) values. |
| modx_list_tv_valuesA | List explicitly stored values for one TV across all resources, including stale values on resources whose current template may no longer use that TV. Use before deleting or restructuring a TV. |
| modx_clear_tv_valuesA | Preview or clear every explicitly stored value for one TV. Safe by default: without confirm:true it only returns the number of stored values. Destructive; use only as part of the staged TV deletion workflow after backup. |
| modx_versionx_list_versionsB | List VersionX versions for a MODX resource, chunk, snippet, template, plugin, or TV. |
| modx_versionx_get_versionC | Read one VersionX version payload before deciding whether to revert to it. |
| modx_versionx_revert_versionA | Revert a MODX object to a specific VersionX version. This changes live MODX data and requires confirm=true. |
| modx_ms2_list_option_typesB | List available miniShop2 product option field types. |
| modx_ms2_list_optionsC | List miniShop2 product options from the settings options tab. |
| modx_ms2_get_optionC | Read one miniShop2 product option by id. |
| modx_ms2_create_optionC | Create a miniShop2 product option in settings options. |
| modx_ms2_update_optionC | Update a miniShop2 product option in settings options. |
| modx_ms2_assign_option_to_categoryC | Assign an existing miniShop2 option to an msCategory. |
| modx_ms2_get_product_optionsC | Read miniShop2 option values assigned to a product. |
| modx_ms2_update_product_optionsC | Create, update, or remove miniShop2 option values for a product. Use null value to remove an option value. |
| modx_virtualpage_list_eventsC | List VirtualPage events that bind route groups to MODX events. |
| modx_virtualpage_get_eventB | Read one VirtualPage event by id or name, including its routes. |
| modx_virtualpage_create_eventC | Create a VirtualPage event, usually OnPageNotFound or OnHandleRequest. |
| modx_virtualpage_update_eventC | Update a VirtualPage event by id or name. |
| modx_virtualpage_list_handlersC | List VirtualPage handlers that render resources, snippets, chunks, or dynamic resources. |
| modx_virtualpage_get_handlerB | Read one VirtualPage handler by id or name, including routes that use it. |
| modx_virtualpage_create_handlerC | Create a VirtualPage handler. type can be resource, snippet, chunk, dynamic_resource/template, or 0..3. |
| modx_virtualpage_update_handlerC | Update a VirtualPage handler by id or name. |
| modx_virtualpage_list_routesC | List VirtualPage routes with their event and handler names. |
| modx_virtualpage_get_routeA | Read one VirtualPage route by id, or by route plus optional method. |
| modx_virtualpage_create_routeC | Create a VirtualPage route and bind its event plugin if needed. |
| modx_virtualpage_update_routeC | Update a VirtualPage route by id. |
| modx_virtualpage_resolve_routeC | Simulate VirtualPage route matching and return handler plus vp.* placeholders. |
| modx_virtualpage_delete_eventB | Delete a VirtualPage event by id or name (removes its routes too, per the VP schema). |
| modx_virtualpage_delete_handlerC | Delete a VirtualPage handler by id or name. |
| modx_virtualpage_delete_routeC | Delete a VirtualPage route by id or name. |
| modx_virtualpage_clear_cacheB | Clear VirtualPage route/cache files and refresh MODX cache. |
| modx_search_codeA | Full-text search across element and resource CONTENT (and names). Finds the chunk/snippet/template/plugin/TV/resource that contains a string, including where an element is referenced or mentioned. Matches static elements by reading their static file. Use this to navigate the codebase (e.g. query 'header' finds the header chunk and everything that uses or mentions it). Each content hit returns |
| modx_find_usagesA | Find where an element is used: content matches for its name across all code, plus — if it is a template — the resources assigned to that template. Use before renaming/deleting an element. |
| modx_list_resourcesA | List resources (the content tree), optionally filtered by parent, context, deleted state, or a pagetitle/alias/uri query. Returns id, pagetitle, alias, uri, parent, template, published, deleted, isfolder, class_key, context_key. |
| modx_replace_acrossA | Site-wide search & replace across code elements (chunk/snippet/template/plugin): find every element whose CONTENT contains |
| modx_dependency_graphA | Map how the site's elements WIRE TOGETHER, in one call: which template pulls which chunk/snippet/TV, which snippet renders which chunk, where each TV is attached. Returns |
| modx_describe_objectA | Schema introspection: list an xPDO class's fields (name + php/db type, null, default) and its primary key, so you use REAL field names instead of guessing. Accepts a class name (e.g. modResource) or an alias (resource/chunk/snippet/template/plugin/tv/category/user/context/setting). Use before create/update on an unfamiliar object. |
| modx_bulk_resourcesA | Apply ONE operation to many resources at once: publish, unpublish, set_template (needs |
| modx_create_media_fileB | Create a file inside a media source (writes content). |
| modx_update_media_fileB | Overwrite a file's content inside a media source. |
| modx_delete_media_fileC | Delete a file inside a media source. |
| modx_rename_media_fileC | Rename a file inside a media source. |
| modx_create_media_folderB | Create a folder inside a media source. |
| modx_delete_media_folderB | Delete a folder (and its contents) inside a media source. |
| modx_duplicate_resourceB | Duplicate a resource. |
| modx_duplicate_elementC | Duplicate an element (chunk/snippet/template/plugin/tv). |
| modx_undelete_resourceA | Restore a soft-deleted resource from the trash (un-deletes it). |
| modx_empty_recycle_binA | Permanently purge ALL trashed (soft-deleted) resources. Irreversible — there is no further undo. |
| modx_reorder_resourcesC | Reorder resources in the tree by setting menuindex (and optionally parent). |
| modx_read_error_logA | Read the tail of the MODX error log (core/cache/logs/error.log) for diagnostics. Optional |
| modx_refresh_urisA | Regenerate all resource URIs (run after bulk alias/structure changes that left stale URIs). |
| modx_remove_locksA | Clear stale manager edit locks (when an element/resource is reported locked by a dead session). |
| modx_project_overviewA | Orient on the whole installed site in ONE compact, cheap call. Returns STRUCTURE + COUNTS (not content): template↔TV map, resource/product COUNTS (overall + by template + by context), a shallow resource tree (roots + child counts only), element categories, content types, contexts, installed integrations. Token-safe on huge sites (100k resources return the same small payload) — for per-item browsing use list_resources / list_elements. Call this FIRST when starting on an unfamiliar project. Optional |
| modx_system_infoA | Environment/diagnostic info: MODX version, modxMCP version, PHP version, db type, key paths. |
| modx_suggest_tv_typeA | Unsure which TV input type fits a need? Describe it (English or Russian) and get ranked candidate |
| modx_list_tv_input_typesA | List the TV input (widget) types available on this site. Core types come with |
| modx_check_integrationsA | Report which popular MODX add-ons (miniShop2, MIGX, pdoTools, Tickets, etc.) are installed on this site and what modxMCP can do with each. Read-only. |
| modx_regenerate_tokenA | Rotate the modxmcp.api_token to a fresh random value and return it. NOTE: this invalidates the current token — update MODX_MCP_TOKEN in your client config immediately, or the next call will be unauthorized. |
| modx_ms2_list_link_typesC | List miniShop2 link types (msLink): id, type, name, description. |
| modx_ms2_get_link_typeC | Get a miniShop2 link type by id. |
| modx_ms2_create_link_typeB | Create a miniShop2 link type. 'type' is the relation kind that decides how products get linked. |
| modx_ms2_update_link_typeD | Update a miniShop2 link type. |
| modx_ms2_delete_link_typeC | Delete a miniShop2 link type by id. |
| modx_ms2_list_product_linksB | List product-to-product links (msProductLink), optionally for one product. Returns link type + master/slave with pagetitles. |
| modx_ms2_create_product_linkB | Link two products under a link type. The link type's relation kind decides whether the reverse link is also created. |
| modx_ms2_delete_product_linkC | Remove a product link (by link type + master + slave). |
| modx_ms2_list_categoriesC | List miniShop2 categories (msCategory). |
| modx_ms2_create_categoryC | Create a miniShop2 category (msCategory resource). |
| modx_ms2_update_categoryC | Update a miniShop2 category. |
| modx_ms2_list_ordersB | List miniShop2 orders (msOrder), filterable by status/customer/context/date range. |
| modx_ms2_get_orderC | Get a miniShop2 order by id (with items/customer). |
| modx_ms2_update_orderB | Update a miniShop2 order — typically to change its status (triggers ms2 status-change logic), delivery or payment. |
| modx_migx_list_configsC | List MIGX configurations (migxConfig): id, name, category, published. |
| modx_migx_get_configA | Get a full MIGX configuration by id (formtabs, columns, buttons, filters, permissions — as stored JSON strings). |
| modx_migx_create_configB | Create a MIGX configuration. formtabs/columns/contextmenus/actionbuttons/columnbuttons/filters are JSON strings (same format MIGX stores in the manager). |
| modx_migx_update_configC | Update a MIGX configuration. Only the fields you pass are changed. |
| modx_migx_delete_configC | Delete a MIGX configuration by id. |
| modx_clientconfig_list_settingsC | List ClientConfig settings including context-specific values. |
| modx_clientconfig_get_settingC | Get a ClientConfig setting by id or key. |
| modx_clientconfig_create_settingD | Create a ClientConfig setting. |
| modx_clientconfig_update_settingC | Update a ClientConfig setting by id or key. |
| modx_clientconfig_delete_settingC | Delete a ClientConfig setting by id or key. |
| modx_list_property_setsC | List property sets (modPropertySet): id, name, description, category. |
| modx_get_property_setB | Get a property set by id (incl. its properties). |
| modx_create_property_setC | Create a property set. 'properties' is a JSON object of property definitions. |
| modx_update_property_setD | Update a property set. |
| modx_delete_property_setC | Delete a property set by id. |
| modx_assign_property_setB | Attach a property set to an element. Identify the element with its id + either element_class (e.g. 'modSnippet') or element_type ('snippet'/'chunk'/'template'/'plugin'/'tv'). |
| modx_unassign_property_setC | Detach a property set from an element (same identification as assign). |
| modx_helpA | Built-in documentation. Call with no args to list topics; pass {topic} for a guide (e.g. 'tv_input_types', 'study_component', 'minishop2', 'migx', 'acl', 'getting_started'). Read the relevant topic before unfamiliar work, or to learn how to use a newly-installed component. |
| modx_list_actionsA | List the action names this modxMCP server build supports, grouped by area. Use it to detect client/server version skew. |
| modx_clear_cacheA | Refresh the MODX cache. Pass partitions (e.g. ['resource','context_settings']) to refresh only those; omit for a full refresh. |
| modx_flush_permissionsA | Flush cached access permissions (the manager's 'Flush Permissions') so ACL changes apply. ACL write tools already do this automatically; use this for a manual flush. |
| modx_read_audit_logA | Read the modxMCP write-audit trail (newest last). Optionally filter to one action. |
| modx_run_processorA | Run ANY MODX processor directly (escape hatch). Requires the modxmcp.allow_run_processor setting to be enabled. High privilege — prefer a dedicated tool when one exists. |
| modx_list_usersC | List manager/web users (modUser). |
| modx_get_userC | Get a user by id. |
| modx_create_userB | Create a user. Pass 'password' to set it explicitly; omit to auto-generate. Profile fields (email, fullname, phone…) are accepted alongside. |
| modx_update_userC | Update a user (profile fields, active state). |
| modx_delete_userC | Delete a user by id. |
| modx_list_contextsC | List contexts (modContext): key, name, description, rank. |
| modx_get_contextC | Get a context by key. |
| modx_create_contextC | Create a context. 'key' is the unique identifier (e.g. 'mobile'). |
| modx_update_contextC | Update a context (name/description/rank). 'settings' may be a JSON array of context settings (advanced). |
| modx_delete_contextC | Delete a context by key. |
| modx_list_context_settingsC | List settings of a context (modContextSetting). |
| modx_get_context_settingC | Get one context setting (by context_key + key). |
| modx_create_context_settingB | Create a context-level setting (overrides the system setting for that context). |
| modx_update_context_settingC | Update a context setting (by context_key + key). |
| modx_delete_context_settingC | Delete a context setting (by context_key + key). |
| modx_install_packageB | Install a transport package from a provider (default modx.com) by name, e.g. {package:'MIGX'}. Returns 'already_installed' if present. |
| modx_uninstall_packageC | Uninstall a transport package by signature (e.g. 'migx-2.13.0-pl'). |
| modx_list_providersA | List transport providers (modx.com and custom, e.g. modstore.pro): id, name, service_url. |
| modx_search_packagesA | Search a provider's catalogue (use before install_package). Defaults to modx.com. |
| modx_create_providerB | Add a transport provider (e.g. modstore.pro). For paid providers pass username + api_key. |
| modx_update_providerC | Update a transport provider. |
| modx_delete_providerC | Delete a transport provider by id. |
| modx_list_namespacesC | List namespaces (modNamespace): name, path, assets_path. |
| modx_create_namespaceD | Create a namespace. |
| modx_update_namespaceC | Update a namespace (by name). |
| modx_delete_namespaceB | Delete a namespace by name ('core' cannot be deleted). |
| modx_list_lexicon_entriesC | List lexicon entries, filtered by namespace + topic + language (and optional search). |
| modx_list_lexicon_topicsC | List lexicon topics for a namespace/language. |
| modx_set_lexicon_entryC | Create or override a lexicon entry (DB override of the file value). |
| modx_revert_lexicon_entryB | Revert a lexicon entry — remove its DB override so the file value applies. |
| modx_list_user_groupsC | List MODX user groups (id, name, parent, rank). |
| modx_get_user_groupB | Get a single user group by id. |
| modx_create_user_groupC | Create a user group. |
| modx_update_user_groupD | Update a user group. |
| modx_delete_user_groupC | Delete a user group by id. |
| modx_list_user_group_membersC | List members of a user group. |
| modx_add_user_to_groupC | Add a user to a user group, optionally with a role. |
| modx_update_group_memberC | Update a user's membership in a group (e.g. change role). |
| modx_remove_user_from_groupC | Remove a user from a user group. |
| modx_list_rolesC | List access roles (id, name, authority). |
| modx_get_roleC | Get a role by id. |
| modx_create_roleC | Create a role. |
| modx_update_roleD | Update a role. |
| modx_delete_roleC | Delete a role by id. |
| modx_list_access_policiesC | List access policies (id, name, description, template). |
| modx_get_access_policyC | Get an access policy by id. |
| modx_create_access_policyC | Create an access policy. |
| modx_update_access_policyC | Update an access policy (e.g. its permissions map). |
| modx_delete_access_policyC | Delete an access policy by id. |
| modx_list_access_policy_templatesC | List access policy templates. |
| modx_get_access_policy_templateC | Get an access policy template by id. |
| modx_create_access_policy_templateC | Create an access policy template. |
| modx_update_access_policy_templateD | Update an access policy template. |
| modx_delete_access_policy_templateC | Delete an access policy template by id. |
| modx_list_access_permissionsB | List permissions defined by a policy template (read-only catalogue). |
| modx_list_resource_groupsC | List resource groups (id, name). |
| modx_get_resource_groupC | Get a resource group by id. |
| modx_list_resource_group_resourcesC | List resources assigned to a resource group. |
| modx_create_resource_groupD | Create a resource group. |
| modx_update_resource_groupC | Update a resource group. |
| modx_delete_resource_groupC | Delete a resource group by id. |
| modx_assign_resource_to_groupB | Add a resource (document) to a resource group. |
| modx_remove_resource_from_groupC | Remove a resource (document) from a resource group. |
| modx_list_context_accessB | List context-access ACL entries, optionally filtered by usergroup/context/policy. |
| modx_grant_context_accessC | Grant a user group access to a context with a policy and minimum role authority. |
| modx_update_context_accessC | Update a context-access ACL entry by id. |
| modx_revoke_context_accessC | Remove a context-access ACL entry by id. |
| modx_list_resourcegroup_accessC | List resource-group access ACL entries. |
| modx_grant_resourcegroup_accessB | Grant a user group access to a resource group with a policy and minimum role authority. |
| modx_update_resourcegroup_accessC | Update a resource-group access ACL entry by id. |
| modx_revoke_resourcegroup_accessC | Remove a resource-group access ACL entry by id. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 192 tools
Most tools are distinct and namespaced by domain, but several clusters overlap: get_element vs view_element, update_element vs edit_element_lines, search_code vs find_usages vs dependency_graph, and run_processor as a broad escape hatch. With 192 tools, an agent can still misselect among similar read/edit/search tools, though the detailed descriptions mitigate this.
Names consistently use the modx_ prefix and snake_case, with clear domain prefixes such as ms2, virtualpage, migx, clientconfig, and versionx. A few names like project_overview, system_info, dependency_graph, and make_static deviate from strict verb_noun form but remain readable and predictable.
192 tools is far beyond a well-scoped MCP surface; even with domain grouping, the set imposes high selection and context costs. It may mirror a full CMS admin API, but as a coherent toolset it is extremely oversized.
Coverage is broad across elements, settings, media, ACL, packages, and add-ons, but core resource lifecycle is notably incomplete: list/bulk/duplicate/undelete exist, yet there is no direct get/create/update resource content tool. Agents must fall back to the high-privilege run_processor for common page edits.