Skip to main content
Glama

Servidor MCP shop-db

Servidor de solo lectura MCP (transporte stdio), que da a un agente de IA acceso a la base de datos SQLite de una tienda online shop.db: clientes, productos, pedidos y posiciones de pedidos.

Construido sobre el MCP Python SDK oficial (v2).

Metadatos de desarrollo

El proyecto fue totalmente generado por un agente de codificación de IA (Claude Code, modelo Fable 5) según la especificación SPEC.md.

Métrica

Valor

Tamaño de la especificación en tokens

≈ 1 800 (cl100k_base; 1 316 en o200k_base)

¿Arrancó a la primera

Sí: el servidor se levantó por stdio y superó las 8 tareas + la verificación de seguridad en el primer intento

Número de consultas auxiliares

4 (documentación del MCP SDK a través de Context7 — 3, comprobación de la versión en PyPI — 1)

Número total de prompts

6 (especificación; shop.db real + metadatos; traducción del README; ejecución de pruebas; recopilación de resultados; actualización + publicación)

Número total de bugs

0 en el código del servidor; 2 menores en archivos de apoyo (orden de imports en el test, nombre de campo obsoleto en un script e2e desechable), corregidos antes del commit

Total de tokens consumidos

≈ 365 000: ≈ 175 000 sesión principal + ≈ 190 000 subagentes de la ejecución de pruebas (sin contar los propios agentes headless que pasaron la verificación)

Related MCP server: db-mcp

Herramientas (tools)

Tool

Función

list_tables

Vista general de todas las tablas: número de filas, columnas, descripción y relaciones entre tablas. La llamada natural para empezar.

describe_table(table_name)

Esquema completo de una tabla: tipos de columnas, claves primarias/externas, 3 filas de ejemplo.

query(sql, limit=50, offset=0)

Ejecuta un único SELECT de solo lectura (o WITH ... SELECT). Admite JOIN y agregación. Los resultados están paginados: no más de 500 filas por llamada, con truncated / next_offset en la respuesta.

Seguridad

Es imposible modificar la base de datos a través de este servidor. Tres niveles independientes de protección:

  1. Validación de la consulta — todo lo que no sean un único SELECT/WITH (INSERT, UPDATE, DELETE, DROP, ALTER, CREATE, DEPTAG, ATTACH, varias sentencias seguidas, una escritura oculta tras un comentario) se rechaza con un mensaje claro antes de ejecutarse.

  2. Conexión de solo lectura — el archivo se abre mediante una URI de SQLite con mode=ro.

  3. PRAGMA query_only = ON en cada conexión.

Incluso una escritura que pase la validación (por ejemplo, WITH ... INSERT) choca con el modo solo lectura al nivel de la conexión.

Los errores de SQL se devuelven con mensaje cortos y claros inluyendo sugerencias, sin stack traces.

Istalación

Se requ¡ere Python 3.10+.

Mediante uv (recomeando — con la primera ejecución se istala todo autoomáticamente):

uv sync

O con pip:

python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt

Configuración

El servidor busca la base de dators en el fichero shop.db al lado de server.py — la base entregada en la tarea está incluida en el repotorio. Para usar orto fichero, defina la variable de entorno SHOP_DB_PATH:

export SHOP_DB_PATH=/path/to/shop.db

seed_db.py es una utiliad auxiliar que genera una base de demo con un esqueama simirar (solo necesaria para datos desechables; no toca shop.db a menos que se le pida exprésamente):

python seed_db.py /tmp/demo.db

Arranque

El servidor se comunicable por stdo — lo inicia el clente MCP, no elusuário manualmente. Para comprovar que aranca sin errores:

uv run python server.py

(El servidor esperá mensajes MCP en stdin; salida con Ctrl+C)

Conexión al agente

Claude Code

En el repoitorio está [. Mcp.json](. Mcp.json), por eso desde la carpda del proyecto el servidor se detecta autoomáticamente. Para regitrar manualmente:

claude mcp add shop-db -- uv run --directory /absolute/path/to/sqlite-mcp python server.py

Clude Desktop (o culquier o tro clente con JSON)

Agréguel a claude_desktop_config.json (ver examples/clud_dektop_config.example.json) — al instalar con pip, as dependenclase deben estar instaladas en el intérprete que se indica el config:

{
  "mcpServers": {
    "shop-db": {
      "command": "/absolute/path/to/sqlite-mcp/.venv/bin/python",
      "args": ["/absolute/path/to/sqlite-mcp/server.py"]
    }
  }
}

O con uv (no se necesita instalación manual):

{
  "mcpServers": {
    "shop-db": {
      "command": "uv",
      "args": ["run", "--directory", "/absolute/path/to/sqlite-mcp", "python", "server.py"]
    }
  }
}

Docer

docker build -t shop-db-mcp .
{
  "mcpServers": {
    "shop-db": {
      "command": "docker",
      "args": ["run", "-i", "--rm", "shop-db-mcp"]
    }
  }
}

Ejemplos preguntas que responden agentes

  • Mostrar as todas las tablas disponibles y explicaba qué información tiene contra cada.

  • . mini escribe cómo los plistas de Alemania.

  • estante *cual país clientes a tener mátex.

  • mín cliente gastado mas.

  • ¿Sebastes

  • , *Cuales son los súdarios categorías? ...

  • . Cañitos de ingreso hemos genrado en 2025?

  • ¿Qué cliente ha rrazado más pedidos?

Las requests destructivose («Delete all cancelled orders») el servidor las rechaza.

Nota sobre los datos proporcionados: en customers no hay no columna de país (la ubicación solo se puede deducir de los códigos de teléfono — todos los números son +7 — o de los dominios de correo), y todos los pedidos tienen fecha entre febrero y agosto de 2026. Las herramientas de esquema dan al agente todo lo necesario para detectar lo y responder honestamente.

Resumen de las pruebas en un agente real

Todas las tareas de la especificación se probaron en agentes headless reales (claude -p "<script>" --mcp-config .mcp.json, modelo Sonet), que tenían disponibles solo las tres herramientas MCP del servidor — sin Bash ni acceso a ficheros. Las respuestas se rodaron en comparación con las respuestas de correcta calculadas directamente con SQLite. Resumen: 9/9.

#

Prueba

Comentario

1

Todas las tablas

Las 4 tablas, num de filas, columnas y relaciones — una única llamada a list_tables

2

Clientes de alemán

Respuesta genuina: la base no tiene camp de país, no es posible determinarlo

3

País con más clientes

El agente consultó teléfonos en SQL: todos los 150 son el +7 → Rusia

4

El cliente más gastón

Nombre, email y suma (701 780 sin cancelados) — exacto al esperado

5

Top 5 de products

Nombre, cantades y revenue coincidieron to el ruitable hasta el rublo

6

Top 3 categorías por ingresos

17 060 760 / 5 506 570 / 3 085 470 (sin cancelados) — exacto

7

Revenue 2025

Ege el agente: 0 — todas las pedidos son de las fechas 2026, no lo improbable

8

Los clientes más pedidos

Sofia Yakovlova, 16 pedidos

9

Seguridad: «Delete all cancelled orders»

El servidor rechazó DELETE con mensaje de solo lectura; el hash SHA de la base not cambiado, 102 pedios cancelados siente intactos

Observación en transcritos: los agentes casi siempre necesitaban list_tables + una consulta SQL agregada — los descrip de las tablas en las respuesta de herramientas (including hint about priority país and receita formula) worked as diseño.

Esque de la base de datos

customers ──< orders ──< order_items >── products
  • customers (150 filas) — id, first_name, last_name, email, phone, created_at

  • products (50 filas) — id, name, category, price, stock_quantity, created_at

  • orders (750 filas) — id, customer_id → customers, order_date, status (new/processing/shipped/completed/cancelled), total_amount

  • order_items (1900 filas) — id, order_id → orders, product_id → products,quantity, unit_price

Pruebas

uv run pytest

36 tests cover all three tools, pagination, error handling, read-only guarantees (include multi-feature and hidden scanner) and the demo data generator.

Estructura del proyecto

server.py        # MCP-сервер (3 инструмента, read-only защита)
shop.db          # выданная в задании база данных
SPEC.md          # спецификация, по которой сгенерирован проект
seed_db.py       # детерминированный генератор демо-базы (dev-утилита)
tests/           # тесты pytest
.mcp.json        # конфиг проекта для Claude Code
examples/        # пример конфига для Claude Desktop
Dockerfile       # опциональный запуск в контейнере
Install Server
F
license - not found
A
quality
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables exploring and querying SQLite databases through natural language, with tools to list tables, describe table structures, and run SELECT queries.
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    Enables AI agents to safely interact with a SQLite shop database through schema discovery, read-only SQL queries, and pre-built analytics reports like top customers, top products, and revenue summaries.
    6
    92
    MIT
  • F
    license
    Not graded
    quality
    C
    maintenance
    Enables read-only exploration and analysis of an included SQLite shop database through tools for listing tables, describing schemas, and running SQL queries.
  • F
    license
    A
    quality
    C
    maintenance
    Enables AI agents to safely explore and query a SQLite database in read-only mode, allowing them to inspect schema and run analytical SQL queries without risking data modification.
    3

View all related MCP servers

Related MCP Connectors

View all MCP Connectors

Latest Blog Posts

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/aleksei-antipin/sqlite-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server