kotlin-sdk/samples/kotlin-mcp-server
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Jonathan Leitschuh dcb4f21e9a
Change sample server host from 0.0.0.0 to 127.0.0.1 (#307)
Don't bind the sample server to `0.0.0.0` by default as that exposes the
server to anyone else on the local network.

If anyone were to use these samples as staring points to build larger
services, those servers would thus expose developers to attack
immediately upon launch.

I'd prefer if we avoided that 😆

## Motivation and Context

🔒  Security

## How Has This Been Tested?
<!-- Have you tested this in a real application? Which scenarios were
tested? -->
I haven't checked out the code locally to verify it works. All the
editing to the code was done on GitHub.com

## Breaking Changes
<!-- Will users need to update their code or configurations? -->

No.

## Types of changes
<!-- What types of changes does your code introduce? Put an `x` in all
the boxes that apply: -->
- [ ] Bug fix (non-breaking change which fixes an issue)
- [ ] New feature (non-breaking change which adds functionality)
- [ ] Breaking change (fix or feature that would cause existing
functionality to change)
- [ ] Documentation update

## Checklist
<!-- Go over all the following points, and put an `x` in all the boxes
that apply. -->
- [ ] I have read the [MCP
Documentation](https://modelcontextprotocol.io)
- [ ] My code follows the repository's style guidelines
- [ ] New and existing tests pass locally
- [ ] I have added appropriate error handling
- [ ] I have added or updated documentation as needed

## Additional context
<!-- Add any other context, implementation notes, or design decisions
-->
2025-10-08 11:59:04 +03:00
..
src Change sample server host from 0.0.0.0 to 127.0.0.1 (#307) 2025-10-08 11:59:04 +03:00
build.gradle.kts #196 Update build configuration and workflows for enhanced local publ… (#275) 2025-09-16 21:43:50 +03:00
README.md add ios and wasm targets (#81) 2025-05-29 05:01:50 +00:00
settings.gradle.kts #196 Update build configuration and workflows for enhanced local publ… (#275) 2025-09-16 21:43:50 +03:00

MCP Kotlin Server Sample

A sample implementation of an MCP (Model Communication Protocol) server in Kotlin that demonstrates different server configurations and transport methods for both JVM and WASM targets.

Features

  • Multiple server operation modes:
    • Standard I/O server (JVM only)
      • SSE (Server-Sent Events) server with plain configuration (JVM, WASM)
      • SSE server using Ktor plugin (JVM, WASM)
  • Multiplatform support
  • Built-in capabilities for:
    • Prompts management
    • Resources handling
    • Tools integration

Getting Started

Running the Server

You can run the server on the JVM or using Kotlin/WASM on Node.js.

JVM:

To run the server on the JVM (defaults to SSE mode with Ktor plugin on port 3001):

./gradlew runJvm

WASM:

To run the server using Kotlin/WASM on Node.js (defaults to SSE mode with Ktor plugin on port 3001):

./gradlew wasmJsNodeDevelopmentRun

Connecting to the Server

For servers on JVM or WASM:

  1. Start the server
  2. Use the MCP inspector to connect to http://localhost:<port>/sse

Server Capabilities

  • Prompts: Supports prompt management with list change notifications
  • Resources: Includes subscription support and list change notifications
  • Tools: Supports tool management with list change notifications

Implementation Details

The server is implemented using:

  • Ktor for HTTP server functionality
  • Kotlin coroutines for asynchronous operations
  • SSE for real-time communication
  • Standard I/O for command-line interface
  • Common Kotlin code shared between JVM and WASM targets