← All changes

SummerCMS 0.5.0

v0.5.02 min readFramework

Highlights

The MCP module is complete. With the account link, the OAuth consent and plugin tools, one /mcp endpoint serves an MCP client both an administrator's backend tools and the frontend user's own tools, filtered per grant and per permission. The module stays opt-in: it is compiled only with the summercms_mcp build tag and served only with mcp.enabled.

Released together:

  • sm-user-plugin v0.1.11
  • sm-oauthserver-plugin v0.1.3
  • sm-journal-plugin v0.2.4

Added

  • Fresh sign-in proof. auth_time is stamped at sign-in and kept unchanged through every refresh. Flows such as linking a frontend account to an administrator can require a sign-in made after the request.
  • Member token scopes from plugins. Plugins declare them through pact.HasFrontendTokenScopes. ValidTokenScopeName is the shared naming rule, and a padded or malformed name fails at boot.
  • Write-directing prompts. MCPPrompt.Writes marks a prompt that leads to writes, and it is listed only for read-and-write grants.
  • Organisation logos in the user plugin. Revoking access (ban, password reset or change) now also revokes OAuth and MCP grants.

Changed

  • A backend MCP grant acts only as the administrator its consent named.
  • Revoking a token or an OAuth client ends only that token's or that client's MCP sessions. Guard checks see the client address, including when a long-lived stream re-checks its bearer.
  • A personal token whose scopes no longer resolve gets its own error instead of "account unknown".
  • The Redis MCP session store needs a standalone Redis. Redis Cluster is not supported.

Fixed

  • MCP sessions:
    • Session slots are reserved atomically.
    • Expired stateful sessions are reaped.
    • A request still in flight can't write back an ended session.
    • Event fan-out no longer waits on session locks under the router lock.
  • MCP tool lists:
    • A returning client whose grant got wider sees the new tools.
    • A temporary guard error no longer narrows a session's tool list.
    • A shared stateless server no longer flips its tool set between callers.
    • Evicting idle servers spares those with a live listen stream.
  • MCP dispatch:
    • Path values the router would never deliver are refused.
    • A tools/call without arguments is treated as an empty object.
    • Prompt rendering errors no longer leak into the client's answer.
  • Admin:
    • My account action links refuse javascript:, data:, protocol-relative and control-character URLs.
    • A failing account section no longer breaks the others.
    • Save shortcuts commit a draft inside a custom field type's shadow root.
Subscribe via RSS