| Filename | Latest commit message | Latest commit date |
|---|---|---|
Bumps [org.jetbrains.kotlinx:kotlinx-serialization-json](https://github.com/Kotlin/kotlinx.serialization) from 1.10.0 to 1.11.0. <details> <summary>Release notes</summary> <p><em>Sourced from <a href="https://github.com/Kotlin/kotlinx.serialization/releases">org.jetbrains.kotlinx:kotlinx-serialization-json's releases</a>.</em></p> <blockquote> <h2>1.11.0</h2> <p>This release is based on Kotlin 2.3.20 and provides a new Json exceptions API and some bugfixes and improvements.</p> <h2>Expose Json exceptions structure</h2> <p>To make working with exceptions easier and providing proper error codes in e.g., REST APIs, classes <code>JsonException</code>, <code>JsonDecodingException</code>, and <code>JsonEncodingException</code> are now public. They have relevant public properties, such as <code>shortMessage</code>, <code>path</code>, <code>offset</code>, and others. This API is currently experimental, and we're going to improve it further in the subsequent releases. See the linked issues for the details: <a href="https://redirect.github.com/Kotlin/kotlinx.serialization/issues/1930">#1930</a>, <a href="https://redirect.github.com/Kotlin/kotlinx.serialization/issues/1877">#1877</a>.</p> <h2>Ability to hide user input from exception messages for security/privacy reasons.</h2> <p>Historically, exception messages in kotlinx.serialization often included the input Json itself for debuggability reason. Such behavior may pose additional challenges for logging, analytics, and other systems, since a system is not always allowed to store user data due to privacy/security reasons, which imposes additional sanitation logic. To address this issue, a new property <code>exceptionsWithDebugInfo</code> is added to <code>JsonConfiguration</code>. Disable it to hide user input from exception messages. IMPORTANT: This behavior will be enabled by default when this property becomes stable. See <a href="https://redirect.github.com/Kotlin/kotlinx.serialization/issues/2590">#2590</a> for more details.</p> <h2>Bugfixes and improvements</h2> <ul> <li>CBOR: Relax value range check when decoding numbers (<a href="https://redirect.github.com/Kotlin/kotlinx.serialization/issues/3167">#3167</a>)</li> <li>Use a specialized writeDecimalLong method for IO stream integrations in Json (<a href="https://redirect.github.com/Kotlin/kotlinx.serialization/issues/3152">#3152</a>)</li> </ul> </blockquote> </details> <details> <summary>Changelog</summary> <p><em>Sourced from <a href="https://github.com/Kotlin/kotlinx.serialization/blob/master/CHANGELOG.md">org.jetbrains.kotlinx:kotlinx-serialization-json's changelog</a>.</em></p> <blockquote> <h1>1.11.0 / 2026-04-10</h1> <p>This release is based on Kotlin 2.3.20 and provides new Json exceptions API and some bugfixes and improvements.</p> <h2>Expose Json exceptions structure</h2> <p>To make working with exceptions easier and providing proper error codes in e.g., REST APIs, classes <code>JsonException</code>, <code>JsonDecodingException</code>, and <code>JsonEncodingException</code> are now public. They have relevant public properties, such as <code>shortMessage</code>, <code>path</code>, <code>offset</code>, and others. This API is currently experimental, and we're going to improve it further in the subsequent releases. See the linked issues for the details: <a href="https://redirect.github.com/Kotlin/kotlinx.serialization/issues/1930">#1930</a>, <a href="https://redirect.github.com/Kotlin/kotlinx.serialization/issues/1877">#1877</a>.</p> <h2>Ability to hide user input from exception messages for security/privacy reasons.</h2> <p>Historically, exception messages in kotlinx.serialization often included the input Json itself for debuggability reason. Such behavior may pose additional challenges for logging, analytics, and other systems, since a system is not always allowed to store user data due to privacy/security reasons, which imposes additional sanitation logic. To address this issue, a new property <code>exceptionsWithDebugInfo</code> is added to <code>JsonConfiguration</code>. Disable it to hide user input from exception messages. IMPORTANT: This behavior will be enabled by default when this property becomes stable. See <a href="https://redirect.github.com/Kotlin/kotlinx.serialization/issues/2590">#2590</a> for more details.</p> <h2>Bugfixes and improvements</h2> <ul> <li>CBOR: Relax value range check when decoding numbers (<a href="https://redirect.github.com/Kotlin/kotlinx.serialization/issues/3167">#3167</a>)</li> <li>Use a specialized writeDecimalLong method for IO stream integrations in Json (<a href="https://redirect.github.com/Kotlin/kotlinx.serialization/issues/3152">#3152</a>)</li> </ul> </blockquote> </details> <details> <summary>Commits</summary> <ul> <li><a href=" |
||
| .. | ||
| gradle | ||
| src | ||
| build.gradle.kts | ||
| Dockerfile | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| README.md | ||
| settings.gradle.kts | ||
Kotlinlang MCP Server
A Streamable HTTP MCP server that exposes the official
Kotlin documentation to LLM clients — full-text search via
Algolia plus page retrieval in markdown through kotlinlang.org's
_llms endpoints.
Overview
This sample demonstrates an MCP server that wraps a real external documentation source. It uses the recommended Streamable HTTP transport, supports multiple concurrent client sessions, and caches responses in memory to reduce upstream load. The server is intentionally read-only — it exposes two tools, no prompts, no resources.
Prerequisites
- JDK 21+
- Algolia credentials for
kotlinlang.org(exported as environment variables, see Configuration)
Build & Run
export ALGOLIA_APP_ID=...
export ALGOLIA_API_KEY=...
export ALGOLIA_INDEX_NAME=...
./gradlew run
The server starts on http://localhost:8080/mcp by default.
Connect with the MCP Inspector:
npx @modelcontextprotocol/inspector
In the Inspector UI, select Streamable HTTP transport and enter http://localhost:8080/mcp.
MCP Capabilities
Tools
| Name | Description |
|---|---|
search_kotlinlang |
Full-text search across Kotlin documentation. Returns up to 5 results filtered to /docs/ pages. Responses cached for 10 minutes. |
get_kotlinlang_page |
Fetches a documentation page as markdown via kotlinlang.org's _llms endpoint. Accepts a path relative to /docs/. Cached for 1 hour. |
Example paths accepted by get_kotlinlang_page: coroutines-overview,
multiplatform/compose-multiplatform-and-jetpack-compose. Leading/trailing slashes and an optional
.html suffix are normalized before resolution.
Configuration
| Variable | Required | Default | Description |
|---|---|---|---|
ALGOLIA_APP_ID |
yes | — | Algolia application ID |
ALGOLIA_API_KEY |
yes | — | Algolia search API key |
ALGOLIA_INDEX_NAME |
yes | — | Algolia index name |
SERVER_PORT |
no | 8080 |
HTTP server port |
SERVER_HOST |
no | 0.0.0.0 |
HTTP server bind address |
The server does not provide fallback values for ALGOLIA_*. Startup fails if any of those
variables are missing.
Docker
Multi-stage build with Alpine-based images. Runs as a non-root user.
docker build -t kotlinlang-mcp-server .
docker run \
-p 8080:8080 \
-e ALGOLIA_APP_ID=... \
-e ALGOLIA_API_KEY=... \
-e ALGOLIA_INDEX_NAME=... \
kotlinlang-mcp-server
Connecting an MCP client
Any MCP client that supports Streamable HTTP transport can connect:
{
"mcpServers": {
"kotlinlang": {
"url": "http://localhost:8080/mcp"
}
}
}
Limitations
This sample is intended for demonstration only. Before production use, consider:
- In-memory cache only — cached data is lost on server restart.
- No authentication or authorization — run behind a trusted proxy or restrict network access.
- No rate limiting on outgoing requests to Algolia and kotlinlang.org.
- Permissive CORS (
anyHost()) — restrict to specific origins for any non-local deployment. - Streamable HTTP only — no STDIO transport for local-only usage.
- Tools only — no MCP resources or prompts are exposed.