Skip to content
verify mcp Beta VerifyMCP is currently in beta. If you notice any issues, get in touch and we’ll put it right.

io.github.nitin27may/ms-graph-mcp

PYPI · MS-GRAPH-MCP

Microsoft Graph MCP server — 85 tools for mail, calendar, Teams, files, SharePoint, and Entra ID

Available components

+15 this week 97 Trust /100

Last scanned (2 minutes ago)

Scores higher than 99% of PyPI servers

Category Productivity and Notes

Trust breakdown (7 categories)

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. How we score → Why this is hard to score →

Supply Chain Security100
  • No malware found by supply-chain analysis.Pass
  • No known CVEs affecting this package version or its production dependencies.Pass
  • Runs hatchling.build at install time, a recognised build step with no custom scripting around it. View diagnostics → Pass
  • 1 of 40 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency100
  • Source repository is publicly reachable at the declared URL. View diagnostics → Pass
  • Cryptographically verified build provenance (signed, bound to nitin27may/ms-graph-mcp). View diagnostics → Pass
  • Clear OSI-approved license (MIT).Pass
  • Actively maintained (last published 76 days ago).Pass
  • Publishes a security disclosure policy (SECURITY.md).Pass
Schema Quality & AI Usability82
  • AI-judged instruction clarity (excellent).Pass
  • Context-footprint check failed: tool/resource definitions use about 2483 tokens (~107/item across 23 items; 23 tools + 0 resources), over budget; trim descriptions and params. See how to fix → Fail
  • Usage-examples check failed: none of the tools include examples. See how to fix → Fail
Stability & Change Management100
  • No destabilizing schema changes in the last 30 days.Pass
Tool Coverage100
  • 100% of tools have a non-trivial description (not blank, and not just the tool's name).Pass
  • 100% of tool parameters carry a description.Pass
Tool Safety100
  • No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.Pass
  • We read all 23 captured tool definition(s), and no name or description among them implies an irreversible operation.Pass
  • An AI judge read all 23 captured unit(s) of tool text and found none that tries to manipulate the model reading it.Pass
Capabilities100
  • Implements a current MCP spec version (2026-07-28).Pass
Changelog

Every change we have recorded for this component, newest first. Security-relevant changes are always shown. ▲ marks a change for the better, ▼ a change for the worse; unmarked changes are neutral.

  • 5 Nov 26 +15
    • Malware scan: unverified → pass ▲ security
  • 3 Nov 26 −15
    • Malware scan: pass → unverified ▼ security
  • 31 Oct 26 +16
    • Malware scan: unverified → pass ▲ security
    • Stability: 0.97 → pass security
  • 30 Oct 26 −1
    • Stability: pass → 0.97 functional
  • 29 Oct 26 −15
    • Malware scan: pass → unverified ▼ security
  • 18 Oct 26 +1
    • Stability: 0.97 → pass security
  • 16 Oct 26 +16
    • Malware scan: unverified → pass ▲ security
  • 15 Oct 26 −15
    • Malware scan: pass → unverified ▼ security
Diagnostics

Diagnostic detail from the automated scan of this channel: what the scanner observed at each step, so you can see exactly where a check passed or failed. It is informational only and never changes the trust score.

Captured 5 Nov 2026 · Analysed pypi/ms-graph-mcp@0.3.0

Provenance Verified

A signed build attestation was found and verified, binding this exact artifact to the source repository it claims to come from.

Result Verified
Ecosystem pypi
Reason Verified
Discovered via Registry attestation endpoint
Source repo nitin27may/ms-graph-mcp
Certificate issuer https://token.actions.githubusercontent.com
Certificate SAN https://github.com/nitin27may/ms-graph-mcp/.github/workflows/release.yml@refs/tags/v0.3.0
Rekor log index 2533739789
Predicate type PyPI publish attestation https://docs.pypi.org/attestations/publish/v1
Subject digest sha256:b04f40cdb45b7c429bd61f8b6caaf7e98c69ddf4b234a9688393d0aa3aef4f8b

Background: How many MCP packages publish verified provenance →

Install scripts 1 script
Hook Tier Command
build_backend allowlisted hatchling.build

Background: Why install scripts are a supply-chain risk →

Dependencies 40 packages
Packages resolved 40
No linked repository 1
Tree resolution Complete

Background: SBOMs and build attestations, explained →

MCP tools · 23 exposed · ~2,483 tokens

The tools this component advertises to a client, with an estimated token cost for each. Expand a tool to see its parameters and schema. The per-tool counts are indicative and are not scored directly; the schema's total context footprint is one signal in Schema Quality & AI Usability. A tool's description is untrusted text the model reads on every call, which is what makes this list a security surface and not just an inventory: how tool poisoning works →

Tool Tokens
calendar_find_meeting_times ~196

Ask Microsoft Graph to suggest meeting times when the given attendees are free, ranked by how likely everyone is to attend. Returns candidate slots with a confidence percentage and per-attendee availability. This reads calendars and books nothing — pass a chosen slot to calendar_create_event to actually schedule it. Requires Calendars.Read.Shared.

NameTypeReqDescription
attendeesarray–Who must attend. Empty looks at the signed-in user's calendar only.
duration_minutesinteger–Meeting length in minutes
max_suggestionsinteger–How many candidate slots to return
minimum_attendee_percentageinteger–Only suggest slots where at least this percentage of attendees are free (0-100)
time_zonestring–Time zone for the window
window_endstring–Latest acceptable end, ISO 8601
window_startstring–Earliest acceptable start, ISO 8601. Defaults to now.

No output schema declared.

No examples provided.

calendar_get_event ~93

Get one calendar event in full by its id: subject, times, organiser, location, agenda preview, the Teams join URL and the complete attendee list with each person's response status. Takes an event id from calendar_list_upcoming_events or calendar_list_events_in_range. Use calendar_get_event_attendees when only the attendee list is needed. Requires Calendars.Read.

NameTypeReqDescription
meeting_idstringyesThe calendar event ID

No output schema declared.

No examples provided.

calendar_get_event_attendees ~87

List who was invited to a calendar event and how each person replied — accepted, declined, tentative or no response. Returns email, display name and response status per attendee. Use this when the question is about who is coming; calendar_get_event returns the same list alongside the event's other detail. Requires Calendars.Read.

NameTypeReqDescription
meeting_idstringyesThe calendar event ID

No output schema declared.

No examples provided.

calendar_get_free_busy ~165

Look up whether people are free or busy across a time window, without seeing what their meetings are. Returns per-person busy periods and a slot-by-slot free/tentative/busy/out of office breakdown. Use to answer 'when is X available'; calendar_find_meeting_times is better when the goal is a slot that suits a whole group. Requires Calendars.ReadBasic.

NameTypeReqDescription
emailsarrayyesEmail addresses to check availability for
endstringyesEnd of the window, ISO 8601
interval_minutesinteger–Granularity of each availability slot, 5 to 1440
startstringyesStart of the window, ISO 8601
time_zonestring–Time zone for start and end

No output schema declared.

No examples provided.

calendar_list_events_in_range ~152

List calendar events between two dates, in chronological order. Use for any window that is not simply 'the next few days' — last week's meetings, a specific month, or a range the user names. Dates are ISO 8601 (2026-01-15) and the whole of both end days is included. Returns id, subject, times and organiser. Requires Calendars.Read.

NameTypeReqDescription
end_datestringyesEnd date ISO 8601 (e.g. 2024-01-22)
max_resultsinteger–Maximum events to return
start_datestringyesStart date ISO 8601 (e.g. 2024-01-15)

No output schema declared.

No examples provided.

calendar_list_upcoming_events ~117

List the signed-in user's upcoming calendar events for the next N days, soonest first. Returns id, subject, start and end times, organiser and whether it is online. This is the tool for 'what's on my calendar'. Use calendar_list_events_in_range for a specific window, and calendar_get_event for full detail including the join URL. Requires Calendars.Read.

NameTypeReqDescription
days_aheadinteger–Number of days ahead to look (1-14)
max_resultsinteger–Maximum meetings to return

No output schema declared.

No examples provided.

files_get_content ~114

Read the text content of a file in OneDrive or SharePoint, given a drive id and item id from files_search or files_list_recent. Works for text, Office documents and PDFs; binary files return a placeholder instead of bytes. Output is truncated to a caller-specified character limit. Requires Files.Read.All.

NameTypeReqDescription
drive_idstringyesThe OneDrive/SharePoint drive ID
item_idstringyesThe file item ID
max_charsinteger–Maximum characters of content to extract

No output schema declared.

No examples provided.

files_get_group_drive ~89

Get the document library backing a Microsoft 365 group or Teams team, given a group id from directory_search_groups. Returns the drive id and web URL, which is what the other file tools need to read or write inside a team's shared files. Requires Files.Read.All and Group.Read.All.

NameTypeReqDescription
group_idstringyesMicrosoft 365 group (Team) id — same as team.id

No output schema declared.

No examples provided.

files_list_recent ~91

List files the signed-in user has recently opened or edited, most recent first. Returns id, name, drive id and web URL. Use for 'the document I was working on yesterday' — files_search is better when the name or a keyword is known, and files_list_trending covers what colleagues are working on. Requires Files.Read.

NameTypeReqDescription
max_resultsinteger–Maximum recently accessed files to return

No output schema declared.

No examples provided.

files_list_shared_with_me ~86

List files other people have shared directly with the signed-in user, with the owner and web URL for each. Covers items shared via OneDrive or SharePoint that do not live in the user's own drive, which is why files_list_recent and files_search may not surface them. Requires Files.Read.All.

NameTypeReqDescription
max_resultsinteger–Maximum shared-with-me files to return

No output schema declared.

No examples provided.

files_list_trending ~84

List documents currently trending around the signed-in user — files their colleagues are actively working on, ranked by Microsoft 365 activity signals rather than by the user's own history. Use for 'what is the team working on'. files_list_recent is the tool for what this user personally touched. Requires Files.Read.All.

NameTypeReqDescription
max_resultsinteger–Maximum trending files to return

No output schema declared.

No examples provided.

files_search ~98

Search the signed-in user's OneDrive and the SharePoint sites they can reach, by filename or content keyword. Returns id, name, drive id, size, last-modified date and web URL. OneDrive and SharePoint document libraries are the same underlying resource, so one search covers both. Requires Files.Read.All.

NameTypeReqDescription
max_resultsinteger–Maximum files to return
querystringyesSearch keywords to find files and documents

No output schema declared.

No examples provided.

mail_get_thread ~95

Read every message in one email conversation, oldest first, given a conversation id from any of the mail listing tools. Returns full message bodies rather than previews, so it is the tool for understanding what was actually discussed before replying or summarising. Requires Mail.Read.

NameTypeReqDescription
conversation_idstringyesThe email conversationId to fetch all messages in the thread
max_resultsinteger–Maximum messages in the thread to return

No output schema declared.

No examples provided.

mail_list_attachments ~76

List the file attachments on one email — name, content type and size in bytes. Returns metadata only and never file contents, so it is safe to call on messages with very large attachments. Inline images such as signature logos are excluded. Requires Mail.Read.

NameTypeReqDescription
message_idstringyesThe message id to list attachments for

No output schema declared.

No examples provided.

mail_list_flagged ~93

List emails the signed-in user has flagged for follow-up, newest first. Returns id, subject, sender, date and preview. Flags are the user's own marker for 'come back to this', so use it for 'what do I still need to deal with' rather than mail_list_recent, which returns everything regardless of state. Requires Mail.Read.

NameTypeReqDescription
max_resultsinteger–Maximum flagged emails to return

No output schema declared.

No examples provided.

mail_list_recent ~98

List the signed-in user's most recent emails from the last N days, newest first. Returns id, subject, sender, date and a preview snippet. Use for 'what came in today' or catching up after time away; mail_search is the tool when specific keywords or a sender are known. Requires Mail.Read.

NameTypeReqDescription
days_backinteger–Number of days back to fetch
max_resultsinteger–Maximum emails to return

No output schema declared.

No examples provided.

mail_search ~130

Search the signed-in user's mailbox by keyword, subject or sender name. Returns id, subject, sender, date and a preview snippet, newest first. Searchable folders are inbox, sentitems, drafts, or all. Use mail_list_recent when the ask is time-based rather than keyword-based, and mail_get_thread to read a whole conversation. Requires Mail.Read.

NameTypeReqDescription
folderstring–Mail folder: inbox | sentitems | drafts | all
max_resultsinteger–Maximum emails to return (1–50)
querystringyesSearch keywords, subject, or sender name

No output schema declared.

No examples provided.

people_get ~90

Look up one person in the organisation by their exact email address and return their profile: display name, job title, department, office location and phone numbers. Use when the address is already known — people_search is the tool for finding someone by partial or approximate name. Fails if the address does not belong to a tenant account. Requires User.Read.All.

NameTypeReqDescription
emailstringyesThe person's email address

No output schema declared.

No examples provided.

people_get_my_profile ~81

Get the signed-in user's own profile — their name, email address, job title, department and office. Call this first when a request says 'me', 'my' or 'I' and the user's own identity or email address is needed to answer it, for example before filtering a calendar or addressing a message. Takes no arguments. Requires User.Read.

Input schema present but exposes no named parameters.

No output schema declared.

No examples provided.

people_list_contacts ~86

List the signed-in user's saved Outlook contacts, with names, email addresses and phone numbers. This is the user's personal address book and is the only place external contacts live — people with no account in the tenant, invisible to people_search and directory_search_users. Use it for phone numbers. Requires Contacts.Read.

NameTypeReqDescription
max_resultsinteger–Maximum contacts to return (1-100)

No output schema declared.

No examples provided.

people_search ~105

Find colleagues the signed-in user actually works with, ranked by relevance from their own mail and meeting history — so it finds the right 'Priya' without exact spelling. Returns name, email, title and department. Use directory_search_users to search the whole tenant instead, or people_list_contacts for the saved address book. Requires People.Read.

NameTypeReqDescription
max_resultsinteger–Maximum people to return
querystringyesName or keyword to search for people in the org

No output schema declared.

No examples provided.

people_search_contacts ~101

Search the signed-in user's saved Outlook contacts by name or company, returning emails and phone numbers. Searches the personal address book only — use people_search for colleagues the user works with, or directory_search_users to search the whole tenant. This is the one that finds external contacts. Requires Contacts.Read.

NameTypeReqDescription
max_resultsinteger–Maximum contacts to return (1-100)
querystringyesName or company to look for in the address book

No output schema declared.

No examples provided.

search_query ~156

Search across Microsoft 365 in one call — email, calendar events, files, SharePoint sites and lists, and people. Best first move for a vague request, since it spans workloads no other single tool covers. Supports KQL such as 'budget filetype:xlsx'. Each entity type needs its own permission. Requires Mail.Read, Calendars.Read, Files.Read.All, Sites.Read.All and People.Read.

NameTypeReqDescription
entity_typesarray–What to search: message, event, driveItem, listItem, site, person
max_resultsinteger–Maximum hits to return (1-25)
querystringyesWhat to search for. Supports KQL, e.g. 'budget filetype:xlsx'.

No output schema declared.

No examples provided.

Install

How do I install the io.github.nitin27may/ms-graph-mcp server?

io.github.nitin27may/ms-graph-mcp runs locally as a PyPI package, launched with uvx ms-graph-mcp. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

pypi · ms-graph-mcp

# add to Claude Code
claude mcp add nitin27may-ms-graph-mcp -- uvx ms-graph-mcp
Common questions

What is the io.github.nitin27may/ms-graph-mcp server?

io.github.nitin27may/ms-graph-mcp is listed in the public MCP registry as io.github.nitin27may/ms-graph-mcp. Microsoft Graph MCP server, 85 tools for mail, calendar, Teams, files, SharePoint, and Entra ID. This page covers its PyPI package (ms-graph-mcp).

Is the io.github.nitin27may/ms-graph-mcp server safe to use?

io.github.nitin27may/ms-graph-mcp scores 97 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 5 November 2026. Its build provenance is signed and verified. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

What tools does the io.github.nitin27may/ms-graph-mcp server expose?

io.github.nitin27may/ms-graph-mcp exposes 23 tools: calendar_list_upcoming_events, calendar_get_event, calendar_get_event_attendees, calendar_list_events_in_range, calendar_find_meeting_times, and 18 more. Their descriptions and schemas cost roughly 2,483 tokens of context every time the server is loaded.

Is the io.github.nitin27may/ms-graph-mcp server still maintained?

io.github.nitin27may/ms-graph-mcp is still listed as active in the MCP registry. We last reached this channel on 5 November 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

What licence is the io.github.nitin27may/ms-graph-mcp server under?

io.github.nitin27may/ms-graph-mcp declares the MIT licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.