modelcontextprotocol / modelcontextprotocol/csharp-sdk

McpClient.CreateAsync times out behind APIM in .NET SDK while MCP Inspector/Azure AI Foundry succeed

Open
#1,470 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug P2 ready for work
Dominant language
C#
Stars
4.5k
Forks
814
Avg merge
9d 19h
Merged PRs (30d)
4

Description

Summary

I am seeing a consistent timeout when initialising McpClient from the MCP .NET SDK.

The same MCP server works successfully in:

  • MCP Inspector
  • Azure AI Foundry

The MCP server is exposed behind Azure API Management (APIM).

Environment

  • .NET: net10.0
  • ModelContextProtocol package: 1.1.0
  • MCP transport mode: HttpTransportMode.StreamableHttp

Observed behaviour

McpClient.CreateAsync(...) times out and throws:

  • System.TimeoutException: The operation has timed out.

Expected behavior

McpClient.CreateAsync(...) should initialize successfully with the same endpoint/auth that works in MCP Inspector and Azure AI Foundry.

Repro steps

  1. Set MCP endpoint and APIM subscription key.
  2. Call McpClient.CreateAsync(...) directly with HttpClientTransport (StreamableHttp).
  3. Immediately call ListToolsAsync().
  4. Timeout occurs during McpClient.CreateAsync(...) (initialization), before tool listing.
using ModelContextProtocol.Client;
using HttpClientTransport = ModelContextProtocol.Client.HttpClientTransport;

var key = Environment.GetEnvironmentVariable("APIM_SUBSCRIPTION_KEY")
          ?? throw new InvalidOperationException("Set APIM_SUBSCRIPTION_KEY");

await using McpClient mcpClient = await McpClient.CreateAsync(
    new HttpClientTransport(new HttpClientTransportOptions
    {
        TransportMode = ModelContextProtocol.Client.HttpTransportMode.StreamableHttp,
        Endpoint = new Uri("https://<redacted>.azure-api.net/apim-mcp/mcp"),
        AdditionalHeaders = new Dictionary<string, string>
        {
            ["Ocp-Apim-Subscription-Key"] = key
        }
    }));

var tools = await mcpClient.ListToolsAsync();
Console.WriteLine($"Tools: {tools.Count}");

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start by reproducing the provided net10.0 example with HttpClientTransport in StreamableHttp mode, focusing on McpClient.CreateAsync initialization before ListToolsAsync. Compare the SDK's initialization behavior with the same APIM endpoint and authentication in MCP Inspector and Azure AI Foundry; done when CreateAsync completes and tool listing succeeds without a timeout.

Written by the indexing model from the issue text.

Assessment

Tech stack
csharp
Domain
api, backend
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Quiet
Clarity
Needs clarification
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.