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 install2. 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_keys3. Arrancar PostgreSQL
pnpm docker:upLa 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 dev5. 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 → PostgreSQLNarració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:
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;
}
};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!' };
}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:upEl servidor MCP no arranca
# Check environment variables
cat mcp-server/.env
# Test database connection
cd mcp-server && pnpm tsx src/db.tsProblemas 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
No dejes que la IA escriba SQL: el desarrollador controla el acceso a los datos
Patrón MCP: llamada a herramientas estandarizada
La seguridad es lo primero: múltiples capas de protección
Rentable: DeepSeek V4 Pro ~0,5 $/1M tokens
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! 🚀
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 Servers
- AlicenseNot gradedqualityDmaintenanceProvides 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.149ISC
- AlicenseAqualityAmaintenanceAn 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.115MIT
- AlicenseNot gradedqualityCmaintenanceRead-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.539MIT
- AlicenseAqualityBmaintenanceMCP server for PostgreSQL that enables safe read-only database queries, table schema inspection, and query execution planning.634BSD 3-Clause
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.
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/longliaprono1-blip/chatbot-ai-mcp-demo'
If you have feedback or need assistance with the MCP directory API, please join our Discord server