| Filename | Latest commit message | Latest commit date |
|---|---|---|
Introduce a `ServerSession` to manage multiple connections to the mcp server. `Protocall` logic of the `Server` was moved to `ServerSession`, while MCP resources logic remained in `Server` ## Motivation and Context 1. Fix the multiple connection issues reported for SSE transport 2. Avoid server duplications during configurations: currently every connection creates a session, but the server stays single ## How Has This Been Tested? Added `SseIntegrationTest` and `WebSocketIntegrationTest` integration tests to check connection with single and multiple clients ## Breaking Changes This change caused several depreciations: 1. The `Server` -> `Protocol` inheritance (which caused single connection issue) should be removed in future releases, now, all the methods inherited from `Protocall` marked as `Deprecated` with a `Warning` 2. Websocket Ktor server initialization changes in order not to create server instance per connection ## Types of changes - [ ] Bug fix (non-breaking change which fixes an issue) - [x] 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. --> - [x] I have read the [MCP Documentation](https://modelcontextprotocol.io) - [x] My code follows the repository's style guidelines - [x] New and existing tests pass locally - [x] I have added appropriate error handling - [x] I have added or updated documentation as needed ## Additional context <!-- Add any other context, implementation notes, or design decisions --> --------- Co-authored-by: devcrocod <devcrocod@gmail.com> |
||
| .. | ||
| src | ||
| build.gradle.kts | ||
| README.md | ||
| settings.gradle.kts | ||
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)
- Standard I/O server (JVM only)
- 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:
- Start the server
- 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