Supabase自托管MCP服务器

一个为自托管Supabase设计的MCP(Model Context Protocol)服务器,支持RLS感知的PostgreSQL和PostgREST层,提供安全、高效的数据库访问和操作功能。

  • by agiletec-inc
  • TypeScript
  • 本地部署
  • 更新于
在 GitHub 查看 agiletec-inc/airis-mcp-supabase-selfhost

使用说明

Supabase自托管MCP服务器

MCP(模型上下文协议)服务器,用于具有RLS感知PostgreSQL+PostgREST层的自托管Supabase。


🌟 AIRIS生态系统的一部分

此MCP服务器旨在与 AIRIS套房 -可通过以下方式访问 airis mcp网关 用于令牌高效集成。 查看完整 AIRIS套房 在组织页面上。

MCP服务器(通过网关提供)

  • airis mcp suabase自宿主 (此仓库)-支持RLS的自托管Supabase MCP
  • Mindbase 的 -内存搜索和存储工具(mindbase_search, mindbase_store)

建议:通过AIRIS MCP网关安装

此MCP服务器来了 预配置 使用AIRIS MCP网关。无需额外设置。

# Install the Gateway (includes this server)
brew install agiletec-inc/tap/airis-mcp-gateway

# Start the gateway
airis-mcp-gateway up

# Add to Claude Code
claude mcp add --transport http airis-mcp-gateway http://api.gateway.localhost:9400/api/v1/mcp

替代方案:独立安装

如果您需要独立运行此服务器:

git clone https://github.com/agiletec-inc/airis-mcp-supabase-selfhost.git
cd airis-mcp-supabase-selfhost && pnpm install

全套套房为您带来:

  • ✅ 信任门控工作流程(防止错误的方向编码)
  • ✅ 深入研究与证据综合
  • ✅ 通过存储库索引减少94%的令牌
  • ✅ 跨所有编辑器的跨会话内存
  • ✅ 自我审查和实施后验证

✨ 特性

  • 2层后端:PostgREST(尊重RLS)+直接PostgreSQL(模式自检和诊断)
  • 令牌优化:懒惰的广告、模式摘要、最少的工具描述
  • 安全第一:默认情况下为READ_ONLY模式,DML/DDL/DCL被阻止,SQL验证
  • 功能标志:选择性工具激活(数据库、文档、postgrest、函数、存储)
  • RLS意识:PostgREST层遵守行级安全策略
  • Supabase兼容:适用于官方Supabase自托管部署

🏗️ 建筑

┌─────────────────────────────────────────┐
│  LLM (Claude, GPT, etc.)               │
└───────────────┬─────────────────────────┘
                │ MCP Protocol (JSON-RPC)
┌───────────────▼─────────────────────────┐
│  Supabase Self-hosted MCP Server       │
│  ┌─────────────────────────────────┐   │
│  │  Feature Flags & Safety Guards  │   │
│  └─────────────────────────────────┘   │
│         │                    │          │
│  ┌──────▼──────┐      ┌─────▼──────┐   │
│  │  PostgREST  │      │   Direct   │   │
│  │   Layer     │      │    PG      │   │
│  │ (RLS aware) │      │ (read-only)│   │
│  └──────┬──────┘      └─────┬──────┘   │
└─────────┼──────────────────┼───────────┘
          │                  │
          ▼                  ▼
    ┌─────────────────────────────┐
    │   Supabase Self-hosted      │
    │   (PostgreSQL + PostgREST)  │
    └─────────────────────────────┘

🚀 快速开始

先决条件

  • Node.js>=20.0.0
  • 自托管Supabase实例正在运行(本地主机:54321或远程)
  • PostgreSQL只读用户(推荐)

1.安装依赖项

pnpm install

2.配置环境

cp .env.example .env
# Edit .env with your Supabase credentials

关键配置:

# PostgreSQL (use read-only role for safety)
PG_DSN=postgres://mcp_ro:password@127.0.0.1:5432/postgres

# PostgREST endpoint
POSTGREST_URL=http://127.0.0.1:54321/rest/v1

# PostgREST JWT (anon key or service_role key)
POSTGREST_JWT=your_anon_key_here

# Safety mode (recommended: true)
READ_ONLY=true

# Feature flags
FEATURES=database,docs,postgrest

3.创建只读PostgreSQL用户(推荐)

-- Connect to your Supabase PostgreSQL as superuser
CREATE ROLE mcp_ro WITH LOGIN PASSWORD 'secure_password';
GRANT pg_read_all_data TO mcp_ro;
GRANT USAGE ON SCHEMA public TO mcp_ro;
GRANT USAGE ON SCHEMA information_schema TO mcp_ro;

4.启动服务器

# Development mode (with auto-reload)
pnpm dev

# Production mode
pnpm build
pnpm start

服务器启动于 http://localhost:3100

🛠️ 可用工具

MVP工具(当前实施)

工具前缀:所有工具使用 sbsh_ 前缀,以避免与官方Supabase MCP和PostgreSQL MCP服务器冲突。

1. sbsh_introspect_schema

获取指定架构的令牌优化架构摘要。

{
  "name": "sbsh_introspect_schema",
  "arguments": {
    "schemas": ["public"]
  }
}

输出:包含表名、列类型、索引/约束计数、RLS状态的摘要格式。

2. sbsh_execute_sql

安全地执行SELECT查询或解释计划。

{
  "name": "sbsh_execute_sql",
  "arguments": {
    "sql": "SELECT * FROM users WHERE created_at > '2024-01-01' LIMIT 10",
    "limit": 100
  }
}

安全:在READ_ONLY模式下,DML/DDL/DCL被阻止。

3. sbsh_postgrest_get

通过PostgREST发出GET请求,并尊重RLS。

{
  "name": "sbsh_postgrest_get",
  "arguments": {
    "table": "users",
    "query": {
      "select": "id,email,created_at",
      "eq": "status:active",
      "order": "created_at.desc",
      "limit": 10
    }
  }
}

安全:使用提供的JWT,尊重RLS政策。

4. sbsh_get_table_doc

获取特定表格的详细文档。

{
  "name": "sbsh_get_table_doc",
  "arguments": {
    "table": "public.users"
  }
}

输出:列、约束、RLS策略、评论。

🔐 安全特性

只读模式(默认)

  • 默认情况下启用 为了安全
  • 阻止所有DML/DDL/DCL操作
  • 仅允许SELECT和EXPLAIN查询
  • 建议用于生产

SQL验证

  • 基于正则表达式的变异操作检测
  • 块:INSERT、UPDATE、DELETE、TRUNCATE、ALTER、DROP、CREATE、GRANT、REVOKE等。
  • 允许:选择、解释

RLS尊重

  • PostgREST层自动执行行级安全
  • PostgreSQL直接层使用只读角色(无写权限)
  • 基于JWT的用户范围访问身份验证

功能标志

通过以下方式控制工具可用性 FEATURES 环境变量:

  • database:模式自省和SQL执行
  • docs:表格文件
  • postgrest:PostgREST API包装
  • functions:边缘功能(尚未实现)
  • storage:存储API(尚未实现)

📊 令牌优化

懒惰的广告

  • 仅支持广告功能
  • 最少的工具描述(按需提供详细帮助)
  • 功能标志减少了初始令牌负载

架构摘要

  • introspect_schema 返回压缩摘要
  • 详细信息请访问 docs.get_table_doc 按需
  • 列格式: name:type! (!=非空)

结果抽样

  • 可配置的行限制(最大1000)
  • 包含用于上下文的字段元数据
  • 截断警告

🔧 发展路线图

第一阶段:MVP(当前)

  • [x] 项目设置
  • [x] 核心工具:内省模式、执行sql、postgrest.get、文档
  • [x] 只读模式
  • [x] 功能标志
  • [x] 令牌优化

第二阶段:增强安全性

  • []DML操作的干运行模式
  • []审核日志记录
  • []速率限制
  • []查询成本估算

第三阶段:扩展功能

  • []边缘功能支持
  • []存储API集成
  • []实时订阅
  • []多项目支持

第四阶段:高级优化

  • []模式缓存无效
  • []结果分页
  • []流媒体响应
  • []连接池优化

🤝 整合

使用airis mcp网关

此服务器设计用于动态MCP网关模式:

// Load only when Supabase tools are needed
await gateway.loadServer('airis-mcp-supabase-selfhost', {
  url: 'http://localhost:3100/mcp',
  features: 'database,docs'
})

// Use tools
await gateway.call('airis-mcp-supabase-selfhost', 'sbsh_introspect_schema', {})

// Unload after use
await gateway.unloadServer('airis-mcp-supabase-selfhost')

使用克劳德桌面

添加到 claude_desktop_config.json:

{
  "mcpServers": {
    "airis-mcp-supabase-selfhost": {
      "command": "node",
      "args": ["/path/to/dist/server.js"],
      "env": {
        "PG_DSN": "postgres://mcp_ro:pass@localhost:5432/postgres",
        "POSTGREST_URL": "http://localhost:54321/rest/v1",
        "POSTGREST_JWT": "your_jwt_here",
        "READ_ONLY": "true",
        "FEATURES": "database,docs,postgrest"
      }
    }
  }
}

🔗 相关项目

探索AIRIS生态系统中的其他工具:


🤝 贡献

我们欢迎捐款!拜托:

  1. 分叉存储库
  2. 创建要素分支(git checkout -b feature/amazing-feature)
  3. 提交您的更改(git commit -m 'feat: add amazing feature')
  4. 推到分支(git push origin feature/amazing-feature)
  5. 打开拉取请求

📝 许可证

麻省理工学院


🙏 致谢

💖 支持

agiletec 是一个人的工作室,全职开源地构建这些工具。如果他们在你的工作流程中获得了一席之地,赞助会让他们保持独立。


内置于❤️ 由 Agiletec 团队

安捷伦股份有限公司。 | 文档 | 问题 | 讨论