v0.10.0
An MCP release. The SvelteKit handle route can now serve anonymous callers a
redacted result set instead of refusing them, so a public documentation agent can
query your site without holding an API key.
Existing deployments are unaffected. mcp.handle.access defaults to
private, which is exactly the previous behaviour: no Authorization header
means 503, and a wrong or malformed bearer token is still a 401 rather than a
silent downgrade.
Added
mcp.handle.access("public" | "private", default"private") — governs
the SvelteKit handle route. Setting it to"public"serves callers that present
noAuthorizationheader, withrouteFile,chunkTextandbreakdownstripped
from every tool result and a caller-suppliedscopeignored — the same fields
api.exposeInternalFieldswithholds from the browser API. A valid bearer token
still returns them, so an editing agent configured with the key keeps source
paths while a public agent does not.mcp.handle.apiKey/apiKeyEnvremain
required whileaccessisprivate.
Changed
mcp.accessnow documents its actual scope: it governs only the standalone MCP
server's bind address. The handle route is governed bymcp.handle.access.- Errors returned to anonymous MCP callers are mapped to a typed code rather than
surfaced verbatim, so backend URLs and environment variable names are no longer
disclosed. Authenticated callers keep the underlying error.
Fixed
- The handle route's bearer comparison now runs through the shared
verifyApiKey
helper, which hashes both sides to equal-length digests before comparing. The
previous inline check short-circuited on length, leaking the configured key's
length to an unauthenticated caller. - The MCP request-size check is ordered after authentication, so an oversized
anonymous request to a private route answers 503 rather than disclosing the
body limit with a 413. get_related_pagesstripsrouteFilefrom its results for redacted callers,
matching the other tools.