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