fix: Extract function to utils
This commit is contained in:
parent
b000fc25bb
commit
8ad6253cd9
2 changed files with 42 additions and 27 deletions
|
|
@ -30,7 +30,6 @@ import {
|
||||||
Progress,
|
Progress,
|
||||||
LoggingLevel,
|
LoggingLevel,
|
||||||
ElicitRequestSchema,
|
ElicitRequestSchema,
|
||||||
isJSONRPCRequest,
|
|
||||||
} from "@modelcontextprotocol/sdk/types.js";
|
} from "@modelcontextprotocol/sdk/types.js";
|
||||||
import { RequestOptions } from "@modelcontextprotocol/sdk/shared/protocol.js";
|
import { RequestOptions } from "@modelcontextprotocol/sdk/shared/protocol.js";
|
||||||
import { useEffect, useState } from "react";
|
import { useEffect, useState } from "react";
|
||||||
|
|
@ -58,8 +57,7 @@ import { getMCPServerRequestTimeout } from "@/utils/configUtils";
|
||||||
import { InspectorConfig } from "../configurationTypes";
|
import { InspectorConfig } from "../configurationTypes";
|
||||||
import { Transport } from "@modelcontextprotocol/sdk/shared/transport.js";
|
import { Transport } from "@modelcontextprotocol/sdk/shared/transport.js";
|
||||||
import { CustomHeaders } from "../types/customHeaders";
|
import { CustomHeaders } from "../types/customHeaders";
|
||||||
import { JsonSchemaType } from "@/utils/jsonUtils";
|
import { resolveRefsInMessage } from "@/utils/schemaUtils";
|
||||||
import { resolveRef } from "@/utils/schemaUtils";
|
|
||||||
|
|
||||||
interface UseConnectionOptions {
|
interface UseConnectionOptions {
|
||||||
transportType: "stdio" | "sse" | "streamable-http";
|
transportType: "stdio" | "sse" | "streamable-http";
|
||||||
|
|
@ -687,29 +685,8 @@ export function useConnection({
|
||||||
const protocolOnMessage = transport.onmessage;
|
const protocolOnMessage = transport.onmessage;
|
||||||
if (protocolOnMessage) {
|
if (protocolOnMessage) {
|
||||||
transport.onmessage = (message) => {
|
transport.onmessage = (message) => {
|
||||||
// Resolve $ref references in requests before validation
|
const resolvedMessage = resolveRefsInMessage(message);
|
||||||
if (isJSONRPCRequest(message) && message.params?.requestedSchema) {
|
protocolOnMessage(resolvedMessage);
|
||||||
const requestedSchema = message.params
|
|
||||||
.requestedSchema as JsonSchemaType;
|
|
||||||
if (requestedSchema?.properties) {
|
|
||||||
const resolvedProperties = Object.fromEntries(
|
|
||||||
Object.entries(requestedSchema.properties).map(
|
|
||||||
([key, propSchema]) => [
|
|
||||||
key,
|
|
||||||
resolveRef(propSchema, requestedSchema),
|
|
||||||
],
|
|
||||||
),
|
|
||||||
);
|
|
||||||
message.params = {
|
|
||||||
...message.params,
|
|
||||||
requestedSchema: {
|
|
||||||
...requestedSchema,
|
|
||||||
properties: resolvedProperties,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
}
|
|
||||||
}
|
|
||||||
protocolOnMessage(message);
|
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,8 @@
|
||||||
import type { JsonValue, JsonSchemaType, JsonObject } from "./jsonUtils";
|
import type { JsonValue, JsonSchemaType, JsonObject } from "./jsonUtils";
|
||||||
import Ajv from "ajv";
|
import Ajv from "ajv";
|
||||||
import type { ValidateFunction } 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();
|
const ajv = new Ajv();
|
||||||
|
|
||||||
|
|
@ -299,3 +300,40 @@ export function formatFieldLabel(key: string): string {
|
||||||
.replace(/_/g, " ") // Replace underscores with spaces
|
.replace(/_/g, " ") // Replace underscores with spaces
|
||||||
.replace(/^\w/, (c) => c.toUpperCase()); // Capitalize first letter
|
.replace(/^\w/, (c) => c.toUpperCase()); // Capitalize first letter
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Resolves $ref references in a JSON-RPC message's requestedSchema
|
||||||
|
* @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]) => [
|
||||||
|
key,
|
||||||
|
resolveRef(propSchema, requestedSchema),
|
||||||
|
],
|
||||||
|
),
|
||||||
|
),
|
||||||
|
},
|
||||||
|
},
|
||||||
|
};
|
||||||
|
|
||||||
|
return resolvedMessage;
|
||||||
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue