Self-Hosted Supabase MCP Server

Integrations

  • Provides tools for direct PostgreSQL database operations, including executing SQL queries, viewing database connections and statistics, listing extensions, and querying system catalogs.

  • Enables interaction with self-hosted Supabase instances, providing tools for database introspection, SQL query execution, schema management, migrations, auth user management, storage bucket operations, and TypeScript type generation.

Самостоятельно размещенный сервер Supabase MCP

Обзор

Этот проект предоставляет сервер Model Context Protocol (MCP) , разработанный специально для взаимодействия с размещенными на собственном сервере экземплярами Supabase . Он устраняет разрыв между клиентами MCP (например, расширениями IDE) и вашими локальными или размещенными на частном сервере проектами Supabase, обеспечивая интроспекцию, управление и взаимодействие с базой данных непосредственно из вашей среды разработки.

Этот сервер был создан с нуля с учетом опыта адаптации официального облачного сервера MCP Supabase, чтобы обеспечить минимальную, целенаправленную реализацию, адаптированную для варианта использования с самостоятельным размещением.

Цель

Основная цель этого сервера — предоставить разработчикам, использующим самостоятельные установки Supabase, возможность использовать инструменты на базе MCP для таких задач, как:

  • Запросы схем и данных баз данных.
  • Управление миграциями баз данных.
  • Проверка статистики и подключений базы данных.
  • Управление аутентификацией пользователей.
  • Взаимодействие с хранилищем Supabase.
  • Генерация определений типов.

Он позволяет избежать сложностей официального облачного сервера, связанных с управлением несколькими проектами и облачными API-интерфейсами, предлагая оптимизированный интерфейс для однопроектных сред с собственным размещением.

Возможности (Реализованные инструменты)

Сервер предоставляет клиентам MCP следующие инструменты:

  • Схема и миграции
    • list_tables : список таблиц в схемах базы данных.
    • list_extensions : список установленных расширений PostgreSQL.
    • list_migrations : список примененных миграций Supabase.
    • apply_migration : Применяет скрипт миграции SQL.
  • Операции с базами данных и статистика
    • execute_sql : выполняет произвольный SQL-запрос (через RPC или прямое соединение).
    • get_database_connections : показывает активные подключения к базе данных ( pg_stat_activity ).
    • get_database_stats : Извлекает статистику базы данных ( pg_stat_* ).
  • Конфигурация проекта и ключи
    • get_project_url : возвращает настроенный URL-адрес Supabase.
    • get_anon_key : возвращает настроенный анонимный ключ Supabase.
    • get_service_key : возвращает настроенный ключ роли службы Supabase (если указан).
    • verify_jwt_secret : проверяет, настроен ли секрет JWT, и возвращает предварительный просмотр.
  • Инструменты разработки и расширения
    • generate_typescript_types : генерирует типы TypeScript из схемы базы данных.
    • rebuild_hooks : пытается перезапустить pg_net worker (если используется).
  • Управление аутентификацией пользователей
    • list_auth_users : Выводит список пользователей из auth.users .
    • get_auth_user : Извлекает данные для конкретного пользователя.
    • create_auth_user : создает нового пользователя (требуется прямой доступ к базе данных, небезопасная обработка паролей).
    • delete_auth_user : удаляет пользователя (требуется прямой доступ к базе данных).
    • update_auth_user : обновляет данные пользователя (требуется прямой доступ к базе данных, небезопасная обработка паролей).
  • Информация о хранении
    • list_storage_buckets : список всех контейнеров хранения.
    • list_storage_objects : Перечисляет объекты в определенном контейнере.
  • Проверка в реальном времени
    • list_realtime_publications : список публикаций PostgreSQL (часто supabase_realtime ).

(Примечание: get_logs изначально планировался, но был пропущен из-за сложностей реализации в среде с собственным хостингом).

Настройка и установка

Установка через Smithery

Чтобы автоматически установить Self-Hosted Supabase MCP Server для Claude Desktop через Smithery :

npx -y @smithery/cli install @HenkDz/selfhosted-supabase-mcp --client claude

Предпосылки

  • Node.js (рекомендуется версия 18.x или более поздняя)
  • npm (обычно входит в состав Node.js)
  • Доступ к вашему экземпляру Supabase, размещенному самостоятельно (URL, ключи, потенциально прямая строка подключения к БД).

Шаги

  1. Клонируйте репозиторий:
    git clone <repository-url> cd self-hosted-supabase-mcp
  2. Установить зависимости:
    npm install
  3. Создайте проект:
    npm run build
    Это скомпилирует код TypeScript в JavaScript в каталоге dist .

Конфигурация

Серверу требуются данные конфигурации для вашего экземпляра Supabase. Они могут быть предоставлены через аргументы командной строки или переменные среды. Аргументы CLI имеют приоритет.

Необходимый:

  • --url <url> или SUPABASE_URL=<url> : основной HTTP URL вашего проекта Supabase (например, 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> : Прямая строка подключения PostgreSQL для вашей базы данных Supabase (например, postgresql://postgres:password@localhost:5432/postgres ). Требуется для инструментов, которым требуется прямой доступ к базе данных или транзакции ( apply_migration , инструменты аутентификации, инструменты хранения, запросы pg_catalog и т. д.).
  • --jwt-secret <secret> или SUPABASE_AUTH_JWT_SECRET=<secret> : Секрет JWT вашего проекта Supabase. Требуется для таких инструментов, как verify_jwt_secret .
  • --tools-config <path> : Путь к файлу JSON, указывающему, какие инструменты следует включить (белый список). Если этот параметр пропущен, включаются все инструменты, определенные на сервере. Файл должен иметь формат {"enabledTools": ["tool_name_1", "tool_name_2"]} .

Важные примечания:

  • Вспомогательная функция execute_sql : многие инструменты полагаются на функцию public.execute_sql в вашей базе данных Supabase для безопасного и эффективного выполнения SQL через RPC. Сервер пытается проверить эту функцию при запуске. Если она отсутствует и предоставлены service-key (или SUPABASE_SERVICE_ROLE_KEY ) и db-url (или DATABASE_URL ), он попытается создать функцию и предоставить необходимые разрешения. Если создание не удается или ключи не предоставлены, инструменты, полагающиеся исключительно на RPC, могут выйти из строя.
  • Прямой доступ к базе данных: инструменты, напрямую взаимодействующие с привилегированными схемами ( auth , storage ) или системными каталогами ( pg_catalog ), обычно требуют настройки DATABASE_URL для прямого подключения pg .

Использование

Запустите сервер с помощью Node.js, указав необходимую конфигурацию:

# Using CLI arguments (example) node 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 node 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> # The --tools-config option MUST be passed as a CLI argument if used node dist/index.js # Using npm start script (if configured in package.json to pass args/read env) npm start -- --url ... --anon-key ...

Сервер взаимодействует через стандартный ввод/вывод (stdio) и предназначен для вызова клиентским приложением MCP (например, расширением IDE, таким как Cursor). Клиент подключится к потоку stdio сервера для вывода и вызова доступных инструментов.

Примеры конфигурации клиента

Ниже приведены примеры настройки популярных клиентов MCP для использования этого размещенного на собственном сервере.

Важный:

  • Замените заполнители, такие как <your-supabase-url> , <your-anon-key> , <your-db-url> , <path-to-dist/index.js> и т. д., вашими фактическими значениями.
  • Убедитесь, что путь к скомпилированному файлу сервера ( dist/index.js ) правильный для вашей системы.
  • Будьте осторожны, храня конфиденциальные ключи непосредственно в файлах конфигурации, особенно если вы привязаны к контролю версий. Рассмотрите возможность использования переменных среды или более безопасных методов, если они поддерживаются клиентом.

Курсор

  1. Создайте или откройте файл .cursor/mcp.json в корневом каталоге вашего проекта.
  2. Добавьте следующую конфигурацию:
    { "mcpServers": { "selfhosted-supabase": { "command": "node", "args": [ "<path-to-dist/index.js>", // e.g., "F:/Projects/mcp-servers/self-hosted-supabase-mcp/dist/index.js" "--url", "<your-supabase-url>", // e.g., "http://localhost:8000" "--anon-key", "<your-anon-key>", // Optional - Add these if needed by the tools you use "--service-key", "<your-service-key>", "--db-url", "<your-db-url>", // e.g., "postgresql://postgres:password@host:port/postgres" "--jwt-secret", "<your-jwt-secret>", // Optional - Whitelist specific tools "--tools-config", "<path-to-your-mcp-tools.json>" // e.g., "./mcp-tools.json" ] } } }

Visual Studio Code (второй пилот)

VS Code Copilot позволяет использовать переменные среды, заполняемые с помощью запрашиваемых входных данных, что более безопасно для ключей.

  1. Создайте или откройте файл .vscode/mcp.json в корневом каталоге вашего проекта.
  2. Добавьте следующую конфигурацию:
    { "inputs": [ { "type": "promptString", "id": "sh-supabase-url", "description": "Self-Hosted Supabase URL", "default": "http://localhost:8000" }, { "type": "promptString", "id": "sh-supabase-anon-key", "description": "Self-Hosted Supabase Anon Key", "password": true }, { "type": "promptString", "id": "sh-supabase-service-key", "description": "Self-Hosted Supabase Service Key (Optional)", "password": true, "required": false }, { "type": "promptString", "id": "sh-supabase-db-url", "description": "Self-Hosted Supabase DB URL (Optional)", "password": true, "required": false }, { "type": "promptString", "id": "sh-supabase-jwt-secret", "description": "Self-Hosted Supabase JWT Secret (Optional)", "password": true, "required": false }, { "type": "promptString", "id": "sh-supabase-server-path", "description": "Path to self-hosted-supabase-mcp/dist/index.js" }, { "type": "promptString", "id": "sh-supabase-tools-config", "description": "Path to tools config JSON (Optional, e.g., ./mcp-tools.json)", "required": false } ], "servers": { "selfhosted-supabase": { "command": "node", // Arguments are passed via environment variables set below OR direct args for non-env options "args": [ "${input:sh-supabase-server-path}", // Use direct args for options not easily map-able to standard env vars like tools-config // Check if tools-config input is provided before adding the argument ["--tools-config", "${input:sh-supabase-tools-config}"] // Alternatively, pass all as args if simpler: // "--url", "${input:sh-supabase-url}", // "--anon-key", "${input:sh-supabase-anon-key}", // ... etc ... ], "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}" // The server reads these environment variables as fallbacks if CLI args are missing } } } }
  3. При использовании Copilot Chat в режиме агента (@workspace) он должен обнаружить сервер. Вам будет предложено ввести данные (URL, ключи, путь) при первом вызове сервера.

Другие клиенты (Виндсерф, Клайн, Клод)

Адаптируйте структуру конфигурации, показанную для Cursor или официальной документации Supabase, заменив command и args на команду node и аргументы для этого сервера, аналогично примеру Cursor:

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

Информацию о том, где разместить файл mcp.json или эквивалентный файл конфигурации, см. в документации по каждому клиенту.

Разработка

  • Язык: TypeScript
  • Сборка: tsc (компилятор TypeScript)
  • Зависимости: Управляются через npm ( package.json )
  • Основные библиотеки: @supabase/supabase-js , pg (node-postgres), zod (проверка), commander (аргументы CLI), @modelcontextprotocol/sdk (фреймворк сервера MCP).

Лицензия

Этот проект лицензирован по лицензии MIT. Подробности см. в файле LICENSE.

You must be authenticated.

A
security – no known vulnerabilities
F
license - not found
A
quality - confirmed to work

hybrid server

The server is able to function both locally and remotely, depending on the configuration or use case.

Сервер протоколов, который обеспечивает взаимодействие с размещенными на собственном сервере экземплярами Supabase непосредственно из сред разработки, позволяя осуществлять интроспекцию базы данных, управлять миграциями, аутентификацией пользователей и хранением через клиенты MCP, такие как расширения IDE.

  1. Обзор
    1. Цель
      1. Возможности (Реализованные инструменты)
        1. Настройка и установка
          1. Установка через Smithery
          2. Предпосылки
          3. Шаги
        2. Конфигурация
          1. Важные примечания:
        3. Использование
          1. Примеры конфигурации клиента
            1. Курсор
            2. Visual Studio Code (второй пилот)
            3. Другие клиенты (Виндсерф, Клайн, Клод)
          2. Разработка
            1. Лицензия

              Related MCP Servers

              • A
                security
                F
                license
                A
                quality
                A Model Context Protocol (MCP) server that provides programmatic access to the Supabase Management API. This server allows AI models and other clients to manage Supabase projects and organizations through a standardized interface.
                Last updated -
                8
                84
                27
                JavaScript
              • A
                security
                A
                license
                A
                quality
                An MCP server that provides tools for interacting with Supabase databases, storage, and edge functions.
                Last updated -
                14
                41
                JavaScript
                MIT License
              • -
                security
                -
                license
                -
                quality
                An MCP server utilizing Supabase to provide memory and knowledge graph storage, enabling multiple Claude instances to share and manage data with database-level locking for safe concurrent access.
                Last updated -
                JavaScript
              • A
                security
                A
                license
                A
                quality
                This server enables interaction with Supabase PostgreSQL databases through the MCP protocol, allowing seamless integration with Cursor and Windsurf IDEs for secure and validated database management.
                Last updated -
                11
                649
                Python
                Apache 2.0
                • Apple
                • Linux

              View all related MCP servers

              ID: kgziynf39e