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

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

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