UNPKG

@h1deya/langchain-mcp-tools

Version:
69 lines (68 loc) 2.49 kB
/** * Transforms a JSON Schema to be compatible with Gemini's OpenAPI 3.0 subset * Used for converting MCP tool schemas to Gemini function declarations * * The changes are mostly structural/validation-level and shouldn't break core * tool functionality: * - Core parameter structure is preserved * - Valid required fields are maintained (invalid ones are filtered out) * - Basic types are converted accurately * - anyOf variants are individually validated and fixed * * Key transformations for Gemini compatibility: * - Filters required fields that don't exist in properties * - Ensures anyOf variants follow Gemini's strict validation rules * - Removes unsupported JSON Schema features * - Converts type arrays to nullable single types where possible * * For the OpenAPI subset requirement for function declarations * see: https://ai.google.dev/api/caching#Schema * For the OpenAPI 3.0 subset limitations vs full JSON Schema * see: https://ai.google.dev/gemini-api/docs/structured-output */ import { JsonSchemaDraft7, TransformResult } from "./schema-adapter-types.js"; type JsonSchema = JsonSchemaDraft7; interface GeminiCompatibleSchema { type?: string; format?: string; description?: string; nullable?: boolean; enum?: string[]; maxItems?: number; minItems?: number; properties?: Record<string, GeminiCompatibleSchema>; required?: string[]; propertyOrdering?: string[]; items?: GeminiCompatibleSchema; minimum?: number; maximum?: number; minLength?: number; maxLength?: number; pattern?: string; example?: unknown; anyOf?: GeminiCompatibleSchema[]; default?: unknown; } export declare function makeJsonSchemaGeminiCompatible(schema: JsonSchema, defsContext?: Record<string, JsonSchema>): TransformResult; /** * Specifically transforms MCP tool schemas for Gemini function declarations */ export declare function transformMcpToolForGemini(mcpTool: { name: string; description?: string; inputSchema?: JsonSchema; }): { functionDeclaration: { name: string; description: string | undefined; parameters: JsonSchemaDraft7; }; wasTransformed: boolean; changesSummary: string | undefined; }; /** * Enhanced utility to validate that a schema only uses Gemini-supported fields * and follows all Gemini validation rules */ export declare function validateGeminiSchema(schema: GeminiCompatibleSchema, path?: string): string[]; export {};