Skip to main content
Glama
pavanjava

PostgreSQL Explorer MCP Server

by pavanjava

mcp-registry

Un pequeño recorrido completo del MLflow MCP Server Registry: construye servidores MCP con FastMCP, llámalos con un cliente FastMCP, luego regístralos en MLflow para que sean descubribles — con versiones, endpoints de acceso y herramientas autodescubiertas.

El repositorio tiene tres partes móviles:

Parte

Ruta

Qué hace

Servidores MCP

src/

Dos servidores FastMCP — un servidor de saludo de juguete y un explorador real de PostgreSQL

Clientes MCP

clients/

Clientes FastMCP ligeros que invocan herramientas sobre HTTP transmisible

Utilidad de registro

mlflow_mcp_registry_util.py

Registra servidores con MLflow, actualiza sus herramientas, lista endpoints de acceso


Requisitos

  • Python ≥ 3.13

  • Un servidor de seguimiento de MLflow (v3.15+) ejecutándose localmente — las APIs de registro están en el lado del servidor

  • PostgreSQL, si quieres probar el servidor PostgreSQL

  • uv (el repositorio incluye un uv.lock)

Dependencias (pyproject.toml): fastmcp>=3.4.7, mlflow>=3.15.1, psycopg2 + psycopg2-binary, python-dotenv.

uv sync

Related MCP server: postgres-mcp-readonly

Configuración

El servidor PostgreSQL lee su configuración de conexión de un archivo .env en la raíz del repositorio (cargado mediante python-dotenv). .env está en gitignore — crea el tuyo:

PGHOST=localhost
PGPORT=5432
PGUSER=root
PGPASSWORD=root
PGSSLMODE=prefer
PGADMINDB=postgres

Variable

Valor por defecto

Propósito

PGHOST

localhost

Host del servidor

PGPORT

5432

Puerto del servidor

PGUSER

root

Rol de inicio de sesión

PGPASSWORD

root

Contraseña

PGSSLMODE

prefer

Modo SSL de libpq

PGADMINDB

postgres

Base de datos usada para consultas a nivel de servidor (ListDatabases)

src/simple_server.py no necesita configuración.


1. Iniciar un servidor de seguimiento de MLflow

mlflow_mcp_registry_util.py apunta a http://127.0.0.1:5000. El repositorio ya contiene un mlflow.db (en gitignore) de una ejecución respaldada por SQLite:

uv run mlflow server --backend-store-uri sqlite:///mlflow.db --host 127.0.0.1 --port 5000

Si tu servidor está en otro lugar, edita la llamada mlflow.set_tracking_uri(...) al inicio de mlflow_mcp_registry_util.py.


2. Ejecutar un servidor MCP

Ambos servidores enlazan el puerto 8000 sobre HTTP transmisible (http://localhost:8000/mcp), así que ejecuta uno a la vez — o cambia el puerto en la llamada mcp.run(...).

Servidor de saludo simple — dos herramientas, Greeting y Sendoff:

uv run python src/simple_server.py

Explorador PostgreSQL — introspección de solo lectura de un servidor PostgreSQL en vivo:

uv run python src/postgresql_mcp.py

O mediante la CLI de FastMCP:

uv run fastmcp run src/postgresql_mcp.py --transport http --port 8000

Herramientas PostgreSQL

Herramienta

Argumentos

Devuelve

ListDatabases

Bases de datos que no son plantillas con propietario y tamaño con formato legible

ListSchemas

database

Esquemas definidos por el usuario (excluyendo esquemas del sistema y temporales)

ListTables

database, schema

Tablas y vistas en el esquema, con table_type

ListTableColumns

database, schema, table

Nombre de columna, tipo, nulabilidad, valor por defecto — en orden ordinal

ListTableRelations

database, schema, table

Claves foráneas divididas en outgoing (esta tabla → otras) y incoming (otras → esta tabla)

ListSchemaRelations

database, schema

Lista plana de aristas from_table.from_column → to_table.to_column para todo el esquema — un ERD en forma de lista

Cada herramienta pasa por _query(), que abre una nueva conexión a la base de datos nombrada, ejecuta un único SELECT parametrizado a través de un RealDictCursor, y cierra la conexión. Nada escribe.


3. Llamar a un servidor desde un cliente

Con un servidor ejecutándose en el puerto 8000:

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 desempaqueta el resultado de FastMCP: cada elemento en result.content lleva una carga útil JSON text, que analiza y lee database de ella.

Nota: clients/simple_server_client.py llama a client.call_tool("greet", ...), pero la herramienta en src/simple_server.py está registrada bajo el nombre Greeting (greet es solo el nombre de la función Python). Usa "Greeting" para la llamada a resolver.


4. Registrar servidores con MLflow

mlflow_mcp_registry_util.py contiene cuatro corrutinas, cada una demostrando una API de registro:

register_postgresql_mcp_server()

Registra un servidor remoto — uno que ya está ejecutándose y es accesible por HTTP:

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 convierte cada entrada en remotes en un endpoint de acceso de MLflow, para que los consumidores puedan resolver una URL de conexión desde el registro en lugar de codificarla.

register_qdrant_mcp_server()

Registra un servidor empaquetado en su lugar — no requiere un proceso en ejecución. La entrada describe cómo iniciarlo (uvx mcp-server-qdrant sobre stdio) y declara sus variables de entorno, incluyendo cuáles son requeridas y cuáles son secretas (QDRANT_API_KEY).

discover_tools()

Llama a refresh_mcp_server_version_tools(...). MLflow se conecta a la versión del servidor registrada, enumera sus herramientas y las persiste en la versión — después de lo cual server_version.tools lista los nombres de herramientas descubiertas. Esto requiere que el servidor sea realmente accesible.

list_endpoints()

Llama a search_mcp_access_endpoints(server_name=...) e imprime la URL, el tipo de transporte y la versión del servidor que resuelve cada endpoint.

Ejecutarlo

El bloque __main__ ejecuta una corrutina a la vez; el resto están comentadas. Descomenta la que quieras:

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.py

Los servidores registrados aparecen entonces en la sección MCP Servers de la interfaz de usuario de MLflow en http://127.0.0.1:5000.


Ruta sugerida de principio a fin

  1. Inicia MLflow en el puerto 5000.

  2. Inicia el servidor MCP de PostgreSQL en el puerto 8000.

  3. Verifica que responde: uv run python clients/postgres_server_client.py.

  4. Regístralo: descomenta register_postgresql_mcp_server() y ejecuta la utilidad.

  5. Descubre sus herramientas: cambia a discover_tools() y ejecuta de nuevo — las seis herramientas anteriores deberían imprimirse.

  6. Inspecciona su endpoint de acceso: cambia a list_endpoints().

  7. Navega por el resultado en la interfaz de usuario de MLflow.


Estructura del repositorio

.
├── 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.lock

mlflow.db, .env, .venv y .idea están en gitignore.

F
license - not found
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

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

Related MCP Servers

  • A
    license
    -
    quality
    D
    maintenance
    An 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.
    13
    MIT
  • A
    license
    A
    quality
    B
    maintenance
    MCP server for PostgreSQL that enables safe read-only database queries, table schema inspection, and query execution planning.
    6
    34
    BSD 3-Clause

View all related MCP servers

Related MCP Connectors

  • MCP server for managing Prisma Postgres.

  • MCP server for interacting with the Supabase platform

  • A basic MCP server to operate on the Postman API.

View all MCP Connectors

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/pavanjava/mcp_course'

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