@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.
- package/README.md +70 -44
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -4,49 +4,87 @@
|
|
|
4
4
|
[](https://opensource.org/licenses/MIT)
|
|
5
5
|
[](https://nodejs.org)
|
|
6
6
|
|
|
7
|
-
A [Model Context Protocol (MCP)](https://modelcontextprotocol.io/) server that provides
|
|
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
|
-
- **
|
|
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
|
|
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
|
-
**
|
|
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
|
-
**
|
|
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
|
-
|
|
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
|
|
174
|
+
- `Mail.ReadWrite` - Read, send, and manage your mail
|
|
150
175
|
- `Calendars.ReadWrite` - Read and manage your calendars
|
|
151
|
-
- `Contacts.
|
|
152
|
-
- `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
|
|
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
|
|
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
|
|
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
|
|
265
|
+
- `Mail.ReadWrite` - Read, send, and manage mail
|
|
244
266
|
- `Calendars.ReadWrite` - Manage calendar events
|
|
245
|
-
- `Contacts.
|
|
246
|
-
- `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 (
|
|
513
|
+
- Works with "new Outlook" for Mac (or any platform - no Outlook installation required)
|
|
491
514
|
- Connects directly to Microsoft's servers
|
|
492
|
-
-
|
|
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.
|
|
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",
|