PostgreSQL Explorer MCP Server
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 |
| Dos servidores FastMCP — un servidor de saludo de juguete y un explorador real de PostgreSQL |
Clientes MCP |
| Clientes FastMCP ligeros que invocan herramientas sobre HTTP transmisible |
Utilidad de registro |
| 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 unuv.lock)
Dependencias (pyproject.toml): fastmcp>=3.4.7, mlflow>=3.15.1, psycopg2 + psycopg2-binary,
python-dotenv.
uv syncRelated 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=postgresVariable | Valor por defecto | Propósito |
|
| Host del servidor |
|
| Puerto del servidor |
|
| Rol de inicio de sesión |
|
| Contraseña |
|
| Modo SSL de libpq |
|
| Base de datos usada para consultas a nivel de servidor ( |
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 5000Si 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.pyExplorador PostgreSQL — introspección de solo lectura de un servidor PostgreSQL en vivo:
uv run python src/postgresql_mcp.pyO mediante la CLI de FastMCP:
uv run fastmcp run src/postgresql_mcp.py --transport http --port 8000Herramientas PostgreSQL
Herramienta | Argumentos | Devuelve |
| — | Bases de datos que no son plantillas con propietario y tamaño con formato legible |
|
| Esquemas definidos por el usuario (excluyendo esquemas del sistema y temporales) |
|
| Tablas y vistas en el esquema, con |
|
| Nombre de columna, tipo, nulabilidad, valor por defecto — en orden ordinal |
|
| Claves foráneas divididas en |
|
| Lista plana de aristas |
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.pyllama aclient.call_tool("greet", ...), pero la herramienta ensrc/simple_server.pyestá registrada bajo el nombreGreeting(greetes 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.pyLos 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
Inicia MLflow en el puerto 5000.
Inicia el servidor MCP de PostgreSQL en el puerto 8000.
Verifica que responde:
uv run python clients/postgres_server_client.py.Regístralo: descomenta
register_postgresql_mcp_server()y ejecuta la utilidad.Descubre sus herramientas: cambia a
discover_tools()y ejecuta de nuevo — las seis herramientas anteriores deberían imprimirse.Inspecciona su endpoint de acceso: cambia a
list_endpoints().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.lockmlflow.db, .env, .venv y .idea están en gitignore.
This server cannot be installed
Maintenance
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
- Alicense-qualityDmaintenanceAn 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.13MIT
- AlicenseAqualityDmaintenanceA secure, read-only PostgreSQL MCP server that provides safe database introspection and querying capabilities.1415MIT
- Alicense-qualityCmaintenanceA 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.634BSD 3-Clause
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.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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