Skip to content

Commit d681889

Browse files
authored
Add test for parsing complex enum parameters in MCP (#299)
1 parent fa94a13 commit d681889

File tree

1 file changed

+50
-0
lines changed

1 file changed

+50
-0
lines changed

agents/agents-mcp/src/jvmTest/kotlin/ai/koog/agents/mcp/DefaultMcpToolDescriptorParserTest.kt

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@ import ai.koog.agents.core.tools.ToolParameterType
66
import io.modelcontextprotocol.kotlin.sdk.Tool
77
import kotlinx.serialization.json.*
88
import org.junit.jupiter.api.Test
9+
import kotlin.test.Ignore
910
import kotlin.test.assertEquals
1011
import kotlin.test.assertFailsWith
1112
import kotlin.test.assertTrue
@@ -240,6 +241,55 @@ class DefaultMcpToolDescriptorParserTest {
240241
}
241242
}
242243

244+
@Ignore("until https://github.com/JetBrains/koog/issues/307 is fixed")
245+
@Test
246+
fun `test parsing enum parameter type with complex values`() {
247+
// Create an SDK Tool with an enum parameter that has complex values (JsonArray)
248+
val sdkTool = createSdkTool(
249+
name = "test-tool-complex-enum",
250+
description = "A test tool with complex enum parameter",
251+
properties = buildJsonObject {
252+
putJsonObject("complexEnumParam") {
253+
put("type", "enum")
254+
put("description", "Complex enum parameter")
255+
putJsonArray("enum") {
256+
add("option1")
257+
addJsonArray {
258+
add("nested1")
259+
add("nested2")
260+
}
261+
addJsonObject {
262+
put("key", "value")
263+
}
264+
}
265+
}
266+
},
267+
required = listOf("complexEnumParam")
268+
)
269+
270+
// Parse the tool
271+
val toolDescriptor = parser.parse(sdkTool)
272+
273+
// Verify the basic properties
274+
assertEquals("test-tool-complex-enum", toolDescriptor.name)
275+
assertEquals("A test tool with complex enum parameter", toolDescriptor.description)
276+
assertEquals(1, toolDescriptor.requiredParameters.size)
277+
assertEquals(0, toolDescriptor.optionalParameters.size)
278+
279+
// Verify the enum parameter
280+
val enumParam = toolDescriptor.requiredParameters.first()
281+
assertEquals("complexEnumParam", enumParam.name)
282+
assertEquals("Complex enum parameter", enumParam.description)
283+
assertTrue(enumParam.type is ToolParameterType.Enum)
284+
285+
// Verify the enum values
286+
val enumType = enumParam.type as ToolParameterType.Enum
287+
assertEquals(3, enumType.entries.size)
288+
assertEquals("option1", enumType.entries[0])
289+
assertEquals("[\"nested1\",\"nested2\"]", enumType.entries[1])
290+
assertEquals("{\"key\":\"value\"}", enumType.entries[2])
291+
}
292+
243293
@Test
244294
fun `test parsing object parameter with additional properties`() {
245295
// Create an SDK Tool with an object parameter that has additional properties

0 commit comments

Comments
 (0)