← all adapters

microsoft-graph-style

simulates Microsoft Graph API v1.0

restadapter v0.1.055 routes

verification

SDKverified with microsoft-graph-client 3.0.7 (floor)· surface 55 · not implemented 8 · differs 6

use it

# add to stunt.yaml
services:
  microsoft-graph:
    adapter: embedded:microsoft-graph-style

# then
$ stunt up

The embedded: source extracts this adapter from the binary — no git clone, fully offline.

how to mock the Microsoft Graph 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 API. 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 API v1.0 surface — the data is fake, the behavior is real.

backing stores

messageseventschatschat_messagesfiles

api surface (55)

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)

55 routes
GET/v1.0/me
POST/v1.0/subscriptions
GET/v1.0/subscriptions
GET/v1.0/subscriptions/{id}
DELETE/v1.0/subscriptions/{id}
GET/v1.0/users
GET/v1.0/users/{id}
GET/v1.0/me/mailFolders
GET/v1.0/me/mailFolders/{id}/messages
GET/v1.0/me/messages
POST/v1.0/me/messages
POST/v1.0/me/messages/{id}/send
GET/v1.0/me/messages/{id}
PATCH/v1.0/me/messages/{id}
DELETE/v1.0/me/messages/{id}
POST/v1.0/me/sendMail
GET/v1.0/me/calendarView
GET/v1.0/me/calendar/calendarView
GET/v1.0/me/events
POST/v1.0/me/events
POST/v1.0/me/events/{id}/accept
POST/v1.0/me/events/{id}/decline
POST/v1.0/me/events/{id}/tentativelyAccept
GET/v1.0/me/events/{id}
DELETE/v1.0/me/events/{id}
PATCH/v1.0/me/events/{id}
GET/v1.0/me/drive
GET/v1.0/me/drive/root/children
POST/v1.0/me/drive/root/children
GET/v1.0/me/drive/items/{id}/children
POST/v1.0/me/drive/items/{id}/children
GET/v1.0/me/drive/items/{id}/content
POST/v1.0/me/drive/items/{id}/restore
GET/v1.0/me/drive/items/{id}
DELETE/v1.0/me/drive/items/{id}
PUT/v1.0/me/drive/root:/{item}/content
PUT/v1.0/me/drive/items/{parent}/{item}/content
POST/v1.0/me/drive/root:/{item}/createUploadSession
POST/v1.0/me/drive/items/{parent}/{item}/createUploadSession
PUT/v1.0/_upload/{session}
GET/v1.0/me/drive/root:/{item}
GET/v1.0/groups/{id}/sites
GET/v1.0/me/chats
POST/v1.0/me/chats
DELETE/v1.0/chats/{id}
GET/v1.0/chats/{id}/messages
POST/v1.0/chats/{id}/messages
DELETE/v1.0/chats/{id}/messages/{messageId}
GET/v1.0/me/drive/items/{id}/workbook/worksheets
POST/v1.0/me/drive/items/{id}/workbook/tables/{name}/rows/add
GET/v1.0/me/drive/items/{id}/workbook/tables/{name}/rows
POST/v1.0/me/drive/items/{id}/workbook/tables/{name}/rows
PATCH/v1.0/me/drive/items/{id}/workbook/tables/{name}/rows/{index}
DELETE/v1.0/me/drive/items/{id}/workbook/tables/{name}/rows/{index}
GET/v1.0/me/drive/items/{id}/workbook/tables/{name}/range

SDK-verified behaviors (10)

  • /me resolves the signed-in profile
  • users directory pages via $top and the @odata.nextLink cursor
  • $filter and $select are applied server-side
  • draft lifecycle: create, PATCH, send, land in Sent Items
  • sendMail posts straight to Sent Items (no draft)
  • subscription lifecycle with clientState-echoed notifications
  • calendar: create, calendarView window, accept records the response
  • teams chat: create chat, send message, list, delete
  • drive: quota, simple upload round-trip, path resolution
  • error envelope: unknown user 404, unknown token 401

Not implemented (8)

  • No Excel workbook sessions (createSession, refreshSession, closeSession)
  • No mail reply/forward, attachments, or message move/copy endpoints
  • No calendar or mail folder create/update/delete, no event instances
  • No drive item copy, move, rename, permissions, or sharing invites
  • No drive search, delta, recent, or sharedWithMe endpoints
  • No teams or channels endpoints (chats and chat messages only)
  • No Excel worksheet or table create/update/delete, no workbook calculate
  • No todo, planner, contacts, presence, or /search surfaces

Differs from the real API (6)

  • Webhook validationToken handshake not enforced; subscription accepted immediately
  • Upload session ids are deterministic counters, not unguessable tokens
  • OData $filter limited to the equality pattern (field eq value)
  • Static seeded mock-bearer-token bypasses the entra-id token flow
  • @odata.nextLink/@odata.context point at graph.microsoft.com, not the serving host (prod-faithful; a local SDK harness must rebase)
  • Resumable upload session URLs are absolute http:// — the JS SDK's OneDriveLargeFileUploadTask urlJoins them into a broken path
want more of the Microsoft Graph API 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.