Skip to content

docs(sso): document single sign-on - #531

Merged
keysersoft merged 1 commit into
mainfrom
keysersoft/sso-docs
Sep 8, 2026
Merged

docs(sso): document single sign-on#531
keysersoft merged 1 commit into
mainfrom
keysersoft/sso-docs

Conversation

@keysersoft

Copy link
Copy Markdown
Contributor

Single sign-on shipped with no user-facing documentation at all — no mention in the README, docs/, the env-var table or anywhere else.

That matters more than usual given the feature is self-hosted only: a self-hoster had no way to discover it exists, and a cloud user meeting a 404 had nothing explaining why.

What is added

docs/sso.md — registering the application at the provider, mapping directory groups to roles, requiring SSO, recovery codes, and turning all of it off again. Linked from the README feature list, docs/guides.md, and the DEPLOYMENT_MODE row of the deployment env table.

Two Entra constraints that cost real time during the build are called out explicitly:

  • Only Security and Microsoft 365 groups can be assigned to an application — mail-enabled distribution lists cannot, so a directory organised into distribution lists needs security groups adding first.
  • Group assignment does not cascade to nested groups.

Tool restriction is documented as it behaves

Verified with a non-admin user and a real MCP key:

Endpoint tools/list tools/call
/mcp/<serverId> filtered to the user's tools denied if not allowed
/mcp (global) lists every tool of the workspace denied if not allowed

A restricted user can never invoke a tool their roles do not grant on either endpoint, but on the global endpoint they still see the inventory. The doc records this and points people at a per-server endpoint when they rely on role restriction, rather than implying the list is filtered everywhere. A fix for the global endpoint is separate work.

Also

Corrects a comment in role-sync.service.ts that pointed at RolesService.getUserToolAccess, which does not exist — the method is getAllowedToolIds.

The feature shipped with no user-facing documentation at all — no mention in
the README, docs/, the env-var table or anywhere else. That matters more than
usual given it is self-hosted only: a self-hoster had no way to discover it
exists, and a cloud user meeting a 404 had nothing explaining why.

docs/sso.md covers registering the app at the provider, mapping directory
groups to roles, requiring SSO, recovery codes, and turning all of it off
again. Two Entra constraints that cost real time are called out: only Security
and Microsoft 365 groups can be assigned to an application (distribution lists
cannot), and group assignment does not cascade to nested groups.

It also records, rather than glosses, how tool restriction actually behaves:
the per-server endpoint filters `tools/list`, while the global `/mcp` endpoint
lists every tool of the workspace and enforces only on `tools/call`. A
restricted user can never invoke a tool their roles do not grant, but on the
global endpoint they can still see the inventory — so the doc points people at
a per-server endpoint when they rely on role restriction.

Also fixes a comment in role-sync.service.ts that pointed at
`RolesService.getUserToolAccess`, which does not exist; the method is
`getAllowedToolIds`.
@keysersoft
keysersoft merged commit 859c4a4 into main Sep 8, 2026
12 checks passed
@keysersoft
keysersoft deleted the keysersoft/sso-docs branch September 8, 2026 18:51
@github-actions github-actions Bot locked and limited conversation to collaborators Sep 8, 2026
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant