From 2ee36f6bd2037b826c8eb17bacf9352571ff24a8 Mon Sep 17 00:00:00 2001 From: Norberto Date: Sat, 1 Aug 2026 20:24:09 -0400 Subject: [PATCH 1/3] fix: register google-duration format to silence unknown format warnings Firebase MCP and other Google Cloud API MCP servers use the 'google-duration' format (e.g. '3600s', '1.5s') in their JSON Schemas. AJV logs 'unknown format "google-duration" ignored' warnings for each schema that references it, creating noisy startup output. Register the format with a regex validator matching Google's Duration proto format: a number followed by a time unit suffix (s, ms, us, ns, m, h, d). This silences the warnings without affecting validation behavior since the SDK already ignores unknown formats. --- .../core-internal/src/validators/ajvProvider.ts | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/packages/core-internal/src/validators/ajvProvider.ts b/packages/core-internal/src/validators/ajvProvider.ts index e33adb741f..3f286eb6e0 100644 --- a/packages/core-internal/src/validators/ajvProvider.ts +++ b/packages/core-internal/src/validators/ajvProvider.ts @@ -27,6 +27,13 @@ interface AjvValidateFunction { /** `ajv-formats` default export, normalised through the CJS/ESM interop wrapper. */ const addFormats = _addFormats as unknown as typeof _addFormats.default; +/** + * Validate the `google-duration` format used by Google Cloud APIs (e.g. Firebase MCP). + * Accepts strings like "3600s", "1.5s", "100ms", "2m", "1h", "1d" — a number followed + * by a time unit suffix. See https://cloud.google.com/ruby/docs/reference/google-cloud-env/latest/Google/Protobuf/Duration + */ +const GOOGLE_DURATION_RE = /^\d+(\.\d+)?(s|ms|us|ns|m|h|d)$/; + function createDefaultAjvInstance(engineClass: typeof Ajv2020 | typeof Ajv2019 | typeof Draft7Ajv): AjvLike { const ajv = new engineClass({ strict: false, @@ -35,6 +42,14 @@ function createDefaultAjvInstance(engineClass: typeof Ajv2020 | typeof Ajv2019 | allErrors: true }); addFormats(ajv); + // Register Google Cloud duration format to silence "unknown format" warnings + // from MCP servers that use Google API schemas (e.g. Firebase MCP). + if ('addFormat' in ajv && typeof ajv.addFormat === 'function') { + (ajv as { addFormat: (name: string, format: unknown) => void }).addFormat( + 'google-duration', + GOOGLE_DURATION_RE + ); + } return ajv; } From 9e9966847ce9655965378a61629a1e48210ff1ed Mon Sep 17 00:00:00 2001 From: Norberto Date: Sat, 1 Aug 2026 20:39:24 -0400 Subject: [PATCH 2/3] chore: add changeset for google-duration format registration --- .changeset/register-google-duration-format.md | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 .changeset/register-google-duration-format.md diff --git a/.changeset/register-google-duration-format.md b/.changeset/register-google-duration-format.md new file mode 100644 index 0000000000..2083ff55fd --- /dev/null +++ b/.changeset/register-google-duration-format.md @@ -0,0 +1,9 @@ +--- +'@modelcontextprotocol/core-internal': patch +'@modelcontextprotocol/client': patch +'@modelcontextprotocol/server': patch +--- + +Register `google-duration` format on default AJV instances to silence "unknown format" warnings. + +Firebase MCP and other Google Cloud API MCP servers use the `google-duration` format in their JSON Schemas (values like `"3600s"`, `"1.5s"`). AJV logs `unknown format "google-duration" ignored` warnings for each schema that references it, creating noisy startup output. The format is registered with a regex matching Google's Duration proto format: a number followed by a time unit suffix (`s`, `ms`, `us`, `ns`, `m`, `h`, `d`). From fce58bcb8cb9183265d2c1279d6cc29315ca52f8 Mon Sep 17 00:00:00 2001 From: Norberto Date: Sat, 1 Aug 2026 20:41:31 -0400 Subject: [PATCH 3/3] style: fix prettier formatting in ajvProvider.ts --- packages/core-internal/src/validators/ajvProvider.ts | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/packages/core-internal/src/validators/ajvProvider.ts b/packages/core-internal/src/validators/ajvProvider.ts index 3f286eb6e0..76c7c88a7a 100644 --- a/packages/core-internal/src/validators/ajvProvider.ts +++ b/packages/core-internal/src/validators/ajvProvider.ts @@ -45,10 +45,7 @@ function createDefaultAjvInstance(engineClass: typeof Ajv2020 | typeof Ajv2019 | // Register Google Cloud duration format to silence "unknown format" warnings // from MCP servers that use Google API schemas (e.g. Firebase MCP). if ('addFormat' in ajv && typeof ajv.addFormat === 'function') { - (ajv as { addFormat: (name: string, format: unknown) => void }).addFormat( - 'google-duration', - GOOGLE_DURATION_RE - ); + (ajv as { addFormat: (name: string, format: unknown) => void }).addFormat('google-duration', GOOGLE_DURATION_RE); } return ajv; }