Microsoft 365 & Azure admin: Graph, ARM, and the PowerShell cmdlets Graph does not expose.
Most cloud and infrastructure work still happens through a UI a human drives. Minerva MCP — Microsoft 365 & Azure MCP server moves it into the conversation instead. Microsoft 365 & Azure admin: Graph, ARM, and the PowerShell cmdlets Graph does not expose.
An MCP server that lets Claude, Copilot, VS Code or any MCP client query and administer a Microsoft 365 tenant in plain language.
npm on npm is all you need. Most clients run it directly, so configuration is a few lines and a restart.
The server publishes 12 tools. What each one is for:
microsoft_graph_call — Any Microsoft Graph call (v1.0 or beta)azure_arm_call — Any Azure Resource Manager callmicrosoft_search — Unified Microsoft Searchget_tenant_context — Organisation, licences, Secure Scoregenerate_security_report — Tenant security postureexecute_exchange_online — Exchange Online cmdletsexecute_pnp_sharepoint — PnP PowerShell (SharePoint) cmdletsexecute_teams_admin — Teams Admin cmdletsexecute_purview_compliance — Purview / compliance cmdletsTransport — In stdio mode all logs go to stderr — stdout belongs to the protocolAuthentication — Defaults: bearer over HTTP (the caller supplies the token), device-code over stdio, client-secret as soon as a secret is present. Each resource getsScope — --read-only reuses the same risk classifier as the approval gate, so it covers PowerShell cmdlets too, not just HTTP verbsConfiguration is passed through the environment: MINERVA_TENANT_ID, AZURE_TENANT_ID, MINERVA_CLIENT_ID, AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, MINERVA_SHAREPOINT_URL, REDIS_URL, MINERVA_MRTR_SECRET. Treat anything key-shaped as a real credential — scope it to the minimum the server needs, and rotate it if it ever lands in a shared config.
Plenty of cloud and infrastructure servers cover similar ground. The differences that matter in practice are scope of access and how much setup stands between you and a working tool call. Minerva MCP — Microsoft 365 & Azure's toolset — microsoft_graph_call, azure_arm_call, microsoft_search and 9 more — is a fair guide to whether it matches your workflow. It is maintained by HoussemMak; worth a glance at recent repository activity before you build anything load-bearing on it.
SyncDev reviews every entry in this directory against the project's own documentation before publishing, and revisits them as servers change.
| Tool | What it does |
|---|---|
| microsoft_graph_call | Any Microsoft Graph call (v1.0 or beta) |
| azure_arm_call | Any Azure Resource Manager call |
| microsoft_search | Unified Microsoft Search |
| get_tenant_context | Organisation, licences, Secure Score |
| generate_security_report | Tenant security posture |
| execute_exchange_online | Exchange Online cmdlets |
| execute_pnp_sharepoint | PnP PowerShell (SharePoint) cmdlets |
| execute_teams_admin | Teams Admin cmdlets |
| execute_purview_compliance | Purview / compliance cmdlets |
| Transport | In stdio mode **all logs go to stderr** — stdout belongs to the protocol. |
| Authentication | Defaults: bearer over HTTP (the caller supplies the token), device-code over stdio, client-secret as soon as a secret is present. Each resource gets its own token: Graph, ARM, Exchange, Purview, SharePoint and Teams do n |
| Scope | --read-only reuses the same risk classifier as the approval gate, so it covers PowerShell cmdlets too, not just HTTP verbs. |
{
"mcpServers": {
"minerva": {
"command": "npx",
"args": ["-y", "npm"],
"env": {
"MINERVA_TENANT_ID": "your-value",
"AZURE_TENANT_ID": "your-value",
"MINERVA_CLIENT_ID": "your-value",
"AZURE_CLIENT_ID": "your-value",
"AZURE_CLIENT_SECRET": "your-value",
"MINERVA_SHAREPOINT_URL": "your-value",
"REDIS_URL": "your-value",
"MINERVA_MRTR_SECRET": "your-value"
}
}
}
}Add to claude_desktop_config.json, then restart Claude Desktop.
| Variable | Description | Required |
|---|---|---|
| MINERVA_TENANT_ID | Configuration value read at startup. | Optional |
| AZURE_TENANT_ID | Configuration value read at startup. | Optional |
| MINERVA_CLIENT_ID | Configuration value read at startup. | Optional |
| AZURE_CLIENT_ID | Configuration value read at startup. | Optional |
| AZURE_CLIENT_SECRET | Credential the server authenticates with. | Yes |
| MINERVA_SHAREPOINT_URL | Endpoint or connection string the server talks to. | Yes |
| REDIS_URL | Endpoint or connection string the server talks to. | Yes |
| MINERVA_MRTR_SECRET | Credential the server authenticates with. | Yes |
Manage your whole Supabase project in conversation — database, auth, storage, Edge Functions and branches.
Stop letting your assistant hallucinate n8n node parameters — this server hands it the real schemas, templates and validation.
AWS Labs' official server suite — current AWS docs, CDK guidance, cost analysis and service tools.
Cloud browsers for AI agents — automation sessions that run in Browserbase's fleet, not on your machine.
Workers, KV, R2 and D1 by conversation — Cloudflare's official remote servers for building and observability.
Dashboards, Prometheus and Loki queries, incidents and alerts — observability by conversation.