@jbctechsolutions/mcp-outlook-mac 1.2.0 → 1.2.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.
Files changed (2) hide show
  1. package/README.md +70 -44
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -4,49 +4,87 @@
4
4
  [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
5
5
  [![Node.js Version](https://img.shields.io/node/v/mcp-outlook-mac)](https://nodejs.org)
6
6
 
7
- A [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server that provides read-only access to Outlook for Mac. Access your emails, calendar events, contacts, tasks, and notes directly through MCP tools.
7
+ A [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server that provides full access to Microsoft Outlook. Read, write, and manage your emails, calendar events, contacts, tasks, and notes directly through MCP tools.
8
8
 
9
9
  ## Features
10
10
 
11
- - **Mostly read-only** - Calendar event creation supported; all other data is read-only
11
+ - **72 tools** - Full read/write access to mail, calendar, contacts, and tasks
12
12
  - **Two backends** - AppleScript for classic Outlook, Microsoft Graph API for new Outlook
13
+ - **Two-phase approval** - Destructive operations (delete, send) require explicit confirmation
13
14
  - **Works offline** - AppleScript backend requires no network (Graph API requires internet)
14
15
  - **Fast and reliable** - Direct communication with Outlook or Microsoft servers
15
16
 
16
- ### Available Tools
17
+ ### Available Tools (72)
17
18
 
18
- **Accounts**
19
+ **Accounts (1)**
19
20
  - `list_accounts` - List all configured Outlook accounts
20
21
 
21
- **Mail**
22
- - `list_folders` - List all mail folders with unread counts (supports `account_id` filtering)
22
+ **Mail - Reading (5)**
23
+ - `list_folders` - List all mail folders with unread counts
23
24
  - `list_emails` - List emails in a folder with pagination
24
25
  - `search_emails` - Search emails by subject, sender, or content
25
26
  - `get_email` - Get full email details including body
26
27
  - `get_unread_count` - Get unread email count
27
- - `send_email` - Send an email with attachments and HTML support (AppleScript backend only)
28
28
 
29
- **Calendar**
29
+ **Mail - Sending & Drafts (12)** *(Graph API)*
30
+ - `send_email` - Send an email with attachments and HTML support
31
+ - `create_draft` - Create a new draft email
32
+ - `update_draft` - Update an existing draft
33
+ - `list_drafts` - List all draft emails
34
+ - `prepare_send_draft` / `confirm_send_draft` - Send a draft (two-phase)
35
+ - `prepare_send_email` / `confirm_send_email` - Compose and send (two-phase)
36
+ - `prepare_reply_email` / `confirm_reply_email` - Reply to a message (two-phase)
37
+ - `prepare_forward_email` / `confirm_forward_email` - Forward a message (two-phase)
38
+
39
+ **Attachments (2)**
40
+ - `list_attachments` - List attachment metadata for an email
41
+ - `download_attachment` - Download an email attachment to disk
42
+
43
+ **Mailbox Organization (23)** *(Graph API)*
44
+ - `mark_email_read` / `mark_email_unread` - Toggle read status
45
+ - `set_email_flag` / `clear_email_flag` - Flag/unflag emails
46
+ - `set_email_categories` - Categorize emails
47
+ - `create_folder` / `rename_folder` / `move_folder` - Folder management
48
+ - `prepare_delete_email` / `confirm_delete_email` - Delete email (two-phase)
49
+ - `prepare_move_email` / `confirm_move_email` - Move email (two-phase)
50
+ - `prepare_archive_email` / `confirm_archive_email` - Archive email (two-phase)
51
+ - `prepare_junk_email` / `confirm_junk_email` - Mark as junk (two-phase)
52
+ - `prepare_delete_folder` / `confirm_delete_folder` - Delete folder (two-phase)
53
+ - `prepare_empty_folder` / `confirm_empty_folder` - Empty folder (two-phase)
54
+ - `prepare_batch_delete_emails` / `prepare_batch_move_emails` / `confirm_batch_operation` - Batch operations (two-phase)
55
+
56
+ **Calendar - Reading (4)**
30
57
  - `list_calendars` - List all calendars
31
58
  - `list_events` - List events with date range filtering
32
59
  - `get_event` - Get event details
33
60
  - `search_events` - Search events by title
34
- - `create_event` - Create a new calendar event (AppleScript backend only)
35
- - `respond_to_event` - Accept, decline, or tentatively accept event invitations (AppleScript backend only)
36
- - `delete_event` - Delete a calendar event or recurring series (AppleScript backend only)
37
- - `update_event` - Update event details (title, time, location, etc.) (AppleScript backend only)
38
61
 
39
- **Contacts**
62
+ **Calendar - Writing (6)**
63
+ - `create_event` - Create a new calendar event
64
+ - `update_event` - Update event details (title, time, location, etc.)
65
+ - `respond_to_event` - Accept, decline, or tentatively accept invitations
66
+ - `delete_event` - Delete a calendar event or recurring series
67
+ - `prepare_delete_event` / `confirm_delete_event` - Delete event with two-phase approval *(Graph API)*
68
+
69
+ **Contacts (7)**
40
70
  - `list_contacts` - List all contacts with pagination
41
71
  - `search_contacts` - Search contacts by name
42
72
  - `get_contact` - Get contact details
73
+ - `create_contact` - Create a new contact *(Graph API)*
74
+ - `update_contact` - Update contact details *(Graph API)*
75
+ - `prepare_delete_contact` / `confirm_delete_contact` - Delete contact (two-phase) *(Graph API)*
43
76
 
44
- **Tasks**
77
+ **Tasks (9)**
45
78
  - `list_tasks` - List tasks with completion filtering
46
79
  - `get_task` - Get task details
47
80
  - `search_tasks` - Search tasks by name
81
+ - `create_task` - Create a new task *(Graph API)*
82
+ - `update_task` - Update task details *(Graph API)*
83
+ - `complete_task` - Mark a task as complete *(Graph API)*
84
+ - `create_task_list` - Create a new task list *(Graph API)*
85
+ - `prepare_delete_task` / `confirm_delete_task` - Delete task (two-phase) *(Graph API)*
48
86
 
49
- **Notes**
87
+ **Notes (3)** *(AppleScript only)*
50
88
  - `list_notes` - List all notes
51
89
  - `get_note` - Get note details
52
90
  - `search_notes` - Search notes by content
@@ -94,23 +132,10 @@ Google accounts configured in Outlook for Mac cannot be accessed via the AppleSc
94
132
 
95
133
  **Write Operations**
96
134
 
97
- Currently, write operations (event management, email sending) are only supported via the AppleScript backend. These features will be added to the Graph API backend in a future release:
98
- - Event RSVP operations
99
- - Event deletion
100
- - Event updates
101
- - Email sending
102
-
103
- For these operations, use the AppleScript backend with classic Outlook for Mac.
135
+ The AppleScript backend supports calendar event management (create, update, delete, RSVP) and email sending. All other write operations (drafts, mailbox organization, contacts, tasks) are only available via the Graph API backend.
104
136
 
105
137
  ### Microsoft Graph API Backend
106
138
 
107
- **🚧 Beta Status**
108
-
109
- The Graph API backend is currently in beta. Write operations are not yet implemented:
110
- - ❌ Event management (create, update, delete, RSVP) - Coming soon
111
- - ❌ Email sending - Coming soon
112
- - ✅ All read operations are fully functional and stable
113
-
114
139
  **Notes Not Available**
115
140
 
116
141
  Microsoft Graph API does not provide access to Outlook Notes. If you need access to notes, use the AppleScript backend.
@@ -146,15 +171,13 @@ Your authentication tokens are stored securely in `~/.outlook-mcp/tokens.json` a
146
171
  #### Required Permissions
147
172
 
148
173
  The Graph API backend requests these Microsoft Graph permissions:
149
- - `Mail.ReadWrite` - Read and send your mail
174
+ - `Mail.ReadWrite` - Read, send, and manage your mail
150
175
  - `Calendars.ReadWrite` - Read and manage your calendars
151
- - `Contacts.Read` - Read your contacts
152
- - `Tasks.Read` - Read your tasks
176
+ - `Contacts.ReadWrite` - Read and manage your contacts
177
+ - `Tasks.ReadWrite` - Read and manage your tasks
153
178
  - `User.Read` - Read your profile
154
179
  - `offline_access` - Maintain access (for token refresh)
155
180
 
156
- **Note:** Write operations (email sending, event management) are configured but not yet implemented in the Graph API backend. They currently only work via the AppleScript backend.
157
-
158
181
  #### Security Model - Shared Azure AD App
159
182
 
160
183
  This project provides a shared Azure AD application for quick-start convenience. **Here's what you should know:**
@@ -164,14 +187,13 @@ This project provides a shared Azure AD application for quick-start convenience.
164
187
  - **Only data you explicitly consent to** during the device code authentication flow
165
188
  - **Only when you're actively using** the MCP server
166
189
  - **Tokens are stored locally** on your machine (`~/.outlook-mcp/tokens.json`)
167
- - **Read-only access** to mail, calendar, contacts, and tasks
190
+ - **Read/write access** to mail, calendar, contacts, and tasks (with two-phase approval for destructive operations)
168
191
 
169
192
  ##### ❌ What the Shared App CANNOT Access
170
193
 
171
194
  - **Your data when you're not using the server** - tokens are only used by your local MCP instance
172
195
  - **Your password or credentials** - Microsoft handles authentication
173
196
  - **Other users' data** - each user authenticates separately with their own account
174
- - **Write operations** - current permissions are read-only (by design)
175
197
 
176
198
  ##### 🔒 How It Works (Technical Details)
177
199
 
@@ -205,7 +227,7 @@ See [Custom Azure AD Setup](#custom-azure-ad-setup) below for instructions.
205
227
  ##### 🤝 Trust & Transparency
206
228
 
207
229
  - ✅ **Open Source** - Full code available at [GitHub](https://github.com/jbctechsolutions/mcp-outlook-mac)
208
- - ✅ **Minimal Scopes** - Only requests necessary read permissions
230
+ - ✅ **Minimal Scopes** - Only requests necessary permissions
209
231
  - ✅ **Standard Practice** - Same model used by Postman, Microsoft Graph Explorer, and many open-source tools
210
232
  - ✅ **User Control** - You can revoke access anytime in your [Microsoft account settings](https://account.microsoft.com/privacy/app-access)
211
233
  - ✅ **Override Option** - Use `OUTLOOK_MCP_CLIENT_ID` environment variable to use your own app
@@ -218,7 +240,7 @@ See [Custom Azure AD Setup](#custom-azure-ad-setup) below for instructions.
218
240
  - Corporate policies may block external multi-tenant apps
219
241
 
220
242
  **Risk to app owner (JBC Tech Solutions):**
221
- - Microsoft could revoke the app if abuse is detected (minimal risk with read-only permissions)
243
+ - Microsoft could revoke the app if abuse is detected
222
244
  - No access to your data or liability for your usage
223
245
 
224
246
  **Cost:** Using the shared app is **free for everyone** - no charges to you or the app owner.
@@ -240,10 +262,10 @@ The server includes a pre-configured shared Azure AD app for quick-start testing
240
262
 
241
263
  1. Go to **API permissions** → **Add a permission** → **Microsoft Graph** → **Delegated permissions**
242
264
  2. Add these permissions:
243
- - `Mail.ReadWrite` - Read and send mail
265
+ - `Mail.ReadWrite` - Read, send, and manage mail
244
266
  - `Calendars.ReadWrite` - Manage calendar events
245
- - `Contacts.Read` - Read contacts
246
- - `Tasks.Read` - Read tasks
267
+ - `Contacts.ReadWrite` - Manage contacts
268
+ - `Tasks.ReadWrite` - Manage tasks
247
269
  - `User.Read` - User profile
248
270
  - `offline_access` - Token refresh
249
271
  3. Click **Add permissions**
@@ -406,7 +428,7 @@ Add the plugin marketplace to your `~/.claude/settings.json`:
406
428
  - Automation permission for Outlook (you'll be prompted on first use)
407
429
 
408
430
  ### Graph API Backend
409
- - macOS, Windows, or Linux
431
+ - macOS, Windows, or Linux (no Outlook installation required)
410
432
  - Microsoft account (personal or work/school)
411
433
  - Node.js 18 or later
412
434
  - Internet connection
@@ -482,14 +504,16 @@ Uses AppleScript to communicate with Microsoft Outlook for Mac:
482
504
  - Works best with classic Outlook for Mac
483
505
  - Requires Outlook to be running
484
506
  - Works offline (no network required)
507
+ - Calendar write ops (create, update, delete, RSVP) and email sending
485
508
  - Full support for Notes
486
509
 
487
510
  ### Graph API Backend
488
511
 
489
512
  Uses Microsoft Graph API to access your data:
490
- - Works with "new Outlook" for Mac (cloud-based)
513
+ - Works with "new Outlook" for Mac (or any platform - no Outlook installation required)
491
514
  - Connects directly to Microsoft's servers
492
- - Works without Outlook running
515
+ - Full read/write operations: mail, drafts, calendar, contacts, tasks, mailbox organization
516
+ - Two-phase approval for destructive operations (delete, send)
493
517
  - Supports personal and work/school accounts
494
518
  - Does not support Notes (Graph API limitation)
495
519
 
@@ -545,6 +569,8 @@ src/
545
569
  │ ├── repository.ts # IRepository implementation
546
570
  │ └── content-readers.ts # Content reader implementations
547
571
  ├── tools/ # MCP tool implementations
572
+ │ ├── mail-send.ts # Draft/send/reply/forward tools
573
+ │ └── mailbox-organization.ts # Move, delete, flag, categorize tools
548
574
  ├── types/ # TypeScript type definitions
549
575
  └── utils/ # Utilities (dates, errors, etc.)
550
576
  ```
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jbctechsolutions/mcp-outlook-mac",
3
- "version": "1.2.0",
3
+ "version": "1.2.1",
4
4
  "description": "MCP server for Microsoft Outlook with dual backend support (AppleScript for classic Outlook, Graph API for new Outlook). Read/write access to mail, calendar, contacts, tasks, and notes.",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",