Skip to content

add(auth): personal access tokens, user impersonation and permission-aware write tools - #3

Merged
Seiger merged 2 commits into
evolution-cms:mainfrom
elcreator:add-pat-impersonation
Sep 15, 2026
Merged

Seiger merged 2 commits into
evolution-cms:mainfrom
elcreator:add-pat-impersonation

Conversation

@elcreator

Copy link
Copy Markdown
Contributor
  • auth.mode=pat (default): emcp_tokens table, Bearer endpoint at /{api_prefix}/{server} without sApi, self-service manager page (Tools -> MCP tokens), emcp:token:* commands
  • ImpersonateManagerUser: API requests run as the token/JWT owner with their role, permissions, document groups and locks (mirrors UserLogin::writeSession, never persisted); the emcp permission is required in API mode too
  • content read tools honour document groups and view_unpublished; content.get returns the body fields; model catalog reads need the permission of the matching manager screen
  • evo.elements.list|get and evo.write.content.update|create|publish, evo.write.elements.save, evo.write.cache.clear, gated by manager permissions, enable_write_tools and the mcp:write scope; each writes a manager_log row
  • ToolProvider / WritesSite / ToolRegistry: other extras contribute tools to a server handle at runtime or via mcp.servers[].extra_tools, with the same write gates
  • JSON-RPC notifications and ping map to mcp:read (sent by MCP clients on connect)
  • docker/ compose environment with a preinstalled site, token, smoke test and opt-in extras

…aware write tools

- auth.mode=pat (default): emcp_tokens table, Bearer endpoint at /{api_prefix}/{server}
  without sApi, self-service manager page (Tools -> MCP tokens), emcp:token:* commands
- ImpersonateManagerUser: API requests run as the token/JWT owner with their role,
  permissions, document groups and locks (mirrors UserLogin::writeSession, never persisted);
  the emcp permission is required in API mode too
- content read tools honour document groups and view_unpublished; content.get returns the
  body fields; model catalog reads need the permission of the matching manager screen
- evo.elements.list|get and evo.write.content.update|create|publish, evo.write.elements.save,
  evo.write.cache.clear, gated by manager permissions, enable_write_tools and the mcp:write
  scope; each writes a manager_log row
- ToolProvider / WritesSite / ToolRegistry: other extras contribute tools to a server handle
  at runtime or via mcp.servers[].extra_tools, with the same write gates
- JSON-RPC notifications and ping map to mcp:read (sent by MCP clients on connect)
- docker/ compose environment with a preinstalled site, token, smoke test and opt-in extras
@Seiger
Seiger merged commit 4a2025f into evolution-cms:main Sep 15, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants