m365-mcp (robin-collins/m365-mcp) is an MCP server listed on the M8ven Trust Index. It scores 52 out of 100, grade D. It declares 85 tools. No publisher has claimed this listing.

D
Caution
52/100

m365-mcp

Enables AI assistants to manage Microsoft 365 services like Outlook, Calendar, OneDrive, and Contacts through natural language commands, with support for multi-account and high-performance caching.

Caution. Specific findings reduced this grade. They are listed on the page. Grades reflect the full trust pyramid: code, verification depth, and reputation. New projects cap at C until adoption is earned.

How we verified

Code Verified⚡ Live Monitored: not connected

Verified is a snapshot. Live keeps it current, and builds your track record.

⚡ Connect GitHub → continuous verification on every pushwhy connect →

Who stands behind it

robin-collins

Source: Glama

Is this your MCP?

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. Or connect your repo for our deepest verification, Live Monitored: read-only, revoke anytime. What we access →

Install from

The grade above is for the source repository. Registries can serve a different version, so we mark the ones we were not able to read.

// key findings
85 tools verified — handlers match their declared behaviour
31 read-only tools verified — handlers contain no write/delete/exec
No credential exfiltration, no sensitive file access, no obfuscation
Static analysis found nothing flowing your secrets to unexpected places.
🔐
You'll be asked for 1 credential: MCP_AUTH_TOKEN
These are read from process.env at runtime. Make sure you trust where they’ll be sent.
// tools this server exposes85 tools

These names and descriptions are the publisher's own, read from the source code. We print them as written. Our assessment is the findings above, not this list.

server_get_version

📖 Get the version of the m365-mcp server (read-only, safe for unsupervised use)

account_list

📖 List all signed-in Microsoft accounts (read-only, safe for unsupervised use) Returns a list of authenticated Microsoft accounts with their usernames, account IDs, and account types (personal or work/school). Returns: List of account dictionaries with: - username: Account email/username - account_

account_authenticate

✏️ Authenticate a new Microsoft account using device flow (requires user confirmation recommended) Initiates device flow authentication for adding a new Microsoft account. Returns authentication instructions with a device code and verification URL. The user must: 1. Visit the verification URL 2. Ent

account_complete_auth

✏️ Complete device flow authentication (requires user confirmation recommended) Completes the authentication process after the user has entered the device code at the verification URL. Args: flow_cache: The flow data returned from account_authenticate (the _flow_cache field) Returns: Account informa

cache_task_get_status

📖 Get status of a background cache task (read-only, safe for unsupervised use)

cache_task_list

📖 List background cache tasks (read-only, safe for unsupervised use)

cache_get_stats

📖 Get cache statistics and performance metrics (read-only, safe for unsupervised use)

cache_invalidate

✏️ Invalidate cache entries matching a pattern (requires user confirmation recommended)

cache_warming_status

📖 Get cache warming status and progress (read-only, safe for unsupervised use)

calendar_list_events

📖 List upcoming calendar events (read-only, safe for unsupervised use)

calendar_get_event

📖 Get full event details (read-only, safe for unsupervised use)

calendar_create_event

✏️ Create a calendar event (requires user confirmation recommended)

calendar_update_event

✏️ Update event properties (requires user confirmation recommended)

calendar_delete_event

🔴 Delete a calendar event (always require user confirmation)

calendar_respond_event

⚠️ Respond to a calendar event invitation (requires user confirmation recommended)

calendar_check_availability

📖 Check calendar availability for scheduling (read-only, safe for unsupervised use)

calendar_forward_event

📧 Forward a calendar event to recipients (always require user confirmation)

calendar_list_calendars

📖 List all available calendars (read-only, safe for unsupervised use)

calendar_create_calendar

✏️ Create a new calendar (requires user confirmation recommended)

calendar_delete_calendar

🔴 Delete a calendar permanently (always require user confirmation)

calendar_propose_new_time

✏️ Propose a new time for a meeting (requires user confirmation recommended)

calendar_get_free_busy

📖 Get simplified free/busy times for attendees (read-only, safe for unsupervised use)

contact_list

📖 List contacts (read-only, safe for unsupervised use)

contact_get

📖 Get contact details (read-only, safe for unsupervised use)

contact_create

✏️ Create a new contact (requires user confirmation recommended)

contact_update

✏️ Update contact information (requires user confirmation recommended)

contact_delete

🔴 Delete a contact permanently (always require user confirmation)

contact_create_list

✏️ Create a new contact list (requires user confirmation recommended)

contact_add_to_list

✏️ Add a contact to a contact list (requires user confirmation recommended)

contact_export

📖 Export a contact in vCard format (read-only, safe for unsupervised use)

email_list

📖 List emails from a mailbox folder (read-only, safe for unsupervised use)

email_get

📖 Get detailed information about a specific email (read-only, safe for unsupervised use)

email_create_draft

✏️ Create an email draft (requires user confirmation recommended)

email_send

📧 Send an email to recipients (always require user confirmation)

email_update

✏️ Update email properties (requires user confirmation recommended)

email_delete

🔴 Delete an email permanently (always require user confirmation)

email_move

✏️ Move an email to a different folder (requires user confirmation recommended)

email_reply

📧 Reply to an email (always require user confirmation)

email_reply_all

📧 Reply to all recipients of an email (always require user confirmation)

email_forward

📧 Forward an email to recipients (always require user confirmation)

email_get_attachment

Download an email attachment to a validated local path.

email_mark_read

✏️ Mark an email as read or unread (requires user confirmation recommended)

email_flag

✏️ Flag or unflag an email (requires user confirmation recommended)

email_add_category

✏️ Add categories to an email (requires user confirmation recommended)

email_archive

✏️ Archive an email (requires user confirmation recommended)

emailfolders_list

📖 List mail folders from mailbox (read-only, safe for unsupervised use)

emailfolders_get

📖 Get detailed information about a specific mail folder (read-only, safe for unsupervised use)

emailfolders_get_tree

📖 Recursively build a tree of mail folders (read-only, safe for unsupervised use)

emailfolders_create

✏️ Create a new mail folder (requires user confirmation recommended)

emailfolders_rename

✏️ Rename a mail folder (requires user confirmation recommended)

emailfolders_move

✏️ Move a mail folder to a different parent (requires user confirmation recommended)

emailfolders_delete

🔴 Delete a mail folder permanently (always require user confirmation)

emailfolders_mark_all_as_read

✏️ Mark all messages in a folder as read (requires user confirmation recommended)

emailfolders_empty

🔴 Delete all messages in a folder (always require user confirmation)

emailrules_list

📖 List all inbox message rules (read-only, safe for unsupervised use)

emailrules_get

📖 Get details of a specific message rule (read-only, safe for unsupervised use)

emailrules_create

✏️ Create a new inbox message rule to automatically process emails (requires user confirmation recommended)

emailrules_update

✏️ Update an existing message rule (requires user confirmation recommended)

emailrules_delete

🔴 Delete a message rule permanently (always require user confirmation)

emailrules_move_top

✏️ Move a message rule to the top of execution order (requires user confirmation recommended)

emailrules_move_bottom

✏️ Move a message rule to the bottom of execution order (requires user confirmation recommended)

emailrules_move_up

✏️ Move a message rule up one position in execution order (requires user confirmation recommended)

emailrules_move_down

✏️ Move a message rule down one position in execution order (requires user confirmation recommended)

file_list

📖 List files and/or folders in OneDrive (read-only, safe for unsupervised use)

file_get

✏️ Download a OneDrive file to a local path (requires user confirmation recommended)

file_create

✏️ Upload a local file to OneDrive (requires user confirmation recommended)

file_update

✏️ Replace OneDrive file content with local file (requires user confirmation recommended)

file_delete

🔴 Delete a OneDrive file or folder permanently (always require user confirmation)

file_copy

✏️ Copy a file within OneDrive (requires user confirmation recommended)

file_move

✏️ Move a file to a different folder (requires user confirmation recommended)

file_rename

✏️ Rename a file (requires user confirmation recommended)

file_share

✏️ Create a sharing link for a OneDrive file (requires user confirmation recommended)

file_download_url

📖 Get direct download URL for a OneDrive file (read-only, safe for unsupervised use)

folder_list

📖 List only folders (not files) in OneDrive (read-only, safe for unsupervised use)

folder_get

📖 Get metadata for a specific OneDrive folder (read-only, safe for unsupervised use)

folder_get_tree

📖 Recursively build a tree of OneDrive folders (read-only, safe for unsupervised use)

folder_create

✏️ Create a new OneDrive folder (requires user confirmation recommended)

folder_delete

🔴 Delete an OneDrive folder permanently (always require user confirmation)

folder_rename

✏️ Rename an OneDrive folder (requires user confirmation recommended)

folder_move

✏️ Move an OneDrive folder to a different parent (requires user confirmation recommended)

search_files

📖 Search for files in OneDrive (read-only, safe for unsupervised use)

search_emails

📖 Search emails across mailbox (read-only, safe for unsupervised use)

search_events

📖 Search calendar events (read-only, safe for unsupervised use)

search_contacts

📖 Search contacts (read-only, safe for unsupervised use)

search_unified

📖 Search across multiple Microsoft 365 resources (read-only, safe for unsupervised use)

// environment variables
To run this server yourself, you supply these values. They go in your own MCP client configuration and stay on your machine. The secret label means the value is sensitive, not that the server mishandles it.
configMCP_LOG_LEVEL
configMCP_LOG_DIR
configM365_MCP_CLIENT_IDEdit .env with your
configMCP_TRANSPORTexport ="http"
configMCP_HOSTexport ="127.0.0.1"
configMCP_PORTexport ="8000"
configMCP_PATH
configMCP_AUTH_METHODexport ="bearer"
configMCP_ALLOW_INSECURE
🔐 secretMCP_AUTH_TOKENexport =$(openssl rand -hex 32)
configMCP_FILE_DOWNLOAD_TIMEOUT
configMCP_FILE_DOWNLOAD_CHUNK_SIZE
configMCP_FILE_DOWNLOAD_MAX_MB
configM365_MCP_INTERACTIVE_AUTH
configM365_MCP_TENANT_ID"Need admin approval": Use =consumers for personal accounts
configM365_MCP_CACHE_WARMING🔄 Optional Cache Warming: Set =true to start
configMCP_FILE_ALLOWED_ROOTS
// quality suggestions

Destructive tools are labelled

1 tool perform destructive updates without destructiveHint — email_get_attachment deletes at line 1280 (destination.unlink(missing_ok=True))

Add destructiveHint:true to any tool whose handler calls .delete(), .upsert(), .update(), unlink, rm, DELETE, DROP, REPLACE INTO, or any operation that overwrites existing data.

Tool inputs are validated

80/85 tool handlers declare input schemas (94%)

Declare an inputSchema with zod/joi/yup on every tool definition.

Tool handlers catch errors

Only 36/85 tool handlers wrap calls in try/catch (42%)

Wrap each tool handler body in try/catch and return a structured error response.

License file

No license file

Add a LICENSE file (MIT, Apache-2.0, etc.).

Tests exist

No test files found

Add tests that exercise each declared tool.

Claim the listing to review these findings one by one and send us a correction where you disagree, straight to the team. Claiming also means we tell you when the grade moves, and reach you first if we find anything urgent.

// full audit trail
The findings above are the summary. The full trail, every check we ran, each deduction, the network hosts observed and the dependency advisories, goes to verified publishers, along with an alert whenever a new one lands. Verified publishers can also review each finding and dispute it in one click. Publisher corrections have sharpened several of our checks this month, because the maintainer knows the codebase better than any scanner.
// improvement guidance — verified publishers only
We have 5 concrete improvements we can share with the publisher of this MCP. Each comes with specific guidance to raise the trust score.
// embed badge in your README
[![M8ven Verified](https://m8ven.ai/badge/mcp/robin-collins/m365-mcp?variant=verified)](https://m8ven.ai/mcp/robin-collins/m365-mcp)
Shows verification status without the grade. Want the grade badge instead? Remove ?variant=verified from the URL.
commit: 2818fb2251edb9183d0a08172601fb79a0cf1e75
code hash: 7adaabd03a43b905ecbf396806225e48d8e4ffbd0c4c09c4240f7db718b7fb37
view raw JSON →
Check MCPs from inside your assistant
Tool Check · MCP

Vetting this one by hand? Tool Check is an MCP that scores other MCPs. Add it once and ask Claude, ChatGPT, or any MCP client to grade a server, surface CVEs, check the publisher, and suggest safer alternatives — before you install.

https://m8ven.ai/api/mcp/tool-check
check_toolsearch_toolscompare_toolsrecommend_alternativescheck_publisherreport_concern
How to add it →Free · no account needed · works in any MCP client