Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
Microsoft 365 administration via Graph API application permissions (read-only by default).
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
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_TOOLS标为机密的值是你账户的钥匙。千万不要分享给别人,也不要粘贴到聊天里。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
打开 Claude Desktop → Settings → Developer → Edit Config,把下面的内容粘贴到 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"
}
}
}
}在终端中运行这条命令
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-server运行前请先填写空着的值。
粘贴到项目中的 .cursor/mcp.json,或 ~/.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"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"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"
}
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
这个服务器在你的电脑上运行,而 ChatGPT 只能连接互联网上的服务器。请选择其他应用。
你的选择通过 Cookie 保存在这台设备上,无需账户。
MS365_ADMIN_MCP_KEYVAULT_URL envMS365_ADMIN_MCP_CLOUD_TYPE envMS365_ADMIN_MCP_MAX_TOP envREAD_ONLY envENABLED_TOOLS env这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
它在你的电脑上运行;安装后,工具列表会显示在你的 AI 应用中。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月6日
注册名称已通过 GitHub 账户 okapi-ca 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
它在你的电脑上运行,没有互联网端点
在你的电脑上运行,改用本地设置
它在你的电脑上运行;我们只能读取互联网端点的工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
你需要填写:MS365_ADMIN_MCP_TENANT_ID, MS365_ADMIN_MCP_CLIENT_ID, MS365_ADMIN_MCP_CLIENT_SECRET
它在你的电脑上运行。你的 AI 应用会在需要时启动它,数据不会经过作者的服务器(除非它自己调用在线服务)。
GitHub 仓库最后更新于–,最新版本(0.6.3)于6个月前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。你的电脑上还需要有 Node.js。
同一分类中有:Spec Driven Development, Remote Desktop Commander, yontu
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
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.
Türkçe yazı denetimi: TDK kuralları, yapay zekâ izleri, metin türüne göre üslup.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
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
只显示了开头部分;其余内容请在仓库中阅读