Skip to content

Commit 41b4aad

Browse files
docs: capture upstream transformation summary
1 parent ecdf3b2 commit 41b4aad

File tree

1 file changed

+32
-0
lines changed

1 file changed

+32
-0
lines changed

UPSTREAM_COMPARISON.md

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
# Production Transformation Summary
2+
3+
This document highlights the intentional divergences between the upstream
4+
[m365-mcp-server](https://github.com/nikolanovoselec/m365-mcp-server) project and
5+
this hardened production fork. Each change notes the motivation, the Cloudflare
6+
services it leverages, and a direct link to the implementation in this
7+
repository.
8+
9+
## Source Code Adjustments
10+
11+
| Area | Description | Reasoning | Cloudflare components | Example lines |
12+
| --- | --- | --- | --- | --- |
13+
| Worker environment bindings | Removed local-only `WORKER_DOMAIN`/`PROTOCOL` flags and introduced the `AI` binding plus optional Access headers so the Worker operates solely on secret-managed configuration. | Ensure production deploys rely on Cloudflare-managed secrets and make AI Gateway + Access context available to downstream logic. | AI Gateway, Access, Durable Objects | [`src/index.ts#L30-L63`](https://github.com/nikolanovoselec/m365-mcp-server-production/blob/main/src/index.ts#L30-L63) |
14+
| Graph client transport | Added `GatewayMetadata`, cached gateway log IDs, and replaced direct `fetch` calls with `env.AI.run("dynamic/microsoft-graph-handler", …)` so every Microsoft Graph request traverses the AI Gateway. | Route all Graph egress through governed Cloudflare infrastructure, attach audit metadata, and surface the gateway log identifier for incident response. | AI Gateway | [`src/microsoft-graph.ts#L71-L639`](https://github.com/nikolanovoselec/m365-mcp-server-production/blob/main/src/microsoft-graph.ts#L71-L639) |
15+
| Durable Object metadata + logging | Before each tool call the agent now builds metadata (user, Access email, Microsoft principal), invokes the Graph client with it, and logs the returned `aiGatewayLogId` for correlation. | Provide end-to-end traceability between MCP tool executions, Access identities, and AI Gateway telemetry without exposing raw tokens. | Access, AI Gateway, Durable Objects | [`src/microsoft-mcp-agent.ts#L109-L218`](https://github.com/nikolanovoselec/m365-mcp-server-production/blob/main/src/microsoft-mcp-agent.ts#L109-L218) |
16+
| Worker configuration | `wrangler.toml` and `.dev.vars` were rewritten with placeholders and explicit secret checklists, while `[[ai]]` bindings became mandatory. | Prevent accidental leakage of tenant-specific IDs and guide operators toward Cloudflare secret storage and AI Gateway configuration. | AI Gateway, Workers KV | [`wrangler.toml#L1-L41`](https://github.com/nikolanovoselec/m365-mcp-server-production/blob/main/wrangler.toml#L1-L41), [`.dev.vars`](https://github.com/nikolanovoselec/m365-mcp-server-production/blob/main/.dev.vars) |
17+
18+
## Documentation Realignment
19+
20+
- `README.md`, `OPERATIONS.md`, and `TECHNICAL.md` emphasise production hardening,
21+
Cloudflare Access perimeters, AI Gateway routing, and log correlation for
22+
regulated environments. (See
23+
[`README.md#L22-L35`](https://github.com/nikolanovoselec/m365-mcp-server-production/blob/main/README.md#L22-L35),
24+
[`OPERATIONS.md#L134-L141`](https://github.com/nikolanovoselec/m365-mcp-server-production/blob/main/OPERATIONS.md#L134-L141),
25+
[`TECHNICAL.md#L136-L150`](https://github.com/nikolanovoselec/m365-mcp-server-production/blob/main/TECHNICAL.md#L136-L150)).
26+
- `CONTRIBUTING.md` now directs feature work back to the upstream repository and
27+
restricts this repo to production/security changes only
28+
([`CONTRIBUTING.md#L1-L55`](https://github.com/nikolanovoselec/m365-mcp-server-production/blob/main/CONTRIBUTING.md#L1-L55)).
29+
30+
Together these differences convert the experimental Worker into a deployable,
31+
auditable service that sits behind Cloudflare Access and channels every Microsoft
32+
Graph interaction through Cloudflare AI Gateway.

0 commit comments

Comments
 (0)