About MCP-MSGraph
MCP-MSGraph is a prototype MCP server that reads user profiles from Microsoft Graph. It demonstrates connecting MCP to Microsoft Graph data and is intended as a proof of concept.
Key features
- 01Read user profiles from Microsoft Graph
- 02Accept profile requests through an HTTP endpoint
- 03Authenticate with Azure AD application credentials
Use cases
- 01Retrieve a user profile by user ID
- 02Prototype an MCP connection to Microsoft Graph
MCP support
It acts as an MCP server that exposes Microsoft Graph user-profile reading through a request endpoint.
Configuration
Local server config is the same for every client. Copy it into your client’s MCP config file.
We haven’t collected a package or remote endpoint for this server. Follow the instructions in the project README.
Tools
Local servers expose tools only once running on your machine, and the maintainer has not provided a tool list.
Details
From the project READMEMCP-MSGraph
A prototype MCP (Model Context Protocol) server that reads a user profile from Microsoft Graph.
This project demonstrates how to connect MCP to data stored in Microsoft Graph as a proof of concept.
Create an Azure AD Application
- Log into Azure Portal.
- Navigate to Azure Active Directory > App registrations > New registration.
- Create a new application.
- Note the generated Application (client) ID and Client Secret.
- Under API permissions, add User.Read.All (as delegated or application permission as appropriate) and grant admin consent.
Instructions to run the server:
-
Clone the repository or setup your own folder and files structure.
-
Create a virtual environment:
python3 -m venv venv
source venv/bin/activate
- Install the required packages:
pip install fastapi uvicorn requests requests-oauthlib pydantic
-
Open 'main.py' and replace the placeholder values with your App ID, Tenant ID, and Client Secret.
-
Start the server
uvicorn main:app --reload
Your server will be available at http://127.0.0.1:8000.
Example Request
Use curl (or any REST client) to send a request to retrieve a user’s profile:
curl -X POST http://localhost:8000/mcp \
-H "Content-Type: application/json" \
-d '{
"action":"readUserProfile",
"contextId":"abc123",
"data": {"userId":"[email protected]"}
}'
Result should look something like:
{"status":"success","action":"readUserProfile","contextId":"abc123","data":{"@odata.context":"https://graph.microsoft.com/beta/$metadata#users('adelev%40M365x17584779.onmicrosoft.com')/profile/$entity","id":"profileId","[email protected]":"https://graph.microsoft.com/beta/$metadata#users('adelev%40M365x17584779.onmicrosoft.com')/profile/account","account":[{"ageGroup":"","countryCode":"","userPrincipalName":"[email protected]","allowedAudiences":"organization","createdDateTime":"2025-01-30T11:06:01.7661211Z","lastModifiedDateTime":"2025-01-30T11:06:01.9431431Z","id":"c74cb3af-2f62-43fa-9709-5d2cfc4b4042","isSearchable":false,"inference":null,"preferredLanguageTag":{"locale":null,"displayName":null},"createdBy":{"user":null,"device":null,"application":{"displayName":"AAD","id":null}},"lastModifiedBy":{"user":null,"device":null,"application":{"displayName":"MsGraph","id":null}},"source":{"type":["AAD","MsGraph"]},"sources":[{"sourceId":"4ce763dd-9214-4eff-af7c-da491cc3782d","isDefaultSource":true},{"sourceId":"0024a795-114d-4031-95c7-5fb543e00e80","properties":["isSipEnabled"]}]},{"ageGroup":"","countryCode":"","userPrincipalName":"","allowedAudiences":"federatedOrganizations","createdDateTime":"2025-01-30T11:06:01.7661213Z","lastModifiedDateTime":"2025-01-30T11:06:01.9431431Z","id":"750f8cc2-2f72-4b38-88c6-531dfc5ed47f","isSearchable":false,"inference":null,"preferredLanguageTag":{"locale":null,"displayName":null},"createdBy":{"user":null,"device":null,"application":{"displayName":"AAD","id":null}},"lastModifiedBy":{"user":null,"device":null,"application":{"displayName":"MsGraph","id":null}},"source":{"type":["AAD","MsGraph"]},"sources":[{"sourceId":"4ce763dd-9214-4eff-af7c-da491cc3782d","isDefaultSource":true},{"sourceId":"0024a795-114d-4031-95c7-5fb543e00e80","properties":["isSipEnabled"]}]}]}}%
Comments
New to MCP?
From what the protocol is to installing your first server, these answers cover most first questions.
An open protocol that defines how AI applications connect to external tools and data in a uniform way. Clients talk to the model; MCP servers provide tools, resources and prompt templates. They exchange standard messages, so one server can be reused by many clients.