I gave Claude access to my M365 account using Power Automate + a small MCP server
"Chaos engineering" as someone described it. If this helps anybody, go for it.
"Chaos engineering" as someone described it. If this helps anybody, go for it.
I'm a fast typer but it comes at a cost. Sometimes I end up in pain. Wispr Flow is one of the best products I've ever used. I love it so much. Thank you to everyone involved and I hope you guys continue to use it so this stunt company can stick around for a long time.
Please feel free to post your insights as well.
I have been playing with custom MCPs and finally built one that feels useful in day-to-day life instead of just being a demo.
The annoying part was Microsoft 365 access. I wanted ChatGPT/Codex to do boring useful stuff - read inbox, send a follow-up, check calendar, save notes to OneDrive - but I do not have tenant admin rights or an approved Graph app registration.
The workaround was Power Automate HTTP triggers. Each operation is a tiny PA flow that runs as me, then a small FastMCP server wraps the webhook URLs as tools.
So the rough flow is:
ChatGPT/Codex -> MCP tool -> FastMCP server -> Power Automate webhook -> M365 connector
It is defintely glue code, but useful glue code. Biggest lesson so far: treat the PA webhook URLs like passwords, and check for duplicate URLs. I had two tools pointed at the same flow for a while and thought I was losing my mind.
I'm not pitching a product, just sharing a pattern that helped me get around a very normal M365 automation problem.
Situation:
| Constraint | Reality |
|---|---|
| Tenant admin | Not me |
| App registration | Not getting approved quickly |
| Graph permissions | Ticket-shaped black hole |
| Need | Automate my own mailbox/calendar/files |
| Available | Power Automate under my user license |
The useful bit: Power Automate flows with HTTP triggers.
For each operation, I made a flow:
HTTP POST -> Power Automate -> M365 connector action -> Response
Because the flow runs as my user, it can do things I can already do manually:
| Operation | PA action |
|---|---|
| Send mail | Office 365 Outlook Send Email V2 |
| Reply to mail | Outlook reply action |
| Read/search mail | Outlook message actions / filters |
| Calendar read/create/update/delete | Outlook calendar actions |
| OneDrive read/list/write | OneDrive for Business actions |
| Excel rows | Excel Online table actions |
| Word template fill | Word Online template action |
| Planner task create | Planner connector |
I put a small wrapper service in front of the webhook URLs so I can call them consistently from scripts/tools, but that part is optional. The core trick is just using PA as the delegated-permission layer.
Caveats:
That last one is not hypothetical. I had two operations mapped to the same webhook for a while because I copied a flow and forgot to change the URL. Very professional.
This obviously is not a replacement for a properly governed Graph integration. But for "I need to automate my own stuff and I'm not the tenant admin," it has been way more practical than I expected.
I built a small self-hosted bridge for my Microsoft 365 account and figured it might be useful to people here who like practical glue code.
The short version:
HTTP client / MCP client -> my VPS -> Power Automate webhook -> M365 connector
I wanted a way to automate mail, calendar, OneDrive, Excel, Word templates, and Planner without tenant admin access or a Graph app registration. Power Automate turned out to be the easiest middle layer because the flows run as my user and use my existing permissions.
Each operation is just a PA flow:
Then I have a small Python FastMCP server on a VPS that exposes those as tools and forwards the call to the right PA webhook.
Current tools:
| Thing | What it does |
|---|---|
| Inbox | Read unread mail / search by sender |
| Send, schedule, reply by message ID | |
| Calendar | Read date range, create/update/delete events |
| OneDrive | List folder, read file, create file, overwrite file |
| Excel | Read/write table rows |
| Google Sheets | Read/write via the PA connector |
| Word | Fill a template with token values |
| Planner | Create tasks |
I built it for Claude/Codex via MCP, but the MCP part is optional. You could just call the same PA webhooks from curl or a Python script.
The security model is simple but important:
It’s not elegant, exactly, but it works. And honestly “works” beat elegant pretty hard here.
Main mistake I made: duplicated a flow, forgot to update the URL in my config, and had two tools silently pointing at the same PA endpoint. If you build something like this, add a startup check that warns on duplicate webhook URLs. Ask me how I know.
I’ve been messing with MCP servers lately and finally got one working that feels genuinely useful instead of “cool demo, never use again.”
The problem: I wanted Claude to be able to do basic Microsoft 365 stuff for me:
But I don’t have tenant admin access, and I wasn’t going to get Graph permissions approved just for personal automation.
The workaround was Power Automate.
Every operation is a PA flow with an HTTP trigger. PA gives you a signed webhook URL. The flow runs as my account, using permissions I already have. Then I put a small FastMCP server in front of those webhook URLs and connected that to Claude.
So now in a Claude chat I can say things like:
Under the hood Claude is just calling MCP tools like m365_send_email, m365_calendar_read, onedrive_create_file, etc. The MCP server posts JSON to Power Automate, and PA does the actual M365 action.
The architecture is not fancy, defintely not:
Claude -> MCP tool -> FastMCP server -> PA webhook -> M365 connector
I’m running the MCP server on a cheap VPS. It’s about 200 lines of Python plus a JSON config file of flow names and URLs.
This was also a nice reminder that “agent tool access” doesn’t always need a perfect official API integration. Sometimes the janky enterprise tool you already have is enough.
The funniest bug: I had two tools pointing at the same Power Automate webhook because I duplicated a flow and forgot to update the URL in my config. The result was Claude confidently calling the “right” tool and Power Automate doing the wrong damn thing. Very educational, not very dignified.
Edit. A [you will probably need Power Automate Pro, which i needed for a couple other things)
Here's an example of it. I built 22 Power Automate flows covering all the different tools that I would want called and then I added them to the mcp.
In Power Automate, make one flow per action. Example: send email, read inbox, create calendar event, write OneDrive file, etc.
Start each flow with “When an HTTP request is received.”
Define the JSON body you want that flow to accept.
For send email, maybe { "to": "...", "subject": "...", "body": "..." }.
Add the normal M365 connector action. Example: Outlook Send Email V2, OneDrive Create File, Excel Add Row, Planner Create Task.
End the flow with a Response action that returns JSON.
Copy the HTTP trigger URL into a private config file. Do not commit it. Do not paste it anywhere public. Treat it like a password.
Put a small FastMCP server in front of those URLs. Each MCP tool just validates the inputs, finds the right PA webhook URL, POSTs JSON to it, and returns the PA response.
The wrapper is not fancy. It’s basically:
AI tool call -> FastMCP function -> httpx.post(PA webhook URL, json=args) -> return response
The main things I’d recommend are:
Will post more info in the am if needed. Thanks for reading!
[If you are not familiar or not comfortable with Power Automate, what I would recommend (and I mean this sincerely) is to use either co-work or use Claude Code Terminal with the Chrome extension and plug in the prompt for it to do it. It's a little slow and it'll take a bit but it will make them. Just don't sit there and watch it if you want it to be quick.)
I’ve been trying to let Claude/Codex do useful stuff against my M365 account for a while, mostly boring-but-useful things like read mail, send a follow-up, put something on my calendar, save notes to OneDrive, etc.
The normal path was a wall for me:
Then I realized I was overthinking it. Power Automate already runs as me.
So the pattern became:
That’s it. It’s kind of dumb, but in the best way.
What I have working now:
The nice part is that none of this needs elevated tenant access. Each flow uses my existing delegated permissions. If I can send an email manually, the flow can send it. If I can write to a OneDrive folder, the flow can write there.
The MCP piece is just a wrapper. The actual useful pattern is:
AI/tool/script -> HTTP POST -> Power Automate -> M365 action -> JSON response
The server is roughly 200 lines of Python: FastMCP, httpx, and a config file mapping tool names to PA webhook URLs. The PA flows are usually just HTTP trigger -> action -> response.
One very real gotcha: I copy-pasted too fast and had flow_2 and flow_7 pointing to the same webhook URL for a while. Spent a very confusing hour wondering why the “calendar” tool was behaving like an email tool. So yeah, audit your config file before trusting it.
If people are interested I can clean up the server and post the skeleton. Curious if anyone else is using PA this way, because it feels like a weirdly practical loophole.
Anyone else seeing Claude / Claude Code's Chrome extension bill as extra usage even when regular usage still shows available? Trying to figure out if it's a hidden quota, session/cache bug, spend-limit setting, or something else. Any fixes?
I regret telling my boss upgrading the 10 of us on enterprise to enterprise pro was a "good" idea. Ever since I did that the product has gotten exponentially worse.
At this point I use other AIs to research ways to loop perplexity into the workflow because its just so worthless on a day to day.
I honestly hope they crash and burn as a company because they've been ripping us off for months.
And I refuse to turn this into a computer action. REFUSE. Research should not be an "additional" charge
I don't think the Codex vs Claude Code debate is as simple as "which model is smarter?" anymore. A few months ago that might have been the right question. Now it feels more like a question of workflow, trust, permissions, context, and how much you want the agent to actually operate inside your environment.
My current take: Claude Code still feels like the cleaner "developer brain" in a lot of situations, but Codex is starting to feel like the broader work agent. That distinction matters.
Claude Code is very good when the job is mostly inside the repo. It has a strong feel for code structure, refactors, debugging, and walking through a problem without immediately overcomplicating it. When it is on, it feels like pairing with a sharp engineer who can hold the shape of the project in its head. I still think Claude often has better taste in code. It tends to be a little more restrained, a little more readable, and less eager to bulldoze through the repo.
But Claude Code also has some real friction. The limits are annoying. The performance can feel inconsistent. Sometimes it feels like you are paying for a premium tool and then getting nudged into babysitting it because the system is rationing effort behind the scenes. That is hard to trust. The best version of Claude Code is excellent, but the gap between its best days and its weird days is noticeable.
Codex, on the other hand, has gotten much more interesting because it seems to be moving beyond "coding assistant" and toward "agent that can work where the work actually happens." The Chrome integration is a big deal for that reason. A lot of real work is not just editing files. It is checking docs, using dashboards, testing flows, moving between tabs, comparing live behavior against the code, grabbing context from tools, and then coming back to the repo with a plan.
That is where Codex feels like it may have the bigger ceiling.
I don't think Codex always writes prettier code than Claude. Sometimes it is more verbose than I want. Sometimes the explanations feel a little too polished. Sometimes it wants to turn a small change into a whole production. But it has become much better at staying on task, using tools, checking its own work, and handling longer multi-step jobs without losing the plot.
The parallelism is also underrated. Being able to split work across tabs, branches, or tasks changes the feel of the workflow. Claude Code often feels like one very capable pair programmer. Codex is starting to feel more like a small bench of agents you can point at different parts of the job. That is not always better, but for messy real-world work it can be powerful.
Where I still prefer Claude:
- Writing clean, idiomatic code from a clear prompt
- Refactoring without making the diff feel bloated
- Reasoning through architecture tradeoffs
- Explaining why a certain approach is risky
- Working inside a focused repo without needing browser/app context
Where I'm starting to prefer Codex:
- Tasks that require tool use across the browser and local environment
- Longer implementation loops with testing and iteration
- Comparing live app behavior against code
- Running several related investigations at once
- Workflows that involve docs, dashboards, web apps, and code together
- More general "go make progress on this" style tasks
The uncomfortable truth is that both tools still need supervision. Neither one is a senior engineer you can fully walk away from. They are closer to very fast junior-to-mid engineers with occasional senior-level flashes and occasional "why did you touch that file?" moments. The value comes from knowing when to let them run and when to interrupt.
My practical ranking right now would be:
For pure coding taste: Claude Code still has an edge.
For agentic workflow: Codex is catching up fast and may already be ahead depending on the task.
For trust: mixed. Claude feels more elegant when it works, Codex feels more operationally useful when the task spans more than the repo.
For the future: I'd bet on the tool that can move fluidly between code, browser, apps, docs, tests, and deployment. That currently looks more like the direction Codex is heading.
So I don't see this as "Claude is dead" or "Codex won." That kind of framing gets old fast. My read is that Claude Code is still one of the best coding tools, but Codex is becoming something slightly different: a general work agent with coding as one of its strongest modes.
If OpenAI keeps improving the browser/app side without making Codex too bloated, it could become the default agent environment. If Anthropic fixes the limits and consistency issues, Claude Code remains extremely hard to beat for serious dev work.
For now, I'd rather have both. Claude for taste and tight code. Codex for reach, tool use, and messy end-to-end tasks.
Anyone Else using notion? Started it Saturday and ended up getting up to 95% of weekly limits while on 20x...
Was it notion that did it? Glad we reset today. Cool to use 295,000,000 tokens but ya...why/how is important to me.
Title pretty much says it all. What is the best way that you get your files to your assistant? I don't know what the best way actually is. I would assume it's Google Drive. Every time I ask it for a link, it sends me a broken link so I stopped trying that. There's no way to just drag and drop it into the chat unfortunately unless it's a picture.