PostgreSQL Explorer MCP Server
mcp-registry
Небольшое сквозное руководство по MLflow MCP Server Registry: создавайте MCP серверы с помощью FastMCP, вызывайте их через FastMCP клиент, а затем регистрируйте в MLflow, чтобы они были обнаруживаемыми — с версиями, точками доступа и автоматически обнаруженными инструментами.
Репозиторий состоит из трех частей:
Часть | Путь | Назначение |
MCP серверы |
| Два FastMCP сервера — игрушечный сервер приветствий и настоящий исследователь PostgreSQL |
MCP клиенты |
| Тонкие FastMCP клиенты, вызывающие инструменты через потоковый HTTP |
Утилита регистрации |
| Регистрирует серверы в MLflow, обновляет их инструменты, выводит точки доступа |
Требования
Python ≥ 3.13
Запущенный локально MLflow tracking server (v3.15+) — API регистрации находятся на стороне сервера
PostgreSQL, если вы хотите опробовать PostgreSQL сервер
uv(репозиторий содержитuv.lock)
Зависимости (pyproject.toml): fastmcp>=3.4.7, mlflow>=3.15.1, psycopg2 + psycopg2-binary, python-dotenv.
uv syncRelated MCP server: postgres-mcp-readonly
Конфигурация
PostgreSQL сервер читает настройки подключения из файла .env в корне репозитория (загружается через python-dotenv). .env добавлен в .gitignore — создайте свой:
PGHOST=localhost
PGPORT=5432
PGUSER=root
PGPASSWORD=root
PGSSLMODE=prefer
PGADMINDB=postgresПеременная | По умолчанию | Назначение |
|
| Хост сервера |
|
| Порт сервера |
|
| Роль для входа |
|
| Пароль |
|
| Режим SSL libpq |
|
| База данных для общесерверных запросов ( |
src/simple_server.py не требует настройки.
1. Запуск MLflow tracking server
mlflow_mcp_registry_util.py указывает на http://127.0.0.1:5000. Репозиторий уже содержит mlflow.db (добавлен в .gitignore) от запуска на SQLite:
uv run mlflow server --backend-store-uri sqlite:///mlflow.db --host 127.0.0.1 --port 5000Если ваш сервер работает по другому адресу, отредактируйте вызов mlflow.set_tracking_uri(...) в начале mlflow_mcp_registry_util.py.
2. Запуск MCP сервера
Оба сервера привязываются к порту 8000 через потоковый HTTP (http://localhost:8000/mcp), поэтому запускайте их по одному — или измените порт в вызове mcp.run(...).
Простой сервер приветствий — два инструмента: Greeting и Sendoff:
uv run python src/simple_server.pyИсследователь PostgreSQL — инструменты только для чтения, для работы с работающим PostgreSQL:
uv run python src/postgresql_mcp.pyИли через FastMCP CLI:
uv run fastmcp run src/postgresql_mcp.py --transport http --port 8000Инструменты PostgreSQL
Инструмент | Аргументы | Возвращает |
|
| Базы данных, не являющиеся шаблонами, с владельцем и размером в удобном формате |
|
| Пользовательские схемы (системные и временные схемы исключены) |
|
| Таблицы и представления в схеме, с |
|
| Имя столбца, тип, допустимость NULL, значение по умолчанию — в порядке следования |
|
| Внешние ключи, разделенные на |
|
| Плоский список рёбер |
Каждый инструмент использует _query(), который открывает новое соединение с указанной базой данных, выполняет один параметризованный SELECT через RealDictCursor и закрывает соединение. Никаких записей.
3. Вызов сервера из клиента
При запущенном сервере на порту 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 разворачивает результат FastMCP: каждый элемент в result.content содержит JSON-нагрузку в text, которую он разбирает и извлекает database.
Примечание:
clients/simple_server_client.pyвызываетclient.call_tool("greet", ...), но инструмент вsrc/simple_server.pyзарегистрирован под именемGreeting(greet— это только имя Python-функции). Используйте"Greeting"для вызова.
4. Регистрация серверов в MLflow
mlflow_mcp_registry_util.py содержит четыре корутины, каждая демонстрирует одно API регистрации:
register_postgresql_mcp_server()
Регистрирует удалённый сервер — тот, который уже запущен и доступен по 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 превращает каждую запись в remotes в точку доступа MLflow, так что потребители могут получить URL подключения из реестра, а не прописывать его жёстко.
register_qdrant_mcp_server()
Вместо этого регистрирует упакованный сервер — запущенный процесс не требуется. Запись описывает, как его запустить (uvx mcp-server-qdrant через stdio) и объявляет переменные окружения, в том числе обязательные и секретные (QDRANT_API_KEY).
discover_tools()
Вызывает refresh_mcp_server_version_tools(...). MLflow подключается к зарегистрированной версии сервера, перечисляет его инструменты и сохраняет их в версии — после чего server_version.tools содержит список обнаруженных имён инструментов. Для этого сервер должен быть фактически доступен.
list_endpoints()
Вызывает search_mcp_access_endpoints(server_name=...) и печатает URL каждой точки доступа, тип транспорта и версию сервера, на которую она указывает.
Запуск
Блок __main__ запускает одну корутину за раз; остальные закомментированы. Раскомментируйте нужную:
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Зарегистрированные серверы затем отображаются в разделе MCP Servers интерфейса MLflow по адресу http://127.0.0.1:5000.
Рекомендуемый сквозной сценарий
Запустите MLflow на порту 5000.
Запустите PostgreSQL MCP сервер на порту 8000.
Проверьте, что он отвечает:
uv run python clients/postgres_server_client.py.Зарегистрируйте его: раскомментируйте
register_postgresql_mcp_server()и запустите утилиту.Обнаружьте его инструменты: переключитесь на
discover_tools()и запустите снова — должны вывестись шесть инструментов, описанных выше.Проверьте его точку доступа: переключитесь на
list_endpoints().Просмотрите результат в интерфейсе MLflow.
Структура репозитория
.
├── 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 и .idea добавлены в .gitignore.
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