Building and customizing solutions using Microsoft 365 Copilot APIs and tools
Hello Rahul Dhande,
Your setup is largely correct—the MCP server is reachable, authentication works, and the SSE connection is successfully established. However, Copilot Studio fails at the tool discovery and execution stage, ultimately returning a generic SystemError.
The core issue is a mismatch between your MCP (SSE) implementation and Copilot Studio’s strict and currently incomplete runtime expectations. Even though the connection opens, Copilot Studio requires highly specific, protocol-compliant SSE messaging (format, timing, and structure). Any deviation—such as delayed tool discovery, improper SSE framing, multiline JSON, reused sessions, or large/slow responses—causes silent failures that are not surfaced in the UI.
This explains why everything appears healthy in logs (ngrok, Node.js, MCP server), yet fails in the Copilot runtime. These behaviors are known platform limitations, including unreliable SSE handling, lack of diagnostics, and poor support for stateful or large responses.
Recommended approach: Treat MCP in Copilot Studio as preview/experimental only. For reliable production scenarios, avoid MCP and instead use Power Automate or custom connectors. If continuing with MCP, enforce strict stateless behavior, immediate tool discovery, exact SSE formatting, and minimal response payloads.