Skip to main content
Glama
pavanjava

PostgreSQL Explorer MCP Server

by pavanjava

mcp-registry

Небольшое сквозное руководство по MLflow MCP Server Registry: создавайте MCP серверы с помощью FastMCP, вызывайте их через FastMCP клиент, а затем регистрируйте в MLflow, чтобы они были обнаруживаемыми — с версиями, точками доступа и автоматически обнаруженными инструментами.

Репозиторий состоит из трех частей:

Часть

Путь

Назначение

MCP серверы

src/

Два FastMCP сервера — игрушечный сервер приветствий и настоящий исследователь PostgreSQL

MCP клиенты

clients/

Тонкие FastMCP клиенты, вызывающие инструменты через потоковый HTTP

Утилита регистрации

mlflow_mcp_registry_util.py

Регистрирует серверы в 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 sync

Related MCP server: postgres-mcp-readonly

Конфигурация

PostgreSQL сервер читает настройки подключения из файла .env в корне репозитория (загружается через python-dotenv). .env добавлен в .gitignore — создайте свой:

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

Переменная

По умолчанию

Назначение

PGHOST

localhost

Хост сервера

PGPORT

5432

Порт сервера

PGUSER

root

Роль для входа

PGPASSWORD

root

Пароль

PGSSLMODE

prefer

Режим SSL libpq

PGADMINDB

postgres

База данных для общесерверных запросов (ListDatabases)

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

Инструмент

Аргументы

Возвращает

ListDatabases

Базы данных, не являющиеся шаблонами, с владельцем и размером в удобном формате

ListSchemas

database

Пользовательские схемы (системные и временные схемы исключены)

ListTables

database, schema

Таблицы и представления в схеме, с table_type

ListTableColumns

database, schema, table

Имя столбца, тип, допустимость NULL, значение по умолчанию — в порядке следования

ListTableRelations

database, schema, table

Внешние ключи, разделенные на outgoing (эта таблица → другие) и incoming (другие → эта таблица)

ListSchemaRelations

database, schema

Плоский список рёбер from_table.from_column → to_table.to_column для всей схемы — ERD в виде списка

Каждый инструмент использует _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.


Рекомендуемый сквозной сценарий

  1. Запустите MLflow на порту 5000.

  2. Запустите PostgreSQL MCP сервер на порту 8000.

  3. Проверьте, что он отвечает: uv run python clients/postgres_server_client.py.

  4. Зарегистрируйте его: раскомментируйте register_postgresql_mcp_server() и запустите утилиту.

  5. Обнаружьте его инструменты: переключитесь на discover_tools() и запустите снова — должны вывестись шесть инструментов, описанных выше.

  6. Проверьте его точку доступа: переключитесь на list_endpoints().

  7. Просмотрите результат в интерфейсе 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.lock

mlflow.db, .env, .venv и .idea добавлены в .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