Craft CMS MCP
Version 1.3.0
July 7, 2026
Added
logLevelconfiguration option to control MCP server log verbosity (storage/logs/mcp-server.log). Set to'debug'for full tool dispatch logging. Default:'error'(#10)- Debug logging in
tinkertool for execution tracing, security blocks, and error diagnostics
Fixed
tinkertool now wraps execution inSafeExecution, ensuring unexpected errors surface with real messages instead of the generic "Tool execution failed" (#10)- Stray output (echo/print/PHP notices from tinker'd code or Craft) no longer corrupts the stdio JSON-RPC stream; it is rerouted to stderr via a non-removable output buffer in
bin/mcp-server tinkertool blocks unboundedwhile (ob_get_level())teardown loops, which would spin forever against the non-removable stdout shieldtinkertool now drains only output buffers it opened (baseline-aware): the previousob_get_level() > 0guard closed outer buffers such as the stdout shield, clobbering the original error with anErrorExceptionwhen user code had closed the capture buffer- Added explicit
psy/psyshrequirement: tinker relied on it arriving transitively (e.g. viayiisoft/yii2-shell) and fatally errored on installs without it run_queryandexplain_queryno longer reject legitimate SELECTs whose columns contain a blocked keyword as a substring (e.g.dateCreatedmatchedCREATE,dateUpdatedmatchedUPDATE); the read-only guard now matches keywords on word boundaries via the sharedSqlReadGuard, andexplain_querygained the stronger keyword setget_deprecationsdatabase lookup selected a nonexistenttemplatecolumn, so the query always failed and was silently swallowed; the column is removed and the query now runsget_table_countsandget_deprecationscheck table existence via schema instead of catching everyThrowable, so a genuine database error surfaces instead of being masked as "Table not found" / zero resultslist_asset_foldersno longer dereferences a null root folder when a volume has no indexed root folderlist_backupsandcreate_backupguard againstfilesize()/filemtime()returningfalse(file removed mid-listing), preventing aTypeError- Added explicit
symfony/polyfill-php84requirement:array_any()(PHP 8.4) is used on the supported^8.3floor and previously relied on the polyfill arriving transitively list_event_handlersreported class-level handlers with theclassandeventfields swapped; Yii stores them as$_events[eventName][className], so the two nesting levels were mislabeled
Changed
- Extracted read-only SQL validation into a shared
SqlReadGuardsupport class used byrun_queryandexplain_query - Upgraded
mcp/sdkfrom^0.4to^0.6 - Added explicit
symfony/finderrequirement: the SDK moved it fromrequiretosuggestin 0.5, but file-based discovery (used for tool/prompt/resource registration) still needs it at server boot
Version 1.2.2
March 4, 2026
Fixed
tinkertool now releases mutex locks after execution, preventing project config deadlocks in long-running MCP process (#7)
Added
MutexGuardsupport class for releasing Yii2 mutex locks and resetting Craft's internal lock state
Version 1.2.1
February 24, 2026
Changed
- Upgraded
mcp/sdkfrom^0.3to^0.4
Version 1.2.0
February 24, 2026
Added
- Monorepo-aware project root detection in
mcp/installwizard- Auto-detects
.ddev/.gitmarkers in parent directories - Config files (
.mcp.json,.cursor/mcp.json) placed at actual project root - Binary paths automatically prefixed with Craft subdirectory (e.g.,
backend/vendor/...)
- Auto-detects
ProjectRootResolverclass for clean project root resolution (SRP)- Unit tests for
ProjectRootResolver
Changed
- Upgraded
mcp/sdkfrom^0.2to^0.3 - PHPStan ignore patterns updated for Craft CMS generic type annotations
Fixed
mcp/installnow writes config files to the correct location in monorepo setups- Removed dead code branch in
McpServerFactory
Version 1.1.1
January 7, 2026
Added
- Interactive
mcp/installwizard for generating MCP client configuration files- Auto-detects DDEV vs native PHP environment
- Supports Claude Code, Cursor, and Claude Desktop clients
- Options:
--environment(-e),--serverName(-s)
read_logstool now supportspatternparameter for case-insensitive content searchread_logstool now supportssourceparameter to target specific log files (web, console, queue, or plugin name)read_logstool now discovers plugin logs recursively in subdirectoriesread_logstool now parses multi-line stack traces into structured arraysread_logstool now sends progress notifications to clients while parsing multiple filesread_logstool now supportsoutputparameter (structuredortext) for human-readable colored output- New
ResponseFormatenum for reusable tool output format selection - New
LogParser,LogEntry,StackFrame, andLogFormatterclasses for clean log architecture
Changed
- Refactored log parsing into dedicated
LogParserclass for cleaner architecture FileHelper::tail()now uses chunk-based reading for improved performance on large files
Fixed
- Fixed null pointer errors in entry, category, and product serialization when related model (section/type/group) is missing
list_console_commandsnow discovers all commands including those from pluginstinkertool now properly preserves indentation in multi-line PHP input
Version 1.1.0
January 4, 2026
Added
- 18 new MCP tools expanding the toolset from 32 to 50 tools:
- Multi-site tools:
list_sites,get_site,list_site_groups - GraphQL tools:
list_graphql_schemas,get_graphql_schema,execute_graphql,list_graphql_tokens - Backup tools:
list_backups,create_backup - Self-awareness tools:
get_mcp_info,list_mcp_tools,reload_mcp - Commerce tools (Craft Commerce):
list_products,get_product,list_orders,get_order,list_order_statuses,list_product_types
- Multi-site tools:
- 9 MCP prompts for guided analysis workflows
- Content analysis:
content_health_analysis,content_audit,debug_content_issue - Entry management:
create_entry_guide,query_entries_guide,bulk_entry_operations - Schema exploration:
explore_section_schema,field_usage_analysis,explore_content_model
- Content analysis:
- 12 MCP resources for read-only URI-based data access
- Schema resources:
craft://schema/sections,craft://schema/fields,craft://schema/sections/{handle},craft://schema/fields/{handle} - Config resources:
craft://config/general,craft://config/routes,craft://config/sites,craft://config/volumes,craft://config/plugins - Content resources:
craft://entries/{section},craft://entries/{section}/{slug},craft://entries/{section}/stats
- Schema resources:
- 7 completion providers for intelligent parameter auto-completion
- Extension system for custom prompts via
EVENT_REGISTER_PROMPTSevent - Extension system for custom resources via
EVENT_REGISTER_RESOURCESevent - SSH tunnel configuration example for remote server access
- Comprehensive documentation for prompts (
docs/prompts.md) - Comprehensive documentation for resources (
docs/resources.md) - Extended documentation in
docs/extending.mdcovering prompts, resources, and completion providers - Hot-reload support for newly installed plugins without MCP server restart
Changed
- Tool count updated from 32 to 50 tools
- Documentation updated to reflect all available features
- Refactored error handling to align with MCP SDK conventions
- Applied Rector code quality improvements
- PSR-12 compliance across all files
- Added unit tests for new tool classes (BackupTools, CommerceTools, GraphqlTools, McpTools, SiteTools)
Version 1.0.1
January 3, 2026
Fixed
clear_cachestool now uses correctCraftFileHelper::clearDirectory()instead of non-existentFs::clearDirectory()read_logstool now dynamically finds all log files including date-based logs (e.g.,web-2026-01-03.log)read_logstool regex pattern updated to match Craft CMS log formatget_environmenttool removed non-existentgetTranslationsPath()call
Version 1.0.0
January 3, 2026
Added
- Initial release
- 32 MCP tools for Craft CMS
- Schema & Structure tools (list_plugins, list_sections, list_fields, list_volumes, list_routes, list_console_commands)
- Content tools (list_entries, get_entry, create_entry, update_entry, list_globals, list_categories, list_users)
- Asset tools (list_assets, get_asset, list_asset_folders)
- System tools (get_system_info, get_config, read_logs, get_last_error, clear_caches)
- Database tools (get_database_info, get_database_schema, get_table_counts, run_query)
- Tinker tool for PHP execution
- Debugging tools (get_queue_jobs, get_project_config_diff, get_deprecations, explain_query, get_environment, list_event_handlers)
- Extension system via
EVENT_REGISTER_TOOLSevent - Production safety defaults (disabled by default in production)
- Dangerous tools protection (tinker, run_query, create_entry, update_entry, clear_caches)