| Filename | Latest commit message | Latest commit date |
|---|---|---|
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 ":status" 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 ":status" 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=" |
||
| .. | ||
| gradle | ||
| src | ||
| build.gradle.kts | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| mcp-inspector-config.json | ||
| README.md | ||
| settings.gradle.kts | ||
Kotlin MCP Server
A sample MCP server demonstrating multiple transport modes: STDIO, SSE (plain), and SSE (Ktor plugin).
Note: The SSE transport modes are provided for backward compatibility. For new projects, consider using the simple-streamable-server sample, which uses the recommended Streamable HTTP transport.
Overview
This sample registers a prompt, a tool, and a resource, then lets you choose how to expose them.
STDIO mode is the default and is best for process-based clients. The two SSE modes show how to
serve MCP over HTTP using either a manual Ktor routing setup or the built-in mcp { } Ktor plugin.
Prerequisites
- JDK 17+
- MCP Inspector (optional, for testing)
Build & Run
STDIO mode (default)
./gradlew run
Or explicitly:
./gradlew run --args="--stdio"
Connect with the MCP Inspector:
npx @modelcontextprotocol/inspector --config samples/kotlin-mcp-server/mcp-inspector-config.json --server stdio-server
SSE with Ktor plugin
./gradlew run --args="--sse-server-ktor 3002"
Connect with the MCP Inspector:
npx @modelcontextprotocol/inspector --config samples/kotlin-mcp-server/mcp-inspector-config.json --server sse-ktor-server
SSE with plain configuration
Known issue: This mode may not work correctly at this time.
./gradlew run --args="--sse-server 3001"
Connect with the MCP Inspector:
npx @modelcontextprotocol/inspector --config samples/kotlin-mcp-server/mcp-inspector-config.json --server sse-server
MCP Capabilities
Tools
| Name | Description |
|---|---|
kotlin-sdk-tool |
A test tool that returns a "Hello, world!" greeting. |
Prompts
| Name | Description |
|---|---|
Kotlin Developer |
Generates a prompt to develop a small Kotlin application for a given project name. |
Resources
| Name | URI | Description |
|---|---|---|
Web Search |
https://search.com/ |
A placeholder resource demonstrating resource handling. |