@h1deya/langchain-mcp-tools
Version:
MCP To LangChain Tools Conversion Utility
69 lines (68 loc) • 2.49 kB
TypeScript
/**
* 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 {};