server-everything
npm:@modelcontextprotocol/server-everything@2026.1.26
github.com/modelcontextprotocol/servers
Severity breakdown
Worst finding
Tool `get-env` exposes secrets or credentials to the agent
· get-env
`get-env` appears to read or return secrets, API keys, credentials, or environment variables (Returns all environment variables, helpful for debugging MCP server configuration). Values surfaced in the model context are visible to any prompt with injection access; a compromised agent can relay them to an attacker-controlled server.
fix: Do not expose secrets to the agent: inject them server-side at call time rather than passing them through the model context. If a tool must return a credential, scope it with a capframe-bind time-limited caveat and log every issuance.
All 5 findings
- highTool `get-env` exposes secrets or credentials to the agent· get-envsecret exposure
`get-env` appears to read or return secrets, API keys, credentials, or environment variables (Returns all environment variables, helpful for debugging MCP server configuration). Values surfaced in the model context are visible to any prompt with injection access; a compromised agent can relay them to an attacker-controlled server.
fix: Do not expose secrets to the agent: inject them server-side at call time rather than passing them through the model context. If a tool must return a credential, scope it with a capframe-bind time-limited caveat and log every issuance.
- highTool `toggle-subscriber-updates` name implies a side effect that is not declared· toggle-subscriber-updatesexcessive agency
`toggle-subscriber-updates` looks like a side-effecting tool (its name contains a mutation verb), but its `side_effects` declaration is []. A policy synthesizer cannot produce safe rules for this tool because it cannot tell what it actually does.
fix: Declare the tool's true side effects explicitly. If the tool is genuinely read-only, rename it to match (e.g. `email.preview` rather than `email.send`).
- mediumTool `echo` accepts unconstrained string input· echounconstrained input
The following string parameter(s) have no `maxLength` constraint: `message`. Unbounded strings let an attacker stuff arbitrary payloads through the tool, including indirect-injection content.
fix: Add a `maxLength` to each string property, or constrain with an `enum` or `pattern`. Most legitimate tool inputs fit under a few hundred bytes.
- mediumTool `gzip-file-as-resource` accepts unconstrained string input· gzip-file-as-resourceunconstrained input
The following string parameter(s) have no `maxLength` constraint: `data`, `name`. Unbounded strings let an attacker stuff arbitrary payloads through the tool, including indirect-injection content.
fix: Add a `maxLength` to each string property, or constrain with an `enum` or `pattern`. Most legitimate tool inputs fit under a few hundred bytes.
- mediumTool `simulate-research-query` accepts unconstrained string input· simulate-research-queryunconstrained input
The following string parameter(s) have no `maxLength` constraint: `topic`. Unbounded strings let an attacker stuff arbitrary payloads through the tool, including indirect-injection content.
fix: Add a `maxLength` to each string property, or constrain with an `enum` or `pattern`. Most legitimate tool inputs fit under a few hundred bytes.
How this was scored
Source sandbox — live tools/list captured in an ephemeral Docker container (parameter schemas included → R1/R2/R4 fire). Findings are emitted by the public capframe.findings.v1 schema. Score = 100 − (10·Critical + 4·High + 2·Medium + 1·Low), clamped to [0, 100].
Disagree with a finding? Open an issue.