Come together with the global Drupal community in Rotterdam, 28 Sept – 1 Oct 2026. Sessions, contribution, connection, and Early Bird savings until 8 June.
This release re-enables SVG image support in the mcp_tools_remote_media submodule, now backed by robust XSS sanitization using the enshrined/svg-sanitize
library (GPL-2.0, 41M+ installs).
Code Quality
- Fixed all PHPCS (Drupal/DrupalPractice) violations across the entire codebase — 285 files, 0 errors, 0 warnings
- Refactored long methods in StatusController and SettingsForm for maintainability
Testing
- Added 5 new submodule service unit tests: MetatagService, PathautoService, SchedulerService, SitemapService,
UltimateCronService
- Added ClientConfigGenerator unit test
Credit to Guillaume Gérard for finding these issues and opening Merge Request.
- ApiKeyManagerTest failures on Drupal 11: The beta3 frozen REQUEST_TIME fix changed DrupalClock::now() to use
getCurrentTime(), but the test only mocked getRequestTime(), causing 4 failures on Drupal 11
- CI dependency resolution: Consolidated composer require steps with -W flag to resolve transitive conflicts between
mcp/sdk and Drupal core packages
Credit to Guillaume Gérard for finding these issues:
- Fixed ApiKeyManagerTest failures on Drupal 11. The beta3 frozen REQUEST_TIME fix changed DrupalClock::now() from
getRequestTime() to getCurrentTime(), but ApiKeyManagerTest only mocked getRequestTime(). This caused 4 test failures on Drupal 11 where the TimeInterface contract is stricter. Both the class-level mock and the time-sensitive expiration test now mock getCurrentTime() as well.
- 222 Tools across 34 optional submodules covering site building, content management, views, layout, caching, cron, and 20+ contrib integrations
- 741 Tests passing on Drupal 11 with PHP 8.4
- PHP MCP Ecosystem - Leverages 5 standalone Composer packages for broader PHP compatibility
NEW IN BETA1
- DrupalToolProvider: New adapter implementing ToolProviderInterface from mcp-tool-gateway for standardized tool discovery
- McpError Fluent Builder: Standardized error handling across all 24+ service files using ErrorCode constants
MCP Tools 1.0.0-alpha26 - External Packages & Service Interfaces
This release extracts reusable MCP infrastructure into standalone Composer packages and improves service architecture with proper interfaces.
NEW FEATURES
- New standalone PHP packages for the MCP ecosystem:
- code-wheel/mcp-error-codes (v1.1): Standardized error codes with helper methods
- code-wheel/mcp-events (v2.1): Tool execution lifecycle events with JsonSerializable support
- "Use site admin (uid 1)" checkbox for development
- "Create MCP Executor Account" button for production
- Removed auto-creation of user on install
- Removed runtime block on uid 1
- New standalone package: code-wheel/mcp-http-security on Packagist
- API key management with SHA-256 hashing
- IP allowlisting with CIDR support
- Origin/hostname allowlisting
- PSR-15 SecurityMiddleware
- mcp_tools_remote now delegates to the extracted package
- Added Drupal adapters: DrupalStateStorage, DrupalClock
- Restored 4 unit tests with proper fixes
- Fixed ContentTypeService DI architecture
- Test coverage milestone + Admin UI improvements
- 100% service test coverage (339 unit tests, 12 kernel test suites)
- New Permissions tab and Remote settings tab in admin UI
- Docker development environment for contributors
- Fixed date() type bugs in analysis tools
Three new configuration presets for quick setup:
- **Development**: Full access, no rate limiting - ideal for local development
- **Staging**: Config-only mode with rate limiting and audit logging
- **Production**: Read-only mode with strict limits and full audit trail
Fixes applyTemplate() audit logging parameter bug; refactors entity creation in batch/migration to use storages; adds high-impact unit tests for core service paths (analysis/config/templates/batch/migration); confirms full test + MCP E2E green in Docker
- Add optional Origin/Host allowlist for remote HTTP (allowed_origins) as DNS-rebinding defense-in-depth.
- Expand HTTP E2E to verify Origin allowlist and Origin-vs-Host precedence.
- Add a JS MCP SDK STDIO smoke test in CI to catch strict-client/schema regressions early.
- Fix inputSchema.properties encoding for tools with no inputs ({} not []) to support strict MCP clients (Codex/Claude Code).
- Add regression tests to prevent schema regressions.
- Update STDIO docs/examples to include --uid and safer guidance for shared environments.
- Audit logs now include correlation ID, transport, client identifier, and scopes.
- Added drush mcp-tools:remote-setup to create a dedicated remote execution user/role and set mcp_tools_remote.settings.uid.
- Expanded mcp_config_preview operations (roles/permissions + delete previews for content types/fields).
- Status page now shows remote endpoint status and warns on risky remote settings.
- CI/E2E improvements: schema conversion validation for all tools; STDIO/HTTP E2E made more robust.
- Default connection scopes are now read-only by default (access.default_scopes: [read]).
- Admin-scope tools (recipes/templates/config export) are now gated as ToolOperation::Trigger (require admin scope at access time).
- Remote HTTP: optional IP allowlist (mcp_tools_remote.settings.allowed_ips), API key TTL via drush mcp-tools:remote-key-create --ttl=..., and UI validation to avoid running remote as uid 1.
- Rate limiting: X-MCP-Client-Id is ignored by default; opt-in via rate_limiting.trust_client_id_header.