Share via

MCP Custom Connector (SSE) "SystemError" and "Connector Request Failed" despite 200 OK Backend Logs

Rahul Dhande 20 Reputation points
2026-03-15T12:03:11.28+00:00

Hello Team,

I am building a custom agent in Copilot Studio using the Model Context Protocol (MCP) to integrate with GitLab. While my Node.js backend (hosted locally and tunneled via ngrok) shows successful handshakes and 200 OK statuses, the Copilot Studio UI consistently fails to discover tools or execute them, resulting in SystemError or Connector request failed.

Environment Details

  • Host: Node.js (Express)
  • Tunnel: ngrok (HTTPS)
  • Protocol: MCP (Model Context Protocol) using SSEServerTransport
  • Auth: API Key via x-api-key header
  • Target API: GitLab REST API v4

NGROK HTTP Requests


11:51:31.911 GMT POST /sse

11:50:51.831 GMT POST /sse

11:50:50.785 GMT POST /sse 200 OK

11:41:34.506 GMT POST /sse

11:39:38.996 GMT POST /sse

11:37:00.712 GMT POST /sse 200 OK

C:\Users\Rahul\Desktop\azurecicd\rd-gitlab-mcp>node server.js

[dotenv@17.3.1] injecting env (2) from .env -- tip: ⚙️ suppress all logs with { quiet: true }

Server live on 3000

Establishing new SSE Handshake...

Connection Ready.

Cleaning up old transport...

Establishing new SSE Handshake...

Server session maintained.

Cleaning up old transport...

Establishing new SSE Handshake...

Server session maintained.

The the agent shows a "Processing" status for 30+ seconds before returning:

Error code: SystemError. Conversation ID: [ID]. Time (UTC): [Timestamp].

Attached Snips and Seever.js Files. The Gitlab PAT Token and x-api-key are stored in .env file and referenced in sever.js

Thanks

Rahul

server - Copy.txt
Copilot_Studio_Connections.jpg
Copilot_Studio UI.jpg

Microsoft Copilot | Microsoft 365 Copilot | Development

1 answer

Sort by: Most helpful
  1. Sayali-MSFT 5,281 Reputation points Microsoft External Staff Moderator
    2026-03-17T08:48:22+00:00

    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.


Your answer

Answers can be marked as 'Accepted' by the question author and 'Recommended' by moderators, which helps users know the answer solved the author's problem.