io.github.nitin27may/ms-graph-mcp
PYPI · MS-GRAPH-MCP · SCANNED SEP 20
Microsoft Graph MCP server — 85 tools for mail, calendar, Teams, files, SharePoint, and Entra ID
Available components
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 Security50
- Malware scan not yet available for this package.Unverified
- No known CVEs affecting this package version or its production dependencies.Pass
- Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it. View diagnostics → Pass
- 1 of 42 dependencies flagged as unhealthy. View diagnostics → Partial
Provenance & Transparency35
- Source repository is publicly reachable at the declared URL. View diagnostics → Pass
- Provenance check failed: no build-provenance attestation is published. See how to fix → View diagnostics → Fail
- License check failed: no license is declared. See how to fix → Fail
- Actively maintained (last published 30 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 Management80
- Stability observed for 24 of 30 days with no destabilising changes; credit accrues until the full window elapses.Partial
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
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
claude mcp add nitin27may-ms-graph-mcp -- uvx ms-graph-mcp
{
"mcpServers": {
"nitin27may-ms-graph-mcp": {
"command": "uvx",
"args": [
"ms-graph-mcp"
]
}
}
} {
"servers": {
"nitin27may-ms-graph-mcp": {
"command": "uvx",
"args": [
"ms-graph-mcp"
]
}
}
} codex mcp add nitin27may-ms-graph-mcp -- uvx ms-graph-mcp
{
"$schema": "https://opencode.ai/config.json",
"mcp": {
"nitin27may-ms-graph-mcp": {
"type": "local",
"command": [
"uvx",
"ms-graph-mcp"
],
"enabled": true
}
}
} openclaw mcp add nitin27may-ms-graph-mcp --command uvx --arg ms-graph-mcp
mcp_servers:
nitin27may-ms-graph-mcp:
command: "uvx"
args: ["ms-graph-mcp"] {
"McpServers": {
"nitin27may-ms-graph-mcp": {
"Transport": "stdio",
"Command": "uvx",
"Arguments": [
"ms-graph-mcp"
]
}
}
} assistant mcp add nitin27may-ms-graph-mcp -t stdio -c uvx -a ms-graph-mcp
{
"mcpServers": {
"nitin27may-ms-graph-mcp": {
"command": "uvx",
"args": [
"ms-graph-mcp"
]
}
}
} 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.
- 20 Sept 26 −3
- Stability: pass → 0.80 functional
- 19 Sept 26 +1
- Stability: 0.97 → pass security
- 17 Sept 26 −14
- Malware scan: pass → unverified ▼ security
- 16 Sept 26 +15
- Malware scan: unverified → pass ▲ security
- 15 Sept 26 +1
No change was recorded against any check on this day. Stability & Change Management went from 83 to 87. That category is still filling its 30-day observation window: 25 days of observed history at the previous scan, 26 at this one. The score rises as the window fills, whether or not the server changes.
- 14 Sept 26 −15
- Malware scan: pass → unverified ▼ security
- 12 Sept 26 +16
- Malware scan: unverified → pass ▲ security
- 11 Sept 26 −15
- Malware scan: pass → unverified ▼ security
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 20 Sept 2026 · Analysed pypi/ms-graph-mcp@0.3.0
Provenance No attestation
The registry publishes no build provenance for this version, so there is nothing to verify.
| Result | No attestation |
|---|---|
| Ecosystem | pypi |
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 42 packages
| Packages resolved | 42 |
|---|---|
| No linked repository | 1 |
| Tree resolution | Complete |
Background: SBOMs and build attestations, explained →
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 →
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.
| Name | Type | Req | Description |
|---|---|---|---|
| attendees | array | – | Who must attend. Empty looks at the signed-in user's calendar only. |
| duration_minutes | integer | – | Meeting length in minutes |
| max_suggestions | integer | – | How many candidate slots to return |
| minimum_attendee_percentage | integer | – | Only suggest slots where at least this percentage of attendees are free (0-100) |
| time_zone | string | – | Time zone for the window |
| window_end | string | – | Latest acceptable end, ISO 8601 |
| window_start | string | – | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| meeting_id | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| meeting_id | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| emails | array | yes | Email addresses to check availability for |
| end | string | yes | End of the window, ISO 8601 |
| interval_minutes | integer | – | Granularity of each availability slot, 5 to 1440 |
| start | string | yes | Start of the window, ISO 8601 |
| time_zone | string | – | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| end_date | string | yes | End date ISO 8601 (e.g. 2024-01-22) |
| max_results | integer | – | Maximum events to return |
| start_date | string | yes | Start 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.
| Name | Type | Req | Description |
|---|---|---|---|
| days_ahead | integer | – | Number of days ahead to look (1-14) |
| max_results | integer | – | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| drive_id | string | yes | The OneDrive/SharePoint drive ID |
| item_id | string | yes | The file item ID |
| max_chars | integer | – | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| group_id | string | yes | Microsoft 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.
| Name | Type | Req | Description |
|---|---|---|---|
| max_results | integer | – | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| max_results | integer | – | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| max_results | integer | – | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| max_results | integer | – | Maximum files to return |
| query | string | yes | Search 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.
| Name | Type | Req | Description |
|---|---|---|---|
| conversation_id | string | yes | The email conversationId to fetch all messages in the thread |
| max_results | integer | – | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| message_id | string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| max_results | integer | – | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| days_back | integer | – | Number of days back to fetch |
| max_results | integer | – | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| folder | string | – | Mail folder: inbox | sentitems | drafts | all |
| max_results | integer | – | Maximum emails to return (1–50) |
| query | string | yes | Search 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.
| Name | Type | Req | Description |
|---|---|---|---|
| string | yes | The 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.
| Name | Type | Req | Description |
|---|---|---|---|
| max_results | integer | – | 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.
| Name | Type | Req | Description |
|---|---|---|---|
| max_results | integer | – | Maximum people to return |
| query | string | yes | Name 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.
| Name | Type | Req | Description |
|---|---|---|---|
| max_results | integer | – | Maximum contacts to return (1-100) |
| query | string | yes | Name 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.
| Name | Type | Req | Description |
|---|---|---|---|
| entity_types | array | – | What to search: message, event, driveItem, listItem, site, person |
| max_results | integer | – | Maximum hits to return (1-25) |
| query | string | yes | What to search for. Supports KQL, e.g. 'budget filetype:xlsx'. |
No output schema declared.
No examples provided.
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 66 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 20 September 2026. 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 20 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.