From c583d28cffc1e8297bad09c2a80301e1a60bcb86 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?St=C3=A9phane=20Tailland?= Date: Fri, 28 Aug 2026 17:34:06 +0200 Subject: [PATCH] fix(catalog-mcp): create-product could never succeed MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The tool's request schema omitted productcode, which catalog-api requires (ProductRequest in openapi.yaml lists it among the eight required fields). Since the declared schema is the only thing an MCP caller sees, there was no input that worked: omit it and the API answers {"productcode":["This field is required."]}; supply it and ai-mcp-proxy rejects the call first with "Additional properties are not allowed ('productcode' was unexpected)". The schema now mirrors ProductRequest — productcode added, the same eight fields marked required, and the length and format constraints carried over so a model reads them rather than guessing. Co-Authored-By: Claude Opus 5 --- kong/mcp/ai-mcp-proxy.yaml | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/kong/mcp/ai-mcp-proxy.yaml b/kong/mcp/ai-mcp-proxy.yaml index fe36bf4..569d0e7 100644 --- a/kong/mcp/ai-mcp-proxy.yaml +++ b/kong/mcp/ai-mcp-proxy.yaml @@ -72,25 +72,50 @@ config: required: true content: application/json: + # Mirrors ProductRequest in catalog-api/openapi.yaml. It has to: + # this schema is the only thing the caller sees, so anything it + # omits the caller cannot send. `productcode` was missing and is + # required by the API, which made this tool impossible to call + # successfully — every attempt came back + # {"productcode":["This field is required."]}, and a caller that + # tried to supply it anyway was rejected earlier still, here. schema: type: object properties: + productcode: + type: string + maxLength: 15 + description: Unique catalog identifier, e.g. S10_1949. Ask for it; do not invent one. productname: type: string + maxLength: 70 productline: type: string + description: Must be an existing product line, as returned by list-productlines. productscale: type: string + maxLength: 10 productvendor: type: string + maxLength: 50 productdescription: type: string quantityinstock: type: integer + minimum: -32768 + maximum: 32767 buyprice: type: string + description: Decimal as a string, at most two places, e.g. "50.00". msrp: type: string + description: Decimal as a string, at most two places, e.g. "99.00". required: + - productcode - productname - productline + - productscale + - productvendor + - productdescription + - buyprice + - msrp