csharp-sdk/samples/InMemoryTransport/README.md
Akbar Dizaji 87f5b09b24
Add README for the InMemoryTransport sample (#1769)
Co-authored-by: Akbar Dızajı <akbar@skedda.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-04 12:40:52 -07:00

1.5 KiB

In-Memory Transport Sample

Demonstrates connecting an MCP client and server in the same process using stream-based transports over in-memory pipes (System.IO.Pipelines) — no child process, no network.

The server is created directly with McpServer.Create, without a host or dependency injection container, and exposes a single Echo tool defined from a delegate with McpServerTool.Create. The client connects over the same pipe pair with StreamClientTransport, lists the server's tools, and invokes the tool.

This pattern is useful for testing MCP servers, embedding a server inside a larger application, or running a client and server in the same process without transport overhead. See Transports: In-memory transport for more background.

Run

dotnet run --project samples/InMemoryTransport/InMemoryTransport.csproj

Expected output:

Tool Name: Echo

Echo: Hello World

Key files

  • Program.cs — the entire sample: pipe setup, server creation, client connection, tool listing, and tool invocation.

Notes

  • StreamServerTransport and StreamClientTransport work with any Stream. This sample wires them to a pair of Pipe instances, one per direction; the client's output stream is the server's input stream and vice versa.
  • The server is started with a fire-and-forget server.RunAsync() because both endpoints live in the same process. await using on the server and client ensures both are disposed when the program exits.