v0.2.0 · live
CAPFRAME
§ serversandboxfindings.v2

AntV Chart MCP

npm:@antv/mcp-server-chart@0.9.10

Score
C54
Findings
23
Tools
27
Last scan
2026-07-20

Severity breakdown

Critical0
High0
Medium23
Low0
Info0

Worst finding

Tool `generate_area_chart` accepts unconstrained string input

· generate_area_chart

The following string parameter(s) have no `maxLength` constraint: `axisXTitle`, `axisYTitle`, `title`. 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.

All 23 findings

  1. medium
    Tool `generate_area_chart` accepts unconstrained string input· generate_area_chartunconstrained input

    The following string parameter(s) have no `maxLength` constraint: `axisXTitle`, `axisYTitle`, `title`. 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.

  2. medium
    Tool `generate_bar_chart` accepts unconstrained string input· generate_bar_chartunconstrained input

    The following string parameter(s) have no `maxLength` constraint: `axisXTitle`, `axisYTitle`, `title`. 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.

  3. medium
    Tool `generate_boxplot_chart` accepts unconstrained string input· generate_boxplot_chartunconstrained input

    The following string parameter(s) have no `maxLength` constraint: `axisXTitle`, `axisYTitle`, `title`. 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.

  4. medium
    Tool `generate_column_chart` accepts unconstrained string input· generate_column_chartunconstrained input

    The following string parameter(s) have no `maxLength` constraint: `axisXTitle`, `axisYTitle`, `title`. 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.

  5. medium
    Tool `generate_district_map` accepts unconstrained string input· generate_district_mapunconstrained input

    The following string parameter(s) have no `maxLength` constraint: `title`. 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.

  6. medium
    Tool `generate_dual_axes_chart` accepts unconstrained string input· generate_dual_axes_chartunconstrained input

    The following string parameter(s) have no `maxLength` constraint: `axisXTitle`, `title`. 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.

  7. medium
    Tool `generate_funnel_chart` accepts unconstrained string input· generate_funnel_chartunconstrained input

    The following string parameter(s) have no `maxLength` constraint: `title`. 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.

  8. medium
    Tool `generate_funnel_chart` description mentions money but no `money` side-effect is declared· generate_funnel_chartexcessive agency

    Description: "Generate a funnel chart to visualize the progressive reduction of data as it passes through stages, such as, the conversion rates of users from visiting a website to completing a purchase." -- this references money/payment/refund/etc., but the declared side_effects ([]) don't include `money`. A capframe-bind policy that relies on declared side_effects to scope spend caveats will under-scope this tool.

    fix: Add `money` to the tool's `side_effects` declaration, or rewrite the description to clarify that no actual money moves.

  9. medium
    Tool `generate_histogram_chart` accepts unconstrained string input· generate_histogram_chartunconstrained input

    The following string parameter(s) have no `maxLength` constraint: `axisXTitle`, `axisYTitle`, `title`. 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.

  10. medium
    Tool `generate_line_chart` accepts unconstrained string input· generate_line_chartunconstrained input

    The following string parameter(s) have no `maxLength` constraint: `axisXTitle`, `axisYTitle`, `title`. 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.

  11. medium
    Tool `generate_liquid_chart` accepts unconstrained string input· generate_liquid_chartunconstrained input

    The following string parameter(s) have no `maxLength` constraint: `title`. 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.

  12. medium
    Tool `generate_path_map` accepts unconstrained string input· generate_path_mapunconstrained input

    The following string parameter(s) have no `maxLength` constraint: `title`. 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.

  13. medium
    Tool `generate_pie_chart` accepts unconstrained string input· generate_pie_chartunconstrained input

    The following string parameter(s) have no `maxLength` constraint: `title`. 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.

  14. medium
    Tool `generate_pin_map` accepts unconstrained string input· generate_pin_mapunconstrained input

    The following string parameter(s) have no `maxLength` constraint: `title`. 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.

  15. medium
    Tool `generate_radar_chart` accepts unconstrained string input· generate_radar_chartunconstrained input

    The following string parameter(s) have no `maxLength` constraint: `title`. 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.

  16. medium
    Tool `generate_sankey_chart` accepts unconstrained string input· generate_sankey_chartunconstrained input

    The following string parameter(s) have no `maxLength` constraint: `title`. 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.

  17. medium
    Tool `generate_sankey_chart` description mentions money but no `money` side-effect is declared· generate_sankey_chartexcessive agency

    Description: "Generate a sankey chart to visualize the flow of data between different stages or categories, such as, the user journey from landing on a page to completing a purchase." -- this references money/payment/refund/etc., but the declared side_effects ([]) don't include `money`. A capframe-bind policy that relies on declared side_effects to scope spend caveats will under-scope this tool.

    fix: Add `money` to the tool's `side_effects` declaration, or rewrite the description to clarify that no actual money moves.

  18. medium
    Tool `generate_scatter_chart` accepts unconstrained string input· generate_scatter_chartunconstrained input

    The following string parameter(s) have no `maxLength` constraint: `axisXTitle`, `axisYTitle`, `title`. 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.

  19. medium
    Tool `generate_treemap_chart` accepts unconstrained string input· generate_treemap_chartunconstrained input

    The following string parameter(s) have no `maxLength` constraint: `title`. 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.

  20. medium
    Tool `generate_venn_chart` accepts unconstrained string input· generate_venn_chartunconstrained input

    The following string parameter(s) have no `maxLength` constraint: `title`. 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.

  21. medium
    Tool `generate_violin_chart` accepts unconstrained string input· generate_violin_chartunconstrained input

    The following string parameter(s) have no `maxLength` constraint: `axisXTitle`, `axisYTitle`, `title`. 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.

  22. medium
    Tool `generate_waterfall_chart` accepts unconstrained string input· generate_waterfall_chartunconstrained input

    The following string parameter(s) have no `maxLength` constraint: `axisXTitle`, `axisYTitle`, `title`. 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.

  23. medium
    Tool `generate_word_cloud_chart` accepts unconstrained string input· generate_word_cloud_chartunconstrained input

    The following string parameter(s) have no `maxLength` constraint: `title`. 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.