Skip to main content
Glama

๐Ÿฅ Hospital MCP Server

Secure PostgreSQL Access via Model Context Protocol (MCP)
Claude Desktop acts as the MCP client

This project implements a secure Model Context Protocol (MCP) server that connects to a PostgreSQL-based Hospital Management System.
Claude Desktop communicates with this server and can safely query hospital data through defined, read-only MCP tools.


๐Ÿ“ Project Structure

MY-FIRST-MCP-SERVER/ โ”‚ โ”œโ”€โ”€ .venv/ # Virtual environment โ”œโ”€โ”€ .env # Environment variables (DB credentials) โ”œโ”€โ”€ .gitignore โ”œโ”€โ”€ .python-version โ”œโ”€โ”€ main.py # MCP server implementation โ”œโ”€โ”€ pyproject.toml # Project dependencies (uv/poetry/pdm) โ”œโ”€โ”€ README.md # This documentation โ””โ”€โ”€ uv.lock # Dependency lockfile

๐Ÿ—„๏ธ 1. PostgreSQL Setup

You must create secure read-only views before exposing data to Claude.

Create Views (Safe, non-sensitive)

CREATE VIEW doctors_view AS SELECT doctor_id, department_id, specialization FROM Doctors; CREATE VIEW departments_view AS SELECT department_id, name, head_doctor_id FROM Departments; CREATE VIEW public_appointments_view AS SELECT appointment_id, patient_id, doctor_id, appointment_date FROM Appointments; CREATE VIEW rooms_view AS SELECT room_id, room_number, current_status FROM Rooms; CREATE VIEW billing_summary_view AS SELECT bill_id, patient_id, appointment_id, admission_id, total_amount FROM Billing;

๐Ÿ” 2. Create Restricted DB Role

CREATE ROLE mcp_readonly LOGIN PASSWORD 'your_password'; GRANT SELECT ON doctors_view TO mcp_readonly; GRANT SELECT ON departments_view TO mcp_readonly; GRANT SELECT ON public_appointments_view TO mcp_readonly; GRANT SELECT ON rooms_view TO mcp_readonly; GRANT SELECT ON billing_summary_view TO mcp_readonly; REVOKE ALL PRIVILEGES ON ALL TABLES IN SCHEMA public FROM mcp_readonly; ALTER ROLE mcp_readonly SET statement_timeout = '3s'; ALTER ROLE mcp_readonly SET idle_in_transaction_session_timeout = '2s';

Only the views are exposed โ€” raw PHI tables are protected.


โš™๏ธ 3. Environment Variables (.env)

Your MCP server reads DB credentials from here:

DB_HOST=localhost DB_PORT=5432 DB_NAME=hospital_db DB_USER=mcp_readonly DB_PASSWORD=your_password

๐Ÿง  4. MCP Server (main.py)

main.py runs your MCP server and exposes tools such as:

  • get_doctor_by_id

  • list_doctors_by_department

  • get_appointments_for_doctor

  • check_room_status

  • get_patient_billing_summary

All SQL queries are:

โœ” parameterized โœ” read-only โœ” safely constrained


๐Ÿ”Œ 5. Installing Dependencies

Inside your project folder:

uv sync

Or if using pip manually:

pip install -r requirements.txt

(Dependencies are defined in pyproject.toml)


๐Ÿค 6. Connecting MCP Server to Claude Desktop

Claude Desktop automatically detects MCP servers placed in its extensions directory.

In your local file system "C:\Users\shesh\AppData\Roaming\Claude\claude_desktop_config.json" edit this file with your configurations

{ "mcpServers": { "postgres": { "command": "C:\\Users\\shesh\\my-first-mcp-server\\.venv\\Scripts\\python.exe", "args": [ "C:\\Users\\shesh\\my-first-mcp-server\\main.py", "stdio" ], "cwd": "C:\\Users\\shesh\\my-first-mcp-server", "env": { "DB_HOST": "localhost", "DB_PORT": "5432", "DB_NAME": "db_name", "DB_USER": "postgres", "DB_PASSWORD": "your_password" } } } }

๐Ÿ“ Step 3 โ€” Restart Claude Desktop

Go to:

Claude Desktop โ†’ Settings โ†’ Developer You should see:

hospital-mcp (running)

Claude will now:

  1. Launch your main.py MCP server

  2. Discover available tools

  3. Call them automatically during conversation


๐Ÿงช 7. Testing Inside Claude

In Claude Desktop you can ask:

Get the list of doctors in the cardiology department.

Claude will call:

list_doctors_by_department(department_id=1)

Or:

Show me appointments for doctor 3.

Claude โ†’ calls your MCP tool โ†’ your DB โ†’ safe output returned.


๐ŸŽฏ Summary

You now have:

โœ” A working Python MCP server โœ” Secure PostgreSQL integration โœ” Fully wired Claude Desktop tool access โœ” Safe read-only hospital data views โœ” Clean project structure

Claude Desktop communicates with your DB only through your safe MCP tools, never accessing raw tables directly.

-
security - not tested
F
license - not found
-
quality - not tested

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/SheshuGit/MCP_Postgres'

If you have feedback or need assistance with the MCP directory API, please join our Discord server