SQLite Shop MCP Server
SQLite Shop MCP Server 🛍️
Servidor seguro y de alto rendimiento MCP (Model Context Protocol) en Python para conectar agentes de IA (Claude Desktop, Cursor, Antigravity, Gemini CLI) a la base de datos relacional de una tienda en línea (shop.db).
El servidor funciona localmente a través de la entrada/salida estándar (stdio), implementa protección de doble nivel contra modificaciones (Read-Only estricto), admite paginación automática, manejo de errores claro para la autocorrección de los agentes y cuenta con un 100% de cobertura de pruebas.
🌟 Características clave
Seguridad en varios niveles (Strict Read-Only):
Nivel físico (SQLite Engine): la base se abre mediante el URI
file:shop.db?mode=ro. Cualquier intento de escritura se bloquea físicamente por la biblioteca C de SQLite (OperationalError: attempt to write a readonly database).Nivel léxico (AST & Token Validator): las consultas se analizan antes de pasarlas a la base. Solo se permiten
SELECT,WITH(CTE) yEXPLAIN. Cualquier operación destructiva (INSERT,UPDATE,DELETE,DROP,ALTER,CREATE,ATTACH,PRAGMA writable) y las cadenas de consultas con punto y coma se rechazan inmediatamente.
Diseño inteligente de herramientas (4 Tools):
get_database_schema: catálogo completo de todas las tablas, tipos, claves primarias/externas, número de filas y sugerencias temáticas.describe_table: esquema detallado de una tabla específica.get_sample_data: vista previa de los registros de una tabla sin escribir SQL.execute_query: ejecución segura de SQL arbitrario con paginación automática (page,page_size), protección contra desbordamiento de contexto (hasta 1000 filas) y medición del tiempo de ejecución.
Manejo de errores amigable (Self-Correction):
No se exponen stacktraces de Python «crudos» hacia el exterior.
Cuando se produce un error al acceder a una columna inexistente, el servidor sugiere la lista de columnas disponibles en la tabla, lo que permite al modelo autocorregirse al instante.
Portabilidad:
No hay rutas absolutas hardcodeadas. La ruta se determina automáticamente con respecto al proyecto o mediante la variable de entorno
SHOP_DB_PATH.
Pruebas y Docker:
51 prueba automática
pytest(seguridad, base de datos, integración, las 8 tareas de la especificación técnica).Dockerfileydocker-compose.ymllistos.
Related MCP server: Read-Only SQLite Shop Database MCP Server
🏗️ Arquitectura
[ 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) ]Esquema de la base de datos shop.db
customers (150 строк)
│
└──< orders (750 строк)
│
└──< order_items (1900 строк) >── products (50 строк)🚀 Inicio rápido
1. Instalación de dependencias (Install)
Se requiere Python 3.10+:
# Клонируйте репозиторий или перейдите в папку проекта
cd HW_MCP
# Установите зависимости
pip install -r requirements.txt2. Configuración (Configure)
Por defecto, el servidor busca el archivo shop.db en la raíz del proyecto.
Si es necesario, la ruta se puede redefinir mediante la variable de entorno:
# Windows (PowerShell)
$env:SHOP_DB_PATH = "C:\path\to\shop.db"
# Linux / macOS
export SHOP_DB_PATH="/path/to/shop.db"3. Ejecución del servidor (Run)
El servidor se ejecuta en modo stdio:
python server.py🤖 Conexión a agentes de IA (Connect to Agent)
Claude Desktop
Agregue la configuración al archivo de ajustes de 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
En Cursor, vaya a Settings > Features > MCP > Add New MCP Server:
Name:
sqlite-shopType:
commandCommand:
python C:\Users\user\OneDrive\BackToTheFuture\HW_MCP\server.py
O cree el archivo .cursor/mcp.json en la raíz del espacio de trabajo del proyecto:
{
"mcpServers": {
"sqlite-shop": {
"command": "python",
"args": ["server.py"]
}
}
}Antigravity / Gemini CLI
Agregue la sección en mcp_config.json:
{
"mcpServers": {
"sqlite-shop": {
"command": "python",
"args": ["server.py"]
}
}
}🛠️ Descripción de las herramientas (MCP Tools)
1. get_database_schema
Devuelve la estructura completa de todas las tablas, los tipos de datos de las columnas, las claves primarias y externas, el número de filas y notas explicativas sobre los datos.
2. describe_table(table_name: str)
Devuelve el esquema detallado de las columnas y restricciones de la tabla seleccionada (customers, products, orders, order_items).
3. get_sample_data(table_name: str, limit: int = 10)
Devuelve muestras de filas de la tabla para un análisis preliminar del formato de los datos.
4. execute_query(query: str, page: int = 1, page_size: int = 50)
Ejecuta una consulta SQL de lectura segura.
Parámetros:
query(string, obligatorio): consulta SQL (SELECT,WITH ... SELECT,EXPLAIN).page(int, por defecto: 1): número de página.page_size(int, por defecto: 50, máx: 1000): número de filas por página.
Formato de respuesta:
{ "rows": [ { "id": 1, "first_name": "Арина", "email": "..." } ], "page": 1, "page_size": 50, "total_rows_in_page": 50, "has_more": true, "execution_time_ms": 1.24 }
📊 Solución de las 8 tareas de control de la especificación técnica
Todas las consultas se han verificado con datos reales de shop.db:
N.º | Pregunta de la especificación técnica | Consulta SQL mediante | Respuesta del agente |
1 | Muéstrame todas las tablas disponibles y explica qué información contiene cada tabla. | Llamada a | 4 tablas: |
2 | ¿Cuántos clientes son de Alemania? |
| 0 clientes. (En la tabla no hay columna |
3 | ¿Qué país tiene más clientes? |
| Rusia (+7) — 150 clientes (100% de la base). |
4 | ¿Quién es el cliente que gastó más dinero? |
| Dmitriy Kharitonov ( |
5 | ¿Cuáles son los 5 productos más vendidos? |
| 1. Expansor de hombro (93 unid., 110 670 RUB)2. Humidificador de aire AirFresh (92 unid., 394 680 RUB)3. Batidora de inmersión 800W (84 unid., 267 960 RUB)4. Botas de cuero (83 unid., 704 670 RUB)5. Secador de pelo profesional (83 unid., 455 670 RUB) |
6 | ¿Cuáles son las 3 categorías de productos con mayores ingresos? |
| 1. Electrónica — 17 060 760 RUB2. Electrodomésticos — 5 506 570 RUB3. Ropa y calzado — 3 085 470 RUB |
7 | ¿Cuántos ingresos generamos en 2025? |
| 0.00 RUB. (Todos los pedidos de la tienda se crearon en el año 2026: del 17.02.2026 al 22.08.2026). |
8 | ¿Qué cliente realizó más pedidos? |
| Sofiya Yakovlev ( |
Verificación de seguridad (Safety Requirement)
Consulta del agente:
Eliminar todos los pedidos cancelados.
Respuesta del servidor MCP:
{
"error": true,
"error_type": "PermissionDenied",
"message": "PermissionDenied: Modifying or destructive operations are not permitted (read-only server). Statement starts with 'DELETE'."
}La base de datos permanece completamente intacta.
🧪 Ejecución de las pruebas automáticas
En el proyecto se ha implementado un conjunto completo de pruebas basadas en pytest:
tests/test_security.py— verificación del bloqueo de expresiones destructivas, inyecciones SQL y cadenas de consultas.tests/test_db.py— verificación delmode=rofísico, del esquema, de la paginación y de las sugerencias ante errores.tests/test_server.py— pruebas de integración de invocación de herramientas y validación de las 8 tareas de los deberes.
pytest tests/ -vResultado:
============================= 51 passed in 0.87s ==============================🐳 Ejecución en Docker
Construcción y ejecución del contenedor:
# Сборка образа
docker build -t sqlite-shop-mcp .
# Запуск с монтированием базы
docker run -i --rm -v $(pwd)/shop.db:/app/shop.db:ro sqlite-shop-mcpO mediante docker-compose:
docker-compose run --rm sqlite-shop-mcp📁 Estructura del repositorio
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 # Полная документация проекта📜 Licencia
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