Merge branch 'main' of https://github.com/modelcontextprotocol/inspector into meta_properies_in_tools

This commit is contained in:
lorenzo.neumann 2025-11-18 15:07:12 +01:00
commit c0b3b952f5

View file

@ -1,7 +1,8 @@
import type { JsonValue, JsonSchemaType, JsonObject } from "./jsonUtils";
import Ajv from "ajv";
import type { ValidateFunction } from "ajv";
import type { Tool } from "@modelcontextprotocol/sdk/types.js";
import type { Tool, JSONRPCMessage } from "@modelcontextprotocol/sdk/types.js";
import { isJSONRPCRequest } from "@modelcontextprotocol/sdk/types.js";
const ajv = new Ajv();
@ -299,3 +300,41 @@ export function formatFieldLabel(key: string): string {
.replace(/_/g, " ") // Replace underscores with spaces
.replace(/^\w/, (c) => c.toUpperCase()); // Capitalize first letter
}
/**
* Resolves `$ref` references in a JSON-RPC "elicitation/create" message's `requestedSchema` field
* @param message The JSON-RPC message that may contain $ref references
* @returns A new message with resolved $ref references, or the original message if no resolution is needed
*/
export function resolveRefsInMessage(message: JSONRPCMessage): JSONRPCMessage {
if (!isJSONRPCRequest(message) || !message.params?.requestedSchema) {
return message;
}
const requestedSchema = message.params.requestedSchema as JsonSchemaType;
if (!requestedSchema?.properties) {
return message;
}
const resolvedMessage = {
...message,
params: {
...message.params,
requestedSchema: {
...requestedSchema,
properties: Object.fromEntries(
Object.entries(requestedSchema.properties).map(
([key, propSchema]) => {
const resolved = resolveRef(propSchema, requestedSchema);
const normalized = normalizeUnionType(resolved);
return [key, normalized];
},
),
),
},
},
};
return resolvedMessage;
}