Skip to main content
Glama
longliaprono1-blip

chatbot-ai-mcp-demo

🎬 AI Chatbot Demo: MCP + PostgreSQL + DeepSeek V4 Pro

«Не позволяйте ИИ писать SQL. Пусть ИИ вызывает ваш безопасный API.»

Профессиональное демо безопасной интеграции ИИ с использованием MCP (Model Context Protocol) с Next.js 15, PostgreSQL и DeepSeek V4 Pro — идеально для видеоконтента.

🎯 Решаемая проблема

При интеграции ИИ в продукт многие разработчики сталкиваются с:

  • ❌ Риски безопасности: ИИ создаёт неправильный или опасный SQL (DROP TABLE, DELETE)

  • ❌ Галлюцинации: ИИ «галлюцинирует», создавая неверные запросы к данным

  • ❌ Prompt injection: Пользователь передаёт вредоносные команды

  • ❌ Отсутствие контроля: Невозможно контролировать, что создаёт ИИ

Related MCP server: dbecho

✅ Решение: MCP Pattern

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

Принципы:

  • 🧠 ИИ: Только рассуждает, решает, какой инструмент вызвать

  • 🛡️ MCP Server: Охранные механизмы, блокирует опасные команды

  • 💻 Разработчик: Контролирует 100% SQL в инструментах

  • 📊 PostgreSQL: Возвращает безопасные данные


🚀 Быстрый старт

1. Установка зависимостей

pnpm install

2. Настройка окружения

# 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. Запуск PostgreSQL

pnpm docker:up

База данных будет автоматически заполнена:

  • 115 товаров (5 категорий)

  • Данные об остатках

  • Записи о продажах (30 дней)

  • Данные о заказах

4. Запуск серверов разработки

# Terminal 1: MCP Server
pnpm dev:mcp

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

# Or run both concurrently
pnpm dev

5. Открыть браузер

Перейдите по адресу: http://localhost:3000


🏗️ Архитектура

Технологический стек

Слой

Технология

Назначение

Презентация

Next.js 15 + React 19

Чат-интерфейс, Markdown-превью

Стилизация

Tailwind CSS 4

Адаптивность, тёмная тема

Оркестратор

Next.js Route Handlers

Координация ИИ + MCP

Мозг ИИ

DeepSeek V4 Pro

Вызов инструментов, рассуждения

MCP Server

Express + MCP SDK

Выполнение инструментов, безопасность

База данных

PostgreSQL 16 (Docker)

Хранение данных

Структура проекта

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

🛠️ MCP-инструменты

1. list_tables

Перечисляет таблицы в базе данных

Входные данные: Нет
Выходные данные: Массив имён таблиц

2. get_table_schema

Просмотр подробной структуры таблицы

Входные данные:

{ "tableName": "products" }

Выходные данные: Колонки, типы данных, ограничения

3. query_inventory ⭐

Проверка остатков товара

Входные данные:

{ "productId": "SP001" }

Выходные данные:

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

4. get_top_sales ⭐

Топ самых продаваемых товаров

Входные данные:

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

Выходные данные: Ранжированный список с метриками продаж

5. execute_read_query 🛡️

Универсальный SELECT-запрос с защитными механизмами

Входные данные:

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

Функции безопасности:

  • ✅ Разрешены только SELECT/WITH

  • ❌ Блокируются: DROP, DELETE, UPDATE, INSERT и т.д.

  • ✅ Лимит результатов: максимум 100 строк

  • ✅ Защита от SQL-инъекций


🎬 Руководство по сценарию видео

Сцена 1: Постановка проблемы (30 сек)

Визуал: Показать, как ИИ генерирует опасный SQL

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

Озвучка:

«Многие разработчики спрашивают: при интеграции ИИ как сделать, чтобы он не сломал базу данных? Сегодня я покажу production-ready решение!»

Сцена 2: Обзор архитектуры (45 сек)

Визуал: Показать диаграмму архитектуры

User → DeepSeek V4 Pro → MCP Server → PostgreSQL

Озвучка:

«Вместо того чтобы позволять ИИ писать SQL самостоятельно, мы используем MCP Pattern. ИИ только рассуждает, какой инструмент вызвать, а разработчик контролирует SQL в коде.»

Сцена 3: Демо кода — успешный сценарий (60 сек)

Визуал: Демо чат-интерфейса

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"

Озвучка:

«Пользователь задаёт вопрос естественным языком, ИИ анализирует, вызывает нужный инструмент, MCP выполняет безопасный запрос и возвращает понятный результат!»

Сцена 4: Демо безопасности (45 сек)

Визуал: Заблокированная опасная команда

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"

Озвучка:

«Когда пользователь пытается сломать базу данных, MCP-сервер мгновенно блокирует! Это последний рубеж безопасности, который ИИ не может обойти.»

Сцена 5: Разбор кода (60 сек)

Ключевые фрагменты кода для показа:

  1. Определение инструмента (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. Защитный механизм (mcp-server/src/tools/execute-tool.ts)

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

if (sql.includes(FORBIDDEN_KEYWORDS)) {
  return { isError: true, text: '🚫 BLOCKED!' };
}
  1. Вызов инструментов ИИ (web/src/app/api/chat/route.ts)

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

Сцена 6: Сравнение стоимости (30 сек)

Модель

Стоимость/1M токенов

Вызов инструментов

GPT-4o

~$15

✅

Claude 3.5

~$15

✅

DeepSeek V4 Pro

~$0.5

✅

Озвучка:

«DeepSeek V4 Pro поддерживает вызов инструментов, а цена составляет всего 1/30 от GPT-4o. Идеально для стартапов и vibe-кодеров!»


🔒 Лучшие практики безопасности

1. Принудительный режим «только чтение»

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

2. Валидация параметров (Zod)

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

3. Пул соединений

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

4. Защита от 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}'`);

📊 Демо-данные

Категории

  • Fashion: 30 товаров (SP001-SP030)

  • Electronics: 25 товаров (SP031-SP055)

  • Home & Living: 25 товаров (SP056-SP080)

  • Beauty: 20 товаров (SP081-SP100)

  • Sports: 15 товаров (SP101-SP115)

Примеры запросов

"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

🔧 Устранение неполадок

Не удаётся подключиться к базе данных

# Check if PostgreSQL is running
docker ps | grep postgres

# View logs
pnpm docker:logs

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

MCP-сервер не запускается

# Check environment variables
cat mcp-server/.env

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

Проблемы с ключом AI API

# 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"}]}'

📚 Ресурсы


🎓 Ключевые выводы

  1. Не позволяйте ИИ писать SQL — разработчик контролирует доступ к данным

  2. MCP Pattern — стандартизированный вызов инструментов

  3. Безопасность прежде всего — несколько уровней защиты

  4. Экономическая эффективность — DeepSeek V4 Pro ~$0.5/1M токенов

  5. Готовность к продакшену — пул соединений, валидация, обработка ошибок


📝 Лицензия

Лицензия MIT — свободно используйте для обучения, видео или продакшена!


Сделано с ❤️ для вьетнамского сообщества разработчиков

Подписывайтесь и делитесь, чтобы поддержать создание ещё большего количества качественного контента! 🚀

Related MCP Connectors

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.
    9 npm
    10
    ISC
  • A
    license
    A
    quality
    C
    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
    D
    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.
    1,043 npm
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    MCP server for PostgreSQL that enables safe read-only database queries, table schema inspection, and query execution planning.
    6
    18 npm
    BSD 3-Clause