mcpField
S
Self-Hosted Supabase MCP Server

Self-Hosted Supabase MCP Server

本地服务
github.com/HenkDz云与基础设施13836 周前更新

关于 Self-Hosted Supabase MCP Server

Self-Hosted Supabase MCP Server 是面向可自托管 Supabase 实例的 MCP 服务,可在开发环境中检查数据库结构、管理迁移与认证用户。项目从零实现,仅聚焦单项目场景,不涉及云端多项目管理。

主要功能

  1. 01数据库结构与扩展查询
  2. 02迁移记录的列出与应用
  3. 03认证用户的增删改查
  4. 04Storage 存储桶与对象管理
  5. 05基于角色的工具权限控制
  6. 06HTTP 与 stdio 两种传输方式

适用场景

  1. 01在 IDE 中查看自托管 Supabase 的表、索引与外键
  2. 02检查数据库连接、统计信息与 RLS 策略
  3. 03生成 TypeScript 类型定义

MCP 相关

该项目是 MCP 服务,向 MCP 客户端暴露数据库、认证、存储等相关工具。HTTP 模式下通过 JWT 中的 role 声明决定可用工具。

配置

本地服务的配置在各客户端中通用,复制后粘贴到客户端的 MCP 配置文件即可。

mcp.json · 通用配置
{
"mcpServers": {
"selfhosted-supabase": {
"command": "npx",
"args": [
"-y",
"@smithery/cli"
]
}
}
}
启动命令npx -y @smithery/cli

本地服务需要在你的电脑上安装运行环境(如 Node.js 18+)。各客户端的配置文件位置不同,请参考客户端文档。

安装包
npm@smithery/cli

工具

还没有获取到工具列表

本地服务需要在你的电脑上运行后才能读取工具,维护者暂未提供工具列表。

详细介绍

自托管 Supabase MCP 服务

License: MIT smithery badge

概述

本项目提供了一个专为与自托管 Supabase 实例交互而设计的 Model Context Protocol (MCP) 服务。它在 MCP 客户端(如 IDE 扩展)与本地或私有托管的 Supabase 项目之间搭建桥梁,让你可以直接在开发环境中进行数据库探查、管理和交互。

此服务从头构建,吸取了改造官方 Supabase 云端 MCP 服务的经验,提供精简、专注且针对自托管场景的实现。

目的

此服务的主要目标是让使用自托管 Supabase 安装的开发者能够借助基于 MCP 的工具完成以下任务:

  • 查询数据库架构和数据。
  • 管理数据库迁移。
  • 检查数据库统计信息和连接。
  • 管理身份验证用户。
  • 与 Supabase Storage 交互。
  • 生成类型定义。

它避开了官方云端服务在多项目管理和云专属 API 方面的复杂性,为单项目自托管环境提供更精简的体验。

功能(已实现的工具)

工具按权限级别分类:

  • 常规工具可供任何经过身份验证的 Supabase JWT(authenticated 或 service_role 角色)使用。
  • 特权工具需要 service_role JWT(HTTP 模式),或直接访问数据库/服务密钥(stdio 模式)。
架构与迁移
工具描述权限
list_tables列出数据库架构中的表常规
list_extensions列出已安装的 PostgreSQL 扩展常规
list_available_extensions列出所有可用(可安装)的扩展常规
list_migrations列出 supabase_migrations.schema_migrations 中已应用的迁移常规
apply_migration应用 SQL 迁移,并将其记录到 supabase_migrations.schema_migrations 中特权
list_table_columns列出指定表的列常规
list_indexes列出指定表的索引常规
list_constraints列出指定表的约束常规
list_foreign_keys列出指定表的外键常规
list_triggers列出指定表的触发器常规
list_database_functions列出用户定义的数据库函数常规
get_function_definition获取函数的源定义常规
get_trigger_definition获取触发器的源定义常规
数据库操作与统计
工具描述权限
execute_sql执行任意 SQL 查询特权
explain_query对查询运行 EXPLAIN ANALYZE特权
get_database_connections显示活动连接(pg_stat_activity)常规
get_database_stats获取数据库统计信息(pg_stat_*)常规
get_index_stats显示索引使用统计信息常规
get_vector_index_stats显示 pgvector 索引统计信息常规
安全与 RLS
工具描述权限
list_rls_policies列出表的行级安全策略常规
get_rls_status显示表是否启用 RLS常规
get_advisors获取安全和性能建议通知常规
项目配置
工具描述权限
get_project_url返回配置的 Supabase URL普通
verify_jwt_secret检查是否已配置 JWT 密钥普通
开发与扩展工具
工具描述权限
generate_typescript_types根据数据库架构生成 TypeScript 类型普通
rebuild_hooks重启 pg_net 工作进程(如果已使用)特权
get_logs获取最近的日志条目(分析堆栈或 CSV 备用数据)普通
Auth 用户管理
工具描述权限
list_auth_users列出 auth.users 中的用户普通
get_auth_user获取特定用户的详细信息普通
create_auth_user在 auth.users 中创建新用户(密码通过 pgcrypto 进行 bcrypt 哈希处理)特权
update_auth_user更新用户详细信息(更改密码时会进行 bcrypt 哈希处理)特权
delete_auth_user删除 auth.users 中的用户特权
存储
工具描述权限
list_storage_buckets列出所有存储桶普通
list_storage_objects列出指定存储桶中的对象普通
get_storage_config获取存储桶配置普通
update_storage_config更新存储桶设置特权
实时功能检查
工具描述权限
list_realtime_publications列出 PostgreSQL 发布(例如 supabase_realtime)普通
扩展专用工具
工具描述权限
list_cron_jobs列出计划任务(需要 pg_cron 扩展)普通
get_cron_job_history显示 cron 任务的近期执行历史普通
list_vector_indexes列出 pgvector 索引(需要 pgvector 扩展)普通
Edge Functions
工具描述权限
list_edge_functions列出已部署的 Edge Functions普通
get_edge_function_details获取 Edge Function 的详细信息和元数据普通
list_edge_function_logs获取 Edge Function 的近期日志普通

关于 supabase_migrations.schema_migrations

list_migrations 和 apply_migration 工具依赖 supabase_migrations.schema_migrations 表。此表由 Supabase CLI 创建和管理,并非 MCP 服务本身的一部分。

表的创建方式:

使用 Supabase CLI 初始化或运行迁移时,会自动创建此表:

supabase db push        # pushes local migrations to a remote database
supabase migration up   # applies pending local migration files

如果你从未对数据库运行过 Supabase CLI,此表将不存在,且 list_migrations 会返回错误。你可以使用以下命令手动创建:

CREATE SCHEMA IF NOT EXISTS supabase_migrations;
CREATE TABLE IF NOT EXISTS supabase_migrations.schema_migrations (
    version text NOT NULL PRIMARY KEY,
    name    text NOT NULL DEFAULT '',
    inserted_at timestamptz NOT NULL DEFAULT now()
);

与官方 Supabase 的架构差异:

Supabase 云平台会追踪其他列(例如 statements、dirty)。此 MCP 服务使用最精简的架构(version + name + inserted_at),与 Supabase CLI 的本地开发工作流兼容。如果现有表包含额外的列,则会忽略这些列。

设置与安装

通过 Smithery 安装

要通过 Smithery 自动为 Claude Desktop 安装 Self-Hosted Supabase MCP Server:

npx -y @smithery/cli install @HenkDz/selfhosted-supabase-mcp --client claude
前置条件
  • Bun v1.1 或更高版本(替代 Node.js/npm,用于运行时和构建)
  • 可访问自托管的 Supabase 实例(URL、密钥,以及可选的直接 PostgreSQL 连接字符串)。
步骤
  1. 克隆代码仓库:
    git clone <repository-url>
    cd selfhosted-supabase-mcp
    
  2. 安装依赖:
    bun install
    
  3. 构建项目:
    bun run build
    
    此操作会将 TypeScript 源代码编译为 JavaScript,并放入 dist 目录。

配置

服务需要配置 Supabase 实例的详细信息。可以通过命令行参数或环境变量提供这些信息。命令行参数优先。

必填:

  • --url <url> 或 SUPABASE_URL=<url>:Supabase 项目的主 HTTP URL(例如:http://localhost:8000)。
  • --anon-key <key> 或 SUPABASE_ANON_KEY=<key>:Supabase 项目的匿名密钥。

可选(但建议使用/某些工具必填):

  • --service-key <key> 或 SUPABASE_SERVICE_ROLE_KEY=<key>:Supabase 项目的服务角色密钥。特权工具以及启动时自动创建 execute_sql 辅助函数都需要此密钥。
  • --db-url <url> 或 DATABASE_URL=<url>:Supabase 数据库的直接 PostgreSQL 连接字符串(例如:postgresql://postgres:password@localhost:5432/postgres)。需要直接访问数据库的工具(apply_migration、Auth 工具、Storage 工具、pg_catalog 查询)必须提供此项。
  • --jwt-secret <secret> 或 SUPABASE_AUTH_JWT_SECRET=<secret>:Supabase 项目的 JWT 密钥。使用 --transport http 时必须提供,verify_jwt_secret 工具也需要此密钥。
  • --tools-config <path>:指定要启用哪些工具(白名单)的 JSON 文件路径。如果省略,则启用所有工具。格式:{"enabledTools": ["tool_name_1", "tool_name_2"]}。

HTTP 传输选项(使用 --transport http 时):

  • --port <number>:HTTP 服务端口(默认值:3000)。
  • --host <string>:HTTP 服务主机(默认值:127.0.0.1)。
  • --cors-origins <origins>:允许的 CORS 来源列表,以逗号分隔。默认仅允许 localhost。
  • --rate-limit-window <ms>:速率限制窗口时长,单位为毫秒(默认值:60000)。
  • --rate-limit-max <count>:每个速率限制窗口内的最大请求数(默认值:100)。
  • --request-timeout <ms>:请求超时时长,单位为毫秒(默认值:30000)。
重要说明:
  • **execute_sql 辅助函数:**许多工具依赖 Supabase 数据库中的 public.execute_sql 函数,通过 RPC 执行 SQL。服务会在启动时尝试检查此函数是否存在。如果函数不存在,且提供了 service-key 和 db-url,服务会尝试自动创建该函数。如果创建失败或未提供密钥,仅依赖 RPC 的工具可能无法正常工作。
  • **直接访问数据库:**直接与特权架构(auth、storage)或系统目录(pg_catalog)交互的工具通常需要配置 DATABASE_URL。
  • Coolify/反向代理部署:
    • DATABASE_URL 必须使用 MCP 服务进程所在位置可访问的内部主机名,而不是面向公网的域名。
    • 启动时出现 ECONNRESET 错误,表示服务所在的网络环境无法访问 DATABASE_URL。
    • 服务仍会成功启动,且所有不需要直接连接数据库的工具都会继续正常工作。

安全

HTTP 传输(推荐用于远程访问)

使用 --transport http 运行时,服务会强制执行以下规则:

  • 所有 /mcp 端点均使用你的 SUPABASE_AUTH_JWT_SECRET 进行 JWT 身份验证。
  • 基于权限的访问控制(RBAC) — JWT 中的 role 声明决定哪些工具可用:
    • service_role:完全访问权限(所有工具,包括特权工具)。
    • authenticated:仅可使用常规工具。
    • anon:无法使用任何工具。
  • 速率限制 — 可配置每个 IP 地址的请求速率限制。
  • CORS — 可配置允许的来源列表(默认仅允许 localhost)。
  • 安全标头 — X-Content-Type-Options、X-Frame-Options、Strict-Transport-Security 等。
  • 请求超时 — 可配置超时时间,防止资源耗尽。
Stdio 传输(本地开发)

Stdio 模式没有身份验证 — 所有工具(包括特权工具)均可使用。此模式仅供可信的本地客户端使用(例如,在本机运行的 IDE 扩展)。使用此模式时,启动过程中会打印一条警告。

身份验证用户工具的密码处理

create_auth_user 和 update_auth_user 接受 MCP 客户端传入的明文密码,然后立即使用 bcrypt(通过 PostgreSQL 的 pgcrypto 扩展:crypt($password, gen_salt('bf')))对密码进行哈希处理,再将其存储到 auth.users 中。明文密码绝不会被存储。密码作为查询参数传递(不会通过字符串插值写入 SQL),以防止 SQL 注入。

注意: 密码会以明文形式通过 MCP 传输在 MCP 客户端和服务之间传输。这是 MCP 协议接口固有的特性,在这一层无法避免。为保护网络安全,请使用启用了 TLS 终止的 HTTP 传输(例如,部署在 Kong/nginx 后面)。

SQL 执行安全

MCP 服务中的所有数据库操作都使用参数化查询($1、$2,……)以防止 SQL 注入。execute_sql 工具是一个有意设置的例外 — 它按设计执行任意 SQL(这正是该工具的用途)。此工具仅限 service_role 权限级别使用,以限制暴露风险。

用法

Stdio 模式(本地 MCP 客户端)

使用 Bun 运行服务,并提供必要的配置:

# Using CLI arguments (stdio mode — default)
bun run dist/index.js --url http://localhost:8000 --anon-key <your-anon-key> \
  --db-url postgresql://postgres:password@localhost:5432/postgres \
  --service-key <your-service-key>

# Example with tool whitelisting via config file
bun run dist/index.js --url http://localhost:8000 --anon-key <your-anon-key> \
  --tools-config ./mcp-tools.json

# Or configure using environment variables and run:
# export SUPABASE_URL=http://localhost:8000
# export SUPABASE_ANON_KEY=<your-anon-key>
# export DATABASE_URL=postgresql://postgres:password@localhost:5432/postgres
# export SUPABASE_SERVICE_ROLE_KEY=<your-service-key>
bun run dist/index.js
HTTP 模式(Docker / 远程访问)
bun run dist/index.js \
  --transport http \
  --port 3100 \
  --host 0.0.0.0 \
  --url http://kong:8000 \
  --anon-key <your-anon-key> \
  --service-key <your-service-key> \
  --jwt-secret <your-jwt-secret> \
  --db-url postgresql://postgres:password@db:5432/postgres

HTTP 模式需要 --jwt-secret。所有 /mcp 请求都必须在 Authorization: Bearer <token> 标头中包含有效的 Supabase JWT。

服务通过 stdio(默认)或 HTTP(Streamable HTTP Transport)进行通信,设计为由 MCP 客户端应用程序调用(例如 Cursor 之类的 IDE 扩展)。客户端将连接到服务的 stdio 流或 HTTP 端点,以列出并调用可用工具。

客户端配置示例

以下示例展示了如何配置常用 MCP 客户端,以使用此可自托管服务。

重要提示:

  • 请将 <your-supabase-url>、<your-anon-key>、<your-db-url>、<path-to-dist/index.js> 等占位符替换为实际值。
  • 请确保已编译的服务文件(dist/index.js)路径适用于你的系统。
  • 请谨慎将敏感密钥直接存储在配置文件中,尤其是配置文件会提交到版本控制的情况下。如果客户端支持,请考虑使用环境变量或其他更安全的方式。
Cursor
  1. 在项目根目录中创建或打开文件 .cursor/mcp.json。

  2. 添加以下配置:

    {
      "mcpServers": {
        "selfhosted-supabase": { 
          "command": "bun",
          "args": [
            "run",
            "<path-to-dist/index.js>", // 例如:"/home/user/selfhosted-supabase-mcp/dist/index.js"
            "--url",
            "<your-supabase-url>", // 例如:"http://localhost:8000"
            "--anon-key",
            "<your-anon-key>",
            // 可选——根据所用工具的需要添加以下参数
            "--service-key",
            "<your-service-key>",
            "--db-url",
            "<your-db-url>", // 例如:"postgresql://postgres:password@host:port/postgres"
            "--jwt-secret",
            "<your-jwt-secret>",
            // 可选——将特定工具加入白名单
            "--tools-config",
            "<path-to-your-mcp-tools.json>" // 例如:"./mcp-tools.json"
          ]
        }
      }
    }
    
Visual Studio Code(Copilot)

VS Code Copilot 允许使用通过提示输入填充的环境变量,这种方式更安全地处理密钥。

  1. 在项目根目录中创建或打开文件 .vscode/mcp.json。

  2. 添加以下配置:

    {
      "inputs": [
        { "type": "promptString", "id": "sh-supabase-url", "description": "自托管 Supabase URL", "default": "http://localhost:8000" },
        { "type": "promptString", "id": "sh-supabase-anon-key", "description": "自托管 Supabase 匿名密钥", "password": true },
        { "type": "promptString", "id": "sh-supabase-service-key", "description": "自托管 Supabase 服务密钥(可选)", "password": true, "required": false },
        { "type": "promptString", "id": "sh-supabase-db-url", "description": "自托管 Supabase DB URL(可选)", "password": true, "required": false },
        { "type": "promptString", "id": "sh-supabase-jwt-secret", "description": "自托管 Supabase JWT 密钥(可选)", "password": true, "required": false },
        { "type": "promptString", "id": "sh-supabase-server-path", "description": "self-hosted-supabase-mcp/dist/index.js 的路径" },
        { "type": "promptString", "id": "sh-supabase-tools-config", "description": "工具配置 JSON 文件的路径(可选,例如:./mcp-tools.json)", "required": false }
      ],
      "servers": {
        "selfhosted-supabase": {
          "command": "bun",
          "args": [
            "run",
            "${input:sh-supabase-server-path}",
            "--tools-config", "${input:sh-supabase-tools-config}"
           ],
          "env": {
            "SUPABASE_URL": "${input:sh-supabase-url}",
            "SUPABASE_ANON_KEY": "${input:sh-supabase-anon-key}",
            "SUPABASE_SERVICE_ROLE_KEY": "${input:sh-supabase-service-key}",
            "DATABASE_URL": "${input:sh-supabase-db-url}",
            "SUPABASE_AUTH_JWT_SECRET": "${input:sh-supabase-jwt-secret}"
          }
        }
      }
    }
    
  3. 在 Agent 模式(@workspace)下使用 Copilot Chat 时,它应能检测到该服务。首次调用服务时,系统会提示你输入相关信息(URL、密钥、路径)。

其他客户端(Windsurf、Cline、Claude)

参考 Cursor 配置或 Supabase 官方文档中的配置结构,并将 command 和 args 替换为 bun run 命令及此服务所需的参数,类似于 Cursor 示例:

{
  "mcpServers": {
    "selfhosted-supabase": { 
      "command": "bun",
      "args": [
        "run",
        "<path-to-dist/index.js>", 
        "--url", "<your-supabase-url>", 
        "--anon-key", "<your-anon-key>", 
        "--service-key", "<your-service-key>", 
        "--db-url", "<your-db-url>", 
        "--jwt-secret", "<your-jwt-secret>",
        "--tools-config", "<path-to-your-mcp-tools.json>"
      ]
    }
  }
}

请查阅各客户端的具体文档,了解应将 mcp.json 或等效配置文件放在何处。

与自托管 Supabase 的 Docker 集成

此 MCP 服务可以直接集成到自托管 Supabase Docker Compose 堆栈中,通过 Kong API 网关与其他 Supabase 服务一同使用。

架构概览

与 Docker 集成时:

  • MCP 服务以 HTTP 传输模式运行(而非 stdio)
  • 服务通过 Kong 暴露在 /mcp/v1/*
  • JWT 身份验证由 MCP 服务自身处理
  • 服务可直接访问数据库和所有 Supabase 密钥
设置步骤
1. 将 MCP 服务添加为 Git 子模块

在 Supabase Docker 目录中:

git submodule add https://github.com/HenkDz/selfhosted-supabase-mcp.git selfhosted-supabase-mcp
2. 创建 Dockerfile

创建 volumes/mcp/Dockerfile:

# Dockerfile for selfhosted-supabase-mcp HTTP mode
# Multi-stage build using Bun runtime for self-hosted Supabase

FROM oven/bun:1.1-alpine AS builder

WORKDIR /app

# Copy package files from submodule
COPY selfhosted-supabase-mcp/package.json selfhosted-supabase-mcp/bun.lock* ./

# Install dependencies
RUN bun install --frozen-lockfile || bun install

# Copy source code
COPY selfhosted-supabase-mcp/src ./src
COPY selfhosted-supabase-mcp/tsconfig.json ./

# Build the application
RUN bun build src/index.ts --outdir dist --target bun

# Production stage
FROM oven/bun:1.1-alpine AS runner

WORKDIR /app

# Create non-root user for security
RUN addgroup --system --gid 1001 mcp && \
    adduser --system --uid 1001 --ingroup mcp mcp

# Copy built application from builder
COPY --from=builder /app/dist ./dist
COPY --from=builder /app/node_modules ./node_modules
COPY --from=builder /app/package.json ./

# Set ownership
RUN chown -R mcp:mcp /app

USER mcp

# Default environment variables
ENV NODE_ENV=production

# Health check
HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
    CMD wget --no-verbose --tries=1 --spider http://localhost:3100/health || exit 1

# Expose HTTP port
EXPOSE 3100

# Start the MCP server in HTTP mode
CMD ["bun", "run", "dist/index.js"]
3. 将 MCP 服务添加到 docker-compose.yml

将此服务定义添加到 docker-compose.yml:

## MCP Server - Model Context Protocol for AI integrations
## DISABLED BY DEFAULT - Add 'mcp' to COMPOSE_PROFILES to enable
mcp:
  container_name: ${COMPOSE_PROJECT_NAME:-supabase}-mcp
  profiles:
    - mcp
  build:
    context: .
    dockerfile: ./volumes/mcp/Dockerfile
  restart: unless-stopped
  healthcheck:
    test:
      [
        "CMD",
        "wget",
        "--no-verbose",
        "--tries=1",
        "--spider",
        "http://localhost:3100/health"
      ]
    timeout: 5s
    interval: 10s
    retries: 3
  depends_on:
    db:
      condition: service_healthy
    rest:
      condition: service_started
  environment:
    SUPABASE_URL: http://kong:8000
    SUPABASE_ANON_KEY: ${ANON_KEY}
    SUPABASE_SERVICE_ROLE_KEY: ${SERVICE_ROLE_KEY}
    SUPABASE_AUTH_JWT_SECRET: ${JWT_SECRET}
    DATABASE_URL: postgresql://postgres:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}
  command:
    [
      "bun",
      "run",
      "dist/index.js",
      "--transport", "http",
      "--port", "3100",
      "--host", "0.0.0.0",
      "--url", "http://kong:8000",
      "--anon-key", "${ANON_KEY}",
      "--service-key", "${SERVICE_ROLE_KEY}",
      "--jwt-secret", "${JWT_SECRET}",
      "--db-url", "postgresql://postgres:${POSTGRES_PASSWORD}@${POSTGRES_HOST}:${POSTGRES_PORT}/${POSTGRES_DB}"
    ]
4. 添加 Kong API 网关路由

将 MCP 路由添加到 volumes/api/kong.yml 的 services 部分:

## MCP Server routes - Model Context Protocol for AI integrations
## Authentication is handled by the MCP server itself (JWT validation)
- name: mcp-v1
  _comment: 'MCP Server: /mcp/v1/* -> http://mcp:3100/*'
  url: http://mcp:3100/
  routes:
    - name: mcp-v1-all
      strip_path: true
      paths:
        - /mcp/v1/
  plugins:
    - name: cors
      config:
        origins:
          - "$SITE_URL_PATTERN"
          - "http://localhost:3000"
          - "http://127.0.0.1:3000"
        methods:
          - GET
          - POST
          - DELETE
          - OPTIONS
        headers:
          - Accept
          - Authorization
          - Content-Type
          - X-Client-Info
          - apikey
          - Mcp-Session-Id
        exposed_headers:
          - Mcp-Session-Id
        credentials: true
        max_age: 3600
5. 启用 MCP 服务

MCP 服务使用 Docker Compose 配置文件,因此默认处于禁用状态。启用方法如下:

选项 A:在 .env 文件中设置:

COMPOSE_PROFILES=mcp

选项 B:在运行时启用:

docker compose --profile mcp up -d
访问 MCP 服务

运行后,可通过以下地址访问 MCP 服务:

  • 内部(从其他容器访问): http://mcp:3100
  • 外部(通过 Kong 访问): http://localhost:8000/mcp/v1/
身份验证

以 HTTP 模式运行时,MCP 服务会使用配置的 JWT_SECRET 验证 JWT。客户端必须在 Authorization 标头中包含有效的 Supabase JWT:

Authorization: Bearer <supabase-jwt>

JWT 的 role 声明决定了访问权限:

  • service_role:可完整访问所有工具(常规工具和特权工具)
  • authenticated:仅可访问常规工具
  • anon:无法访问工具
健康检查

MCP 服务提供健康检查端点:

curl http://localhost:8000/mcp/v1/health
安全注意事项

通过 Docker 部署时:

  1. MCP 服务以非 root 用户(mcp:mcp)身份运行
  2. 所有工具调用都强制执行 JWT 身份验证
  3. 特权工具(如 execute_sql)需要 service_role JWT
  4. CORS 通过 Kong 配置;请根据部署情况调整来源

开发

  • 语言: TypeScript
  • 构建: bun build(通过 bun run build)
  • 运行时: Bun v1.1+
  • 测试运行器: bun test
  • 依赖项: 通过 bun(bun.lock)管理
  • 核心库: @supabase/supabase-js、pg(node-postgres)、zod(验证)、commander(CLI 参数)、@modelcontextprotocol/sdk(MCP 服务框架)、express、jsonwebtoken。

许可证

本项目采用 MIT 许可证。详情请参阅 LICENSE 文件。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。