Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 4 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -197,9 +197,8 @@ import io.modelcontextprotocol.kotlin.sdk.types.CallToolResult
import io.modelcontextprotocol.kotlin.sdk.types.Implementation
import io.modelcontextprotocol.kotlin.sdk.types.ServerCapabilities
import io.modelcontextprotocol.kotlin.sdk.types.TextContent
import io.modelcontextprotocol.kotlin.sdk.types.ToolSchema
import kotlinx.serialization.json.buildJsonObject
import kotlinx.serialization.json.put
import kotlinx.schema.json.ObjectPropertyDefinition
import kotlinx.schema.json.StringPropertyDefinition

fun main(args: Array<String>) {
val port = args.firstOrNull()?.toIntOrNull() ?: 3000
Expand All @@ -218,10 +217,8 @@ fun main(args: Array<String>) {
mcpServer.addTool(
name = "example-tool",
description = "An example tool",
inputSchema = ToolSchema(
properties = buildJsonObject {
put("input", buildJsonObject { put("type", "string") })
}
inputSchema = ObjectPropertyDefinition(
properties = mapOf("input" to StringPropertyDefinition())
)
) { request ->
CallToolResult(content = listOf(TextContent("Hello, world!")))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -26,12 +26,13 @@ import io.modelcontextprotocol.kotlin.sdk.types.TextContent
import io.modelcontextprotocol.kotlin.sdk.types.TextResourceContents
import io.modelcontextprotocol.kotlin.sdk.types.TitledMultiSelectEnumSchema
import io.modelcontextprotocol.kotlin.sdk.types.TitledSingleSelectEnumSchema
import io.modelcontextprotocol.kotlin.sdk.types.ToolSchema
import io.modelcontextprotocol.kotlin.sdk.types.UntitledMultiSelectEnumSchema
import io.modelcontextprotocol.kotlin.sdk.types.UntitledSingleSelectEnumSchema
import kotlinx.coroutines.delay
import kotlinx.schema.json.NumericPropertyDefinition
import kotlinx.schema.json.ObjectPropertyDefinition
import kotlinx.schema.json.StringPropertyDefinition
import kotlinx.serialization.json.JsonPrimitive
import kotlinx.serialization.json.buildJsonObject
import kotlinx.serialization.json.double
import kotlinx.serialization.json.jsonPrimitive
import kotlin.time.Duration.Companion.milliseconds
Expand Down Expand Up @@ -163,10 +164,8 @@ fun Server.registerConformanceTools() {
addTool(
name = "test_sampling",
description = "test_sampling",
inputSchema = ToolSchema(
properties = buildJsonObject {
put("prompt", buildJsonObject { put("type", JsonPrimitive("string")) })
},
inputSchema = ObjectPropertyDefinition(
properties = mapOf("prompt" to StringPropertyDefinition()),
required = listOf("prompt"),
),
) { request ->
Expand All @@ -192,10 +191,8 @@ fun Server.registerConformanceTools() {
addTool(
name = "test_elicitation",
description = "test_elicitation",
inputSchema = ToolSchema(
properties = buildJsonObject {
put("message", buildJsonObject { put("type", JsonPrimitive("string")) })
},
inputSchema = ObjectPropertyDefinition(
properties = mapOf("message" to StringPropertyDefinition()),
required = listOf("message"),
),
) { request ->
Expand Down Expand Up @@ -352,11 +349,11 @@ fun Server.registerConformanceTools() {
addTool(
name = "add_numbers",
description = "Adds two numbers together",
inputSchema = ToolSchema(
properties = buildJsonObject {
put("a", buildJsonObject { put("type", JsonPrimitive("number")) })
put("b", buildJsonObject { put("type", JsonPrimitive("number")) })
},
inputSchema = ObjectPropertyDefinition(
properties = mapOf(
"a" to NumericPropertyDefinition(type = listOf("number")),
"b" to NumericPropertyDefinition(type = listOf("number")),
),
required = listOf("a", "b"),
),
) { request ->
Expand Down Expand Up @@ -389,28 +386,16 @@ fun Server.registerConformanceTools() {
addTool(
name = "json_schema_2020_12_tool",
description = "Tool with JSON Schema 2020-12 features for conformance testing (SEP-1613)",
inputSchema = ToolSchema(
properties = buildJsonObject {
put(
"name",
buildJsonObject {
put("type", JsonPrimitive("string"))
},
)
put(
"address",
buildJsonObject {
put("type", JsonPrimitive("object"))
put(
"properties",
buildJsonObject {
put("street", buildJsonObject { put("type", JsonPrimitive("string")) })
put("city", buildJsonObject { put("type", JsonPrimitive("string")) })
},
)
},
)
},
inputSchema = ObjectPropertyDefinition(
properties = mapOf(
"name" to StringPropertyDefinition(),
"address" to ObjectPropertyDefinition(
properties = mapOf(
"street" to StringPropertyDefinition(),
"city" to StringPropertyDefinition(),
),
),
),
),
) { request ->
CallToolResult(
Expand Down
2 changes: 2 additions & 0 deletions gradle/libs.versions.toml
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@ collections-immutable = "0.5.1"
coroutines = "1.11.0"
kotest = "6.2.2"
kotlinx-io = "0.9.1"
kotlinx-schema = "0.5.0"
ktor = "3.5.1"
logging = "8.0.4"
mockk = "1.14.11"
Expand All @@ -40,6 +41,7 @@ kotlinx-collections-immutable = { group = "org.jetbrains.kotlinx", name = "kotli
kotlinx-coroutines-core = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core", version.ref = "coroutines" }
kotlinx-coroutines-core-wasm = { group = "org.jetbrains.kotlinx", name = "kotlinx-coroutines-core-wasm-js", version.ref = "coroutines" }
kotlinx-io-core = { group = "org.jetbrains.kotlinx", name = "kotlinx-io-core", version.ref = "kotlinx-io" }
kotlinx-schema-json = { group = "org.jetbrains.kotlinx", name = "kotlinx-schema-json", version.ref = "kotlinx-schema" }
kotlinx-serialization-json = { group = "org.jetbrains.kotlinx", name = "kotlinx-serialization-json", version.ref = "serialization" }

# Ktor
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,6 @@ import io.modelcontextprotocol.kotlin.sdk.types.StringSchema
import io.modelcontextprotocol.kotlin.sdk.types.TextContent
import io.modelcontextprotocol.kotlin.sdk.types.TitledMultiSelectEnumSchema
import io.modelcontextprotocol.kotlin.sdk.types.Tool
import io.modelcontextprotocol.kotlin.sdk.types.ToolSchema
import io.modelcontextprotocol.kotlin.sdk.types.UntitledMultiSelectEnumSchema
import io.modelcontextprotocol.kotlin.sdk.types.UntitledSingleSelectEnumSchema
import io.modelcontextprotocol.kotlin.sdk.types.UrlElicitationRequiredException
Expand All @@ -60,6 +59,7 @@ import kotlinx.coroutines.joinAll
import kotlinx.coroutines.launch
import kotlinx.coroutines.test.runTest
import kotlinx.coroutines.withTimeout
import kotlinx.schema.json.ObjectPropertyDefinition
import kotlinx.serialization.json.JsonObject
import kotlinx.serialization.json.JsonPrimitive
import kotlinx.serialization.json.buildJsonObject
Expand Down Expand Up @@ -719,7 +719,7 @@ class ClientTest {
title = "testTool title",
description = "testTool description",
annotations = null,
inputSchema = ToolSchema(),
inputSchema = ObjectPropertyDefinition(),
outputSchema = null,
),
),
Expand Down
Loading
Loading