Skip to main content
Glama
dochaocn

sqlite-readonly-mcp

by dochaocn

sqlite-readonly-mcp

Сервер SQLite в режиме только для чтения для протокола Model Context Protocol, работающий на удаленном сервере Linux. Использует Streamable HTTP (/mcp), аутентификацию через Bearer Token, а результаты запросов возвращаются в виде JSON-текста. Разработан для размещения за Nginx (HTTPS), при этом вышестоящий сервер прослушивает только локальный хост.

Функции

  • Инструмент sqlite_query: выполнение одиночного запроса SELECT / WITH / EXPLAIN, возвращает JSON в формате { rows, rowCount }.

  • Инструмент list_tables: вывод списка имен таблиц (за исключением системных).

  • SQLite: better-sqlite3 с флагами readonly + fileMustExist; на уровне приложения ограничено выполнение только одного оператора и проверка префикса запроса.

  • GET /health: только для локального доступа, используется для проверки работоспособности (см. src/server.ts).

  • Передача данных: Streamable HTTP (/mcp) + устаревший SSE (GET /sse, POST /messages) для обеспечения обратной совместимости с Cursor при необходимости.

Related MCP server: PostgreSQL MCP Server

Переменные окружения

Переменная

Обязательно

Описание

SQLITE_PATH

Да

Абсолютный путь к файлу базы данных

BEARER_TOKEN

Да

Статический Bearer-токен (можно также использовать READONLY_TOKEN)

HOST

Нет

По умолчанию 127.0.0.1

PORT

Нет

По умолчанию 3333

ALLOWED_HOSTS

Нет

Список разрешенных заголовков Host через запятую; должен включать внешний домен Nginx. По умолчанию 127.0.0.1,localhost,[::1]

SQLITE_MAX_ROWS

Нет

Максимальное количество строк за один запрос, по умолчанию 5000

Локальная сборка и запуск

npm install
npm run build
export SQLITE_PATH=/path/to/db.sqlite
export BEARER_TOKEN='your-secret-token'
export ALLOWED_HOSTS='127.0.0.1,localhost'
node dist/server.js

Разработка и отладка: npm run dev

Nginx и systemd

См. deploy/nginx.example.conf, deploy/sqlite-readonly-mcp.service, deploy/sqlite-readonly-mcp.env.example.

Основные моменты: передача заголовков Authorization, Accept, Content-Type, mcp-session-id на вышестоящий сервер; отключение proxy_buffering для SSE/потоковых ответов. В примерах уже включены **/sse**, **/messages** (устаревший SSE-откат) вместе с Streamable HTTP /mcp для обратного проксирования.

Запуск от имени пользователя root (рекомендуемый пример)

Для упрощения настройки прав доступа на чтение к файлу SQLite и родительскому каталогу, в примере сервис запускается от имени root (в unit-файле systemd не указаны User= / Group=, по умолчанию используется root).

  1. Разместите код и артефакты сборки, например, в /opt/sqlite-readonly-mcp, и выполните npm ci --omit=dev и npm run build.

  2. Скопируйте файл окружения и заполните переменные:

 sudo cp deploy/sqlite-readonly-mcp.env.example /etc/sqlite-readonly-mcp.env
 sudo chmod 600 /etc/sqlite-readonly-mcp.env
  1. Установите и активируйте unit-файл (при необходимости измените WorkingDirectory и абсолютный путь к node в ExecStart):

 sudo cp deploy/sqlite-readonly-mcp.service /etc/systemd/system/
 sudo systemctl daemon-reload
 sudo systemctl enable --now sqlite-readonly-mcp
 sudo systemctl status sqlite-readonly-mcp

Если вы ранее добавляли User=mcp, удалите эту строку, затем выполните daemon-reload и restart.

Совет по безопасности: взлом процесса root несет более серьезные последствия, поэтому обязательно используйте HTTPS, Bearer-токены, прослушивание локального хоста + Nginx, брандмауэр; если требуются минимальные привилегии, вернитесь к использованию выделенного пользователя и настройте права доступа к файлу данных и путям отдельно.

Ручная проверка (curl)

MCP требует, чтобы клиент принимал как application/json, так и text/event-stream:

curl -sS -D - \
  -H "Authorization: Bearer $BEARER_TOKEN" \
  -H "Content-Type: application/json" \
  -H "Accept: application/json, text/event-stream" \
  -d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2025-11-25","capabilities":{},"clientInfo":{"name":"curl","version":"1.0"}}}' \
  "https://mcp.example.com/mcp"

Неверный токен должен возвращать 401.

Клиент Cursor

В настройках MCP в Cursor укажите HTTPS URL для этого удаленного сервиса (например, https://mcp.example.com/mcp). Если требуется Bearer-токен, проверьте, поддерживает ли текущая версия Cursor настройку пользовательских заголовков для удаленных MCP; если нет, потребуется добавить локальный шлюз с фиксированным заголовком Authorization (см. описание рисков решения).

Эксплуатация

Подробности см. в docs/RUNBOOK.md.

Лицензия

MIT (в соответствии с @modelcontextprotocol/sdk; действуют лицензии соответствующих зависимостей).

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    D
    maintenance
    A lightweight MCP server that provides read-only access to SQLite databases, allowing users to execute SELECT queries, list tables, and describe table schemas.
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    A production-ready MCP server that enables safe, read-only SQL SELECT queries against PostgreSQL databases with built-in security validation. It features connection pooling, automatic row limits, and structured logging to ensure secure and reliable database interactions.
    13 npm
    ISC
  • A
    license
    Not graded
    quality
    F
    maintenance
    Read-only MCP server for SQL databases (SQL Server, Postgres, SQLite) with multi-server support and three-layer safety using AST validation and linting.
    MIT
  • F
    license
    Not graded
    quality
    D
    maintenance
    Custom MCP server connected to a read-only SQLite database, exposing a schema resource and a query tool for safe data retrieval.
    -