-
Notifications
You must be signed in to change notification settings - Fork 477
Open
Labels
bugSomething isn't workingSomething isn't working
Description
Describe the bug
Client.SubscribeToResourceAsync hangs. I am able to successfully subscribe using SendMessageAsync instead.
To Reproduce
Steps to reproduce the behavior:
// Create a client capable of subscribing to resources
bool resourceUpdated = false;
McpClientOptions clientOptions = new()
{
Capabilities = new()
{
NotificationHandlers = new List<KeyValuePair<string, Func<JsonRpcNotification, CancellationToken, ValueTask>>>
{
new KeyValuePair<string, Func<JsonRpcNotification, CancellationToken, ValueTask>>(
NotificationMethods.ResourceUpdatedNotification, (notification, cancellationToken) =>
{
resourceUpdated = true;
return new ValueTask(Task.CompletedTask);
})
},
}
};
await LaunchMcpClient(clientOptions);
// Query the servers resources
Verify.IsNotNull(Client?.ServerCapabilities?.Resources);
Verify.IsTrue(Client!.ServerCapabilities!.Resources!.Subscribe == true);
await Client!.SubscribeToResourceAsync("test://text/resource1");
builder.Services.AddMcpServer(options =>
{
if (options.Capabilities?.Resources is not null)
{
options.Capabilities.Resources.Subscribe = true;
options.Capabilities.Resources.SubscribeToResourcesHandler = (notification, cancellationToken) =>
{
if (notification.Params?.Uri is not null)
{
subscriptions.Add(notification.Params?.Uri!);
}
return new ValueTask<EmptyResult>();
};
options.Capabilities.Resources.UnsubscribeFromResourcesHandler = (notification, cancellationToken) =>
{
if (notification.Params?.Uri is not null)
{
subscriptions.Remove(notification.Params?.Uri!);
}
return new ValueTask<EmptyResult>();
};
}
else
{
Environment.FailFast("StdioTestServer capabilities were not properly configured.");
}
})
Additional context
I added subscribe handlers through callback instead of builder extensions because of #656
Metadata
Metadata
Assignees
Labels
bugSomething isn't workingSomething isn't working