One call, three outcomes
Every answer has a status: valid, with the code and the rules version it passed; invalid, with the reason; or error, which is ours, unbilled and safe to retry.
Forma Visuals · Chart your data · For developers
Ask for a chart over MCP or HTTP and get valid, invalid or error, never a maybe. A valid chart carries the version of the rules it passed; an invalid one says why; an error is ours and is never billed.
01 Real answers
An ECharts option you can pass straight to setOption, for a status page or an internal dashboard, drawn from the rates the request gives.
ECharts

One customer's usage as your API returns it, sent as JSON, back as a Chart.js config to show that customer on their usage page.
Chart.js
When your traffic happens, at a glance: the busy weekday middays and the quiet weekend nights, for capacity planning or a status page.
ECharts

The shape of your latency, not just its average: how many requests were fast, and how long the slow tail runs.
Chart.js
“Line chart of API request latency over one day, two lines: p50 and p99, in ms, by hour 0 to 23. p50: 42,40,39,38,38,40,45,58,72,80,84,86,85,88,90,87,83,76,64,55,50,47,45,43. p99: 120,115,110,108,110,118,140,190,260,310,330,345,338,352,365,350,320,280,220,180,160,145,135,125. x axis: hour of day, y axis: latency (ms).”
valid · chart@6baf09f0
Try these with their values filled in:
The playground allows illustrative values: any number your request does not give, Forma writes, and the answer says generated. Over the API and MCP, that request is refused unless it sets allow_generated_data.
02 How it fits
Every answer has a status: valid, with the code and the rules version it passed; invalid, with the reason; or error, which is ours, unbilled and safe to retry.
An invalid answer can fail the build, so a chart that does not pass the check stops there instead of shipping.
Gate CI on a verdict →Point Claude, ChatGPT, Cursor, VS Code, Windsurf or Codex at the MCP server and sign in when it asks.
Connect your agent →Vega-Lite, Plotly, ECharts, Chart.js and gnuplot. Name one in the request, or the default is used.
03 What you still check
04 Questions
No. An error is ours and is never billed. A valid and an invalid verdict each cost one credit, $0.01.
No. Two identical requests can return two different valid charts, and asking twice can return valid once and invalid the next, so store the answer you use. A valid chart names the version of the rules it passed.
Claude, ChatGPT, Cursor, VS Code, Windsurf and Codex. Code calls the same API over HTTP with a key.