Skip to main content
Glama
longliaprono1-blip

chatbot-ai-mcp-demo

🎬 AI 챗봇 데모: MCP + PostgreSQL + DeepSeek V4 Pro

"AI가 SQL을 작성하게 두지 마세요. AI가 안전한 API를 호출하게 하세요."

MCP(Model Context Protocol)를 Next.js 15, PostgreSQL, DeepSeek V4 Pro와 함께 사용한 안전한 AI 통합 전문 데모 - 블로그 콘텐츠에 완벽합니다.

🎯 해결하는 문제

AI를 제품에 통합할 때 많은 개발자가 다음과 같은 문제에 직면합니다:

  • 보안 위험: AI가 잘못되거나 위험한 SQL 생성 (DROP TABLE, DELETE)

  • 환각(Hallucination): AI가 잘못된 데이터를 조회하는 쿼리를 "환각"으로 생성

  • 프롬프트 인젝션: 사용자가 유해한 명령 전달

  • 통제 불가: AI가 무엇을 생성하는지 통제할 수 없음

Related MCP server: dbecho

✅ 해결책: MCP 패턴

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

원칙:

  • 🧠 AI: 추론만 수행, 어떤 도구를 호출할지 결정

  • 🛡️ MCP 서버: 보안 가드, 위험한 명령 차단

  • 💻 개발자: 도구 내 SQL을 100% 통제

  • 📊 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

채팅 UI, Markdown 미리보기

스타일링

Tailwind CSS 4

반응형, 다크 모드

오케스트레이터

Next.js Route Handlers

AI + MCP 조정

AI 브레인

DeepSeek V4 Pro

도구 호출, 추론

MCP 서버

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초)

화면: AI가 위험한 SQL을 생성하는 모습

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

내레이션:

"많은 개발자들이 묻습니다: AI를 통합할 때, 어떻게 하면 AI가 데이터베이스를 망가뜨리지 않게 할 수 있을까요? 오늘은 프로덕션에 바로 적용 가능한 솔루션을 공유합니다!"

장면 2: 아키텍처 개요 (45초)

화면: 아키텍처 다이어그램 표시

User → DeepSeek V4 Pro → MCP Server → PostgreSQL

내레이션:

"AI가 직접 SQL을 작성하게 하는 대신, MCP 패턴을 사용합니다. AI는 어떤 도구를 호출할지 추론만 하고, 개발자는 코드에서 SQL을 통제합니다."

장면 3: 코드 데모 - 성공 사례 (60초)

화면: 채팅 UI 데모

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"

내레이션:

"사용자가 자연스럽게 질문하면, AI가 분석하고 올바른 도구를 호출하며, 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 서버가 즉시 차단합니다! 이것이 AI가 우회할 수 없는 최종 보안 장벽입니다."

장면 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. AI 도구 호출 (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는 도구 호출을 지원하면서 가격은 GPT-4o의 1/30에 불과합니다. 스타트업과 바이브 코더에게 완벽합니다!"


🔒 보안 모범 사례

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}'`);

📊 데모 데이터

카테고리

  • 패션: 30개 제품 (SP001-SP030)

  • 전자제품: 25개 제품 (SP031-SP055)

  • 홈 & 리빙: 25개 제품 (SP056-SP080)

  • 뷰티: 20개 제품 (SP081-SP100)

  • 스포츠: 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. AI가 SQL을 작성하게 두지 마세요 - 개발자가 데이터 접근을 통제

  2. MCP 패턴 - 표준화된 도구 호출

  3. 보안 우선 - 다중 보호 계층

  4. 비용 효율성 - DeepSeek V4 Pro ~$0.5/1M 토큰

  5. 프로덕션 준비 완료 - 커넥션 풀링, 검증, 오류 처리


📝 라이선스

MIT 라이선스 - 학습, 블로그, 프로덕션에 자유롭게 사용하세요!


베트남 개발자 커뮤니티를 위해 ❤️로 제작되었습니다

팔로우하고 공유하여 더 많은 고품질 콘텐츠를 제작할 수 있도록 응원해 주세요! 🚀

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