@jbctechsolutions/mcp-office365 2.5.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +667 -0
- package/dist/applescript/account-repository.d.ts +30 -0
- package/dist/applescript/account-repository.d.ts.map +1 -0
- package/dist/applescript/account-repository.js +38 -0
- package/dist/applescript/account-repository.js.map +1 -0
- package/dist/applescript/account-scripts.d.ts +21 -0
- package/dist/applescript/account-scripts.d.ts.map +1 -0
- package/dist/applescript/account-scripts.js +180 -0
- package/dist/applescript/account-scripts.js.map +1 -0
- package/dist/applescript/calendar-manager.d.ts +44 -0
- package/dist/applescript/calendar-manager.d.ts.map +1 -0
- package/dist/applescript/calendar-manager.js +92 -0
- package/dist/applescript/calendar-manager.js.map +1 -0
- package/dist/applescript/calendar-writer.d.ts +36 -0
- package/dist/applescript/calendar-writer.d.ts.map +1 -0
- package/dist/applescript/calendar-writer.js +94 -0
- package/dist/applescript/calendar-writer.js.map +1 -0
- package/dist/applescript/content-readers.d.ts +114 -0
- package/dist/applescript/content-readers.d.ts.map +1 -0
- package/dist/applescript/content-readers.js +328 -0
- package/dist/applescript/content-readers.js.map +1 -0
- package/dist/applescript/executor.d.ts +60 -0
- package/dist/applescript/executor.d.ts.map +1 -0
- package/dist/applescript/executor.js +173 -0
- package/dist/applescript/executor.js.map +1 -0
- package/dist/applescript/index.d.ts +20 -0
- package/dist/applescript/index.d.ts.map +1 -0
- package/dist/applescript/index.js +29 -0
- package/dist/applescript/index.js.map +1 -0
- package/dist/applescript/mail-sender.d.ts +38 -0
- package/dist/applescript/mail-sender.d.ts.map +1 -0
- package/dist/applescript/mail-sender.js +67 -0
- package/dist/applescript/mail-sender.js.map +1 -0
- package/dist/applescript/parser.d.ts +235 -0
- package/dist/applescript/parser.d.ts.map +1 -0
- package/dist/applescript/parser.js +496 -0
- package/dist/applescript/parser.js.map +1 -0
- package/dist/applescript/repository.d.ts +64 -0
- package/dist/applescript/repository.d.ts.map +1 -0
- package/dist/applescript/repository.js +444 -0
- package/dist/applescript/repository.js.map +1 -0
- package/dist/applescript/scripts.d.ts +265 -0
- package/dist/applescript/scripts.d.ts.map +1 -0
- package/dist/applescript/scripts.js +1483 -0
- package/dist/applescript/scripts.js.map +1 -0
- package/dist/approval/hash.d.ts +87 -0
- package/dist/approval/hash.d.ts.map +1 -0
- package/dist/approval/hash.js +102 -0
- package/dist/approval/hash.js.map +1 -0
- package/dist/approval/index.d.ts +13 -0
- package/dist/approval/index.d.ts.map +1 -0
- package/dist/approval/index.js +7 -0
- package/dist/approval/index.js.map +1 -0
- package/dist/approval/token-manager.d.ts +51 -0
- package/dist/approval/token-manager.d.ts.map +1 -0
- package/dist/approval/token-manager.js +111 -0
- package/dist/approval/token-manager.js.map +1 -0
- package/dist/approval/types.d.ts +44 -0
- package/dist/approval/types.d.ts.map +1 -0
- package/dist/approval/types.js +6 -0
- package/dist/approval/types.js.map +1 -0
- package/dist/cli.d.ts +30 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +143 -0
- package/dist/cli.js.map +1 -0
- package/dist/config.d.ts +27 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +42 -0
- package/dist/config.js.map +1 -0
- package/dist/database/connection.d.ts +77 -0
- package/dist/database/connection.d.ts.map +1 -0
- package/dist/database/connection.js +130 -0
- package/dist/database/connection.js.map +1 -0
- package/dist/database/index.d.ts +11 -0
- package/dist/database/index.d.ts.map +1 -0
- package/dist/database/index.js +11 -0
- package/dist/database/index.js.map +1 -0
- package/dist/database/queries.d.ts +93 -0
- package/dist/database/queries.d.ts.map +1 -0
- package/dist/database/queries.js +430 -0
- package/dist/database/queries.js.map +1 -0
- package/dist/database/repository.d.ts +198 -0
- package/dist/database/repository.d.ts.map +1 -0
- package/dist/database/repository.js +199 -0
- package/dist/database/repository.js.map +1 -0
- package/dist/graph/attachments.d.ts +72 -0
- package/dist/graph/attachments.d.ts.map +1 -0
- package/dist/graph/attachments.js +207 -0
- package/dist/graph/attachments.js.map +1 -0
- package/dist/graph/auth/config.d.ts +34 -0
- package/dist/graph/auth/config.d.ts.map +1 -0
- package/dist/graph/auth/config.js +78 -0
- package/dist/graph/auth/config.js.map +1 -0
- package/dist/graph/auth/device-code-flow.d.ts +55 -0
- package/dist/graph/auth/device-code-flow.d.ts.map +1 -0
- package/dist/graph/auth/device-code-flow.js +180 -0
- package/dist/graph/auth/device-code-flow.js.map +1 -0
- package/dist/graph/auth/index.d.ts +13 -0
- package/dist/graph/auth/index.d.ts.map +1 -0
- package/dist/graph/auth/index.js +13 -0
- package/dist/graph/auth/index.js.map +1 -0
- package/dist/graph/auth/token-cache.d.ts +41 -0
- package/dist/graph/auth/token-cache.d.ts.map +1 -0
- package/dist/graph/auth/token-cache.js +105 -0
- package/dist/graph/auth/token-cache.js.map +1 -0
- package/dist/graph/client/batch.d.ts +38 -0
- package/dist/graph/client/batch.d.ts.map +1 -0
- package/dist/graph/client/batch.js +33 -0
- package/dist/graph/client/batch.js.map +1 -0
- package/dist/graph/client/cache.d.ts +64 -0
- package/dist/graph/client/cache.d.ts.map +1 -0
- package/dist/graph/client/cache.js +108 -0
- package/dist/graph/client/cache.js.map +1 -0
- package/dist/graph/client/graph-client.d.ts +630 -0
- package/dist/graph/client/graph-client.d.ts.map +1 -0
- package/dist/graph/client/graph-client.js +1771 -0
- package/dist/graph/client/graph-client.js.map +1 -0
- package/dist/graph/client/index.d.ts +12 -0
- package/dist/graph/client/index.d.ts.map +1 -0
- package/dist/graph/client/index.js +12 -0
- package/dist/graph/client/index.js.map +1 -0
- package/dist/graph/content-readers.d.ts +106 -0
- package/dist/graph/content-readers.d.ts.map +1 -0
- package/dist/graph/content-readers.js +321 -0
- package/dist/graph/content-readers.js.map +1 -0
- package/dist/graph/index.d.ts +18 -0
- package/dist/graph/index.d.ts.map +1 -0
- package/dist/graph/index.js +23 -0
- package/dist/graph/index.js.map +1 -0
- package/dist/graph/mailbox-adapter.d.ts +30 -0
- package/dist/graph/mailbox-adapter.d.ts.map +1 -0
- package/dist/graph/mailbox-adapter.js +59 -0
- package/dist/graph/mailbox-adapter.js.map +1 -0
- package/dist/graph/mappers/contact-mapper.d.ts +14 -0
- package/dist/graph/mappers/contact-mapper.d.ts.map +1 -0
- package/dist/graph/mappers/contact-mapper.js +20 -0
- package/dist/graph/mappers/contact-mapper.js.map +1 -0
- package/dist/graph/mappers/email-mapper.d.ts +14 -0
- package/dist/graph/mappers/email-mapper.d.ts.map +1 -0
- package/dist/graph/mappers/email-mapper.js +44 -0
- package/dist/graph/mappers/email-mapper.js.map +1 -0
- package/dist/graph/mappers/event-mapper.d.ts +14 -0
- package/dist/graph/mappers/event-mapper.d.ts.map +1 -0
- package/dist/graph/mappers/event-mapper.js +31 -0
- package/dist/graph/mappers/event-mapper.js.map +1 -0
- package/dist/graph/mappers/folder-mapper.d.ts +22 -0
- package/dist/graph/mappers/folder-mapper.d.ts.map +1 -0
- package/dist/graph/mappers/folder-mapper.js +51 -0
- package/dist/graph/mappers/folder-mapper.js.map +1 -0
- package/dist/graph/mappers/index.d.ts +16 -0
- package/dist/graph/mappers/index.d.ts.map +1 -0
- package/dist/graph/mappers/index.js +16 -0
- package/dist/graph/mappers/index.js.map +1 -0
- package/dist/graph/mappers/task-mapper.d.ts +20 -0
- package/dist/graph/mappers/task-mapper.d.ts.map +1 -0
- package/dist/graph/mappers/task-mapper.js +27 -0
- package/dist/graph/mappers/task-mapper.js.map +1 -0
- package/dist/graph/mappers/utils.d.ts +97 -0
- package/dist/graph/mappers/utils.d.ts.map +1 -0
- package/dist/graph/mappers/utils.js +186 -0
- package/dist/graph/mappers/utils.js.map +1 -0
- package/dist/graph/repository.d.ts +1104 -0
- package/dist/graph/repository.d.ts.map +1 -0
- package/dist/graph/repository.js +2999 -0
- package/dist/graph/repository.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +6052 -0
- package/dist/index.js.map +1 -0
- package/dist/parsers/html-stripper.d.ts +41 -0
- package/dist/parsers/html-stripper.d.ts.map +1 -0
- package/dist/parsers/html-stripper.js +179 -0
- package/dist/parsers/html-stripper.js.map +1 -0
- package/dist/parsers/index.d.ts +12 -0
- package/dist/parsers/index.d.ts.map +1 -0
- package/dist/parsers/index.js +12 -0
- package/dist/parsers/index.js.map +1 -0
- package/dist/parsers/olk15.d.ts +87 -0
- package/dist/parsers/olk15.d.ts.map +1 -0
- package/dist/parsers/olk15.js +368 -0
- package/dist/parsers/olk15.js.map +1 -0
- package/dist/signature.d.ts +22 -0
- package/dist/signature.d.ts.map +1 -0
- package/dist/signature.js +89 -0
- package/dist/signature.js.map +1 -0
- package/dist/tools/calendar-permissions.d.ts +79 -0
- package/dist/tools/calendar-permissions.d.ts.map +1 -0
- package/dist/tools/calendar-permissions.js +121 -0
- package/dist/tools/calendar-permissions.js.map +1 -0
- package/dist/tools/calendar.d.ts +208 -0
- package/dist/tools/calendar.d.ts.map +1 -0
- package/dist/tools/calendar.js +247 -0
- package/dist/tools/calendar.js.map +1 -0
- package/dist/tools/categories.d.ts +94 -0
- package/dist/tools/categories.d.ts.map +1 -0
- package/dist/tools/categories.js +117 -0
- package/dist/tools/categories.js.map +1 -0
- package/dist/tools/checklist-items.d.ts +89 -0
- package/dist/tools/checklist-items.d.ts.map +1 -0
- package/dist/tools/checklist-items.js +140 -0
- package/dist/tools/checklist-items.js.map +1 -0
- package/dist/tools/contacts.d.ts +94 -0
- package/dist/tools/contacts.d.ts.map +1 -0
- package/dist/tools/contacts.js +134 -0
- package/dist/tools/contacts.js.map +1 -0
- package/dist/tools/excel.d.ts +96 -0
- package/dist/tools/excel.d.ts.map +1 -0
- package/dist/tools/excel.js +165 -0
- package/dist/tools/excel.js.map +1 -0
- package/dist/tools/focused-overrides.d.ts +70 -0
- package/dist/tools/focused-overrides.d.ts.map +1 -0
- package/dist/tools/focused-overrides.js +117 -0
- package/dist/tools/focused-overrides.js.map +1 -0
- package/dist/tools/index.d.ts +22 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +34 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/linked-resources.d.ts +74 -0
- package/dist/tools/linked-resources.d.ts.map +1 -0
- package/dist/tools/linked-resources.js +122 -0
- package/dist/tools/linked-resources.js.map +1 -0
- package/dist/tools/mail-rules.d.ts +98 -0
- package/dist/tools/mail-rules.d.ts.map +1 -0
- package/dist/tools/mail-rules.js +169 -0
- package/dist/tools/mail-rules.js.map +1 -0
- package/dist/tools/mail-send.d.ts +314 -0
- package/dist/tools/mail-send.d.ts.map +1 -0
- package/dist/tools/mail-send.js +555 -0
- package/dist/tools/mail-send.js.map +1 -0
- package/dist/tools/mail.d.ts +127 -0
- package/dist/tools/mail.d.ts.map +1 -0
- package/dist/tools/mail.js +311 -0
- package/dist/tools/mail.js.map +1 -0
- package/dist/tools/mailbox-organization.d.ts +301 -0
- package/dist/tools/mailbox-organization.d.ts.map +1 -0
- package/dist/tools/mailbox-organization.js +541 -0
- package/dist/tools/mailbox-organization.js.map +1 -0
- package/dist/tools/meetings.d.ts +114 -0
- package/dist/tools/meetings.d.ts.map +1 -0
- package/dist/tools/meetings.js +110 -0
- package/dist/tools/meetings.js.map +1 -0
- package/dist/tools/notes.d.ts +74 -0
- package/dist/tools/notes.d.ts.map +1 -0
- package/dist/tools/notes.js +136 -0
- package/dist/tools/notes.js.map +1 -0
- package/dist/tools/onedrive.d.ts +194 -0
- package/dist/tools/onedrive.d.ts.map +1 -0
- package/dist/tools/onedrive.js +257 -0
- package/dist/tools/onedrive.js.map +1 -0
- package/dist/tools/people.d.ts +129 -0
- package/dist/tools/people.d.ts.map +1 -0
- package/dist/tools/people.js +195 -0
- package/dist/tools/people.js.map +1 -0
- package/dist/tools/planner-visualization.d.ts +91 -0
- package/dist/tools/planner-visualization.d.ts.map +1 -0
- package/dist/tools/planner-visualization.js +192 -0
- package/dist/tools/planner-visualization.js.map +1 -0
- package/dist/tools/planner.d.ts +288 -0
- package/dist/tools/planner.d.ts.map +1 -0
- package/dist/tools/planner.js +368 -0
- package/dist/tools/planner.js.map +1 -0
- package/dist/tools/scheduling.d.ts +49 -0
- package/dist/tools/scheduling.d.ts.map +1 -0
- package/dist/tools/scheduling.js +115 -0
- package/dist/tools/scheduling.js.map +1 -0
- package/dist/tools/sharepoint.d.ts +115 -0
- package/dist/tools/sharepoint.d.ts.map +1 -0
- package/dist/tools/sharepoint.js +99 -0
- package/dist/tools/sharepoint.js.map +1 -0
- package/dist/tools/task-attachments.d.ts +74 -0
- package/dist/tools/task-attachments.d.ts.map +1 -0
- package/dist/tools/task-attachments.js +122 -0
- package/dist/tools/task-attachments.js.map +1 -0
- package/dist/tools/tasks.d.ts +74 -0
- package/dist/tools/tasks.d.ts.map +1 -0
- package/dist/tools/tasks.js +126 -0
- package/dist/tools/tasks.js.map +1 -0
- package/dist/tools/teams.d.ts +389 -0
- package/dist/tools/teams.d.ts.map +1 -0
- package/dist/tools/teams.js +546 -0
- package/dist/tools/teams.js.map +1 -0
- package/dist/types/calendar.d.ts +60 -0
- package/dist/types/calendar.d.ts.map +1 -0
- package/dist/types/calendar.js +15 -0
- package/dist/types/calendar.js.map +1 -0
- package/dist/types/contacts.d.ts +96 -0
- package/dist/types/contacts.d.ts.map +1 -0
- package/dist/types/contacts.js +41 -0
- package/dist/types/contacts.js.map +1 -0
- package/dist/types/index.d.ts +15 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +16 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/mail.d.ts +108 -0
- package/dist/types/mail.d.ts.map +1 -0
- package/dist/types/mail.js +40 -0
- package/dist/types/mail.js.map +1 -0
- package/dist/types/notes.d.ts +26 -0
- package/dist/types/notes.d.ts.map +1 -0
- package/dist/types/notes.js +6 -0
- package/dist/types/notes.js.map +1 -0
- package/dist/types/tasks.d.ts +31 -0
- package/dist/types/tasks.d.ts.map +1 -0
- package/dist/types/tasks.js +6 -0
- package/dist/types/tasks.js.map +1 -0
- package/dist/utils/dates.d.ts +66 -0
- package/dist/utils/dates.d.ts.map +1 -0
- package/dist/utils/dates.js +94 -0
- package/dist/utils/dates.js.map +1 -0
- package/dist/utils/errors.d.ts +218 -0
- package/dist/utils/errors.d.ts.map +1 -0
- package/dist/utils/errors.js +306 -0
- package/dist/utils/errors.js.map +1 -0
- package/dist/utils/index.d.ts +10 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +10 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/visualization/html.d.ts +26 -0
- package/dist/visualization/html.d.ts.map +1 -0
- package/dist/visualization/html.js +306 -0
- package/dist/visualization/html.js.map +1 -0
- package/dist/visualization/markdown.d.ts +25 -0
- package/dist/visualization/markdown.d.ts.map +1 -0
- package/dist/visualization/markdown.js +186 -0
- package/dist/visualization/markdown.js.map +1 -0
- package/dist/visualization/mermaid.d.ts +25 -0
- package/dist/visualization/mermaid.d.ts.map +1 -0
- package/dist/visualization/mermaid.js +158 -0
- package/dist/visualization/mermaid.js.map +1 -0
- package/dist/visualization/svg.d.ts +25 -0
- package/dist/visualization/svg.d.ts.map +1 -0
- package/dist/visualization/svg.js +282 -0
- package/dist/visualization/svg.js.map +1 -0
- package/dist/visualization/types.d.ts +43 -0
- package/dist/visualization/types.d.ts.map +1 -0
- package/dist/visualization/types.js +34 -0
- package/dist/visualization/types.js.map +1 -0
- package/package.json +88 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 JBC Tech Solutions, LLC
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,667 @@
|
|
|
1
|
+
# @jbctechsolutions/mcp-office365
|
|
2
|
+
|
|
3
|
+
[](https://www.npmjs.com/package/@jbctechsolutions/mcp-office365)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://nodejs.org)
|
|
6
|
+
|
|
7
|
+
MCP server for Microsoft 365 -- mail, calendar, contacts, tasks, teams, people, and planner.
|
|
8
|
+
|
|
9
|
+
A [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server that provides **181 tools** for full read/write access to Microsoft 365. Manage your emails, calendar events, contacts, tasks, notes, Teams channels and chats, people directory, and Planner boards directly through MCP.
|
|
10
|
+
|
|
11
|
+
## Features Overview
|
|
12
|
+
|
|
13
|
+
| Category | Tools | Description |
|
|
14
|
+
|----------|------:|-------------|
|
|
15
|
+
| Mail -- Reading | 9 | Folders, search, delta sync, conversations, unread counts |
|
|
16
|
+
| Mail -- Sending & Drafts | 16 | Send, draft, reply, forward with two-phase approval |
|
|
17
|
+
| Mail -- Signatures | 2 | Email signature management |
|
|
18
|
+
| Mail -- Organization | 24 | Read/unread, flags, categories, importance, move, delete, batch ops |
|
|
19
|
+
| Mail -- Rules | 4 | Inbox rule management |
|
|
20
|
+
| Mail -- Categories | 4 | Master category management |
|
|
21
|
+
| Mail -- Focused Inbox | 4 | Focused inbox override management |
|
|
22
|
+
| Mail -- Settings & Auto-Replies | 4 | Automatic replies, mailbox settings |
|
|
23
|
+
| Mail -- Tips & Headers | 3 | Mail tips, message headers, MIME export |
|
|
24
|
+
| Attachments | 2 | List and download email attachments |
|
|
25
|
+
| Calendar -- Events | 11 | List, search, create, update, delete, RSVP, recurring instances |
|
|
26
|
+
| Calendar -- Groups | 2 | Calendar group management |
|
|
27
|
+
| Calendar -- Permissions | 4 | Calendar sharing permissions |
|
|
28
|
+
| Calendar -- Rooms | 2 | Room lists and meeting rooms |
|
|
29
|
+
| Contacts & Folders | 13 | CRUD contacts, contact folders, photos |
|
|
30
|
+
| Tasks & Task Lists | 13 | To Do tasks with recurrence, task lists |
|
|
31
|
+
| Checklist Items | 5 | Subtasks on To Do tasks |
|
|
32
|
+
| Linked Resources | 4 | Linked resources on To Do tasks |
|
|
33
|
+
| Task Attachments | 4 | File attachments on To Do tasks |
|
|
34
|
+
| Notes (AppleScript only) | 3 | List, read, and search Outlook notes |
|
|
35
|
+
| Scheduling | 2 | Free/busy availability, meeting time suggestions |
|
|
36
|
+
| Teams -- Channels | 8 | Channel CRUD, team members |
|
|
37
|
+
| Teams -- Channel Messages | 6 | Read and send channel messages with replies |
|
|
38
|
+
| Teams -- Chats | 6 | 1:1 and group chats, send messages |
|
|
39
|
+
| People & Presence | 8 | People search, org chart, presence status |
|
|
40
|
+
| Planner | 17 | Plans, buckets, tasks, task details with ETag |
|
|
41
|
+
| Accounts | 1 | List configured Exchange accounts |
|
|
42
|
+
| **Total** | **181** | |
|
|
43
|
+
|
|
44
|
+
## Quick Start
|
|
45
|
+
|
|
46
|
+
### Install and run
|
|
47
|
+
|
|
48
|
+
```bash
|
|
49
|
+
npx -y @jbctechsolutions/mcp-office365
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
By default the server uses the **Microsoft Graph API** backend (cross-platform, full read/write access).
|
|
53
|
+
|
|
54
|
+
To use the **AppleScript backend** (classic Outlook for Mac only, limited features), set the environment variable:
|
|
55
|
+
|
|
56
|
+
```bash
|
|
57
|
+
USE_APPLESCRIPT=1
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
### Pre-authenticate (optional)
|
|
61
|
+
|
|
62
|
+
```bash
|
|
63
|
+
npx @jbctechsolutions/mcp-office365 auth
|
|
64
|
+
npx @jbctechsolutions/mcp-office365 auth --status
|
|
65
|
+
npx @jbctechsolutions/mcp-office365 auth --logout
|
|
66
|
+
```
|
|
67
|
+
|
|
68
|
+
### Claude Desktop configuration
|
|
69
|
+
|
|
70
|
+
Add to `~/Library/Application Support/Claude/claude_desktop_config.json`:
|
|
71
|
+
|
|
72
|
+
**Graph API backend (default):**
|
|
73
|
+
```json
|
|
74
|
+
{
|
|
75
|
+
"mcpServers": {
|
|
76
|
+
"office365": {
|
|
77
|
+
"command": "npx",
|
|
78
|
+
"args": ["-y", "@jbctechsolutions/mcp-office365"]
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
**AppleScript backend** (macOS + classic Outlook only):
|
|
85
|
+
```json
|
|
86
|
+
{
|
|
87
|
+
"mcpServers": {
|
|
88
|
+
"office365": {
|
|
89
|
+
"command": "npx",
|
|
90
|
+
"args": ["-y", "@jbctechsolutions/mcp-office365"],
|
|
91
|
+
"env": {
|
|
92
|
+
"USE_APPLESCRIPT": "1"
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
```
|
|
98
|
+
|
|
99
|
+
### Claude Code configuration
|
|
100
|
+
|
|
101
|
+
**Option 1: Plugin (recommended)** -- add to `~/.claude/settings.json`:
|
|
102
|
+
|
|
103
|
+
```json
|
|
104
|
+
{
|
|
105
|
+
"extraKnownMarketplaces": {
|
|
106
|
+
"jbctechsolutions": {
|
|
107
|
+
"source": {
|
|
108
|
+
"source": "github",
|
|
109
|
+
"repo": "jbctechsolutions/mcp-office365"
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
},
|
|
113
|
+
"enabledPlugins": {
|
|
114
|
+
"office365@jbctechsolutions": true
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
**Option 2: Manual** -- add `.mcp.json` to your project or `~/.claude/.mcp.json` globally:
|
|
120
|
+
|
|
121
|
+
```json
|
|
122
|
+
{
|
|
123
|
+
"mcpServers": {
|
|
124
|
+
"office365": {
|
|
125
|
+
"command": "npx",
|
|
126
|
+
"args": ["-y", "@jbctechsolutions/mcp-office365"]
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Authentication
|
|
133
|
+
|
|
134
|
+
### Device Code Flow (Graph API)
|
|
135
|
+
|
|
136
|
+
1. The server displays a device code and URL
|
|
137
|
+
2. Visit https://microsoft.com/devicelogin
|
|
138
|
+
3. Enter the code and sign in with your Microsoft account
|
|
139
|
+
4. Grant the requested permissions
|
|
140
|
+
|
|
141
|
+
Tokens are stored in `~/.outlook-mcp/tokens.json` and refreshed automatically.
|
|
142
|
+
|
|
143
|
+
### Custom Azure AD App Registration
|
|
144
|
+
|
|
145
|
+
For production, work accounts with conditional access, or full control over the app lifecycle:
|
|
146
|
+
|
|
147
|
+
1. **Register** in [Azure Portal](https://portal.azure.com) > Azure Active Directory > App registrations > New registration
|
|
148
|
+
- Name: `Outlook MCP Server`
|
|
149
|
+
- Supported account types: Multitenant + personal accounts
|
|
150
|
+
- Redirect URI: leave blank
|
|
151
|
+
2. **Add API permissions** (Microsoft Graph > Delegated): see [Required Graph API Permissions](#required-graph-api-permissions) below
|
|
152
|
+
3. **Enable public client flows**: Authentication > Advanced settings > Allow public client flows > Yes
|
|
153
|
+
4. **Configure** with environment variables:
|
|
154
|
+
|
|
155
|
+
```json
|
|
156
|
+
{
|
|
157
|
+
"mcpServers": {
|
|
158
|
+
"office365": {
|
|
159
|
+
"command": "npx",
|
|
160
|
+
"args": ["-y", "@jbctechsolutions/mcp-office365"],
|
|
161
|
+
"env": {
|
|
162
|
+
"OUTLOOK_MCP_CLIENT_ID": "your-client-id-here",
|
|
163
|
+
"OUTLOOK_MCP_TENANT_ID": "common"
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
```
|
|
169
|
+
|
|
170
|
+
**Tenant options:** `common` (all accounts), `organizations` (work/school only), `consumers` (personal only), or a specific tenant ID.
|
|
171
|
+
|
|
172
|
+
## Tool Reference
|
|
173
|
+
|
|
174
|
+
All 181 tools listed below. Tools marked *(Graph API)* require `USE_GRAPH_API=1`. Tools marked *(AppleScript only)* are not available with Graph API.
|
|
175
|
+
|
|
176
|
+
<details>
|
|
177
|
+
<summary><strong>Accounts (1)</strong></summary>
|
|
178
|
+
|
|
179
|
+
| Tool | Description |
|
|
180
|
+
|------|-------------|
|
|
181
|
+
| `list_accounts` | List all Exchange accounts configured in Outlook |
|
|
182
|
+
|
|
183
|
+
</details>
|
|
184
|
+
|
|
185
|
+
<details>
|
|
186
|
+
<summary><strong>Mail -- Reading (9)</strong></summary>
|
|
187
|
+
|
|
188
|
+
| Tool | Description |
|
|
189
|
+
|------|-------------|
|
|
190
|
+
| `list_folders` | List all mail folders with message and unread counts |
|
|
191
|
+
| `list_emails` | List emails in a folder with pagination |
|
|
192
|
+
| `search_emails` | Search emails by subject, sender, or content |
|
|
193
|
+
| `search_emails_advanced` | Advanced email search using KQL (Keyword Query Language) *(Graph API)* |
|
|
194
|
+
| `check_new_emails` | Check for new/changed emails since last check via delta sync *(Graph API)* |
|
|
195
|
+
| `get_email` | Get full email details including body |
|
|
196
|
+
| `get_emails` | Get multiple emails by ID in a single call (max 25) |
|
|
197
|
+
| `list_conversation` | List all messages in an email conversation/thread *(Graph API)* |
|
|
198
|
+
| `get_unread_count` | Get unread email count |
|
|
199
|
+
|
|
200
|
+
</details>
|
|
201
|
+
|
|
202
|
+
<details>
|
|
203
|
+
<summary><strong>Mail -- Sending & Drafts (16)</strong></summary>
|
|
204
|
+
|
|
205
|
+
| Tool | Description |
|
|
206
|
+
|------|-------------|
|
|
207
|
+
| `send_email` | Send an email with optional CC, BCC, attachments, and HTML |
|
|
208
|
+
| `create_draft` | Create a draft email for later editing and sending |
|
|
209
|
+
| `update_draft` | Update an existing draft email |
|
|
210
|
+
| `add_draft_attachment` | Add a file attachment to a draft *(Graph API)* |
|
|
211
|
+
| `add_draft_inline_image` | Add an inline image to a draft for HTML body *(Graph API)* |
|
|
212
|
+
| `list_drafts` | List all draft emails |
|
|
213
|
+
| `prepare_send_draft` | Prepare to send a draft (two-phase approval) |
|
|
214
|
+
| `confirm_send_draft` | Confirm and send a draft |
|
|
215
|
+
| `prepare_send_email` | Prepare to send an email immediately (two-phase) |
|
|
216
|
+
| `confirm_send_email` | Confirm and send the email |
|
|
217
|
+
| `prepare_reply_email` | Prepare to reply to an email (two-phase) |
|
|
218
|
+
| `confirm_reply_email` | Confirm and send the reply |
|
|
219
|
+
| `prepare_forward_email` | Prepare to forward an email (two-phase) |
|
|
220
|
+
| `confirm_forward_email` | Confirm and forward the email |
|
|
221
|
+
| `reply_as_draft` | Create a reply (or reply-all) as an editable draft |
|
|
222
|
+
| `forward_as_draft` | Create a forward as an editable draft |
|
|
223
|
+
|
|
224
|
+
</details>
|
|
225
|
+
|
|
226
|
+
<details>
|
|
227
|
+
<summary><strong>Mail -- Organization (24)</strong></summary>
|
|
228
|
+
|
|
229
|
+
| Tool | Description |
|
|
230
|
+
|------|-------------|
|
|
231
|
+
| `mark_email_read` | Mark an email as read |
|
|
232
|
+
| `mark_email_unread` | Mark an email as unread |
|
|
233
|
+
| `set_email_flag` | Set a follow-up flag on an email |
|
|
234
|
+
| `clear_email_flag` | Clear the follow-up flag from an email |
|
|
235
|
+
| `set_email_categories` | Set categories on an email |
|
|
236
|
+
| `set_email_importance` | Set email importance level (low, normal, high) *(Graph API)* |
|
|
237
|
+
| `create_folder` | Create a new mail folder |
|
|
238
|
+
| `rename_folder` | Rename a mail folder |
|
|
239
|
+
| `move_folder` | Move a mail folder under a different parent |
|
|
240
|
+
| `prepare_delete_email` | Prepare to delete an email (two-phase) |
|
|
241
|
+
| `confirm_delete_email` | Confirm email deletion |
|
|
242
|
+
| `prepare_move_email` | Prepare to move an email to another folder (two-phase) |
|
|
243
|
+
| `confirm_move_email` | Confirm email move |
|
|
244
|
+
| `prepare_archive_email` | Prepare to archive an email (two-phase) |
|
|
245
|
+
| `confirm_archive_email` | Confirm email archive |
|
|
246
|
+
| `prepare_junk_email` | Prepare to mark an email as junk (two-phase) |
|
|
247
|
+
| `confirm_junk_email` | Confirm marking as junk |
|
|
248
|
+
| `prepare_delete_folder` | Prepare to delete a mail folder (two-phase) |
|
|
249
|
+
| `confirm_delete_folder` | Confirm folder deletion |
|
|
250
|
+
| `prepare_empty_folder` | Prepare to empty a folder (two-phase) |
|
|
251
|
+
| `confirm_empty_folder` | Confirm emptying folder |
|
|
252
|
+
| `prepare_batch_delete_emails` | Prepare to batch delete multiple emails (two-phase) |
|
|
253
|
+
| `prepare_batch_move_emails` | Prepare to batch move multiple emails (two-phase) |
|
|
254
|
+
| `confirm_batch_operation` | Confirm a batch delete or move operation |
|
|
255
|
+
|
|
256
|
+
</details>
|
|
257
|
+
|
|
258
|
+
<details>
|
|
259
|
+
<summary><strong>Mail -- Rules (4)</strong> <em>(Graph API)</em></summary>
|
|
260
|
+
|
|
261
|
+
| Tool | Description |
|
|
262
|
+
|------|-------------|
|
|
263
|
+
| `list_mail_rules` | List all inbox mail rules |
|
|
264
|
+
| `create_mail_rule` | Create an inbox rule with conditions and actions |
|
|
265
|
+
| `prepare_delete_mail_rule` | Prepare to delete a mail rule (two-phase) |
|
|
266
|
+
| `confirm_delete_mail_rule` | Confirm mail rule deletion |
|
|
267
|
+
|
|
268
|
+
</details>
|
|
269
|
+
|
|
270
|
+
<details>
|
|
271
|
+
<summary><strong>Mail -- Categories (4)</strong> <em>(Graph API)</em></summary>
|
|
272
|
+
|
|
273
|
+
| Tool | Description |
|
|
274
|
+
|------|-------------|
|
|
275
|
+
| `list_categories` | List all master categories |
|
|
276
|
+
| `create_category` | Create a new master category with a color preset |
|
|
277
|
+
| `prepare_delete_category` | Prepare to delete a master category (two-phase) |
|
|
278
|
+
| `confirm_delete_category` | Confirm category deletion |
|
|
279
|
+
|
|
280
|
+
</details>
|
|
281
|
+
|
|
282
|
+
<details>
|
|
283
|
+
<summary><strong>Mail -- Focused Inbox (4)</strong> <em>(Graph API)</em></summary>
|
|
284
|
+
|
|
285
|
+
| Tool | Description |
|
|
286
|
+
|------|-------------|
|
|
287
|
+
| `list_focused_overrides` | List all focused inbox overrides |
|
|
288
|
+
| `create_focused_override` | Create a focused inbox override for a sender |
|
|
289
|
+
| `prepare_delete_focused_override` | Prepare to delete a focused inbox override (two-phase) |
|
|
290
|
+
| `confirm_delete_focused_override` | Confirm focused inbox override deletion |
|
|
291
|
+
|
|
292
|
+
</details>
|
|
293
|
+
|
|
294
|
+
<details>
|
|
295
|
+
<summary><strong>Mail -- Settings & Auto-Replies (4)</strong> <em>(Graph API)</em></summary>
|
|
296
|
+
|
|
297
|
+
| Tool | Description |
|
|
298
|
+
|------|-------------|
|
|
299
|
+
| `get_automatic_replies` | Get automatic replies (out-of-office) settings |
|
|
300
|
+
| `set_automatic_replies` | Set automatic replies (out-of-office) settings |
|
|
301
|
+
| `get_mailbox_settings` | Get mailbox settings (language, time zone, formats, working hours) |
|
|
302
|
+
| `update_mailbox_settings` | Update mailbox settings (language, time zone, formats) |
|
|
303
|
+
|
|
304
|
+
</details>
|
|
305
|
+
|
|
306
|
+
<details>
|
|
307
|
+
<summary><strong>Mail -- Tips & Headers (3)</strong> <em>(Graph API)</em></summary>
|
|
308
|
+
|
|
309
|
+
| Tool | Description |
|
|
310
|
+
|------|-------------|
|
|
311
|
+
| `get_mail_tips` | Get mail tips (auto-replies, mailbox full, restrictions) for addresses |
|
|
312
|
+
| `get_message_headers` | Get internet message headers (SPF, DKIM, routing) |
|
|
313
|
+
| `get_message_mime` | Download the full MIME content (.eml) of an email |
|
|
314
|
+
|
|
315
|
+
</details>
|
|
316
|
+
|
|
317
|
+
<details>
|
|
318
|
+
<summary><strong>Attachments (2)</strong></summary>
|
|
319
|
+
|
|
320
|
+
| Tool | Description |
|
|
321
|
+
|------|-------------|
|
|
322
|
+
| `list_attachments` | List attachment metadata (name, size, type) for an email |
|
|
323
|
+
| `download_attachment` | Download an email attachment to disk |
|
|
324
|
+
|
|
325
|
+
</details>
|
|
326
|
+
|
|
327
|
+
<details>
|
|
328
|
+
<summary><strong>Calendar -- Events (11)</strong></summary>
|
|
329
|
+
|
|
330
|
+
| Tool | Description |
|
|
331
|
+
|------|-------------|
|
|
332
|
+
| `list_calendars` | List all calendar folders |
|
|
333
|
+
| `list_events` | List calendar events with date range filtering |
|
|
334
|
+
| `get_event` | Get event details |
|
|
335
|
+
| `search_events` | Search events by title and/or date range |
|
|
336
|
+
| `create_event` | Create a calendar event (supports Teams online meetings) |
|
|
337
|
+
| `update_event` | Update event details (single instance or series) |
|
|
338
|
+
| `respond_to_event` | Accept, decline, or tentatively accept an invitation |
|
|
339
|
+
| `delete_event` | Delete a calendar event or recurring series |
|
|
340
|
+
| `prepare_delete_event` | Prepare to delete a calendar event (two-phase) *(Graph API)* |
|
|
341
|
+
| `confirm_delete_event` | Confirm calendar event deletion |
|
|
342
|
+
| `list_event_instances` | List instances of a recurring event in a date range *(Graph API)* |
|
|
343
|
+
|
|
344
|
+
</details>
|
|
345
|
+
|
|
346
|
+
<details>
|
|
347
|
+
<summary><strong>Calendar -- Groups (2)</strong> <em>(Graph API)</em></summary>
|
|
348
|
+
|
|
349
|
+
| Tool | Description |
|
|
350
|
+
|------|-------------|
|
|
351
|
+
| `list_calendar_groups` | List all calendar groups |
|
|
352
|
+
| `create_calendar_group` | Create a new calendar group |
|
|
353
|
+
|
|
354
|
+
</details>
|
|
355
|
+
|
|
356
|
+
<details>
|
|
357
|
+
<summary><strong>Calendar -- Permissions (4)</strong> <em>(Graph API)</em></summary>
|
|
358
|
+
|
|
359
|
+
| Tool | Description |
|
|
360
|
+
|------|-------------|
|
|
361
|
+
| `list_calendar_permissions` | List sharing permissions for a calendar |
|
|
362
|
+
| `create_calendar_permission` | Share a calendar by creating a permission |
|
|
363
|
+
| `prepare_delete_calendar_permission` | Prepare to delete a calendar permission (two-phase) |
|
|
364
|
+
| `confirm_delete_calendar_permission` | Confirm calendar permission deletion |
|
|
365
|
+
|
|
366
|
+
</details>
|
|
367
|
+
|
|
368
|
+
<details>
|
|
369
|
+
<summary><strong>Calendar -- Rooms (2)</strong> <em>(Graph API)</em></summary>
|
|
370
|
+
|
|
371
|
+
| Tool | Description |
|
|
372
|
+
|------|-------------|
|
|
373
|
+
| `list_room_lists` | List all room lists (building/floor groupings) |
|
|
374
|
+
| `list_rooms` | List meeting rooms, optionally filtered by room list |
|
|
375
|
+
|
|
376
|
+
</details>
|
|
377
|
+
|
|
378
|
+
<details>
|
|
379
|
+
<summary><strong>Contacts & Folders (13)</strong></summary>
|
|
380
|
+
|
|
381
|
+
| Tool | Description |
|
|
382
|
+
|------|-------------|
|
|
383
|
+
| `list_contacts` | List contacts with pagination |
|
|
384
|
+
| `search_contacts` | Search contacts by name |
|
|
385
|
+
| `get_contact` | Get contact details |
|
|
386
|
+
| `create_contact` | Create a new contact *(Graph API)* |
|
|
387
|
+
| `update_contact` | Update contact details *(Graph API)* |
|
|
388
|
+
| `prepare_delete_contact` | Prepare to delete a contact (two-phase) *(Graph API)* |
|
|
389
|
+
| `confirm_delete_contact` | Confirm contact deletion |
|
|
390
|
+
| `get_contact_photo` | Download a contact's photo *(Graph API)* |
|
|
391
|
+
| `set_contact_photo` | Set or update a contact's photo *(Graph API)* |
|
|
392
|
+
| `list_contact_folders` | List all contact folders *(Graph API)* |
|
|
393
|
+
| `create_contact_folder` | Create a contact folder *(Graph API)* |
|
|
394
|
+
| `prepare_delete_contact_folder` | Prepare to delete a contact folder (two-phase) *(Graph API)* |
|
|
395
|
+
| `confirm_delete_contact_folder` | Confirm contact folder deletion |
|
|
396
|
+
|
|
397
|
+
</details>
|
|
398
|
+
|
|
399
|
+
<details>
|
|
400
|
+
<summary><strong>Tasks & Task Lists (13)</strong></summary>
|
|
401
|
+
|
|
402
|
+
| Tool | Description |
|
|
403
|
+
|------|-------------|
|
|
404
|
+
| `list_task_lists` | List all task lists (Microsoft To Do) *(Graph API)* |
|
|
405
|
+
| `list_tasks` | List tasks with pagination and filtering |
|
|
406
|
+
| `search_tasks` | Search tasks by name |
|
|
407
|
+
| `get_task` | Get task details |
|
|
408
|
+
| `create_task` | Create a task with optional recurrence *(Graph API)* |
|
|
409
|
+
| `update_task` | Update task details with optional recurrence *(Graph API)* |
|
|
410
|
+
| `complete_task` | Mark a task as completed *(Graph API)* |
|
|
411
|
+
| `create_task_list` | Create a new task list *(Graph API)* |
|
|
412
|
+
| `rename_task_list` | Rename a task list *(Graph API)* |
|
|
413
|
+
| `prepare_delete_task` | Prepare to delete a task (two-phase) *(Graph API)* |
|
|
414
|
+
| `confirm_delete_task` | Confirm task deletion |
|
|
415
|
+
| `prepare_delete_task_list` | Prepare to delete a task list (two-phase) *(Graph API)* |
|
|
416
|
+
| `confirm_delete_task_list` | Confirm task list deletion |
|
|
417
|
+
|
|
418
|
+
</details>
|
|
419
|
+
|
|
420
|
+
<details>
|
|
421
|
+
<summary><strong>Checklist Items (5)</strong> <em>(Graph API)</em></summary>
|
|
422
|
+
|
|
423
|
+
| Tool | Description |
|
|
424
|
+
|------|-------------|
|
|
425
|
+
| `list_checklist_items` | List checklist items (subtasks) on a To Do task |
|
|
426
|
+
| `create_checklist_item` | Create a checklist item on a To Do task |
|
|
427
|
+
| `update_checklist_item` | Update a checklist item (toggle check, rename) |
|
|
428
|
+
| `prepare_delete_checklist_item` | Prepare to delete a checklist item (two-phase) |
|
|
429
|
+
| `confirm_delete_checklist_item` | Confirm checklist item deletion |
|
|
430
|
+
|
|
431
|
+
</details>
|
|
432
|
+
|
|
433
|
+
<details>
|
|
434
|
+
<summary><strong>Linked Resources (4)</strong> <em>(Graph API)</em></summary>
|
|
435
|
+
|
|
436
|
+
| Tool | Description |
|
|
437
|
+
|------|-------------|
|
|
438
|
+
| `list_linked_resources` | List linked resources on a To Do task |
|
|
439
|
+
| `create_linked_resource` | Create a linked resource on a To Do task |
|
|
440
|
+
| `prepare_delete_linked_resource` | Prepare to delete a linked resource (two-phase) |
|
|
441
|
+
| `confirm_delete_linked_resource` | Confirm linked resource deletion |
|
|
442
|
+
|
|
443
|
+
</details>
|
|
444
|
+
|
|
445
|
+
<details>
|
|
446
|
+
<summary><strong>Task Attachments (4)</strong> <em>(Graph API)</em></summary>
|
|
447
|
+
|
|
448
|
+
| Tool | Description |
|
|
449
|
+
|------|-------------|
|
|
450
|
+
| `list_task_attachments` | List attachments on a To Do task |
|
|
451
|
+
| `create_task_attachment` | Attach a file to a To Do task (base64 encoded) |
|
|
452
|
+
| `prepare_delete_task_attachment` | Prepare to delete a task attachment (two-phase) |
|
|
453
|
+
| `confirm_delete_task_attachment` | Confirm task attachment deletion |
|
|
454
|
+
|
|
455
|
+
</details>
|
|
456
|
+
|
|
457
|
+
<details>
|
|
458
|
+
<summary><strong>Notes (3)</strong> <em>(AppleScript only)</em></summary>
|
|
459
|
+
|
|
460
|
+
| Tool | Description |
|
|
461
|
+
|------|-------------|
|
|
462
|
+
| `list_notes` | List notes with pagination |
|
|
463
|
+
| `get_note` | Get note details |
|
|
464
|
+
| `search_notes` | Search notes by content |
|
|
465
|
+
|
|
466
|
+
> Notes are only available with the AppleScript backend. Microsoft Graph API does not provide access to Outlook Notes.
|
|
467
|
+
|
|
468
|
+
</details>
|
|
469
|
+
|
|
470
|
+
<details>
|
|
471
|
+
<summary><strong>Scheduling (2)</strong> <em>(Graph API)</em></summary>
|
|
472
|
+
|
|
473
|
+
| Tool | Description |
|
|
474
|
+
|------|-------------|
|
|
475
|
+
| `check_availability` | Check free/busy availability for people in a time window |
|
|
476
|
+
| `find_meeting_times` | Find available meeting time slots for a group of attendees |
|
|
477
|
+
|
|
478
|
+
</details>
|
|
479
|
+
|
|
480
|
+
<details>
|
|
481
|
+
<summary><strong>Mail -- Signatures (2)</strong> <em>(Graph API)</em></summary>
|
|
482
|
+
|
|
483
|
+
| Tool | Description |
|
|
484
|
+
|------|-------------|
|
|
485
|
+
| `set_signature` | Save an email signature auto-appended to outgoing emails |
|
|
486
|
+
| `get_signature` | Get the currently stored email signature |
|
|
487
|
+
|
|
488
|
+
</details>
|
|
489
|
+
|
|
490
|
+
<details>
|
|
491
|
+
<summary><strong>Teams -- Channels (8)</strong> <em>(Graph API)</em></summary>
|
|
492
|
+
|
|
493
|
+
| Tool | Description |
|
|
494
|
+
|------|-------------|
|
|
495
|
+
| `list_teams` | List all Microsoft Teams the user has joined |
|
|
496
|
+
| `list_channels` | List all channels in a team |
|
|
497
|
+
| `get_channel` | Get details for a specific channel |
|
|
498
|
+
| `create_channel` | Create a new channel in a team |
|
|
499
|
+
| `update_channel` | Update a channel name or description |
|
|
500
|
+
| `prepare_delete_channel` | Prepare to delete a channel (two-phase) |
|
|
501
|
+
| `confirm_delete_channel` | Confirm channel deletion |
|
|
502
|
+
| `list_team_members` | List all members of a team |
|
|
503
|
+
|
|
504
|
+
</details>
|
|
505
|
+
|
|
506
|
+
<details>
|
|
507
|
+
<summary><strong>Teams -- Channel Messages (6)</strong> <em>(Graph API)</em></summary>
|
|
508
|
+
|
|
509
|
+
| Tool | Description |
|
|
510
|
+
|------|-------------|
|
|
511
|
+
| `list_channel_messages` | List recent messages in a channel |
|
|
512
|
+
| `get_channel_message` | Get a specific channel message with its replies |
|
|
513
|
+
| `prepare_send_channel_message` | Prepare to send a message to a channel (two-phase) |
|
|
514
|
+
| `confirm_send_channel_message` | Confirm sending a channel message |
|
|
515
|
+
| `prepare_reply_channel_message` | Prepare to reply to a channel message (two-phase) |
|
|
516
|
+
| `confirm_reply_channel_message` | Confirm replying to a channel message |
|
|
517
|
+
|
|
518
|
+
</details>
|
|
519
|
+
|
|
520
|
+
<details>
|
|
521
|
+
<summary><strong>Teams -- Chats (6)</strong> <em>(Graph API)</em></summary>
|
|
522
|
+
|
|
523
|
+
| Tool | Description |
|
|
524
|
+
|------|-------------|
|
|
525
|
+
| `list_chats` | List recent 1:1 and group chats |
|
|
526
|
+
| `get_chat` | Get details of a specific chat |
|
|
527
|
+
| `list_chat_messages` | List recent messages in a chat |
|
|
528
|
+
| `prepare_send_chat_message` | Prepare to send a message in a chat (two-phase) |
|
|
529
|
+
| `confirm_send_chat_message` | Confirm sending a chat message |
|
|
530
|
+
| `list_chat_members` | List members of a chat |
|
|
531
|
+
|
|
532
|
+
</details>
|
|
533
|
+
|
|
534
|
+
<details>
|
|
535
|
+
<summary><strong>People & Presence (8)</strong> <em>(Graph API)</em></summary>
|
|
536
|
+
|
|
537
|
+
| Tool | Description |
|
|
538
|
+
|------|-------------|
|
|
539
|
+
| `list_relevant_people` | List AI-ranked relevant people for the current user |
|
|
540
|
+
| `search_people` | Search people by name or email |
|
|
541
|
+
| `get_manager` | Get the current user's manager |
|
|
542
|
+
| `get_direct_reports` | Get the current user's direct reports |
|
|
543
|
+
| `get_user_profile` | Get a user's profile information |
|
|
544
|
+
| `get_user_photo` | Get a user's profile photo |
|
|
545
|
+
| `get_user_presence` | Get a user's presence/availability status |
|
|
546
|
+
| `get_users_presence` | Batch get presence status for multiple users |
|
|
547
|
+
|
|
548
|
+
</details>
|
|
549
|
+
|
|
550
|
+
<details>
|
|
551
|
+
<summary><strong>Planner (17)</strong> <em>(Graph API)</em></summary>
|
|
552
|
+
|
|
553
|
+
| Tool | Description |
|
|
554
|
+
|------|-------------|
|
|
555
|
+
| `list_plans` | List all Planner plans the user has access to |
|
|
556
|
+
| `get_plan` | Get details for a specific Planner plan |
|
|
557
|
+
| `create_plan` | Create a new Planner plan in a Microsoft 365 group |
|
|
558
|
+
| `update_plan` | Update a Planner plan title |
|
|
559
|
+
| `list_buckets` | List all buckets in a Planner plan |
|
|
560
|
+
| `create_bucket` | Create a new bucket in a Planner plan |
|
|
561
|
+
| `update_bucket` | Update a Planner bucket name |
|
|
562
|
+
| `prepare_delete_bucket` | Prepare to delete a Planner bucket (two-phase) |
|
|
563
|
+
| `confirm_delete_bucket` | Confirm Planner bucket deletion |
|
|
564
|
+
| `list_planner_tasks` | List all tasks in a Planner plan |
|
|
565
|
+
| `get_planner_task` | Get details for a specific Planner task |
|
|
566
|
+
| `create_planner_task` | Create a new task in a Planner plan |
|
|
567
|
+
| `update_planner_task` | Update a Planner task |
|
|
568
|
+
| `prepare_delete_planner_task` | Prepare to delete a Planner task (two-phase) |
|
|
569
|
+
| `confirm_delete_planner_task` | Confirm Planner task deletion |
|
|
570
|
+
| `get_planner_task_details` | Get task details (description, checklist, references) |
|
|
571
|
+
| `update_planner_task_details` | Update task details (requires ETag from get_planner_task_details) |
|
|
572
|
+
|
|
573
|
+
</details>
|
|
574
|
+
|
|
575
|
+
## Architecture
|
|
576
|
+
|
|
577
|
+
### Dual Backend
|
|
578
|
+
|
|
579
|
+
The server supports two backends:
|
|
580
|
+
|
|
581
|
+
- **Microsoft Graph API (default)** -- connects to Microsoft 365 cloud services. Full read/write across all 181 tools. No Outlook installation required. Works on macOS, Windows, and Linux.
|
|
582
|
+
- **AppleScript** (`USE_APPLESCRIPT=1`) -- communicates with classic Outlook for Mac via `osascript`. Works offline, no Microsoft account needed. Limited to reading mail, calendar, contacts, tasks, and notes, plus calendar write operations and email sending.
|
|
583
|
+
|
|
584
|
+
### Two-Phase Approval
|
|
585
|
+
|
|
586
|
+
Destructive operations (delete, send, move, forward, etc.) use a prepare/confirm pattern. The `prepare_*` call returns a preview and a short-lived approval token. The `confirm_*` call executes the action only with a valid token. This prevents accidental data loss.
|
|
587
|
+
|
|
588
|
+
### ID Caching
|
|
589
|
+
|
|
590
|
+
The server maintains an internal ID mapping layer. AppleScript and Graph API use different ID formats; the caching layer assigns stable numeric IDs so tool callers do not need to track backend-specific identifiers.
|
|
591
|
+
|
|
592
|
+
### ETag Caching
|
|
593
|
+
|
|
594
|
+
Planner resources use ETag-based concurrency control. The server caches ETags from read operations and automatically includes them in update/delete requests to prevent conflicts.
|
|
595
|
+
|
|
596
|
+
### Source Layout
|
|
597
|
+
|
|
598
|
+
```
|
|
599
|
+
src/
|
|
600
|
+
applescript/ AppleScript integration (legacy backend)
|
|
601
|
+
graph/ Microsoft Graph API integration (default)
|
|
602
|
+
auth/ MSAL authentication, device code flow, token cache
|
|
603
|
+
client/ Graph client wrapper with response caching
|
|
604
|
+
mappers/ Graph-to-internal type mappers
|
|
605
|
+
tools/ MCP tool implementations (mail-send, mailbox-organization, etc.)
|
|
606
|
+
types/ TypeScript type definitions
|
|
607
|
+
utils/ Date parsing, error handling, utilities
|
|
608
|
+
```
|
|
609
|
+
|
|
610
|
+
## Required Graph API Permissions
|
|
611
|
+
|
|
612
|
+
These delegated permissions are requested when using the Graph API backend:
|
|
613
|
+
|
|
614
|
+
| Permission | Purpose |
|
|
615
|
+
|------------|---------|
|
|
616
|
+
| `Mail.ReadWrite` | Read, send, and manage mail |
|
|
617
|
+
| `Calendars.ReadWrite` | Read and manage calendar events |
|
|
618
|
+
| `Contacts.ReadWrite` | Read and manage contacts |
|
|
619
|
+
| `Tasks.ReadWrite` | Read and manage To Do tasks |
|
|
620
|
+
| `User.Read` | Read user profile |
|
|
621
|
+
| `offline_access` | Token refresh (maintain access) |
|
|
622
|
+
| `ChannelMessage.Read.All` | Read Teams channel messages |
|
|
623
|
+
| `ChannelMessage.Send` | Send Teams channel messages |
|
|
624
|
+
| `Channel.ReadBasic.All` | Read Teams channel metadata |
|
|
625
|
+
| `Team.ReadBasic.All` | Read Teams metadata |
|
|
626
|
+
| `Chat.ReadWrite` | Read and send Teams chat messages |
|
|
627
|
+
| `ChatMessage.Send` | Send Teams chat messages |
|
|
628
|
+
| `People.Read` | Read relevant people |
|
|
629
|
+
| `User.ReadBasic.All` | Read basic user profiles and photos |
|
|
630
|
+
| `Presence.Read.All` | Read user presence/availability |
|
|
631
|
+
| `Group.Read.All` | Read Microsoft 365 groups (for Planner) |
|
|
632
|
+
|
|
633
|
+
## Environment Variables
|
|
634
|
+
|
|
635
|
+
| Variable | Description | Default |
|
|
636
|
+
|----------|-------------|---------|
|
|
637
|
+
| `USE_APPLESCRIPT` | Set to `1` or `true` for legacy AppleScript backend | (unset -- uses Graph API) |
|
|
638
|
+
| `OUTLOOK_MCP_CLIENT_ID` | Override the embedded Azure AD client ID | (embedded) |
|
|
639
|
+
| `OUTLOOK_MCP_TENANT_ID` | Azure AD tenant ID | `common` |
|
|
640
|
+
|
|
641
|
+
## Known Limitations
|
|
642
|
+
|
|
643
|
+
**AppleScript backend:**
|
|
644
|
+
- Google accounts in Outlook are not accessible (macOS/Outlook limitation). Use IMAP configuration or the Graph API backend instead.
|
|
645
|
+
- Write operations limited to calendar events and email sending. All other writes require Graph API.
|
|
646
|
+
|
|
647
|
+
**Graph API backend:**
|
|
648
|
+
- Outlook Notes are not available (Graph API does not expose them). Use AppleScript backend for notes.
|
|
649
|
+
|
|
650
|
+
## Contributing
|
|
651
|
+
|
|
652
|
+
We welcome contributions. Please see our [Contributing Guide](CONTRIBUTING.md) for details.
|
|
653
|
+
|
|
654
|
+
**Support policy:** This is a part-time, hobby project. Response times are best-effort (typically 1-2 weeks for bug reports). See [SUPPORT.md](SUPPORT.md) for details.
|
|
655
|
+
|
|
656
|
+
This project adheres to our [Code of Conduct](CODE_OF_CONDUCT.md).
|
|
657
|
+
|
|
658
|
+
## Support This Project
|
|
659
|
+
|
|
660
|
+
- Star this repository
|
|
661
|
+
- [GitHub Sponsors](https://github.com/sponsors/jbctechsolutions)
|
|
662
|
+
- [Buy Me a Coffee](https://buymeacoffee.com/jbctechsolutions)
|
|
663
|
+
- [PayPal](https://paypal.me/jbctechsolutions)
|
|
664
|
+
|
|
665
|
+
## License
|
|
666
|
+
|
|
667
|
+
MIT License -- Copyright (c) 2026 JBC Tech Solutions, LLC. See [LICENSE](LICENSE) for details.
|