pg-mcp
pg-mcp
MCP(Model Context Protocol)를 통한 자연어 PostgreSQL 쿼리 서비스입니다. OpenAI를 사용하여 자연어를 SQL로 변환하고, 이를 안전하게 검증 및 실행한 뒤 MCP 호환 클라이언트에 결과를 반환합니다.
기능
OpenAI를 통한 자연어-SQL 변환
시작 시 데이터베이스 스키마 자동 탐색 (테이블, 뷰, 컬럼, 인덱스, 외래 키, 열거형)
선택적 디스크 지속성을 지원하는 스키마 캐시
SQL 안전성 검증 (SELECT 전용, 위험한 함수 차단, LIMIT 강제 적용)
구성 가능한 타임아웃을 포함한 읽기 전용 트랜잭션 실행
결과가 비어 있을 경우 자동 재시도를 포함한 결과 검증
다중 데이터베이스 지원
Related MCP server: PostgreSQL MCP Server
요구 사항
Python 3.11+
PostgreSQL
OpenAI API 키
설치
pip install -e .개발용:
pip install -e ".[dev]"구성
.env.example을 .env로 복사하고 값을 입력하세요:
cp .env.example .env변수 | 필수 | 기본값 | 설명 |
| 예 | — | 쉼표로 구분된 PostgreSQL 연결 문자열 |
| 아니오 | 첫 번째 DSN | 쿼리를 위한 기본 데이터베이스 |
| 예 | — | OpenAI API 키 |
| 아니오 |
| SQL 생성에 사용할 모델 |
| 아니오 | OpenAI 기본값 | 사용자 지정 엔드포인트 (Azure, 프록시 등) |
| 아니오 |
| 쿼리 타임아웃 (초) |
| 아니오 |
| 반환되는 최대 행 수 (1-1000) |
| 아니오 | 없음 | 영구 스키마 캐시 경로 |
| 아니오 |
|
|
다중 데이터베이스 예시:
PG_MCP_DATABASES=postgresql://user:pass@host1:5432/db1,postgresql://user:pass@host2:5432/db2Claude Desktop에서 사용하기
claude_desktop_config.json에 추가하세요:
{
"mcpServers": {
"pg-mcp": {
"command": "pg-mcp",
"args": [],
"env": {
"PG_MCP_DATABASES": "postgresql://user:pass@localhost:5432/mydb",
"OPENAI_API_KEY": "sk-...",
"PG_MCP_SCHEMA_CACHE_PATH": "~/.cache/pg-mcp/schema.json"
}
}
}
}MCP 도구
query
자연어를 사용하여 데이터베이스를 쿼리합니다.
{
"question": "What are the top 10 customers by sales last month?",
"database": "mydb",
"return_sql": false,
"max_rows": 100
}return_sql: true— 실행하지 않고 생성된 SQL을 반환return_sql: false(기본값) — 실행 후 결과를 반환
list_databases
요약 정보와 함께 액세스 가능한 모든 데이터베이스를 나열합니다.
describe_database
데이터베이스에 대한 상세 스키마 정보를 가져옵니다.
{
"database": "mydb",
"schema": "public",
"pattern": "user"
}refresh_schema
데이터베이스에서 스키마 캐시를 새로 고칩니다.
{
"database": "mydb"
}database를 생략하면 모든 데이터베이스를 새로 고칩니다.
피처 데이터베이스를 이용한 테스트
fixtures/ 디렉토리는 로컬 테스트를 위한 3개의 사전 구축된 데이터베이스를 제공합니다.
설정
# From project root, create & seed all fixture databases
cd fixtures
make all
# Or create individual ones
make small # pg_mcp_test_small — bookshelf (4 tables, ~50 rows)
make medium # pg_mcp_test_medium — ecommerce (12 tables, ~500 rows)
make large # pg_mcp_test_large — enterprise (28 tables, ~5000 rows)환경 변수를 통해 PostgreSQL 자격 증명을 재정의하세요 (기본값: root / admin123 @ localhost:5432):
make all PGUSER=myuser PGPASSWORD=mypass PGHOST=127.0.0.1.env 구성
PG_MCP_DATABASES를 피처 데이터베이스로 지정하세요:
PG_MCP_DATABASES=postgresql://root:admin123@localhost:5432/pg_mcp_test_small,postgresql://root:admin123@localhost:5432/pg_mcp_test_medium,postgresql://root:admin123@localhost:5432/pg_mcp_test_largeMCP Inspector로 테스트
대화형 테스트를 위해 내장된 MCP 인스펙터를 사용하세요:
cd /path/to/postgres-mcp
fastmcp dev src/pg_mcp/server.py:mcp이 명령은 query, list_databases, describe_database와 같은 도구를 직접 호출할 수 있는 브라우저 UI를 엽니다.
Claude Desktop으로 테스트
claude_desktop_config.json에 추가하세요:
{
"mcpServers": {
"pg-mcp": {
"command": "python3",
"args": ["-m", "pg_mcp.server"],
"cwd": "/path/to/postgres-mcp"
}
}
}참고:
cwd를 사용할 때 서버는 해당 디렉토리에서.env를 읽습니다. 또는"env"키를 통해 환경 변수를 전달할 수도 있습니다.
테스트 쿼리
연결 후 피처 데이터베이스에 대해 다음 자연어 쿼리를 시도해 보세요:
데이터베이스 | 예시 쿼리 |
| "列出所有评分高于4分的图书" |
| "哪个国家的作者最多" |
| "上个月销量前10的商品" |
| "每个用户的总消费金额" |
| "各部门员工数量和平均薪资" |
| "今年收入最高的前5个销售代表" |
정리
cd fixtures
make drop-all # Remove all fixture databases
make refresh-all # Drop + recreate + re-seed테스트 실행
python3 -m pytest tests/ -v작동 원리
User question
→ Schema context assembled from cache
→ OpenAI generates SQL
→ Safety validation (SELECT-only, no dangerous functions, LIMIT injection)
→ Execute in read-only transaction with timeout
→ Optional result validation on empty results
→ Return SQL or query results보안
생성된 SQL은 SELECT 전용인지 검증됩니다 (CTE 검사 포함)
40개 이상의 위험한 PostgreSQL 함수가 차단됩니다 (세션 제어, 자문 잠금, dblink, 파일 시스템 액세스, 시퀀스 변경 등)
모든 쿼리는 읽기 전용 트랜잭션에서 실행됩니다
자동 LIMIT 강제 적용으로 대규모 결과 집합을 방지합니다
쿼리 타임아웃으로 장시간 실행되는 쿼리를 방지합니다
연결 비밀번호는 로그나 API 응답에 절대 표시되지 않습니다
This server cannot be deployed
Maintenance
Related MCP Connectors
Query PostgreSQL databases in plain English — LLM-generated, safety-validated SQL.
Text-to-SQL MCP server: read-only queries on PostgreSQL, MySQL and SQL Server with your real schema
Query your org's data in natural language — read-only MCP access to SQL, NoSQL, files & warehouses.
Query your warehouse or a CSV with Claude/ChatGPT over MCP, governed by table-level ACL + audit.
Related MCP Servers
- -licenseNot gradedqualityAmaintenanceA Model Context Protocol server that provides read-only access to PostgreSQL databases. This server enables LLMs to inspect database schemas and execute read-only queries.122,323 npm91,120MIT
- AlicenseNot gradedqualityDmaintenanceA Model Context Protocol server providing LLMs read-only access to PostgreSQL databases for inspecting schemas and executing queries.122,323 npm27MIT
- FlicenseDqualityDmaintenanceA secure Model Context Protocol server that allows Claude to execute read-only SQL queries against a PostgreSQL database, enabling natural language interaction with database data.1-
- AlicenseNot gradedqualityDmaintenanceEnables AI agents to query, explore, and analyze PostgreSQL databases through the Model Context Protocol. It provides robust security features including read-only mode, schema restrictions, and query timeouts for safe data interaction.7 npmMIT