kotlin-sdk/samples/simple-streamable-server/README.md
Pavel Gorgulov 0b39f57cff
docs: streamable server sample (#595)
- add a simple streamable http server example with auth
- update readme: replace quickstart example from sse server to
streamable server
- add readme files for samples, simple-streamable-server, notebooks

closes #170 

## How Has This Been Tested?
knit and inspector

## Breaking Changes
NaN

## Types of changes
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [x] Documentation update

## Checklist
- [x] I have read the [MCP
Documentation](https://modelcontextprotocol.io)
- [x] My code follows the repository's style guidelines
- [x] New and existing tests pass locally
- [ ] I have added appropriate error handling
- [x] I have added or updated documentation as needed
2026-03-10 12:45:21 +01:00

2 KiB

Simple Streamable HTTP Server

A minimal MCP server using the recommended Streamable HTTP transport with optional Bearer token authentication.

Overview

This sample demonstrates a Streamable HTTP MCP server built with Ktor. It exposes tools, a prompt template, and a resource over HTTP, and optionally supports Bearer token authentication. The multi-greet tool showcases server-to-client logging notifications with streaming delays.

Prerequisites

  • JDK 17+

Build & Run

Without authentication

./gradlew run

The server starts on http://localhost:3001/mcp by default.

Connect with the MCP Inspector:

npx @modelcontextprotocol/inspector

In the Inspector UI, select Streamable HTTP transport and enter http://localhost:3001/mcp.

Pass a port number as an argument to change it:

./gradlew run --args="8080"

With authentication

MCP_AUTH_TOKEN=my-secret ./gradlew run --args="--auth"

When --auth is passed, clients must include an Authorization: Bearer <token> header. The token is read from the MCP_AUTH_TOKEN environment variable (required when --auth is used).

Authentication caveats

This sample is intended for demonstration only. In production you should:

  • Use a proper identity provider instead of a static token.
  • Restrict CORS origins to your deployment domain — the sample allows all origins.
  • Serve the endpoint over HTTPS.

MCP Capabilities

Tools

Name Description
greet Returns a greeting for a given name.
multi-greet Sends logging notifications between delayed greetings, demonstrating streaming.

Prompts

Name Description
greeting-template Generates a friendly greeting message for a given name.

Resources

Name URI Description
Default Greeting https://example.com/greetings/default Returns a static "Hello, world!" text.