Issue #274 closed: Database env var listing returns secret values in plaintext by default
Summary
The env_vars tool documents that secret values are masked by default (returned as ***) so they aren't leaked to MCP clients, and that a caller must explicitly pass reveal=true to see plaintext. That promise holds for applications and services, but not for databases.
When you list the environment variables of a database, the values come back in plaintext, straight away, with no opt-in. Worse, passing reveal=true or reveal=false makes no difference to the database case at all — the flag is simply ignored.
Steps to reproduce
- Point the MCP server at a Coolify instance that has at least one database with env vars set (a password, a connection string, anything sensitive).
- Call the
env_varstool with the database resource and thelistaction, leavingrevealunset (i.e. rely on the documented default). - Do the same for an application and for a service.
Expected
All three resource types behave the same way the tool description promises: values masked as *** by default, real values only when reveal=true is passed explicitly.
Actual
- Application list → masked. ✅
- Service list → masked. ✅
- Database list → plaintext secrets returned by default, and
revealhas no effect. ❌
Why this matters
Database env vars are one of the most sensitive things this server can touch — they routinely hold DB credentials and connection strings. The masking layer exists specifically to stop those from being handed to an LLM client by accident. Right now the database path is a hole straight through it, and because the flag is ignored there's no way to even ask for masking. This also silently contradicts the tool's own documented default, so a caller trusting the docs is being misled.