From d21098ada41e5157865169fae9d2b4c393db048a Mon Sep 17 00:00:00 2001 From: Matt Rossman <22670878+mattrossman@users.noreply.github.com> Date: Tue, 27 Jan 2026 13:10:17 -0500 Subject: [PATCH] chore(studio): upgrade @supabase/mcp-server-supabase to v0.6.2 (#42210) * chore(mcp): upgrade @supabase/mcp-server-supabase to v0.6.2 * fix: mocks for Node.js / Web Standard HTTP APIs --- apps/studio/package.json | 6 +- apps/studio/tests/pages/api/mcp/index.test.ts | 25 ++++- pnpm-lock.yaml | 103 ++++++++---------- 3 files changed, 75 insertions(+), 59 deletions(-) diff --git a/apps/studio/package.json b/apps/studio/package.json index 7bae02cb2a8..d3db90acbe4 100644 --- a/apps/studio/package.json +++ b/apps/studio/package.json @@ -47,7 +47,7 @@ "@heroicons/react": "^2.1.3", "@hookform/resolvers": "^3.1.1", "@mjackson/multipart-parser": "^0.10.1", - "@modelcontextprotocol/sdk": "^1.24.0", + "@modelcontextprotocol/sdk": "^1.25.2", "@monaco-editor/react": "^4.6.0", "@next/bundle-analyzer": "^16.0.3", "@number-flow/react": "^0.3.2", @@ -59,8 +59,8 @@ "@stripe/react-stripe-js": "^3.7.0", "@stripe/stripe-js": "^7.5.0", "@supabase/auth-js": "catalog:", - "@supabase/mcp-server-supabase": "^0.6.1", - "@supabase/mcp-utils": "^0.3.1", + "@supabase/mcp-server-supabase": "^0.6.2", + "@supabase/mcp-utils": "^0.3.2", "@supabase/pg-meta": "workspace:*", "@supabase/realtime-js": "catalog:", "@supabase/shared-types": "0.1.83", diff --git a/apps/studio/tests/pages/api/mcp/index.test.ts b/apps/studio/tests/pages/api/mcp/index.test.ts index a7ed2d428e7..e8159af8a7e 100644 --- a/apps/studio/tests/pages/api/mcp/index.test.ts +++ b/apps/studio/tests/pages/api/mcp/index.test.ts @@ -1,12 +1,35 @@ -import { describe, it, expect, beforeEach } from 'vitest' +import { describe, it, expect, beforeEach, vi } from 'vitest' import { createMocks } from 'node-mocks-http' import { mswServer } from 'tests/lib/msw' import handler from '../../../../pages/api/mcp/index' +// Mock the MCP SDK and Supabase MCP server to avoid Hono/node-mocks-http compatibility issues. +// +// Starting with MCP SDK v1.25.x (required by @supabase/mcp-server-supabase@0.6.2), the SDK +// uses @hono/node-server for converting between Node.js HTTP and Web Standard APIs. This is +// incompatible with the node-mocks-http library used in these tests. +// +// Since these tests focus on query parameter validation in the API handler rather than +// testing the MCP transport implementation, we mock both packages to avoid hitting the +// incompatible Hono code paths. +vi.mock('@modelcontextprotocol/sdk/server/streamableHttp.js', () => ({ + StreamableHTTPServerTransport: vi.fn().mockImplementation(() => ({ + handleRequest: vi.fn().mockResolvedValue(undefined), + })), +})) + +vi.mock('@supabase/mcp-server-supabase', () => ({ + createSupabaseMcpServer: vi.fn().mockReturnValue({ + connect: vi.fn().mockResolvedValue(undefined), + }), +})) + describe('/api/mcp', () => { beforeEach(() => { // Disable MSW for these tests mswServer.close() + // Clear mock state between tests + vi.clearAllMocks() }) describe('Method handling', async () => { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0efb56d357b..eae1ffc40d9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -560,7 +560,7 @@ importers: version: 0.3.0(react-dom@18.3.1(react@18.3.1))(react@18.3.1) nuqs: specifier: ^1.19.1 - version: 1.19.1(next@15.5.10(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4)) + version: 1.19.1(next@15.5.10(@babel/core@7.28.4(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4)) openai: specifier: ^4.75.1 version: 4.104.0(encoding@0.1.13)(ws@8.18.3)(zod@3.25.76) @@ -836,8 +836,8 @@ importers: specifier: ^0.10.1 version: 0.10.1 '@modelcontextprotocol/sdk': - specifier: ^1.24.0 - version: 1.24.0(supports-color@8.1.1)(zod@3.25.76) + specifier: ^1.25.2 + version: 1.25.3(hono@4.11.4)(supports-color@8.1.1)(zod@3.25.76) '@monaco-editor/react': specifier: ^4.6.0 version: 4.6.0(monaco-editor@0.52.2)(react-dom@18.3.1(react@18.3.1))(react@18.3.1) @@ -872,11 +872,11 @@ importers: specifier: 'catalog:' version: 2.93.1 '@supabase/mcp-server-supabase': - specifier: ^0.6.1 - version: 0.6.1(supports-color@8.1.1)(zod@3.25.76) + specifier: ^0.6.2 + version: 0.6.2(@modelcontextprotocol/sdk@1.25.3(hono@4.11.4)(supports-color@8.1.1)(zod@3.25.76))(zod@3.25.76) '@supabase/mcp-utils': - specifier: ^0.3.1 - version: 0.3.1(supports-color@8.1.1)(zod@3.25.76) + specifier: ^0.3.2 + version: 0.3.2(@modelcontextprotocol/sdk@1.25.3(hono@4.11.4)(supports-color@8.1.1)(zod@3.25.76))(zod@3.25.76) '@supabase/pg-meta': specifier: workspace:* version: link:../../packages/pg-meta @@ -4178,6 +4178,12 @@ packages: peerDependencies: react: '>= 16' + '@hono/node-server@1.19.9': + resolution: {integrity: sha512-vHL6w3ecZsky+8P5MD+eFfaGTyCeOHUIFYMGpQGbrBTSmNNoxv0if69rEZ5giu36weC5saFuznL411gRX7bJDw==} + engines: {node: '>=18.14.1'} + peerDependencies: + hono: ^4 + '@hookform/resolvers@3.3.1': resolution: {integrity: sha512-K7KCKRKjymxIB90nHDQ7b9nli474ru99ZbqxiqDAWYsYhOsU3/4qLxW91y+1n04ic13ajjZ66L3aXbNef8PELQ==} peerDependencies: @@ -4914,18 +4920,8 @@ packages: '@mjackson/node-fetch-server@0.2.0': resolution: {integrity: sha512-EMlH1e30yzmTpGLQjlFmaDAjyOeZhng1/XCd7DExR8PNAnG/G1tyruZxEoUe11ClnwGhGrtsdnyyUx1frSzjng==} - '@modelcontextprotocol/sdk@1.23.1': - resolution: {integrity: sha512-JvO6eVMbSKdk+iZcwECz/tra9DRAKlv1mAOsQ1DAWU3qG28tDIffpkEAUkqMMwlOq77GhnMpezEjiQJGIR+hHw==} - engines: {node: '>=18'} - peerDependencies: - '@cfworker/json-schema': ^4.1.1 - zod: ^3.25 || ^4.0 - peerDependenciesMeta: - '@cfworker/json-schema': - optional: true - - '@modelcontextprotocol/sdk@1.24.0': - resolution: {integrity: sha512-D8h5KXY2vHFW8zTuxn2vuZGN0HGrQ5No6LkHwlEA9trVgNdPL3TF1dSqKA7Dny6BbBYKSW/rOBDXdC8KJAjUCg==} + '@modelcontextprotocol/sdk@1.25.3': + resolution: {integrity: sha512-vsAMBMERybvYgKbg/l4L1rhS7VXV1c0CtyJg72vwxONVX0l4ZfKVAnZEWTQixJGTzKnELjQ59e4NbdFDALRiAQ==} engines: {node: '>=18'} peerDependencies: '@cfworker/json-schema': ^4.1.1 @@ -8926,15 +8922,17 @@ packages: resolution: {integrity: sha512-Ott2IcIXHGupaC0nX9WNEiJAX4OdlGRu9upkkURaQHbaLdz9JuCcHxlwTERgtgjMpikbIWHfMM1M9QTQFYABiA==} engines: {node: '>=20.0.0'} - '@supabase/mcp-server-supabase@0.6.1': - resolution: {integrity: sha512-NYxYg2t+CPoL4l/j+oGS0J9cu7ZWpWG+j3w4RHQht0jCSsRw2nD37UFPIRzG65eKYhuutK22uP12IDo/bpeohw==} + '@supabase/mcp-server-supabase@0.6.2': + resolution: {integrity: sha512-XcdWfXDckMZb4mexNBkGadTIU+7vnOdX+gffc/7wDdmkEb7TAndbSuoE5hHh/bj5wBlD2GXpFjieyWYF5Nz+3w==} hasBin: true peerDependencies: + '@modelcontextprotocol/sdk': ^1.25.2 zod: ^3.25.0 || ^4.0.0 - '@supabase/mcp-utils@0.3.1': - resolution: {integrity: sha512-t9jVa9yvI+yGKLTsTgW1gQUX2tj77mcgy+OiRe/ysS+tvFckxZZTZUJrAMvVeIe6IMJ5FVXk5FWA4gIU9EyYyg==} + '@supabase/mcp-utils@0.3.2': + resolution: {integrity: sha512-hGenK6oEFHkWhAyKGD1gNeIsHRRCl/N/kHmwubZm+UWCj4O1iuS6XgX1Ub2+mH25qqpUHIMaVm9BEV2p1RbhNQ==} peerDependencies: + '@modelcontextprotocol/sdk': ^1.25.2 zod: ^3.25.0 || ^4.0.0 '@supabase/postgres-meta@0.64.6': @@ -13445,6 +13443,10 @@ packages: resolution: {integrity: sha512-eSmmWE5bZTK2Nou4g0AI3zZ9rswp7GRKoKXS1BLUkvPviOqs4YTN1djQIqrXy9k5gEtdLPy86JjRwsNM9tnDcA==} engines: {node: '>=0.10.0'} + hono@4.11.4: + resolution: {integrity: sha512-U7tt8JsyrxSRKspfhtLET79pU8K+tInj5QZXs1jSugO1Vq5dFj3kmZsRldo29mTBfcjDRVRXrEZ6LS63Cog9ZA==} + engines: {node: '>=16.9.0'} + hookable@5.5.3: resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} @@ -14259,6 +14261,9 @@ packages: json-schema-traverse@1.0.0: resolution: {integrity: sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==} + json-schema-typed@8.0.2: + resolution: {integrity: sha512-fQhoXdcvc3V28x7C7BMs4P5+kNlgUURe2jmUT1T//oBRMDrqy1QPelJimwZGo7Hg9VPV3EQV5Bnq4hbFy2vetA==} + json-schema@0.4.0: resolution: {integrity: sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==} @@ -22555,6 +22560,10 @@ snapshots: dependencies: react: 18.3.1 + '@hono/node-server@1.19.9(hono@4.11.4)': + dependencies: + hono: 4.11.4 + '@hookform/resolvers@3.3.1(react-hook-form@7.47.0(react@18.3.1))': dependencies: react-hook-form: 7.47.0(react@18.3.1) @@ -23330,26 +23339,9 @@ snapshots: '@mjackson/node-fetch-server@0.2.0': {} - '@modelcontextprotocol/sdk@1.23.1(supports-color@8.1.1)(zod@3.25.76)': - dependencies: - ajv: 8.17.1 - ajv-formats: 3.0.1(ajv@8.17.1) - content-type: 1.0.5 - cors: 2.8.5 - cross-spawn: 7.0.6 - eventsource: 3.0.7 - eventsource-parser: 3.0.6 - express: 5.1.0(supports-color@8.1.1) - express-rate-limit: 7.5.0(express@5.1.0(supports-color@8.1.1)) - pkce-challenge: 5.0.0 - raw-body: 3.0.2 - zod: 3.25.76 - zod-to-json-schema: 3.25.0(zod@3.25.76) - transitivePeerDependencies: - - supports-color - - '@modelcontextprotocol/sdk@1.24.0(supports-color@8.1.1)(zod@3.25.76)': + '@modelcontextprotocol/sdk@1.25.3(hono@4.11.4)(supports-color@8.1.1)(zod@3.25.76)': dependencies: + '@hono/node-server': 1.19.9(hono@4.11.4) ajv: 8.17.1 ajv-formats: 3.0.1(ajv@8.17.1) content-type: 1.0.5 @@ -23360,11 +23352,13 @@ snapshots: express: 5.1.0(supports-color@8.1.1) express-rate-limit: 7.5.0(express@5.1.0(supports-color@8.1.1)) jose: 6.1.3 + json-schema-typed: 8.0.2 pkce-challenge: 5.0.0 raw-body: 3.0.2 zod: 3.25.76 zod-to-json-schema: 3.25.0(zod@3.25.76) transitivePeerDependencies: + - hono - supports-color '@monaco-editor/loader@1.4.0(monaco-editor@0.52.2)': @@ -28006,27 +28000,21 @@ snapshots: dependencies: tslib: 2.8.1 - '@supabase/mcp-server-supabase@0.6.1(supports-color@8.1.1)(zod@3.25.76)': + '@supabase/mcp-server-supabase@0.6.2(@modelcontextprotocol/sdk@1.25.3(hono@4.11.4)(supports-color@8.1.1)(zod@3.25.76))(zod@3.25.76)': dependencies: '@mjackson/multipart-parser': 0.10.1 - '@modelcontextprotocol/sdk': 1.23.1(supports-color@8.1.1)(zod@3.25.76) - '@supabase/mcp-utils': 0.3.1(supports-color@8.1.1)(zod@3.25.76) + '@modelcontextprotocol/sdk': 1.25.3(hono@4.11.4)(supports-color@8.1.1)(zod@3.25.76) + '@supabase/mcp-utils': 0.3.2(@modelcontextprotocol/sdk@1.25.3(hono@4.11.4)(supports-color@8.1.1)(zod@3.25.76))(zod@3.25.76) common-tags: 1.8.2 gqlmin: 0.3.1 graphql: 16.11.0 openapi-fetch: 0.13.8 zod: 3.25.76 - transitivePeerDependencies: - - '@cfworker/json-schema' - - supports-color - '@supabase/mcp-utils@0.3.1(supports-color@8.1.1)(zod@3.25.76)': + '@supabase/mcp-utils@0.3.2(@modelcontextprotocol/sdk@1.25.3(hono@4.11.4)(supports-color@8.1.1)(zod@3.25.76))(zod@3.25.76)': dependencies: - '@modelcontextprotocol/sdk': 1.23.1(supports-color@8.1.1)(zod@3.25.76) + '@modelcontextprotocol/sdk': 1.25.3(hono@4.11.4)(supports-color@8.1.1)(zod@3.25.76) zod: 3.25.76 - transitivePeerDependencies: - - '@cfworker/json-schema' - - supports-color '@supabase/postgres-meta@0.64.6(encoding@0.1.13)(supports-color@8.1.1)': dependencies: @@ -33745,6 +33733,8 @@ snapshots: dependencies: parse-passwd: 1.0.0 + hono@4.11.4: {} + hookable@5.5.3: {} hosted-git-info@2.8.9: {} @@ -34535,6 +34525,8 @@ snapshots: json-schema-traverse@1.0.0: {} + json-schema-typed@8.0.2: {} + json-schema@0.4.0: {} json-stable-stringify-without-jsonify@1.0.1: {} @@ -36774,7 +36766,7 @@ snapshots: number-flow@0.3.7: {} - nuqs@1.19.1(next@15.5.10(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4)): + nuqs@1.19.1(next@15.5.10(@babel/core@7.28.4(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4)): dependencies: mitt: 3.0.1 next: 15.5.10(@babel/core@7.28.4(supports-color@8.1.1))(@opentelemetry/api@1.9.0)(@playwright/test@1.56.1)(babel-plugin-macros@3.1.0)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.77.4) @@ -39414,7 +39406,7 @@ snapshots: '@babel/plugin-transform-typescript': 7.28.0(@babel/core@7.28.4(supports-color@8.1.1))(supports-color@8.1.1) '@babel/preset-typescript': 7.27.1(@babel/core@7.28.4(supports-color@8.1.1))(supports-color@8.1.1) '@dotenvx/dotenvx': 1.51.0 - '@modelcontextprotocol/sdk': 1.24.0(supports-color@8.1.1)(zod@3.25.76) + '@modelcontextprotocol/sdk': 1.25.3(hono@4.11.4)(supports-color@8.1.1)(zod@3.25.76) browserslist: 4.26.2 commander: 14.0.1 cosmiconfig: 9.0.0(typescript@5.9.2) @@ -39442,6 +39434,7 @@ snapshots: - '@cfworker/json-schema' - '@types/node' - babel-plugin-macros + - hono - supports-color - typescript