PostgreSQL Explorer MCP Server
mcp-registry
Eine kleine, durchgängige Schritt-für-Schritt-Anleitung zur MLflow MCP Server Registry: Erstellen Sie MCP-Server mit FastMCP, rufen Sie sie mit einem FastMCP-Client auf und registrieren Sie sie dann in MLflow, damit sie auffindbar sind – mit Versionen, Zugriffsendpunkten und automatisch ermittelten Tools.
Das Repository besteht aus drei Komponenten:
Komponente | Pfad | Funktion |
MCP-Server |
| Zwei FastMCP-Server – ein einfacher Begrüßungsserver und ein echter PostgreSQL-Explorer |
MCP-Clients |
| Schlanke FastMCP-Clients, die Tools über streamable HTTP aufrufen |
Registry-Hilfsprogramm |
| Registriert Server bei MLflow, aktualisiert ihre Tools, listet Zugriffsendpunkte auf |
Voraussetzungen
Python ≥ 3.13
Ein lokal laufender MLflow-Tracking-Server (v3.15+) – die Registry-APIs sind serverseitig
PostgreSQL, falls Sie den PostgreSQL-Server ausführen möchten
uv(das Repository enthält eineuv.lock)
Abhängigkeiten (pyproject.toml): fastmcp>=3.4.7, mlflow>=3.15.1, psycopg2 + psycopg2-binary,
python-dotenv.
uv syncRelated MCP server: postgres-mcp-readonly
Konfiguration
Der PostgreSQL-Server liest seine Verbindungseinstellungen aus einer .env-Datei im Repository-Stammverzeichnis
(geladen über python-dotenv). .env ist in der gitignore enthalten – erstellen Sie Ihre eigene:
PGHOST=localhost
PGPORT=5432
PGUSER=root
PGPASSWORD=root
PGSSLMODE=prefer
PGADMINDB=postgresVariable | Standard | Zweck |
|
| Server-Host |
|
| Server-Port |
|
| Anmelderolle |
|
| Passwort |
|
| libpq-SSL-Modus |
|
| Datenbank für serverweite Abfragen ( |
src/simple_server.py benötigt keine Konfiguration.
1. Einen MLflow-Tracking-Server starten
mlflow_mcp_registry_util.py zeigt auf http://127.0.0.1:5000. Das Repository enthält bereits eine
mlflow.db (gitignored) aus einem SQLite-gestützten Durchlauf:
uv run mlflow server --backend-store-uri sqlite:///mlflow.db --host 127.0.0.1 --port 5000Wenn Ihr Server woanders läuft, bearbeiten Sie den mlflow.set_tracking_uri(...)-Aufruf am Anfang von
mlflow_mcp_registry_util.py.
2. Einen MCP-Server ausführen
Beide Server binden Port 8000 über streamable HTTP (http://localhost:8000/mcp), führen Sie also einen
nach dem anderen aus – oder ändern Sie den Port im mcp.run(...)-Aufruf.
Einfacher Begrüßungsserver – zwei Tools, Greeting und Sendoff:
uv run python src/simple_server.pyPostgreSQL-Explorer – schreibgeschützte Einsicht in einen laufenden PostgreSQL-Server:
uv run python src/postgresql_mcp.pyOder über die FastMCP-CLI:
uv run fastmcp run src/postgresql_mcp.py --transport http --port 8000PostgreSQL-Tools
Tool | Argumente | Rückgabe |
| — | Nicht-Template-Datenbanken mit Besitzer und formatierter Größe |
|
| Benutzerdefinierte Schemata (System- und temporäre Schemata ausgeschlossen) |
|
| Tabellen und Views im Schema, mit |
|
| Spaltenname, Typ, Nullable, Standardwert – in ordinaler Reihenfolge |
|
| Fremdschlüssel aufgeteilt in |
|
| Flache Kantenliste |
Jedes Tool durchläuft _query(), das eine neue Verbindung zur benannten Datenbank öffnet, eine
einzelne parametrisierte SELECT-Abfrage über einen RealDictCursor ausführt und die Verbindung schließt. Es wird nichts geschrieben.
3. Einen Server von einem Client aus aufrufen
Mit einem auf Port 8000 laufenden Server:
uv run python clients/postgres_server_client.py # calls ListDatabases, prints each database name
uv run python clients/simple_server_client.py # calls the greeting tool with "Ford"clients/postgres_server_client.py entpackt das FastMCP-Ergebnis: Jedes Element in result.content trägt
ein JSON-text-Payload, das geparst und aus dem database gelesen wird.
Hinweis:
clients/simple_server_client.pyruftclient.call_tool("greet", ...)auf, aber das Tool insrc/simple_server.pyist unter dem NamenGreetingregistriert (greetist nur der Python-Funktionsname). Verwenden Sie für den Aufruf"Greeting", um die Auflösung zu gewährleisten.
4. Server bei MLflow registrieren
mlflow_mcp_registry_util.py enthält vier Koroutinen, die jeweils eine Registry-API demonstrieren:
register_postgresql_mcp_server()
Registriert einen entfernten Server – einen, der bereits läuft und über HTTP erreichbar ist:
mlflow.genai.register_mcp_server(
server_json={
"name": "io.github.pavanjava/postgresql-server",
"version": "0.1.0",
"description": "PostgreSQL FastMCP server exposing DB tools",
"remotes": [{"url": "http://localhost:8000/mcp", "type": "streamable-http"}],
},
status="active",
source="local dev server via fastmcp",
create_access_endpoints_from_remotes=True,
)create_access_endpoints_from_remotes=True wandelt jeden Eintrag in remotes in einen MLflow-Zugriffsendpunkt
um, sodass Verbraucher eine Verbindungs-URL aus der Registry auflösen können, anstatt sie fest zu codieren.
register_qdrant_mcp_server()
Registriert stattdessen einen paketierten Server – kein laufender Prozess erforderlich. Der Eintrag beschreibt, wie
er gestartet wird (uvx mcp-server-qdrant über stdio) und deklariert seine Umgebungsvariablen,
einschließlich derer, die erforderlich sind und welche geheim sind (QDRANT_API_KEY).
discover_tools()
Ruft refresh_mcp_server_version_tools(...) auf. MLflow verbindet sich mit der registrierten Serverversion,
ermittelt seine Tools und speichert sie in der Version – danach listet server_version.tools die
ermittelten Toolnamen auf. Dazu muss der Server tatsächlich erreichbar sein.
list_endpoints()
Ruft search_mcp_access_endpoints(server_name=...) auf und gibt für jeden Endpunkt dessen URL, Transporttyp
und die aufgelöste Serverversion aus.
Ausführen
Der __main__-Block führt jeweils eine Koroutine aus; die restlichen sind auskommentiert. Kommentieren Sie die
gwünschte aus:
if __name__ == "__main__":
# asyncio.run(register_postgresql_mcp_server())
asyncio.run(register_qdrant_mcp_server())
# asyncio.run(discover_tools())
# asyncio.run(list_endpoints())uv run python mlflow_mcp_registry_util.pyRegistrierte Server werden dann im Abschnitt MCP Servers der MLflow-Oberfläche unter
http://127.0.0.1:5000 angezeigt.
Vorgeschlagener End-to-End-Pfad
Starten Sie MLflow auf Port 5000.
Starten Sie den PostgreSQL-MCP-Server auf Port 8000.
Überprüfen Sie die Antwort:
uv run python clients/postgres_server_client.py.Registrieren Sie ihn: Kommentieren Sie
register_postgresql_mcp_server()aus und führen Sie das Hilfsprogramm aus.Ermitteln Sie seine Tools: Wechseln Sie zu
discover_tools()und führen Sie es erneut aus – die sechs obigen Tools sollten ausgegeben werden.Überprüfen Sie seinen Zugriffsendpunkt: Wechseln Sie zu
list_endpoints().Durchsuchen Sie das Ergebnis in der MLflow-Oberfläche.
Repository-Struktur
.
├── src/
│ ├── simple_server.py # FastMCP "My MCP Server" — Greeting + Sendoff tools
│ └── postgresql_mcp.py # FastMCP "PostgreSQL Explorer" — 6 read-only introspection tools
├── clients/
│ ├── simple_server_client.py # calls a tool on the greeting server
│ └── postgres_server_client.py # calls ListDatabases and prints database names
├── mlflow_mcp_registry_util.py # MLflow MCP registry: register / refresh tools / list endpoints
├── pyproject.toml
└── uv.lockmlflow.db, .env, .venv und .idea sind in der gitignore enthalten.
This server cannot be deployed
Maintenance
Related MCP Connectors
Hosted MCP server for PostgreSQL diagnostics: slow queries, missing indexes, connection pressure.
- dataOAuthco.thinair
PostgreSQL, MySQL, and SQL Server in one session. 26 read-only MCP tools for AI agents.
An MCP server that provides read access to your cloud storage providers, bank accounts and more.
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceAn open-source MCP server for PostgreSQL schema introspection and guarded read-only queries. It enables MCP clients to discover schemas, tables, columns, indexes, relationships, and safe queryable data from a configured PostgreSQL database.21 npmMIT
- AlicenseAqualityDmaintenanceA secure, read-only PostgreSQL MCP server that provides safe database introspection and querying capabilities.1419 npmMIT
- AlicenseNot gradedqualityCmaintenanceA Python MCP server that enables schema discovery, read-only SQL queries, table previews, and index/relationship analysis on PostgreSQL databases.1MIT
- AlicenseAqualityBmaintenanceMCP server for PostgreSQL that enables safe read-only database queries, table schema inspection, and query execution planning.627 npmBSD 3-Clause