Database MCP Server
Enables AI agents to securely interact with multiple databases (MySQL, PostgreSQL) via natural language queries, with cross-database querying and enterprise-grade security.
README
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 ì¬ì© ê°ìŽë륌 ì°žì¡°íìžì.
ë¹ ë¥ž ìì:
- í겜 ë³ì ì€ì (
.envíìŒ) - MCP ìë² ì€ì ì ì¶ê°
- Claudeìê² "ë°ìŽí°ë² ìŽì€ ì€í€ë§ë¥Œ ë¶ìíŽì£Œìžì" ìì²
- ìì°ìŽë¡ ë°ìŽí° ì¡°í ë° ë¶ì
ì§ì ë°ìŽí°ë² ìŽì€
- â 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 |
ìŽëí° ìë ì í
ìì€í ìŽ ìëìŒë¡ ë°ìŽí°ë² ìŽì€ íì ì ê°ì§í©ëë€:
- ëª
ìì ì§ì :
DB_TYPEí겜ë³ì ëë config.type ì€ì - í¬íž êž°ë° ê°ì§:
- 3306 â MySQL
- 5432 â PostgreSQL
- ížì€ížëª
êž°ë° ê°ì§:
- ížì€ížëª ì 'mysql' í¬íš â MySQL
- ížì€ížëª ì 'postgres' í¬íš â PostgreSQL
- Ʞ볞ê°: MySQL
ê¶ì¥ ì¬ì© ì¬ë¡
MySQL ê¶ì¥:
- ì¹ ì í늬ìŒìŽì ë°±ìë
- ëšìí CRUD ìì ì€ì¬
- ëì ëìì± ìœêž° ìì
- Ʞ졎 MySQL ìžíëŒ íì©
PostgreSQL ê¶ì¥:
- ë³µì¡í ë¶ì 쿌늬
- JSON ë°ìŽí° ì²ëЬ
- ì§ëЬ ì 볎 ìì€í (PostGIS)
- ë°ìŽí° 묎결ì±ìŽ ì€ìí ì í늬ìŒìŽì
MSA í겜ììì ë€ì€ DB ì°ê²°
MSA(Microservices Architecture) í겜ììë ì¬ë¬ ë°ìŽí°ë² ìŽì€ì ëìì ì ìíŽìŒ íë 겜ì°ê° ë§ìµëë€. ìŽ MCP ìë²ë ë ê°ì§ ë°©ë²ì ì§ìí©ëë€:
ë°©ë² 1: ëšìŒ MCP ìë²ìì ë€ì€ DB ì§ì (ê¶ì¥)
íëì MCP ìë² ìžì€íŽì€ìì ì¬ë¬ ë°ìŽí°ë² ìŽì€ë¥Œ êŽëЬí©ëë€.
ì€ì íìŒ ë°©ì
db-config.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"
}
í겜ë³ì ë°©ì
# ì¬ì©ì ìë¹ì€ 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
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_DEFAULT_CONNECTION=user
Claude Desktop ì€ì (ë€ì€ DB)
{
"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 íìŒì ì¶ê°:
{
"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ê°)
ëì ì늬:
DB_CONFIG_FILEí겜ë³ì ì¡Žì¬ ì multi-DB 몚ëë¡ ìë ì í- 몚ë ë°ìŽí°ë² ìŽì€ ì°ê²° ì 볎ë
db-config.jsoníìŒìì êŽëЬ - í겜ë³ì ê²ìŠ ë¡ì§ ìë ì€íµìŒë¡ dummy ê° ë¶íì
ê²ìŠ ë°©ë²:
# MCP ìë² ì°ê²° íìž
claude mcp list
# í¬ì€ì²Ží¬ ì€í
# Claude Codeìì: "db-mcp ìë² í¬ì€ì²Ží¬ ì€ííŽì€"
ë°©ë² 2: DBë³ ë³ë MCP ìë² (ê°ëší ë°©ë²)
ê° ë°ìŽí°ë² ìŽì€ë§ë€ ë³ëì MCP ìë² ìžì€íŽì€ë¥Œ ì€íí©ëë€.
Claude Desktop ì€ì (ë³ë ìë²)
{
"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 ìžì ì ë°©ì§
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. 쿌늬 ì í
- ìœêž° ì ì©: DML(INSERT, UPDATE, DELETE) ë° DDL(CREATE, DROP) êžì§
- íìŽížëЬì€íž: íì©ë SQL í€ìëë§ ì€í
- 구묞 ê²ìŠ: SQL ìžì ì ë°©ì§ë¥Œ ìí íì± ê²ìŠ
2. ì€í ì í
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. ì§ìíì§ ìë êž°ë¥
- â ë°ìŽí° ìì ìì (INSERT, UPDATE, DELETE)
- â ì€í€ë§ ë³ê²œ (CREATE, ALTER, DROP)
- â ì ì¥ íë¡ìì ì€í
- â ížëìì ì ìŽ (BEGIN, COMMIT, ROLLBACK)
- â ì¬ì©ì êŽëЬ ëª ë ¹
- â íìŒ ìì€í ì ê·Œ
2. ì±ë¥ ì í
- ëì ì°ê²°: ìµë 10ê° ëì 쿌늬
- ìºì±: ì€í€ë§ ì 볎 5ë¶ ìºì
- Rate Limiting: ë¶ë¹ 100í 쿌늬 ì í
3. ë°ìŽí° íì ì í
- BLOB/TEXT: í° ë°ìŽí°ë ììœ ì ë³Žë§ ì ê³µ
- JSON/XML: 구조íë ííë¡ íì±íì¬ ì ê³µ
- Binary: Base64 ìžìœë©ìŒë¡ ì íì ì§ì
ì€ì¹ ë° ì€ì
1. ì€ì¹
npm install
2. í겜 ì€ì
.env íìŒ ìì±:
MySQL ì€ì
# 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 ì€ì
# 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
ê³µíµ ë³Žì ì€ì
MAX_QUERY_EXECUTION_TIME=30000
MAX_RESULT_ROWS=10000
ENABLE_QUERY_LOGGING=true
3. Claude Desktop ì€ì
MySQL ì¬ì© ì
claude_desktop_config.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ì ì¶ê°:
{
"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 ë구 ê°ì ììŽëìŽ
- ì±ë¥ ìµì í ì ì
ð§ ê°ë° ì°žì¬
- Fork & Clone: ì ì¥ì륌 í¬í¬íê³ ë¡ì»¬ì íŽë¡
- ëžëì¹ ìì±:
git checkout -b feature/your-feature - ê°ë°: TypeScript, Jest í ì€íž ìì± íì
- í
ì€íž:
npm test && npm run buildíµê³Œ íìž - 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>
Recommended Servers
playwright-mcp
A Model Context Protocol server that enables LLMs to interact with web pages through structured accessibility snapshots without requiring vision models or screenshots.
Magic Component Platform (MCP)
An AI-powered tool that generates modern UI components from natural language descriptions, integrating with popular IDEs to streamline UI development workflow.
Audiense Insights MCP Server
Enables interaction with Audiense Insights accounts via the Model Context Protocol, facilitating the extraction and analysis of marketing insights and audience data including demographics, behavior, and influencer engagement.
VeyraX MCP
Single MCP tool to connect all your favorite tools: Gmail, Calendar and 40 more.
graphlit-mcp-server
The Model Context Protocol (MCP) Server enables integration between MCP clients and the Graphlit service. Ingest anything from Slack to Gmail to podcast feeds, in addition to web crawling, into a Graphlit project - and then retrieve relevant contents from the MCP client.
Kagi MCP Server
An MCP server that integrates Kagi search capabilities with Claude AI, enabling Claude to perform real-time web searches when answering questions that require up-to-date information.
E2B
Using MCP to run code via e2b.
Neon Database
MCP server for interacting with Neon Management API and databases
Exa Search
A Model Context Protocol (MCP) server lets AI assistants like Claude use the Exa AI Search API for web searches. This setup allows AI models to get real-time web information in a safe and controlled way.
Qdrant Server
This repository is an example of how to create a MCP server for Qdrant, a vector search engine.