Tracks documented and undocumented Microsoft Graph API schema changes, with an MCP Apps visualiser
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent โ or use 1-click editor setup below.
We haven't yet run this listing's install command through our automated sandbox check. This isn't a red flag โ we're steadily working through the catalog.
๐ก Paste the JSON block into your client's configuration file under mcpServers, then restart the application.
An MCP server that tracks schema changes across the Microsoft Graph API โ both the changes Microsoft documents and the ones it doesn't. Covers the full Entra ID, Entra ID Governance, Identity & Access Management, Entra Agent ID, and Information Protection surface, seeded with a year of history at launch. Ships with an interactive schema visualiser rendered inside the MCP client via MCP Apps.

Microsoft Graph evolves continuously across v1.0 and beta. The official changelog is curated and incomplete โ undocumented schema changes (new properties, removed relationships, new enum values) land in production before they're announced. This MCP closes that gap by diffing the actual $metadata CSDL daily, and backfills a year of history from both a public community tracker and the official changelog.
| Source | What it is | Granularity |
|---|---|---|
seed-entra-ms | One-time import of changes.entra.ms's historical CSDL diffs | Property-level |
backfill-graph-changelog | One-time scrape of Microsoft's official "What's New" history, classified into 8 IAM object families | Feature-level |
self | Daily $metadata fetch + diff, ongoing from first collection | Property-level |
Two further tables enrich every change with real-world permission/role context: permissions (1,036 scopes scraped from Merill's Graph Permissions Explorer) and roles (135 Entra built-in roles and their microsoft.directory/* actions, from the Microsoft Learn permissions reference), cross-referenced into role_permission_map.
Requires Node.js 22+ (uses the built-in node:sqlite). Add to your MCP client โ e.g.
Claude Desktop's claude_desktop_config.json:
That's the whole setup: on first launch the server auto-downloads the latest published
database (change history, permissions, roles, embeddings) from this repo's GitHub Releases
into ~/.graph-atlas-mcp/, and keeps it current against the daily release cadence.
This produces graph-atlas.db in the project root. npm run seed uses a gitignored,
one-off local script (scripts/seed-from-entra-ms.js) โ it isn't part of the committed repo.
The DB uses WAL journal mode so these collection scripts can run concurrently with an MCP client that already has the file open (e.g. Claude Desktop) without lock contention.
search_changes runs in hybrid (keyword + semantic) mode automatically if OPENAI_API_KEY
is set, and degrades to keyword-only otherwise:
Re-running npm run embed after a collect only embeds new records โ it's incremental, not a full re-embed.
When developing, point the client at your build and local DB instead of the npm package:
GRAPH_ATLAS_DB points the server at an explicit DB file. Without it, the server looks for
~/.graph-atlas-mcp/graph-atlas.db (auto-downloaded from the latest GitHub Release), then
falls back to ./graph-atlas.db in the current working directory.
| Tool | Purpose |
|---|---|
search_changes | Natural-language or keyword search across all sources. Hybrid (keyword + semantic via Reciprocal Rank Fusion) when an OpenAI key is configured, keyword-only otherwise. |
get_recent_changes | Structured query โ filter by date, endpoint, object type/name, change kind, source. |
get_object_history | Full change history for one object (e.g. group, accessPackage), oldest to newest. Matches case-insensitively across sources. |
get_change_detail | Full detail for a single change record, plus related changes from the same day/object. |
get_snapshot_summary | Entity/property/enum counts per snapshot โ "how big is Graph API right now?" |
get_server_info | About the server itself โ running version, changelog entry, data freshness, and the two release channels (daily calendar-tagged database releases vs semver npm server releases). |
get_permission_context | Which permissions touch a Graph object, what each unlocks, who can grant them (heuristic โ see limitations), and its recent changes. |
schema_change_report | Structured JSON (no UI) of the schema/permission/role graph โ nodes + edges + change-activity counts, for reasoning over. |
visualize_schema_graph | Opens the interactive Graph Atlas visualiser inside the MCP client (via MCP Apps) โ a D3 force-directed graph with search, expand, and per-node detail. See below. |
expand_schema_node | Expands one node of the open visualiser (or feeds the model a one-node neighborhood delta) โ powers the app's double-click/Expand interactions. |
search_schema_objects | Name search across entity types, permissions, and roles โ resolves fuzzy names to canonical node ids; powers the app's search box. |
get_node_timeline | App-only: compact change timeline for the visualiser's detail panel (the model uses get_object_history instead). |
visualize_schema_graph opens the Graph Atlas visualiser โ a d3 force-directed SVG graph rendered
directly inside the MCP client via MCP Apps
(Claude Desktop, ChatGPT, VS Code, and other compliant hosts). Its architecture and look & feel are
ported from EntraPulse Polyarchy:
search_schema_objects) matches entity types,
permissions, and roles by name and flips focus to your pick.get_node_timeline).updateModelContext after every focus/expansion, so the
assistant knows what's on screen without extra tool calls.Three pivot dimensions, chosen via view (or the in-app tabs) so you can start wherever the
question starts โ a Role, a Permission, or an entity/API:
No reviews yet โ be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/graph-atlas-mcp)<a href="https://allmcps.com/mcp/graph-atlas-mcp"><img src="https://allmcps.com/api/badge/graph-atlas-mcp?style=directory" alt="Graph Atlas MCP on AllMCPs" /></a>