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+(用于包管理)
地方发展
- 克隆此存储库:
cd mcp-edge-functions-examples- 在本地启动Supabase:
supabase start- 在本地执行特定功能:
# Basic function
supabase functions serve hello-world
# MCP server with Hono
supabase functions serve hello-hono-mcp
# Full authenticated server
supabase functions serve server- 测试功能:
# 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"}'部署
- 链接您的Supabase项目:
supabase link --project-ref your-project-ref- 部署功能:
supabase functions deploy hello-world- 部署所有功能:
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//
├── 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//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 函数演示了生产就绪模式:
- 认证:使用Supabase Auth进行JWT验证
- 数据库集成:从PostgreSQL动态加载工具
- 人工智能集成:OpenAI用于智能响应
- 多租户技术:用户特定的服务器配置
数据库模式 (服务器功能所需):
-- 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()
);故障排除
常见问题
- “找不到模块”错误
- 检查 deno.json 正确的导入路径 - 确保使用JSR或npm URL指定依赖关系
- “未经授权”的错误
- 验证是否设置了Supabase URL和anon键 - 检查授权标头格式: Bearer
- CORS错误
- 大多数函数自动处理CORS - 检查您的客户端是否发送了正确的标头
- 功能超时
- 边缘功能有2分钟的超时时间 - 优化长时间运行的操作 - 考虑将后台作业用于繁重的任务
调试模式
在函数中启用详细日志记录:
console.log('[DEBUG]', 'Request:', {
method: req.method,
url: req.url,
headers: Object.fromEntries(req.headers),
});查看日志:
supabase functions logs --follow最佳实践
- 类型安全:对所有输入/输出使用TypeScript和Zod
- 错误处理:返回正确的HTTP状态代码和错误消息
- 认证:使用JWT验证保护敏感端点
- 验证:在处理之前验证所有用户输入
- 文档:记录所有工具、参数和预期响应
- 测试:在部署到生产环境之前进行本地测试
- 监控:设置日志记录和错误跟踪
- 安全:切勿在代码中暴露敏感凭据
资源
贡献
欢迎投稿!请随时通过以下方式提交拉取请求:
- 新的MCP示例实现
- 对现有示例的改进
- 错误修复
- 文档增强
- 其他框架集成
许可证
MIT许可证-您可以在自己的项目中自由使用这些示例。
致谢
这些示例演示了在Supabase Edge Functions上构建MCP服务器的各种方法,展示了不同用例的不同框架和模式。
______________________________________________________________________
备注:这些示例从简单的演示到生产就绪模式。为您的用例选择适当的复杂性级别。这 server 函数演示企业级模式,而 hello-world 和 hello-hono 对于初学者来说,这是一个很好的起点。
