hwantage/pg_mcp_server
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