kotlin-sdk/samples
Repository files (latest commit first)
Filename Latest commit message Latest commit date
dependabot[bot] cceca4df58
chore(deps): bump io.ktor:ktor-bom from 3.2.3 to 3.3.3 in /samples/kotlin-mcp-client (#650)
Bumps [io.ktor:ktor-bom](https://github.com/ktorio/ktor) from 3.2.3 to
3.3.3.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/ktorio/ktor/releases">io.ktor:ktor-bom's
releases</a>.</em></p>
<blockquote>
<h2>3.3.3</h2>
<blockquote>
<p>Published 26 November 2025</p>
</blockquote>
<h3>Improvements</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KTOR-6837">KTOR-6837</a>
Discrepancies when parsing URL host with CIO and Darwin engines compared
to the rest engines</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KTOR-9050">KTOR-9050</a>
Logging: SimpleLogger should be an object, not a class</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KTOR-9094">KTOR-9094</a>
Jetty Client: Support HTTP/2 over cleartext (h2c)</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KTOR-9120">KTOR-9120</a>
OpenAPI gen: missing operationId for KDoc fields</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KTOR-3019">KTOR-3019</a>
Improve logging for CORS plugin</li>
</ul>
<h3>Bugfixes</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KTOR-8671">KTOR-8671</a>
Netty: RejectedExecutionException during shutdown on MacOS when dev mode
is enabled</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KTOR-9096">KTOR-9096</a>
Darwin: New SSE handlers stop responding after canceling few SSE
sessions</li>
<li><a
href="http://youtrack.jetbrains.com/issue/KTOR-9125">KTOR-9125</a>
Double ResponseSent invocation when exception is thrown after
respond</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KTOR-8878">KTOR-8878</a>
OpenAPI: StackOverflowError when a response object has property with
<code>@Contextual</code> serializer</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KTOR-8947">KTOR-8947</a>
Java, ContentEncoding: IllegalHeaderNameException is thrown for
&quot;:status&quot; pseudo header with HTTP/2</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KTOR-9092">KTOR-9092</a>
NettyHttp2Handler throws IllegalArgumentException:
'ktor.ApplicationCall' is already in use</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KTOR-8924">KTOR-8924</a>
Curl: Client sends both Transfer-Encoding and Content-Length headers for
DELETE requests with body</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KTOR-8838">KTOR-8838</a>
Exception handling issue in client cache</li>
</ul>
<h2>3.3.2</h2>
<blockquote>
<p>Published 5 November 2025</p>
</blockquote>
<h3>Improvements</h3>
<ul>
<li>WebRTC Client. Remove redundant targets (<a
href="https://youtrack.jetbrains.com/issue/KTOR-9062">KTOR-9062</a>)</li>
<li>Add Socks proxy support to Darwin engine (<a
href="https://youtrack.jetbrains.com/issue/KTOR-8968">KTOR-8968</a>)</li>
<li>Java: Improve error message when SOCKS proxy is used (<a
href="https://youtrack.jetbrains.com/issue/KTOR-2908">KTOR-2908</a>)</li>
</ul>
<h3>Bugfixes</h3>
<ul>
<li>HttpRequestRetry: SendCountExceedException when max retries is more
than maxSendCount of HttpSend (<a
href="https://youtrack.jetbrains.com/issue/KTOR-5850">KTOR-5850</a>)</li>
<li>Darwin: The <code>maxFrameSize</code> option has no effect (<a
href="https://youtrack.jetbrains.com/issue/KTOR-6963">KTOR-6963</a>)</li>
<li>OpenAPI: StackOverflowError when a response object has property with
<code>@Contextual</code> serializer (<a
href="https://youtrack.jetbrains.com/issue/KTOR-8878">KTOR-8878</a>)</li>
<li>OpenAPI gen: missing KDoc fields (<a
href="https://youtrack.jetbrains.com/issue/KTOR-9021">KTOR-9021</a>)</li>
<li>Server call.request.path() returns routing selectors in path (<a
href="https://youtrack.jetbrains.com/issue/KTOR-7639">KTOR-7639</a>)</li>
<li>StaticContent doesn't allow siblings (<a
href="https://youtrack.jetbrains.com/issue/KTOR-9012">KTOR-9012</a>)</li>
<li>HttpCache: FileStorage doesn't use given dispatcher for all file
operations (<a
href="https://youtrack.jetbrains.com/issue/KTOR-8832">KTOR-8832</a>)</li>
<li>Curl: SOCKS proxy doesn't work (<a
href="https://youtrack.jetbrains.com/issue/KTOR-9008">KTOR-9008</a>)</li>
<li>Netty: java.lang.VerifyError is thrown on Android since 3.3.0 (<a
href="https://youtrack.jetbrains.com/issue/KTOR-8916">KTOR-8916</a>)</li>
<li>Response body channel is canceled while the body is being saved when
having HttpRequestRetry and onDownload (<a
href="https://youtrack.jetbrains.com/issue/KTOR-8975">KTOR-8975</a>)</li>
<li>HttpCache: InvalidCacheStateException when varyKeys stored in files
contain uppercase letters since 3.3.0 (<a
href="https://youtrack.jetbrains.com/issue/KTOR-8970">KTOR-8970</a>)</li>
</ul>
<h2>3.3.1</h2>
<blockquote>
<p>Published 8 October 2025</p>
</blockquote>
<h3>Improvements</h3>
<ul>
<li>Add a note about SSE session lifetime in KDoc (<a
href="https://youtrack.jetbrains.com/issue/KTOR-8440">KTOR-8440</a>)</li>
<li>Update Kotlin to 2.2.20 (<a
href="https://youtrack.jetbrains.com/issue/KTOR-8896">KTOR-8896</a>)</li>
</ul>
<h3>Bugfixes</h3>
<ul>
<li>NumberFormatException when Content-Length header value contains null
bytes (<a
href="https://youtrack.jetbrains.com/issue/KTOR-4828">KTOR-4828</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Changelog</summary>
<p><em>Sourced from <a
href="https://github.com/ktorio/ktor/blob/main/CHANGELOG.md">io.ktor:ktor-bom's
changelog</a>.</em></p>
<blockquote>
<h1>3.3.3</h1>
<blockquote>
<p>Published 26 November 2025</p>
</blockquote>
<h3>Improvements</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KTOR-6837">KTOR-6837</a>
Discrepancies when parsing URL host with CIO and Darwin engines compared
to the rest engines</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KTOR-9050">KTOR-9050</a>
Logging: SimpleLogger should be an object, not a class</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KTOR-9094">KTOR-9094</a>
Jetty Client: Support HTTP/2 over cleartext (h2c)</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KTOR-9120">KTOR-9120</a>
OpenAPI gen: missing operationId for KDoc fields</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KTOR-3019">KTOR-3019</a>
Improve logging for CORS plugin</li>
</ul>
<h3>Bugfixes</h3>
<ul>
<li><a
href="https://youtrack.jetbrains.com/issue/KTOR-8671">KTOR-8671</a>
Netty: RejectedExecutionException during shutdown on MacOS when dev mode
is enabled</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KTOR-9096">KTOR-9096</a>
Darwin: New SSE handlers stop responding after canceling few SSE
sessions</li>
<li><a
href="http://youtrack.jetbrains.com/issue/KTOR-9125">KTOR-9125</a>
Double ResponseSent invocation when exception is thrown after
respond</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KTOR-8878">KTOR-8878</a>
OpenAPI: StackOverflowError when a response object has property with <a
href="https://github.com/Contextual"><code>@​Contextual</code></a>
serializer</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KTOR-8947">KTOR-8947</a>
Java, ContentEncoding: IllegalHeaderNameException is thrown for
&quot;:status&quot; pseudo header with HTTP/2</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KTOR-9092">KTOR-9092</a>
NettyHttp2Handler throws IllegalArgumentException:
'ktor.ApplicationCall' is already in use</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KTOR-8924">KTOR-8924</a>
Curl: Client sends both Transfer-Encoding and Content-Length headers for
DELETE requests with body</li>
<li><a
href="https://youtrack.jetbrains.com/issue/KTOR-8838">KTOR-8838</a>
Exception handling issue in client cache</li>
</ul>
<h1>3.3.2</h1>
<blockquote>
<p>Published 5 November 2025</p>
</blockquote>
<h3>Improvements</h3>
<ul>
<li>WebRTC Client. Remove redundant targets (<a
href="https://youtrack.jetbrains.com/issue/KTOR-9062">KTOR-9062</a>)</li>
<li>Add Socks proxy support to Darwin engine (<a
href="https://youtrack.jetbrains.com/issue/KTOR-8968">KTOR-8968</a>)</li>
<li>Java: Improve error message when SOCKS proxy is used (<a
href="https://youtrack.jetbrains.com/issue/KTOR-2908">KTOR-2908</a>)</li>
</ul>
<h3>Bugfixes</h3>
<ul>
<li>HttpRequestRetry: SendCountExceedException when max retries is more
than maxSendCount of HttpSend (<a
href="https://youtrack.jetbrains.com/issue/KTOR-5850">KTOR-5850</a>)</li>
<li>Darwin: The <code>maxFrameSize</code> option has no effect (<a
href="https://youtrack.jetbrains.com/issue/KTOR-6963">KTOR-6963</a>)</li>
<li>OpenAPI: StackOverflowError when a response object has property with
<a href="https://github.com/Contextual"><code>@​Contextual</code></a>
serializer (<a
href="https://youtrack.jetbrains.com/issue/KTOR-8878">KTOR-8878</a>)</li>
<li>OpenAPI gen: missing KDoc fields (<a
href="https://youtrack.jetbrains.com/issue/KTOR-9021">KTOR-9021</a>)</li>
<li>Server call.request.path() returns routing selectors in path (<a
href="https://youtrack.jetbrains.com/issue/KTOR-7639">KTOR-7639</a>)</li>
<li>StaticContent doesn't allow siblings (<a
href="https://youtrack.jetbrains.com/issue/KTOR-9012">KTOR-9012</a>)</li>
<li>HttpCache: FileStorage doesn't use given dispatcher for all file
operations (<a
href="https://youtrack.jetbrains.com/issue/KTOR-8832">KTOR-8832</a>)</li>
<li>Curl: SOCKS proxy doesn't work (<a
href="https://youtrack.jetbrains.com/issue/KTOR-9008">KTOR-9008</a>)</li>
<li>Netty: java.lang.VerifyError is thrown on Android since 3.3.0 (<a
href="https://youtrack.jetbrains.com/issue/KTOR-8916">KTOR-8916</a>)</li>
<li>Response body channel is canceled while the body is being saved when
having HttpRequestRetry and onDownload (<a
href="https://youtrack.jetbrains.com/issue/KTOR-8975">KTOR-8975</a>)</li>
<li>HttpCache: InvalidCacheStateException when varyKeys stored in files
contain uppercase letters since 3.3.0 (<a
href="https://youtrack.jetbrains.com/issue/KTOR-8970">KTOR-8970</a>)</li>
</ul>
<h1>3.3.1</h1>
<blockquote>
<p>Published 8 October 2025</p>
</blockquote>
<h3>Improvements</h3>
<ul>
<li>Add a note about SSE session lifetime in KDoc (<a
href="https://youtrack.jetbrains.com/issue/KTOR-8440">KTOR-8440</a>)</li>
<li>Update Kotlin to 2.2.20 (<a
href="https://youtrack.jetbrains.com/issue/KTOR-8896">KTOR-8896</a>)</li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="629d22ca15"><code>629d22c</code></a>
Release 3.3.3 (<a
href="https://redirect.github.com/ktorio/ktor/issues/5219">#5219</a>)</li>
<li><a
href="77bbf108e2"><code>77bbf10</code></a>
Server Netty. Fix rejected execution during engine stop (<a
href="https://redirect.github.com/ktorio/ktor/issues/8671">#8671</a>)</li>
<li><a
href="75439b0a69"><code>75439b0</code></a>
KTOR-9096 Fix SSE cancellation leak on Darwin (<a
href="https://redirect.github.com/ktorio/ktor/issues/5208">#5208</a>)</li>
<li><a
href="62ea8e43fb"><code>62ea8e4</code></a>
KTOR-6837 Fix client URL handling for invalid DefaultRequest.host</li>
<li><a
href="ef09e847da"><code>ef09e84</code></a>
Add stream.demand calls to JettyResponseListener</li>
<li><a
href="47e6049445"><code>47e6049</code></a>
KTOR-9094 Jetty Client: Allow h2c traffic</li>
<li><a
href="e70922ec80"><code>e70922e</code></a>
KTOR-9125 Fix double ResponseSent invocation when exception is thrown
after r...</li>
<li><a
href="589f02dd61"><code>589f02d</code></a>
KTOR-3019 Improve CORS plugin logging to ease troubleshooting (<a
href="https://redirect.github.com/ktorio/ktor/issues/5194">#5194</a>)</li>
<li><a
href="5a66b475d5"><code>5a66b47</code></a>
Update Gradle and Develocity (<a
href="https://redirect.github.com/ktorio/ktor/issues/5201">#5201</a>)</li>
<li><a
href="2ba2f0256a"><code>2ba2f02</code></a>
KTOR-8947 Filter pseudo-headers in Java client (<a
href="https://redirect.github.com/ktorio/ktor/issues/5198">#5198</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/ktorio/ktor/compare/3.2.3...3.3.3">compare
view</a></li>
</ul>
</details>
<br />

<details>
<summary>Most Recent Ignore Conditions Applied to This Pull
Request</summary>

| Dependency Name | Ignore Conditions |
| --- | --- |
| io.ktor:ktor-bom | [>= 3.4.a, < 3.5] |
</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-04-08 21:13:53 +00:00
..
kotlin-mcp-client chore(deps): bump io.ktor:ktor-bom from 3.2.3 to 3.3.3 in /samples/kotlin-mcp-client (#650) 2026-04-08 21:13:53 +00:00
kotlin-mcp-server chore(deps): bump mcp-kotlin from 0.10.0 to 0.11.0 in /samples/kotlin-mcp-server (#673) 2026-04-07 08:18:58 +00:00
notebooks samples: update mcp-kotlin to 0.10.0 across sample projects (#645) 2026-03-30 23:47:31 +03:00
simple-streamable-server chore(deps): bump mcp-kotlin from 0.10.0 to 0.11.0 in /samples/simple-streamable-server (#675) 2026-04-07 09:37:28 +00:00
weather-stdio-server chore(deps): bump mcp-kotlin from 0.10.0 to 0.11.0 in /samples/weather-stdio-server (#676) 2026-04-07 10:30:09 +03:00
README.md docs: streamable server sample (#595) 2026-03-10 12:45:21 +01:00

Kotlin MCP SDK Samples

Runnable projects demonstrating MCP server and client implementations with the Kotlin MCP SDK. For background on the protocol itself, see the MCP documentation.

Overview

Sample Type Transport MCP Features
simple-streamable-server Server Streamable HTTP Tools, Resources, Prompts, Logging
kotlin-mcp-server Server STDIO, SSE Tools, Resources, Prompts
weather-stdio-server Server STDIO Tools
kotlin-mcp-client Client STDIO Tool discovery & invocation
notebooks Client (Notebook) Streamable HTTP Tool discovery & invocation

Getting Started

  • Building a server? Start with simple-streamable-server — it uses the recommended Streamable HTTP transport and covers tools, resources, prompts, and logging.
  • Building a client? Open the notebooks sample for a step-by-step walkthrough, or see kotlin-mcp-client for a full CLI client with Anthropic API integration.

Samples

Simple Streamable HTTP Server

A minimal Streamable HTTP server with optional Bearer token authentication. Demonstrates tools (greet, multi-greet), a prompt template, a resource, and server-to-client logging notifications. Read more →

Kotlin MCP Server

A multi-transport server supporting STDIO, SSE (plain), and SSE (Ktor plugin). Useful for exploring different transport modes side by side. Read more →

Weather STDIO Server

A focused STDIO server that exposes weather forecast and alert tools backed by the weather.gov API. Includes Claude Desktop integration instructions. Read more →

Kotlin MCP Client

An interactive CLI client that connects to any MCP server over STDIO and routes queries through Anthropic's Claude API, bridging MCP tools with LLM conversations. Read more →

MCP Client Notebook

A Kotlin notebook that connects to a remote MCP server via Streamable HTTP and demonstrates ping, tool listing, and tool invocation — all in an interactive cell-by-cell format. Read more →