{"_id":"@carolamorimm/outlook-mcp","_rev":"2-c5d634cf7a34f928c21f9a4ac87489e7","name":"@carolamorimm/outlook-mcp","dist-tags":{"latest":"1.1.0"},"versions":{"1.0.0":{"name":"@carolamorimm/outlook-mcp","version":"1.0.0","keywords":["mcp","outlook","microsoft-graph","claude","microsoft-todo"],"_id":"@carolamorimm/outlook-mcp@1.0.0","maintainers":[{"name":"carolamorimm","email":"carolamorimsm@gmail.com"}],"bin":{"outlook-mcp":"dist/cli.js"},"dist":{"shasum":"567f4dfa6375f5006af220d23984ecd16d36b29b","tarball":"https://registry.npmjs.org/@carolamorimm/outlook-mcp/-/outlook-mcp-1.0.0.tgz","fileCount":8,"integrity":"sha512-WxFVkqX+fUJVmJCMpwoRdUG8vSVpz/2uGpbRgtSw7WijOKBsG6eTdAfZJf0RcrxEtbzyQ1Cr4suF8Lg2+tfbpw==","signatures":[{"sig":"MEUCIHYtkl/kBppLDTxrGd+Z8PUgTbRpLyXAnlQ7O8yAIHLQAiEAnckut8dCtbLABYBSeiO/DLs4Jf4qmWuRzkKvBeraUow=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":23899},"main":"dist/index.js","type":"module","engines":{"node":">=18"},"gitHead":"54a0a06def2487807be77983336c91e5ca8bf5d4","scripts":{"dev":"tsx src/index.ts","build":"tsc","login":"node dist/login.js","start":"node dist/index.js","prepublishOnly":"npm run build"},"_npmUser":{"name":"carolamorimm","email":"carolamorimsm@gmail.com"},"_npmVersion":"11.13.0","description":"MCP Server para integração com Outlook e Microsoft To Do via Microsoft Graph API, com login individual por usuário","directories":{},"_nodeVersion":"24.16.0","dependencies":{"zod":"^3.23.8","dotenv":"^16.4.5","@azure/identity":"^4.4.1","@modelcontextprotocol/sdk":"^1.0.0","@azure/identity-cache-persistence":"^1.1.0","@microsoft/microsoft-graph-client":"^3.0.7"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"tsx":"^4.19.0","typescript":"^5.5.0","@types/node":"^22.0.0"},"_npmOperationalInternal":{"tmp":"tmp/outlook-mcp_1.0.0_1784157567504_0.3444119123844336","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@carolamorimm/outlook-mcp","version":"1.1.0","description":"MCP Server para integração com Outlook e Microsoft To Do via Microsoft Graph API, com login individual por usuário","type":"module","main":"dist/index.js","bin":{"outlook-mcp":"dist/cli.js"},"engines":{"node":">=18"},"scripts":{"build":"tsc","start":"node dist/index.js","login":"node dist/login.js","dev":"tsx src/index.ts","prepublishOnly":"npm run build"},"publishConfig":{"access":"public"},"keywords":["mcp","outlook","microsoft-graph","claude","microsoft-todo"],"dependencies":{"@azure/identity":"^4.4.1","@azure/identity-cache-persistence":"^1.1.0","@microsoft/microsoft-graph-client":"^3.0.7","@modelcontextprotocol/sdk":"^1.0.0","dotenv":"^16.4.5","zod":"^3.23.8"},"devDependencies":{"@types/node":"^22.0.0","tsx":"^4.19.0","typescript":"^5.5.0"},"gitHead":"b667cce8210ccb62a3f1df0df734ff997057ecc2","_id":"@carolamorimm/outlook-mcp@1.1.0","_nodeVersion":"24.16.0","_npmVersion":"11.13.0","dist":{"integrity":"sha512-Yzsjf9/RnQZD4mbSmZj+1npE+GoDQErmot0n4pAKl8eoYZCTNY5InNmLdw+Yk4QxdoCSkVI1eIj13ScpjXd+zw==","shasum":"7ccac37651910e23db4cc233af7474243de2b071","tarball":"https://registry.npmjs.org/@carolamorimm/outlook-mcp/-/outlook-mcp-1.1.0.tgz","fileCount":8,"unpackedSize":32361,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIHp9YMNoDiOFPU76wRq703GTnlFQimUy9YWONtA9rFBoAiEAuAmCaTX3XE2zKqarvfMFS1BHU+vFZKHEE2uwv2PlZA8="}]},"_npmUser":{"name":"carolamorimm","email":"carolamorimsm@gmail.com"},"directories":{},"maintainers":[{"name":"carolamorimm","email":"carolamorimsm@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/outlook-mcp_1.1.0_1784159599196_0.25889765658472297"},"_hasShrinkwrap":false}},"time":{"created":"2026-07-15T23:19:27.413Z","modified":"2026-07-15T23:53:19.663Z","1.0.0":"2026-07-15T23:19:27.642Z","1.1.0":"2026-07-15T23:53:19.349Z"},"keywords":["mcp","outlook","microsoft-graph","claude","microsoft-todo"],"description":"MCP Server para integração com Outlook e Microsoft To Do via Microsoft Graph API, com login individual por usuário","maintainers":[{"name":"carolamorimm","email":"carolamorimsm@gmail.com"}],"readme":"# Outlook MCP Server\n\nIntegração nativa do Outlook e Microsoft To Do com o Claude via MCP (Model Context Protocol).\n\nCada membro da equipe autentica-se com a **própria conta Microsoft** e acessa\napenas a **própria caixa de correio** — não há segredo compartilhado.\n\n## O que este servidor faz\n\n| Ferramenta | Descrição |\n|---|---|\n| `list_emails` | Lista e-mails da caixa de entrada (com filtros) |\n| `get_email` | Lê o conteúdo completo de um e-mail |\n| `mark_email_read` | Marca e-mail como lido |\n| `create_task` | Cria tarefa no Microsoft To Do |\n| `list_tasks` | Lista tarefas pendentes |\n| `list_events` | Lista eventos da agenda em um intervalo de datas |\n| `create_event` | Cria evento na agenda (com participantes e Teams opcional) |\n| `update_event` | Altera um evento existente na agenda |\n\n---\n\n## Como funciona a autenticação\n\nO servidor usa **autenticação delegada** (login individual). Cada pessoa roda\n`npm run login` uma vez, faz login no navegador com a própria conta e o token\nfica guardado com segurança no cofre do sistema operacional (Keychain no macOS,\nDPAPI no Windows, libsecret no Linux). O servidor renova o token sozinho depois.\n\nO que você distribui para a equipe são apenas `AZURE_TENANT_ID` e\n`AZURE_CLIENT_ID` — **não são segredos**.\n\n---\n\n## Instalar via Claude Code (plugin) — jeito recomendado\n\nDepois que o mantenedor publicar o pacote no npm e o marketplace estiver no\nGitHub (ver seção \"Publicar o plugin\"), cada membro instala em poucos passos:\n\n```\n/plugin marketplace add Digital-Republic-AI/outlook-mcp\n/plugin install outlook-mcp@digitalrepublic\n/outlook-mcp:login\n```\n\n- `/plugin marketplace add` aponta para o repositório do marketplace.\n- `/plugin install` instala o servidor MCP (roda via `npx`, sem build manual).\n- `/outlook-mcp:login` abre o navegador para o login individual (uma vez).\n\nOs IDs `AZURE_TENANT_ID` e `AZURE_CLIENT_ID` já vêm embutidos no plugin (não são\nsegredos). Cada pessoa acessa somente a própria caixa.\n\nPara instalação manual (sem plugin), siga as seções numeradas abaixo.\n\n---\n\n## Pré-requisitos\n\n- Node.js 18+\n- Conta Microsoft 365 corporativa\n- O app registrado no Azure (feito uma vez pelo TI/admin — passo 1)\n\n---\n\n## 1. Registrar App no Azure Portal (feito uma vez pelo admin)\n\n1. Acesse [portal.azure.com](https://portal.azure.com)\n2. Vá em **Azure Active Directory > App registrations > New registration**\n3. Preencha:\n   - Name: `Claude Outlook MCP`\n   - Supported account types: `Accounts in this organizational directory only`\n   - Redirect URI: em **Public client/native (mobile & desktop)** informe `http://localhost`\n4. Clique em **Register**\n\n### Copiar credenciais (não são segredos)\n\nNa página do app, anote e distribua para a equipe:\n- **Application (client) ID** → `AZURE_CLIENT_ID`\n- **Directory (tenant) ID** → `AZURE_TENANT_ID`\n\n### Habilitar fluxo de cliente público\n\n1. Vá em **Authentication**\n2. Em **Advanced settings > Allow public client flows**, marque **Yes**\n3. Confirme que `http://localhost` está listado como Redirect URI de desktop\n4. Salve\n\n### Configurar Permissões (Delegated)\n\n1. Vá em **API permissions > Add a permission > Microsoft Graph > Delegated permissions**\n2. Adicione estas permissões:\n\n| Permissão | Uso |\n|---|---|\n| `Mail.Read` | Ler e-mails |\n| `Mail.ReadWrite` | Marcar como lido |\n| `Tasks.ReadWrite` | Criar e listar tarefas no To Do |\n| `Calendars.ReadWrite` | Ler, criar e alterar eventos da agenda |\n| `User.Read` | Identificar o usuário logado |\n\n3. Se a política do tenant exigir, clique em **Grant admin consent**. Caso\n   contrário, cada usuário concede consentimento sozinho no primeiro login.\n\n> Atualizou de uma versão anterior (sem calendário)? Ao adicionar a permissão\n> `Calendars.ReadWrite`, **cada usuário precisa refazer o login** para o novo\n> escopo entrar no token: `/outlook-mcp:login` (ou `npm run login`). Enquanto\n> não refizer, as ferramentas de agenda retornam \"Autenticação necessária\".\n\n---\n\n## 2. Instalar e Configurar (cada membro da equipe)\n\n```bash\n# Entrar na pasta\ncd outlook-mcp\n\n# Instalar dependências\nnpm install\n\n# Configurar as variáveis (tenant e client id fornecidos pelo admin)\ncp .env.example .env\n# Edite o .env com AZURE_TENANT_ID e AZURE_CLIENT_ID\n\n# Build\nnpm run build\n\n# Login individual (abre o navegador)\nnpm run login\n```\n\nO `npm run login` abre o navegador, você entra com sua conta Microsoft e o\ntoken é salvo localmente. Rode novamente apenas se o login expirar ou se quiser\ntrocar de conta.\n\n---\n\n## 3. Configurar no Claude Desktop\n\nEdite o arquivo de configuração do Claude Desktop:\n\n**macOS:** `~/Library/Application Support/Claude/claude_desktop_config.json`\n**Windows:** `%APPDATA%\\Claude\\claude_desktop_config.json`\n\n```json\n{\n  \"mcpServers\": {\n    \"outlook\": {\n      \"command\": \"node\",\n      \"args\": [\"/caminho/completo/para/outlook-mcp/dist/index.js\"],\n      \"env\": {\n        \"AZURE_TENANT_ID\": \"seu-tenant-id\",\n        \"AZURE_CLIENT_ID\": \"seu-client-id\"\n      }\n    }\n  }\n}\n```\n\nReinicie o Claude Desktop.\n\nSe você ainda não fez `npm run login`, o Claude vai avisar que a autenticação é\nnecessária ao tentar usar as ferramentas.\n\n---\n\n## 4. Testar\n\nApós reiniciar, você pode pedir ao Claude:\n\n> \"Liste meus e-mails não lidos do Outlook\"\n\n> \"Leia meus últimos 5 e-mails e crie tarefas para os que precisam de ação\"\n\n> \"Crie uma tarefa de alta prioridade: Revisar proposta DR_AI, vence dia 30\"\n\n> \"O que tenho na agenda essa semana?\"\n\n> \"Crie um evento amanhã das 14h às 15h: Reunião de alinhamento, como reunião do Teams\"\n\n> \"Mude o horário da reunião de alinhamento para as 16h\"\n\n---\n\n## Uso com Claude Code CLI\n\n```bash\nclaude mcp add outlook \\\n  --env AZURE_TENANT_ID=seu-tenant-id \\\n  --env AZURE_CLIENT_ID=seu-client-id \\\n  -- node /caminho/para/outlook-mcp/dist/index.js\n```\n\nLembre-se de rodar `npm run login` uma vez antes de usar.\n\n---\n\n## Distribuir para a equipe\n\n1. **Admin:** registra o app no Azure uma vez (passo 1) e envia\n   `AZURE_TENANT_ID` e `AZURE_CLIENT_ID` para o time.\n2. **Cada membro:** clona o projeto, roda `npm install`, `npm run build`,\n   preenche o `.env` com os dois valores e roda `npm run login`.\n3. Cada pessoa acessa **somente a própria caixa** — o servidor usa o endpoint\n   `/me` do Microsoft Graph.\n\n---\n\n## Publicar o plugin (mantenedor)\n\nFeito uma vez por quem mantém o projeto. Modelo de distribuição:\n**pacote npm público + repositório git privado.** O pacote npm só tem código\ngenérico (sem segredos); os IDs da empresa ficam no `.mcp.json`, dentro do repo\nprivado.\n\n### 1. Nome do pacote npm\n\nO pacote é `@carolamorimm/outlook-mcp` (escopo pessoal). Para trocar de escopo,\nsubstitua o nome nos três arquivos: `package.json` (campo `name`), `.mcp.json`\n(campo `args`) e `commands/login.md` (comando de login).\n\n### 2. Publicar no npm (público)\n\n```bash\nnpm login\nnpm publish               # roda o build automaticamente (prepublishOnly)\n```\n\nO `package.json` já está com `publishConfig.access: public`. Para pacote com\nescopo (`@org/nome`), o escopo `@org` precisa existir na sua conta npm. O pacote\npublica apenas a pasta `dist/` (campo `files`).\n\n### 3. Publicar o marketplace (repo git privado)\n\nO marketplace vive neste próprio repositório (`.claude-plugin/marketplace.json`\ne `.claude-plugin/plugin.json`). Mantenha o repo **privado** no GitHub:\n\n```bash\ngit add .claude-plugin .mcp.json commands package.json README.md src\ngit commit -m \"feat: distribuicao via plugin do Claude Code\"\ngit push\n```\n\nDepois, a equipe usa `Digital-Republic-AI/outlook-mcp` (org/repo) no comando\n`/plugin marketplace add`. Por ser repo privado, cada membro precisa ter acesso\nao repositório no GitHub e estar autenticado (`gh auth login` ou credenciais\ngit) para o `/plugin marketplace add` funcionar.\n\n### 4. Testar localmente antes de publicar\n\nAponte o marketplace para a pasta local em vez do GitHub:\n\n```\n/plugin marketplace add /Users/voce/projects/outlook-mcp\n/plugin install outlook-mcp@digitalrepublic\n```\n\nEnquanto o pacote npm não estiver publicado, o `npx` do `.mcp.json` falha; para\ntestar o servidor localmente, rode `npm install && npm run build` e troque\ntemporariamente o `.mcp.json` para `node ${CLAUDE_PLUGIN_ROOT}/dist/cli.js`.\n\n---\n\n## Segurança\n\n- Não há segredo de aplicação (`client secret`) para vazar ou rotacionar.\n- Cada usuário só acessa a própria caixa (permissões delegadas + endpoint `/me`).\n- O token é guardado no cofre seguro do sistema operacional, não em texto puro.\n- Nunca commite o `.env` (já está no `.gitignore`).\n- O acesso respeita todas as políticas de segurança do seu Microsoft 365.\n\nPara revogar o acesso de alguém, use o Azure AD (My Apps / Enterprise\napplications) ou remova o arquivo `~/.outlook-mcp/auth-record.json` na máquina.\n\n---\n\n## Estrutura do Projeto\n\n```\noutlook-mcp/\n├── src/\n│   ├── cli.ts            # Entrada do binário (servidor | login) para npx\n│   ├── index.ts          # Servidor MCP + definição das ferramentas\n│   ├── graph-client.ts   # Cliente Microsoft Graph API (endpoints /me)\n│   ├── auth.ts           # Credencial delegada + cache de token\n│   ├── login.ts          # Login individual (npm run login / npx outlook-mcp login)\n│   └── config.ts         # Scopes, caminhos e mensagens\n├── .claude-plugin/\n│   ├── marketplace.json  # Marketplace da Digital Republic para Claude Code\n│   └── plugin.json       # Manifesto do plugin outlook-mcp\n├── commands/\n│   └── login.md          # Slash command /outlook-mcp:login\n├── .mcp.json             # Config do MCP server para o plugin (npx + IDs embutidos)\n├── .env.example          # Template (apenas tenant e client id)\n├── package.json\n├── tsconfig.json\n└── README.md\n```\n","readmeFilename":"README.md"}