WYRE-AI/msp-claude-plugins/msp-claude-plugins/microsoft-graph/microsoft-graph/skills/connection/SKILL.md
microsoft-graph-connection
Connecting the Microsoft Graph MCP Server for Enterprise (public preview) through the Wyre gateway: BYOC multi-tenant Entra app registration, the tenantId/clientId/clientSecret triple, the delegated MCP.* permissions and the per-tenant admin consent that must be granted out of band, plus the read-only design, the 100 calls/min/user limit, licensing implications, and a symptom-to-cause troubleshooting table.
- Source repository stars
- 42
- Declared platforms
- 0
- Static risk flags
- 2
- Last source update
- 2026-08-28
- Source checked
- 2026-08-28
Decision brief
What it does: where it fits
The Microsoft Graph MCP Server for Enterprise is a Microsoft-hosted MCP server (public preview) at https://mcp.svc.cloud.microsoft/enterprise. It is reached through the Wyre MCP Gateway as the microsoft-graph vendor. Getting it working is a three-part job: register an Entra app,…
Not for
- Tasks that require unconfirmed production actions or broad system permissions.
- Environments where the pinned source and install steps cannot be inspected.
Compatibility matrix
Platform support, with evidence labels
| Platform | Status | Evidence | What to check |
|---|---|---|---|
| Codex | Not declared | No explicit evidence | Portability before use |
| Claude Code | Not declared | No explicit evidence | Portability before use |
| Cursor | Not declared | No explicit evidence | Portability before use |
| Gemini CLI | Not declared | No explicit evidence | Portability before use |
Installation
Inspect first. Install second.
The source command is displayed only when detected. A safe inspection prompt is always available so your agent can explain every action before execution.
npx skills add https://github.com/WYRE-AI/msp-claude-plugins --skill "msp-claude-plugins/microsoft-graph/microsoft-graph/skills/connection"Inspect the Agent Skill "microsoft-graph-connection" from https://github.com/WYRE-AI/msp-claude-plugins/blob/5005f73ba2f52cd299f58aa6bb79f4e70ae87103/msp-claude-plugins/microsoft-graph/microsoft-graph/skills/connection/SKILL.md at commit 5005f73ba2f52cd299f58aa6bb79f4e70ae87103. List every install step, command, network request, credential, file read/write, external action, and rollback step. Explain whether it fits my task. Do not install or execute anything until I approve.
Workflow
What the source asks the agent to do
- 01
Step 1 — Register the BYOC Entra application
In the customer-facing/partner tenant you control, register a multi-tenant app:
Entra admin center → Identity → Applications → App registrations → New registration.Supported account types: Accounts in any organizational directory (multitenant). This is required — the authority is organizations, and you need the app to be consentable in each customer tenant.Platform: add a Web platform with a redirect URI. Use the redirect URI the Wyre gateway shows in the microsoft-graph connection UI (the gateway's OAuth callback). A Web platform is required because this is a confidentia… - 02
Step 2 — Connect through the Wyre gateway
1. In the gateway connection UI, choose the microsoft-graph vendor. 2. Supply the three BYOC values from Step 1: tenantId, clientId, clientSecret. 3. Complete the OAuth sign-in. The gateway runs the authorization-code flow against the organizations authority and stores the resul…
In the gateway connection UI, choose the microsoft-graph vendor.Supply the three BYOC values from Step 1: tenantId, clientId, clientSecret.Complete the OAuth sign-in. The gateway runs the authorization-code flow against the organizations authority and stores the resulting delegated token. - 03
Step 3 — Grant per-tenant admin consent (the step everyone misses)
This is the single most common reason a Graph MCP connection "works" but returns nothing.
{customer-tenant-id} — the customer's Entra tenant ID (or their primary domain).{your-client-id} — the Application (client) ID of the BYOC app from Step 1.This is the single most common reason a Graph MCP connection "works" but returns nothing. - 04
Anti-triggers
Actual directory or identity questions once the connection works —
Actual directory or identity questions once the connection works —The m365 plugin's Entra app registration — it is a differentGDAP relationships and tenant onboarding across the fleet — a - 05
How the connection works
The gateway exposes a microsoft-graph vendor that proxies to https://mcp.svc.cloud.microsoft/enterprise.
The gateway exposes a microsoft-graph vendor that proxies to https://mcp.svc.cloud.microsoft/enterprise.Auth is BYOC (bring-your-own-credentials): each MSP registers its own multi-tenant Entra app — a confidential client — and supplies tenantId, clientId, and clientSecret in the gateway connection UI.The Entra authority used is organizations (the multi-tenant work/school endpoint).
Permission review
Static risk signals and limitations
Reads files
The documentation asks the agent to read local files, directories, or repositories.
The `MCP.*` delegated permissions are admin-restricted. The OAuth connect flow in Step 2 authenticates the user and mints a token, but it does **not** by itself grant the tenant-wide consent those permissions need. A **Global Administrator Network access
The documentation includes network, browsing, or remote request actions.
https://login.microsoftonline.com/{customer-tenant-id}/adminconsent?client_id={your-client-id}Evidence record
Why each signal appears
| Signal | Value | Evidence type | Meaning |
|---|---|---|---|
| Quality score | 92/100 | Computed | Documentation, specificity, maintenance, and trust rules |
| Repository stars | 42 | Source | Repository attention, not individual Skill quality |
| Compatibility | 0 platforms | Source | Declared in the catalog source record |
| Usage guide | automated source guide | Editorial | Generated or reviewed according to the visible evidence level |
Pinned source
Provenance and original SKILL.md
- Repository
- WYRE-AI/msp-claude-plugins
- Skill path
- msp-claude-plugins/microsoft-graph/microsoft-graph/skills/connection/SKILL.md
- Commit
- 5005f73ba2f52cd299f58aa6bb79f4e70ae87103
- License
- Apache-2.0
- Collected
- 2026-08-28
- Default branch
- main
View the original SKILL.md
Connecting the Microsoft Graph MCP Server for Enterprise
The Microsoft Graph MCP Server for Enterprise is a Microsoft-hosted MCP server (public preview) at https://mcp.svc.cloud.microsoft/enterprise. It is reached through the Wyre MCP Gateway as the microsoft-graph vendor. Getting it working is a three-part job: register an Entra app, connect it through the gateway, and — the step that breaks most onboardings — grant per-tenant admin consent out of band.
Read this whole skill before connecting. The admin-consent requirement is non-obvious and the failure mode (a connection that authenticates fine but returns nothing) looks like a different bug.
Anti-triggers
- Actual directory or identity questions once the connection works —
use
microsoft-graph-querying. - The
m365plugin's Entra app registration — it is a different app with different (GraphUser.Read.All-style) permissions and its own consent. Consenting one does not consent the other, and the troubleshooting below does not apply to it; use them365plugin. - GDAP relationships and tenant onboarding across the fleet — a
different consent model entirely, managed per customer relationship
rather than per app; use the
cippplugin (cipp-tenants). - The Azure MCP server's own sign-in — it authenticates to Azure
Resource Manager through a different credential chain and consent,
and a working Graph connection says nothing about it; use
azure-mcp-connection.
How the connection works
- The gateway exposes a
microsoft-graphvendor that proxies tohttps://mcp.svc.cloud.microsoft/enterprise. - Auth is BYOC (bring-your-own-credentials): each MSP registers its own multi-tenant Entra app — a confidential client — and supplies
tenantId,clientId, andclientSecretin the gateway connection UI. - The Entra authority used is
organizations(the multi-tenant work/school endpoint). - The token minted is a delegated token scoped to
api://e8c77dc2-69b3-43f4-bc51-3213c9d915b4/.default— the resource identifier of the Graph Enterprise MCP service. - Because the token is delegated, every call runs as the signed-in user. The data the server returns is the intersection of what the user is allowed to see (their Entra roles) and what scopes the app was granted.
Step 1 — Register the BYOC Entra application
In the customer-facing/partner tenant you control, register a multi-tenant app:
- Entra admin center → Identity → Applications → App registrations → New registration.
- Supported account types: Accounts in any organizational directory (multitenant). This is required — the authority is
organizations, and you need the app to be consentable in each customer tenant. - Platform: add a Web platform with a redirect URI. Use the redirect URI the Wyre gateway shows in the
microsoft-graphconnection UI (the gateway's OAuth callback). A Web platform is required because this is a confidential client doing an authorization-code flow. - Certificates & secrets → New client secret. Record the secret value (not the secret ID) immediately — it is shown only once. Set a calendar reminder before it expires; an expired secret produces
invalid_clienton reconnect. - Note the Application (client) ID and your Directory (tenant) ID from the app's Overview page.
- API permissions: add the delegated
MCP.*permissions the Graph Enterprise MCP server requires (the permission set is shown when you add the Graph Enterprise MCP /api://e8c77dc2-...API as a permission target). These are delegated permissions, not application permissions.
Step 2 — Connect through the Wyre gateway
- In the gateway connection UI, choose the
microsoft-graphvendor. - Supply the three BYOC values from Step 1:
tenantId,clientId,clientSecret. - Complete the OAuth sign-in. The gateway runs the authorization-code flow against the
organizationsauthority and stores the resulting delegated token.
At this point the connection exists — but it will still return no data until Step 3 is done for each customer tenant.
Step 3 — Grant per-tenant admin consent (the step everyone misses)
This is the single most common reason a Graph MCP connection "works" but returns nothing.
The MCP.* delegated permissions are admin-restricted. The OAuth connect flow in Step 2 authenticates the user and mints a token, but it does not by itself grant the tenant-wide consent those permissions need. A Global Administrator in each customer tenant must grant admin consent out of band — once per customer tenant, before the connection can read that tenant's directory.
Have the customer's Global Admin open the admin-consent URL and approve:
https://login.microsoftonline.com/{customer-tenant-id}/adminconsent?client_id={your-client-id}
{customer-tenant-id}— the customer's Entra tenant ID (or their primary domain).{your-client-id}— the Application (client) ID of the BYOC app from Step 1.
After the admin approves, the app gets a service principal in the customer tenant with the MCP.* delegated permissions consented tenant-wide. Calls for that tenant will now return data.
If you skip this: microsoft_graph_get and microsoft_graph_suggest_queries calls will fail or return empty for that tenant even though the gateway connection shows healthy and the token mints fine. Symptom is consent/permission errors (AADSTS65001 or similar) or a successful auth that yields no directory data.
Repeat Step 3 for every customer tenant you want to query. Steps 1 and 2 are one-time per MSP; Step 3 is per customer tenant.
Operational limits
- Preview. This is a Microsoft public-preview service. The tool surface, the RAG example catalog, and the available scopes may change before GA. Don't build hard automation dependencies on exact behavior yet.
- Read-only. The server only issues
GETrequests to Microsoft Graph. There is no write path — by design. - Rate limit: 100 calls/min/user, enforced by the MCP server, on top of standard Microsoft Graph service throttling. The RAG
suggest_queries → getworkflow is deliberately call-efficient; lean on it rather than fanning out many speculativegetcalls. - Licensing: the MCP server itself adds no license cost, but the caller still needs the right Entra licenses for the data they touch. Example: querying Privileged Identity Management (PIM) data requires Microsoft Entra ID P2 on the tenant and the caller.
Quick troubleshooting
| Symptom | Likely cause |
|---|---|
| Connection authenticates but every query returns empty/permission error | Per-tenant admin consent (Step 3) not granted for that customer tenant |
invalid_client on connect or reconnect | Client secret expired or the secret ID was pasted instead of the secret value |
| Redirect URI mismatch error during sign-in | The Web platform redirect URI in the app registration doesn't match the gateway's callback URL |
| Works for one tenant, not another | Admin consent granted for the first tenant only — run Step 3 again per tenant |
| PIM / privileged-role data missing | Tenant or caller lacks Microsoft Entra ID P2 |
Frequently asked questions
What to verify before installation and use
What does the microsoft-graph-connection source document cover?
The Microsoft Graph MCP Server for Enterprise is a Microsoft-hosted MCP server (public preview) at https://mcp.svc.cloud.microsoft/enterprise. It is reached through the Wyre MCP Gateway as the microsoft-graph vendor. Getting it working is a three-part job: register an Entra app,…
How do I install microsoft-graph-connection?
The source record exposes this install command: npx skills add https://github.com/WYRE-AI/msp-claude-plugins --skill "msp-claude-plugins/microsoft-graph/microsoft-graph/skills/connection". Inspect the command and pinned source before running it.
Which permission-related actions were detected?
Static rules flagged read-files, network in the source; the page lists the matching lines and excerpts.
Alternatives
Compare before choosing
coreyhaines31/marketingskills
ab-testing
When the user wants to plan, design, or implement an A/B test or experiment, or build a growth experimentation program. Also use when the user mentions "A/B test," "split test," "experiment," "test this change," "variant copy," "multivariate test," "hypothesis," "should I test this," "which version is better," "test two versions," "statistical significance," "how long should I run this test," "growth experiments," "experiment velocity," "experiment backlog," "ICE score," "experimentation program
coreyhaines31/marketingskills
churn-prevention
When the user wants to reduce churn, build cancellation flows, set up save offers, recover failed payments, or implement retention strategies. Also use when the user mentions 'churn,' 'cancel flow,' 'offboarding,' 'save offer,' 'dunning,' 'failed payment recovery,' 'win-back,' 'retention,' 'exit survey,' 'pause subscription,' 'involuntary churn,' 'people keep canceling,' 'churn rate is too high,' 'how do I keep users,' or 'customers are leaving.' Use this whenever someone is losing subscribers o
prowler-cloud/prowler
postgresql-indexing
PostgreSQL indexing best practices for Prowler: index design, partial indexes, partitioned table indexing, EXPLAIN ANALYZE validation, concurrent operations, monitoring, and maintenance. Trigger: When creating or modifying PostgreSQL indexes, analyzing query performance with EXPLAIN, debugging slow queries, reviewing index usage statistics, reindexing, dropping indexes, or working with partitioned table indexes. Also trigger when discussing index strategies, partial indexes, or index maintenance
oaustegard/claude-skills
featuring
Generate hierarchical _FEATURES.md files that describe what a codebase DOES from a user/consumer perspective, anchored to source symbols via tree-sitting. Supports large complex codebases through feature-driven decomposition into sub-feature files. Uses a multi-pass synthesis: orientation → detail → overview rewrite. Use when someone says "what does this do", "document features", "feature inventory", "_FEATURES.md", or needs to understand a codebase's purpose before modifying it. Complements tre