pg_mcp_server

hwantage/pg_mcp_server

3.2

If you are the rightful owner of pg_mcp_server and would like to certify it and/or have it hosted online, please leave a comment on the right or send an email to henry@mcphub.com.

This project provides two implementations of a Model Context Protocol (MCP) server that interacts with a PostgreSQL database to retrieve user information.

PostgreSQL MCP μ„œλ²„ 예제

이 ν”„λ‘œμ νŠΈλŠ” PostgreSQL λ°μ΄ν„°λ² μ΄μŠ€μ™€ μ—°λ™ν•˜μ—¬ μ‚¬μš©μž 정보λ₯Ό μ‘°νšŒν•˜λŠ” MCP(Model Context Protocol) μ„œλ²„μ˜ 두 κ°€μ§€ κ΅¬ν˜„ 방식을 μ œκ³΅ν•©λ‹ˆλ‹€.

πŸ“‹ ν”„λ‘œμ νŠΈ ꡬ쑰

pg_mcp/
β”œβ”€β”€ pg_mcp.py          # STDIO 방식 MCP μ„œλ²„
β”œβ”€β”€ pg_mcp_sse.py      # SSE 방식 MCP μ„œλ²„  
β”œβ”€β”€ sample.env         # ν™˜κ²½λ³€μˆ˜ μ„€μ • 예제
└── README.md          # ν”„λ‘œμ νŠΈ λ¬Έμ„œ

πŸ” 두 λ°©μ‹μ˜ 차이점

STDIO 방식 νŠΉμ§•

  • 톡신 방식: ν‘œμ€€ μž…μΆœλ ₯(Standard Input/Output)을 ν†΅ν•œ 둜컬 톡신
  • μ‚¬μš© ν™˜κ²½: 운영체제 λ‚΄μ—μ„œ μ‹€ν–‰λ˜λŠ” μ‘μš© ν”„λ‘œκ·Έλž¨κ³Ό 직접 연동
  • κ΅¬ν˜„ λ³΅μž‘λ„: κ°„λ‹¨ν•œ κ΅¬ν˜„, μ΅œμ†Œν•œμ˜ μ„€μ • ν•„μš”
  • μ„±λŠ₯: 둜컬 ν™˜κ²½μ—μ„œ λΉ λ₯Έ 톡신, λ„€νŠΈμ›Œν¬ μ˜€λ²„ν—€λ“œ μ—†μŒ
  • μš©λ„: λͺ…령쀄 도ꡬ, 둜컬 MCP ν΄λΌμ΄μ–ΈνŠΈμ™€μ˜ 직접 연동

SSE 방식 νŠΉμ§•

  • 톡신 방식: HTTP 기반 Server-Sent Eventsλ₯Ό ν†΅ν•œ λ„€νŠΈμ›Œν¬ 톡신
  • μ‚¬μš© ν™˜κ²½: μ›Ή λΈŒλΌμš°μ €μ™€ μ›Ή μ„œλ²„ κ°„, 원격 ν΄λΌμ΄μ–ΈνŠΈ 지원
  • κ΅¬ν˜„ λ³΅μž‘λ„: μƒλŒ€μ μœΌλ‘œ 볡작, HTTP μ„œλ²„ μ„€μ • ν•„μš”
  • μ„±λŠ₯: λ„€νŠΈμ›Œν¬ ν†΅μ‹ μœΌλ‘œ μΈν•œ μ˜€λ²„ν—€λ“œ 쑴재, μ‹€μ‹œκ°„ 슀트리밍 지원
  • μš©λ„: μ›Ή 기반 μ• ν”Œλ¦¬μΌ€μ΄μ…˜, 원격 μ ‘κ·Ό, μ‹€μ‹œκ°„ 데이터 ν‘Έμ‹œ

상세 λΉ„κ΅ν‘œ

ꡬ뢄STDIO 방식SSE 방식
톡신 λ°©μ‹ν‘œμ€€ μž…μΆœλ ₯ (둜컬 I/O)HTTP/SSE (λ„€νŠΈμ›Œν¬ 톡신)
μ—°κ²° λŒ€μƒλ‘œμ»¬ MCP ν΄λΌμ΄μ–ΈνŠΈμ›Ή 기반 ν΄λΌμ΄μ–ΈνŠΈ/원격 ν΄λΌμ΄μ–ΈνŠΈ
κ΅¬ν˜„ λ‚œμ΄λ„κ°„λ‹¨μƒλŒ€μ μœΌλ‘œ 볡작
μ„€μ • μš”κ΅¬μ‚¬ν•­μ΅œμ†Œν™”HTTP μ„œλ²„ μ„€μ • ν•„μš”
μ ‘κ·Όμ„±λ‘œμ»¬ μ‹œμŠ€ν…œ λ‚΄λΆ€λ§Œλ„€νŠΈμ›Œν¬λ₯Ό ν†΅ν•œ 원격 μ ‘κ·Ό
μ£Όμš” μž₯점섀정 간단, λΉ λ₯Έ 톡신원격 μ ‘κ·Ό, μ›Ή ν˜Έν™˜μ„±
μ£Όμš” λ‹¨μ λ‘œμ»¬ ν™˜κ²½ μ œν•œμ„œλ²„ μ„€μ • 볡작, λ„€νŠΈμ›Œν¬ μ˜€λ²„ν—€λ“œ
μ ν•©ν•œ μ‚¬μš© μ‚¬λ‘€κ°œλ°œ/ν…ŒμŠ€νŠΈ, 둜컬 λ„κ΅¬ν”„λ‘œλ•μ…˜, μ›Ή μ„œλΉ„μŠ€

πŸš€ μ£Όμš” κΈ°λŠ₯

  • μ‚¬μš©μž μ΄λ¦„μœΌλ‘œ 직원 정보 쑰회: search_user_by_name 도ꡬλ₯Ό 톡해 직원 정보 검색
  • 두 κ°€μ§€ μ„œλ²„ 방식 지원:
    • STDIO 방식: ν‘œμ€€ μž…μΆœλ ₯을 ν†΅ν•œ 톡신
    • SSE 방식: Server-Sent Eventsλ₯Ό ν†΅ν•œ μ›Ή 기반 톡신

πŸ“¦ μ„€μΉ˜ 및 μ„€μ •

1. μ˜μ‘΄μ„± μ„€μΉ˜

pip install mcp psycopg2-binary python-dotenv starlette uvicorn

2. ν™˜κ²½λ³€μˆ˜ μ„€μ •

sample.env νŒŒμΌμ„ .env둜 λ³΅μ‚¬ν•˜κ³  μ‹€μ œ κ°’μœΌλ‘œ μˆ˜μ •ν•˜μ„Έμš”:

cp sample.env .env

.env 파일 μ˜ˆμ‹œ:

# SSE μ„œλ²„ μ„€μ •
HOST=0.0.0.0
PORT=8000

# PostgreSQL λ°μ΄ν„°λ² μ΄μŠ€ μ„€μ •
DB_NAME=your_database
DB_USER=postgres
DB_PASSWORD=your_password
DB_HOST=localhost
DB_PORT=5432

3. PostgreSQL λ°μ΄ν„°λ² μ΄μŠ€ μ€€λΉ„

SSE 방식을 μ‚¬μš©ν•˜λ €λ©΄ λ‹€μŒκ³Ό 같은 ν…Œμ΄λΈ” ꡬ쑰가 ν•„μš”ν•©λ‹ˆλ‹€:

CREATE SCHEMA IF NOT EXISTS my_db;

CREATE TABLE my_db.users (
    userid SERIAL PRIMARY KEY,
    deptname VARCHAR(100) NOT NULL,
    empname VARCHAR(100) NOT NULL
);

-- ν…ŒμŠ€νŠΈ 데이터 μ‚½μž…
INSERT INTO my_db.users (userid, deptname, empname) VALUES
(1, 'κ°œλ°œνŒ€', '홍길동'),
(2, 'μΈμ‚¬νŒ€', 'μ΄μˆœμ‹ '),
(3, 'μ˜μ—…νŒ€', 'κΉ€μ² μˆ˜');

πŸ–₯️ μ‚¬μš© 방법

STDIO 방식 (pg_mcp.py)

ν…ŒμŠ€νŠΈ λͺ©μ μœΌλ‘œ 더미 데이터λ₯Ό μ‚¬μš©ν•©λ‹ˆλ‹€. MCP 호슀트 앱에 λ“±λ‘ν•˜μ—¬ μ‚¬μš©ν•©λ‹ˆλ‹€.

μ„œλ²„ μ—°κ²° ν…ŒμŠ€νŠΈ 방법:

  • cursor ai IDE μ—μ„œ μ„€μ • > Tools and Integrations λ©”λ‰΄μ—μ„œ μƒˆ mcp μ„œλ²„λ₯Ό λ“±λ‘ν•©λ‹ˆλ‹€.
  • μ•„λž˜μ™€ 같이 mcp.json νŒŒμΌμ— μ„œλ²„λ₯Ό λ“±λ‘ν•©λ‹ˆλ‹€.
{
  "mcpServers": {
    "pg_mcp": {
      "command": "python",
      "args": ["d:\\python\\pg_mcp\\pg_mcp.py"],
      "description": "PG MCP Server (STDIO λͺ¨λ“œ)"
    }
  }
}

SSE 방식 (pg_mcp_sse.py)

μ‹€μ œ PostgreSQL λ°μ΄ν„°λ² μ΄μŠ€μ™€ μ—°λ™ν•˜μ—¬ μ›Ή 기반으둜 μ„œλΉ„μŠ€λ₯Ό μ œκ³΅ν•©λ‹ˆλ‹€.

μ•„λž˜μ˜ λͺ…λ Ήμ–΄λ‘œ MCP μ„œλ²„λ₯Ό μ‹€ν–‰ν•©λ‹ˆλ‹€.

python pg_mcp_sse.py

μ„œλ²„ μ—°κ²° ν…ŒμŠ€νŠΈ 방법:

  • μ„œλ²„ μ£Όμ†Œ: http://localhost:8000/sse
  • cursor ai IDE μ—μ„œ μ„€μ • > Tools and Integrations λ©”λ‰΄μ—μ„œ μƒˆ mcp μ„œλ²„λ₯Ό λ“±λ‘ν•©λ‹ˆλ‹€.
  • μ•„λž˜μ™€ 같이 mcp.json νŒŒμΌμ— μ„œλ²„λ₯Ό λ“±λ‘ν•©λ‹ˆλ‹€.
{
  "mcpServers": {
    "pg_mcp_sse": {
      "type": "http",
      "url": "http://127.0.0.1:8000/sse",
      "description": "PG MCP Server (HTTP λͺ¨λ“œ)"
    }
  }
}

πŸ”§ API μ‚¬μš©λ²•

search_user_by_name 도ꡬ

직원 μ΄λ¦„μœΌλ‘œ μ‚¬μš©μž 정보λ₯Ό μ‘°νšŒν•©λ‹ˆλ‹€.

λ§€κ°œλ³€μˆ˜:

  • empname (string): 검색할 직원 이름

λ°˜ν™˜κ°’:

[
  {
    "userid": 1,
    "deptname": "κ°œλ°œνŒ€", 
    "empname": "홍길동"
  }
]

였λ₯˜ 응닡:

[
  {
    "error": "직원 이름을 μž…λ ₯ν•΄μ£Όμ„Έμš”."
  }
]

πŸ“„ λΌμ΄μ„ μŠ€

MIT