Skip to content

Commit b975247

Browse files
committed
feat: #78 Support array items in schema and URL encoding
Signed-off-by: Laurent Broudoux <laurent.broudoux@gmail.com>
1 parent 6966967 commit b975247

1 file changed

Lines changed: 16 additions & 1 deletion

File tree

proxy/src/main/java/io/reshapr/proxy/mcp/converters/OpenAPIMcpToolConverter.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import io.reshapr.proxy.registry.ServiceEntry;
2626

2727
import com.fasterxml.jackson.core.JsonProcessingException;
28+
import com.fasterxml.jackson.core.type.TypeReference;
2829
import com.fasterxml.jackson.databind.JsonNode;
2930
import com.fasterxml.jackson.databind.ObjectMapper;
3031
import com.fasterxml.jackson.databind.node.ArrayNode;
@@ -149,10 +150,19 @@ public Response getCallResponse(OperationEntry operation, ConfigurationEntry con
149150
String paramIn = parameter.path("in").asText();
150151

151152
if (request.arguments().containsKey(paramName)) {
152-
String paramValue = request.arguments().remove(paramName).toString();
153+
Object param = request.arguments().remove(paramName);
154+
String paramValue = param.toString();
153155
if ("path".equals(paramIn)) {
154156
pathParams.put(paramName, paramValue);
155157
} else if ("query".equals(paramIn)) {
158+
159+
String paramType = parameter.path("schema").path(JSON_SCHEMA_TYPE_ELEMENT).asText();
160+
// If parameter is an array, we expect a JSON array in input.
161+
if (JSON_SCHEMA_ARRAY_TYPE.equals(paramType)) {
162+
// We need to convert it to comma separated values for the backend call.
163+
List<String> values = mapper.convertValue(param, new TypeReference<List<String>>() {});
164+
paramValue = String.join(",", values);
165+
}
156166
queryParams.put(paramName, paramValue);
157167
} else if ("header".equals(paramIn)) {
158168
headers.put(paramName, List.of(paramValue));
@@ -299,6 +309,11 @@ private ObjectNode getInputSchemaNode(OperationEntry operation) {
299309
if (paramSchema.has("enum")) {
300310
propertyNode.set("enum", paramSchema.get("enum"));
301311
}
312+
//
313+
if (JSON_SCHEMA_ARRAY_TYPE.equals(paramType) && paramSchema.has(JSON_SCHEMA_ITEMS_ELEMENT)) {
314+
propertyNode.set(JSON_SCHEMA_ITEMS_ELEMENT,
315+
dereferencedNode(schemaNode, paramSchema.get(JSON_SCHEMA_ITEMS_ELEMENT), new HashSet<>()));
316+
}
302317
}
303318
}
304319
}

0 commit comments

Comments
 (0)