@chrischall/office-outlook-mcp 0.1.5 → 0.3.0

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.
@@ -7,7 +7,7 @@
7
7
  },
8
8
  "metadata": {
9
9
  "description": "MCP server for Outlook / Microsoft 365 — mail, calendar, contacts and tasks via natural language",
10
- "version": "0.1.5"
10
+ "version": "0.3.0"
11
11
  },
12
12
  "plugins": [
13
13
  {
@@ -15,7 +15,7 @@
15
15
  "displayName": "Outlook (Microsoft 365)",
16
16
  "source": "./",
17
17
  "description": "MCP server for Outlook / Microsoft 365 — read mail, folders, calendar, contacts and tasks, and send mail with confirmation",
18
- "version": "0.1.5",
18
+ "version": "0.3.0",
19
19
  "author": {
20
20
  "name": "Chris Hall"
21
21
  },
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "office-outlook-mcp",
3
3
  "displayName": "Outlook (Microsoft 365)",
4
- "version": "0.1.5",
4
+ "version": "0.3.0",
5
5
  "description": "Outlook / Microsoft 365 for Claude — read mail, folders, calendar, contacts and tasks, and send mail with confirmation, using your signed-in browser session",
6
6
  "author": {
7
7
  "name": "Chris Hall",
package/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # office-outlook-mcp
2
2
 
3
3
  MCP server for **Outlook / Microsoft 365** — mail, folders, calendar, contacts
4
- and tasks, with confirm-gated sending.
4
+ and tasks, with confirmation-gated sending.
5
5
 
6
6
  > This project was developed and is maintained by AI (Claude Code). Use at your
7
7
  > own discretion.
@@ -95,17 +95,43 @@ Everything is optional — with nothing set, the server captures from the browse
95
95
  `outlook_get_mailbox_settings`, `outlook_list_contacts`, `outlook_list_people`,
96
96
  `outlook_list_tasks`
97
97
 
98
- **Write** (all require `confirm: true`) — `outlook_send_mail`,
98
+ **Write** (all ask you to confirm first — see [Confirmations](#confirmations)) — `outlook_send_mail`,
99
99
  `outlook_create_draft`, `outlook_mark_read`, `outlook_move_message`,
100
100
  `outlook_create_event`
101
101
 
102
102
  **Diagnostics** — `outlook_healthcheck`
103
103
 
104
104
  Every read tool takes `view: compact | full | raw`, defaulting to **compact**.
105
- Mutating tools **write nothing** without `confirm: true` — they return a
106
- dry-run preview of exactly what would be sent. (`outlook_create_event` first
107
- reads the mailbox time zone, so its preview can name the zone it would book
108
- in; that is the one read a dry run makes.)
105
+ Mutating tools **write nothing** until you confirm — see
106
+ [Confirmations](#confirmations). The preview shows exactly what would be sent
107
+ (action, method, path and body). (`outlook_create_event` first reads the
108
+ mailbox time zone, so its preview can name the zone it would book in; that is
109
+ the one read a preview makes.)
110
+
111
+ Mail and event text is written by other people, so `outlook_list_messages`,
112
+ `outlook_get_message`, `outlook_list_events` and `outlook_get_event` wrap every
113
+ result (all views) in an untrusted-content envelope — `untrusted_content: true`
114
+ plus a `note` telling the model to treat the text as data, never instructions.
115
+ On a client that cannot show a confirmation prompt, the confirmToken is still
116
+ something the model passes back itself, so keep `MCP_CONFIRM_MODE=ask-user`
117
+ (the default) and approve each preview in chat — or use a client that asks you
118
+ before running non-read-only tools — as the real guard on outbound sends.
119
+
120
+ ## Confirmations
121
+
122
+ Every write asks you to confirm before anything is sent or changed. A client
123
+ that can show a confirmation prompt (Claude Code) shows one. On a client that
124
+ cannot, the first call does nothing and returns a `confirmation-required`
125
+ preview plus a `confirmToken`; only a repeat call with that token performs the
126
+ write. The token is single-use, expires, and is bound to the exact arguments —
127
+ change anything between the two calls and it is refused (`DRAFT_CHANGED`) with
128
+ a fresh preview.
129
+
130
+ | variable | default | |
131
+ |---|---|---|
132
+ | `MCP_CONFIRM_MODE` | `ask-user` | What a write does on a client that cannot show a confirmation prompt (claude.ai, Claude Desktop). `ask-user`: two steps — the first call does nothing and returns a preview plus a token, and the model must get your approval in chat before calling again with it. `auto`: the same two steps, but the model may use the token after reviewing the preview itself. `refuse`: writes are refused on such clients. A client that can show prompts (Claude Code) always gets the real prompt. An unrecognised value is treated as `refuse`. |
133
+ | `MCP_CONFIRM_TTL_SECONDS` | `600` | How long a token stays valid. |
134
+ | `MCP_CONFIRM_SECRET` | random per process | Signing key; set it only if tokens must survive a server restart. |
109
135
 
110
136
  ## Things worth knowing
111
137
 
@@ -130,7 +156,7 @@ in; that is the one read a dry run makes.)
130
156
  If you only need Outlook access from Claude Code on this machine, the
131
157
  `skills/outlook-fpx` access skill in this repo does the same reads with `fpx` +
132
158
  `curl` and no server at all. The MCP earns its keep when you want typed tools,
133
- confirm-gated writes, or reach from claude.ai.
159
+ confirmation-gated writes, or reach from claude.ai.
134
160
 
135
161
  ## Development
136
162