Changelog
Release history, as shipped.
Summarised faithfully from the plugin’s own changelog.txt, which is the authoritative record and ships inside every archive. Nothing here is back-dated or polished after the fact — including the releases that fixed notes written ahead of the code.
1.4.0 current
Dual-era protocol & auth completion release · 11 November 2026 · no tool changes — all 61 tools behave as in 1.3.1
- The 2026-07-28 protocol profile, served alongside the legacy revisions on the same endpoint. Modern clients negotiate per request through
params._meta (no initialize handshake): server/discover, SEP-2243 header validation, resultType envelopes on every result and ttlMs/cacheScope on list results. The legacy revisions (2025-11-25, 2025-06-18, 2024-11-05) behave exactly as before, and the modern profile can be switched off in Settings → AI Clients. subscriptions/listen is not implemented and is not advertised.
- Confidential OAuth clients. Registration can now ask for
client_secret_basic or client_secret_post and receives a secret exactly once (only its hash is stored); the token endpoint authenticates the client before any exchange. Public clients are unchanged. Authorisation responses now carry the RFC 9207 iss parameter, and the token endpoint validates the RFC 8707 resource indicator. OAuth access-token lifetime is configurable in Settings → Authentication (default unchanged: 3600 seconds).
- Abuse-protection rate limits on the MCP and token endpoints (Settings → Security): generous fixed-window counters — 600 MCP requests per minute per credential, 60 token requests per minute per client + IP by default — that only trip on traffic no interactive client produces. This is not a usage quota; the free core stays unmetered, and the mechanism can be switched off entirely.
- The AI Clients admin screen — one card per known client with its setup guide in this plugin’s own words and a copy-ready config block in that client’s own format, the connections that client actually has (matched from real tokens, devices and OAuth records — a client with none says “Not connected”), and a complete inventory of every connection with revoke actions wired to the same handlers as the Connection, Devices and OAuth screens.
- The Settings screen is now a Settings Center grouped as General, Authentication, Permissions, AI Clients, Security, Website Building and Privacy. Every existing settings key keeps its name and default — a settings array written by 1.3.1 reads identically — and the Privacy section states everything the plugin stores and the fact that it sends nothing anywhere.
- Honest tool metadata.
tools/list now carries annotations for all 61 tools, and the eight tools whose result shape was verified stable across live runs carry an outputSchema; on the modern profile those results are also returned as structuredContent. The legacy result envelope is unchanged.
- The OAuth admin table shows each client’s token-endpoint auth method. The plugin header’s “Tested up to” now reads 7.1.4, the version the testbed actually runs.
- No tool, handler, scope or table changes: upgrading preserves tokens, devices, build sessions, OAuth clients and grants, snapshots and settings — proven by the Stage 2 acceptance run, whose report ships in the documentation archive.
1.3.1
Guided Connection release · 11 November 2026 · admin screens only — no tool changes
- The Connection screen is now a guided connect page. A status strip shows the endpoint (with a copy button), the server state and version, how many tools a token holding every scope can use, the OAuth sign-in state and how many connections are active — tokens and OAuth grants counted separately, so one OAuth connection is never counted twice.
- “Choose your AI assistant” cards for Claude, ChatGPT and other MCP clients carry numbered setup steps written for this plugin’s own flow and a copy-ready configuration block each.
- Token creation starts from a recommended preset: the label is pre-filled “Claude”; the read, write, media, seo, settings and devices scopes are ticked; Publish is deliberately unticked and Commerce unticked, with the reason printed next to the list. The one-time token display now states the next step plainly — paste the token into your AI app to finish connecting; it is shown only once and afterwards only its hash exists on the site.
- The Dashboard’s first card is now a compact connection status summary — endpoint, active connections split into tokens and OAuth grants, tool count, OAuth state — with a button through to the Connection screen.
- No tool, scope, authentication or safety behaviour changes: the 61 tools, the eight scopes and the draft-first model are exactly as in 1.3.0.
1.3.0
Capability parity release · 11 November 2026 · tool catalogue 38 → 61
- Build sessions (5 tools): plan validation with per-page slug conflicts, pages built across requests as drafts, snapshot-first rebuilds, finalise. Sessions persist server-side and belong to the credential’s WordPress user.
- Deep inspectors:
liyans_inspect_form (Contact Form 7 and WPForms definitions — fields, mail/notification configuration, messages; never submission data) and liyans_inspect_seo (full stored Yoast/Rank Math metadata, provider stack with a both-active conflict note, audit score).
- Builder depth: live widget control schemas, template listing, snapshot-first element append/remove, and a structural design audit including the active kit’s globals.
- Render check upgraded: rendered-output verification (Elementor’s renderer for drafts, HTTP fetch for published pages) alongside the structural checks — still honestly labelled, never a screenshot claim.
- Site & appearance: menu upsert and location assignment, static homepage setting, plugin and theme inventories, SSRF-safe image import (image MIME allowlist, 10 MB cap); menus and site structure now include theme locations.
- WooCommerce depth: product terms, attributes, variations, and gateway inspection limited to ids, titles and enabled state.
- Two new error codes (
session_not_found, session_closed); the catalogue now holds 27. No database schema change; uninstall still removes everything the plugin writes.
1.2.2
Consistency fix
liyans_seo_audit now answers dependency_missing when neither Yoast SEO nor Rank Math is active, matching liyans_set_seo_meta and the documented dependency rule. Found by an independent-protocol verification run (defect VD-01) and re-verified on a real WordPress 7.1.4 with the SEO plugin active and inactive.
- Documentation: the README now states explicitly that
tools/list is filtered by the connection token’s scopes.
1.2.1
Integration-testing fixes
- Malformed JSON posted to the MCP endpoint now receives the JSON-RPC parse error (
-32700, HTTP 400) instead of WordPress core’s rest_invalid_json document, which short-circuited during dispatch. The REST controller guards the MCP route on rest_pre_dispatch.
- The Elementor builder no longer loses widgets silently: an unknown widget
type now throws invalid_params listing the valid types; text-editor is accepted as an alias of text; a button falls back to its title when text is empty; the schema carries the enum of valid widget types.
- Both defects were found by Stage-2 integration testing on a real WordPress 7.1.4.
1.2.0
OAuth completed · protocol surface completed
- The OAuth 2.1 authorisation-code + PKCE flow, completed for real. Earlier notes (through 1.1.1) described this flow ahead of the code — the endpoints answered
oauth_pending_approval. In 1.2.0 the authorisation endpoint moved to a front-end page (/liyans-mcp/authorize) with a login redirect and an HMAC-signed consent screen; codes are single-use, 10-minute, SHA-256-hashed and PKCE-S256-bound; re-presenting a used code revokes the whole grant; refresh tokens rotate with reuse detection; RFC 7009 covers refresh tokens; client revocation cascades. Still behind oauth_enabled, off by default.
- Protocol surface:
resources/list + resources/read (the site-inspection snapshot and the caller-visible tool catalogue) and prompts/list + prompts/get (three real templates) implemented and advertised in initialize. Batch handling verified; no protocol revision beyond 2025-11-25 is claimed.
- Fixed: draft disclosure in
liyans_verify_layout and liyans_render_check — both now apply the unpublished-post guard, so read-only callers can no longer learn that a draft exists or receive its preview URL.
- Fixed: uninstall completeness — the daily-purge cron event and per-admin one-time-secret transients are removed on uninstall too.
- Four RFC 6749 error codes added for the token endpoint; catalogue at 25 codes in this release.
1.1.1
OAuth registration correction
- The OAuth 2.1 registration endpoint now follows RFC 7591. It previously required a signed-in administrator — but a client that has not authenticated yet cannot hold a session, so automatic client registration was refused with
403 access_denied. A newly registered client holds no access: it owns no token, cannot reach the MCP endpoint, and consent still requires a signed-in administrator.
- Registration stays inside the
oauth_enabled switch (off by default) and is bounded by the oauth_client_limit setting; revoking a client frees a slot.
- Added the
oauth_dynamic_registration setting (on by default) and the Settings screen’s OAuth card, so the authorisation server can be switched on from the interface.
- The authorisation endpoint now sends signed-out visitors to the WordPress login screen and returns them afterwards, instead of returning a raw JSON error.
Releases 1.0.0 and 1.1.0 precede this page’s range and are recorded in full in changelog.txt inside the plugin archive.