Skip to main content
Glama

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

변수

필수

기본값

설명

PG_MCP_DATABASES

예

—

쉼표로 구분된 PostgreSQL 연결 문자열

PG_MCP_DEFAULT_DB

아니오

첫 번째 DSN

쿼리를 위한 기본 데이터베이스

OPENAI_API_KEY

예

—

OpenAI API 키

OPENAI_MODEL

아니오

gpt-4o

SQL 생성에 사용할 모델

OPENAI_BASE_URL

아니오

OpenAI 기본값

사용자 지정 엔드포인트 (Azure, 프록시 등)

PG_MCP_QUERY_TIMEOUT

아니오

30

쿼리 타임아웃 (초)

PG_MCP_MAX_ROWS

아니오

100

반환되는 최대 행 수 (1-1000)

PG_MCP_SCHEMA_CACHE_PATH

아니오

없음

영구 스키마 캐시 경로

PG_MCP_LOG_LEVEL

아니오

INFO

DEBUG / INFO / WARNING / ERROR

다중 데이터베이스 예시:

PG_MCP_DATABASES=postgresql://user:pass@host1:5432/db1,postgresql://user:pass@host2:5432/db2

Claude 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_large

MCP 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" 키를 통해 환경 변수를 전달할 수도 있습니다.

테스트 쿼리

연결 후 피처 데이터베이스에 대해 다음 자연어 쿼리를 시도해 보세요:

데이터베이스

예시 쿼리

pg_mcp_test_small

"列出所有评分高于4分的图书"

pg_mcp_test_small

"哪个国家的作者最多"

pg_mcp_test_medium

"上个月销量前10的商品"

pg_mcp_test_medium

"每个用户的总消费金额"

pg_mcp_test_large

"各部门员工数量和平均薪资"

pg_mcp_test_large

"今年收入最高的前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 응답에 절대 표시되지 않습니다

Related MCP Connectors

Related MCP Servers

  • -
    license
    Not graded
    quality
    A
    maintenance
    A 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 npm
    91,120
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables 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 npm
    MIT