Context
MCP SDK v1.1.0's ExecuteToolAsTaskAsync disposes the request-scoped IServiceProvider before the background task can resolve services. This causes ObjectDisposedException on every tool call when InMemoryMcpTaskStore is registered.
We've commented out the task store registration as a workaround. The TaskSupport = ToolTaskSupport.Optional attribute is kept on dotnet_project so it's ready to activate.
Upstream
When to re-enable
- Upstream issue is fixed and a new MCP SDK version is released
- Uncomment
builder.Services.AddSingleton<IMcpTaskStore, InMemoryMcpTaskStore>(); in Program.cs
- Set
AsyncTasks = true in DotNetCliTools.Misc.cs ServerCapabilities
- Restore the task lifecycle conformance tests in
McpConformanceTests.cs
- Update
ServerCapabilitiesTests.cs to assert AsyncTasks == true
Files
DotNetMcp/Program.cs — commented-out registration
DotNetMcp/Tools/Cli/DotNetCliTools.Misc.cs — AsyncTasks = false
DotNetMcp.Tests/Server/McpConformanceTests.cs — task tests replaced with degradation tests
DotNetMcp.Tests/Server/ServerCapabilitiesTests.cs — asserts AsyncTasks == false
Context
MCP SDK v1.1.0's
ExecuteToolAsTaskAsyncdisposes the request-scopedIServiceProviderbefore the background task can resolve services. This causesObjectDisposedExceptionon every tool call whenInMemoryMcpTaskStoreis registered.We've commented out the task store registration as a workaround. The
TaskSupport = ToolTaskSupport.Optionalattribute is kept ondotnet_projectso it's ready to activate.Upstream
When to re-enable
builder.Services.AddSingleton<IMcpTaskStore, InMemoryMcpTaskStore>();inProgram.csAsyncTasks = trueinDotNetCliTools.Misc.csServerCapabilitiesMcpConformanceTests.csServerCapabilitiesTests.csto assertAsyncTasks == trueFiles
DotNetMcp/Program.cs— commented-out registrationDotNetMcp/Tools/Cli/DotNetCliTools.Misc.cs—AsyncTasks = falseDotNetMcp.Tests/Server/McpConformanceTests.cs— task tests replaced with degradation testsDotNetMcp.Tests/Server/ServerCapabilitiesTests.cs— assertsAsyncTasks == false