Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion samples/FileBasedMcpServer/Program.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
#!/usr/bin/env -S dotnet run --
#!/usr/bin/env dotnet
#:package Microsoft.Extensions.Hosting
#:project ../../src/ModelContextProtocol/ModelContextProtocol.csproj

Expand Down
41 changes: 18 additions & 23 deletions samples/FileBasedMcpServer/README.md
Original file line number Diff line number Diff line change
@@ -1,64 +1,59 @@
# File-Based MCP Server Sample

This sample demonstrates how to create a complete MCP (Model Context Protocol) server using .NET 10's file-based programs feature. Unlike traditional .NET projects that require a `.csproj` file, file-based programs allow you to write and run complete applications in a single `.cs` file.

## Requirements

- .NET 10 SDK (RC2 or later)
- No project file required!
This sample demonstrates how to create a complete MCP (Model Context Protocol) server using [.NET 10's file-based programs feature](https://learn.microsoft.com/dotnet/csharp/fundamentals/tutorials/file-based-programs). Unlike traditional .NET projects that require a `.csproj` file, file-based programs allow you to write and run complete applications in a single `.cs` file.

## Running the Sample

Simply run the Program.cs file directly:

```bash
dotnet run Program.cs
./Program.cs
```

The server will start and listen for MCP messages on stdin/stdout (stdio transport).

### Making it Executable (Unix/Linux/macOS)
## Testing the Server

You can test the server by using `@modelcontextprotocol/inspector`, any stdio-compatible client, or sending JSON-RPC messages to stdin.

On Unix-like systems, you can make the file executable:
### Using the Inspector

```bash
chmod +x Program.cs
./Program.cs
npx @modelcontextprotocol/inspector ./Program.cs
```

Note: The shebang line uses `/usr/bin/env` to locate `dotnet`, so ensure it's in your PATH.

## Testing the Server
### Using STDIN

You can test the server by using `@modelcontextprotocol/inspector`, any stdio-compatible client, or sending JSON-RPC messages to stdin. Here's an example:
#### Initialize the server

### Initialize the server:
```bash
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test-client","version":"1.0"}}}' | dotnet run Program.cs
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test-client","version":"1.0"}}}' | ./Program.cs
```

### List available tools:
#### List available tools

```bash
(
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test-client","version":"1.0"}}}'
sleep 0.5
echo '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'
sleep 1
) | dotnet run Program.cs 2>/dev/null | grep '^{' | jq .
) | ./Program.cs 2>/dev/null | grep '^{' | jq .
```

### Call the echo tool:
#### Call the echo tool

```bash
(
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"test-client","version":"1.0"}}}'
sleep 0.5
echo '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"echo","arguments":{"message":"Hello, MCP!"}}}'
sleep 1
) | dotnet run Program.cs 2>/dev/null | grep '^{' | jq .
) | ./Program.cs 2>/dev/null | grep '^{' | jq .
```

## Reference

- [File-Based Programs Tutorial](https://learn.microsoft.com/en-us/dotnet/csharp/fundamentals/tutorials/file-based-programs)
- [C# Preprocessor Directives for File-Based Apps](https://learn.microsoft.com/en-us/dotnet/csharp/language-reference/preprocessor-directives#file-based-apps)
- [File-Based Programs Tutorial](https://learn.microsoft.com/dotnet/csharp/fundamentals/tutorials/file-based-programs)
- [C# Preprocessor Directives for File-Based Apps](https://learn.microsoft.com/dotnet/csharp/language-reference/preprocessor-directives#file-based-apps)
- [Model Context Protocol Specification](https://modelcontextprotocol.io/specification/)
Loading