kotlin-sdk/samples/kotlinlang-mcp-server
Repository files (latest commit first)
Filename Latest commit message Latest commit date
dependabot[bot] 309d88fe1d
chore(deps): bump the other-dependencies group across 2 directories with 3 updates (#897)
Bumps the other-dependencies group with 2 updates in the
/samples/kotlinlang-mcp-server directory:
[ch.qos.logback:logback-classic](https://github.com/qos-ch/logback) and
[com.gradleup.shadow](https://github.com/GradleUp/shadow).
Bumps the other-dependencies group with 2 updates in the
/samples/simple-streamable-server directory:
[com.gradleup.shadow](https://github.com/GradleUp/shadow) and
[org.junit.jupiter:junit-jupiter](https://github.com/junit-team/junit-framework).

Updates `ch.qos.logback:logback-classic` from 1.5.37 to 1.5.38
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/qos-ch/logback/releases">ch.qos.logback:logback-classic's
releases</a>.</em></p>
<blockquote>
<h2>Logback 1.5.38</h2>
<p><strong>2026-07-09 Release of logback version 1.5.38</strong></p>
<p>• In <code>HardenedObjectInputStream</code>, fixed a typo preventing
<code>Throwable</code> objects from being white-filtered. This issue was
reported in [PR <a
href="https://redirect.github.com/qos-ch/logback/issues/1045">#1045</a>](<a
href="https://redirect.github.com/qos-ch/logback/pull/1045">qos-ch/logback#1045</a>)
by <a href="https://github.com/t0rchwo0d">t0rchwo0d</a>.</p>
<p>• A bitwise identical binary of this version can be reproduced by
building from source code at commit
d04984a41fce42977466f45a2f076f0ee5cc4207 associated with the tag
v_1.5.38. Release built using Java &quot;21&quot; 2023-10-17 LTS build
21.0.1.+12-LTS-29 under Linux Debian 11.6.</p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="d04984a41f"><code>d04984a</code></a>
prepare release 1.5.38</li>
<li><a
href="4fffda6549"><code>4fffda6</code></a>
updateversion of maven-gpg-plugin</li>
<li><a
href="7ee48a17be"><code>7ee48a1</code></a>
Fixed a typo where java,lang.Throwable was written with a comma instead
of a ...</li>
<li><a
href="84580a24e6"><code>84580a2</code></a>
remove license profile</li>
<li><a
href="f817c8de7d"><code>f817c8d</code></a>
start work on 1.5.28-SNAPSHOT</li>
<li>See full diff in <a
href="https://github.com/qos-ch/logback/compare/v_1.5.37...v_1.5.38">compare
view</a></li>
</ul>
</details>
<br />

Updates `com.gradleup.shadow` from 9.5.1 to 9.6.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/GradleUp/shadow/releases">com.gradleup.shadow's
releases</a>.</em></p>
<blockquote>
<h2>9.6.0</h2>
<h3>Added</h3>
<ul>
<li>Extract R8 rules from dependency JARs when using <code>minimize { r8
{ ... } }</code>. (<a
href="https://redirect.github.com/GradleUp/shadow/pull/2089">#2089</a>)</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Rename <code>ShadowDslMarker</code> to <code>ShadowDsl</code>. (<a
href="https://redirect.github.com/GradleUp/shadow/pull/2091">#2091</a>)</li>
<li><strong>POTENTIALLY BREAKING:</strong> Apply <code>@ShadowDsl</code>
to <code>ShadowJar</code>, <code>ResourceTransformer</code>,
<code>DependencyFilter</code>, and <code>Relocator</code>. (<a
href="https://redirect.github.com/GradleUp/shadow/pull/2090">#2090</a>)<br
/>
This restricts nested DSL configuration blocks from implicitly calling
outer receiver APIs in Kotlin script files.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Validate ZIP entry names to prevent Zip Slip path traversal.</li>
<li>Avoid resolving unused R8 dependency. (<a
href="https://redirect.github.com/GradleUp/shadow/pull/2101">#2101</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="fb3666804b"><code>fb36668</code></a>
Prepare version 9.6.0</li>
<li><a
href="9e5c06d226"><code>9e5c06d</code></a>
Test relocation of ModuleMainClass in module-info (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2109">#2109</a>)</li>
<li><a
href="e37770cd4f"><code>e37770c</code></a>
Test relocation of nested class signatures (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2108">#2108</a>)</li>
<li><a
href="74792f7ba4"><code>74792f7</code></a>
Add unit tests for internal components (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2107">#2107</a>)</li>
<li><a
href="b5908197f5"><code>b590819</code></a>
Avoid resolving unused R8 dependency (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2101">#2101</a>)</li>
<li><a
href="1dd8db498c"><code>1dd8db4</code></a>
Update plugin android-lint to v9.3.0 (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2104">#2104</a>)</li>
<li><a
href="083a01a712"><code>083a01a</code></a>
Defer shadowR8 configuration (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2100">#2100</a>)</li>
<li><a
href="1ce486dc5c"><code>1ce486d</code></a>
Update kotlin monorepo to v2.4.10 (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2103">#2103</a>)</li>
<li><a
href="c89473ef4a"><code>c89473e</code></a>
Test allowing custom ShadowJar without shadowR8 registered (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2102">#2102</a>)</li>
<li><a
href="f23f5c9521"><code>f23f5c9</code></a>
Update dependency org.junit:junit-bom to v6.1.2 (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2098">#2098</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/GradleUp/shadow/compare/9.5.1...9.6.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `com.gradleup.shadow` from 9.5.1 to 9.6.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/GradleUp/shadow/releases">com.gradleup.shadow's
releases</a>.</em></p>
<blockquote>
<h2>9.6.0</h2>
<h3>Added</h3>
<ul>
<li>Extract R8 rules from dependency JARs when using <code>minimize { r8
{ ... } }</code>. (<a
href="https://redirect.github.com/GradleUp/shadow/pull/2089">#2089</a>)</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Rename <code>ShadowDslMarker</code> to <code>ShadowDsl</code>. (<a
href="https://redirect.github.com/GradleUp/shadow/pull/2091">#2091</a>)</li>
<li><strong>POTENTIALLY BREAKING:</strong> Apply <code>@ShadowDsl</code>
to <code>ShadowJar</code>, <code>ResourceTransformer</code>,
<code>DependencyFilter</code>, and <code>Relocator</code>. (<a
href="https://redirect.github.com/GradleUp/shadow/pull/2090">#2090</a>)<br
/>
This restricts nested DSL configuration blocks from implicitly calling
outer receiver APIs in Kotlin script files.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Validate ZIP entry names to prevent Zip Slip path traversal.</li>
<li>Avoid resolving unused R8 dependency. (<a
href="https://redirect.github.com/GradleUp/shadow/pull/2101">#2101</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="fb3666804b"><code>fb36668</code></a>
Prepare version 9.6.0</li>
<li><a
href="9e5c06d226"><code>9e5c06d</code></a>
Test relocation of ModuleMainClass in module-info (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2109">#2109</a>)</li>
<li><a
href="e37770cd4f"><code>e37770c</code></a>
Test relocation of nested class signatures (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2108">#2108</a>)</li>
<li><a
href="74792f7ba4"><code>74792f7</code></a>
Add unit tests for internal components (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2107">#2107</a>)</li>
<li><a
href="b5908197f5"><code>b590819</code></a>
Avoid resolving unused R8 dependency (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2101">#2101</a>)</li>
<li><a
href="1dd8db498c"><code>1dd8db4</code></a>
Update plugin android-lint to v9.3.0 (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2104">#2104</a>)</li>
<li><a
href="083a01a712"><code>083a01a</code></a>
Defer shadowR8 configuration (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2100">#2100</a>)</li>
<li><a
href="1ce486dc5c"><code>1ce486d</code></a>
Update kotlin monorepo to v2.4.10 (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2103">#2103</a>)</li>
<li><a
href="c89473ef4a"><code>c89473e</code></a>
Test allowing custom ShadowJar without shadowR8 registered (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2102">#2102</a>)</li>
<li><a
href="f23f5c9521"><code>f23f5c9</code></a>
Update dependency org.junit:junit-bom to v6.1.2 (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2098">#2098</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/GradleUp/shadow/compare/9.5.1...9.6.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `com.gradleup.shadow` from 9.5.1 to 9.6.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/GradleUp/shadow/releases">com.gradleup.shadow's
releases</a>.</em></p>
<blockquote>
<h2>9.6.0</h2>
<h3>Added</h3>
<ul>
<li>Extract R8 rules from dependency JARs when using <code>minimize { r8
{ ... } }</code>. (<a
href="https://redirect.github.com/GradleUp/shadow/pull/2089">#2089</a>)</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Rename <code>ShadowDslMarker</code> to <code>ShadowDsl</code>. (<a
href="https://redirect.github.com/GradleUp/shadow/pull/2091">#2091</a>)</li>
<li><strong>POTENTIALLY BREAKING:</strong> Apply <code>@ShadowDsl</code>
to <code>ShadowJar</code>, <code>ResourceTransformer</code>,
<code>DependencyFilter</code>, and <code>Relocator</code>. (<a
href="https://redirect.github.com/GradleUp/shadow/pull/2090">#2090</a>)<br
/>
This restricts nested DSL configuration blocks from implicitly calling
outer receiver APIs in Kotlin script files.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Validate ZIP entry names to prevent Zip Slip path traversal.</li>
<li>Avoid resolving unused R8 dependency. (<a
href="https://redirect.github.com/GradleUp/shadow/pull/2101">#2101</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="fb3666804b"><code>fb36668</code></a>
Prepare version 9.6.0</li>
<li><a
href="9e5c06d226"><code>9e5c06d</code></a>
Test relocation of ModuleMainClass in module-info (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2109">#2109</a>)</li>
<li><a
href="e37770cd4f"><code>e37770c</code></a>
Test relocation of nested class signatures (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2108">#2108</a>)</li>
<li><a
href="74792f7ba4"><code>74792f7</code></a>
Add unit tests for internal components (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2107">#2107</a>)</li>
<li><a
href="b5908197f5"><code>b590819</code></a>
Avoid resolving unused R8 dependency (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2101">#2101</a>)</li>
<li><a
href="1dd8db498c"><code>1dd8db4</code></a>
Update plugin android-lint to v9.3.0 (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2104">#2104</a>)</li>
<li><a
href="083a01a712"><code>083a01a</code></a>
Defer shadowR8 configuration (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2100">#2100</a>)</li>
<li><a
href="1ce486dc5c"><code>1ce486d</code></a>
Update kotlin monorepo to v2.4.10 (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2103">#2103</a>)</li>
<li><a
href="c89473ef4a"><code>c89473e</code></a>
Test allowing custom ShadowJar without shadowR8 registered (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2102">#2102</a>)</li>
<li><a
href="f23f5c9521"><code>f23f5c9</code></a>
Update dependency org.junit:junit-bom to v6.1.2 (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2098">#2098</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/GradleUp/shadow/compare/9.5.1...9.6.0">compare
view</a></li>
</ul>
</details>
<br />

Updates `org.junit.jupiter:junit-jupiter` from 6.1.1 to 6.1.2
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/junit-team/junit-framework/releases">org.junit.jupiter:junit-jupiter's
releases</a>.</em></p>
<blockquote>
<p>JUnit 6.1.2 = Platform 6.1.2 + Jupiter 6.1.2 + Vintage 6.1.2</p>
<p>See <a href="https://docs.junit.org/6.1.2/release-notes.html">Release
Notes</a>.</p>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/junit-team/junit-framework/compare/r6.1.1...r6.1.2">https://github.com/junit-team/junit-framework/compare/r6.1.1...r6.1.2</a></p>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="b6854269ee"><code>b685426</code></a>
Release 6.1.2</li>
<li><a
href="ae244a6936"><code>ae244a6</code></a>
Remove blanket outputDirectoryCreator from SuiteEngineTests (<a
href="https://redirect.github.com/junit-team/junit-framework/issues/5793">#5793</a>)</li>
<li><a
href="43bd154163"><code>43bd154</code></a>
Finalize 6.1.2 release notes</li>
<li><a
href="0cd9510637"><code>0cd9510</code></a>
Fix order of release note sections</li>
<li><a
href="a1507cbaf4"><code>a1507cb</code></a>
Add initial 6.1.2 release notes to release notes index</li>
<li><a
href="932664186b"><code>9326641</code></a>
Fix NoTestsDiscoveredException for suites containing only dynamic tests
(<a
href="https://redirect.github.com/junit-team/junit-framework/issues/5839">#5839</a>)</li>
<li><a
href="2ef11234dc"><code>2ef1123</code></a>
Create initial 6.1.2 release notes from template</li>
<li><a
href="83fa9ab372"><code>83fa9ab</code></a>
Back to snapshots for further development</li>
<li>See full diff in <a
href="https://github.com/junit-team/junit-framework/compare/r6.1.1...r6.1.2">compare
view</a></li>
</ul>
</details>
<br />

Updates `com.gradleup.shadow` from 9.5.1 to 9.6.0
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/GradleUp/shadow/releases">com.gradleup.shadow's
releases</a>.</em></p>
<blockquote>
<h2>9.6.0</h2>
<h3>Added</h3>
<ul>
<li>Extract R8 rules from dependency JARs when using <code>minimize { r8
{ ... } }</code>. (<a
href="https://redirect.github.com/GradleUp/shadow/pull/2089">#2089</a>)</li>
</ul>
<h3>Changed</h3>
<ul>
<li>Rename <code>ShadowDslMarker</code> to <code>ShadowDsl</code>. (<a
href="https://redirect.github.com/GradleUp/shadow/pull/2091">#2091</a>)</li>
<li><strong>POTENTIALLY BREAKING:</strong> Apply <code>@ShadowDsl</code>
to <code>ShadowJar</code>, <code>ResourceTransformer</code>,
<code>DependencyFilter</code>, and <code>Relocator</code>. (<a
href="https://redirect.github.com/GradleUp/shadow/pull/2090">#2090</a>)<br
/>
This restricts nested DSL configuration blocks from implicitly calling
outer receiver APIs in Kotlin script files.</li>
</ul>
<h3>Fixed</h3>
<ul>
<li>Validate ZIP entry names to prevent Zip Slip path traversal.</li>
<li>Avoid resolving unused R8 dependency. (<a
href="https://redirect.github.com/GradleUp/shadow/pull/2101">#2101</a>)</li>
</ul>
</blockquote>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="fb3666804b"><code>fb36668</code></a>
Prepare version 9.6.0</li>
<li><a
href="9e5c06d226"><code>9e5c06d</code></a>
Test relocation of ModuleMainClass in module-info (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2109">#2109</a>)</li>
<li><a
href="e37770cd4f"><code>e37770c</code></a>
Test relocation of nested class signatures (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2108">#2108</a>)</li>
<li><a
href="74792f7ba4"><code>74792f7</code></a>
Add unit tests for internal components (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2107">#2107</a>)</li>
<li><a
href="b5908197f5"><code>b590819</code></a>
Avoid resolving unused R8 dependency (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2101">#2101</a>)</li>
<li><a
href="1dd8db498c"><code>1dd8db4</code></a>
Update plugin android-lint to v9.3.0 (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2104">#2104</a>)</li>
<li><a
href="083a01a712"><code>083a01a</code></a>
Defer shadowR8 configuration (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2100">#2100</a>)</li>
<li><a
href="1ce486dc5c"><code>1ce486d</code></a>
Update kotlin monorepo to v2.4.10 (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2103">#2103</a>)</li>
<li><a
href="c89473ef4a"><code>c89473e</code></a>
Test allowing custom ShadowJar without shadowR8 registered (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2102">#2102</a>)</li>
<li><a
href="f23f5c9521"><code>f23f5c9</code></a>
Update dependency org.junit:junit-bom to v6.1.2 (<a
href="https://redirect.github.com/GradleUp/shadow/issues/2098">#2098</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/GradleUp/shadow/compare/9.5.1...9.6.0">compare
view</a></li>
</ul>
</details>
<br />


Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore <dependency name> major version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's major version (unless you unignore this specific
dependency's major version or upgrade to it yourself)
- `@dependabot ignore <dependency name> minor version` will close this
group update PR and stop Dependabot creating any more for the specific
dependency's minor version (unless you unignore this specific
dependency's minor version or upgrade to it yourself)
- `@dependabot ignore <dependency name>` will close this group update PR
and stop Dependabot creating any more for the specific dependency
(unless you unignore this specific dependency or upgrade to it yourself)
- `@dependabot unignore <dependency name>` will remove all of the ignore
conditions of the specified dependency
- `@dependabot unignore <dependency name> <ignore condition>` will
remove the ignore condition of the specified dependency and ignore
conditions


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-07-21 13:58:22 +02:00
..
gradle chore(deps): bump the other-dependencies group across 2 directories with 3 updates (#897) 2026-07-21 13:58:22 +02:00
src sample: kotlinlang mcp server (#713) 2026-04-27 15:07:03 +02:00
build.gradle.kts sample: kotlinlang mcp server (#713) 2026-04-27 15:07:03 +02:00
Dockerfile sample: kotlinlang mcp server (#713) 2026-04-27 15:07:03 +02:00
gradle.properties sample: kotlinlang mcp server (#713) 2026-04-27 15:07:03 +02: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 sample: kotlinlang mcp server (#713) 2026-04-27 15:07:03 +02:00
settings.gradle.kts sample: kotlinlang mcp server (#713) 2026-04-27 15:07:03 +02:00

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.