MCP边缘函数示例

使用Supabase边缘函数实现Model Context Protocol (MCP)服务器的综合示例集合,展示多种MCP模式和框架。

  • by Rodriguespn
  • TypeScript
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 Rodriguespn/mcp-edge-functions-examples

使用说明

MCP边缘功能示例

使用Supabase边缘函数的模型上下文协议(MCP)服务器实现的全面集合。这些示例演示了在Supabase上构建MCP服务器的各种MCP模式和框架。

概述

此存储库包含作为Supabase边缘功能部署的MCP服务器的实际示例。每个功能都展示了不同的MCP框架和实现模式,从基本的Hono服务器到具有身份验证的全功能MCP实现。

例子

1.Hello World(hello-world)

  • 目的:基础Supabase边缘函数模板
  • 特性:使用JSON的简单HTTP响应
  • 框架:香草Deno
  • 用例:任何边缘函数的起点

你好,Hono(hello-hono)

  • 目的:演示Hono框架集成
  • 特性:带路由的轻量级web框架
  • 框架: 荣誉
  • 用例:在边缘函数上构建REST API

你好,Hono MCP(hello-hono-mcp)

  • 目的:使用Hono和官方MCP SDK的MCP服务器
  • 特性:使用Streamable HTTP传输实现添加工具
  • 框架: 荣誉 + @模型上下文协议/sdk
  • 用例:支持HTTP流媒体的完整MCP服务器

4.你好MCP处理程序(hello-mcp-handler)

  • 目的:使用MCP处理程序简化MCP实现
  • 特性:带模式验证的骰子滚动工具
  • 框架: mcp处理器
  • 用例:使用最少的样板快速设置MCP服务器

5.你好,MCP Lite(hello-mcp-lite)

  • 目的:使用MCP-lite的轻量级MCP服务器
  • 特性:多种工具(计算器、问候语生成器)
  • 框架: mcp-lite
  • 用例:具有Zod验证的简单MCP服务器

6.服务器(server)

  • 目的:具有身份验证和数据库的全功能MCP服务器
  • 特性:
    • 通过Supabase进行JWT身份验证
    • 从数据库动态加载工具
    • 使用OpenAI的人工智能模拟响应
    • 用户特定的服务器配置
  • 框架:mcp处理程序+Supabase+OpenAI
  • 用例:生产就绪的经过身份验证的MCP服务器

7.验证JWT(verify-jwt)

  • 目的:使用Supabase的身份验证示例
  • 特性:JWT验证、用户数据检索、数据库查询
  • 框架:Supabase客户端
  • 用例:通过身份验证保护边缘功能

8.你好,X402 MCP(hello-x402-mcp)

  • 目的:MCP服务器,用于支付工具的区块链支付协议
  • 特性:
    • x402支付协议集成
    • 自动402付款要求处理
    • EIP-3009支付授权
    • 美元兑加元对Base Sepolia的小额支付
    • 钱包管理和余额检查
  • 框架: x402 +Hono+@modelcontextprotocol/sdk
  • 用例:通过区块链支付、支付API访问使MCP工具货币化

MCP框架比较

框架 复杂性 功能 最适合
Vanilla Deno 低 基本HTTP 简单功能
Hono 低 路由、中间件 REST API
mcp-lite 中等 工具、资源、提示 轻量级mcp服务器
mcp处理程序 中等 简化mcp设置 快速原型制作
@modelcontextprotocol/sdk 高 完整的MCP规范,流式传输 生产MCP服务器
x402+MCP 高 付费工具,区块链支付 货币化MCP服务

入门指南

先决条件

  • Supabase命令行界面 安装
  • Supabase项目(本地或远程)
  • Deno运行时(附带Supabase CLI)
  • Node.js 18+(用于包管理)

地方发展

  1. 克隆此存储库:

    cd mcp-edge-functions-examples
    
  2. 在本地启动Supabase:

    supabase start
    
  3. 在本地执行特定功能:

    # Basic function
    supabase functions serve hello-world
    
    # MCP server with Hono
    supabase functions serve hello-hono-mcp
    
    # Full authenticated server
    supabase functions serve server
    
  4. 测试功能:

    # Basic hello-world
    curl -i --location --request POST 'http://localhost:54321/functions/v1/hello-world' \
      --header 'Authorization: Bearer YOUR_ANON_KEY' \
      --header 'Content-Type: application/json'
    
    # Hono-based MCP server (note the /mcp endpoint)
    curl -X POST 'http://localhost:54321/functions/v1/hello-hono-mcp/mcp' \
      --header 'Content-Type: application/json' \
      --data '{"method":"tools/list"}'
    

部署

  1. 链接您的Supabase项目:

    supabase link --project-ref your-project-ref
    
  2. 部署功能:

    supabase functions deploy hello-world
    
  3. 部署所有功能:

    supabase functions deploy
    

测试示例

1.你好,Hono MCP-添加工具

# List available tools
curl -X POST 'http://localhost:54321/functions/v1/hello-hono-mcp/mcp' \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

# Call the add tool
curl -X POST 'http://localhost:54321/functions/v1/hello-hono-mcp/mcp' \
  -H 'Content-Type: application/json' \
  -d '{
    "jsonrpc":"2.0",
    "id":2,
    "method":"tools/call",
    "params":{
      "name":"add",
      "arguments":{"a":5,"b":3}
    }
  }'

2.你好MCP处理器-骰子卷

# Roll a 6-sided die
curl -X POST 'http://localhost:54321/functions/v1/hello-mcp-handler/mcp' \
  -H 'Content-Type: application/json' \
  -d '{
    "jsonrpc":"2.0",
    "id":1,
    "method":"tools/call",
    "params":{
      "name":"roll_dice",
      "arguments":{"sides":6}
    }
  }'

3.你好MCP Lite-多种工具

# Calculator tool
curl -X POST 'http://localhost:54321/functions/v1/hello-mcp-lite/mcp' \
  -H 'Content-Type: application/json' \
  -d '{
    "jsonrpc":"2.0",
    "id":1,
    "method":"tools/call",
    "params":{
      "name":"add",
      "arguments":{"a":10,"b":20}
    }
  }'

# Greeting tool
curl -X POST 'http://localhost:54321/functions/v1/hello-mcp-lite/mcp' \
  -H 'Content-Type: application/json' \
  -d '{
    "jsonrpc":"2.0",
    "id":2,
    "method":"tools/call",
    "params":{
      "name":"greet",
      "arguments":{"name":"Alice","language":"spanish"}
    }
  }'

4.服务器-经过身份验证的动态工具

此示例需要身份验证和数据库设置:

# First, get your JWT token from Supabase
TOKEN="your-jwt-token-here"

# Call an authenticated MCP server
curl -X POST 'http://localhost:54321/functions/v1/server/YOUR_SERVER_ID/mcp' \
  -H "Authorization: Bearer $TOKEN" \
  -H 'Content-Type: application/json' \
  -d '{"jsonrpc":"2.0","id":1,"method":"tools/list"}'

功能结构

每个边函数都遵循以下结构:

supabase/functions/<function-name>/
├── index.ts          # Main function code
├── deno.json         # Deno configuration & dependencies
├── deno.lock         # Lock file for dependencies
└── .npmrc            # (Optional) npm configuration

关键概念

MCP协议基础

所有MCP服务器都使用基于HTTP的JSON-RPC 2.0:

  • 工具:执行操作(计算、数据获取等)的函数
  • 资源:客户端可以读取的数据源
  • 提示词:可以用参数填充的模板消息
  • 采样:LLM文本生成功能

HTTP端点

大多数MCP函数都公开了 /mcp 端点:

https://your-project.supabase.co/functions/v1/<function-name>/mcp

请求格式

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "tools/call",
  "params": {
    "name": "tool_name",
    "arguments": {
      "param1": "value1"
    }
  }
}

响应格式

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {
    "content": [
      {
        "type": "text",
        "text": "Result content"
      }
    ]
  }
}

环境变量

某些函数需要环境变量:

# For authenticated functions (server, verify-jwt)
SUPABASE_URL=your-supabase-url
SUPABASE_ANON_KEY=your-anon-key

# For AI-powered functions (server)
OPENAI_API_KEY=your-openai-key

在Supabase项目设置中设置这些,或 .env 本地开发文件。

依赖项

常见依赖关系

  • 荣誉:快速、轻量级的web框架
  • 黄道:TypeScript第一模式验证
  • @suabase/supabase-js:Supabase客户端库

MCP框架依赖关系

  • @模型上下文协议/sdk:官方MCP SDK(你好,hono-MCP)
  • mcp处理器:简化的MCP包装器(hello MCP处理程序、服务器)
  • mcp-lite:轻量级MCP实现(你好MCP-lite)
  • 电子邮件@hono/mcp:MCP的Hono集成(你好,Hono-MCP)

安装

在本地提供功能时,会自动安装依赖关系。检查每个功能 deno.json 对于特定的依赖关系。

高级示例

服务器功能-生产模式

这 server 函数演示了生产就绪模式:

  1. 认证:使用Supabase Auth进行JWT验证
  2. 数据库集成:从PostgreSQL动态加载工具
  3. 人工智能集成:OpenAI用于智能响应
  4. 多租户技术:用户特定的服务器配置

数据库模式 (服务器功能所需):

-- Servers table
CREATE TABLE servers (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  user_id UUID REFERENCES auth.users(id),
  name TEXT NOT NULL,
  created_at TIMESTAMP DEFAULT NOW()
);

-- Tools table
CREATE TABLE tools (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  server_id UUID REFERENCES servers(id),
  name TEXT NOT NULL,
  description TEXT,
  prompt TEXT,
  created_at TIMESTAMP DEFAULT NOW()
);

-- Parameters table
CREATE TABLE parameters (
  id UUID PRIMARY KEY DEFAULT gen_random_uuid(),
  tool_id UUID REFERENCES tools(id),
  name TEXT NOT NULL,
  type TEXT NOT NULL,
  description TEXT,
  created_at TIMESTAMP DEFAULT NOW()
);

故障排除

常见问题

  1. “找不到模块”错误

    • 检查 deno.json 正确的导入路径
    • 确保使用JSR或npm URL指定依赖关系
  2. “未经授权”的错误

    • 验证是否设置了Supabase URL和anon键
    • 检查授权标头格式: Bearer <token>
  3. CORS错误

    • 大多数函数自动处理CORS
    • 检查您的客户端是否发送了正确的标头
  4. 功能超时

    • 边缘功能有2分钟的超时时间
    • 优化长时间运行的操作
    • 考虑将后台作业用于繁重的任务

调试模式

在函数中启用详细日志记录:

console.log('[DEBUG]', 'Request:', {
  method: req.method,
  url: req.url,
  headers: Object.fromEntries(req.headers),
});

查看日志:

supabase functions logs <function-name> --follow

最佳实践

  1. 类型安全:对所有输入/输出使用TypeScript和Zod
  2. 错误处理:返回正确的HTTP状态代码和错误消息
  3. 认证:使用JWT验证保护敏感端点
  4. 验证:在处理之前验证所有用户输入
  5. 文档:记录所有工具、参数和预期响应
  6. 测试:在部署到生产环境之前进行本地测试
  7. 监控:设置日志记录和错误跟踪
  8. 安全:切勿在代码中暴露敏感凭据

资源

贡献

欢迎投稿!请随时通过以下方式提交拉取请求:

  • 新的MCP示例实现
  • 对现有示例的改进
  • 错误修复
  • 文档增强
  • 其他框架集成

许可证

MIT许可证-您可以在自己的项目中自由使用这些示例。

致谢

这些示例演示了在Supabase Edge Functions上构建MCP服务器的各种方法,展示了不同用例的不同框架和模式。


备注:这些示例从简单的演示到生产就绪模式。为您的用例选择适当的复杂性级别。这 server 函数演示企业级模式,而 hello-world 和 hello-hono 对于初学者来说,这是一个很好的起点。