部署 MCP 服务器
使用 模型上下文协议 (MCP) 服务器在 Supabase 上构建和部署,使用 边缘函数。
本指南涵盖不需要身份验证的 MCP 服务器。MCP 在边缘函数上的身份验证支持即将推出。
先决条件#
在开始之前,请确保您已安装
- Docker 或兼容的运行时(用于本地开发)
- Deno 已安装(Supabase 边缘函数运行时)
- Supabase CLI 已安装并已通过身份验证
- Node.js 20 或更高版本(Supabase CLI 需要)
部署您的 MCP 服务器#
步骤 1:创建一个新项目#
首先创建一个新的 Supabase 项目
1mkdir my-mcp-server2cd my-mcp-server3supabase init完成此步骤后,您应该有一个项目目录,其中包含一个 supabase 文件夹,其中包含 config.toml 和一个空的 functions 目录。
步骤 2:创建 MCP 服务器函数#
为您的 MCP 服务器创建一个新的边缘函数
1supabase functions new mcp本教程使用 官方 MCP TypeScript SDK 和 WebStandardStreamableHTTPServerTransport,但您可以使用任何与 边缘运行时 兼容的 MCP 框架,例如 mcp-lite 或 mcp-handler。
用以下内容替换 supabase/functions/mcp/index.ts 的内容
supabase/functions/mcp/index.ts
1// Setup type definitions for built-in Supabase Runtime APIs2import 'jsr:@supabase/functions-js/edge-runtime.d.ts'34import { McpServer } from 'npm:@modelcontextprotocol/sdk@1.25.3/server/mcp.js'5import { WebStandardStreamableHTTPServerTransport } from 'npm:@modelcontextprotocol/sdk@1.25.3/server/webStandardStreamableHttp.js'6import { Hono } from 'npm:hono@^4.9.7'7import { z } from 'npm:zod@^4.1.13'89// Create Hono app10const app = new Hono()1112// Create your MCP server13const server = new McpServer({14 name: 'mcp',15 version: '0.1.0',16})1718// Register a simple addition tool19server.registerTool(20 'add',21 {22 title: 'Addition Tool',23 description: 'Add two numbers together',24 inputSchema: { a: z.number(), b: z.number() },25 },26 ({ a, b }) => ({27 content: [{ type: 'text', text: String(a + b) }],28 })29)3031// Handle MCP requests32app.all('*', async (c) => {33 const transport = new WebStandardStreamableHTTPServerTransport()34 await server.connect(transport)35 return transport.handleRequest(c.req.raw)36})3738Deno.serve(app.fetch)完成此步骤后,您应该在 supabase/functions/mcp/index.ts 处有一个新文件。
在边缘函数中,路径以前缀函数名称为前缀。如果您的函数名称不是 mcp,请使用基本路径配置 Hono:new Hono().basePath('/your-function-name')。
步骤 3:本地测试#
启动 Supabase 本地开发堆栈
1supabase start在另一个终端中,提供您的函数
1supabase functions serve --no-verify-jwt mcp您的 MCP 服务器现在正在运行于
1https://:54321/functions/v1/mcp--no-verify-jwt 标志禁用边缘函数层面的 JWT 验证,以便您的 MCP 服务器可以接受未经身份验证的请求。身份验证的 MCP 支持即将推出。
使用 curl 测试#
您也可以使用 curl 直接测试您的 MCP 服务器。调用 add 工具
1curl -X POST 'https://:54321/functions/v1/mcp' \2 -H 'Content-Type: application/json' \3 -H 'Accept: application/json, text/event-stream' \4 -d '{5 "jsonrpc": "2.0",6 "id": 1,7 "method": "tools/call",8 "params": {9 "name": "add",10 "arguments": {11 "a": 5,12 "b": 313 }14 }15 }'MCP Streamable HTTP 传输需要 Accept: application/json, text/event-stream 标头,以指示客户端支持 JSON 和服务器发送事件响应。
预期响应
响应使用服务器发送事件 (SSE) 格式
1event: message2data: {"result":{"content":[{"type":"text","text":"8"}]},"jsonrpc":"2.0","id":1}使用 MCP Inspector 测试#
使用官方 MCP Inspector 测试您的服务器
1npx -y @modelcontextprotocol/inspector在 inspector UI 中使用本地端点 https://:54321/functions/v1/mcp 来探索可用的工具并交互式地测试它们。
完成此步骤后,您的 MCP 服务器应该在本地运行,并且您应该能够使用 MCP Inspector 测试 add 工具。
步骤 4:部署到生产环境#
准备好部署时,链接您的项目并部署该函数
1supabase link --project-ref <your-project-ref>2supabase functions deploy --no-verify-jwt mcp您的 MCP 服务器将在
1https://<your-project-ref>.supabase.co/functions/v1/mcp更新您的 MCP 客户端配置以使用生产 URL。
完成此步骤后,您将拥有一个完全部署的 MCP 服务器,可以从任何地方访问。您可以使用生产 URL 在 MCP Inspector 中对其进行测试。
示例#
您可以在此处找到现成的 MCP 服务器实现
- 简单的 MCP 服务器 - 基本的未经身份验证的示例