{"_id":"@dawnlit/outlook-mcp","_rev":"3-b00c092f129fe24260248a6d54632c8a","name":"@dawnlit/outlook-mcp","dist-tags":{"latest":"2.0.0"},"versions":{"1.0.0":{"name":"@dawnlit/outlook-mcp","version":"1.0.0","keywords":["outlook","email","mcp","model-context-protocol","automation"],"author":{"name":"Dawnlit"},"license":"Apache-2.0","_id":"@dawnlit/outlook-mcp@1.0.0","maintainers":[{"name":"wynterlin","email":"yudong9912@gmail.com"}],"homepage":"https://github.com/dawnlit-ai/outlook-mcp#readme","bugs":{"url":"https://github.com/dawnlit-ai/outlook-mcp/issues"},"dist":{"shasum":"01a0931d4fa6a9c90e61294c3508a199a28ba6fe","tarball":"https://registry.npmjs.org/@dawnlit/outlook-mcp/-/outlook-mcp-1.0.0.tgz","fileCount":30,"integrity":"sha512-79lIY62iT02QHPvgGoRJGsKGVSadpDzVsSkozW8wFXazTDwKnHvlnGoDwGDCztmFx5v2UhKBqRSuvR8/qnEiNw==","signatures":[{"sig":"MEUCIQDI7XbYmQ5WdUmyU7bg6G9LADBylgny16YP7qPlL3nW+QIgAuaX+BqU1TEYg09KXIAqWNRuXZjeWLY49jq1qOIrGgI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dawnlit%2foutlook-mcp@1.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":78686},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./package.json":"./package.json"},"gitHead":"7999b3f6933667fd46fa7b93154f2e065beec481","scripts":{"test":"npm run build && node --test \"test/*.test.js\"","build":"npm run clean && tsc -p .","clean":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\"","prepare":"npm run build"},"_npmUser":{"name":"wynterlin","email":"yudong9912@gmail.com"},"repository":{"url":"git+https://github.com/dawnlit-ai/outlook-mcp.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP tools exposing @dawnlit/outlook-bridge's Outlook automation — read, send, reply, file, and template mail — to any MCP host.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"exceljs":"^4.4.0","pdf-parse":"^2.4.5","@dawnlit/outlook-bridge":"^1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","typescript":"~6.0.3","@types/node":"^24.0.0","@modelcontextprotocol/sdk":"^1.30.0"},"peerDependencies":{"zod":"^3.25 || ^4.0","@modelcontextprotocol/sdk":">=1.0.0"},"_npmOperationalInternal":{"tmp":"tmp/outlook-mcp_1.0.0_1787694860864_0.8232105052025926","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"@dawnlit/outlook-mcp","version":"1.1.0","keywords":["outlook","email","mcp","model-context-protocol","automation"],"author":{"name":"Dawnlit"},"license":"Apache-2.0","_id":"@dawnlit/outlook-mcp@1.1.0","maintainers":[{"name":"wynterlin","email":"yudong9912@gmail.com"}],"homepage":"https://github.com/dawnlit-ai/outlook-mcp#readme","bugs":{"url":"https://github.com/dawnlit-ai/outlook-mcp/issues"},"dist":{"shasum":"fdab04a4430fada294679a5b3e2d9dc82e4fe4c9","tarball":"https://registry.npmjs.org/@dawnlit/outlook-mcp/-/outlook-mcp-1.1.0.tgz","fileCount":36,"integrity":"sha512-aGyEJM0UCPn8b7XM2sRnn7ZduI3WD6hCFgMxAFnq12P7iZaL3Gn5VOIRsks2iHC6Io1ByfjsjLUJXbgZWpb7RQ==","signatures":[{"sig":"MEUCIHH3+5XBq4dm9K5QRm8l3cNePL4B7EuaoSnZWCXOcLqjAiEA+vsdqO+26izz85nuI8+rOgppsW8qZR9LCPgxmqvWqCM=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dawnlit%2foutlook-mcp@1.1.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":83661},"main":"dist/index.js","types":"dist/index.d.ts","engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./pdf":{"types":"./dist/pdf.d.ts","default":"./dist/pdf.js"},"./package.json":"./package.json"},"gitHead":"7f1562ecc330d9521d28a1701f80c04599b13adf","scripts":{"test":"npm run build && node --test \"test/*.test.js\"","build":"npm run clean && tsc -p .","clean":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\"","prepare":"npm run build"},"_npmUser":{"name":"wynterlin","email":"yudong9912@gmail.com"},"repository":{"url":"git+https://github.com/dawnlit-ai/outlook-mcp.git","type":"git"},"_npmVersion":"11.17.0","description":"MCP tools exposing @dawnlit/outlook-bridge's Outlook automation — read, send, reply, file, and template mail — to any MCP host.","directories":{},"_nodeVersion":"24.19.0","dependencies":{"exceljs":"^4.4.0","pdf-parse":"^2.4.5","@dawnlit/outlook-bridge":"^1.1.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","typescript":"~6.0.3","@types/node":"^24.0.0","@modelcontextprotocol/server":"^2.0.0"},"peerDependencies":{"zod":"^4.2.0","@modelcontextprotocol/server":"^2.0.0"},"_npmOperationalInternal":{"tmp":"tmp/outlook-mcp_1.1.0_1788077081218_0.8989648150134983","host":"s3://npm-registry-packages-npm-production"}},"2.0.0":{"_id":"@dawnlit/outlook-mcp@2.0.0","bugs":{"url":"https://github.com/dawnlit-ai/outlook-mcp/issues"},"dist":{"shasum":"1299c6d0f5071ab3b40e332c9bcaae02dd025041","tarball":"https://registry.npmjs.org/@dawnlit/outlook-mcp/-/outlook-mcp-2.0.0.tgz","fileCount":42,"integrity":"sha512-DkG/4oHcY2SDuNPmFyqrg/O0t+qlGjaoTz78kG1t86wcJpeHzUrGe0rhYUtqMTVrP12ShokouKY5L56Jd0nH6g==","signatures":[{"sig":"MEQCIFEGwmQe+8ovGY54zEJui/6aSCJSWkI13eu35DPmUxmMAiBAtUyZKrTi9zdAJu1rRDkOxXQZx5xj230Ti5jr515bJA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQDgA40X65zVtlWaC2r9CzA7o6WqjyMxO1wvQ+OIObCsAgIhAOs1kR3AlMxQzp9q449YmDdHGlfO5hZqYt/NPIwSJLVA"}],"attestations":{"url":"https://registry.npmjs.org/-/npm/v1/attestations/@dawnlit%2foutlook-mcp@2.0.0","provenance":{"predicateType":"https://slsa.dev/provenance/v1"}},"unpackedSize":178199},"main":"dist/index.js","name":"@dawnlit/outlook-mcp","types":"dist/index.d.ts","author":{"name":"Dawnlit"},"engines":{"node":">=24"},"exports":{".":{"types":"./dist/index.d.ts","default":"./dist/index.js"},"./pdf":{"types":"./dist/pdf.d.ts","default":"./dist/pdf.js"},"./package.json":"./package.json"},"gitHead":"a3633b8c7cd670f6520ee09e57233bfd195cce5d","license":"Apache-2.0","scripts":{"test":"npm run build && node --test \"test/*.test.js\"","build":"npm run clean && tsc -p .","clean":"node -e \"require('fs').rmSync('dist', { recursive: true, force: true })\"","prepare":"npm run build"},"version":"2.0.0","_npmUser":{"name":"wynterlin","email":"yudong9912@gmail.com"},"homepage":"https://github.com/dawnlit-ai/outlook-mcp#readme","keywords":["outlook","email","mcp","model-context-protocol","automation"],"repository":{"url":"git+https://github.com/dawnlit-ai/outlook-mcp.git","type":"git"},"_npmVersion":"11.19.0","description":"MCP tools for @dawnlit/outlook-bridge — let any MCP host read, search, send, reply to, file and template mail through the real Outlook client.","directories":{},"maintainers":[{"name":"wynterlin","email":"yudong9912@gmail.com"}],"_nodeVersion":"24.20.0","dependencies":{"exceljs":"^4.4.0","pdf-parse":"^2.4.5","@dawnlit/outlook-bridge":"^2.0.0"},"publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"zod":"^4.4.3","typescript":"~6.0.3","@types/node":"^24.13.3","@modelcontextprotocol/server":"^2.0.0"},"peerDependencies":{"zod":"^4.2.0","@modelcontextprotocol/server":"^2.0.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/outlook-mcp_2.0.0_1790146574851_0.5420935965610352"}}},"time":{"created":"2026-08-25T21:54:20.683Z","modified":"2026-09-23T06:56:15.335Z","1.0.0":"2026-08-25T21:54:21.016Z","1.1.0":"2026-08-30T08:04:41.374Z","2.0.0":"2026-09-23T06:56:14.935Z"},"bugs":{"url":"https://github.com/dawnlit-ai/outlook-mcp/issues"},"author":{"name":"Dawnlit"},"license":"Apache-2.0","homepage":"https://github.com/dawnlit-ai/outlook-mcp#readme","keywords":["outlook","email","mcp","model-context-protocol","automation"],"repository":{"url":"git+https://github.com/dawnlit-ai/outlook-mcp.git","type":"git"},"description":"MCP tools for @dawnlit/outlook-bridge — let any MCP host read, search, send, reply to, file and template mail through the real Outlook client.","maintainers":[{"name":"wynterlin","email":"yudong9912@gmail.com"}],"readme":"# @dawnlit/outlook-mcp\n\n[MCP](https://modelcontextprotocol.io) tools for [`@dawnlit/outlook-bridge`](https://github.com/dawnlit-ai/outlook-bridge):\nregister Outlook reading, searching, replying, drafting, template, attachment and cleanup tools on any MCP server with\none call. Every tool is a thin, generic wrapper over the bridge — no application's business rules — so it serves a\nlogistics assistant, a sales CRM or a personal agent equally.\n\nWorks wherever the bridge does: Outlook on Windows, and legacy Outlook for Mac.\n\n## Install\n\n```bash\nnpm install @dawnlit/outlook-mcp @modelcontextprotocol/server zod\n```\n\n`@dawnlit/outlook-bridge` comes along as a dependency. `@modelcontextprotocol/server` (v2) and `zod` (v4) are peer\ndependencies, so the tools register on the same SDK your server already uses.\n\nIf your own code imports the bridge — to pass a configured `bridge`, as under [Options](#options) — install it\nyourself, at the same major version:\n\n```bash\nnpm install @dawnlit/outlook-bridge@^2\n```\n\nnpm's hoisting would find it anyway, but pnpm and Yarn Plug'n'Play refuse to import a package you haven't declared.\n\n## Usage\n\n```ts\nimport { McpServer } from '@modelcontextprotocol/server';\nimport { StdioServerTransport } from '@modelcontextprotocol/server/stdio';\nimport { registerOutlookTools } from '@dawnlit/outlook-mcp';\n\nconst server = new McpServer({ name: 'my-server', version: '1.0.0' });\n\nregisterOutlookTools(server);\n// ...register your own tools alongside...\n\nawait server.connect(new StdioServerTransport());\n```\n\n### Options\n\n```ts\nimport { createOutlookBridge } from '@dawnlit/outlook-bridge';\n\nconst tools = registerOutlookTools(server, {\n    // Only tools that leave the mailbox unchanged.\n    readOnly: true,\n    // Leave specific tools out (an unknown name throws).\n    exclude: ['read_outlook_attachment'],\n    // Give the tools their own timeouts, temp directory or cancellation — or a fake in tests.\n    bridge: createOutlookBridge({ timeoutMs: 120_000 }),\n});\n\ntools.list_outlook_inbox?.disable(); // each registered tool is the SDK's handle\n```\n\n## Tools\n\n| Tool                          | Access       | What it does                                                                                                         |\n|-------------------------------|--------------|----------------------------------------------------------------------------------------------------------------------|\n| `get_outlook_accounts`        | read         | The mailboxes the Outlook profile can reach.                                                                         |\n| `list_outlook_inbox`          | read         | Recent mail from the Inbox root or one folder (including Sent Items, Drafts, …), with previews and attachment names. |\n| `search_outlook_inbox`        | read         | The Inbox and every folder under it, by subject glob or regex, date window, attachments and folder.                  |\n| `read_outlook_email_body`     | read         | One email's plain-text body, split from the quoted thread.                                                           |\n| `read_selected_outlook_email` | read         | The email selected or open in Outlook, with its ids and its body split from the quoted thread.                       |\n| `list_outlook_inbox_folders`  | read         | The folders under the Inbox, with item counts.                                                                       |\n| `list_outlook_signatures`     | read         | The Outlook signature names on this machine.                                                                         |\n| `outlook_templates`           | read / write | Template emails in a mailbox folder: `list`, and `save` a new one.                                                   |\n| `save_outlook_attachment`     | read         | Save one attachment to a private temp directory; returns its path.                                                   |\n| `read_outlook_attachment`     | read         | An attachment's text (PDF, .xlsx, text files) or its image, inline.                                                  |\n| `outlook_drafts`              | read / write | The account's drafts: `list`, and `delete` or `send` chosen ones.                                                    |\n| `outlook_bounces`             | read / write | Bounce-backs: `list` them, `report` which sent messages bounced and for whom, `clean` them out.                      |\n| `move_outlook_emails`         | write        | File emails into a folder — including Deleted Items, recoverably.                                                    |\n| `reply_outlook_email`         | write        | A threaded reply, from HTML or a template (section, placeholders, signature).                                        |\n| `send_outlook_email`          | write        | A new email: to/cc/bcc, attachments, a signature, sent or staged as a draft.                                         |\n| `send_all_drafts`             | write        | Send every draft of an account.                                                                                      |\n| `delete_outlook_emails`       | write        | Delete mail by id (dry-run first; received and sent mail refused by default), or purge Deleted Items.                |\n\nWith `readOnly`, the write tools aren't registered, `outlook_templates` and `outlook_drafts` offer only `list`, and\n`outlook_bounces` only `list` and `report`.\n\nEvery tool declares MCP annotations (`readOnlyHint`, `destructiveHint`, `idempotentHint`, `openWorldHint`) so a host can\ndecide what needs confirmation, and a title for display. The descriptions tell the model the safety rules that matter —\npreview before sending, dry-run before deleting, confirm before bulk actions.\n\n### Errors\n\nA failed call returns a tool result with `isError: true`, its text led by the bridge's error code —\n`[ACCOUNT_NOT_FOUND] …`, `[NOT_FOUND] Folder 'Invoices' not found. …`, `[INVALID_REQUEST] …` — so a model can act on the\nkind of failure rather than parse its wording.\n\n## Also exported\n\n- `extractAttachmentContent(path)` — the file reading behind `read_outlook_attachment`: text from PDF, .xlsx and text\n  formats, or an image's bytes for an image block.\n- `readPdfText(path)`, `readXlsxText(path)` — the two extractors on their own. `readPdfText` is also available as\n  `@dawnlit/outlook-mcp/pdf`, which loads nothing else.\n- `OUTLOOK_TOOL_NAMES` and the `OutlookToolName`, `OutlookToolsOptions` and `RegisteredOutlookTools` types.\n\n## What's deliberately not here\n\nAnything encoding one application's conventions rather than Outlook's own — what counts as a particular kind of email,\nan app's own stored templates, rules for when to block a sender. Build those as your own tools beside these, calling\n`@dawnlit/outlook-bridge` directly for anything this package doesn't cover.\n\n## Development\n\n```bash\nnpm run build   # tsc → dist/\nnpm test        # build, then node:test — no Outlook needed\n```\n\nThe tests register the tools against a recording server with a fake bridge (what each tool declares and hands the\nbridge), and against a real `McpServer` over the SDK's in-memory transport (what a client actually receives).\n\n## License\n\nApache-2.0 © Dawnlit\n","readmeFilename":"README.md"}