From 1026f455b7adbc0178b02c2ae35ac38debc60231 Mon Sep 17 00:00:00 2001 From: Railly Hugo Date: Fri, 25 Sep 2026 16:57:11 -0300 Subject: [PATCH 1/2] docs: prepare native WebMCP migration --- apps/web/app/api/mcp/route.ts | 7 +++ apps/web/package.json | 2 +- apps/web/scripts/test-routes.mjs | 62 ++++++++++++++++++++++ apps/web/source.config.ts | 11 +++- pnpm-lock.yaml | 91 +++++++++++++++++++++++++++++--- 5 files changed, 162 insertions(+), 11 deletions(-) create mode 100644 apps/web/app/api/mcp/route.ts diff --git a/apps/web/app/api/mcp/route.ts b/apps/web/app/api/mcp/route.ts new file mode 100644 index 00000000..e0a634e5 --- /dev/null +++ b/apps/web/app/api/mcp/route.ts @@ -0,0 +1,7 @@ +import { createMcpRoute } from "@vercel/geistdocs/routes/mcp"; +import { config } from "@/lib/geistdocs/config"; +import { GET as search } from "../search/route"; + +const handler = createMcpRoute({ config, search }); + +export { handler as GET, handler as POST }; diff --git a/apps/web/package.json b/apps/web/package.json index 8274d573..a7c5dfad 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -31,7 +31,7 @@ "@upstash/ratelimit": "^2.0.8", "@upstash/redis": "^1.36.1", "@vercel/analytics": "^1.6.1", - "@vercel/geistdocs": "2.4.1", + "@vercel/geistdocs": "2.6.0", "@vercel/speed-insights": "^1.3.1", "@visual-json/react": "0.1.1", "ai": "^6.0.33", diff --git a/apps/web/scripts/test-routes.mjs b/apps/web/scripts/test-routes.mjs index aeff35c1..0de7bb66 100644 --- a/apps/web/scripts/test-routes.mjs +++ b/apps/web/scripts/test-routes.mjs @@ -1,3 +1,4 @@ +import assert from "node:assert/strict"; import process from "node:process"; import { spawn } from "node:child_process"; import { createServer } from "node:net"; @@ -95,6 +96,67 @@ try { "Docs server did not become ready. Run the docs build first.", ); if (!stopping) { + const bridge = await fetch(`${url}/api/mcp?webmcp-script`, { + signal: AbortSignal.timeout(30000), + }); + assert.equal(bridge.status, 200); + assert.match(bridge.headers.get("content-type") ?? "", /javascript/); + assert.match(await bridge.text(), /registerTool/); + console.log("PASS native WebMCP bridge returns JavaScript (200)"); + + const rpc = async (method, params = {}) => { + const response = await fetch(`${url}/api/mcp`, { + method: "POST", + headers: { + "content-type": "application/json", + accept: "application/json, text/event-stream", + }, + body: JSON.stringify({ jsonrpc: "2.0", id: 1, method, params }), + signal: AbortSignal.timeout(30000), + }); + assert.equal(response.status, 200); + const type = response.headers.get("content-type")?.split(";")[0]; + assert.ok(["application/json", "text/event-stream"].includes(type)); + const body = await response.text(); + const messages = + type === "application/json" + ? [JSON.parse(body)] + : body + .split(/\r?\n\r?\n/) + .map((event) => + event + .split(/\r?\n/) + .filter((line) => line.startsWith("data:")) + .map((line) => line.slice(5).replace(/^ /, "")) + .join("\n"), + ) + .filter(Boolean) + .map((data) => JSON.parse(data)); + const replies = messages.filter((message) => message.id === 1); + assert.equal(replies.length, 1); + const [message] = replies; + assert.equal(message.jsonrpc, "2.0"); + assert.equal(message.error, undefined); + return message.result; + }; + const { tools } = await rpc("tools/list"); + assert.deepEqual( + tools.map((tool) => tool.name), + ["search_docs"], + ); + console.log("PASS MCP tools/list exposes search_docs"); + + const result = await rpc("tools/call", { + name: "search_docs", + arguments: { query: "StateProvider", locale: "en" }, + }); + assert.notEqual(result.isError, true); + const matches = JSON.parse( + result.content.find((item) => item.type === "text").text, + ); + assert.ok(matches.some((item) => item.url.startsWith("/docs/"))); + console.log("PASS MCP tools/call returns actual docs search results"); + tests = launch(["--test", "tests/docs-routes.test.mjs"], { ...process.env, DOCS_TEST_URL: url, diff --git a/apps/web/source.config.ts b/apps/web/source.config.ts index e1d5561e..6eb7b289 100644 --- a/apps/web/source.config.ts +++ b/apps/web/source.config.ts @@ -3,10 +3,17 @@ import { geistdocsFrontmatterSchema, geistdocsMetaSchema, } from "@vercel/geistdocs/source-config"; -import { defineConfig, defineDocs } from "fumadocs-mdx/config"; +import { + defineConfig, + defineDocs, + type DocsCollection, +} from "fumadocs-mdx/config"; import { remarkLegacyHeadings } from "./lib/remark-legacy-headings"; -export const docs = defineDocs({ +export const docs: DocsCollection< + typeof geistdocsFrontmatterSchema, + typeof geistdocsMetaSchema +> = defineDocs({ dir: "content/docs", docs: { schema: geistdocsFrontmatterSchema, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 99ba4788..8ececab0 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -125,8 +125,8 @@ importers: specifier: ^1.6.1 version: 1.6.1(@sveltejs/kit@2.53.2(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.54.1)(vite@7.3.1(@types/node@22.19.6)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.54.1)(typescript@5.9.2)(vite@7.3.1(@types/node@22.19.6)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(next@16.3.4(patch_hash=a620718f9d934500c4f0364aa9312b2539559e0ac911cdc37c97b92e1e9b4550)(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@types/node@22.19.6)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(svelte@5.54.1)(vue@3.5.29(typescript@5.9.2)) '@vercel/geistdocs': - specifier: 2.4.1 - version: 2.4.1(4d4756382f845489d64dfb2804df7ab8) + specifier: 2.6.0 + version: 2.6.0(4d4756382f845489d64dfb2804df7ab8) '@vercel/speed-insights': specifier: ^1.3.1 version: 1.3.1(@sveltejs/kit@2.53.2(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.54.1)(vite@7.3.1(@types/node@22.19.6)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.54.1)(typescript@5.9.2)(vite@7.3.1(@types/node@22.19.6)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(next@16.3.4(patch_hash=a620718f9d934500c4f0364aa9312b2539559e0ac911cdc37c97b92e1e9b4550)(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@types/node@22.19.6)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(svelte@5.54.1)(vue@3.5.29(typescript@5.9.2)) @@ -5128,6 +5128,10 @@ packages: '@mistralai/mistralai@2.2.1': resolution: {integrity: sha512-uKU8CZmL2RzYKmplsU01hii4p3pe4HqJefpWNRWXm1Tcm0Sm4xXfwSLIy4k7ZCPlbETCGcp69E7hZs+WOJ5itQ==} + '@modelcontextprotocol/core@2.1.0': + resolution: {integrity: sha512-YdFj5gMRHr0gYNAhTbQDgjLHiEJdIAUYxomhKseUNye7ZGlISQmUoLh2sveFFCiQ7j2YMffT1kgSND0FSfIFjQ==} + engines: {node: '>=20'} + '@modelcontextprotocol/ext-apps@1.2.0': resolution: {integrity: sha512-ijUQJX/FmNq8PWgOLzph/BAfy84sUZxoIRuHzr+F37wYtWjhdl8pliBJybapYolppY+XJ8oqjFZmTOuMqxwbWQ==} peerDependencies: @@ -5161,6 +5165,10 @@ packages: '@cfworker/json-schema': optional: true + '@modelcontextprotocol/server@2.1.0': + resolution: {integrity: sha512-FdvwZU5N03O77Suh35JqjAqq5R1ZTEPFtwu6N4BgBq28qrQtrCnpbLL5U2pwYCuE194jAw0xnlOVmIqhfoYuUQ==} + engines: {node: '>=20'} + '@monogrid/gainmap-js@3.4.0': resolution: {integrity: sha512-2Z0FATFHaoYJ8b+Y4y4Hgfn3FRFwuU5zRrk+9dFWp4uGAdHGqVEdP7HP+gLA3X469KXHmfupJaUbKo1b/aDKIg==} peerDependencies: @@ -9009,8 +9017,8 @@ packages: resolution: {integrity: sha512-g9XerViJ/paZujufXYcu5XYI2vU2rtB4sgdpjUHde5RnOkdmpu0ngH46LCFGHoPXO/C+qDPSczIHIRN+8Q2YKQ==} engines: {node: '>= 18'} - '@vercel/geistdocs@2.4.1': - resolution: {integrity: sha512-mTGqEWG0SATR95I2sKzG37UEllFQRwfKVCy0mYY7Iu0Vrq6Nr4Iere7DlDrnPVMXUIT2ksFBz9qhlXrum+9+4Q==} + '@vercel/geistdocs@2.6.0': + resolution: {integrity: sha512-RiZZNjyvQviQXGoms6X/wBWMjpCL26gLAYOQacikpbQZbu2PJbxWksrqIatKGZP+1OKwCHl288IM48lLbncV9g==} hasBin: true peerDependencies: next: ^16.3.3 @@ -13127,6 +13135,17 @@ packages: resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==} engines: {node: '>= 0.4'} + mcp-handler@2.2.0: + resolution: {integrity: sha512-loJsIem4jM1jLUsI4x2errOHSzvU+Et6XV4Aqq1AEUkHOqridUoY4dLM02OlRfsku+OjtMlk+tHyYjpfO65X6g==} + engines: {node: '>=20'} + hasBin: true + peerDependencies: + '@modelcontextprotocol/server': ^2.0.0 + next: '>=13.0.0' + peerDependenciesMeta: + next: + optional: true + mdast-util-find-and-replace@3.0.2: resolution: {integrity: sha512-Tmd1Vg/m3Xz43afeNxDIhWRtFZgM2VLyaf4vSTYwudTyeuTneoL3qtWMA5jeLyz/O1vDJmmV4QuScFCA2tBPwg==} @@ -16592,6 +16611,9 @@ packages: zod@4.3.6: resolution: {integrity: sha512-rftlrkhHZOcjDwkGlnUtZZkvaPHCsDATp4pGpuOOMDaTdDDXF91wuVDJoWoPsKX/3YPQ5fHuF3STjcYyKr+Qhg==} + zod@4.6.5: + resolution: {integrity: sha512-v5l/aFXZQeai4awLbOpSoHecE9UiMrnfx75tEXLjNonXVARxQ5mOeipTjROUchszUNCqnE+hqAMujRsRHsut2Q==} + zustand@4.5.7: resolution: {integrity: sha512-CHOUy7mu3lbD6o6LJLfllpjkzhHXSBlX8B9+qPddUsIfeF5S/UZ5q0kmCsnRqT1UHFQZchNFDDzMbQsuesHWlw==} engines: {node: '>=12.7.0'} @@ -16661,6 +16683,13 @@ snapshots: '@vercel/oidc': 3.2.0 zod: 4.3.6 + '@ai-sdk/gateway@3.0.104(zod@4.6.5)': + dependencies: + '@ai-sdk/provider': 3.0.8 + '@ai-sdk/provider-utils': 4.0.23(zod@4.6.5) + '@vercel/oidc': 3.2.0 + zod: 4.6.5 + '@ai-sdk/gateway@3.0.39(zod@4.3.6)': dependencies: '@ai-sdk/provider': 3.0.8 @@ -16806,6 +16835,13 @@ snapshots: eventsource-parser: 3.0.6 zod: 4.3.6 + '@ai-sdk/provider-utils@4.0.23(zod@4.6.5)': + dependencies: + '@ai-sdk/provider': 3.0.8 + '@standard-schema/spec': 1.1.0 + eventsource-parser: 3.0.6 + zod: 4.6.5 + '@ai-sdk/provider-utils@5.0.0-canary.48(zod@3.25.76)': dependencies: '@ai-sdk/provider': 4.0.0-canary.18 @@ -16830,6 +16866,16 @@ snapshots: dependencies: json-schema: 0.4.0 + '@ai-sdk/react@3.0.170(react@19.2.3)(zod@4.6.5)': + dependencies: + '@ai-sdk/provider-utils': 4.0.23(zod@4.6.5) + ai: 6.0.168(zod@4.6.5) + react: 19.2.3 + swr: 2.4.0(react@19.2.3) + throttleit: 2.1.0 + transitivePeerDependencies: + - zod + '@ai-sdk/react@3.0.170(react@19.2.3)(zod@4.3.6)': dependencies: '@ai-sdk/provider-utils': 4.0.23(zod@4.3.6) @@ -19420,6 +19466,10 @@ snapshots: - bufferutil - utf-8-validate + '@modelcontextprotocol/core@2.1.0': + dependencies: + zod: 4.6.5 + '@modelcontextprotocol/ext-apps@1.2.0(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)': dependencies: '@modelcontextprotocol/sdk': 1.27.1(zod@4.3.6) @@ -19472,6 +19522,11 @@ snapshots: transitivePeerDependencies: - supports-color + '@modelcontextprotocol/server@2.1.0': + dependencies: + '@modelcontextprotocol/core': 2.1.0 + zod: 4.6.5 + '@monogrid/gainmap-js@3.4.0(three@0.182.0)': dependencies: promise-worker-transferable: 1.0.4 @@ -24756,10 +24811,11 @@ snapshots: dependencies: execa: 5.1.1 - '@vercel/geistdocs@2.4.1(4d4756382f845489d64dfb2804df7ab8)': + '@vercel/geistdocs@2.6.0(4d4756382f845489d64dfb2804df7ab8)': dependencies: - '@ai-sdk/react': 3.0.170(react@19.2.3)(zod@4.3.6) + '@ai-sdk/react': 3.0.170(react@19.2.3)(zod@4.6.5) '@clack/prompts': 0.11.0 + '@modelcontextprotocol/server': 2.1.0 '@next/env': 16.3.3 '@orama/tokenizers': 3.1.18 '@streamdown/cjk': 1.0.3(@types/mdast@4.0.4)(micromark-util-types@2.0.2)(micromark@4.0.2)(react@19.2.3)(unified@11.0.5) @@ -24767,7 +24823,7 @@ snapshots: '@types/react': 19.2.14 '@vercel/agent-readability': 0.7.0(@sveltejs/kit@2.53.2(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.54.1)(vite@7.3.1(@types/node@22.19.6)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.54.1)(typescript@5.9.2)(vite@7.3.1(@types/node@22.19.6)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(next@16.3.4(patch_hash=a620718f9d934500c4f0364aa9312b2539559e0ac911cdc37c97b92e1e9b4550)(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@types/node@22.19.6)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) '@vercel/oidc': 3.8.7 - ai: 6.0.168(zod@4.3.6) + ai: 6.0.168(zod@4.6.5) class-variance-authority: 0.7.1 clsx: 2.1.1 commander: 14.0.2 @@ -24778,6 +24834,7 @@ snapshots: fumadocs-ui: 16.2.2(@tanstack/react-router@1.170.32(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.14)(lucide-react@0.562.0(react@19.2.3))(next@16.3.4(patch_hash=a620718f9d934500c4f0364aa9312b2539559e0ac911cdc37c97b92e1e9b4550)(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@types/node@22.19.6)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react-dom@19.2.3(react@19.2.3))(react@19.2.3)(tailwindcss@4.2.1) geist: 1.7.1(next@16.3.4(patch_hash=a620718f9d934500c4f0364aa9312b2539559e0ac911cdc37c97b92e1e9b4550)(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@types/node@22.19.6)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) glob: 11.1.0 + mcp-handler: 2.2.0(@modelcontextprotocol/server@2.1.0)(next@16.3.4(patch_hash=a620718f9d934500c4f0364aa9312b2539559e0ac911cdc37c97b92e1e9b4550)(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@types/node@22.19.6)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)) mermaid: 11.15.0 motion: 12.43.0(react-dom@19.2.3(react@19.2.3))(react@19.2.3) next: 16.3.4(patch_hash=a620718f9d934500c4f0364aa9312b2539559e0ac911cdc37c97b92e1e9b4550)(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@types/node@22.19.6)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) @@ -24803,7 +24860,7 @@ snapshots: unist-util-visit: 5.1.0 use-stick-to-bottom: 1.1.6(react@19.2.3) vaul: 1.1.2(@types/react-dom@19.2.3(@types/react@19.2.3))(@types/react@19.2.14)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) - zod: 4.3.6 + zod: 4.6.5 transitivePeerDependencies: - '@emotion/is-prop-valid' - '@fumadocs/mdx-remote' @@ -25222,6 +25279,14 @@ snapshots: '@opentelemetry/api': 1.9.0 zod: 4.3.6 + ai@6.0.168(zod@4.6.5): + dependencies: + '@ai-sdk/gateway': 3.0.104(zod@4.6.5) + '@ai-sdk/provider': 3.0.8 + '@ai-sdk/provider-utils': 4.0.23(zod@4.6.5) + '@opentelemetry/api': 1.9.0 + zod: 4.6.5 + ai@6.0.77(zod@4.3.6): dependencies: '@ai-sdk/gateway': 3.0.39(zod@4.3.6) @@ -29842,6 +29907,14 @@ snapshots: math-intrinsics@1.1.0: {} + mcp-handler@2.2.0(@modelcontextprotocol/server@2.1.0)(next@16.3.4(patch_hash=a620718f9d934500c4f0364aa9312b2539559e0ac911cdc37c97b92e1e9b4550)(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@types/node@22.19.6)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3)): + dependencies: + '@modelcontextprotocol/server': 2.1.0 + chalk: 5.6.2 + commander: 11.1.0 + optionalDependencies: + next: 16.3.4(patch_hash=a620718f9d934500c4f0364aa9312b2539559e0ac911cdc37c97b92e1e9b4550)(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@types/node@22.19.6)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3) + mdast-util-find-and-replace@3.0.2: dependencies: '@types/mdast': 4.0.4 @@ -34784,6 +34857,8 @@ snapshots: zod@4.3.6: {} + zod@4.6.5: {} + zustand@4.5.7(@types/react@19.2.3)(immer@11.1.4)(react@19.2.4): dependencies: use-sync-external-store: 1.6.0(react@19.2.4) From 806d3c551fe7b35a6212a8745a1cd0303f500175 Mon Sep 17 00:00:00 2001 From: Railly Hugo Date: Wed, 30 Sep 2026 16:30:06 -0300 Subject: [PATCH 2/2] docs: update Geistdocs to 2.7.5 --- apps/web/package.json | 2 +- pnpm-lock.yaml | 88 ++++++++++++++++++++++++++++++++----------- 2 files changed, 68 insertions(+), 22 deletions(-) diff --git a/apps/web/package.json b/apps/web/package.json index a7c5dfad..0608fe97 100644 --- a/apps/web/package.json +++ b/apps/web/package.json @@ -31,7 +31,7 @@ "@upstash/ratelimit": "^2.0.8", "@upstash/redis": "^1.36.1", "@vercel/analytics": "^1.6.1", - "@vercel/geistdocs": "2.6.0", + "@vercel/geistdocs": "2.7.5", "@vercel/speed-insights": "^1.3.1", "@visual-json/react": "0.1.1", "ai": "^6.0.33", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8ececab0..985ee564 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -125,8 +125,8 @@ importers: specifier: ^1.6.1 version: 1.6.1(@sveltejs/kit@2.53.2(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.54.1)(vite@7.3.1(@types/node@22.19.6)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.54.1)(typescript@5.9.2)(vite@7.3.1(@types/node@22.19.6)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(next@16.3.4(patch_hash=a620718f9d934500c4f0364aa9312b2539559e0ac911cdc37c97b92e1e9b4550)(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@types/node@22.19.6)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(svelte@5.54.1)(vue@3.5.29(typescript@5.9.2)) '@vercel/geistdocs': - specifier: 2.6.0 - version: 2.6.0(4d4756382f845489d64dfb2804df7ab8) + specifier: 2.7.5 + version: 2.7.5(4d4756382f845489d64dfb2804df7ab8) '@vercel/speed-insights': specifier: ^1.3.1 version: 1.3.1(@sveltejs/kit@2.53.2(@opentelemetry/api@1.9.0)(@sveltejs/vite-plugin-svelte@6.2.4(svelte@5.54.1)(vite@7.3.1(@types/node@22.19.6)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(svelte@5.54.1)(typescript@5.9.2)(vite@7.3.1(@types/node@22.19.6)(jiti@2.7.0)(lightningcss@1.32.0)(terser@5.46.0)(tsx@4.21.0)(yaml@2.8.2)))(next@16.3.4(patch_hash=a620718f9d934500c4f0364aa9312b2539559e0ac911cdc37c97b92e1e9b4550)(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(@types/node@22.19.6)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.3(react@19.2.3))(react@19.2.3))(react@19.2.3)(svelte@5.54.1)(vue@3.5.29(typescript@5.9.2)) @@ -1528,10 +1528,10 @@ importers: dependencies: '@ai-sdk/gateway': specifier: ^3.0.50 - version: 3.0.57(zod@4.3.6) + version: 3.0.57(zod@4.6.5) ai: specifier: ^6.0.91 - version: 6.0.103(zod@4.3.6) + version: 6.0.103(zod@4.6.5) next: specifier: ^16.1.6 version: 16.1.6(@babel/core@7.29.0)(@opentelemetry/api@1.9.0)(babel-plugin-react-compiler@1.0.0)(react-dom@19.2.4(react@19.2.4))(react@19.2.4) @@ -2110,10 +2110,10 @@ importers: version: link:../core '@modelcontextprotocol/ext-apps': specifier: ^1.2.0 - version: 1.2.0(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6) + version: 1.2.0(@modelcontextprotocol/sdk@1.27.1(zod@4.6.5))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.6.5) '@modelcontextprotocol/sdk': specifier: ^1.27.1 - version: 1.27.1(zod@4.3.6) + version: 1.27.1(zod@4.6.5) react: specifier: ^19.0.0 version: 19.2.4 @@ -9017,8 +9017,8 @@ packages: resolution: {integrity: sha512-g9XerViJ/paZujufXYcu5XYI2vU2rtB4sgdpjUHde5RnOkdmpu0ngH46LCFGHoPXO/C+qDPSczIHIRN+8Q2YKQ==} engines: {node: '>= 18'} - '@vercel/geistdocs@2.6.0': - resolution: {integrity: sha512-RiZZNjyvQviQXGoms6X/wBWMjpCL26gLAYOQacikpbQZbu2PJbxWksrqIatKGZP+1OKwCHl288IM48lLbncV9g==} + '@vercel/geistdocs@2.7.5': + resolution: {integrity: sha512-SjEOusPjrviI0fO3NPWCmL/Kw/63Yh3Hyb3ysxyZg0+cLrlRoMxq2YqeQ1deI85xZhva5i3vSR22r+rw+FSw1w==} hasBin: true peerDependencies: next: ^16.3.3 @@ -16725,6 +16725,13 @@ snapshots: '@vercel/oidc': 3.1.0 zod: 4.3.6 + '@ai-sdk/gateway@3.0.57(zod@4.6.5)': + dependencies: + '@ai-sdk/provider': 3.0.8 + '@ai-sdk/provider-utils': 4.0.15(zod@4.6.5) + '@vercel/oidc': 3.1.0 + zod: 4.6.5 + '@ai-sdk/gateway@3.0.66(zod@4.3.6)': dependencies: '@ai-sdk/provider': 3.0.8 @@ -16821,6 +16828,13 @@ snapshots: eventsource-parser: 3.0.6 zod: 4.3.6 + '@ai-sdk/provider-utils@4.0.15(zod@4.6.5)': + dependencies: + '@ai-sdk/provider': 3.0.8 + '@standard-schema/spec': 1.1.0 + eventsource-parser: 3.0.6 + zod: 4.6.5 + '@ai-sdk/provider-utils@4.0.19(zod@4.3.6)': dependencies: '@ai-sdk/provider': 3.0.8 @@ -16876,16 +16890,6 @@ snapshots: transitivePeerDependencies: - zod - '@ai-sdk/react@3.0.170(react@19.2.3)(zod@4.3.6)': - dependencies: - '@ai-sdk/provider-utils': 4.0.23(zod@4.3.6) - ai: 6.0.168(zod@4.3.6) - react: 19.2.3 - swr: 2.4.0(react@19.2.3) - throttleit: 2.1.0 - transitivePeerDependencies: - - zod - '@ai-sdk/react@3.0.170(react@19.2.4)(zod@4.3.6)': dependencies: '@ai-sdk/provider-utils': 4.0.23(zod@4.3.6) @@ -19468,7 +19472,7 @@ snapshots: '@modelcontextprotocol/core@2.1.0': dependencies: - zod: 4.6.5 + zod: 4.3.6 '@modelcontextprotocol/ext-apps@1.2.0(@modelcontextprotocol/sdk@1.27.1(zod@4.3.6))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.3.6)': dependencies: @@ -19478,6 +19482,14 @@ snapshots: react: 19.2.4 react-dom: 19.2.4(react@19.2.4) + '@modelcontextprotocol/ext-apps@1.2.0(@modelcontextprotocol/sdk@1.27.1(zod@4.6.5))(react-dom@19.2.4(react@19.2.4))(react@19.2.4)(zod@4.6.5)': + dependencies: + '@modelcontextprotocol/sdk': 1.27.1(zod@4.6.5) + zod: 4.6.5 + optionalDependencies: + react: 19.2.4 + react-dom: 19.2.4(react@19.2.4) + '@modelcontextprotocol/sdk@1.26.0(zod@3.25.76)': dependencies: '@hono/node-server': 1.19.9(hono@4.12.0) @@ -19522,10 +19534,32 @@ snapshots: transitivePeerDependencies: - supports-color + '@modelcontextprotocol/sdk@1.27.1(zod@4.6.5)': + dependencies: + '@hono/node-server': 1.19.9(hono@4.12.0) + ajv: 8.17.1 + ajv-formats: 3.0.1(ajv@8.17.1) + content-type: 1.0.5 + cors: 2.8.6 + cross-spawn: 7.0.6 + eventsource: 3.0.7 + eventsource-parser: 3.0.6 + express: 5.2.1 + express-rate-limit: 8.2.1(express@5.2.1) + hono: 4.12.0 + jose: 6.1.3 + json-schema-typed: 8.0.2 + pkce-challenge: 5.0.1 + raw-body: 3.0.2 + zod: 4.6.5 + zod-to-json-schema: 3.25.1(zod@4.6.5) + transitivePeerDependencies: + - supports-color + '@modelcontextprotocol/server@2.1.0': dependencies: '@modelcontextprotocol/core': 2.1.0 - zod: 4.6.5 + zod: 4.3.6 '@monogrid/gainmap-js@3.4.0(three@0.182.0)': dependencies: @@ -24811,7 +24845,7 @@ snapshots: dependencies: execa: 5.1.1 - '@vercel/geistdocs@2.6.0(4d4756382f845489d64dfb2804df7ab8)': + '@vercel/geistdocs@2.7.5(4d4756382f845489d64dfb2804df7ab8)': dependencies: '@ai-sdk/react': 3.0.170(react@19.2.3)(zod@4.6.5) '@clack/prompts': 0.11.0 @@ -25263,6 +25297,14 @@ snapshots: '@opentelemetry/api': 1.9.0 zod: 4.3.6 + ai@6.0.103(zod@4.6.5): + dependencies: + '@ai-sdk/gateway': 3.0.57(zod@4.6.5) + '@ai-sdk/provider': 3.0.8 + '@ai-sdk/provider-utils': 4.0.15(zod@4.6.5) + '@opentelemetry/api': 1.9.0 + zod: 4.6.5 + ai@6.0.116(zod@4.3.6): dependencies: '@ai-sdk/gateway': 3.0.66(zod@4.3.6) @@ -34849,6 +34891,10 @@ snapshots: dependencies: zod: 4.3.6 + zod-to-json-schema@3.25.1(zod@4.6.5): + dependencies: + zod: 4.6.5 + zod@3.22.3: {} zod@3.25.76: {}