@chrischall/office-outlook-mcp 0.3.1 → 0.3.3

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.3.1"
10
+ "version": "0.3.3"
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.3.1",
18
+ "version": "0.3.3",
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.3.1",
4
+ "version": "0.3.3",
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
@@ -27,15 +27,32 @@ does not re-capture.
27
27
  npm i -g @chrischall/office-outlook-mcp
28
28
  ```
29
29
 
30
- Requires the **Transporter** Chrome extension and `@fetchproxy/cli`, on a
31
- matching major version:
30
+ Requires the **ContextMint Bridge** browser extension, installed from
31
+ [its releases](https://github.com/nullnet-app/contextmint-bridge/releases):
32
+ in Chrome, unzip the chrome build and load it unpacked
33
+ (`chrome://extensions` → Developer mode → Load unpacked). Safari is not
34
+ available yet — it will ship inside the ContextMint app, which has no public
35
+ download — so use Chrome for now.
36
+
37
+ ContextMint Bridge is the fetchproxy browser extension under its new name, from
38
+ the same maintainer — fetchproxy's own README
39
+ ([#extension](https://github.com/chrischall/fetchproxy#extension)) points to it.
40
+ Its source is public at
41
+ [nullnet-app/contextmint-bridge](https://github.com/nullnet-app/contextmint-bridge):
42
+ build it yourself, or check a release zip against the `.sha256` file published
43
+ beside it (`shasum -a 256 -c contextmint-bridge-chrome-<version>.zip.sha256`).
44
+
45
+ The extension, `fpx` and this server are compatible by **fetchproxy protocol
46
+ number** (currently protocol 4), not by matching package versions. Keep the
47
+ bridge and `fpx` current — a mismatch fails with an error naming both protocol
48
+ numbers. Also install `@fetchproxy/cli`:
32
49
 
33
50
  ```sh
34
51
  npm i -g @fetchproxy/cli
35
52
  ```
36
53
 
37
- The first capture prints a 6-digit pair code to approve in the Transporter
38
- popup; the grant persists.
54
+ The first capture prints a 6-digit pair code to approve in the ContextMint
55
+ Bridge popup; the grant persists.
39
56
 
40
57
  ### Install in opencode
41
58
 
@@ -111,7 +128,9 @@ the one read a preview makes.)
111
128
  Mail and event text is written by other people, so `outlook_list_messages`,
112
129
  `outlook_get_message`, `outlook_list_events` and `outlook_get_event` wrap every
113
130
  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.
131
+ plus a `note` telling the model to treat the text as data, never instructions
132
+ (a `view: raw` record that carries its own `untrusted_content`/`note` key is
133
+ nested under `data`, so it cannot overwrite the envelope).
115
134
  On a client that cannot show a confirmation prompt, the confirmToken is still
116
135
  something the model passes back itself, so keep `MCP_CONFIRM_MODE=ask-user`
117
136
  (the default) and approve each preview in chat — or use a client that asks you
@@ -131,7 +150,7 @@ a fresh preview.
131
150
  |---|---|---|
132
151
  | `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
152
  | `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. |
153
+ | `MCP_CONFIRM_SECRET` | random per process | Signing key; set it only if tokens must survive a server restart. On mcp-host the host supplies a stable per-child key (`MCP_HOST_CONFIRM_SECRET`) and spent tokens are recorded under `MCP_DATA_DIR`, so an approval survives an idle restart. |
135
154
 
136
155
  ## Things worth knowing
137
156
 
@@ -30,7 +30,7 @@ import { PACKAGE_NAME, VERSION } from './version.js';
30
30
  /**
31
31
  * The fetchproxy concentrator port.
32
32
  *
33
- * ONE port for the whole fleet: the Transporter extension dials this port and
33
+ * ONE port for the whole fleet: the ContextMint Bridge extension dials this port and
34
34
  * servers host/peer-elect on it, so a "unique" per-MCP default would simply
35
35
  * never be found. `OUTLOOK_WS_PORT` overrides it for local development and —
36
36
  * the reason it exists — for a hosted bridged registration, where mcp-host