MCP server for MODX Revolution CMS providing tools to manage content, elements, categories, and resources through the MODX processor pipeline
modxmcp demonstrates solid definition quality with comprehensive schemas, detailed descriptions, and clear parameter documentation. All 9 tools have explicit input schemas with type definitions and descriptions. Tool names follow verb_noun conventions (cache_refresh, category_delete, element_get). Descriptions are substantive (100-400+ chars), explaining when to use each tool and dependencies. However, output schemas are not documented, responses are inferred from code comments rather than explicit schema declarations. Error handling is present but inconsistent: some tools provide recovery guidance (e.g., category_delete names conflicting elements), others do not. No tool annotations (readOnlyHint/destructiveHint) despite clear risk classifications in metadata. Parameter validation is strong (enums for element types, cache partitions), but some complex parameters (input_properties, output_properties for TVs) lack detailed format guidance.
Clear MODX caches. You do not normally need this after creating or updating content through the other tools, because they write through MODX processors which invalidate the cache themselves. Use it after changes made outside that path, or when the site is serving stale output. Called with no partitions it also drops modxmcp's own discovery and advisory caches, which is what to do when an extra has just been installed or removed and modxmcp_schema_list or modxmcp_site_info still describes the site as it was.
Permanently remove an element category. The category must be empty: one still holding chunks, snippets, templates, template variables or plugins is refused, and so is one with sub-categories, with the contents named so you can see what to move first. This is stricter than MODX, which deletes the category regardless and quietly resets everything inside it to uncategorised, cascading through sub-categories as it goes. Reassign elements with modxmcp_element_save before deleting. The elements themselves are never touched by this tool.
List the categories elements can be filed under, with their parent and how many elements of each type they hold. Use this to turn a category name into the id that modxmcp_element_save expects, or to see where similar elements already live.
Create an element category, or rename an existing one by id. Categories group chunks, snippets, templates, template variables and plugins in the Manager tree. Use modxmcp_category_list first to check whether the category you want already exists under a slightly different name.
Output schemas not documented. Tool descriptions explain what is returned (e.g., 'names and ids without bodies'), but no formal JSON Schema for response structure. LLMs cannot plan downstream tool calls or extract fields reliably without documented output types.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint). Tools are marked with Risk metadata (READ_ONLY, WRITE, DESTRUCTIVE) in comments, but not exposed via MCP tool annotations. Agents cannot distinguish safe from dangerous operations without reading descriptions.
Complex object parameters (input_properties, output_properties, properties array) lack detailed format guidance. Descriptions say 'Configuration for the chosen input type' but do not specify structure, required keys, or valid value types. LLMs will guess at structure.
Inferred effective spec: 2025-06-18+.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 52 | 2025-06-18+ | v2 |
List resources that are Collections containers. Check this before creating a resource: children of a container must be created with show_in_tree=false and an explicit menuindex, or they disappear from the Collections grid even though they exist and are published.
Permanently remove a chunk, snippet, template, template variable or plugin. There is no recycle bin for elements, so this cannot be undone from the Manager. MODX refuses to remove a template any resource still uses, and a template variable any template still declares: reassign the resources with modxmcp_resource_update, or detach the variable with modxmcp_element_save, first. A chunk, snippet or template variable that something still calls is removed anyway, but the result names the callers in warnings, and removed.content carries the body so it can be recreated.
Fetch one chunk, snippet, template, template variable or plugin by id or name, including its body. Read this before saving over an element: modxmcp_element_save replaces the body outright.
List chunks, snippets, templates, template variables or plugins. Returns names and ids without bodies, so it is cheap to call. Use modxmcp_element_get for the body of one element.
Create an element, or replace an existing one. Pass id to update a known element; otherwise the name decides: an existing element with that name is updated, and a new one is created if there is none. The body is replaced outright, so read the current one with modxmcp_element_get first if you mean to edit rather than overwrite.
Error recovery guidance inconsistent. category_delete provides detailed conflict messages ('contents named so you can see what to move first'), but element_delete and element_save do not explain how to resolve common failures (e.g., 'template still in use').
Pagination not implemented for list tools. modxmcp_element_list accepts limit and offset, but modxmcp_category_list and modxmcp_collections_containers do not. Inconsistent pagination support risks context window exhaustion on large result sets.