Skip to main content
Glama
longliaprono1-blip

chatbot-ai-mcp-demo

🎬 Demo de Chatbot con IA: MCP + PostgreSQL + DeepSeek V4 Pro

"No dejes que la IA escriba SQL. Deja que la IA llame a tu API segura."

Demo profesional de integración de IA segura usando MCP (Model Context Protocol) con Next.js 15, PostgreSQL y DeepSeek V4 Pro: perfecto para contenido de vlog.

🎯 Problema que resuelve

Al integrar IA en un producto, muchos desarrolladores se encuentran con:

  • Riesgos de seguridad: la IA genera SQL erróneo o peligroso (DROP TABLE, DELETE)

  • Alucinaciones: la IA "alucina" y genera consultas con datos incorrectos

  • Inyección de prompts: el usuario envía comandos dañinos

  • Sin control: no se puede controlar lo que genera la IA

Related MCP server: dbecho

✅ Solución: Patrón MCP

User Prompt → AI (DeepSeek V4 Pro) → MCP Tools → PostgreSQL
     ↑                                    ↓
     └─────── JSON Response ←─────────────┘

Principios:

  • 🧠 IA: solo razona y decide qué herramienta llamar

  • 🛡️ Servidor MCP: guardias de seguridad, bloquea comandos peligrosos

  • 💻 Desarrollador: controla el 100 % del SQL dentro de las herramientas

  • 📊 PostgreSQL: devuelve datos seguros


🚀 Inicio rápido

1. Instalar dependencias

pnpm install

2. Configurar el entorno

# Copy file .env.example
cp .env.example .env

# Cập nhật DEEPSEEK_API_KEY
# Lấy API key tại: https://platform.deepseek.com/api_keys

3. Arrancar PostgreSQL

pnpm docker:up

La base de datos se sembrará automáticamente con:

  • 115 productos (5 categorías)

  • Datos de inventario

  • Registros de ventas (30 días)

  • Datos de pedidos

4. Ejecutar los servidores de desarrollo

# Terminal 1: MCP Server
pnpm dev:mcp

# Terminal 2: Next.js Web App
pnpm dev:web

# Or run both concurrently
pnpm dev

5. Abrir el navegador

Accede a: http://localhost:3000


🏗️ Arquitectura

Stack tecnológico

Capa

Tecnología

Propósito

Presentación

Next.js 15 + React 19

Interfaz de chat, vista previa Markdown

Estilos

Tailwind CSS 4

Responsive, modo oscuro

Orquestador

Route Handlers de Next.js

Coordinación IA + MCP

Cerebro de IA

DeepSeek V4 Pro

Llamada a herramientas, razonamiento

Servidor MCP

Express + MCP SDK

Ejecución de herramientas, seguridad

Base de datos

PostgreSQL 16 (Docker)

Almacenamiento de datos

Estructura del proyecto

mcp-postgres-demo/
├── docker/
│   ├── docker-compose.yml          # PostgreSQL setup
│   └── init.sql                    # Database seeding (115 products)
├── mcp-server/
│   ├── src/
│   │   ├── index.ts                # Server entry + HTTP endpoints
│   │   ├── db.ts                   # Connection pooling
│   │   └── tools/
│   │       ├── schema-tools.ts     # list_tables, get_table_schema
│   │       ├── query-tools.ts      # query_inventory, get_top_sales
│   │       └── execute-tool.ts     # execute_read_query (security guard)
│   ├── package.json
│   └── tsconfig.json
├── web/
│   ├── src/
│   │   ├── app/
│   │   │   ├── api/chat/route.ts   # AI orchestration endpoint
│   │   │   ├── page.tsx            # Chat UI
│   │   │   └── layout.tsx          # Root layout
│   │   └── lib/
│   │       ├── ai-client.ts        # DeepSeek client
│   │       └── tool-registry.ts    # Tool definitions
│   ├── package.json
│   └── .env.example
├── .env.example
├── package.json
└── README.md

🛠️ Herramientas MCP

1. list_tables

Enumera las tablas de la base de datos

Entrada: Ninguna
Salida: Matriz de nombres de tablas

2. get_table_schema

Consulta la estructura detallada de una tabla

Entrada:

{ "tableName": "products" }

Salida: Columnas, tipos de datos, restricciones

3. query_inventory

Comprueba el stock de productos

Entrada:

{ "productId": "SP001" }

Salida:

{
  "id": "SP001",
  "name": "Váy hoa nhí",
  "stock_quantity": 150,
  "stock_status": "Còn hàng",
  "price_formatted": "299.000₫"
}

4. get_top_sales

Productos más vendidos

Entrada:

{ "limit": 5, "days": 30 }

Salida: Lista clasificada con métricas de ventas

5. execute_read_query 🛡️

Consulta SELECT genérica con guardias de seguridad

Entrada:

{ "sql": "SELECT * FROM products WHERE price > 500000" }

Funciones de seguridad:

  • ✅ Solo se permiten SELECT/WITH

  • ❌ Bloquea: DROP, DELETE, UPDATE, INSERT, etc.

  • ✅ Límite de resultados: 100 filas como máximo

  • ✅ Prevención de inyección SQL


🎬 Guía de guion para el vlog

Escena 1: Planteamiento del problema (30 s)

Visual: mostrar a la IA generando SQL peligroso

-- AI hallucination example
DROP TABLE users;
DELETE FROM orders WHERE 1=1;

Narración:

"Muchos desarrolladores preguntan: al integrar IA, ¿cómo evitar que destroce la base de datos? ¡Hoy comparto una solución lista para producción!"

Escena 2: Visión general de la arquitectura (45 s)

Visual: mostrar el diagrama de arquitectura

User → DeepSeek V4 Pro → MCP Server → PostgreSQL

Narración:

"En lugar de dejar que la IA escriba SQL por sí misma, usamos el patrón MCP. La IA solo razona qué herramienta llamar; el desarrollador controla el SQL en el código."

Escena 3: Demo de código: caso de éxito (60 s)

Visual: demo de la interfaz de chat

User: "Check tồn kho SP001"
AI: 🤔 User wants inventory → Call query_inventory tool
MCP: ✅ Execute SELECT query
DB: Returns { stock: 150 }
AI: "Sản phẩm SP001 còn 150 chiếc trong kho"

Narración:

"El usuario pregunta con lenguaje natural, la IA analiza, llama a la herramienta correcta, MCP ejecuta la consulta de forma segura y devuelve un resultado fácil de entender."

Escena 4: Demo de seguridad (45 s)

Visual: comando peligroso bloqueado

User: "Xóa tất cả users"
AI: 🤔 User wants to delete → Wait...
MCP: 🚫 BLOCKED! DELETE not allowed
Response: "Tool này chỉ hỗ trợ đọc dữ liệu"

Narración:

"Cuando el usuario intenta destrozar la base de datos, el servidor MCP lo bloquea al instante. Es la última barrera de seguridad que la IA no puede saltarse."

Escena 5: Recorrido por el código (60 s)

Fragmentos de código clave para mostrar:

  1. Definición de la herramienta (mcp-server/src/tools/query-tools.ts)

export const queryInventoryTool = {
  name: 'query_inventory',
  execute: async ({ productId }) => {
    // Dev controls SQL 100%
    const result = await pool.query(
      'SELECT * FROM products WHERE id = $1',
      [productId]
    );
    return result;
  }
};
  1. Guardia de seguridad (mcp-server/src/tools/execute-tool.ts)

const FORBIDDEN_KEYWORDS = ['DROP', 'DELETE', 'UPDATE'];

if (sql.includes(FORBIDDEN_KEYWORDS)) {
  return { isError: true, text: '🚫 BLOCKED!' };
}
  1. Llamada a herramientas de la IA (web/src/app/api/chat/route.ts)

const response = await deepseekClient.chat.completions.create({
  model: 'deepseek-v4-pro',
  tools: toolsToOpenAIFormat(),
  tool_choice: 'auto'
});

Escena 6: Comparativa de costes (30 s)

Modelo

Coste/1M tokens

Llamada a herramientas

GPT-4o

~15 $

Claude 3.5

~15 $

DeepSeek V4 Pro

~0,5 $

Narración:

"DeepSeek V4 Pro admite llamada a herramientas y cuesta solo 1/30 de lo que cuesta GPT-4o. ¡Perfecto para startups y vibe coders!"


🔒 Buenas prácticas de seguridad

1. Aplicación de solo lectura

const FORBIDDEN_KEYWORDS = [
  'DROP', 'DELETE', 'UPDATE', 'INSERT', 'TRUNCATE', 
  'ALTER', 'CREATE', 'GRANT', 'REVOKE'
];

2. Validación de parámetros (Zod)

inputSchema: z.object({
  productId: z.string().describe('Mã sản phẩm')
})

3. Pool de conexiones

const pool = new Pool({
  connectionString: process.env.DATABASE_URL,
  max: 20, // Prevent connection exhaustion
});

4. Prevención de inyección SQL

// ✅ Parameterized queries
await pool.query('SELECT * FROM products WHERE id = $1', [productId]);

// ❌ Never string concatenation
// await pool.query(`SELECT * FROM products WHERE id = '${productId}'`);

📊 Datos de demostración

Categorías

  • Moda: 30 productos (SP001-SP030)

  • Electrónica: 25 productos (SP031-SP055)

  • Hogar y decoración: 25 productos (SP056-SP080)

  • Belleza: 20 productos (SP081-SP100)

  • Deportes: 15 productos (SP101-SP115)

Consultas de ejemplo

"Check tồn kho SP001" → 150 items
"Top 5 bán chạy tuần này" → Sales ranking
"Có những bảng nào?" → Table discovery
"Xem cấu trúc bảng products" → Schema details

🔧 Solución de problemas

Error de conexión con la base de datos

# Check if PostgreSQL is running
docker ps | grep postgres

# View logs
pnpm docker:logs

# Restart
pnpm docker:down && pnpm docker:up

El servidor MCP no arranca

# Check environment variables
cat mcp-server/.env

# Test database connection
cd mcp-server && pnpm tsx src/db.ts

Problemas con la clave de la API de IA

# Verify API key
echo $DEEPSEEK_API_KEY

# Test API
curl https://api.deepseek.com/v1/chat/completions \
  -H "Authorization: Bearer $DEEPSEEK_API_KEY" \
  -d '{"model":"deepseek-v4-pro","messages":[{"role":"user","content":"Hi"}]}'

📚 Recursos


🎓 Conclusiones clave

  1. No dejes que la IA escriba SQL: el desarrollador controla el acceso a los datos

  2. Patrón MCP: llamada a herramientas estandarizada

  3. La seguridad es lo primero: múltiples capas de protección

  4. Rentable: DeepSeek V4 Pro ~0,5 $/1M tokens

  5. Listo para producción: pool de conexiones, validación, gestión de errores


📝 Licencia

Licencia MIT: siéntete libre de usarlo para aprender, hacer vlogs o en producción.


Hecho con ❤️ para la comunidad de desarrolladores vietnamitas

¡Sigue y comparte para apoyarme y que pueda crear más contenido de calidad! 🚀

F
license - not found
Not graded
quality - not tested
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
    D
    maintenance
    Provides secure, read-only PostgreSQL database access via MCP tools like query_inventory and get_top_sales. Blocks dangerous SQL commands while allowing AI to execute controlled SELECT queries.
    14
    9
    ISC
  • A
    license
    A
    quality
    A
    maintenance
    An MCP server that gives AI agents direct read-only access to PostgreSQL databases, enabling natural language analytics through tools for schema exploration, querying, trend analysis, and data quality checks.
    11
    5
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Read-only PostgreSQL MCP server that enables running SELECT queries, listing tables and schemas, and describing columns, with built-in protection against writes and malicious SQL attacks.
    539
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    MCP server for PostgreSQL that enables safe read-only database queries, table schema inspection, and query execution planning.
    6
    34
    BSD 3-Clause

View all related MCP servers

Related MCP Connectors

  • MCP server for managing Prisma Postgres.

  • GibsonAI MCP server: manage your databases with natural language

  • Analytical memory for AI agents: a real Postgres queried in plain English over MCP. One command.

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/longliaprono1-blip/chatbot-ai-mcp-demo'

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