postgres-mcp-pro@0.4.2
CAUTION· not startedPublisher claims: "PostgreSQL Tuning and Analysis Tool" Observed in sandbox: no network, touches nothing outside the project, writes no memory.
Coverage
Not started: dependency install failed; the server itself was not observed.- Tested
- the dependency install step · every file read, file written and host contacted by what ran
- Not tested
- server startup · the tool list · tool behavior
What this means for the label: Caution here covers what ran. The server's tools were not exercised with a real credential, so nothing about their behavior is asserted; the credential summary below says what to do with that.
Before you give it your token
- It will ask for
ANTHROPIC_API_KEYDATABASE_URLEMAIL_PASSWORDGIGACHAT_ACCESS_TOKENGOOGLE_API_KEYLLM_MAX_TOKENSLLM_MAXTOKENS_MAXLLM_MAXTOKENS_MINOPENAI_API_KEYPG_PASSWORDConfiguration, not credentials: ACCESS_MODE, ACTIVE_LLM_CONNECTION, ANTHROPIC_API_VERSION, ANTHROPIC_BASE_URL, APP_HOST, APP_PORT, APP_TITLE, AUTO_CONNECT_DIALOG, CERT_DEFAULT_TTL_DAYS, CERT_GRACE_DAYS, CERT_PASSPHRASE, CERT_STORE_DIR, CHAT_MAX_TOOL_ITERATIONS, CHAT_TOOL_RESULT_TRUNCATE, CONNECTIONS_ENCRYPTION_KEY, CONNECTIONS_STORE, DB_DOCKER_HOST, DB_POOL_COMMAND_TIMEOUT, DB_POOL_FAMILY, DB_POOL_MAX_SIZE, DB_POOL_MIN_SIZE, DB_POOL_TIMEOUT, DEFAULT_CONNECTION_KEY, EMAIL_ADDRESS, EXPLAIN_ANALYZE, EXPLAIN_FORMAT, GIGACHAT_BASE_URL, GIGACHAT_MODEL_NAME, GOOGLE_BASE_URL, HOST_LOG_FILE- Where it talks to
- no vendor host named in the code
- What the honeypot saw
- no credential files read · no network
- What we could not test
- server startup · the tool list · tool behavior
Connect it with a scoped credential, under the guard. It asks for ANTHROPIC_API_KEY, DATABASE_URL, EMAIL_PASSWORD, GIGACHAT_ACCESS_TOKEN, GOOGLE_API_KEY, LLM_MAX_TOKENS, LLM_MAXTOKENS_MAX, LLM_MAXTOKENS_MIN, OPENAI_API_KEY, PG_PASSWORD and talks to its vendor. Give the credential to the guard, not the server: the value never enters the server's environment and only travels to the host you bind. What the tools do with a real credential was not observed.
Never paste a credential into a chat, a ticket or a report, including ours. How the guard holds it.
Is [email protected] safe to install?
KillerSkills ran it in the KillerSkills honeypot sandbox (2 scenarios; not started: dependency install failed; the server itself was not observed) on 2026-11-14 and scored it 74/100 (Caution). It is not known to be malicious, but it has behaviour or code a security policy should decide on before install. Notable findings: Access to sensitive file paths; Access to sensitive file paths; Access to sensitive file paths. Summary: no network, touches nothing outside the project, writes no memory.
Behavior trace
Honeypot run · 0 s · 2 scenarios · 0 deviationsStatic findings
python mcp_server.py --transport sse # принудительно SSE (host/port из .env MCP_SERVER_HOST/PORT)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Переопределяется: CERT_STORE_DIR в .envFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# умолчанию через DB_POOL_FAMILY, AF_UNSPEC=0 если .env явноFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# и max_tokens (читаются из .env LLM_TEMPERATURE/LLM_MAX_TOKENS наFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# - Транспорт (stdio/sse) по-прежнему выбирается через .envFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# и абсолютный путь к .env (этап 2, v1.1.0).Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# - Base URL провайдеров / LLM_HTTP_TIMEOUT / ANTHROPIC_API_VERSION вынесены в .env.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# - Лимит итераций tool-calling цикла вынесен в .env CHAT_MAX_TOOL_ITERATIONSFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.Также очищает ACTIVE_LLM_CONNECTION в .env (чтобы не конфликтовать)."""Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Константы — настраиваются через .env (см. key_manager.py)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.1. Переменная ACTIVE_LLM_CONNECTION (.env) — сопоставление по name.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Compute ENV_PATH before load_dotenv so it finds .env regardless of CWDFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose."""FALLBACK-конструктор из плоских переменных .env (старый путь).Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.ENV_PATH = os.path.join(_PROJECT_ROOT, ".env")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Попытка 2: legacy .envFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.python mcp_server.py # транспорт из .env (MCP_TRANSPORT, по умолчанию stdio)Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# уже управляется через .env (dotenv.enable = true в devenv.nix),Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.2. Иначе: миграция из .env (CONNECTIONS_ENCRYPTION_KEY) → cert.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# теперь читаются из .env (DB_POOL_MIN_SIZE, DB_POOL_MAX_SIZE,Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# в _maybe_replace_localhost() (для URL из .env / connections.json / UI),Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# подхватить .env независимо от порядка импортов.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# - Обратная совместимость: get_llm_client() (старый .env-путь) сохранёнFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Вместо голого Fernet-ключа в .env (CONNECTIONS_ENCRYPTION_KEY) мыFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# get_object_details) сохранена по поведению 1:1, включая .env-конфигFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# "fernet:" — старый формат, один глобальный ключ из .envFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.версionныеFix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.# Fallback на legacy .env-ключFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Приоритет: если в .env задан LLM_SYSTEM_PROMPT (непустая строка) —Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# пустом реестре fallback на старый get_llm_client() из плоских .env-переменных.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# - Если активного нет и нет .env-ключа → plaintext (с warning).Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# 2. Есть старый .env (CONNECTIONS_ENCRYPTION_KEY):Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.Если в .env есть CONNECTIONS_ENCRYPTION_KEY, оборачивает его в сертификат.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Попытка миграции из .envFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Конфигурация: YAML-каталоги + .env + шифрование секретовFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.f"вместо localhost, либо убедитесь, что DB_POOL_FAMILY=4 в .env "Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# 2. С префиксом "fernet:" но без kid → попробовать .env-ключ.Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.f"2. Для RHEL/CentOS: sudo yum install postgresql{major_version_str}-hypopg\n"Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.f"1. Для Debian/Ubuntu: sudo apt-get install postgresql-{major_version_str}-hypopg\n"Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.return f"Ошибка: отсутствуют параметры SMTP в .env: {', '.join(missing_params)}"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.logger.error("Отсутствуют необходимые параметры PostgreSQL в .env (PG_USER, PG_PASSWORD, PG_HOST, PG_PORT, PG_DATABASE)")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.from ..sql import check_postgres_version_requirementFix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.f"1. Для Debian/Ubuntu: `sudo apt-get install postgresql-{major_version_str}-hypopg`\n"Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# уровне модуля, чтобы гарантированно подхватить .env,Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.- path: .envFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.Unrestricted mode aligns with the approach of [Cursor's auto-run mode](https://docs.cursor.com/chat/tools#auto-run), where the AI agent operates with limited human oversight or approvals.Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.from postgres_mcp.sql import reset_postgres_version_cacheFix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.- **Unrestricted Mode**: Allows full read/write access to modify data and schema. It is suitable for development environments.Fix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.python mcp_server.py --transport sse # принудительно SSE (host/port из .env MCP_SERVER_HOST/PORT)Fix: Namespace tool names and keep tool descriptions literal; no instructions to the agent inside them.# Получение параметров логирования и PostgreSQL из .envFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.python -m src.postgres_mcp.autonomous.mcp_server --transport sse # MCP server (SSE)Fix: Namespace tool names and keep tool descriptions literal; no instructions to the agent inside them.logger.error("Отсутствуют необходимые параметры PostgreSQL в .env (PG_USER, PG_PASSWORD, PG_HOST, PG_PORT, PG_DATABASE)")Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.client.add_mcp_server(MCPServerConfig(name="postgres-mcp-tools-server", url="http://localhost:5000"))Fix: Namespace tool names and keep tool descriptions literal; no instructions to the agent inside them.return f"Ошибка: отсутствуют параметры SMTP в .env: {', '.join(missing_params)}"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.… { "role": "assistant", "content": f"\u274c \u041e\u0448\u0438\u0431\u043a\u0430 \u043f\u0440\u0438 \u043e\u0431\u0440\u0430\u0449\u0435\u043d\u0438\u0438 \u043…Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.&& rm -rf /var/lib/apt/lists/*Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# Загрузим ключи из .envFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.client.add_mcp_server(MCPServerConfig(name="postgres-mcp-tools-server", url="http://localhost:5001"))Fix: Namespace tool names and keep tool descriptions literal; no instructions to the agent inside them.- path: .envFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.RUN chown -R app:app /appFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.return f"Ошибка: отсутствуют параметры SMTP в .env: {', '.join(missing_params)}"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.&& rm -rf /var/lib/apt/lists/*Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.return f"Ошибка: отсутствуют параметры SMTP в .env: {', '.join(missing_params)}"Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.# Получение параметров логирования и PostgreSQL из .envFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.RUN chmod +x /app/docker-entrypoint.shFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.from ..sql.extension_utils import get_postgres_versionFix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.f"2. Для RHEL/CentOS: `sudo yum install postgresql{major_version_str}-hypopg`\n"Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.# позиции sys.argv[2]) — раньше "python mcp_server.py --transport sse"Fix: Namespace tool names and keep tool descriptions literal; no instructions to the agent inside them.# Загрузим ключи из .envFix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.Cost to the agent
Tokens estimated at four characters each. The tool list is re-read by the agent on every turn, so it is the number to compare between servers that do the same job: ranked across the index.
Known vulnerabilities
No advisories in OSV for postgres-mcp-pro@0.4.2 as of 4 min ago. This is the package itself, not its dependencies.
What would make this Verified
6 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim johann-schleier-smith-jssmith: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Access to sensitive file paths≈ +4 on the totalStop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.
- Privileged sudo command≈ +4 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- File type combined with upload action≈ +2 on the totalRemove the call, or declare the host in frontmatter and explain in the README what is sent and why.
- MCP server using network transport (SSE/HTTP)≈ +2 on the totalNamespace tool names and keep tool descriptions literal; no instructions to the agent inside them.
- Unicode escape sequence detected≈ +2 on the totalPut hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.