Table of Contents

Class McpClient

Namespace
LMKit.Mcp.Client
Assembly
LM-Kit.NET.dll

Provides a client for communicating with Model Context Protocol (MCP) servers over HTTP using JSON-RPC 2.0.

public sealed class McpClient : IDisposable
Inheritance
McpClient
Implements
Inherited Members

Remarks

The McpClient handles the complete MCP lifecycle including:

  • Establishing and maintaining sessions with MCP servers
  • Discovering available tools, resources, and prompts
  • Executing tool invocations and resource operations
  • Automatic retry logic for transient failures (408, 429, 5xx errors)
  • Content negotiation with fallback support
  • Real-time server notifications via Server-Sent Events (SSE)

Basic Usage:

// Create a client
using var client = new McpClient("https://api.example.com/mcp");

// Set authentication if required
client.SetBearerToken("your-api-token");

// Initialize the connection (happens automatically on first operation)
await client.InitializeAsync();

// Use the client to discover and call tools
var tools = await client.ListToolsAsync();
var result = await client.CallToolAsync("tool-name", parameters);

The client automatically manages the session lifecycle. If the connection is lost or authentication changes, subsequent operations will re-initialize the session transparently.

Constructors

McpClient(string, HttpClient)

Initializes a new MCP client using an externally provided HTTP client.

McpClient(string, TimeSpan?)

Initializes a new MCP client with an internally managed HTTP client.

Properties

ClientInfoName

Gets or sets the client name sent during MCP initialization.

ClientInfoTitle

Gets or sets the client title (display name) sent during MCP initialization.

ClientInfoVersion

Gets or sets the client version sent during MCP initialization.

InitialAccept

Gets or sets the initial Accept header profile for HTTP requests.

McpProtocolVersion

Gets the MCP protocol version currently in use for communication with the server.

Prompts

Gets a cached view of the server's prompt catalog. On first access, this property blocks to fetch the catalog via GetPromptsAsync(CancellationToken). Use RefreshPrompts(CancellationToken) to force a fresh fetch.

Resources

Gets a cached view of the server's resource catalog. On first access, this property blocks to fetch the catalog via GetResourcesAsync(CancellationToken).

ServerCapabilities

Gets the capabilities supported by the connected MCP server.

SessionId

Gets the current session identifier for this MCP connection.

Tools

Gets the cached tool list returned by tools/list. If not yet fetched, this property synchronously fetches the list (blocking the current thread). Prefer using GetToolsAsync(CancellationToken) for asynchronous code paths.

UserAgent

Gets or sets the User-Agent string sent with HTTP requests.

Methods

Dispose()

Releases all resources used by the MCP client.

GetPrompt(string, IDictionary<string, object>, CancellationToken)

Retrieves a fully rendered prompt by name via prompts/get (blocking wrapper).

GetPromptAsync(string, IDictionary<string, object>, CancellationToken)

Retrieves a fully rendered prompt by name via prompts/get.

GetPrompts(CancellationToken)

Synchronously retrieves the server's prompt catalog. This is a blocking wrapper over GetPromptsAsync(CancellationToken) and returns the cached list thereafter.

GetPromptsAsync(CancellationToken)

Retrieves the server's prompt catalog. Results are cached after the first call until invalidation or a manual refresh via RefreshPromptsAsync(CancellationToken).

GetResources(CancellationToken)

Retrieves the list of resources offered by the server (synchronous wrapper). Results are cached after the first call until invalidation or a manual refresh.

GetResourcesAsync(CancellationToken)

Retrieves the list of resources offered by the server. Results are cached after the first call until invalidation or a manual refresh.

GetTools(CancellationToken)

Retrieves the server’s tool catalog once via tools/list and caches it for future access.

GetToolsAsync(CancellationToken)

Retrieves and caches the server’s tool catalog via tools/list. Concurrent callers share the same underlying fetch task.

HasCapability(McpServerCapabilities)

Checks whether the server supports a specific capability.

Initialize(CancellationToken)

Synchronously initializes the MCP session and returns the server's initialization response.

InitializeAsync(CancellationToken)

Asynchronously initializes the MCP session and returns the server's initialization response.

ReadResource(string, CancellationToken)

Reads the content of a specific resource from the server (synchronous wrapper).

ReadResourceAsync(string, CancellationToken)

Reads the content of a specific resource from the server.

RefreshPrompts(CancellationToken)

Clears the cached prompt catalog and fetches a fresh copy (blocking wrapper).

RefreshPromptsAsync(CancellationToken)

Clears the cached prompt catalog and fetches a fresh copy from the server (async).

RefreshTools(CancellationToken)

Clears the cached tool list and fetches a fresh catalog via tools/list.

RefreshToolsAsync(CancellationToken)

Clears the cached tool list and fetches a fresh catalog via tools/list.

SetBearerToken(string)

Sets or clears the Bearer token used for authentication with the MCP server.

Shutdown(CancellationToken)

Synchronously shuts down the MCP client, clearing all cached state and preparing for potential reuse.

ShutdownAsync(CancellationToken)

Asynchronously shuts down the MCP client, clearing all cached state and preparing for potential reuse.

Events

AuthFailed

Gets or sets a callback invoked when an authentication failure is detected.

CatalogChanged

Raised when the server indicates that any catalog has changed (tools, resources, prompts, or roots). Fired after the client invalidates its local cache for that catalog.

PromptsChanged

Raised when the server indicates that the prompt catalog has changed. Fired after the client invalidates its local prompt cache.

Received

Gets or sets a callback invoked after receiving an HTTP response from the server.

ResourcesChanged

Raised when the server indicates that the resource catalog has changed. Fired after the client invalidates its local resource cache.

Sending

Invoked immediately before sending an HTTP request to the server.

ToolsChanged

Raised when the server indicates that the tool catalog has changed. Fired after the client invalidates its local tool cache.