Database MCP Server
by tomtomjskim
README.md
# Database MCP Server
ð **Enterprise-Ready Multi-Database MCP Server**
Model Context Protocol (MCP) ìë²ë¡ **ë€ì€ ë°ìŽí°ë² ìŽì€**ì AI ììŽì íž ê°ì ìì íê³ íšìšì ìž íµì ì ì ê³µí©ëë€.
## ð 죌ì í¹ì§
- ð¢ **MSA í겜 ì벜 ì§ì**: ì¬ë¬ ë§ìŽí¬ë¡ìë¹ì€ DB륌 íëì MCP ìë²ìì êŽëЬ
- ð **ìí°íëŒìŽìŠêž 볎ì**: ìœêž° ì ì©, SSL/TLS, 쿌늬 ê²ìŠ, ê°ì¬ ë¡ê¹
- ð **íŽëŒì°ë ë€ìŽí°ëž**: AWS RDS, Azure Database, Google Cloud SQL ì벜 ì§ì
- â¡ **ê³ ì±ë¥**: ì°ê²° íë§, ì§ë¥í ìºì±, ë³ë ¬ 쿌늬 ì²ëЬ
- ð€ **AI ì¹íì **: ìì°ìŽ ì¿ŒëŠ¬, ì€í€ë§ ë¶ì, ë°ìŽí° íì§ ë¶ì
## ê°ì
ìŽ íë¡ì ížë Anthropicì Model Context Protocolì ì¬ì©íì¬ Claudeì ê°ì AI 몚ëžìŽ **ì¬ë¬ ë°ìŽí°ë² ìŽì€ì ëìì** ìížìì©í ì ìëë¡ íë ê³ êž MCP ìë²ì
ëë€. MSA(Microservices Architecture) í겜ìì ë¶ì°ë ë°ìŽí°ë² ìŽì€ë€ì íµí© êŽëЬíë©°, ìì°ìŽë¥Œ íµí í¬ë¡ì€ ë°ìŽí°ë² ìŽì€ 쿌늬, ì€í€ë§ íì, ë°ìŽí° ë¶ì ë±ì êž°ë¥ì ìì íê² ì ê³µí©ëë€.
## ð Claude Codeìì ì¬ì©íêž°
Claude Code í겜ìì ìŽ DB MCP ìë²ë¥Œ ì¬ì©íë €ë©Ž [Claude Code ì¬ì© ê°ìŽë](./docs/CLAUDE_CODE_GUIDE.md)륌 ì°žì¡°íìžì.
**ë¹ ë¥ž ìì:**
1. í겜 ë³ì ì€ì (`.env` íìŒ)
2. MCP ìë² ì€ì ì ì¶ê°
3. Claudeìê² "ë°ìŽí°ë² ìŽì€ ì€í€ë§ë¥Œ ë¶ìíŽì£Œìžì" ìì²
4. ìì°ìŽë¡ ë°ìŽí° ì¡°í ë° ë¶ì
## ì§ì ë°ìŽí°ë² ìŽì€
- â
**MySQL** - ìì ì§ì (ìšíë 믞ì€, AWS RDS, Azure Database)
- â
**PostgreSQL** - ìì ì§ì (ìšíë 믞ì€, AWS RDS, Azure Database, Google Cloud SQL)
- ð **SQLite** (ê°ë° ìì )
- ð **ClickHouse** (ê°ë° ìì )
### ë°ìŽí°ë² ìŽì€ ì í ê°ìŽë
#### MySQL vs PostgreSQL ë¹êµ
| êž°ë¥ | MySQL | PostgreSQL |
|------|-------|------------|
| **ì±ë¥** | ìœêž° ìµì í, ì¹ ì í늬ìŒìŽì
ì ì í© | ë³µì¡í 쿌늬, ëì©ë ë°ìŽí° ì²ëЬì ì í© |
| **ë°ìŽí° íì
** | Ʞ볞 ë°ìŽí° íì
ì§ì | JSON, Array, 컀ì€í
íì
ë± íë¶í ì§ì |
| **íì¥ì±** | ìí íì¥ (ì€ë©) ì°ì | ìì§ íì¥ ì°ì, ë³ë ¬ ì²ëЬ ì§ì |
| **ACID ì€ì** | InnoDB ìì§ ì¬ì© ì ìì ì§ì | ìì í ACID ì€ì |
| **ê³ êž êž°ë¥** | Ʞ볞 êž°ë¥ ì€ì¬ | Window Functions, CTE, Full-text Search ë± |
| **íŽëŒì°ë ì§ì** | AWS RDS, Azure Database | AWS RDS, Azure Database, Google Cloud SQL |
#### ìŽëí° ìë ì í
ìì€í
ìŽ ìëìŒë¡ ë°ìŽí°ë² ìŽì€ íì
ì ê°ì§í©ëë€:
1. **ëª
ìì ì§ì **: `DB_TYPE` í겜ë³ì ëë config.type ì€ì
2. **í¬íž êž°ë° ê°ì§**:
- 3306 â MySQL
- 5432 â PostgreSQL
3. **ížì€ížëª
êž°ë° ê°ì§**:
- ížì€ížëª
ì 'mysql' í¬íš â MySQL
- ížì€ížëª
ì 'postgres' í¬íš â PostgreSQL
4. **Ʞ볞ê°**: MySQL
#### ê¶ì¥ ì¬ì© ì¬ë¡
**MySQL ê¶ì¥:**
- ì¹ ì í늬ìŒìŽì
ë°±ìë
- ëšìí CRUD ìì
ì€ì¬
- ëì ëìì± ìœêž° ìì
- Ʞ졎 MySQL ìžíëŒ íì©
**PostgreSQL ê¶ì¥:**
- ë³µì¡í ë¶ì 쿌늬
- JSON ë°ìŽí° ì²ëЬ
- ì§ëЬ ì 볎 ìì€í
(PostGIS)
- ë°ìŽí° 묎결ì±ìŽ ì€ìí ì í늬ìŒìŽì
## MSA í겜ììì ë€ì€ DB ì°ê²°
MSA(Microservices Architecture) í겜ììë ì¬ë¬ ë°ìŽí°ë² ìŽì€ì ëìì ì ìíŽìŒ íë 겜ì°ê° ë§ìµëë€. ìŽ MCP ìë²ë ë ê°ì§ ë°©ë²ì ì§ìí©ëë€:
### ë°©ë² 1: ëšìŒ MCP ìë²ìì ë€ì€ DB ì§ì (ê¶ì¥)
íëì MCP ìë² ìžì€íŽì€ìì ì¬ë¬ ë°ìŽí°ë² ìŽì€ë¥Œ êŽëЬí©ëë€.
#### ì€ì íìŒ ë°©ì
`db-config.json` íìŒ ìì±:
```json
{
"connections": {
"user-service": {
"name": "user-service",
"type": "mysql",
"host": "user-db.cluster-xxx.rds.amazonaws.com",
"port": 3306,
"user": "readonly_user",
"password": "secure_password",
"database": "user_service",
"description": "ì¬ì©ì ìë¹ì€ DB",
"tags": ["microservice", "user", "mysql"]
},
"order-service": {
"name": "order-service",
"type": "postgresql",
"host": "order-db.cluster-yyy.rds.amazonaws.com",
"port": 5432,
"user": "readonly_user",
"password": "secure_password",
"database": "order_service",
"description": "죌묞 ìë¹ì€ DB",
"tags": ["microservice", "order", "postgresql"]
}
},
"defaultConnection": "user-service"
}
```
#### í겜ë³ì ë°©ì
```env
# ì¬ì©ì ìë¹ì€ DB
DB_USER_HOST=user-db.cluster-xxx.rds.amazonaws.com
DB_USER_PORT=3306
DB_USER_TYPE=mysql
DB_USER_USER=readonly_user
DB_USER_PASSWORD=secure_password
DB_USER_DATABASE=user_service
DB_USER_DESCRIPTION=ì¬ì©ì ìë¹ì€ DB
DB_USER_TAGS=microservice,user,mysql
DB_USER_WRITE_ENABLED=false
# 죌묞 ìë¹ì€ DB
DB_ORDER_HOST=order-db.cluster-yyy.rds.amazonaws.com
DB_ORDER_PORT=5432
DB_ORDER_TYPE=postgresql
DB_ORDER_USER=readonly_user
DB_ORDER_PASSWORD=secure_password
DB_ORDER_DATABASE=order_service
DB_ORDER_DESCRIPTION=죌묞 ìë¹ì€ DB
DB_ORDER_TAGS=microservice,order,postgresql
DB_ORDER_WRITE_ENABLED=false
# Ʞ볞 ì°ê²°
DB_DEFAULT_CONNECTION=user
```
#### Claude Desktop ì€ì (ë€ì€ DB)
```json
{
"mcpServers": {
"multi-database": {
"command": "node",
"args": ["path/to/db-mcp/dist/multi-database-server.js"],
"env": {
"DB_CONFIG_FILE": "./db-config.json"
}
}
}
}
```
#### Claude Code ì€ì (ë€ì€ DB - ê°ìíë ë°©ì)
**ê°ì ë ì€ì ë°©ì**: í겜ë³ì ê°ìí륌 íµí ì€ì ëšìí (8ê° â 3ê°)
`~/.claude.json` íìŒì ì¶ê°:
```json
{
"mcpServers": {
"db-mcp": {
"command": "node",
"args": ["/absolute/path/to/db-mcp/dist/multi-index.js"],
"env": {
"DB_CONFIG_FILE": "/absolute/path/to/db-mcp/db-config.json",
"LOG_LEVEL": "info",
"MCP_SERVER_NAME": "db-mcp"
}
}
}
}
```
**íµì¬ ê°ì ì **:
- â
**ë¶íìí dummy í겜ë³ì ì ê±°**: MYSQL_HOST, MYSQL_PORT, MYSQL_DB, MYSQL_USER, MYSQL_PASSWORD ë¶íì
- â
**ì§ì í ë©í°í
ëíž ìë²**: DB_CONFIG_FILEë§ìŒë¡ 몚ë ì°ê²° êŽëЬ
- â
**ìœë ë 벚 ê°ì **: `src/config/index.ts`ìì multi-DB 몚ë ìë ê°ì§
- â
**ì€ì ê°ìí**: í겜ë³ì 62.5% ê°ì (8ê° â 3ê°)
**ëì ì늬**:
1. `DB_CONFIG_FILE` í겜ë³ì ì¡Žì¬ ì multi-DB 몚ëë¡ ìë ì í
2. 몚ë ë°ìŽí°ë² ìŽì€ ì°ê²° ì 볎ë `db-config.json` íìŒìì êŽëЬ
3. í겜ë³ì ê²ìŠ ë¡ì§ ìë ì€íµìŒë¡ dummy ê° ë¶íì
**ê²ìŠ ë°©ë²**:
```bash
# MCP ìë² ì°ê²° íìž
claude mcp list
# í¬ì€ì²Ží¬ ì€í
# Claude Codeìì: "db-mcp ìë² í¬ì€ì²Ží¬ ì€ííŽì€"
```
### ë°©ë² 2: DBë³ ë³ë MCP ìë² (ê°ëší ë°©ë²)
ê° ë°ìŽí°ë² ìŽì€ë§ë€ ë³ëì MCP ìë² ìžì€íŽì€ë¥Œ ì€íí©ëë€.
#### Claude Desktop ì€ì (ë³ë ìë²)
```json
{
"mcpServers": {
"user-db": {
"command": "node",
"args": ["path/to/db-mcp/dist/index.js"],
"env": {
"DB_TYPE": "mysql",
"MYSQL_HOST": "user-db.cluster-xxx.rds.amazonaws.com",
"MYSQL_DB": "user_service"
}
},
"order-db": {
"command": "node",
"args": ["path/to/db-mcp/dist/index.js"],
"env": {
"DB_TYPE": "postgresql",
"POSTGRES_HOST": "order-db.cluster-yyy.rds.amazonaws.com",
"POSTGRES_DB": "order_service"
}
}
}
}
```
### ë€ì€ DB ì ì© êž°ë¥
ëšìŒ MCP ìë²ìì ë€ì€ DB륌 ì¬ì©í ë ì¶ê°ë¡ ì ê³µëë êž°ë¥:
#### 1. í¬ë¡ì€ ë°ìŽí°ë² ìŽì€ 쿌늬
```
"ì¬ì©ì ìë¹ì€ì 죌묞 ìë¹ì€ ë°ìŽí°ë¥Œ ë¹êµíŽì 볎ì¬ì€"
â ì¬ë¬ DBìì ë°ìŽí°ë¥Œ ì¡°ííì¬ íµí© ë¶ì
```
#### 2. ë°ìŽí°ë² ìŽì€ íê·ž íí°ë§
```
"microservice íê·žê° ë¶ì 몚ë DB ìí륌 íìžíŽì€"
â íê·ž êž°ë°ìŒë¡ DB 귞룹 êŽëЬ
```
#### 3. íµí© í¬ì€ì²Ží¬
```
"몚ë ë°ìŽí°ë² ìŽì€ ì°ê²° ìí륌 íë²ì íìžíŽì€"
â ì 첎 ìžíëŒ ìí 몚ëí°ë§
```
#### 4. ë°ìŽí°ë² ìŽì€ ê° êŽê³ ë¶ì
```
"ì¬ì©ì IDë¡ ëªšë ìë¹ì€ì êŽë š ë°ìŽí°ë¥Œ ì°Ÿìì€"
â ë§ìŽí¬ë¡ìë¹ì€ ê° ë°ìŽí° ì¶ì
```
## ð ì ê³µ êž°ë¥
### ð 1. ë€ì€ ë°ìŽí°ë² ìŽì€ ì°ê²° êŽëЬ
- **ð¢ MSA ì벜 ì§ì**: íëì MCP ìë²ìì ìì ê°ì ë§ìŽí¬ë¡ìë¹ì€ DB êŽëЬ
- **â¡ ê³ ì±ë¥ ì°ê²° íë§**: DBë³ ë
늜ì ìž ì°ê²° íë¡ ìµì íë 늬ìì€ êŽëЬ
- **ð ìë íìŒì€ë²**: ì°ê²° ëê¹ ì ìë ì¬ì°ê²° ë° ìí 복구
- **ð ì€ìê° ëªšëí°ë§**: ì°ê²° ìí, íì± ì¿ŒëŠ¬, ìëµ ìê° ì€ìê° ì¶ì
- **ð· íê·ž êž°ë° êŽëЬ**: í겜ë³, ìë¹ì€ë³ DB 귞룹 êŽëЬ (production, staging, analytics ë±)
### âïž 2. ê³ êž ì¿ŒëŠ¬ ì€í ë구 (Tools)
#### `list_databases` ð
- **êž°ë¥**: ì°ê²°ë 몚ë ë°ìŽí°ë² ìŽì€ ëª©ë¡ ë° ìí ì¡°í
- **ì¶ë ¥**: DB íì
, ì°ê²° ìí, íê·ž, ì€ëª
, ì±ë¥ ë©ížëŠ
- **íì©**: ì 첎 ìžíëŒ íí© íì
, í¬ì€ì²Ží¬
#### `execute_query` ð
- **êž°ë¥**: í¹ì ë°ìŽí°ë² ìŽì€ì SQL 쿌늬 ì€í
- **ì
ë ¥**: SQL 묞ììŽ, ëì DB, íëŒë¯ží°
- **ì¶ë ¥**: 구조íë 결곌 + ì€í ë©ížëŠ
- **볎ì**: ìœêž° ì ì© ì¿ŒëŠ¬ë§ íì©, SQL ìžì ì
ë°©ì§
#### `execute_dev_statement` ð
- **êž°ë¥**: ëª
ìì ìŒë¡ ì°êž°ê° íì©ë development ë°ìŽí°ë² ìŽì€ìì ëšìŒ DDL/DML ì€í
- **ì€ì **: JSONì `writeEnabled: true` ëë í겜ë³ì `DB_{NAME}_WRITE_ENABLED=true`
- **볎ì**: `production`, `prod`, `readonly` íê·ž ë° production ìë³ìê° ìë ì°ê²°ì ì€ì 곌 묎êŽíê² ì°šëš
- **ì í**: ëì ë°ìŽí°ë² ìŽì€ë¥Œ ë°ëì ì§ì íë©° í ë²ì íëì í
ìŽëž DDL ëë í DMLë§ íì©
#### `cross_database_query` ð
- **êž°ë¥**: ì¬ë¬ ë°ìŽí°ë² ìŽì€ìì ëì 쿌늬 ì€í ë° ê²°ê³Œ íµí©
- **ì
ë ¥**: ë°ìŽí°ë² ìŽì€ë³ 쿌늬 ë°°ìŽ
- **ì¶ë ¥**: íµí©ë 결곌ì
+ ì±ë¥ ë¹êµ
- **íì©**: ë§ìŽí¬ë¡ìë¹ì€ ê° ë°ìŽí° ë¹êµ, íµí© 늬í¬í
#### `natural_language_query` ð€
- **êž°ë¥**: ìì°ìŽë¥Œ SQLë¡ ë³ííì¬ ì€í
- **ì
ë ¥**: ìì°ìŽ ì§ë¬ž, ëì DB, 컚í
ì€íž
- **ì¶ë ¥**: ìì±ë SQL + ì€í 결곌 + ì 뢰ë
- **AI ì§ì**: ì€í€ë§ ì 볎 êž°ë° ì§ë¥í 쿌늬 ìì±
#### `database_health_check` ð¥
- **êž°ë¥**: ì 첎 ëë ê°ë³ ë°ìŽí°ë² ìŽì€ ìí ê²ì¬
- **ì¶ë ¥**: ìëµ ìê°, ì°ê²° í ìí, ì±ë¥ ì§í
- **íì©**: ìžíëŒ ëªšëí°ë§, ì¥ì ì¡°êž° ê°ì§
### ð 3. íµí© ì€í€ë§ ì 볎 늬ìì€ (Resources)
#### `database://connections` ð
- **ëŽì©**: 몚ë ì°ê²°ë ë°ìŽí°ë² ìŽì€ì ììž ì 볎
- **í¬íš**: ì°ê²° ì€ì , ìí, ë©íë°ìŽí°, íê·ž
#### `database://{db_name}/schema` ð
- **ëŽì©**: í¹ì ë°ìŽí°ë² ìŽì€ì ìì í ì€í€ë§ ì 볎
- **í¬íš**: í
ìŽëž, ë·°, íë¡ìì , ìžë±ì€, ìžëí€ êŽê³
- **ì§ì**: MySQL, PostgreSQL ê°ê° ìµì íë ë¶ì
#### `database://{db_name}/tables` ð
- **ëŽì©**: í
ìŽëžë³ ììž ì 볎 ë° íµê³
- **í¬íš**: ì»¬ëŒ ì 볎, ë°ìŽí° íì
, ì ìœì¡°ê±Ž, í ì, í¬êž°
### ð 4. ê³ êž ë°ìŽí° ë¶ì ë구
#### **ì€í€ë§ ë¶ì ìì§**
- **MySQL í¹í**: information_schema ìµì í 쿌늬
- **PostgreSQL í¹í**: pg_catalog ë° íì¥ ì 볎 ë¶ì
- **ì±ë¥ ìµì í**: ì§ë¥í ìºì±ìŒë¡ ë¹ ë¥ž ìëµ
#### **ë°ìŽí° íì§ ë¶ì**
- **ì»¬ëŒ íë¡íìŒë§**: íì
ë³ íµê³, NULL ë¹ìš, ê³ ì ê° ë¶ì
- **íšíŽ ê°ì§**: ìŽë©ìŒ, ì íë²íž, URL ë± ë°ìŽí° íšíŽ ìë ê°ì§
- **ìŽìì¹ íì§**: 3-ìê·žë§ ê·ì¹ êž°ë° ìì¹ ìŽìì¹ ë°ê²¬
- **íì§ ì ì**: ë°ìŽí° ìì±ë, ìŒêŽì±, ì íë ì¢
í© íê°
#### **êŽê³ ë¶ì**
- **í
ìŽëž êŽê³ ë§€í**: ìžëí€ êž°ë° ìë êŽê³ë ìì±
- **ë°ìŽí° ë§í¬ ì¶ì **: ë§ìŽí¬ë¡ìë¹ì€ ê° ë°ìŽí° ì°êŽì± ë¶ì
- **ì¢
ìì± ë¶ì**: ì€í€ë§ ë³ê²œ ìí¥ë íê°
## 볎ì ë° ì íì¬í
### 볎ì êž°ë¥
#### 1. 쿌늬 ì í
- **Ʞ볞 ìœêž° ì ì©**: `execute_query`ì `cross_database_query`ë DML/DDL êžì§
- **ê°ë° DB ì°êž° ë¶ëЬ**: `execute_dev_statement`ë§ ëª
ìì ìŒë¡ íì©ë development ì°ê²°ìì DDL/DML íì©
- **Production íë ëžë¡**: production/readonly ì°ê²°ì `writeEnabled` ì€ì 곌 묎êŽíê² ì°êž° êžì§
- **íìŽížëЬì€íž**: íì©ë SQL í€ìëë§ ì€í
- **구묞 ê²ìŠ**: SQL ìžì ì
ë°©ì§ë¥Œ ìí íì± ê²ìŠ
#### 2. ì€í ì í
```javascript
const SECURITY_LIMITS = {
MAX_EXECUTION_TIME: 30000, // 30ìŽ
MAX_RESULT_ROWS: 10000, // ìµë 10,000í
MAX_RESULT_SIZE: '50MB', // ìµë 50MB
MAX_QUERY_LENGTH: 10000, // ìµë 10,000ì
ALLOWED_KEYWORDS: [
'SELECT', 'FROM', 'WHERE', 'JOIN', 'ORDER BY',
'GROUP BY', 'HAVING', 'LIMIT', 'OFFSET',
'SHOW', 'DESCRIBE', 'EXPLAIN'
]
};
```
#### 3. ì ê·Œ ì ìŽ
- **ë°ìŽí°ë² ìŽì€ë³ ê¶í**: ê° DB ì°ê²°ë§ë€ ë³ë ê¶í ì€ì
- **í
ìŽëžë³ ì í**: í¹ì í
ìŽëž ì ê·Œ ì í ê°ë¥
- **ê°ì¬ ë¡ê¹
**: 몚ë 쿌늬 ì€í êž°ë¡ ì ì¥
#### 4. ë€ížìí¬ ë³Žì
- **TLS/SSL ìíží**: ì격 DB ì°ê²° ìíží ê°ì (AWS RDS, Azure DB ë±)
- **VPC ì§ì**: AWS VPC, Azure VNet ëŽ ì ê·Œ
- **ì°ê²° ì í**: IP íìŽížëЬì€íž ì§ì
- **ìê° êž°ë° ì¡ìžì€**: í¹ì ìê°ëìë§ ì ê·Œ íì©
- **Connection Timeout**: ì격 ì°ê²° ìê° ì í ì€ì
### êž°ë¥ ì íì¬í
#### 1. ì§ìíì§ ìë êž°ë¥
- â ìœêž° ë구륌 íµí ë°ìŽí° ìì ë° ì€í€ë§ ë³ê²œ
- â production/readonly ì°ê²°ì ë°ìŽí° ìì ë° ì€í€ë§ ë³ê²œ
- â ì¬ë¬ SQL 묞ì¥ì í ë²ì ì€ííë ê°ë° DB ì°êž°
- â ì ì¥ íë¡ìì ì€í
- â ížëìì
ì ìŽ (BEGIN, COMMIT, ROLLBACK)
- â ì¬ì©ì êŽëЬ ëª
ë ¹
- â íìŒ ìì€í
ì ê·Œ
#### 2. ì±ë¥ ì í
- **ëì ì°ê²°**: ìµë 10ê° ëì 쿌늬
- **ìºì±**: ì€í€ë§ ì 볎 5ë¶ ìºì
- **Rate Limiting**: ë¶ë¹ 100í 쿌늬 ì í
#### 3. ë°ìŽí° íì
ì í
- **BLOB/TEXT**: í° ë°ìŽí°ë ììœ ì ë³Žë§ ì ê³µ
- **JSON/XML**: 구조íë ííë¡ íì±íì¬ ì ê³µ
- **Binary**: Base64 ìžìœë©ìŒë¡ ì íì ì§ì
## ì€ì¹ ë° ì€ì
### 1. ì€ì¹
```bash
npm install
```
### 2. í겜 ì€ì
`.env` íìŒ ìì±:
#### MySQL ì€ì
```env
# MySQL ì°ê²° ì 볎 (ë¡ì»¬ ëë ì격)
DB_TYPE=mysql # ëª
ìì íì
ì§ì (ì íì¬í)
MYSQL_HOST=localhost # ëë AWS RDS ìëí¬ìžíž
MYSQL_PORT=3306
MYSQL_DB=mydb
MYSQL_USER=readonly_user
MYSQL_PASSWORD=secure_password
# ì격 DB ì€ì (AWS RDS ìì)
# MYSQL_HOST=mydb.cluster-xxx.us-east-1.rds.amazonaws.com
# MYSQL_SSL_MODE=REQUIRED
# MYSQL_SSL_CA=/path/to/rds-ca-2019-root.pem
# MYSQL_CONNECTION_TIMEOUT=60000
# MYSQL_ACQUIRECONNECTION_TIMEOUT=60000
```
#### PostgreSQL ì€ì
```env
# PostgreSQL ì°ê²° ì 볎 (ë¡ì»¬ ëë ì격)
DB_TYPE=postgresql # ëª
ìì íì
ì§ì (ì íì¬í)
POSTGRES_HOST=localhost # ëë AWS RDS ìëí¬ìžíž
POSTGRES_PORT=5432
POSTGRES_DB=mydb
POSTGRES_USER=readonly_user
POSTGRES_PASSWORD=secure_password
# ì격 DB ì€ì (AWS RDS PostgreSQL ìì)
# POSTGRES_HOST=mydb.cluster-xxx.us-east-1.rds.amazonaws.com
# POSTGRES_SSL_MODE=REQUIRED
# POSTGRES_SSL_CA=/path/to/rds-ca-2019-root.pem
# POSTGRES_CONNECTION_TIMEOUT=60000
```
#### ê³µíµ ë³Žì ì€ì
```env
MAX_QUERY_EXECUTION_TIME=30000
MAX_RESULT_ROWS=10000
ENABLE_QUERY_LOGGING=true
```
### 3. Claude Desktop ì€ì
#### MySQL ì¬ì© ì
`claude_desktop_config.json`ì ì¶ê°:
```json
{
"mcpServers": {
"database": {
"command": "node",
"args": ["path/to/db-mcp/dist/index.js"],
"env": {
"DB_TYPE": "mysql",
"MYSQL_HOST": "localhost",
"MYSQL_PORT": "3306",
"MYSQL_DB": "mydb",
"MYSQL_USER": "readonly_user",
"MYSQL_PASSWORD": "secure_password"
}
}
}
}
```
#### PostgreSQL ì¬ì© ì
`claude_desktop_config.json`ì ì¶ê°:
```json
{
"mcpServers": {
"database": {
"command": "node",
"args": ["path/to/db-mcp/dist/index.js"],
"env": {
"DB_TYPE": "postgresql",
"POSTGRES_HOST": "localhost",
"POSTGRES_PORT": "5432",
"POSTGRES_DB": "mydb",
"POSTGRES_USER": "readonly_user",
"POSTGRES_PASSWORD": "secure_password"
}
}
}
}
```
## ð¡ ì€ì ì¬ì© ìì
### ð¢ MSA í겜ììì íì©
#### ë§ìŽí¬ë¡ìë¹ì€ ê° ë°ìŽí° ë¶ì
```
ð¬ "user-serviceì order-serviceìì ìµê·Œ 1ì£ŒìŒ ëì ì ê· ê°ì
í ì¬ì©ìë€ì 죌묞 íšíŽì ë¹êµ ë¶ìíŽì€"
ð€ Claudeê° ìëìŒë¡:
1. user-service DBìì ìµê·Œ ê°ì
ì ì¡°í
2. order-service DBìì íŽë¹ ì¬ì©ìë€ì 죌묞 ë°ìŽí° ì¡°í
3. í¬ë¡ì€ ë°ìŽí°ë² ìŽì€ ë¶ììŒë¡ íšíŽ ìë³
4. íµí© 늬í¬íž ìì±
```
#### ì 첎 ìžíëŒ ëªšëí°ë§
```
ð¬ "production íê·žê° ë¶ì 몚ë ë°ìŽí°ë² ìŽì€ì ìí륌 íìžíê³ ì±ë¥ 묞ì ê° ìë ê³³ì ì°Ÿìì€"
ð€ 결곌:
- 5ê° íë¡ëì
DB ì€ 4ê° ì ì, 1ê° ê²œê³
- analytics-db: ìëµìê° 3.2ìŽ (íê· ì 2ë°°)
- ì°ê²° í ì¬ì©ë¥ : order-service 90% (죌ì íì)
```
### ð ê³ êž ë°ìŽí° ë¶ì
#### ë°ìŽí° íì§ ê²ì¬
```
ð¬ "몚ë ìë¹ì€ì ì¬ì©ì í
ìŽëžìì ìŽë©ìŒ íììŽ ì못ë ë°ìŽí°ë¥Œ ì°Ÿìì€"
ð€ ìë ì€í:
- user-service.users í
ìŽëž: ìŽë©ìŒ íšíŽ ê²ìŠ
- auth-service.profiles í
ìŽëž: ìŽë©ìŒ ì€ë³µ ê²ì¬
- notification-service.recipients í
ìŽëž: ì íšíì§ ìì ëë©ìž íì§
```
#### ì€í€ë§ ìí¥ë ë¶ì
```
ð¬ "user_id 컬ëŒì ì¬ì©íë 몚ë í
ìŽëžê³Œ êŽê³ë¥Œ ì°Ÿìì ì€í€ë§ ë³ê²œ ì ìí¥ë륌 ë¶ìíŽì€"
ð€ 결곌:
- ì§ì ì°žì¡°: 15ê° í
ìŽëž
- ê°ì ì°žì¡°: 8ê° í
ìŽëž
- ìí¥ ë°ë ìë¹ì€: user, order, payment, notification, analytics
- ê¶ì¥ì¬í: ëšê³ì ë§ìŽê·žë ìŽì
ê³í íì
```
### ð ìì°ìŽ ì¿ŒëŠ¬
#### ë¹ìŠëì€ ì§ë¬ž â SQL
```
ð¬ "ì§ë ë¬ ê°ì¥ ë§ìŽ í늰 ìí 칎í
ê³ ëŠ¬ë ëìŒ?"
ð€ ìì±ë SQL:
SELECT c.name, COUNT(oi.product_id) as sales_count
FROM order_items oi
JOIN products p ON oi.product_id = p.id
JOIN categories c ON p.category_id = c.id
WHERE oi.created_at >= DATE_SUB(NOW(), INTERVAL 1 MONTH)
GROUP BY c.id
ORDER BY sales_count DESC
LIMIT 1
```
#### ë³µì¡í ë¶ì 쿌늬
```
ð¬ "ê° ì§ìë³ë¡ ìë³ ë§€ì¶ ì¶ìŽë¥Œ 볎ì¬ì£Œê³ , ì ë
ëêž° ëë¹ ì±ì¥ë¥ ë ê³ì°íŽì€"
ð€ ìëìŒë¡:
1. ì§ì, ë ì§ë³ ë§€ì¶ ì§ê³
2. ì ë
ëêž° ë°ìŽí° ì¡°í
3. ì±ì¥ë¥ ê³ì°
4. ìê°í ê°ë¥í ííë¡ ê²°ê³Œ ì 늬
```
### ð ì€ìê° ëªšëí°ë§
#### ì±ë¥ ìŽì íì§
```
ð¬ "íì¬ ëëŠ¬ê² ì€íëê³ ìë ì¿ŒëŠ¬ê° ìë ë°ìŽí°ë² ìŽì€ë¥Œ ì°Ÿìì€"
ð€ ì€ìê° ë¶ì:
- order-service: 3ê° ì¿ŒëŠ¬ê° 10ìŽ ìŽì ì€í ì€
- analytics-db: ëì©ë ì§ê³ 쿌늬 ì§í ì€ (ì ì)
- user-service: 몚ë 쿌늬 1ìŽ ìŽëŽ (ìíž)
```
#### ì©ë êŽëЬ
```
ð¬ "ê° ë°ìŽí°ë² ìŽì€ì í
ìŽëžë³ í¬êž°ë¥Œ ì¡°ííê³ ì ëŠ¬ê° íìí í
ìŽëžì ì¶ì²íŽì€"
ð€ ë¶ì 결곌:
- log_events í
ìŽëž: 15GB (íí°ì
ë ê¶ì¥)
- user_sessions í
ìŽëž: 8GB (TTL ì€ì ê¶ì¥)
- temp_data í
ìŽëž: 3GB (ì 늬 ì€ìŒì€ íì)
```
## ðº ê°ë° ë¡ëë§µ & ë²ì íì€í 늬
### â
ìë£ë êž°ë¥ (v1.0)
- [x] **Phase 1**: Ʞ볞 MCP ìë² + MySQL ì°ê²°
- [x] **Phase 2**: 쿌늬 ì€í ë구 구í
- [x] **Phase 3**: ì€í€ë§ ì 볎 늬ìì€ ì¶ê°
- [x] **Phase 4**: PostgreSQL ì§ì íì¥
- [x] **Phase 5**: ë€ì€ ë°ìŽí°ë² ìŽì€ ì§ì (MSA ëì)
- [x] **Phase 6**: ê³ êž ë°ìŽí° ë¶ì êž°ë¥
- [x] **Phase 7**: ìí°íëŒìŽìŠêž 볎ì ë° ì±ë¥ ìµì í
### ð§ ê°ë° ìì (v1.1+)
#### **Phase 8**: ì¶ê° ë°ìŽí°ë² ìŽì€ ì§ì
- [ ] **SQLite** ì§ì (ë¡ì»¬ ê°ë°, ìë² ëë í겜)
- [ ] **ClickHouse** ì§ì (ëì©ë ë¶ì ìí¬ë¡ë)
- [ ] **MongoDB** ì§ì (NoSQL 묞ì ë°ìŽí°ë² ìŽì€)
- [ ] **Redis** ì§ì (ìºì ë° ìžì
ë°ìŽí° ë¶ì)
#### **Phase 9**: AI êž°ë¥ ê°í
- [ ] **ê³ êž ìì°ìŽ ì²ëЬ**: GPT-4 êž°ë° ë³µì¡í 쿌늬 ìì±
- [ ] **ìë ìžë±ì€ ì¶ì²**: 쿌늬 íšíŽ ë¶ì êž°ë° ì±ë¥ ìµì í
- [ ] **ìŽì íì§**: ML êž°ë° ë°ìŽí° íì§ ë° ë³Žì ìŽì ê°ì§
- [ ] **쿌늬 ìµì í**: ì€í ê³í ë¶ì ë° ìë ê°ì ì ì
#### **Phase 10**: ìí°íëŒìŽìŠ êž°ë¥
- [ ] **RBAC (Role-Based Access Control)**: ìžë°í ê¶í êŽëЬ
- [ ] **ê°ì¬ ë° ì»ŽíëŒìŽìžì€**: GDPR, SOX ë± ê·ì ì€ì
- [ ] **ê³ ê°ì©ì±**: íŽë¬ì€í°ë§ ë° ë¡ë ë°žë°ì±
- [ ] **ë©ížëŠ & ì늌**: Prometheus, Grafana ì°ë
#### **Phase 11**: ê°ë°ì 겜í ê°ì
- [ ] **GUI êŽëЬ ë구**: ì¹ êž°ë° ì€ì ë° ëªšëí°ë§ ëì볎ë
- [ ] **CLI ë구**: ë°°í¬ ë° êŽëЬ ìëí
- [ ] **Docker 컚í
ìŽë**: ìíŽëŠ ë°°í¬ ì§ì
- [ ] **Kubernetes Operator**: íŽëŒì°ë ë€ìŽí°ëž ë°°í¬
### ð ì±ë¥ 목í (v2.0)
- **ìëµ ìê°**: ëšì 쿌늬 < 100ms, ë³µì¡í ë¶ì < 5s
- **ëì ì°ê²°**: 1000+ ë°ìŽí°ë² ìŽì€ ëì êŽëЬ
- **ì²ëЬë**: 10,000+ qps (queries per second)
- **ê°ì©ì±**: 99.9% ì
íì 볎ì¥
## ð€ êž°ì¬ ê°ìŽë
ì°ëЬë 컀뮀ëí°ì êž°ì¬ë¥Œ íìí©ëë€! ë€ì곌 ê°ì ë°©ììŒë¡ ì°žì¬í ì ììµëë€.
### ð ë²ê·ž 늬í¬íž
- GitHub Issues륌 íµíŽ ë²ê·ž ì ê³
- ì¬í ê°ë¥í ìì ìœë í¬íš
- í겜 ì 볎 (OS, Node.js ë²ì , DB íì
) ëª
ì
### ð¡ êž°ë¥ ì ì
- ìë¡ìŽ ë°ìŽí°ë² ìŽì€ ì§ì ìì²
- MCP ë구 ê°ì ììŽëìŽ
- ì±ë¥ ìµì í ì ì
### ð§ ê°ë° ì°žì¬
1. **Fork & Clone**: ì ì¥ì륌 í¬í¬íê³ ë¡ì»¬ì íŽë¡
2. **ëžëì¹ ìì±**: `git checkout -b feature/your-feature`
3. **ê°ë°**: TypeScript, Jest í
ì€íž ìì± íì
4. **í
ì€íž**: `npm test && npm run build` íµê³Œ íìž
5. **PR ìì±**: ììží ì€ëª
곌 íšê» Pull Request
### ð 묞ìí
- README ê°ì
- ìœë 죌ì ì¶ê°
- ì¬ì© ìì íì¥
- ë€êµìŽ ë²ì (English, íêµìŽ)
### ð 볎ì ìŽì
믌ê°í 볎ì 묞ì ë public issue ëì ì§ì ì°ëœíŽ ì£Œìžì.
## ð ì구ì¬í
- **Node.js**: ⥠18.0.0
- **NPM**: ⥠8.0.0
- **TypeScript**: ⥠5.0.0
- **ë°ìŽí°ë² ìŽì€**: MySQL 5.7+ ëë PostgreSQL 12+
## ð ìí€í
ì²
```
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Claude AI Client â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â Model Context Protocol â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â Multi-Database MCP Server â
â âââââââââââââââââââ ââââââââââââââââââââ âââââââââââââââ â
â â Connection Mgr â â Query Executor â â Schema Mgr â â
â âââââââââââââââââââ ââââââââââââââââââââ âââââââââââââââ â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â Database Adapter Layer â
â âââââââââââââââââââ ââââââââââââââââââââ âââââââââââââââ â
â â MySQL Adapter â âPostgreSQL Adapterâ â Future DBs â â
â âââââââââââââââââââ ââââââââââââââââââââ âââââââââââââââ â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â Database Layer â
â âââââââââââââââââââ ââââââââââââââââââââ âââââââââââââââ â
â â User Service DB â â Order Service DB â âAnalytics DB â â
â â (MySQL) â â (PostgreSQL) â â(PostgreSQL) â â
â âââââââââââââââââââ ââââââââââââââââââââ âââââââââââââââ â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
```
## ð íì ë° ì§ì
ìŽ íë¡ì ížê° ëììŽ ëìë€ë©Ž:
- â GitHub Star ëë¬ì£Œêž°
- ð ìŽì 늬í¬íž ë° íŒëë°±
- ð¬ 컀뮀ëí°ìì ì¬ì© 겜í ê³µì
- ð SNSìì íë¡ì íž ìê°
## ð ëŒìŽì ì€
MIT License - ìì ë¡ê² ì¬ì©, ìì , ë°°í¬ ê°ë¥í©ëë€.
## ð ê°ì¬ì ë§
- **Anthropic**: Model Context Protocol ë° Claude ì ê³µ
- **컀뮀ëí°**: íŒë백곌 êž°ì¬ë¡ íë¡ì íž ë°ì ì ëì
- **ì€íìì€**: mysql2, pg, TypeScript ë± íë¥í ëŒìŽëžë¬ëЬë€
---
## ð 묞ì ë° ì§ì
- **GitHub Issues**: ë²ê·ž 늬í¬íž, êž°ë¥ ìì²
- **GitHub Discussions**: ì¬ì©ë² ì§ë¬ž, ììŽëìŽ ê³µì
- **Documentation**: ììží API 묞ì ë° ê°ìŽë
**Enterprise Supportê° íìíì ê°ì?** ëì©ë ížëíœ, 컀ì€í
ê°ë°, êž°ì ì§ììŽ íìí ê²œì° ë³ë 묞ì ê°ë¥í©ëë€.
---
<div align="center">
**ð Database MCP Server - AI ìëì ë°ìŽí°ë² ìŽì€ íµí© ì룚ì
**
Made with â€ïž for the AI & Database community
</div>
This server cannot be deployed
Maintenance
ActivitySlowing
ResponsivenessNo issues