| Filename | Latest commit message | Latest commit date |
|---|---|---|
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 --> |
||
| .. | ||
| 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