| Filename | Latest commit message | Latest commit date |
|---|---|---|
Bumps [io.ktor:ktor-bom](https://github.com/ktorio/ktor) from 3.5.1 to 3.5.2. <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.5.2</h2> <blockquote> <p>Published 31 July 2026</p> </blockquote> <h3>Improvements</h3> <ul> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-8032">KTOR-8032</a> RateLimit: Allow limit requests based on authentication result</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9719">KTOR-9719</a> <code>ApplicationCall.isStaticContent</code> returns false when called from plugin interceptors</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-8450">KTOR-8450</a> ContentNegotiation: it doesn't handle content type suffixes</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-7892">KTOR-7892</a> SwaggerUI: Missing oauth2-redirect.html support in the plugin</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9759">KTOR-9759</a> Reject whitespace in URL hosts during parsing</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9681">KTOR-9681</a> Update kotlinx-io to 0.9.1</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9743">KTOR-9743</a> ByteReadChannel.readLineStrict: Misleading definition of limit parameter in KDocs</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9504">KTOR-9504</a> Improve KDoc for EmbeddedServer.addShutdownHook</li> </ul> <h3>Bugfixes</h3> <ul> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9741">KTOR-9741</a> CIO: request-handler coroutine leak on half-closed idle connection after ≥1MB response</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-7661">KTOR-7661</a> Maven + YAML config file does not work</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9585">KTOR-9585</a> OpenAPI: JsonSchema title is truncated when it contains a dot</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9704">KTOR-9704</a> UTF-8 encoding in ktor-io bypasses JVM String.getBytes intrinsics, slowing every text response by 5-7x</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9588">KTOR-9588</a> SSE client (CIO engine) sends spurious <code>Content-Length: 0</code> on body-less GET (RFC 9110 § 8.6 violation; rejected by AWS ELB)</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9679">KTOR-9679</a> ByteReadChannel.readLine corrupts multi-byte UTF-8 by splitting a character at a buffer boundary</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9767">KTOR-9767</a> ByteReadChannel.readLineTo: Return read bytes count instead of decoded characters count <a href="#"><img src="https://img.shields.io/badge/%5BImpactful%20change%5D-orange?style=flat-square" alt="" /></a></li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-8992">KTOR-8992</a> HoconConfigLoader is not loaded when ktor-server-config-yaml on the classpath</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9698">KTOR-9698</a> OpenAPI: schema for kotlinx.serialization sealed types omits discriminator property in variant schemas</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9690">KTOR-9690</a> Netty: in-flight requests are aborted on stop(), ignoring shutdown grace period</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-8903">KTOR-8903</a> Netty: Close channel connection on errors properly</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9707">KTOR-9707</a> SaveBody performance regression</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9703">KTOR-9703</a> Inefficient text reading function in DefaultTransform</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9711">KTOR-9711</a> Netty HTTP/2: a single client-canceled stream (RST_STREAM) breaks response flushing for the whole connection</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9688">KTOR-9688</a> RateLimit: No access to principal when wrapped with authentication since 3.5.1</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9677">KTOR-9677</a> Auto-reloading: server is reloaded only once since 3.5.0</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9683">KTOR-9683</a> Sockets: Canceling a SelectorManager job doesn't close it properly</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9671">KTOR-9671</a> Darwin: Semicolons in URL path are sanitized</li> </ul> </blockquote> </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.5.2</h1> <blockquote> <p>Published 31 July 2026</p> </blockquote> <h3>Improvements</h3> <ul> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-8032">KTOR-8032</a> RateLimit: Allow limit requests based on authentication result</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9719">KTOR-9719</a> <code>ApplicationCall.isStaticContent</code> returns false when called from plugin interceptors</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-8450">KTOR-8450</a> ContentNegotiation: it doesn't handle content type suffixes</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-7892">KTOR-7892</a> SwaggerUI: Missing oauth2-redirect.html support in the plugin</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9759">KTOR-9759</a> Reject whitespace in URL hosts during parsing</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9681">KTOR-9681</a> Update kotlinx-io to 0.9.1</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9743">KTOR-9743</a> ByteReadChannel.readLineStrict: Misleading definition of limit parameter in KDocs</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9504">KTOR-9504</a> Improve KDoc for EmbeddedServer.addShutdownHook</li> </ul> <h3>Bugfixes</h3> <ul> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9741">KTOR-9741</a> CIO: request-handler coroutine leak on half-closed idle connection after ≥1MB response</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-7661">KTOR-7661</a> Maven + YAML config file does not work</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9585">KTOR-9585</a> OpenAPI: JsonSchema title is truncated when it contains a dot</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9704">KTOR-9704</a> UTF-8 encoding in ktor-io bypasses JVM String.getBytes intrinsics, slowing every text response by 5-7x</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9588">KTOR-9588</a> SSE client (CIO engine) sends spurious <code>Content-Length: 0</code> on body-less GET (RFC 9110 § 8.6 violation; rejected by AWS ELB)</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9679">KTOR-9679</a> ByteReadChannel.readLine corrupts multi-byte UTF-8 by splitting a character at a buffer boundary</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9767">KTOR-9767</a> ByteReadChannel.readLineTo: Return read bytes count instead of decoded characters count <a href="#"><img src="https://img.shields.io/badge/%5BImpactful%20change%5D-orange?style=flat-square" alt="" /></a></li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-8992">KTOR-8992</a> HoconConfigLoader is not loaded when ktor-server-config-yaml on the classpath</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9698">KTOR-9698</a> OpenAPI: schema for kotlinx.serialization sealed types omits discriminator property in variant schemas</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9690">KTOR-9690</a> Netty: in-flight requests are aborted on stop(), ignoring shutdown grace period</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-8903">KTOR-8903</a> Netty: Close channel connection on errors properly</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9707">KTOR-9707</a> SaveBody performance regression</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9703">KTOR-9703</a> Inefficient text reading function in DefaultTransform</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9711">KTOR-9711</a> Netty HTTP/2: a single client-canceled stream (RST_STREAM) breaks response flushing for the whole connection</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9688">KTOR-9688</a> RateLimit: No access to principal when wrapped with authentication since 3.5.1</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9677">KTOR-9677</a> Auto-reloading: server is reloaded only once since 3.5.0</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9683">KTOR-9683</a> Sockets: Canceling a SelectorManager job doesn't close it properly</li> <li><a href="https://youtrack.jetbrains.com/issue/KTOR-9671">KTOR-9671</a> Darwin: Semicolons in URL path are sanitized</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
| .. | ||
| kotlin-mcp-client | ||
| kotlin-mcp-server | ||
| kotlinlang-mcp-server | ||
| notebooks | ||
| simple-streamable-server | ||
| weather-stdio-server | ||
| README.md | ||
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 |
| kotlinlang-mcp-server | Server | Streamable HTTP | Tools |
| 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 →
Kotlinlang MCP Server
A Streamable HTTP server that exposes the official Kotlin documentation (kotlinlang.org) to LLM clients — full-text search via Algolia and page retrieval in markdown. Demonstrates wrapping a real external API in an MCP server with in-memory caching. 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 →