- We still allow notification handlers to be configured pre-creation, eliminating any race conditions that may result from missed notifications. But now we also allow for post-creation notification handler registration. - Handlers may now also be removed. This permits temporary registrations that may be created in a scoped manner. - Registration handling is thread-safe. - Handlers are now cancelable. - Exceptions from notification handlers trigger all normal exception handling in the dispatch pipeline. This also: - Adds a WithStreamServerTransport as a counterpart to WithStdioServerTransport. The latter was used in several tests in a hacky way, and that's now simplified via the former's existence.
24 lines
1.5 KiB
C#
24 lines
1.5 KiB
C#
using ModelContextProtocol.Protocol.Messages;
|
|
|
|
namespace ModelContextProtocol;
|
|
|
|
/// <summary>Represents a client or server MCP endpoint.</summary>
|
|
public interface IMcpEndpoint : IAsyncDisposable
|
|
{
|
|
/// <summary>Sends a JSON-RPC request to the connected endpoint.</summary>
|
|
/// <param name="request">The JSON-RPC request to send.</param>
|
|
/// <param name="cancellationToken">The <see cref="CancellationToken"/> to monitor for cancellation requests. The default is <see cref="CancellationToken.None"/>.</param>
|
|
/// <returns>A task containing the client's response.</returns>
|
|
Task<JsonRpcResponse> SendRequestAsync(JsonRpcRequest request, CancellationToken cancellationToken = default);
|
|
|
|
/// <summary>Sends a message to the connected endpoint.</summary>
|
|
/// <param name="message">The message.</param>
|
|
/// <param name="cancellationToken">The <see cref="CancellationToken"/> to monitor for cancellation requests. The default is <see cref="CancellationToken.None"/>.</param>
|
|
Task SendMessageAsync(IJsonRpcMessage message, CancellationToken cancellationToken = default);
|
|
|
|
/// <summary>Registers a handler to be invoked when a notification for the specified method is received.</summary>
|
|
/// <param name="method">The notification method.</param>
|
|
/// <param name="handler">The handler to be invoked.</param>
|
|
/// <returns>An <see cref="IDisposable"/> that will remove the registered handler when disposed.</returns>
|
|
IAsyncDisposable RegisterNotificationHandler(string method, Func<JsonRpcNotification, CancellationToken, Task> handler);
|
|
}
|