Familiar API requests reach Microsoft's private chat service
Pointing a coding client at M365-Copilot2API changes where its requests go. The Go gateway translates OpenAI and Anthropic request formats into Microsoft 365 Copilot's private ChatHub WebSocket protocol. You can keep a familiar client while using an authorized Copilot account behind it. The main README is Chinese, and an English translation exists. The project explicitly disclaims any Microsoft affiliation, which matters when deciding who can support a broken connection.
The repository itself is manageable: our checkout had 248 files, roughly 34,899 lines of source, and occupied 3.2 MB. Its admin console handles account authorization and API keys, then exposes usage and cloud conversations. That is useful for a technically capable personal user who wants visibility into the relay. Hosting this console yourself does not keep prompts on your machine: the upstream conversation still lives in Microsoft's service.
What happened when we ran it
Our run installed commit c322950 in 12 seconds, adding 12 packages, and built it in 23 seconds. The sandbox used golang:1.24-bookworm on October 12, 2026, with 3 CPUs and 8 GB of RAM. It was an unprivileged Debian container without secrets. Installation and compilation both succeeded, so this checkout cleared those local steps without a failure to explain.
The test step succeeded in 45 seconds, with 8 passed and 0 failed out of 8 in the supplied Go test summary. Our scan found 2 CI workflow files, a Dockerfile, a Compose file, and a tests directory. These are encouraging repository results. A no-secrets run cannot establish that a particular Microsoft account authorizes successfully, that an upstream model answers, or that a coding client's file operations survive protocol translation.
Account authorization includes a manual callback step
The English quick start asks you to sign into the console, change the administrator password, and authorize a Microsoft account. The browser popup can end on a blank or error page. Authorization is still incomplete: you must copy its full callback URL into the console and confirm it. That's a specific piece of setup work to expect, rather than a reason to restart the server repeatedly.
Our 12-package installation covers none of that account work. After authorization, you create a gateway API key and configure the client's base URL and authentication. The README warns that leftover Anthropic authentication variables can conflict in Claude Code. It also says the maintainer does not provide adaptation or troubleshooting for third-party agent frameworks. If changing a base URL fails to produce working tool calls, the integration work falls to you.
Docker files exist despite the README's contrary statement
The README says no official Dockerfile is provided, yet the repository contains a Dockerfile and Compose configuration. The image runs as a dedicated non-root user. Compose binds the published port to loopback and mounts persistent data plus an administrator bootstrap-password file. Those source files are more useful deployment evidence than the outdated paragraph, although we have not validated the container route.
The 23-second build result belongs to our Go sandbox, not a Docker image build. Launch method also changes the listen address: the binary defaults to loopback, while the Windows management script listens on all interfaces and hardcodes a checkout path. Review that script before using it from another directory. The console can reveal API keys, and account tokens reside in the data directory. Protect both the management route and its backups before exposing the service beyond your workstation.
Shared conversation reuse needs an isolation decision
Session reuse is a deliberate feature here. The README describes explicit session IDs, exact context-prefix matches, and a similarity fallback, including reuse across IP addresses and accounts. That may suit one person's conversations across machines. For unrelated users, identity-independent reuse warrants a close look before deployment. We would require an isolation check using separate accounts and unrelated conversation histories before trusting this design with shared access.
All 8 tests passed in our sandbox, but that result does not settle conversation privacy or upstream behavior. Cleanup can delete idle cloud conversations, and the README explains that deleting a cloud conversation also clears its local binding. Make the retention policy intentional. A user expecting permanent chat history could otherwise lose conversations through a feature the operator regards as routine cache cleanup.
Current file-access reports weaken the coding-agent case
Issue 105, updated October 12, reports inconsistent local file access from Claude and OpenCode clients, including a WSL environment. The author says document uploads work while analysis of local project directories does not. This is a user report, not a reproduced lab defect. It still addresses the exact reason many developers would adopt this gateway: making a coding client work on a real checkout.
Our 45-second test step gives no evidence about that complete workflow. Another open report, issue 102, describes reasoning output reaching a client while the answer is missing, plus intermittent truncation around code fences. Plain chat success is therefore too weak an acceptance criterion for a coding assistant. Check streaming output and a harmless file-edit round trip with the client you intend to use.
Paid API resale is expressly restricted
The license file adds a non-commercial API relay restriction to AGPL-3.0 and requires a separate commercial license for paid relay operation. The README also warns that proxy-based access may conflict with provider terms. That makes this a poor default for a business selling API access. Consider LiteLLM or One API when your job is managing ordinary provider APIs rather than adapting a Copilot subscription.
The last push was October 10, 2026, with 557 stars and 13 open issues and PRs. Release v0.7.3 arrived October 6 with English documentation and interface translation, while later issue reports show ongoing integration friction. The 3.2 MB checkout is approachable enough for personal investigation. Before depending on it for coding, require the local file operation that issue 105 says is unreliable.

