docs: correct stale/security-relevant claims found in a full wiki audit
- Security-Proof-Client-Credential-Isolation.md: the 'Client isolation matrix'
still described DCR redirect-URI scope inheritance as current, safe
behavior -- that was the exact #497 P0 vulnerability, fixed in #505.
Corrected the table and added a note.
- Home.md, Scope-and-Tool-Matrix.md, OAuth-Clients-and-Scopes.md: all three
said anonymous/read access requires 'no auth at all', which is only true
with OAuth disabled. Production runs with OAuth enabled, where every /mcp
request without a bearer is challenged regardless of tool tier (#498,
confirmed live). Added correction notes distinguishing the scope-ACL layer
(genuinely ungated) from bearer-token requirement (not bearerless in
production).
- AgentReady-Pitfalls.md, Live-Deployment-Runbook.md: documented a second,
distinct cause of the 'chtimes ... operation not permitted' build failure
(#521, live-reproduced 2026-07-18) -- the MCP server's own build_site tool
runs as a different system user (mcp-hugo-server-go) than the manual
rebuild path these pages already documented (hugo-mcp), and can be blocked
by individual files that drifted to the wrong owner even when
ReadWritePaths is already correct.
docs: update wiki to reflect the #450 2-scope model (read/write)
Several pages still described the pre-#450 four-tier scope model
(content.read/content.write/site.admin/system.admin with mcp as the
only alias) as if it were still active. Since #450 the server enforces
exactly two scopes, read and write, with every older scope string
accepted only as a compatibility alias.
Home, Documentation-Source-of-Truth, OAuth-Clients-and-Scopes,
Scope-and-Tool-Matrix, Pitfalls-Index, Client-Compatibility, and
Smoke-Tests-and-Live-Verification updated to describe the current
model as current, with the old model kept only as historical context
where relevant.
Pitfall-Anonymous-vs-Authenticated-Server rewritten more substantially:
it described a four-MCP-server-instance architecture
(anonServer/readServer/writeServer/siteAdminServer) that no longer
exists in the code -- the server now runs two instances
(publicServer/writeServer), and read-only tools that used to require
content.read (validate_site, build_agent_context, etc.) are fully
ungated since #450, not just relabeled.
Security-Proof-Client-Credential-Isolation gets a terminology note
rather than a rewrite -- the security property it demonstrates
(redirect URI isolation blocks cross-client credential reuse) is
scope-model-independent, so the historical scope names are left
in place with a pointer to the current model.
docs: add security proof for client credential isolation
Live test (2026-07-05): using chatgpt-write credentials from Claude.ai is
refused because the redirect_uri sent by Claude.ai does not match the URIs
registered for the chatgpt-write client. Documents the cross-client token
theft protection as a concrete proof with RFC 6749 reference.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>