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 install2. Настройка окружения
# 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. Запуск 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 dev5. Открыть браузер
Перейдите по адресу: 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 сек)
Ключевые фрагменты кода для показа:
Определение инструмента (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;
}
};Защитный механизм (mcp-server/src/tools/execute-tool.ts)
const FORBIDDEN_KEYWORDS = ['DROP', 'DELETE', 'UPDATE'];
if (sql.includes(FORBIDDEN_KEYWORDS)) {
return { isError: true, text: '🚫 BLOCKED!' };
}Вызов инструментов ИИ (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:upMCP-сервер не запускается
# 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"}]}'📚 Ресурсы
🎓 Ключевые выводы
Не позволяйте ИИ писать SQL — разработчик контролирует доступ к данным
MCP Pattern — стандартизированный вызов инструментов
Безопасность прежде всего — несколько уровней защиты
Экономическая эффективность — DeepSeek V4 Pro ~$0.5/1M токенов
Готовность к продакшену — пул соединений, валидация, обработка ошибок
📝 Лицензия
Лицензия MIT — свободно используйте для обучения, видео или продакшена!
Сделано с ❤️ для вьетнамского сообщества разработчиков
Подписывайтесь и делитесь, чтобы поддержать создание ещё большего количества качественного контента! 🚀
This server cannot be deployed
Maintenance
Related MCP Connectors
Text-to-SQL MCP server: read-only queries on PostgreSQL, MySQL and SQL Server with your real schema
Draxlr's remote MCP server connects AI assistants to your SQL databases and dashboards. Explore schemas, run read-only queries, manage saved queries and dashboards, and export results, all with row-level security so each user sees only their own data.
- dataOAuthco.thinair
PostgreSQL, MySQL, and SQL Server in one session. 26 read-only MCP tools for AI agents.
Hosted PostgreSQL MCP server for Claude, ChatGPT and Cursor, with each action switched per account.
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.9 npm10ISC
- AlicenseAqualityCmaintenanceAn 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 gradedqualityDmaintenanceRead-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 npmMIT
- AlicenseAqualityDmaintenanceMCP server for PostgreSQL that enables safe read-only database queries, table schema inspection, and query execution planning.618 npmBSD 3-Clause