MCP server for Microsoft 365 admin operations via Graph API application permissions (security, audit, reports, service health)
Setup
Choose your client, copy the config, then fill in any required environment variables.
claude mcp add microsoft-365-admin --env MS365_ADMIN_MCP_TENANT_ID='<MS365_ADMIN_MCP_TENANT_ID>' --env MS365_ADMIN_MCP_CLIENT_ID='<MS365_ADMIN_MCP_CLIENT_ID>' --env MS365_ADMIN_MCP_CLIENT_SECRET='<MS365_ADMIN_MCP_CLIENT_SECRET>' -- npx -y @okapi-ca/ms-365-admin-mcp-server~/.codex/config.toml
[mcp_servers.microsoft-365-admin]
command = "npx"
args = ["-y", "@okapi-ca/ms-365-admin-mcp-server"]
env = { MS365_ADMIN_MCP_TENANT_ID = "<MS365_ADMIN_MCP_TENANT_ID>", MS365_ADMIN_MCP_CLIENT_ID = "<MS365_ADMIN_MCP_CLIENT_ID>", MS365_ADMIN_MCP_CLIENT_SECRET = "<MS365_ADMIN_MCP_CLIENT_SECRET>" }
# codex mcp add microsoft-365-admin --env MS365_ADMIN_MCP_TENANT_ID='<MS365_ADMIN_MCP_TENANT_ID>' --env MS365_ADMIN_MCP_CLIENT_ID='<MS365_ADMIN_MCP_CLIENT_ID>' --env MS365_ADMIN_MCP_CLIENT_SECRET='<MS365_ADMIN_MCP_CLIENT_SECRET>' -- npx -y @okapi-ca/ms-365-admin-mcp-server~/.cursor/mcp.json
{
"mcpServers": {
"microsoft-365-admin": {
"command": "npx",
"args": [
"-y",
"@okapi-ca/ms-365-admin-mcp-server"
],
"env": {
"MS365_ADMIN_MCP_TENANT_ID": "<MS365_ADMIN_MCP_TENANT_ID>",
"MS365_ADMIN_MCP_CLIENT_ID": "<MS365_ADMIN_MCP_CLIENT_ID>",
"MS365_ADMIN_MCP_CLIENT_SECRET": "<MS365_ADMIN_MCP_CLIENT_SECRET>"
}
}
}
}.vscode/mcp.json
{
"servers": {
"microsoft-365-admin": {
"type": "stdio",
"command": "npx",
"args": [
"-y",
"@okapi-ca/ms-365-admin-mcp-server"
],
"env": {
"MS365_ADMIN_MCP_TENANT_ID": "<MS365_ADMIN_MCP_TENANT_ID>",
"MS365_ADMIN_MCP_CLIENT_ID": "<MS365_ADMIN_MCP_CLIENT_ID>",
"MS365_ADMIN_MCP_CLIENT_SECRET": "<MS365_ADMIN_MCP_CLIENT_SECRET>"
}
}
}
}~/.gemini/settings.json
{
"mcpServers": {
"microsoft-365-admin": {
"command": "npx",
"args": [
"-y",
"@okapi-ca/ms-365-admin-mcp-server"
],
"env": {
"MS365_ADMIN_MCP_TENANT_ID": "<MS365_ADMIN_MCP_TENANT_ID>",
"MS365_ADMIN_MCP_CLIENT_ID": "<MS365_ADMIN_MCP_CLIENT_ID>",
"MS365_ADMIN_MCP_CLIENT_SECRET": "<MS365_ADMIN_MCP_CLIENT_SECRET>"
}
}
}
}claude_desktop_config.json
{
"mcpServers": {
"microsoft-365-admin": {
"command": "npx",
"args": [
"-y",
"@okapi-ca/ms-365-admin-mcp-server"
],
"env": {
"MS365_ADMIN_MCP_TENANT_ID": "<MS365_ADMIN_MCP_TENANT_ID>",
"MS365_ADMIN_MCP_CLIENT_ID": "<MS365_ADMIN_MCP_CLIENT_ID>",
"MS365_ADMIN_MCP_CLIENT_SECRET": "<MS365_ADMIN_MCP_CLIENT_SECRET>"
}
}
}
}.trae/mcp.json
{
"mcpServers": {
"microsoft-365-admin": {
"command": "npx",
"args": [
"-y",
"@okapi-ca/ms-365-admin-mcp-server"
],
"env": {
"MS365_ADMIN_MCP_TENANT_ID": "<MS365_ADMIN_MCP_TENANT_ID>",
"MS365_ADMIN_MCP_CLIENT_ID": "<MS365_ADMIN_MCP_CLIENT_ID>",
"MS365_ADMIN_MCP_CLIENT_SECRET": "<MS365_ADMIN_MCP_CLIENT_SECRET>"
}
}
}
}Environment variables
MS365_ADMIN_MCP_TENANT_IDMS365_ADMIN_MCP_CLIENT_IDMS365_ADMIN_MCP_CLIENT_SECRET
Replace the placeholders with your own credentials and keep them out of version control.