This site exposes an MCP connector so an AI assistant can maintain it through tools (list, read, write, move, delete pages; set permissions; activate themes/layouts). It speaks standard MCP + OAuth, so it works with any MCP-capable client - Claude.ai, ChatGPT, Claude Desktop, Claude Code, and others.
For the full tool catalogue, auth/capability model and error reference, see AI connector - tools reference. This page covers connecting.
The endpoint is the same for everyone:
https://YOUR-SITE/cgi-bin/lazysite-mcp.pl
There are two ways to authenticate, depending on the client:
Authorization: Bearer <partner-id>:<lzs_ token> header (the token comes from
Generate agent brief). These clients let you set a header directly.
The capability gating and per-file ACLs are identical whichever you use - call
whoami first to confirm the grant.
WWW-Authenticate, which is exactly
the ask that setting waits for. "Always required" also works.GET with 405, so SSE (legacy) will not work.
Claude.ai selects SSE automatically for a URL ending in /sse; this one does
not, so the default is already right - just do not change it.whoami.If Authentication shows "None - Detected". Claude.ai probed the server and
found no OAuth, which means oauth_enabled is off on this instance. Turn it on
in the manager: Config → Services → OAuth authorization server. Every OAuth
endpoint returns 404 until you do, so the connect-code flow cannot start.
You can also skip OAuth entirely: leave Authentication on None, and add
Authorization: Bearer <partner-id>:<token> under Additional request
headers using a token from Generate agent brief. That path needs no
oauth_enabled and no connect code - it is the static-bearer method below,
driven from the web app.
whoami, then list_files.Note: on Plus/Pro, ChatGPT can call read-only tools only (whoami, list_files, read_file). Business/Enterprise get the write tools (write_file, activate_theme, …) with a per-call approval card. ChatGPT is also noticeably slower than Claude per tool call.
The most common cause is not the server - it is that the assistant's tool list
is fixed when a chat opens. A connector you finished authorising during a
conversation will not surface until you start a new chat. So: complete the
sign-in, confirm the Users panel shows connected, then open a fresh chat and
ask for whoami.
If a tool call is refused, the error's reason names the cause precisely:
sign-in-incomplete (the connect code was never pasted - redo the sign-in with a
fresh code), token-expired (reconnect, or let the client refresh), or
token-invalid (the token was revoked or the site secret was rotated - reconnect).
lzs_ token directly).Authorization: Bearer <partner-id>:<lzs_ token> (Desktop/Code support custom
headers). A script can also use the control API + WebDAV directly (API mode -
see the publishing briefing).Point it at the endpoint. If it supports OAuth, it will discover
/.well-known/oauth-protected-resource from the 401 WWW-Authenticate challenge
and run the connect-code flow. If it supports a static header, use the
partner-id:lzs_ bearer.
invalid_client: remove and re-add the
connector so the app does a fresh registration + sign-in.whoami works but a write is refused: the grant (capabilities + per-file
ACL) is authoritative - the partner lacks that capability or write access.