Customer MCP Server
by Sukkamit
README.md
[](https://m8ven.ai/mcp/sukkamit-customer-mcp-server-1wm9u7)
# Customer MCP Server
Customer MCP Server เป็นโปรเจกต์สำหรับเชื่อมต่อ LLM กับข้อมูลลูกค้า โดยใช้ Model Context Protocol (MCP) เพื่อให้ AI Client สามารถเข้าถึงข้อมูลลูกค้าอย่างปลอดภัยและมีกรอบควบคุมที่ชัดเจน
## ภาพรวมของระบบ
ระบบนี้ออกแบบมาเพื่อให้ LLM สามารถถามข้อมูลลูกค้าได้ผ่านเครื่องมือที่กำหนดไว้เท่านั้น ไม่ต้องเข้าถึงฐานข้อมูลโดยตรง
### สิ่งที่รองรับ
- ดึงข้อมูลลูกค้าเบื้องต้น
- ค้นหาประวัติการสื่อสารลูกค้าแบบ semantic search ด้วย vector embedding
- สรุปข้อมูลการซื้อและธุรกรรมทางการเงินแบบ exact value
- บันทึก audit log ของธุรกรรม
- ป้องกัน prompt injection และการเข้าถึงข้อมูลที่ไม่ได้รับอนุญาต
## สถาปัตยกรรม
```text
LLM Client
|
| MCP Protocol
v
MCP Server (Python)
|
+-------------------+
| |
v v
Semantic Search SQL / Financial
PostgreSQL + pgvector PostgreSQL
```
## ฟีเจอร์หลัก
### 1. Customer Profile
- ดึงข้อมูลพื้นฐานของลูกค้า เช่น customer_id, name, email, phone, created_at
### 2. Interaction Semantic Search
- ค้นหาประวัติการสนทนา/interaction ของลูกค้าโดยใช้ embedding vector
- เหมาะสำหรับการค้นหาความหมายในคำถามที่เป็นคำกว้าง เช่น refund issue, complaint, billing concern
### 3. Financial Summary
- คำนวณจำนวนคำสั่งซื้อและยอดซื้อรวมจากฐานข้อมูล
- ใช้ SQL aggregation เพื่อให้ได้ค่าที่ถูกต้องและเชื่อถือได้
- คืน audit log ของธุรกรรมพร้อม hash reference
## Hybrid Query Example
ตัวอย่างคำถาม:
"ลูกค้าเคยแจ้งปัญหาอะไร และมียอดซื้อทั้งหมดเท่าไร"
Flow:
search_customer_interactions()
|
v
pgvector similarity search
+
get_customer_purchase_summary()
|
v
SQL aggregation
|
v
Combined verified response
Process:
1. MCP Server เรียก semantic search
จาก interaction_history ด้วย pgvector
2. MCP Server เรียก financial summary
จาก purchase_orders ด้วย SQL aggregation
3. รวมผลลัพธ์:
- Customer Context
- Relevant Interaction
- Exact Financial Amount
ส่งกลับไปยัง LLM
### 4. Security Guardrails
- ตรวจจับ prompt injection patterns
- ตรวจสอบ customer_id ก่อนเข้าถึงข้อมูล
- จำกัดให้เข้าถึงข้อมูลผ่าน MCP tools เท่านั้น
## เทคโนโลยีที่ใช้
- Python 3.12+
- FastMCP
- asyncpg
- pydantic
- openai
- google-genai
- PostgreSQL 17 + pgvector
- Docker Compose
## โครงสร้างโปรเจกต์
```text
customer-mcp/
├── app/
│ ├── config.py
│ ├── database.py
│ ├── embeddings.py
│ ├── mcp_server.py
│ ├── security.py
│ └── tools/
│ ├── customer.py
│ ├── financial.py
│ └── semantic_search.py
├── docs/
│ └── ARCHITECTURE.md
├── sql/
│ ├── 01_extensions.sql
│ ├── 02_schema.sql
│ ├── 03_indexes.sql
│ ├── 04_seed.sql
│ └── 05_security.sql
├── docker-compose.yml
├── requirements.txt
├── test_customer.py
├── test_embedding.py
├── test_financial.py
├── test_search.py
├── test_security.py
└── README.md
```
## ข้อกำหนดเบื้องต้น
- Python 3.12 หรือใหม่กว่า
- Docker Desktop
- Network access สำหรับติดตั้ง package จาก PyPI
## การติดตั้งและตั้งค่า
### 1. สร้าง virtual environment
```bash
py -3.12 -m venv venv
```
บน Windows:
```bash
venv\Scripts\activate
```
### 2. ติดตั้ง dependency
```bash
pip install -r requirements.txt
```
### 3. ตั้งค่า environment variables
สร้างไฟล์ `.env` โดยมีตัวอย่างดังนี้
```env
DATABASE_URL=postgresql://mcp_readonly_user:CHANGE_ME@localhost:5432/customer_mcp
GEMINI_API_KEY=your_gemini_api_key_here
```
### 4. เริ่มฐานข้อมูล PostgreSQL
```bash
docker compose up -d
```
Docker Compose จะสร้าง PostgreSQL + pgvector container และ initialize database อัตโนมัติจาก SQL scripts ใน folder sql/
หมายเหตุ:
SQL scripts ใน docker-entrypoint-initdb.d จะทำงานเฉพาะครั้งแรกที่สร้าง PostgreSQL volume เท่านั้น
หากต้องการ initialize ใหม่ทั้งหมด:
docker compose down -v
docker compose up -d
### Initialization order
sql/01_extensions.sql
Enable PostgreSQL extensions
Enable pgvector
sql/02_schema.sql
Create customer tables
Create interaction history table
Create purchase tables
Create immutable audit structure
sql/03_indexes.sql
Create database indexes
Create pgvector HNSW index สำหรับ semantic search
sql/04_seed.sql
Insert demo customer data
Insert interaction history
Insert purchase records
Insert audit records
sql/05_security.sql
Create read-only database user
Grant SELECT permission
ตรวจสอบ container
```bash
docker ps
```
### 5. Run MCP Server
```bash
python -m app.mcp_server
```
### MCP Inspector
สามารถตรวจสอบ MCP Tools ผ่าน UI ได้ด้วย
```bash
mcp-inspector python -m app.mcp_server
```
## MCP Tools ที่มีอยู่
### get_customer_profile
ดึงข้อมูลโปรไฟล์ของ customer
Data source:
- customers table
คืนค่า:
- customer_id
- first_name
- last_name
- email
- phone
- created_at
ตัวอย่าง input:
```json
{
"customer_id": "550e8400-e29b-41d4-a716-446655440000"
}
```
### search_customer_interactions
Semantic search สำหรับค้นหา Interaction History ผ่าน pgvector
ตัวอย่าง input:
```json
{
"customer_id": "550e8400-e29b-41d4-a716-446655440000",
"query": "refund issue",
"limit": 3
}
```
### get_customer_purchase_summary
ดึงข้อมูลยอดซื้อแบบ Exact Value จาก SQL Aggregation
ตัวอย่าง input:
```json
{
"customer_id": "550e8400-e29b-41d4-a716-446655440000"
}
```
## Available MCP Tools
| Tool | Purpose |
|---|---|
| get_customer_profile | Retrieve customer profile information |
| search_customer_interactions | Semantic search customer conversation history |
| get_customer_purchase_summary | Retrieve exact financial summary and audit log |
## การทดสอบ (Testing)
โปรเจกต์นี้ใช้ `pytest` สำหรับการทดสอบ (Unit & Integration Tests) เพื่อความมั่นใจในความถูกต้องของข้อมูลและความปลอดภัย
## หมายเหตุด้านความปลอดภัย
- LLM ไม่สามารถเข้าถึง Database โดยตรง
- การเข้าถึงข้อมูลต้องผ่าน MCP Tools เท่านั้น
- ใช้ Input Validation สำหรับ customer_id
- ตรวจจับ Prompt Injection Pattern
- Financial Data ใช้ SQL Aggregation เพื่อคืนค่า Exact Value
- Audit Log เป็น Immutable Append Only Structure
- Database User สำหรับ MCP ใช้ Least Privilege Permission
- ไม่อนุญาต UPDATE / DELETE / DDL Operation
This server cannot be deployed
Maintenance
ActivitySlowing
ResponsivenessNo issues