modelcontextprotocol / modelcontextprotocol/csharp-sdk
McpClient.CreateAsync times out behind APIM in .NET SDK while MCP Inspector/Azure AI Foundry succeed
Nobody has claimed this yet.
- 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 ModelContextProtocolpackage: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
- Set MCP endpoint and APIM subscription key.
- Call McpClient.CreateAsync(...) directly with HttpClientTransport (StreamableHttp).
- Immediately call ListToolsAsync().
- 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
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- 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