v0.2.0 · live
CAPFRAME
§ serverhttpfindings.v2

Chainflip Broker MCP

https://chainflip-broker.io/mcp

github.com/chainflip-io/chainflip-mcp

Score
B80
Findings
5
Tools
6
Last scan
2026-07-20

Severity breakdown

Critical0
High5
Medium0
Low0
Info0

Worst finding

Tool `get_quotes` accepts an unbounded monetary / quota value

· get_quotes

The numeric parameter(s) `amount` have a money/quota-shaped name but no `maximum` constraint. An LLM tricked by indirect-injection can call the tool with arbitrarily large values.

fix: Add a `maximum` (and ideally `minimum`) to each money/quota numeric, OR enforce the cap via a capframe-bind `--limit` caveat at the agent boundary.

All 5 findings

  1. high
    Tool `get_quotes` accepts an unbounded monetary / quota value· get_quotesexcessive agency

    The numeric parameter(s) `amount` have a money/quota-shaped name but no `maximum` constraint. An LLM tricked by indirect-injection can call the tool with arbitrarily large values.

    fix: Add a `maximum` (and ideally `minimum`) to each money/quota numeric, OR enforce the cap via a capframe-bind `--limit` caveat at the agent boundary.

  2. high
    Tool `get_quotes` exposes secrets or credentials to the agent· get_quotessecret exposure

    `get_quotes` appears to read or return secrets, API keys, credentials, or environment variables (Get swap quotes for exchanging one crypto asset to another. Returns available quotes with exchange rates, fees, and estimated output amounts. API key is optional.). 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.

  3. high
    Tool `start_dca_swap` exposes secrets or credentials to the agent· start_dca_swapsecret exposure

    `start_dca_swap` appears to read or return secrets, API keys, credentials, or environment variables (Start a DCA (Dollar Cost Averaging) cross-chain swap that splits into multiple sub-swaps over time. Returns the deposit address. API key is optional.). 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.

  4. high
    Tool `start_swap` exposes secrets or credentials to the agent· start_swapsecret exposure

    `start_swap` appears to read or return secrets, API keys, credentials, or environment variables (Start a cross-chain swap. Returns the deposit address where you should send your source asset. API key is optional.). 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.

  5. high
    Tool `get_native_quotes` exposes secrets or credentials to the agent· get_native_quotessecret exposure

    `get_native_quotes` appears to read or return secrets, API keys, credentials, or environment variables (Get swap quotes for exchanging one crypto asset to another using native (smallest unit) amounts. Returns available quotes with exchange rates, fees, and estimated output amounts. Use this when you have amounts in native units (e.g., satoshis for BTC, wei for ETH). API key is optional.). 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.

How this was scored

Source http live HTTP MCP endpoint, classified against every rule. 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.