From 658a9faac212365daceeeec80ffae9c640a27566 Mon Sep 17 00:00:00 2001 From: Drew Cain Date: Sun, 3 May 2026 14:42:18 -0500 Subject: [PATCH] fix: replace Type.Record with Type.Object for metadata_filters schema MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Type.Record(Type.String(), Type.Unknown()) emits patternProperties, which several provider compat paths strip or reject (Gemini drops patternProperties; OpenAI strict-tools rejects it). The result was that metadata_filters disappeared from the schema presented to some models (e.g. github-copilot/gpt-5.4). Switch to Type.Object({}, { additionalProperties: true }) so the parameter renders as a plain open-ended object that survives every provider's schema sanitizer. Runtime/types unchanged — the handler still casts to Record. Fixes #38 --- tools/search-notes.ts | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/tools/search-notes.ts b/tools/search-notes.ts index a735dd8..d891230 100644 --- a/tools/search-notes.ts +++ b/tools/search-notes.ts @@ -26,10 +26,14 @@ export function registerSearchTool( }), ), metadata_filters: Type.Optional( - Type.Record(Type.String(), Type.Unknown(), { - description: - "Filter by frontmatter fields. Supports equality, $in, $gt/$gte/$lt/$lte, $between, and array-contains operators.", - }), + Type.Object( + {}, + { + additionalProperties: true, + description: + "Filter by frontmatter fields. Supports equality, $in, $gt/$gte/$lt/$lte, $between, and array-contains operators.", + }, + ), ), tags: Type.Optional( Type.Array(Type.String(), {