@@ -6,6 +6,7 @@ import ai.koog.agents.core.tools.ToolParameterType
66import io.modelcontextprotocol.kotlin.sdk.Tool
77import kotlinx.serialization.json.*
88import org.junit.jupiter.api.Test
9+ import kotlin.test.Ignore
910import kotlin.test.assertEquals
1011import kotlin.test.assertFailsWith
1112import 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