MCP server for Microsoft 365 — Outlook, Calendar, OneDrive, SharePoint & Teams via Graph API
This is a comprehensive Office 365 integration with 33 well-defined tools. Strengths: all tools have explicit descriptions in Portuguese; Zod schemas are present for every tool with proper type definitions; tool naming follows verb_noun conventions consistently (list-, create-, send-, etc.); parameters are mostly well-described. Weaknesses: descriptions are inconsistent in length and detail across the suite; output schemas are not documented (responses formatted via separate formatters, but return structure is not declared to the LLM); error handling is generic (safeTool wrapper suppresses detail); no pagination or limit enforcement documented in tool descriptions for large result sets (list-emails, list-events accept 'top' but no guidance on max); parameter descriptions often lack format/constraint detail (e.g., 'ISO 8601' mentioned but no validation guidance); no actionable error messages visible in error paths. Naming is strong (configure, login, list-events, create-event, send-email, read-file-content are all clear), but some tools blur boundaries (read-file-content and read-shared-file-content are very similar; upload-file lacks a download-file counterpart). STDIO transport caps protocol readiness at 50, so overall score reflects definition quality only. Average per-tool score: 61.
Verifica o status da autenticação e mostra informações do usuário logado.
Configura as credenciais do Azure (Client ID e Tenant ID) para autenticação com Microsoft 365. Salva em arquivo persistente no storage configurado.
Cria um novo evento/reunião no calendário.
Remove um evento do calendário.
Verifica disponibilidade de horários para reunião com participantes.
Mostra detalhes de um site SharePoint específico.
Output schemas not documented. Descriptions specify what parameters are accepted, but do not state what the tools return. Responses are formatted via separate formatters (e.g., formatEventList, formatCreatedEvent), but the LLM has no visibility into the structure it will receive. This breaks the pattern:tool requirement that 'LLMs need to know what fields to expect so they can plan downstream tool calls and extract the right data.'
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | C | 61 | 2026-07-28+ | v2 |
| 2026-03-09 | F | 47 | - | v1 |
Lista mensagens recentes de um canal do Teams.
Lista canais de um time do Teams.
Lista conversas/chats diretos do Teams.
Lista bibliotecas de documentos de um site SharePoint.
Lista arquivos e pastas do OneDrive. Por padrão lista a raiz.
Lista emails do Outlook. Por padrão retorna os 10 emails mais recentes da Inbox.
Lista eventos do calendário em um intervalo de datas.
Lista itens de uma biblioteca de documentos do SharePoint.
Lista as pastas de email (Inbox, Sent Items, etc.).
Lista sites do SharePoint. Opcionalmente filtra por nome.
Lista os times do Microsoft Teams que o usuário participa.
Inicia autenticação com Microsoft 365 via Device Code Flow. Retorna um código e URL para o usuário autenticar no navegador.
Faz logout e remove tokens salvos.
Lê o conteúdo completo de um email pelo ID.
Lê o conteúdo de um arquivo do OneDrive. Suporta PDF (extração de texto com paginação), DOCX e arquivos de texto.
Lê o conteúdo de um arquivo de um drive compartilhado (SharePoint ou OneDrive de outro usuário). Suporta PDF, DOCX e texto.
Responde a um email existente.
Resolve uma URL de compartilhamento do SharePoint/OneDrive e retorna driveId + itemId para uso em read-shared-file-content.
Busca emails por texto (KQL). Pesquisa no assunto, corpo e remetente. Agrupa por thread (conversationId) e retorna a mensagem mais recente de cada.
Busca arquivos no OneDrive por texto.
Busca conteúdo no SharePoint (documentos, listas, sites). Para arquivos (driveItem), retorna driveId e itemId que podem ser usados com read-shared-file-content.
Envia uma mensagem em um canal do Teams.
Envia uma mensagem em um chat direto do Teams.
Envia um novo email.
Cria um link de compartilhamento para um arquivo do OneDrive.
Atualiza um evento existente no calendário.
Faz upload de um arquivo para o OneDrive (até 4MB de conteúdo texto).
Error handling is generic. The safeTool wrapper catches errors but does not provide actionable recovery guidance or error classification (retryable, user-fixable, fatal). When an API call fails, the LLM receives no guidance on what to do next. E.g., 'User not found. Try search_users() first.' is absent; instead, the agent only gets a generic exception.
Parameter descriptions lack explicit format and constraint guidance. E.g., 'startDateTime' says 'ISO 8601 (ex: 2025-01-20T00:00:00)' but does not warn against invalid formats. The 'timeZone' parameter says 'America/Sao_Paulo' is default but lists no valid values, leaving LLMs to guess (IANA, Windows, custom?). Constraint descriptions must state format, range, and valid options directly (not as examples).
No pagination/result limit enforcement documented. Tools like list-emails, list-events accept a 'top' parameter but the tool descriptions do not state the maximum allowed value or recommend limits. E.g., 'top: max 50' or 'By default returns 20; max 100 to avoid context bloat.' This risks LLMs requesting unlimited results and exhausting context.
read-file-content and read-shared-file-content have overlapping responsibilities and similar names. The LLM may confuse them. Consider a single unified tool (e.g., read-file with optional driveId parameter) to avoid ambiguous selection.
Missing complementary tools. There is upload-file but no delete-file. There is create-event and update-event but no batch variants. Agents that need to perform bulk operations must loop, wasting tokens and latency. Consider batch_create_events, batch_send_emails, etc.
Descriptions in Portuguese. While the descriptions are clear and well-structured, they are in Portuguese rather than English. LLM tokenization and training are heavily weighted toward English. Non-English descriptions may reduce the LLM's ability to understand tool purpose and parameters, leading to lower selection accuracy.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) visible in the provided code. These annotations would help the LLM understand operation safety without extra reasoning. E.g., delete-event should carry destructiveHint: true; list-events should carry readOnlyHint: true.