Skip to content

McpToolRegistrationService: The CancellationTokenSource has been disposed #223

@rido-min

Description

@rido-min

Description

I'm running the sample https://github.com/microsoft/Agent365-Samples/tree/main/dotnet/agent-framework/sample-agent and could not get the Mcp tools to work.

I got the error below, seems like the method

public async Task<IList<AITool>> GetMcpToolsAsync(
string agentUserId,
UserAuthorization userAuthorization,
string authHandlerName,
ITurnContext turnContext,
string? authToken = null)
is missing the cancellationToken

Microsoft.Agents.A365.Tooling.Extensions.AgentFramework.Services.IMcpToolRegistrationService[0]
      Failed to load tools from MCP server 'mcp_MailTools': Failed to get tools from MCP server 'mcp_MailTools' at 'https://agent365.svc.cloud.microsoft/agents/servers/mcp_MailTools': Failed to create MCP client for endpoint 'https://agent365.svc.cloud.microsoft/agents/servers/mcp_MailTools': The CancellationTokenSource has been disposed.
      Object name: 'System.Threading.CancellationTokenSource'.
      System.InvalidOperationException: Failed to get tools from MCP server 'mcp_MailTools' at 'https://agent365.svc.cloud.microsoft/agents/servers/mcp_MailTools': Failed to create MCP client for endpoint 'https://agent365.svc.cloud.microsoft/agents/servers/mcp_MailTools': The CancellationTokenSource has been disposed.
      Object name: 'System.Threading.CancellationTokenSource'.
       ---> System.InvalidOperationException: Failed to create MCP client for endpoint 'https://agent365.svc.cloud.microsoft/agents/servers/mcp_MailTools': The CancellationTokenSource has been disposed.
      Object name: 'System.Threading.CancellationTokenSource'.
       ---> System.ObjectDisposedException: The CancellationTokenSource has been disposed.
      Object name: 'System.Threading.CancellationTokenSource'.
         at ModelContextProtocol.Client.StreamableHttpClientSessionTransport.DisposeAsync()
         at ModelContextProtocol.Client.AutoDetectingClientSessionTransport.InitializeAsync(JsonRpcMessage message, CancellationToken cancellationToken)
         at ModelContextProtocol.McpSession.SendRequestAsync(JsonRpcRequest request, CancellationToken cancellationToken)
         at ModelContextProtocol.McpEndpointExtensions.SendRequestAsync[TParameters,TResult](IMcpEndpoint endpoint, String method, TParameters parameters, JsonTypeInfo`1 parametersTypeInfo, JsonTypeInfo`1 resultTypeInfo, RequestId requestId, CancellationToken cancellationToken)
         at ModelContextProtocol.Client.McpClient.ConnectAsync(CancellationToken cancellationToken)
         at ModelContextProtocol.Client.McpClient.ConnectAsync(CancellationToken cancellationToken)
         at ModelContextProtocol.Client.McpClientFactory.CreateAsync(IClientTransport clientTransport, McpClientOptions clientOptions, ILoggerFactory loggerFactory, CancellationToken cancellationToken)
         at ModelContextProtocol.Client.McpClientFactory.CreateAsync(IClientTransport clientTransport, McpClientOptions clientOptions, ILoggerFactory loggerFactory, CancellationToken cancellationToken)
         at Microsoft.Agents.A365.Tooling.Services.McpToolServerConfigurationService.CreateMcpClientWithAuthHandlers(ITurnContext turnContext, Uri endpoint, String clientName, String authToken) in C:\__w\1\s\Agent365-dotnet\src\Tooling\Core\Services\McpToolServerConfigurationService.cs:line 432
         --- End of inner exception stack trace ---
         at Microsoft.Agents.A365.Tooling.Services.McpToolServerConfigurationService.CreateMcpClientWithAuthHandlers(ITurnContext turnContext, Uri endpoint, String clientName, String authToken) in C:\__w\1\s\Agent365-dotnet\src\Tooling\Core\Services\McpToolServerConfigurationService.cs:line 436
         at Microsoft.Agents.A365.Tooling.Services.McpToolServerConfigurationService.GetMcpClientToolsAsync(ITurnContext turnContext, MCPServerConfig mCPServerConfig, String authToken) in C:\__w\1\s\Agent365-dotnet\src\Tooling\Core\Services\McpToolServerConfigurationService.cs:line 74
         --- End of inner exception stack trace ---
         at Microsoft.Agents.A365.Tooling.Services.McpToolServerConfigurationService.GetMcpClientToolsAsync(ITurnContext turnContext, MCPServerConfig mCPServerConfig, String authToken) in C:\__w\1\s\Agent365-dotnet\src\Tooling\Core\Services\McpToolServerConfigurationService.cs:line 91
         at Microsoft.Agents.A365.Tooling.Extensions.AgentFramework.Services.McpToolRegistrationService.GetMcpToolsAsync(String agentUserId, UserAuthorization userAuthorization, String authHandlerName, ITurnContext turnContext, String authToken) in C:\__w\1\s\Agent365-dotnet\src\Tooling\Extensions\AgentFramework\Services\McpToolRegistrationService.cs:line 142

Expected behavior

The async methods should accept a cancellation token that is passed along the async call chain

SDK Version

0.1.72-beta

.NET Version

.net8.0

OS

Windows 11

How to Reproduce

run the sample

Output

No response

Screenshots

No response

Code of Conduct

Metadata

Metadata

Assignees

Labels

No labels
No labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions