From 960a3b38aa64d613b90c41a6741f73561380ebfa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gon=C3=A9ri=20Le=20Bouder?= Date: Thu, 25 Sep 2025 16:19:14 -0400 Subject: [PATCH] include the in=query parameters in the inputSchema When a parameter has `in` = `query`, it means the value is passed as an HTTP parameter in the URL of the query. e.g: ``` "parameters": [ { "description": "A search term.", "in": "query", "name": "search", "required": false, "type": "string" }, (...) ``` --- src/parser/extract-tools.ts | 24 ++++++++++++++++++++++-- 1 file changed, 22 insertions(+), 2 deletions(-) diff --git a/src/parser/extract-tools.ts b/src/parser/extract-tools.ts index 6371623..a8c1a2b 100644 --- a/src/parser/extract-tools.ts +++ b/src/parser/extract-tools.ts @@ -7,6 +7,16 @@ import { generateOperationId } from '../utils/code-gen.js'; import { McpToolDefinition } from '../types/index.js'; import { shouldIncludeOperationForMcp } from '../utils/helpers.js'; +export interface ParameterObjectWithType extends OpenAPIV3.ParameterObject { + name: string; + description?: string; + in: string; + type?: JSONSchema7TypeName; + required?: boolean; + schema?: OpenAPIV3.SchemaObject; +} + + /** * Extracts tool definitions from an OpenAPI document * @@ -124,8 +134,8 @@ export function generateInputSchemaAndDetails(operation: OpenAPIV3.OperationObje const required: string[] = []; // Process parameters - const allParameters: OpenAPIV3.ParameterObject[] = Array.isArray(operation.parameters) - ? operation.parameters.map((p) => p as OpenAPIV3.ParameterObject) + const allParameters: ParameterObjectWithType[] = Array.isArray(operation.parameters) + ? operation.parameters.map((p) => p as ParameterObjectWithType) : []; allParameters.forEach((param) => { @@ -174,6 +184,16 @@ export function generateInputSchemaAndDetails(operation: OpenAPIV3.OperationObje } } + allParameters.forEach((item) => { + if (properties[item.name]) return; + properties[item.name] = { + description: item.description, + type: item.type ?? item.schema?.type, + }; + + if (item.required) required.push(item.name); + }); + // Combine everything into a JSON Schema const inputSchema: JSONSchema7 = { type: 'object',