kotlin-sdk/samples/simple-streamable-server
Repository files (latest commit first)
Filename Latest commit message Latest commit date
dependabot[bot] 00a27e6ceb
chore(deps): bump kotlin from 2.4.0 to 2.4.10 in /samples/simple-streamable-server (#904)
Bumps `kotlin` from 2.4.0 to 2.4.10.
Updates `org.jetbrains.kotlin.jvm` from 2.4.0 to 2.4.10
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/JetBrains/kotlin/releases">org.jetbrains.kotlin.jvm's
releases</a>.</em></p>
<blockquote>
<h2>Kotlin 2.4.10</h2>
<h2>Changelog</h2>
<h3>Backend. Wasm</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-87066"><code>KT-87066</code></a>
K/Wasm: Not all files are presented in compiler output directory with
multimodule-closed-world and incremental compilation</li>
</ul>
<h3>Compiler</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-86939"><code>KT-86939</code></a>
JVM: IllegalStateException &quot;No value for annotation parameter&quot;
when using const val in nested Java annotation array argument</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-83766"><code>KT-83766</code></a>
K2: Wrong sourcePsi is set for <code>SymbolPsiLiteral</code> in SLC for
annotation arguments referencing a const val</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-86728"><code>KT-86728</code></a>
Reified type inference: expected type not propagated into inline call
inside lambda with elvis operator</li>
</ul>
<h3>Compose Compiler</h3>
<ul>
<li><a
href="https://issuetracker.google.com/issues/522127447"><code>b/522127447</code></a>
Compose Compiler 2.4: classes previously inferred <code>stable</code>
now reported <code>runtime</code>/<code>Uncertain</code></li>
</ul>
<h3>Klibs</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-86501"><code>KT-86501</code></a>
Native: IrTypeAliasSymbolImpl is already bound. Signature:
kotlinx.datetime/Instant|null[0] on iosSimulatorArm64</li>
</ul>
<h3>Tools. CLI</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-86930"><code>KT-86930</code></a>
Introduce <code>kotlinr</code> in the Kotlin distribution</li>
</ul>
<h3>Tools. Gradle. BCV</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-87223"><code>KT-87223</code></a>
Gradle, BCV: open version range in kotlinAbiValidationCompatClasspath
causes kotlin-build-tools-impl to resolve to 2.4.20-Beta1 instead of
2.4.0</li>
</ul>
<h3>Tools. Gradle. JS</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-87304"><code>KT-87304</code></a>
jsBrowserTest fails with &quot;exited with errors (exit code:
1)&quot;</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-86057"><code>KT-86057</code></a>
kotlinUpgradeYarnLock skips lock file regeneration when kotlinNpmInstall
is up-to-date, causing kotlinStoreYarnLock to fail</li>
</ul>
<h3>Tools. Gradle. Multiplatform</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-87084"><code>KT-87084</code></a>
False positive warning for JS and Wasm compilations when CRI is
enabled</li>
</ul>
<h3>Tools. Scripts</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-87076"><code>KT-87076</code></a>
<code>@file</code>:CompilerOptions(&quot;-jvm-target&quot;, ...) ignored
in .main.kts scripts in Kotlin 2.4.0, falling back to JVM target
1.8</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-86352"><code>KT-86352</code></a>
K2 scripting: FirResolvedTypeRef exception when resolving extension
functions from imported scripts</li>
</ul>
<h2>Kotlin 2.4.10-RC2</h2>
<h2>Changelog</h2>
<h3>Backend. Wasm</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-87066"><code>KT-87066</code></a>
K/Wasm: Not all files are presented in compiler output directory with
multimodule-closed-world and incremental compilation</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md">org.jetbrains.kotlin.jvm's
changelog</a>.</em></p>
<blockquote>
<h2>2.4.10</h2>
<h3>Backend. Wasm</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-87066"><code>KT-87066</code></a>
K/Wasm: Not all files are presented in compiler output directory with
multimodule-closed-world and incremental compilation</li>
</ul>
<h3>Compiler</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-86939"><code>KT-86939</code></a>
JVM: IllegalStateException &quot;No value for annotation parameter&quot;
when using const val in nested Java annotation array argument</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-83766"><code>KT-83766</code></a>
K2: Wrong sourcePsi is set for <code>SymbolPsiLiteral</code> in SLC for
annotation arguments referencing a const val</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-86728"><code>KT-86728</code></a>
Reified type inference: expected type not propagated into inline call
inside lambda with elvis operator</li>
</ul>
<h3>Compose Compiler</h3>
<ul>
<li><a
href="https://issuetracker.google.com/issues/522127447"><code>b/522127447</code></a>
Compose Compiler 2.4: classes previously inferred <code>stable</code>
now reported <code>runtime</code>/<code>Uncertain</code></li>
</ul>
<h3>Klibs</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-86501"><code>KT-86501</code></a>
Native: IrTypeAliasSymbolImpl is already bound. Signature:
kotlinx.datetime/Instant|null[0] on iosSimulatorArm64</li>
</ul>
<h3>Tools. CLI</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-86930"><code>KT-86930</code></a>
Introduce <code>kotlinr</code> in the Kotlin distribution</li>
</ul>
<h3>Tools. Gradle. BCV</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-87223"><code>KT-87223</code></a>
Gradle, BCV: open version range in kotlinAbiValidationCompatClasspath
causes kotlin-build-tools-impl to resolve to 2.4.20-Beta1 instead of
2.4.0</li>
</ul>
<h3>Tools. Gradle. JS</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-87304"><code>KT-87304</code></a>
jsBrowserTest fails with &quot;exited with errors (exit code:
1)&quot;</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-86057"><code>KT-86057</code></a>
kotlinUpgradeYarnLock skips lock file regeneration when kotlinNpmInstall
is up-to-date, causing kotlinStoreYarnLock to fail</li>
</ul>
<h3>Tools. Gradle. Multiplatform</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-87084"><code>KT-87084</code></a>
False positive warning for JS and Wasm compilations when CRI is
enabled</li>
</ul>
<h3>Tools. Scripts</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-87076"><code>KT-87076</code></a>
<code>@file</code>:CompilerOptions(&quot;-jvm-target&quot;, ...) ignored
in .main.kts scripts in Kotlin 2.4.0, falling back to JVM target
1.8</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-86352"><code>KT-86352</code></a>
K2 scripting: FirResolvedTypeRef exception when resolving extension
functions from imported scripts</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="5687445832"><code>5687445</code></a>
Add Changelog for 2.4.10-RC2</li>
<li><a
href="ba30392c45"><code>ba30392</code></a>
[Wasm] Support regenerate unchanged modules flag on KGP</li>
<li><a
href="6307e7310d"><code>6307e73</code></a>
[Wasm] Implement Xwasm-IC-generate-unchanged-modules flag</li>
<li><a
href="39d7aee847"><code>39d7aee</code></a>
Add ChangeLog for 2.4.10-RC2</li>
<li><a
href="a2956bed85"><code>a2956be</code></a>
[Gradle] Update karma.conf.js to use 'require(...)' instead plain
strings</li>
<li><a
href="9b1361ce7a"><code>9b1361c</code></a>
[Gradle] KT-87223: Updated regression test</li>
<li><a
href="a4c153af52"><code>a4c153a</code></a>
[Gradle] KT-87223: Fix toochain to 2.4.0 for abiValidation compat
config</li>
<li><a
href="bc04b90d24"><code>bc04b90</code></a>
Add ChangeLog for 2.4.10-RC</li>
<li><a
href="bbcb94baa2"><code>bbcb94b</code></a>
[CRI] explicitly disable CRI generation for non-JVM targets to avoid
false-po...</li>
<li><a
href="6c2c458f1d"><code>6c2c458</code></a>
Scripting: fix jvmTarget processing from script annotations</li>
<li>Additional commits viewable in <a
href="https://github.com/JetBrains/kotlin/compare/v2.4.0...v2.4.10">compare
view</a></li>
</ul>
</details>
<br />

Updates `org.jetbrains.kotlin.plugin.serialization` from 2.4.0 to 2.4.10
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/JetBrains/kotlin/releases">org.jetbrains.kotlin.plugin.serialization's
releases</a>.</em></p>
<blockquote>
<h2>Kotlin 2.4.10</h2>
<h2>Changelog</h2>
<h3>Backend. Wasm</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-87066"><code>KT-87066</code></a>
K/Wasm: Not all files are presented in compiler output directory with
multimodule-closed-world and incremental compilation</li>
</ul>
<h3>Compiler</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-86939"><code>KT-86939</code></a>
JVM: IllegalStateException &quot;No value for annotation parameter&quot;
when using const val in nested Java annotation array argument</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-83766"><code>KT-83766</code></a>
K2: Wrong sourcePsi is set for <code>SymbolPsiLiteral</code> in SLC for
annotation arguments referencing a const val</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-86728"><code>KT-86728</code></a>
Reified type inference: expected type not propagated into inline call
inside lambda with elvis operator</li>
</ul>
<h3>Compose Compiler</h3>
<ul>
<li><a
href="https://issuetracker.google.com/issues/522127447"><code>b/522127447</code></a>
Compose Compiler 2.4: classes previously inferred <code>stable</code>
now reported <code>runtime</code>/<code>Uncertain</code></li>
</ul>
<h3>Klibs</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-86501"><code>KT-86501</code></a>
Native: IrTypeAliasSymbolImpl is already bound. Signature:
kotlinx.datetime/Instant|null[0] on iosSimulatorArm64</li>
</ul>
<h3>Tools. CLI</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-86930"><code>KT-86930</code></a>
Introduce <code>kotlinr</code> in the Kotlin distribution</li>
</ul>
<h3>Tools. Gradle. BCV</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-87223"><code>KT-87223</code></a>
Gradle, BCV: open version range in kotlinAbiValidationCompatClasspath
causes kotlin-build-tools-impl to resolve to 2.4.20-Beta1 instead of
2.4.0</li>
</ul>
<h3>Tools. Gradle. JS</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-87304"><code>KT-87304</code></a>
jsBrowserTest fails with &quot;exited with errors (exit code:
1)&quot;</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-86057"><code>KT-86057</code></a>
kotlinUpgradeYarnLock skips lock file regeneration when kotlinNpmInstall
is up-to-date, causing kotlinStoreYarnLock to fail</li>
</ul>
<h3>Tools. Gradle. Multiplatform</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-87084"><code>KT-87084</code></a>
False positive warning for JS and Wasm compilations when CRI is
enabled</li>
</ul>
<h3>Tools. Scripts</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-87076"><code>KT-87076</code></a>
<code>@file</code>:CompilerOptions(&quot;-jvm-target&quot;, ...) ignored
in .main.kts scripts in Kotlin 2.4.0, falling back to JVM target
1.8</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-86352"><code>KT-86352</code></a>
K2 scripting: FirResolvedTypeRef exception when resolving extension
functions from imported scripts</li>
</ul>
<h2>Kotlin 2.4.10-RC2</h2>
<h2>Changelog</h2>
<h3>Backend. Wasm</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-87066"><code>KT-87066</code></a>
K/Wasm: Not all files are presented in compiler output directory with
multimodule-closed-world and incremental compilation</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/JetBrains/kotlin/blob/master/ChangeLog.md">org.jetbrains.kotlin.plugin.serialization's
changelog</a>.</em></p>
<blockquote>
<h2>2.4.10</h2>
<h3>Backend. Wasm</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-87066"><code>KT-87066</code></a>
K/Wasm: Not all files are presented in compiler output directory with
multimodule-closed-world and incremental compilation</li>
</ul>
<h3>Compiler</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-86939"><code>KT-86939</code></a>
JVM: IllegalStateException &quot;No value for annotation parameter&quot;
when using const val in nested Java annotation array argument</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-83766"><code>KT-83766</code></a>
K2: Wrong sourcePsi is set for <code>SymbolPsiLiteral</code> in SLC for
annotation arguments referencing a const val</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-86728"><code>KT-86728</code></a>
Reified type inference: expected type not propagated into inline call
inside lambda with elvis operator</li>
</ul>
<h3>Compose Compiler</h3>
<ul>
<li><a
href="https://issuetracker.google.com/issues/522127447"><code>b/522127447</code></a>
Compose Compiler 2.4: classes previously inferred <code>stable</code>
now reported <code>runtime</code>/<code>Uncertain</code></li>
</ul>
<h3>Klibs</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-86501"><code>KT-86501</code></a>
Native: IrTypeAliasSymbolImpl is already bound. Signature:
kotlinx.datetime/Instant|null[0] on iosSimulatorArm64</li>
</ul>
<h3>Tools. CLI</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-86930"><code>KT-86930</code></a>
Introduce <code>kotlinr</code> in the Kotlin distribution</li>
</ul>
<h3>Tools. Gradle. BCV</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-87223"><code>KT-87223</code></a>
Gradle, BCV: open version range in kotlinAbiValidationCompatClasspath
causes kotlin-build-tools-impl to resolve to 2.4.20-Beta1 instead of
2.4.0</li>
</ul>
<h3>Tools. Gradle. JS</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-87304"><code>KT-87304</code></a>
jsBrowserTest fails with &quot;exited with errors (exit code:
1)&quot;</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-86057"><code>KT-86057</code></a>
kotlinUpgradeYarnLock skips lock file regeneration when kotlinNpmInstall
is up-to-date, causing kotlinStoreYarnLock to fail</li>
</ul>
<h3>Tools. Gradle. Multiplatform</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-87084"><code>KT-87084</code></a>
False positive warning for JS and Wasm compilations when CRI is
enabled</li>
</ul>
<h3>Tools. Scripts</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-87076"><code>KT-87076</code></a>
<code>@file</code>:CompilerOptions(&quot;-jvm-target&quot;, ...) ignored
in .main.kts scripts in Kotlin 2.4.0, falling back to JVM target
1.8</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KT-86352"><code>KT-86352</code></a>
K2 scripting: FirResolvedTypeRef exception when resolving extension
functions from imported scripts</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="5687445832"><code>5687445</code></a>
Add Changelog for 2.4.10-RC2</li>
<li><a
href="ba30392c45"><code>ba30392</code></a>
[Wasm] Support regenerate unchanged modules flag on KGP</li>
<li><a
href="6307e7310d"><code>6307e73</code></a>
[Wasm] Implement Xwasm-IC-generate-unchanged-modules flag</li>
<li><a
href="39d7aee847"><code>39d7aee</code></a>
Add ChangeLog for 2.4.10-RC2</li>
<li><a
href="a2956bed85"><code>a2956be</code></a>
[Gradle] Update karma.conf.js to use 'require(...)' instead plain
strings</li>
<li><a
href="9b1361ce7a"><code>9b1361c</code></a>
[Gradle] KT-87223: Updated regression test</li>
<li><a
href="a4c153af52"><code>a4c153a</code></a>
[Gradle] KT-87223: Fix toochain to 2.4.0 for abiValidation compat
config</li>
<li><a
href="bc04b90d24"><code>bc04b90</code></a>
Add ChangeLog for 2.4.10-RC</li>
<li><a
href="bbcb94baa2"><code>bbcb94b</code></a>
[CRI] explicitly disable CRI generation for non-JVM targets to avoid
false-po...</li>
<li><a
href="6c2c458f1d"><code>6c2c458</code></a>
Scripting: fix jvmTarget processing from script annotations</li>
<li>Additional commits viewable in <a
href="https://github.com/JetBrains/kotlin/compare/v2.4.0...v2.4.10">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-08-04 19:46:01 +02:00
..
gradle chore(deps): bump kotlin from 2.4.0 to 2.4.10 in /samples/simple-streamable-server (#904) 2026-08-04 19:46:01 +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 5 directories with 3 updates (#854) 2026-06-24 15:31:46 +02:00
gradlew.bat chore(deps): bump the other-dependencies group across 5 directories with 3 updates (#854) 2026-06-24 15:31:46 +02: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.