MCP Microsoft Office Bridge

Um servidor seguro e multiusuário que conecta LLMs aos serviços do Microsoft 365.

Documentação

MseeP.ai Security Assessment Badge

MCP Microsoft Office

Um servidor MCP. Vários usuários. Tráfego real do Microsoft 365 no seu tenant de teste.


O Problema

Tenants de teste ficam vazios. Dados de teste estáticos não exercitam fluxos de trabalho reais. Quando você precisa de agentes que enviem e-mails reais, agendem reuniões reais e colaborem em canais reais do Teams, mocks e stubs não são suficientes.

O Que Isto Resolve

Este projeto conecta qualquer cliente de IA compatível com MCP ao Microsoft 365 por meio da Graph API. Cada agente se autentica como um usuário distinto do tenant e realiza operações reais sobre dados reais.

  • 117 ferramentas em 12 módulos: Mail, Calendar, Files, Excel, Word, PowerPoint, Teams, Contacts, To-Do, Groups, People, Search
  • Multiusuário: um único servidor atende toda a sua equipe, cada um com dados isolados
  • Chamadas reais à Graph API: cada operação acessa o tenant real, não um mock
  • Seguro: tokens criptografados em repouso, sem credenciais armazenadas em servidores de terceiros

Arquitetura

                    ┌──────────────────┐
                    │  MCP Client      │
                    │  (Claude, etc.)  │
                    └────────┬─────────┘
                             │ JSON-RPC (stdin/stdout)
                    ┌────────▼─────────┐
                    │  MCP Adapter     │
                    │  (runs locally)  │
                    └────────┬─────────┘
                             │ HTTP + Bearer Token
                    ┌────────▼─────────┐
                    │  MCP Server      │
                    │  (local or       │
                    │   remote)        │
                    └────────┬─────────┘
                             │ Microsoft Graph API
                    ┌────────▼─────────┐
                    │  Microsoft 365   │
                    │  (your tenant)   │
                    └──────────────────┘

Três partes:

  1. Cliente MCP -- a IA com a qual você interage
  2. Adaptador MCP -- um processo Node.js que traduz o protocolo MCP em requisições HTTP (executa na mesma máquina que o cliente)
  3. Servidor MCP -- gerencia a autenticação e chama a API do Microsoft Graph (executa localmente ou em um servidor remoto)

Permissões

O servidor exige 18 permissões delegadas do Microsoft Graph. Doze funcionam sem consentimento de administrador. Seis exigem que um administrador do tenant conceda consentimento.

Sem Consentimento de Administrador

PermissãoFerramentas Liberadas
User.ReadAutenticação, perfil do usuário
Mail.ReadWritereadMail, readMailDetails, markEmailRead, flagMail, getMailAttachments, addMailAttachment, removeMailAttachment
Mail.SendsendMail, replyToMail
Calendars.ReadWritegetEvents, createEvent, updateEvent, cancelEvent, acceptEvent, tentativelyAcceptEvent, declineEvent, getAvailability, findMeetingTimes, getRooms, getCalendars, addAttachment, removeAttachment
Files.ReadWrite.AlllistFiles, uploadFile, downloadFile, getFileMetadata, getFileContent, setFileContent, updateFileContent, createSharingLink, getSharingLinks, removeSharingPermission, listChannelFiles, uploadFileToChannel, readChannelFile, todas as ferramentas de pastas de trabalho do Excel, todas as ferramentas de Word/PowerPoint
Contacts.ReadWritelistContacts, getContact, createContact, updateContact, deleteContact, searchContacts
Tasks.ReadWritelistTaskLists, getTaskList, createTaskList, updateTaskList, deleteTaskList, listTasks, getTask, createTask, updateTask, deleteTask, completeTask
Chat.ReadWritelistChats, createChat, getChatMessages, sendChatMessage
Channel.ReadBasic.AlllistTeamChannels, getChannelMessages
ChannelMessage.SendsendChannelMessage, replyToMessage
Channel.CreatecreateTeamChannel
OnlineMeetings.ReadWritecreateOnlineMeeting, getOnlineMeeting, listOnlineMeetings, getMeetingByJoinUrl

Exige Consentimento do Administrador

PermissãoFerramentas Adicionais Liberadas
User.Read.AllResolver IDs de usuários em Teams, pesquisa de People
People.Read.AllfindPeople, getRelevantPeople, getPersonById
Group.Read.AlllistGroups, getGroup, listGroupMembers, listMyGroups
ChannelMember.ReadWrite.AlladdChannelMember
ChannelMessage.Read.AllLer histórico de mensagens do canal
OnlineMeetingTranscript.Read.AllgetMeetingTranscripts, getMeetingTranscriptContent

Sem consentimento do administrador, você obtém Mail, Calendar, Files, pastas de trabalho do Excel, documentos do Word, apresentações do PowerPoint, Contacts, To-Do, Chat e operações básicas de canais do Teams. Com consentimento do administrador, você adiciona pesquisa de diretório de pessoas, Groups, gerenciamento de membros de canais e transcrições de reuniões.


Início Rápido

Pré-requisitos

  • Node.js 18+ (download)
  • Claude Desktop (download) ou outro cliente MCP
  • Conta Microsoft 365 (corporativa, escolar ou pessoal)

Etapa 1: Registro do Aplicativo no Azure

  1. Acesse Azure Portal > Microsoft Entra ID > App registrations > New registration
  2. Dê o nome de MCP-Microsoft-Office, registre com o tipo de conta de sua preferência
  3. Copie o Application (client) ID e o Directory (tenant) ID
  4. Acesse API permissions > Add a permission > Microsoft Graph > Delegated permissions
  5. Adicione as 18 permissões listadas acima
  6. Se você for administrador do tenant, clique em Grant admin consent
  7. Acesse Authentication > Add a platform > Web
    • Redirect URI: http://localhost:3000/api/auth/callback
    • Habilite Allow public client flows

Etapa 2: Clonar e Configurar

git clone https://github.com/Aanerud/MCP-Microsoft-Office.git
cd MCP-Microsoft-Office
npm install

Copie .env.example para .env e preencha com os dados do seu aplicativo Azure:

MICROSOFT_CLIENT_ID=your-client-id
MICROSOFT_TENANT_ID=your-tenant-id

Etapa 3: Iniciar o Servidor e Autenticar

npm run dev:web

Abra http://localhost:3000 no seu navegador. Clique em Login with Microsoft, entre e conceda as permissões. Em seguida, clique em Generate MCP Token e copie o token.

Etapa 4: Configurar o Claude Desktop

Edite a configuração do Claude Desktop:

macOS: ~/Library/Application Support/Claude/claude_desktop_config.json Windows: %APPDATA%\Claude\claude_desktop_config.json

O Claude Desktop tem um limite prático de ~55 ferramentas por servidor MCP. Este projeto expõe 117 ferramentas, então as dividimos em três servidores que compartilham o mesmo adaptador e backend:

{
  "mcpServers": {
    "microsoft-365": {
      "command": "node",
      "args": ["/path/to/MCP-Microsoft-Office/mcp-adapter.cjs"],
      "env": {
        "MCP_SERVER_URL": "http://localhost:3000",
        "MCP_BEARER_TOKEN": "paste-your-token-here",
        "MCP_MODULES": "search,mail,calendar,files,people,contacts,groups,query"
      }
    },
    "microsoft-365-teams": {
      "command": "node",
      "args": ["/path/to/MCP-Microsoft-Office/mcp-adapter.cjs"],
      "env": {
        "MCP_SERVER_URL": "http://localhost:3000",
        "MCP_BEARER_TOKEN": "paste-your-token-here",
        "MCP_MODULES": "teams,todo"
      }
    },
    "microsoft-365-office": {
      "command": "node",
      "args": ["/path/to/MCP-Microsoft-Office/mcp-adapter.cjs"],
      "env": {
        "MCP_SERVER_URL": "http://localhost:3000",
        "MCP_BEARER_TOKEN": "paste-your-token-here",
        "MCP_MODULES": "excel,word,powerpoint,files"
      }
    }
  }
}

MCP_MODULES filtra quais módulos o adaptador expõe. Omita-o para expor todas as 117 ferramentas (funciona com clientes que não têm limite de ferramentas).

Defina MCP_DEBUG=1 no bloco env para habilitar o registro de diagnóstico em stderr — útil para solucionar problemas de despacho de ferramentas.

Reinicie o Claude Desktop. Pergunte: "O que tem na minha agenda hoje?" ou "Crie uma pasta de trabalho do Excel com uma tabela de orçamento."


Ferramentas (117)

Mail (9)

FerramentaDescrição
readMailLer mensagens da caixa de entrada
sendMailEnviar um e-mail
replyToMailResponder a um e-mail
readMailDetailsObter o conteúdo completo do e-mail
markEmailReadMarcar e-mail como lido/não lido
flagMailSinalizar ou remover sinalização de um e-mail
getMailAttachmentsListar anexos do e-mail
addMailAttachmentAdicionar anexo ao e-mail
removeMailAttachmentRemover anexo do e-mail

Calendar (13)

FerramentaDescrição
getEventsObter eventos do calendário
createEventCriar uma reunião ou evento
updateEventModificar um evento existente
cancelEventCancelar um evento
acceptEventAceitar um convite de reunião
tentativelyAcceptEventAceitar provisoriamente
declineEventRecusar um convite de reunião
getAvailabilityVerificar horários livres/ocupados
findMeetingTimesEncontrar os melhores horários para reuniões
getRoomsEncontrar salas de reunião
getCalendarsListar todos os calendários
addAttachmentAdicionar anexo ao evento
removeAttachmentRemover anexo do evento

Files (10)

FerramentaDescrição
listFilesListar arquivos do OneDrive
uploadFileEnviar um arquivo
downloadFileBaixar um arquivo
getFileMetadataObter informações do arquivo
getFileContentLer o conteúdo do arquivo
setFileContentGravar o conteúdo do arquivo
updateFileContentAtualizar arquivo existente
createSharingLinkCriar um link de compartilhamento
getSharingLinksListar links de compartilhamento
removeSharingPermissionRemover acesso de compartilhamento

Excel (30)

Trabalhe diretamente com pastas de trabalho do Excel armazenadas no OneDrive ou SharePoint — sem necessidade de baixar o arquivo. Todas as operações passam pela API de pastas de trabalho do Microsoft Graph com gerenciamento transparente de sessões.

FerramentaDescrição
createWorkbookSessionAbrir uma sessão de pasta de trabalho (persistente ou temporária)
closeWorkbookSessionFechar uma sessão ativa de pasta de trabalho
listWorksheetsListar todas as planilhas de uma pasta de trabalho
addWorksheetAdicionar uma nova planilha
getWorksheetObter uma planilha por nome ou ID
updateWorksheetRenomear, reposicionar ou ocultar uma planilha
deleteWorksheetExcluir uma planilha
getRangeLer valores de célula, fórmulas e formatação
updateRangeGravar valores em um intervalo de células
getRangeFormatObter formatação (fonte, preenchimento, bordas)
updateRangeFormatDefinir formatação (negrito, cores, formatos numéricos)
sortRangeClassificar células em um intervalo
mergeRangeMesclar células
unmergeRangeDesfazer mesclagem de células
listTablesListar todas as tabelas de uma planilha
createTableCriar uma tabela a partir de um intervalo
updateTableRenomear ou reestilizar uma tabela
deleteTableExcluir uma tabela
listTableRowsListar todas as linhas de uma tabela
addTableRowAdicionar uma linha a uma tabela
deleteTableRowExcluir uma linha por índice
listTableColumnsListar todas as colunas de uma tabela
addTableColumnAdicionar uma coluna a uma tabela
deleteTableColumnExcluir uma coluna
sortTableClassificar uma tabela por coluna
filterTableAplicar um filtro a uma coluna da tabela
clearTableFilterLimpar um filtro de coluna
convertTableToRangeConverter uma tabela de volta em um intervalo comum
callWorkbookFunctionChamar qualquer uma das 300+ funções do Excel (SUM, VLOOKUP, PMT, etc.)
calculateWorkbookRecalcular todas as fórmulas

Word (5)

Crie, leia e converta documentos do Word. Os documentos são criados a partir de JSON estruturado e armazenados no OneDrive. A leitura usa uma cadeia de fallback com múltiplas bibliotecas: mammoth (melhor HTML para .docx) → word-extractor (lida tanto com .doc quanto .docx) → fallback para webUrl. Downloads binários usam o endpoint /contentStream da versão beta do Graph para transferência binária confiável.

FerramentaDescrição
createWordDocumentCriar um .docx a partir de conteúdo estruturado (títulos, parágrafos, tabelas, listas, imagens)
readWordDocumentLer um documento como HTML e texto simples
getWordDocumentMetadataObter título, autor, datas, palavras-chave
getWordDocumentAsHtmlConverter o conteúdo do documento em HTML
convertDocumentToPdfConverter um documento do Word em PDF

Observação: Alguns tenants do SharePoint convertem arquivos .docx enviados para o formato binário OLE2 em poucos segundos após o upload. Quando isso acontece, as bibliotecas de análise no lado do cliente não conseguem ler o arquivo. O servidor então retorna graciosamente o webUrl para que o usuário possa abrir o documento no navegador.

PowerPoint (4)

Crie, leia e converta apresentações do PowerPoint. As apresentações são construídas a partir de dados estruturados de slides e armazenadas no OneDrive. A leitura usa a conversão HTML do Graph com fallback para jszip para extração de texto em nível de slide.

FerramentaDescrição
createPresentationCriar um .pptx com slides de título, conteúdo e em branco
readPresentationLer o conteúdo dos slides (elementos de texto por slide)
getPresentationMetadataObter título, autor, número de slides, datas
convertPresentationToPdfConverter uma apresentação em PDF

Teams (21)

FerramentaDescrição
listChatsListar chats do Teams
createChatCriar um novo chat
getChatMessagesLer mensagens do chat
sendChatMessageEnviar uma mensagem no chat
listJoinedTeamsListar suas equipes
listTeamChannelsListar canais da equipe
createTeamChannelCriar um canal
addChannelMemberAdicionar membro ao canal
getChannelMessagesLer mensagens do canal
sendChannelMessagePublicar em um canal
replyToMessageResponder a uma mensagem do canal
listChannelFilesListar arquivos em um canal
uploadFileToChannelEnviar arquivo para o canal
readChannelFileLer um arquivo do canal
createOnlineMeetingCriar uma reunião do Teams
getOnlineMeetingObter detalhes da reunião
listOnlineMeetingsListar reuniões online
getMeetingByJoinUrlEncontrar reunião pela URL de participação
getMeetingTranscriptsObter transcrições de reuniões
getMeetingTranscriptContentLer o conteúdo da transcrição

(Observação: addChannelMember se aplica apenas a canais privados. Canais padrão incluem automaticamente todos os membros da equipe.)

Contacts (6)

FerramentaDescrição
listContactsListar contatos
getContactObter detalhes do contato
createContactCriar um contato
updateContactAtualizar informações do contato
deleteContactExcluir um contato
searchContactsPesquisar contatos

To-Do (11)

FerramentaDescrição
listTaskListsListar listas de tarefas
getTaskListObter uma lista de tarefas
createTaskListCriar uma lista de tarefas
updateTaskListRenomear uma lista de tarefas
deleteTaskListExcluir uma lista de tarefas
listTasksListar tarefas
getTaskObter detalhes da tarefa
createTaskCriar uma tarefa
updateTaskAtualizar uma tarefa
deleteTaskExcluir uma tarefa
completeTaskMarcar tarefa como concluída

Grupos (4)

FerramentaDescrição
listGroupsListar grupos do Microsoft 365
getGroupObter detalhes do grupo
listGroupMembersListar membros do grupo
listMyGroupsListar seus grupos

Pessoas (3)

FerramentaDescrição
findPeoplePesquisar no diretório
getRelevantPeopleObter contatos frequentes
getPersonByIdObter detalhes da pessoa

Pesquisa (1)

FerramentaDescrição
searchPesquisa unificada em e-mails, arquivos, eventos e mensagens de chat

Multiusuário

Cada usuário autentica de forma independente. O servidor isola todos os dados por identidade de usuário.

  Alice (alice@contoso.com)          Bob (bob@contoso.com)
  ├─ Her own Microsoft tokens        ├─ His own Microsoft tokens
  ├─ Her own session                  ├─ His own session
  └─ Claude Desktop (her laptop)     └─ Claude Desktop (his PC)

              Complete data isolation.
         Alice never sees Bob's data.

Para testes automatizados com múltiplos agentes, use o fluxo ROPC (Resource Owner Password Credentials) para autenticar programaticamente:

# Start the server
npm run dev:web

# Run the E2E test suite (authenticates 3 users via ROPC)
node tests/run-all.cjs

A suíte de testes autentica vários usuários e, em seguida, exercita todas as 117 ferramentas em 12 módulos, além de 5 fluxos de trabalho entre módulos. Consulte tests/ para a implementação completa.


Suíte de Testes E2E

O projeto inclui uma suíte de testes abrangente que cobre todas as 117 ferramentas.

# Run all tests (requires server running)
node tests/run-all.cjs

# Run a single module
node tests/run-all.cjs --bucket mail --buckets-only

# Run only workflows
node tests/run-all.cjs --workflows-only

Estrutura de testes:

tests/
  lib/           Shared auth, HTTP client, reporter
  buckets/       One file per module (12 files, 117 tools)
  workflows/     Cross-module tests (5 files)
  run-all.cjs    Master runner

Os testes autenticam via ROPC (sem gerenciamento manual de tokens) e são executados em ~100 segundos.


Variáveis de Ambiente

Copie .env.example para .env e configure:

VariávelObrigatóriaDescrição
MICROSOFT_CLIENT_IDSimID do Cliente do Azure App
MICROSOFT_TENANT_IDSimID do Locatário do Azure
MICROSOFT_REDIRECT_URINãoURL de retorno de chamada OAuth (padrão: http://localhost:3000/api/auth/callback)
DEVICE_REGISTRY_ENCRYPTION_KEYProduçãoChave de criptografia de 32 bytes para armazenamento de tokens
JWT_SECRETProduçãoSegredo para assinar tokens JWT
CORS_ALLOWED_ORIGINSProduçãoOrigens permitidas separadas por vírgula
PORTNãoPorta do servidor (padrão: 3000)
NODE_ENVNãodevelopment ou production

Implantação

Local (Recomendado para Começar)

npm install
npm run dev:web

Azure App Service

Consulte docs/azure-deployment.md para implantação CI/CD com GitHub Actions.


Segurança

  • Armazenamento criptografado: todos os tokens da Microsoft são criptografados em repouso com AES-256
  • Sem segredos de cliente: usa fluxo de cliente público (PKCE) para autenticação em desktop
  • Isolamento de tokens: os tokens de cada usuário são armazenados separadamente com chaves de criptografia diferentes
  • Limitação de taxa: limitação de taxa integrada protege contra abuso
  • Proteção CORS: lista de permissões de origem em produção
  • Expiração de sessão: as sessões expiram após 24 horas

Checklist de Produção

  • Definir NODE_ENV=production
  • Definir DEVICE_REGISTRY_ENCRYPTION_KEY (32 bytes)
  • Definir JWT_SECRET (string aleatória forte)
  • Definir CORS_ALLOWED_ORIGINS
  • Usar HTTPS com um certificado válido

Estrutura do Projeto

MCP-Microsoft-Office/
├── mcp-adapter.cjs          MCP protocol adapter (runs locally with Claude Desktop)
├── src/
│   ├── api/                 Express routes and controllers
│   ├── auth/                MSAL authentication (OAuth2, ROPC, token exchange)
│   ├── core/                Services (cache, storage, tools, error handling)
│   ├── graph/               Microsoft Graph API services
│   │   ├── graph-client.cjs   HTTP client with retry, binary support, sessions
│   │   ├── files-service.cjs  OneDrive file operations
│   │   ├── excel-service.cjs  Workbook API (sessions, ranges, tables, functions)
│   │   ├── word-service.cjs   Word create/read (docx + mammoth + word-extractor)
│   │   └── powerpoint-service.cjs  PPT create/read (pptxgenjs + jszip)
│   └── modules/             Feature modules (mail, calendar, excel, word, powerpoint, etc.)
├── public/                  Web UI for authentication
└── tests/                   E2E test suite (gitignored)

Contribuindo

  1. Faça um fork do repositório
  2. Crie um branch de funcionalidade
  3. Faça suas alterações
  4. Envie um pull request

Licença

Licença MIT — consulte o arquivo LICENSE.