A Model Context Protocol (MCP) server for interacting with Microsoft 365 and Microsoft Office services through the Graph API.
Claim it to get a verified publisher badge, a free copy of our full audit findings, and direct contact for any high-priority issues we find.
Install from
M8ven verifies MCPs across every public registry — install directly from whichever one you prefer.
Disclosed vulnerabilities in this server's declared npm dependencies (via OSV). Whether each is reachable depends on the installed versions.
JS-YAML: Quadratic-complexity DoS in merge key handling via repeated aliases
js-yaml has prototype pollution in merge (<<)
process.env. You'll be asked to provide them before it can run.ENABLED_TOOLS— Filter tools using a regex pattern (alternative to --enabled-tools flag)LOG_LEVEL— Set logging level (default: 'info')MS365_MCP_ALLOWED_REDIRECT_URISMS365_MCP_ALLOWED_SCOPESMS365_MCP_ALLOW_PAGINATIONMS365_MCP_ALLOW_UNAUTHENTICATED_DISCOVERYMS365_MCP_AUDIT_LOGMS365_MCP_BASE_URLMS365_MCP_BODY_FORMAT— html: Return email bodies as HTML instead of plain text (default: text)MS365_MCP_CLIENT_ID— 5. Set — replace your-azure-ad-client-id with your Azure Entra app (client) ID. See [Azure AD App Registration](docs/deployment.md#azure-ad-app-registration-for-organizations) for how to create one.MS365_MCP_CLIENT_SECRET— Custom or additional Microsoft Graph API scopes beyond the built-in permission set (configure via MS365_MCP_CLIENT_ID / )MS365_MCP_CLOUD_TYPE— globalchina: Microsoft cloud environment (alternative to --cloud flag)MS365_MCP_CORS_ORIGINMS365_MCP_EXPECTED_HOME_ACCOUNT_ID— CLI values (--expected-username, --expected-home-account-id) take precedence over MS365_MCP_EXPECTED_USERNAME and .MS365_MCP_EXPECTED_USERNAME— work@company.com npx @ideatells-b-v-software/ms-365-mcp-server --loginMS365_MCP_EXTRA_SCOPESMS365_MCP_FORCE_WORK_SCOPES— true1: Backwards compatibility for MS365_MCP_ORG_MODEMS365_MCP_GRAPH_CIRCUIT_DISABLEDMS365_MCP_KEYVAULT_URL— Azure Key Vault URL for secrets management (see Azure Key Vault section)MS365_MCP_LOG_DIRMS365_MCP_MAX_TOP— n>: Hard cap for Graph $top / top on list requests (positive integer). When the model passes a larger value, the server clamps it to n so responses stay smaller. Example: MS365_MCP_MAX_TOP=15MS365_MCP_OAUTH_TOKEN— your_oauth_token npx @ideatells-b-v-software/ms-365-mcp-serverMS365_MCP_OBOMS365_MCP_ORG_MODE— true1: Enable organization/work mode (alternative to --org-mode flag)MS365_MCP_OUTPUT_FORMAT— toon npx @ideatells-b-v-software/ms-365-mcp-serverMS365_MCP_PUBLIC_URLMS365_MCP_RATE_LIMIT_DISABLED— true1: Disable per-IP rate limiting in HTTP mode (default: enabled — 30 req/min on /authorize, /token, /register; 120 req/min on /mcp)MS365_MCP_REDACT_PIIMS365_MCP_SELECTED_ACCOUNT_PATH— Explicit cache paths: Override MS365_MCP_TOKEN_CACHE_PATH and (resolved by getTokenCachePath() / getSelectedAccountPath() in src/token-cache-storage.ts) when the XDG default location is not writable.MS365_MCP_TENANT_ID— ms365-mcp-tenant-id No (defaults to 'common')MS365_MCP_TOKEN_CACHE_PATH— Custom file path for MSAL token cache (see Token Storage below)MS365_MCP_TOKEN_FILE— alt or in-memory token validMS365_MCP_TRUST_PROXY_AUTHMS365_MCP_TRUST_PROXY_HOPSREAD_ONLY— true1: Alternative to --read-only flagSILENT— true1: Disable console outputVITESTXDG_DATA_HOME[](https://m8ven.ai/mcp/ideatells-b-v-software-hermes-ms365-mcp-15mn6z)