Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Description from the maker (original English)
Microsoft 365 administration via Graph API application permissions (read-only by default).
These three are never merged into one score: opinions, measurements and popularity are different things.
We have not written a plain-language summary for this one yet. Below are the facts we read from the registry.
Pick the AI app you use, then copy the settings.
MS365_ADMIN_MCP_TENANT_ID, MS365_ADMIN_MCP_CLIENT_ID, MS365_ADMIN_MCP_CLIENT_SECRET, MS365_ADMIN_MCP_KEYVAULT_URL, MS365_ADMIN_MCP_CLOUD_TYPE, MS365_ADMIN_MCP_MAX_TOP, READ_ONLY, ENABLED_TOOLSValues marked secret are keys to your account. Never share them or paste them into a chat.
You need
Which app do you use?
Pick your app above. We remember it, so next time the button says “Install in …”.
Open Claude Desktop → Settings → Developer → Edit Config, and paste this into claude_desktop_config.json
{
"mcpServers": {
"ms-365-admin": {
"command": "npx",
"args": [
"-y",
"@okapi-ca/ms-365-admin-mcp-server"
],
"env": {
"MS365_ADMIN_MCP_TENANT_ID": "your-value",
"MS365_ADMIN_MCP_CLIENT_ID": "your-value",
"MS365_ADMIN_MCP_CLIENT_SECRET": "your-value",
"MS365_ADMIN_MCP_KEYVAULT_URL": "your-value",
"MS365_ADMIN_MCP_CLOUD_TYPE": "your-value",
"MS365_ADMIN_MCP_MAX_TOP": "your-value",
"READ_ONLY": "your-value",
"ENABLED_TOOLS": "your-value"
}
}
}
}Run this in your terminal
claude mcp add ms-365-admin --env MS365_ADMIN_MCP_TENANT_ID=your-value --env MS365_ADMIN_MCP_CLIENT_ID=your-value --env MS365_ADMIN_MCP_CLIENT_SECRET=your-value --env MS365_ADMIN_MCP_KEYVAULT_URL=your-value --env MS365_ADMIN_MCP_CLOUD_TYPE=your-value --env MS365_ADMIN_MCP_MAX_TOP=your-value --env READ_ONLY=your-value --env ENABLED_TOOLS=your-value -- npx -y @okapi-ca/ms-365-admin-mcp-serverFill in the empty values before running it.
Paste into .cursor/mcp.json in your project, or ~/.cursor/mcp.json
{
"mcpServers": {
"ms-365-admin": {
"command": "npx",
"args": [
"-y",
"@okapi-ca/ms-365-admin-mcp-server"
],
"env": {
"MS365_ADMIN_MCP_TENANT_ID": "your-value",
"MS365_ADMIN_MCP_CLIENT_ID": "your-value",
"MS365_ADMIN_MCP_CLIENT_SECRET": "your-value",
"MS365_ADMIN_MCP_KEYVAULT_URL": "your-value",
"MS365_ADMIN_MCP_CLOUD_TYPE": "your-value",
"MS365_ADMIN_MCP_MAX_TOP": "your-value",
"READ_ONLY": "your-value",
"ENABLED_TOOLS": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
Paste into .vscode/mcp.json in your project
{
"servers": {
"ms-365-admin": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@okapi-ca/ms-365-admin-mcp-server"
],
"env": {
"MS365_ADMIN_MCP_TENANT_ID": "your-value",
"MS365_ADMIN_MCP_CLIENT_ID": "your-value",
"MS365_ADMIN_MCP_CLIENT_SECRET": "your-value",
"MS365_ADMIN_MCP_KEYVAULT_URL": "your-value",
"MS365_ADMIN_MCP_CLOUD_TYPE": "your-value",
"MS365_ADMIN_MCP_MAX_TOP": "your-value",
"READ_ONLY": "your-value",
"ENABLED_TOOLS": "your-value"
}
}
}
}Your browser asks to open the app, then the app shows the settings and asks you to confirm. Key values are left empty for you to fill in.
This one runs on your computer, and ChatGPT can only connect to servers on the internet. Pick another app.
Your choice stays on this device in a cookie; no account needed.
MS365_ADMIN_MCP_KEYVAULT_URL envMS365_ADMIN_MCP_CLOUD_TYPE envMS365_ADMIN_MCP_MAX_TOP envREAD_ONLY envENABLED_TOOLS envThese settings are generated from the maker’s registry entry. If the README says otherwise, follow the README.
Runs on your computer; the tool list appears in your AI app after you install it.
We check information anyone can see; we have not read the code. Checks that do not apply are left out of the count. · Checked Nov 6, 2026
The registry name was verified with the GitHub account okapi-ca, which owns the repo
We have not read this repo from GitHub yet
We have not read this repo from GitHub yet
This one runs on your computer; there is no internet endpoint
Runs on your computer and uses local settings instead
Runs on your computer; we can only read tool lists from internet endpoints
Compared with every active server in this category in the registry. Stars count only when the publisher owns the repo.
It passed 1 of 1 applicable basic checks. We have not read the code. Before adding a key or token, see what access the server asks for and use a key with only the permissions you need.
You need to fill in: MS365_ADMIN_MCP_TENANT_ID, MS365_ADMIN_MCP_CLIENT_ID, MS365_ADMIN_MCP_CLIENT_SECRET
It runs on your computer. Your AI app starts it when needed, and data does not pass through the maker’s servers (unless it calls an online service itself).
The GitHub repo last changed –, and the latest version (0.6.3) reached the registry 6 months ago.
Apps that support MCP, such as Claude Desktop, Claude Code, Cursor and VS Code. You also need Node.js on your computer.
In the same category: Spec Driven Development, Remote Desktop Commander, SSTracker free youth training
Servers in the same category from other makers, sorted by stars.
Reading a card:★ GitHub starsiThree pillars: reviews · checks · usageiUpdated = latest version published to the registryi
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Free youth sports drills, practice plans and age-group answers for parents and coaches.
Copied from the maker’s repo as written. PopNx MCP has not reviewed or endorsed it. HTML, images and scripts are removed. Links lead off this site.
A Model Context Protocol (MCP) server for Microsoft 365 administration via Graph API application permissions (client credentials).
Built on the architecture and endpoint-driven design pioneered by Softeria/ms-365-mcp-server, and complementary to it: Softeria's server uses delegated permissions for end-user productivity scenarios, while this one uses application permissions for admin operations — security monitoring, identity audits, incident response, and service health. See Acknowledgments below.
--allow-writes| Document | Purpose |
|---|---|
| docs/USE_CASES.md | 18 typical admin scenarios with sample prompts and tool lists |
| docs/playbooks/ | End-to-end security incident response playbooks |
| agent-skills/ | Drop-in skills for LLM agents (Claude Code et al.) with safety patterns |
| docs/APP_REGISTRATION.md | Step-by-step Azure AD app registration and permission consent |
| docs/HTTP_DEPLOYMENT.md | HTTP transport, JWT validation, Docker, Azure Container Apps |
| docs/AZURE_DEPLOYMENT_SECURITY.md | Threat model, required controls, and checklist for Azure production deploys |
| docs/TROUBLESHOOTING.md | Common errors and how to diagnose them |
| docs/ARCHITECTURE.md | Internal architecture and code generation pipeline |
| docs/RISK_MODEL.md | Risk classification rubric for write tools |
| CONTRIBUTING.md | How to contribute new tools, presets, and fixes |
| SECURITY.md | Vulnerability reporting and operator hardening checklist |
| CHANGELOG.md | Release history |
npm install -g @okapi-ca/ms-365-admin-mcp-server
ms-365-admin-mcp-server --help
docker pull ghcr.io/okapi-ca/ms-365-admin-mcp-server:latest
docker run --rm -i \ -e MS365_ADMIN_MCP_CLIENT_ID=... \ -e MS365_ADMIN_MCP_CLIENT_SECRET=... \ -e MS365_ADMIN_MCP_TENANT_ID=... \ ghcr.io/okapi-ca/ms-365-admin-mcp-server:latest
git clone https://github.com/okapi-ca/ms-365-admin-mcp-server.git
cd ms-365-admin-mcp-server npm install npm run generate npm run build
| Variable | Required | Description |
|---|---|---|
MS365_ADMIN_MCP_CLIENT_ID | Yes | App registration client ID |
MS365_ADMIN_MCP_CLIENT_SECRET | Yes | App registration client secret |
MS365_ADMIN_MCP_TENANT_ID | Yes | Azure AD tenant ID (must be specific) |
MS365_ADMIN_MCP_CLOUD_TYPE | No | global (default) or china |
MS365_ADMIN_MCP_KEYVAULT_URL | No | Azure Key Vault URL (overrides env vars) |
MS365_ADMIN_MCP_MAX_TOP | No | Cap $top query param to limit result size |
READ_ONLY | No | true/1 to force read-only (default behavior) |
ENABLED_TOOLS | No | Regex to filter available tools |
{
"mcpServers": { "ms365-admin": { "command": "node", "args": ["/path/to/ms-365-admin-mcp-server/dist/index.js"], "env": { "MS365_ADMIN_MCP_CLIENT_ID": "your-client-id", "MS365_ADMIN_MCP_CLIENT_SECRET": "your-client-secret", "MS365_ADMIN_MCP_TENANT_ID": "your-tenant-id" } } } }
VS Code consumes the same MCP protocol but uses a different config layout — servers instead of mcpServers, an explicit type field, and inputs for secret prompts. A ready-to-copy sample lives at .vscode/mcp.json.example; copy it to .vscode/mcp.json and VS Code will prompt for the tenant / client / secret on first start, then store them in its secret store (the real mcp.json is gitignored so resolved secrets never reach the repo).
Minimal stdio setup:
{
"inputs": [ { "type": "promptString", "id": "ms365-tenant-id", "description": "Tenant ID" }, { "type": "promptString", "id": "ms365-client-id", "description": "Client ID" }, { "type": "promptString", "id": "ms365-client-secret", "description": "Client secret", "password": true, }, ], "servers": { "ms365-admin": { "type": "stdio", "command": "ms-365-admin-mcp-server", "args": ["--preset", "security,audit,identity,health"], "env": { "MS365_ADMIN_MCP_TENANT_ID": "${input:ms365-tenant-id}", "MS365_ADMIN_MCP_CLIENT_ID": "${input:ms365-client-id}", "MS365_ADMIN_MCP_CLIENT_SECRET": "${input:ms365-client-secret}", }, }, }, }
For remote HTTP deployments, use "type": "http" with a url field (VS Code 1.103+ handles OAuth 2.0 Dynamic Client Registration natively) or fall back to the mcp-remote bridge when the native browser flow is unavailable — see the example file for both shapes.
Tools surface in Agent mode (GitHub Copilot Chat). VS Code asks for per-tool approval; the --preset flag above keeps the catalog manageable. Use Cmd/Ctrl+Shift+P → MCP: List Servers → Show Output to see logs.
Claude.ai, Claude Desktop and cloud sessions serve each connector's tools under a fixed budget of 1 MiB of input schema (compact JSON; tool names and descriptions are not counted). Tools are admitted in alphabetical order and a tool that no longer fits is dropped silently. Claude Code CLI is not affected. The limit is not documented publicly.
In a cloud session linked to a Mac, the claude-device bridge relays every local MCP server under one connector (lcl- - ), so all local servers share that budget, and this server's tools sort after most of them.
Request bodies are therefore advertised shallow (src/advertised-schema.ts): the entity's own fields with their descriptions, nested objects as free-form objects, and no Read-only. fields. Graph validates the body; the server forwards it as sent. With writes enabled the catalog advertises about 595 KB of input schema, and test/advertised-schema.test.ts fails the build above 768 KiB.
If tools still go missing in a cloud session, shrink what this server advertises (read-only mode, --preset, --enabled-tools), disable unused local servers, or register this server as its own connector so it gets a budget of its own.
If the server runs in HTTP / OAuth mode on a remote host (e.g. Azure Container Apps) and the client connects via mcp-remote, the standard flow requires a browser to reach localhost:14543/oauth/callback. When that isn't possible — macOS Platform SSO hijacks the WebKit flow, Claude Code runs in a headless Docker container, the user is on a remote SSH dev env — use the ms-365-admin-mcp-auth bootstrap to pre-seed mcp-remote's token cache instead.
npx -p @okapi-ca/ms-365-admin-mcp-server@latest ms-365-admin-mcp-auth \
--server https://your-mcp-host.azurecontainerapps.io/mcp
The helper prints a URL and a user code; you sign in on any device you trust (phone, another laptop) and the tokens are written to ~/.mcp-auth/mcp-remote- /. Claude Desktop / Claude Code then launches mcp-remote normally and finds the cached tokens without ever opening a browser.
See docs/TROUBLESHOOTING.md for Docker / remote-dev patterns and exit code reference.
--read-only Read-only mode (default)
--allow-writes Enable write operations --enabled-tools Filter tools by regex pattern --preset Use preset categories (comma-separated) --partition Tool partition served on /mcp/ in HTTP mode (default: domains) --list-presets List available presets and exit --list-tools List available tools and exit --list-permissions List required Graph API permissions and exit --verify-login
Only the beginning is shown; read the rest in the repo