kotlin-sdk/samples/simple-streamable-server
Repository files (latest commit first)
Filename Latest commit message Latest commit date
dependabot[bot] 2d23827963
chore(deps): bump mcp-kotlin from 0.11.0 to 0.11.1 in /samples/simple-streamable-server (#701)
Bumps `mcp-kotlin` from 0.11.0 to 0.11.1.
Updates `io.modelcontextprotocol:kotlin-sdk-client` from 0.11.0 to
0.11.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/modelcontextprotocol/kotlin-sdk/releases">io.modelcontextprotocol:kotlin-sdk-client's
releases</a>.</em></p>
<blockquote>
<h2>0.11.1</h2>
<h3>Description</h3>
<p>Fixes an SSE stream crash on Netty when clients connect to the
Streamable HTTP GET endpoint.</p>
<h3>Fixed</h3>
<ul>
<li>Fixed GET SSE stream crash on Netty in Streamable HTTP where
<code>appendSseHeaders()</code> was called after response headers were
already committed, causing <code>UnsupportedOperationException</code>
and client retry loops by <a
href="https://github.com/devcrocod"><code>@​devcrocod</code></a> in <a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/pull/681">#681</a></li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>mcp-kotlin to v0.11.0 in <a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/pull/672">#672</a>,
<a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/pull/673">#673</a>,
<a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/pull/675">#675</a>,
<a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/pull/676">#676</a></li>
<li>Ktor BOM to v3.3.3 in <a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/pull/650">#650</a>,
<a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/pull/653">#653</a>,
<a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/pull/656">#656</a></li>
<li>Kotest assertions to v6.1.11 in <a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/pull/674">#674</a></li>
<li>anthropic-java to v2.19.0 in <a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/pull/671">#671</a></li>
<li><code>@​modelcontextprotocol/sdk</code> to v1.29.0,
<code>@​types/node</code> update in <a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/pull/677">#677</a></li>
<li>hono to v4.12.12 in <a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/pull/680">#680</a></li>
<li><code>@​hono/node-server</code> to v1.19.13 in <a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/pull/679">#679</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/modelcontextprotocol/kotlin-sdk/compare/0.11.0...0.11.1">https://github.com/modelcontextprotocol/kotlin-sdk/compare/0.11.0...0.11.1</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f02f5d3d10"><code>f02f5d3</code></a>
release: bump mcp kotlin-sdk version to 0.11.1 (<a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/issues/682">#682</a>)</li>
<li><a
href="8a7f9f8d31"><code>8a7f9f8</code></a>
fix(server): GET SSE stream crash on Netty in Streamable HTTP (<a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/issues/681">#681</a>)</li>
<li><a
href="cceca4df58"><code>cceca4d</code></a>
chore(deps): bump io.ktor:ktor-bom from 3.2.3 to 3.3.3 in
/samples/kotlin-mcp...</li>
<li><a
href="12171dc2ec"><code>12171dc</code></a>
chore(deps): bump hono from 4.12.9 to 4.12.12 in
/integration-test/src/jvmTes...</li>
<li><a
href="66d17956c1"><code>66d1795</code></a>
chore(deps): bump <code>@​hono/node-server</code> from 1.19.11 to
1.19.13 in /integration-t...</li>
<li><a
href="8442ab852b"><code>8442ab8</code></a>
chore(deps): bump com.anthropic:anthropic-java from 2.18.0 to 2.19.0 in
/samp...</li>
<li><a
href="20ac69f9af"><code>20ac69f</code></a>
chore(deps): bump mcp-kotlin from 0.10.0 to 0.11.0 in
/samples/simple-streama...</li>
<li><a
href="4144db6736"><code>4144db6</code></a>
chore(deps): bump io.modelcontextprotocol:kotlin-sdk-client from 0.10.0
to 0....</li>
<li><a
href="3f7f499dbe"><code>3f7f499</code></a>
chore(deps): bump mcp-kotlin from 0.10.0 to 0.11.0 in
/samples/kotlin-mcp-ser...</li>
<li><a
href="7c87ed1ba5"><code>7c87ed1</code></a>
chore(deps): bump the kotest group with 3 updates (<a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/issues/674">#674</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/modelcontextprotocol/kotlin-sdk/compare/0.11.0...0.11.1">compare
view</a></li>
</ul>
</details>
<br />

Updates `io.modelcontextprotocol:kotlin-sdk-server` from 0.11.0 to
0.11.1
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/modelcontextprotocol/kotlin-sdk/releases">io.modelcontextprotocol:kotlin-sdk-server's
releases</a>.</em></p>
<blockquote>
<h2>0.11.1</h2>
<h3>Description</h3>
<p>Fixes an SSE stream crash on Netty when clients connect to the
Streamable HTTP GET endpoint.</p>
<h3>Fixed</h3>
<ul>
<li>Fixed GET SSE stream crash on Netty in Streamable HTTP where
<code>appendSseHeaders()</code> was called after response headers were
already committed, causing <code>UnsupportedOperationException</code>
and client retry loops by <a
href="https://github.com/devcrocod"><code>@​devcrocod</code></a> in <a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/pull/681">#681</a></li>
</ul>
<h3>Dependencies</h3>
<ul>
<li>mcp-kotlin to v0.11.0 in <a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/pull/672">#672</a>,
<a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/pull/673">#673</a>,
<a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/pull/675">#675</a>,
<a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/pull/676">#676</a></li>
<li>Ktor BOM to v3.3.3 in <a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/pull/650">#650</a>,
<a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/pull/653">#653</a>,
<a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/pull/656">#656</a></li>
<li>Kotest assertions to v6.1.11 in <a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/pull/674">#674</a></li>
<li>anthropic-java to v2.19.0 in <a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/pull/671">#671</a></li>
<li><code>@​modelcontextprotocol/sdk</code> to v1.29.0,
<code>@​types/node</code> update in <a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/pull/677">#677</a></li>
<li>hono to v4.12.12 in <a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/pull/680">#680</a></li>
<li><code>@​hono/node-server</code> to v1.19.13 in <a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/pull/679">#679</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/modelcontextprotocol/kotlin-sdk/compare/0.11.0...0.11.1">https://github.com/modelcontextprotocol/kotlin-sdk/compare/0.11.0...0.11.1</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="f02f5d3d10"><code>f02f5d3</code></a>
release: bump mcp kotlin-sdk version to 0.11.1 (<a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/issues/682">#682</a>)</li>
<li><a
href="8a7f9f8d31"><code>8a7f9f8</code></a>
fix(server): GET SSE stream crash on Netty in Streamable HTTP (<a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/issues/681">#681</a>)</li>
<li><a
href="cceca4df58"><code>cceca4d</code></a>
chore(deps): bump io.ktor:ktor-bom from 3.2.3 to 3.3.3 in
/samples/kotlin-mcp...</li>
<li><a
href="12171dc2ec"><code>12171dc</code></a>
chore(deps): bump hono from 4.12.9 to 4.12.12 in
/integration-test/src/jvmTes...</li>
<li><a
href="66d17956c1"><code>66d1795</code></a>
chore(deps): bump <code>@​hono/node-server</code> from 1.19.11 to
1.19.13 in /integration-t...</li>
<li><a
href="8442ab852b"><code>8442ab8</code></a>
chore(deps): bump com.anthropic:anthropic-java from 2.18.0 to 2.19.0 in
/samp...</li>
<li><a
href="20ac69f9af"><code>20ac69f</code></a>
chore(deps): bump mcp-kotlin from 0.10.0 to 0.11.0 in
/samples/simple-streama...</li>
<li><a
href="4144db6736"><code>4144db6</code></a>
chore(deps): bump io.modelcontextprotocol:kotlin-sdk-client from 0.10.0
to 0....</li>
<li><a
href="3f7f499dbe"><code>3f7f499</code></a>
chore(deps): bump mcp-kotlin from 0.10.0 to 0.11.0 in
/samples/kotlin-mcp-ser...</li>
<li><a
href="7c87ed1ba5"><code>7c87ed1</code></a>
chore(deps): bump the kotest group with 3 updates (<a
href="https://redirect.github.com/modelcontextprotocol/kotlin-sdk/issues/674">#674</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/modelcontextprotocol/kotlin-sdk/compare/0.11.0...0.11.1">compare
view</a></li>
</ul>
</details>
<br />

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-15 00:17:16 +02:00
..
gradle chore(deps): bump mcp-kotlin from 0.11.0 to 0.11.1 in /samples/simple-streamable-server (#701) 2026-04-15 00:17:16 +02:00
src samples: update mcp-kotlin to 0.10.0 across sample projects (#645) 2026-03-30 23:47:31 +03:00
build.gradle.kts samples: update mcp-kotlin to 0.10.0 across sample projects (#645) 2026-03-30 23:47:31 +03:00
gradle.properties docs: streamable server sample (#595) 2026-03-10 12:45:21 +01:00
gradlew chore(deps): bump the other-dependencies group across 4 directories with 4 updates (#634) 2026-03-27 00:58:15 +00:00
gradlew.bat chore(deps): bump the other-dependencies group across 4 directories with 4 updates (#634) 2026-03-27 00:58:15 +00:00
README.md docs: streamable server sample (#595) 2026-03-10 12:45:21 +01:00
settings.gradle.kts docs: streamable server sample (#595) 2026-03-10 12:45:21 +01:00

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.