Supabase MCP SQL 工具
这个MCP服务器提供了一个 run_crud_sql 一个工具,允许您在Supabase数据库上执行SQL查询,并以格式化的HTML表格形式显示结果。
特点/功能
- 🔒(锁形符号,通常表示安全、保密或锁定状态) RLS 支持查询通过Supabase的REST API遵守行级安全策略
- 📊 表格/数据图表 表格格式设置结果以美观、样式化的HTML表格形式展示
- ✅ CRUD 操作支持SELECT、INSERT、UPDATE和DELETE查询
- 🎨(颜料/美术符号) 视觉设计渐变标题、悬停效果和响应式布局
- 🚀 表情符号“🚀”通常表示火箭、快速移动或速度,可以翻译为“🚀(火箭/快速移动)”。不过,具体翻译可能因语境而异,有时也可能直接保留为表情符号。 兼容Edge Runtime构建时未使用外部MCP库,而是采用了原生JSON-RPC
设置
1. 应用数据库迁移
首先,创建 exec_sql 在您的 Supabase 数据库中的函数:
# If using Supabase CLI locally
supabase db reset
# Or apply the migration manually
supabase migration up或者,在您的 Supabase SQL 编辑器中运行以下 SQL 语句:
CREATE OR REPLACE FUNCTION exec_sql(query text)
RETURNS json
LANGUAGE plpgsql
SECURITY DEFINER
AS $$
DECLARE
result json;
BEGIN
EXECUTE format('SELECT json_agg(t) FROM (%s) t', query) INTO result;
RETURN COALESCE(result, '[]'::json);
EXCEPTION
WHEN OTHERS THEN
RETURN json_build_object(
'error', SQLERRM,
'detail', SQLSTATE
);
END;
$$;
GRANT EXECUTE ON FUNCTION exec_sql(text) TO authenticated;
GRANT EXECUTE ON FUNCTION exec_sql(text) TO anon;2. 设置环境变量
确保您的环境中已配置Supabase凭据:
export SUPABASE_URL="https://your-project.supabase.co"
export SUPABASE_ANON_KEY="your-anon-key"3. 部署该函数
# Deploy to Supabase
supabase functions deploy hello-world
# Or run locally
supabase functions serve --no-verify-jwt用法
连接到MCP服务器
MCP 端点的访问地址为:
http://127.0.0.1:54321/functions/v1/hello-world/mcp对于生产:
https://your-project.supabase.co/functions/v1/hello-world/mcp使用该工具
这个(或“该”) run_crud_sql 该工具接受一个参数:
query(字符串):要执行的SQL查询
示例
SELECT 查询:
{
"name": "run_crud_sql",
"arguments": {
"query": "SELECT * FROM users LIMIT 10"
}
}INSERT 查询:
{
"name": "run_crud_sql",
"arguments": {
"query": "INSERT INTO posts (title, content) VALUES ('My Post', 'Hello World') RETURNING *"
}
}UPDATE 查询:
{
"name": "run_crud_sql",
"arguments": {
"query": "UPDATE users SET last_login = NOW() WHERE id = '123' RETURNING *"
}
}DELETE 查询:
{
"name": "run_crud_sql",
"arguments": {
"query": "DELETE FROM temp_data WHERE created_at < NOW() - INTERVAL '7 days' RETURNING *"
}
}响应格式
该工具返回:
- 内容一个包含格式化HTML表格的MCP-UI资源
- 结构化内容带有JSON的
rowCount并且data字段(或领域)
示例HTML表格输出:
- 渐变紫色标题栏
- 交替行颜色
- 悬停效果
- 响应式设计
- 行数显示
安全考虑因素
⚠️ 重要的该 exec_sql 函数是用(某种方式)创建的 SECURITY DEFINER这意味着它以函数所有者的权限运行。请考虑以下安全最佳实践:
- 行级安全性始终在您的表上启用 RLS(行级安全性)
- 输入验证谨慎执行查询
- 有限权限仅授予函数必要的权限
- 审计日志记录考虑为执行的查询添加日志记录
使用MCP Inspector进行测试
# Start the function locally
supabase functions serve --no-verify-jwt
# In another terminal, run the MCP inspector
npx @modelcontextprotocol/inspector
# Enter the URL: http://127.0.0.1:54321/functions/v1/hello-world/mcp故障排除
“exec_sql 函数不存在”
- 确保你已经应用了迁移
- 检查该函数是否存在:
SELECT * FROM pg_proc WHERE proname = 'exec_sql'
“未找到 SUPABASE_URL”
- 确保环境变量设置正确
- 对于本地开发,请使用
http://127.0.0.1:54321
RLS阻断查询
- 检查您的RLS政策
- 使用
SUPABASE_SERVICE_ROLE_KEY用于管理员访问(不建议在生产环境中使用) - 确保已验证用户拥有适当的权限
