db-conn-mcp@0.8.2
CAUTION· not startedPublisher claims: "A dead-simple, self-hosted MCP server for securely querying databases via AI agents." 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
- no credential variables read in the code
- 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 under the guard. Not started: dependency install failed; the server itself was not observed. The code names no credential variable; the guard pins the network to what the honeypot saw and logs every call.
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-12 and scored it 76/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: Privileged sudo command; Privileged sudo command; 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
- Debian/Ubuntu: sudo apt-get install -y postgresql-clientFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell."`sudo apt-get install -y postgresql-client`; RHEL/Fedora `sudo dnf install -y postgresql`."Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.- **Secrets sanitation:** never commit `connections.json` or `.env` (both git-ignored); never print or log DSNs, hosts, or credentials; keep all error/diagnostic output sanitized (see Rule 6).Fix: Stop enumerating or reading credential locations; take secrets from a declared environment variable the user sets on purpose.completed = subprocess.run(command, cwd=repo, capture_output=True, text=True, check=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.The same token, for the page's own fetches. A visit authenticated by the session cookie arrives with no query string for app.js to read - the cookie is HttpOnlyFix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.chmod only tightens a file that already existed. The mode is advisory onFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.return subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.ignored = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.…u-mean for a near-miss spelling — parameter **names only**, never their values (Rule 6: a value can be a DSN). Unknown *tool* names keep the SDK's own error. - **Self-…Fix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.write-then-chmod leaves the contents on disk at the umask default (typically 0644)Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.inside = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.The dashboard's host process stopped. Run <code>db-conn-mcp gui</code> to bring it back.Fix: Remove the text that addresses the agent rather than the reader; describe behavior, do not instruct.@pytest.mark.parametrize("raw", ["npx -y pkg", "[]", '[""]', '["npx", 3]', '{"command": "npx"}'])Fix: Pin versions and sources; vendor anything fetched at install time.proc = subprocess.Popen( # noqa: S603 — command comes from our own config entriesFix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.completed = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.completed = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.subprocess.run(["git", "init", "-q", str(tmp_path)], check=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.The asset URLs carry the session token: every request is guarded, and a browser does not copy the page's query string onto its subresource loads. The server subFix: Keep SKILL.md to visible, descriptive text. Remove comments and encoded text that address the agent.- **Secrets sanitation:** never commit `connections.json` or `.env` (both git-ignored); never print or log DSNs, hosts, or credentials; keep all error/diagnostic output sanitized (see Rule 6).Fix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.write-then-chmod leaves the secret on disk at the umask default (typicallyFix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.f"run: chmod 600 {path}",Fix: Request the narrowest permission that works; replace wildcards with the exact paths or hosts.- RHEL/Fedora: sudo dnf install -y postgresqlFix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell._EXPECTED_SSL_REQUEST = b"\x00\x00\x00\x08\x04\xd2\x16\x2f"Fix: Put hosts, commands and strings in plain source. Decoding at runtime looks identical to malware and costs points on its own.connections"; pair with cancel_query(pid) to kill a stuck statement.Fix: Build commands from fixed arguments; do not interpolate untrusted strings into a shell.DDL inline (or writes `{database}_schema_{UTC}.sql` when output_dir is set). IfFix: Remove the call, or declare the host in frontmatter and explain in the README what is sent and why.subprocess.run(["git", "init", "-q", str(tmp_path)], check=True)Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.completed = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.# The npm launcher names itself, so a client set up through npx keeps using npx.Fix: Pin versions and sources; vendor anything fetched at install time.completed = subprocess.run(Fix: Build commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.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 db-conn-mcp@0.8.2 as of 2d ago. This is the package itself, not its dependencies.
What would make this Verified
4 points to 80 · weights: behavior 45%, static 25%, prompt 15%, publisher 15%- Unclaimed publisher≈ +8 on the totalClaim idle-sync: a verified publisher gets +50 on publisher trust. It is free and usually instant with GitHub sign-in.
- Privileged sudo command≈ +4 on the totalBuild commands from fixed arguments; do not interpolate untrusted strings into a shell.
- 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.
- Python subprocess execution detected≈ +2 on the totalBuild commands from fixed arguments, never from interpolated strings; prefer an API client over shelling out.
- File permission modification command≈ +2 on the totalRequest the narrowest permission that works; replace wildcards with the exact paths or hosts.
- npx invocation of non-well-known package≈ +2 on the totalPin versions and sources; vendor anything fetched at install time.