LIYANS MCP is a normal WordPress plugin. It adds one REST endpoint to your site; everything an AI assistant does flows through the same checked pipeline — authentication, authorisation, dispatch, audit — with no side channels.
POST https://your-site.com/wp-json/liyans-mcp/v1/mcp
1
Your MCP client sends a JSON-RPC 2.0 request — initialize, tools/list, tools/call — over HTTPS, carrying a bearer token or an OAuth 2.1 access token. Batch arrays are processed item by item; notifications are accepted and never answered.
2
The credential is checked against stored hashes. An unknown token fails hard — there is no silent fallback to browser cookies; WordPress session cookies do not authenticate the endpoint unless an administrator explicitly enables that setting.
3
Effective permission = the token’s scopes ∩ the live WordPress capabilities of the account that owns the token. Demote or delete that account and its tokens lose power immediately.
4
Every tool call is validated against the tool’s JSON Schema before any handler runs. Unknown arguments are rejected, and schema failures come back as tool errors with isError: true.
5
Handlers talk to WordPress through purpose-built adapters — Elementor, the HTML converter, WooCommerce and SEO — so output is native data: real Elementor element trees, real products, real post meta.
6
The call, its tool, its outcome and (only if you enable content logging) its arguments are written to the plugin’s local audit log — a table in your own database, with configurable retention and CSV export.
liyans_verify_layout checks the stored structure; liyans_render_check renders the page server-side and confirms element ids and texts appear in the real rendered output.liyans_restore_snapshot brings it back byte-for-byte.Tool failures use a closed catalogue of 27 named error codes — among them not_found, insufficient_scope, dependency_missing, validation_failed, session_not_found and session_closed. Responses carry a safe, human-readable detail; internal exception details are written to the audit log, never returned to the caller. A dependency-gated tool (say, a WooCommerce tool on a site without WooCommerce) answers dependency_missing in the tool list’s place — it is visible, and it refuses cleanly when called.