verification
use it
# add to stunt.yaml
services:
entra-id:
adapter: embedded:entra-id-style
# then
$ stunt upThe embedded: source extracts this adapter from the binary — no git clone, fully offline.
how to mock the Microsoft Graph / Entra ID API locally
Install stunt, paste the service block above into stunt.yaml, run stunt up — then point your client at localhost instead of Microsoft Graph / Entra ID. It works offline, keeps state across requests and restarts, and every response is synthetic: the route shapes, status codes, pagination, and webhook delivery follow the real Microsoft Graph / Entra ID v1.0 surface — the data is fake, the behavior is real.
backing stores
tokensrefresh_tokenscodesusersapplicationsservice_principals
api surface (9)
generated from the adapter manifest — exactly what boots, nothing more · covers 0% of the real API's 17531 routes (derived from spec msgraph-metadata v1.0 @ v1.0)
9 routes
GET/common/oauth2/v2.0/authorize
POST/common/oauth2/v2.0/token
GET/common/discovery/v2.0/keys
GET/v1.0/me
GET/v1.0/users
POST/v1.0/users
GET/v1.0/users/{id}
GET/v1.0/applications
GET/v1.0/servicePrincipals
SDK-verified behaviors (8)
- ✓authorize redirects with code + state
- ✓token exchange mints a JWKS-verifiable RS256 bearer
- ✓authProvider feeds the SDK; /v1.0/me resolves the token's user
- ✓users create + get round-trip (by id and by UPN)
- ✓users list pages via $top + $skipToken + PageIterator
- ✓applications + servicePrincipals reads
- ✓refresh grant rotates the token the SDK presents
- ✓error decoding: 404 and 401 surface as GraphError
Not implemented (8)
- No $filter, $search, $orderby, $select, or $expand on Graph queries
- No user PATCH or DELETE (/v1.0/users/{id})
- No application or servicePrincipal create, update, or delete operations
- No groups, members, or memberOf endpoints (/v1.0/groups)
- No directory roles, role assignments, or organization endpoints
- No B2B invitations (POST /invitations) or guest users
- No client-credentials or device-code token grant support
- No signInLogs, audit logs, or user activities
Differs from the real API (3)
- Authorize auto-approves with an instant 302; no consent screen
- nextLink cursor param is $skipToken (camelCase); real Graph emits $skiptoken
- users create ignores mailNickname; mail defaults to the UPN
want more of the Microsoft Graph / Entra ID surface? adapters are YAML + Starlark — the authoring guide covers adding routes, fixtures, and state machines. Open an issue for anything big first, or just file a PR — merged routes ship in the next release.