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>
This commit is contained in:
Akbar Dizaji 2026-08-04 21:40:52 +02:00 • committed by GitHub
commit 87f5b09b24
No known key found for this signature in database
GPG key ID: B5690EEEBB952194

View file

@ -0,0 +1,42 @@
# 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](../../docs/concepts/transports/transports.md) for more
background.
## Run
```bash
dotnet run --project samples/InMemoryTransport/InMemoryTransport.csproj
```
Expected output:
```
Tool Name: Echo
Echo: Hello World
```
## Key files
- [`Program.cs`](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.