Version 1.2.2
November 3, 2026
Improved
- IP allowlist normalization: Added support for IPv4-mapped IPv6 addresses (e.g.
::ffff:127.0.0.1) andlocalhostaliases inIpAllowlist, ensuring reliable matching behind dual-stack reverse proxies, Docker, and Nginx.
Version 1.2.1
October 15, 2026
Fixed
- Changelog editor-guide link uses an absolute GitHub URL so it works on the Craft Plugin Store.
Version 1.2.0
October 15, 2026
Added
- Dashboard ops hub: setup checklist, status cards (Server, Writes, HTTP, OAuth) with quick toggles, slim Connect card, and Activity “View all”.
- Access screen (was Tokens): Connected apps always visible, with an Enable OAuth CTA when the connector is off.
- Setup three-path UI: Local stdio, Remote token, Claude OAuth.
- Settings Essentials vs Advanced disclosure.
- Short editor guide: connect, approve, drafts, disconnect.
delete_assetmoves an asset to the trash.update_assetcan rename (newFilename) and move (newFolder) within a volume, and finds an asset by id or byvolume+folder+filename.upload_assettakes afolderpath (missing folders are created),title, andalt. Asset writes return a natural key{volume, path, filename}.update_user(name, groups) andset_user_status(active,suspended,inactive).create_usertakesfirstName,lastName,groups, andsendActivationEmail(off by default), and checks the Craft edition’s user cap first. User writes need a Full token.assetUploadMaxBytessetting (default 20 MB) caps URL and base64 uploads.
Changed
- Nav label Access (URL still
craft-mcp/tokens). Recent drafts (was Agent drafts). Access and Settings subnav only when the user has permission. - Settings Advanced settings panel is clearer; TTL and upload fields use human-friendly copy, clickable presets (e.g. 20 MB, 30 days), and a live unit hint.
- Tools search sits on the right with Craft’s search icon. Dashboard metric cards use a link-color hover tint and a corner link icon (no underline).
create_usertakesfirstNameandlastNameinstead offullName, andusernameis optional (defaults to the email).
Security
- Asset upload / update / delete check Craft
Elements::canSave/canDeletefor the token’s user (volume permissions), same gate the control panel uses. Stdio with no acting user is unchanged. upload_assetURL fetches go through SSRF protection: https on port 443 only, no credentials or redirects, every resolved address must be public, the connection is pinned to the checked address, and the download is capped.- User writes never touch admin accounts or the account the token acts as, and never set a password or change an existing email.
Version 1.1.0
October 15, 2026
Added
- Entry writes return
previewUrl: a Craft preview-token link on the section’s first preview target (or the entry URL).nullwhen the section has no URL. Coverscreate_entry,update_entry,copy_entry_to_site,duplicate_entry,create_nested_entry, andmove_nested_entry. Settings:previewUrls(default on) and optionalpreviewTokenDuration. A failing preview-target listener drops the link, never the write. Preview tokens useuserId: null(anonymous Share link). php craft craft-mcp/installwizard writes Claude Code (.mcp.json) and Cursor (.cursor/mcp.json) config. Codex (.codex/config.toml) is offered interactively but not preselected; only that server’s[mcp_servers.<name>]table (and its subtables) is replaced. Codex configs get an absolutecwdand binary paths. Prints acodex mcp addcommand for user-level config, and notes that project config needs a trusted project.allowedIpsaccepts CIDR ranges as well as exact addresses (IPv4 and IPv6). A bad entry or client address matches nothing. Useful for allowing Anthropic’s Claude connector egress (160.79.104.0/21) without emptying the allowlist.list_console_commandsreportsskippedModuleswhen a module’s controller path cannot be resolved, and still lists every other command.- OAuth connector for Claude (web, Desktop, mobile) and other OAuth clients. With
oauthon (requires HTTP transport), a user pastes the MCP URL, logs in to the control panel, picks a scope, and approves. Discovery (RFC 9728 / RFC 8414), Dynamic Client Registration restricted tooauthRedirectUris, PKCE S256, rotating refresh tokens, and Connected Apps with Disconnect on the Tokens screen. Off by default; with it off, hand-minted bearer tokens behave exactly as before. Settings:oauth,oauthRedirectUris,oauthAccessTokenTtl,oauthRefreshTokenTtl. SethttpPublicUrlon headless installs so OAuth URLs point at Craft.
Changed
- Docs and README point local setup at the install wizard and remote HTTP at Claude Code / Cursor / Codex (not Claude Desktop’s local-server config file).
allowedIpsmatching uses YiiIpHelper::inRange.list_console_commandsuses Craft’s HelpController listing (with per-module skip on bad controller paths) and detects HTTP viagetIsConsoleRequest().list_entries/count_entriestreat omitted status orstatus: "any"as every status; passstatus: "live"for live only.- Token reveal and Setup show a Claude Code
.mcp.jsonHTTP block (type: http). - Token expiry is stored and compared in UTC.
Security
- OAuth token exchange re-checks that the user may still hold the grant (active account, manage-tokens permission, allowed scope). Standing loss revokes the connection.
- Consent offers only scopes that are both requested and allowed; approve refuses anything else.
- Disconnect wins races with refresh: exchange re-checks the grant after issuing, and every MCP request rejects an OAuth access token whose grant was revoked.
Version 1.0.0
October 14, 2026
Added
- MCP server for Craft CMS 5 and 6 with stdio and optional HTTP transport
- Control panel: dashboard, agent drafts, tools, tokens, activity, setup, and settings
- Content tools for entries, schema, assets, categories, tags, globals, and sites
- Draft-first writes with scopes (readonly, content, full) and optional section limits
- GraphQL, system, database, and debug tools
- Optional Commerce, Freeform, and Calendar tools when those plugins are installed
- Prompts and
craft://resources for agents - Bearer tokens for remote HTTP clients
- Activity log of tool calls