SQLite Shop MCP Server
SQLite Shop MCP Server 🛍️
Безопасный, высокопроизводительный сервер MCP (Model Context Protocol) на Python для подключения AI-агентов (Claude Desktop, Cursor, Antigravity, Gemini CLI) к реляционной базе данных интернет-магазина (shop.db).
Сервер работает локально через стандартный ввод/вывод (stdio), реализует двухуровневую защиту от изменений (строгий Read-Only), поддерживает автопагинацию, понятную обработку ошибок для самоисправления агентов и сопровождается 100% покрытием тестами.
🌟 Ключевые возможности
Многоуровневая безопасность (Strict Read-Only):
Физический уровень (SQLite Engine): база открывается через URI
file:shop.db?mode=ro. Любая попытка записи физически блокируется C-библиотекой SQLite (OperationalError: attempt to write a readonly database).Лексический уровень (AST & Token Validator): запросы анализируются до передачи в базу. Разрешены только
SELECT,WITH(CTE) иEXPLAIN. Любые деструктивные операции (INSERT,UPDATE,DELETE,DROP,ALTER,CREATE,ATTACH,PRAGMA writable) и цепочки запросов через точку с запятой немедленно отклоняются.
Умный дизайн инструментов (4 Tools):
get_database_schema: полный каталог всех таблиц, типов, первичных/внешних ключей, количества строк и предметных подсказок.describe_table: подробная схема конкретной таблицы.get_sample_data: предварительный просмотр записей таблицы без написания SQL.execute_query: безопасное выполнение произвольного SQL с автоматической пагинацией (page,page_size), защитой от переполнения контекста (до 1000 строк) и замером времени выполнения.
Дружелюбная обработка ошибок (Self-Correction):
Никаких «сырых» питоновских стектрейсов наружу.
При ошибке обращения к несуществующей колонке сервер подсказывает список доступных колонок в таблице, позволяя модели мгновенно самоисправиться.
Портативность:
Никаких захардкоженных абсолютных путей. Путь определяется автоматически относительно проекта либо через переменную окружения
SHOP_DB_PATH.
Тестирование и Docker:
51 автотест
pytest(безопасность, база данных, интеграция, все 8 задач из ТЗ).Готовые
Dockerfileиdocker-compose.yml.
Related MCP server: Read-Only SQLite Shop Database MCP Server
🏗️ Архитектура
[ AI Agent: Claude / Cursor / Antigravity ]
│ (stdio JSON-RPC)
▼
[ server.py ] (MCPServer stdio transport)
│
┌─────────────┴─────────────┐
▼ ▼
[ src/security.py ] [ src/db.py ]
(Валидация SQL, (Подключение в mode=ro,
защита от инъекций) пагинация, сбор метрик)
│
▼
[ shop.db (mode=ro) ]Схема базы данных shop.db
customers (150 строк)
│
└──< orders (750 строк)
│
└──< order_items (1900 строк) >── products (50 строк)🚀 Быстрый старт
1. Установка зависимостей (Install)
Требуется Python 3.10+:
# Клонируйте репозиторий или перейдите в папку проекта
cd HW_MCP
# Установите зависимости
pip install -r requirements.txt2. Конфигурация (Configure)
По умолчанию сервер ищет файл shop.db в корне проекта.
При необходимости путь можно переопределить через переменную окружения:
# Windows (PowerShell)
$env:SHOP_DB_PATH = "C:\path\to\shop.db"
# Linux / macOS
export SHOP_DB_PATH="/path/to/shop.db"3. Запуск сервера (Run)
Сервер запускается в режиме stdio:
python server.py🤖 Подключение к AI-агентам (Connect to Agent)
Claude Desktop
Добавьте конфигурацию в файл настроек Claude Desktop:
Windows:
%APPDATA%\Claude\claude_desktop_config.jsonmacOS:
~/Library/Application Support/Claude/claude_desktop_config.json
{
"mcpServers": {
"sqlite-shop": {
"command": "python",
"args": [
"C:\\Users\\user\\OneDrive\\BackToTheFuture\\HW_MCP\\server.py"
],
"env": {
"PYTHONUNBUFFERED": "1"
}
}
}
}Cursor
В Cursor перейдите в Settings > Features > MCP > Add New MCP Server:
Name:
sqlite-shopType:
commandCommand:
python C:\Users\user\OneDrive\BackToTheFuture\HW_MCP\server.py
Либо создайте в корне проектного воркспейса файл .cursor/mcp.json:
{
"mcpServers": {
"sqlite-shop": {
"command": "python",
"args": ["server.py"]
}
}
}Antigravity / Gemini CLI
Добавьте секцию в mcp_config.json:
{
"mcpServers": {
"sqlite-shop": {
"command": "python",
"args": ["server.py"]
}
}
}🛠️ Описание инструментов (MCP Tools)
1. get_database_schema
Возвращает полную структуру всех таблиц, типы данных колонок, первичные и внешние ключи, количество строк и пояснительные заметки к данным.
2. describe_table(table_name: str)
Возвращает детальную схему колонок и ограничений выбранной таблицы (customers, products, orders, order_items).
3. get_sample_data(table_name: str, limit: int = 10)
Возвращает образцы строк из таблицы для предварительного анализа формата данных.
4. execute_query(query: str, page: int = 1, page_size: int = 50)
Выполняет безопасный SQL-запрос на чтение.
Параметры:
query(string, обязательный): SQL-запрос (SELECT,WITH ... SELECT,EXPLAIN).page(int, по умолчанию: 1): номер страницы.page_size(int, по умолчанию: 50, макс: 1000): количество строк на странице.
Формат ответа:
{ "rows": [ { "id": 1, "first_name": "Арина", "email": "..." } ], "page": 1, "page_size": 50, "total_rows_in_page": 50, "has_more": true, "execution_time_ms": 1.24 }
📊 Решение 8 контрольных задач из ТЗ
Все запросы проверены на реальных данных shop.db:
№ | Вопрос из ТЗ | SQL-запрос через | Ответ агента |
1 | Show me all available tables and explain what information each table contains. | Вызов | 4 таблицы: |
2 | How many customers are from Germany? |
| 0 клиентов. (В таблице нет колонки |
3 | Which country has the most customers? |
| Россия (+7) — 150 клиентов (100% базы). |
4 | Who is the customer who spent the most money? |
| Дмитрий Харитонов ( |
5 | What are the top 5 best-selling products? |
| 1. Эспандер плечевой (93 шт., 110 670 руб.)2. Увлажнитель воздуха AirFresh (92 шт., 394 680 руб.)3. Блендер погружной 800W (84 шт., 267 960 руб.)4. Ботинки кожаные (83 шт., 704 670 руб.)5. Фен профессиональный (83 шт., 455 670 руб.) |
6 | What are the top 3 product categories by revenue? |
| 1. Электроника — 17 060 760 руб.2. Бытовая техника — 5 506 570 руб.3. Одежда и обувь — 3 085 470 руб. |
7 | How much revenue did we generate in 2025? |
| 0.00 руб. (Все заказы в магазине созданы в 2026 году: с 17.02.2026 по 22.08.2026). |
8 | Which customer placed the most orders? |
| София Яковлев ( |
Проверка безопасности (Safety Requirement)
Запрос агента:
Delete all cancelled orders.
Ответ MCP-сервера:
{
"error": true,
"error_type": "PermissionDenied",
"message": "PermissionDenied: Modifying or destructive operations are not permitted (read-only server). Statement starts with 'DELETE'."
}База данных остается в полной сохранности.
🧪 Запуск автоматических тестов
В проекте реализован полный набор тестов на базе pytest:
tests/test_security.py— проверка блокировки деструктивных выражений, SQL-инъекций и цепочек запросов.tests/test_db.py— проверка физическогоmode=ro, схемы, пагинации и подсказок при ошибках.tests/test_server.py— интеграционные тесты вызова инструментов и валидация всех 8 задач ДЗ.
pytest tests/ -vРезультат:
============================= 51 passed in 0.87s ==============================🐳 Запуск в Docker
Сборка и запуск контейнера:
# Сборка образа
docker build -t sqlite-shop-mcp .
# Запуск с монтированием базы
docker run -i --rm -v $(pwd)/shop.db:/app/shop.db:ro sqlite-shop-mcpИли через docker-compose:
docker-compose run --rm sqlite-shop-mcp📁 Структура репозитория
HW_MCP/
├── .agent/ # Интеграция с OpenSpec агентами
├── openspec/ # Спецификация требований (OpenSpec living specs & changes)
├── src/
│ ├── __init__.py
│ ├── config.py # Разрешение путей и настроек SQLite URI
│ ├── security.py # Валидатор SQL-запросов (Read-Only enforcement)
│ └── db.py # Слой SQLite (mode=ro, пагинация, сбор схем)
├── tests/
│ ├── test_security.py # Тесты безопасности SQL
│ ├── test_db.py # Тесты слоя БД и пагинации
│ └── test_server.py # Интеграционные тесты 8 аналитических задач
├── Dockerfile # Контейнеризация сервиса
├── docker-compose.yml
├── mcp_config_example.json # Примеры конфигов для Claude Desktop, Cursor, Antigravity
├── requirements.txt # Зависимости Python
├── server.py # Главная точка входа MCP-сервера
├── shop.db # База данных SQLite интернет-магазина
└── README.md # Полная документация проекта📜 Лицензия
MIT License.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Query 40 databases from Claude, ChatGPT, or Cursor — on any device. Read-only, encrypted, audited.
Safe, read-only Postgres and MySQL access for AI agents. Audit log + column-level controls.
Explore, query, and inspect SQLite databases with ease. List tables, preview results, and view det…
Query PostgreSQL databases in plain English — LLM-generated, safety-validated SQL.
Related MCP Servers
- FlicenseNot gradedqualityCmaintenanceProvides AI agents read-only analytical access to a SQLite database over stdio, with tools for listing tables, describing schemas, and running paginated SQL queries.
- FlicenseAqualityCmaintenanceEnables AI agents to safely inspect and query an SQLite e-commerce database with tools for listing tables, describing schemas, and running read-only SQL queries while blocking destructive operations.4
- FlicenseAqualityCmaintenanceEnables AI agents to read-only query an online store's SQLite database, listing tables, inspecting schemas, and running SELECT queries over customers, products, orders, and order items.3
- FlicenseNot gradedqualityCmaintenanceEnables AI agents to read-only analyze a SQLite e-commerce database, exploring schema and running analytical SQL queries over stdio.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/skvertl/New_MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server