| Filename | Latest commit message | Latest commit date |
|---|---|---|
Implement the last version of the mcp schema and complete restructuring of the mcp schema implementation from a monolithic `types.kt` file into separate files. - #158 - #185 - #353 - #298 - #248 ## Motivation and Context The previous implementation of the mcp schema was outdated and contained several issues. In addition, it stored all mcp types in a single large file, which made maintenance and further development more difficult ## How Has This Been Tested? All tests passed ## Breaking Changes Yes. The new types are now located in a separate package. Additionally, many types have new parameters and modified constructors ## Types of changes - [x] Bug fix (non-breaking change which fixes an issue) - [x] New feature (non-breaking change which adds functionality) - [x] Breaking change (fix or feature that would cause existing functionality to change) - [ ] Documentation update ## Checklist - [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 to adopt the new structure: **Before:** ```kotlin import io.modelcontextprotocol.kotlin.sdk.InitializeRequest import io.modelcontextprotocol.kotlin.sdk.Resource ``` **After:** ```kotlin import io.modelcontextprotocol.kotlin.sdk.types.InitializeRequest import io.modelcontextprotocol.kotlin.sdk.types.Resource ``` |
||
| .. | ||
| gradle | ||
| src | ||
| build.gradle.kts | ||
| gradle.properties | ||
| gradlew | ||
| gradlew.bat | ||
| README.md | ||
| settings.gradle.kts | ||
Kotlin MCP Weather STDIO Server
This project demonstrates how to build a Model Context Protocol (MCP) server in Kotlin that provides weather-related tools by consuming the National Weather Service (weather.gov) API. The server uses STDIO as the transport layer and leverages the Kotlin MCP SDK to expose weather forecast and alert tools.
For more information about the MCP SDK and protocol, please refer to the MCP documentation.
Prerequisites
- Java 17 or later
- Gradle (or the Gradle wrapper provided with the project)
- Basic understanding of MCP concepts
- Basic understanding of Kotlin and Kotlin ecosystems (sush as kotlinx-serialization, coroutines, ktor)
MCP Weather Server
The project provides:
- A lightweight MCP server built with Kotlin.
- STDIO transport layer implementation for server-client communication.
- Two weather tools:
- Weather Forecast Tool — returns details such as temperature, wind information, and a detailed forecast for a given latitude/longitude.
- Weather Alerts Tool — returns active weather alerts for a given US state.
Building and running
Use the Gradle wrapper to build the application. In a terminal run:
./gradlew clean build
To run the server:
java -jar build/libs/weather-stdio-server-0.1.0-all.jar
Note
The server uses STDIO transport, so it is typically launched in an environment where the client connects via standard input/output.
Tool Implementation
The project registers two MCP tools using the Kotlin MCP SDK. Below is an overview of the core tool implementations:
1. Weather Forecast Tool
This tool fetches the weather forecast for a specific latitude and longitude using the weather.gov API.
Example tool registration in Kotlin:
server.addTool(
name = "get_forecast",
description = """
Get weather forecast for a specific latitude/longitude
""".trimIndent(),
inputSchema = Tool.Input(
properties = JsonObject(
mapOf(
"latitude" to JsonObject(mapOf("type" to JsonPrimitive("number"))),
"longitude" to JsonObject(mapOf("type" to JsonPrimitive("number"))),
)
),
required = listOf("latitude", "longitude")
)
) { request ->
// Implementation tool
}
2. Weather Alerts Tool
This tool retrieves active weather alerts for a US state.
Example tool registration in Kotlin:
server.addTool(
name = "get_alerts",
description = """
Get weather alerts for a US state. Input is Two-letter US state code (e.g. CA, NY)
""".trimIndent(),
inputSchema = Tool.Input(
properties = JsonObject(
mapOf(
"state" to JsonObject(
mapOf(
"type" to JsonPrimitive("string"),
"description" to JsonPrimitive("Two-letter US state code (e.g. CA, NY)")
)
),
)
),
required = listOf("state")
)
) { request ->
// Implementation tool
}
Client Integration
Kotlin Client Example
Since the server uses STDIO for transport, the client typically connects via standard input/output streams. A sample client implementation can be found in the tests, demonstrating how to send tool requests and process responses.
Claude for Desktop
To integrate with Claude Desktop, add the following configuration to your Claude Desktop settings:
{
"mcpServers": {
"weather": {
"command": "java",
"args": [
"-jar",
"/absolute/path/to/<your-jar-name>.jar"
]
}
}
}
Note
Replace
/absolute/path/to/<your-jar-name>.jarwith the actual absolute path to your built jar file.