Skip to content

Commit 1ab03a9

Browse files
committed
Upgrade Weather STDIO server
1 parent e5abc3f commit 1ab03a9

File tree

2 files changed

+19
-14
lines changed

2 files changed

+19
-14
lines changed

samples/weather-stdio-server/src/main/kotlin/io/modelcontextprotocol/sample/server/McpWeatherServer.kt

Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@ import io.ktor.http.contentType
88
import io.ktor.http.headers
99
import io.ktor.serialization.kotlinx.json.json
1010
import io.ktor.utils.io.streams.asInput
11-
import io.modelcontextprotocol.kotlin.sdk.CallToolResult
12-
import io.modelcontextprotocol.kotlin.sdk.Implementation
13-
import io.modelcontextprotocol.kotlin.sdk.ServerCapabilities
14-
import io.modelcontextprotocol.kotlin.sdk.TextContent
15-
import io.modelcontextprotocol.kotlin.sdk.Tool
1611
import io.modelcontextprotocol.kotlin.sdk.server.Server
1712
import io.modelcontextprotocol.kotlin.sdk.server.ServerOptions
1813
import io.modelcontextprotocol.kotlin.sdk.server.StdioServerTransport
14+
import io.modelcontextprotocol.kotlin.sdk.types.CallToolResult
15+
import io.modelcontextprotocol.kotlin.sdk.types.Implementation
16+
import io.modelcontextprotocol.kotlin.sdk.types.ServerCapabilities
17+
import io.modelcontextprotocol.kotlin.sdk.types.TextContent
18+
import io.modelcontextprotocol.kotlin.sdk.types.ToolSchema
1919
import kotlinx.coroutines.Job
2020
import kotlinx.coroutines.runBlocking
2121
import kotlinx.io.asSink
@@ -28,7 +28,8 @@ import kotlinx.serialization.json.put
2828
import kotlinx.serialization.json.putJsonObject
2929

3030
/**
31-
* Starts an MCP server that provides weather-related tools for fetching active weather alerts by state and weather forecasts by latitude/longitude.
31+
* Starts an MCP server that provides weather-related tools for fetching active
32+
* weather alerts by state and weather forecasts by latitude/longitude.
3233
*/
3334
fun runMcpServer() {
3435
// Base URL for the Weather API
@@ -72,7 +73,7 @@ fun runMcpServer() {
7273
description = """
7374
Get weather alerts for a US state. Input is Two-letter US state code (e.g. CA, NY)
7475
""".trimIndent(),
75-
inputSchema = Tool.Input(
76+
inputSchema = ToolSchema(
7677
properties = buildJsonObject {
7778
putJsonObject("state") {
7879
put("type", "string")
@@ -97,7 +98,7 @@ fun runMcpServer() {
9798
description = """
9899
Get weather forecast for a specific latitude/longitude
99100
""".trimIndent(),
100-
inputSchema = Tool.Input(
101+
inputSchema = ToolSchema(
101102
properties = buildJsonObject {
102103
putJsonObject("latitude") {
103104
put("type", "number")

samples/weather-stdio-server/src/test/kotlin/io/modelcontextprotocol/sample/client/ClientStdio.kt

Lines changed: 10 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
11
package io.modelcontextprotocol.sample.client
22

3-
import io.modelcontextprotocol.kotlin.sdk.Implementation
4-
import io.modelcontextprotocol.kotlin.sdk.TextContent
53
import io.modelcontextprotocol.kotlin.sdk.client.Client
64
import io.modelcontextprotocol.kotlin.sdk.client.StdioClientTransport
5+
import io.modelcontextprotocol.kotlin.sdk.types.Implementation
6+
import io.modelcontextprotocol.kotlin.sdk.types.TextContent
77
import kotlinx.coroutines.runBlocking
88
import kotlinx.io.asSink
99
import kotlinx.io.asSource
1010
import kotlinx.io.buffered
1111

1212
fun main(): Unit = runBlocking {
13-
val process = ProcessBuilder("java", "-jar", "./build/libs/weather-stdio-server-0.1.0-all.jar")
13+
val process = ProcessBuilder(
14+
"java",
15+
"-jar",
16+
"${System.getProperty("user.dir")}/build/libs/weather-stdio-server-0.1.0-all.jar",
17+
).redirectErrorStream(true)
1418
.start()
1519

1620
val transport = StdioClientTransport(
@@ -34,15 +38,15 @@ fun main(): Unit = runBlocking {
3438
"latitude" to 38.5816,
3539
"longitude" to -121.4944,
3640
),
37-
)?.content?.map { if (it is TextContent) it.text else it.toString() }
41+
).content.map { if (it is TextContent) it.text else it.toString() }
3842

39-
println("Weather Forcast: ${weatherForecastResult?.joinToString(separator = "\n", prefix = "\n", postfix = "\n")}")
43+
println("Weather Forecast: ${weatherForecastResult.joinToString(separator = "\n", prefix = "\n", postfix = "\n")}")
4044

4145
val alertResult =
4246
client.callTool(
4347
name = "get_alert",
4448
arguments = mapOf("state" to "TX"),
45-
)?.content?.map { if (it is TextContent) it.text else it.toString() }
49+
).content.map { if (it is TextContent) it.text else it.toString() }
4650

4751
println("Alert Response = $alertResult")
4852

0 commit comments

Comments
 (0)