m365-reporting-mcp
Microsoft 365 Reporting MCP — v1.0
Servidor MCP empresarial a través del cual ChatGPT, Claude y otros clientes de IA comapatibles con MCP acceden de forma controlada a las fuentes de información de Microsoft 365 (Outlook, Calendario, Teams, transcriciones de reuniones, OneNote, ShareP relativ, OneDrive, Loop, Búsqueda, Usuarios).
Princípio: read broadly, write barely. Una amplica capa de READ dentro de los permisos reales de M365 del usuarios autenticado; la única capacida WRITE es el envío de correos de Outlook (draft / send / reply / forward), y cada envío real pasa por un gate confirm=true indepent.
Arquitectura
ChatGPT / Claude / MCP kliens
│ MCP over HTTPS (Streamable HTTP) + OAuth bearer token
▼
┌──────────────────────────────┐
│ m365-reporting-mcp │ Tool allowlist (86 tool, 11 WRITE = csak mail)
│ · JWT validálás (Entra) │ Nincs generikus graph-request / $batch passthrough
│ · On-Behalf-Of tokencsere │ Audit log (JSONL, tartalom nélkül)
│ · Pagination + 429 retry │ Forráskövetés (_source blokk minden objektumon)
│ · Admin dashboard (/admin) │
└──────────────┬───────────────┘
│ OAuth 2.0 OBO → delegated Graph token
▼
Microsoft Entra ID → Microsoft Graph API (v1.0)El servidor nunca utilt permisos app-only: de each Graph un llamada se golf — cada llamada a Graph se ejecuta en no ess of the enticado del usuario (delegated), por lo que el en MCP no puede eludir las reglas de eficientes de de access del M365 exist.
Related MCP server: Microsoft Graph MCP Server
Entra ID app-registr
Create una App registration (single tenth).
Expose an API: Application ID URI =
api://<CLIENT_ID>, scope:access_as_userito. ConwentistaccessTokenApprovedto 2 (manifiest).API permissions (Microsoft Graph, Delegated) — la lista completa está en el anexo docs/tool-matrix.md; in summary:
READ:
leates,el mása.Leat,Calendarace,chat.ReadChat.Read,Team.ReadBasic..All,.Selection.ReadBasic.All,.ChannelMessage.Read.Allº,Team.Read,Omega,Online,channel,.Read,DevelopmentOverflow.Read.All,OnlineMeetingFermissions.All,Online,.All,Omega,.Read,Files.Read,Files... All,People.Read,Online,el.Read,Notes.Read,User.Read,Notes.Read,User.Read,user,user Rec.WRITE (solo correo):
Mail.Read.,mail.Send,.ReadWrite.SharedMail,Mail. - "Let me re-read the source: WRITE (csak mail):Mail.Read,Mail.Read,mail.SendReadWrite,Mail.Send.Shared— preserve exactly the list.Se requiere administrpermission consent for el scope
.All.
Para el modo HTTP: after certificates —
client. Heás — "Client Market". In the source: "Certificates & secrets → client secret".Para el modo stdio/dev: Authentication → «Allow public client flows» = Yes (device code).
Nota para el punto 11 de la especificación:
Sites.Selectedexiste como permiso application; en el model (modelo delegado) (usuario) la restricción a el the site of the given user's own SharePoint jobs — el PC usaSites.Read.Alldelegado, que por sí solo no da acceso a site to which the user otherwise can't access.
Instalación y ejecución
npm install
cp .env.example .env # töltsd ki: TENANT_ID, CLIENT_ID, CLIENT_SECRET, BASE_URL, ADMIN_KEY
npm run build
# Webapp (remote MCP) mód:
npm run start:http
# Lokális/dev (stdio, device code login):
npm run login # egyszeri bejelentkezés, token cache-elve
npm startEndpoints HTTP en modo:
URL | Descripción |
| Endpoint del MCP (Streamable HTTP stateless), bearer token obligatorio |
| Metadatos del recurso protegido del OAuth del MCP → para el propietdel inverso integrado |
| Metadatos del servidor de autorización OAuth (del inverso) |
| Inversit proxy de autenticación integrado ante de Entra ID |
| Panel de administración: Configuración / Caja / Herramientas / Registro (X-Admin-Key) |
| Health check |
En modo HTTP el servidor se puede arrancher a sin datos de Entra: la primera confentación puede completarse en la interfaz /admin (Tenant ID, CLient Secret, Base URL, perueba de conexión)— "el guardado" se aplica al instante, la configuración se almacún en "data and mentions and .env."
Conectar ChatGPT (y otros Cláusulas MCP)
El servidor includes un proxy OAuth integrado ante de Entra ID, because el connector dept Espera dynamic client registration según RFC 7591, que Entra no admite. El proxy ofrece al cliente la interfaz completa dela OAuth (2.1 (DCR + PKCE) y frente a Entra util the única aplicación empresarial registrada: el token de acceso entregado al cliente es ex-se el token de acceso emitido por Entra para api, por eso el validario of /mcp y el intercambio GBOO con Graph no varían: to each of — "due quien".
ChatGPT:
In el apartado Authentication* de la App Entra, añade como URI de redirección web:
https://<BASE_URL>/auth/callback(el valor exacto se muestra en la pestañ de Configuración de la "").ChatGPT → Settings → Connectors → nuevo connector MCP, URL:
https://<BASE_URL>/mcp.El usus "inicio de sesión" que apareces es el de Entra ID — el usuario accede con su la cuenta y obtien exclusivamente sus prop pack of M365 permissions.
Claude Desktop / Claude Code: same URL as remote MCP, or "standard" — in "modo": `el madd 365" — "con.
Capa de segurança (specs 19–27)
No existe unagra herramienta genérica
graph_request,(action)ni un para "batch pass=through: solo están disponibles los 86 endpoints de la listra de allow.No existe operación de ecritura en Calendar/Teams/Files/Sites/OneNote/User/Group y names in delete elim exists in any place.
Crear en borrador no es lo= to — "crear el envío de la permission — send/perfeit/reply/forward "send remplazo" ...
confirm=true, y el descript de la herramienta ins the AI to ask a "user" an approval —.Con la variable de entorno
READ_ONLY=truepuede desatorse todas la herramientas de "alse "conENABLED_TOOLETSpueden filtra perfil de a nivel (el (eje.conj,calendar, calendar =el modifications`).
Audit (spec 21)
Cada llamada se registra in format JSONL (logs/audit-...), — "logs/audit-YYYY-MM-DD.jsonl): timestamp, user, session, tool, option READ / WRITE), esourceType, graphEndpoint, httpMethod, succes, durat; in WRITE #safe, además delector: sender, recipients, cc, subject, messageId, result. The content (body, transcript, document, token) never ll entry "the log".
Tolerancia a fFallas (spec) 22–23)
HTTP 429/503/504: reintentos auto- (con "ius"); "Reint"-after, respetando (max 4 intentos); *...
paginación con
@odata.nextLinken todas las herramientas de lista (todos los parámetrosmaxItems, "trunción indicada");tokenaparecido / permiso / embedido / recurso in exist: mensje de error comprehensible y/o "from" accionable para the "AI";
descending "de arch" the size with limited (
MAX_DOWNLOAD_BYITES) — "DOCX/XLSX/PPTX/PDF/TXT/CSV → text, extracción, xlsx "into" en "bi64"
"Tool" (Matrix) — "métrix de herramienta (develop) anex
The complete matrix MCP tool → Graph endpoint → HTTP method → delegated permission → READ/WRITE → enabled as a generated document: docsit-matrix.md (npm run matrix actualiza a partir de las definiciones de . — hmm the end "**.ph" — src/tools/endpoints/.ts`*
Limits of the "Loop-adapter" (spec 13)
No hay "loop: dedicated, publicly available API worksp": for the Graph Loop, and they don't use ficticios endopoints: the .loop/.fluid componentes are pool through the API of "úsqueda" and in the "unidades" of "SharePoin"/OneDrive. The Loop-worksp: the contained in the contenedor of SharePoin Embed / edded loop workspace and the us "Graph" delegado — the "no" — "not always" accesse — this "la descrición de la herramienta" lo "indic" to the AI, so the "us" the user "lim" situation.
Acssept test (spec: 26)
cel — "Prueba de aceptación" * (the "nos "in" "Specification 26" . From clients conectado: "en lenguaje natural: „Visúa" mis "de" los "últos" 30 "días" el correo, calendario, mis "besac" Teams and "mis" transcribe "reuniones" … "Realiza" un resumen "proyecto" del — "escribe"... correo" a with detail — and envíalo después de una "aprobación" aparte." — the chainas: the "herramient" esperada:
get-calendar→find-online-meeting→list-meeting-transcripts→get-meeting-transcript-content+list-mail-messages+list-chat+search-onenote-pages+ "m365search-m365→create-draft-email→ (apro-"aprobación) del "usuab" →send-draft-email(confirm=true).
" — a "confirm=true" — hmm. I'll — "with the token exact as in th".
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceA production-ready MCP server that provides secure, delegated access to Microsoft 365 services including Email, SharePoint, OneDrive, and Calendar. It enables AI models to search messages, browse files, manage calendar events, and parse document contents using OAuth 2.1 authentication.MIT
- AlicenseNot gradedqualityFmaintenanceEnables AI assistants to interact with Microsoft 365 services (users, mail, calendar, files) via Microsoft Graph API.371MIT

graphdo-tsofficial
AlicenseAqualityCmaintenanceEnables AI agents to send emails and manage tasks in Microsoft To Do with scoped, low-risk access to Microsoft Graph.3151MIT- AlicenseAqualityAmaintenanceEnables AI agents to read and manage Microsoft 365/Outlook email and calendar, with destructive actions (send email, create event) requiring human approval.8MIT
Related MCP Connectors
Your memory, everywhere AI goes. Build knowledge once, access it via MCP anywhere.
Official Microsoft MCP Server to query Microsoft Entra data using natural language
Remote MCP for MCP consent scope receipt, structured receipts, audit logs, and reviewer-ready eviden
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/kharonx/mcp_gateway'
If you have feedback or need assistance with the MCP directory API, please join our Discord server