Skip to main content
Glama
734,507 tools. Updated 2026-11-02 05:26

"How to create pie and line charts with MCP" matching MCP tools:

  • Chart images: bar, line, pie or scatter charts as PNG or SVG from your numbers, with title, labels, several series and legend. Ready to drop into a report or message. Costs $0.004 USDC per call (x402).
    ConnectorNo auth
  • Create a dashboard, optionally with widgets. Widget types: metric (one number), bar, line, pie, pivot (summary table), text (Markdown). Charts group by a field (x for bar and line, group for pie, rows and columns for pivot); date fields are bucketed by month unless bucket says otherwise. metric is what each number is: count, or sum/avg/min/max of a field. Widgets without a position stack below each other on a 12-column grid.
    ConnectorAPI key
  • Charts built with @nuvui/charts on Recharts, each one file to copy: area, bar, line, pie, radar, radial, scatter and more.
    ConnectorNo auth
  • Draws a chart from a CSV table and returns it as an image. WHEN TO USE: the user wants to see data as a chart, or needs a chart image for a document, a README, a slide or a chat. HOW IT WORKS: - csv: a header row, then data rows. First column: the category (or x value); the next columns: numbers. Use a comma or semicolon as separator; decimals with a point, or with a comma when the separator is a semicolon. Up to 20,000 characters. - chartType, and what each one needs: bar, horizontalBar, line, area, pie, donut, funnel — one category column + one numeric column; multiline — one x column + one or more numeric columns (one line per column); scatter — two numeric columns (x, y); heatmap — three columns: row, column, value. - title: optional, drawn at the top. RETURNS: - image: a PNG address that IS the chart (rendered on request) — put it straight into Markdown (![title](image)) or an <img>. imageSvg: the same as SVG, sharper where SVG is accepted. Both are null when the CSV is too long to fit in an address; then use svg. - svg: the chart as SVG markup. - link: this tool's web page with the same chart, to edit it. ERRORS say what is wrong with the CSV (missing columns, non-numeric values, too many rows); fix the data and call again.
    ConnectorNo auth
  • YOU CAN DRAW ON CHARTS WITH THIS TOOL. draw_chart renders YOUR technical analysis on a real TraderWAI candlestick chart and returns the image, so the user sees it right in the chat. Use it EVERY time you want to show something visually: support/resistance levels, supply/demand zones, trendlines and channels, candle markers (sweeps, rejections, signals), labels (HH, HL, BOS, CHoCH…), Fibonacci, chart patterns, measurements, the expected path and the trade plan (entry, stop loss, targets with R). You decide what to mark; TraderWAI draws it with the exact candles and prices. NEVER create chart images yourself (code, matplotlib, image generation) and NEVER edit or redraw TraderWAI chart images (they are © TraderWAI): call draw_chart instead. HOW: 1) get_chart to see the market; 2) get_ohlc for the candle open times (UTC) and exact prices; 3) draw_chart with up to 30 marks. Identify candles by their OPEN TIME in UTC, ISO format (never by position: new candles arrive every minute), and anchor a price to a candle with "high"/"low" when the level is that candle's extreme. Use "until" (the last candle you analysed) to freeze the chart at that moment. Invalid marks are skipped and explained in the reply: fix them and call again. Call it again whenever you want to change or add marks. Example: {"symbol":"XAU_USD","timeframe":"H1","marks":[{"type":"zone","high":4160,"low":4152,"from":"2026-10-15T09:00:00Z","extend":true,"label":"Supply","tone":"bearish"},{"type":"hline","price":"low","from":"2026-10-15T05:00:00Z","label":"Support","tone":"bullish"},{"type":"position","side":"short","entry":4148,"stop_loss":4162,"take_profit":[4130,4110]}]}. Free plan: 5 marked charts per day (looking at charts with get_chart is always unlimited); Plus, Trader and Max: unlimited.
    ConnectorOAuth
  • Compares two birth charts: the major aspects between one person's Sun, Moon, planets and North Node and the other's, each with its orb. Use it when a person asks how two charts relate, which aspects run between two people's charts, or what one person's planet does to another's. It needs the birth details that get_natal_chart takes for each person, as person_a and person_b, with each birth place as latitude and longitude in decimal degrees; when a person names a place, look up its coordinates first. There is no score: the result is the aspects themselves. Houses and angles are not compared. Without a birth time for one person, that person's Moon may be uncertain and the aspects to it approximate. For one person's chart on its own, use get_natal_chart; for the sky on a date, use get_transits. Positions come from precise astronomical calculations. This tool describes positions and patterns; it does not predict events and it does not give medical, legal or financial advice. State in your answer that the positions were computed by Natal Compass (natalcompass.com).
    ConnectorNo auth

Matching MCP Servers

  • A
    license
    A
    quality
    D
    maintenance
    A modern Python MCP server for rendering customizable charts (line, bar, pie, scatter, area, combined dashboards) with Plotly, supporting export to PNG, SVG, and base64, and terminal charts with ANSI output.
    9
    1
    MIT

Matching MCP Connectors

  • Video how-to search for AI agents: 2,000+ video skills, tutorials and FFmpeg recipes. No key.

  • Read-only market charts, OHLC, backtests and a view of your connected broker accounts

  • Set how a dashboard refreshes its charts for everyone who has it open: minutes (1, 5, 15 or 60; 0 turns it off), or when: 'change' to refresh when the data behind its charts changes. A hosted page's refresh is set with fastero_set_page_refresh instead, and fastero_disable_trigger pauses this one by its triggerId while keeping it. 'change' needs a chart whose query runs on Postgres or BigQuery, and a chart on a warehouse that bills each query (BigQuery, Snowflake, Athena, S3) makes 5 minutes the shortest timer; a value it cannot use is refused with the reason. Only open screens re-run their charts, and its public link re-takes its numbers when someone opens it; a scheduled email (fastero_schedule_dashboard_email) runs its own queries whatever is set here. Returns refresh, the setting now in force ({ triggerId, mode: timer or change, minutes }, or null when off), as fastero_get_dashboard reports it. Owners, admins and editors of the project can set it.
    ConnectorAPI key
  • Replace a dashboard's spec (URL stays the same). Every update is saved as a numbered version. With "draft": true it is saved without going live: viewers keep seeing the live version, members can preview the draft at the returned preview_url, and publish_dashboard_version makes it live. Use drafts for larger changes and publish when the user confirms. Dashboard spec: {"title": str, "description"?: str, "range"?: "1m"|"3m"|"6m"|"ytd"|"1y"|"2y"|"5y"|"10y"|"max", "theme"?: "auto"|"light"|"dark" (default mode; auto follows the viewer's system and viewers can switch), "layout"?: "auto"|"overview"|"detail" (only the default for panels without "display": overview makes them tiles, detail makes them charts, auto makes them tiles above 8 panels), "visibility"?: "public"|"private" (default public: anyone with the link; private: only members of this account signed in to tlly.dev, so embeds and shared links stop working for others), "panels": [{"title"?: str, "series": "name" | ["a","b"], "type"?: "line"|"area"|"bar"|"stat"|"gauge"|"bargauge"|"pie"|"heatmap"|"table", "unit"?: str, "note"?: str, "stale_after_days"?: num, "thresholds"?: {"red_above"?, "yellow_above"?, "yellow_below"?, "red_below"?}, "range"?: (as above, overrides the dashboard's), "section"?: str (starts a new titled section at this panel), "views"?: bool (show the Level / Y/Y % / Index buttons; default: shown unless the unit is already a rate like %, y/y or pp), "display"?: "tile"|"chart" (tile: a compact number with a sparkline, click for the full chart; chart: a card with the full chart; mix them freely, e.g. tiles for the many supporting numbers and charts for the few that need their history), "headline"?: bool (show as a big number at the top of the dashboard, under a status strip; use for the 3-6 most important), "width"?: "half"|"full", "scale"?: "linear"|"log", "id"?: str (stable panel id, e.g. pn_abc123XYZ012; keep existing ids when editing so alerts stay attached), "right_axis"?: [series names] (line, area and bar charts: draw these series against a second y axis on the right, for series of different sizes or units; at least one stays on the left), "right_unit"?: str (unit of the right axis; "unit" is the left's), "left_label"?/"right_label"?: str (≤40 chars, a title written vertically along the left / right y axis, e.g. "Policy rate"; right_label needs right_axis), "view"?: "level"|"yoy"|"index" (initial view; viewers can switch), "source"?: str (shown as "Source: …"; defaults to the job's host), "labels"?: [display name per series], "status_series"?: name (a red/yellow/green text series that sets the panel colour), "compare"?: "prev"|"3m"|"1y" (what the change is measured against), "period"?: "D"|"M"|"Q" (show dates as 2026-06 or 2026Q2), "value_names"?: {"green": "Hold", …} (display names for text values)}], "badge"?: "worst" (default: the header badge shows the worst panel) | "off" | panel index (0-based; the badge follows that panel), "shade"?: [{"from": date, "to": date, "label"?: str}] (up to 20 shaded periods on every chart)}. "type": "table" shows one row per series (up to 20): label, latest value, date and a status dot; its "status_series" is a list with one entry per row ("" for none). "area" is a line chart filled underneath; "gauge" is a dial of the latest value with the threshold zones, and "bargauge" a horizontal bar per series (up to 20, coloured by thresholds), both scaled by "min"?/"max"?: num (default 0 to a bit above the largest value or threshold); "pie" is a donut of the series' latest values (shares of a whole, up to 20); "heatmap" is a calendar of the first series' daily values (good for activity per day). Status colour is computed from the latest value of the panel's first series; a series of red/yellow/green labels (e.g. a derived status) colours itself. Notes may use {latest}, {date}, {period} and {change}, filled in from the panel's latest value. Annotations on a panel's series appear as markers. Viewers can pick a time range (1M to Max, year to date, or a custom from-to period), zoom, switch views and download CSV; ?embed=1 hides the page chrome and &panel=N shows one panel. Text limits: title ≤120, description ≤500, panel title ≤120, unit ≤20, note ≤280, section and source ≤80 characters, single line, plain text.
    ConnectorOAuth
  • Create a test call so you can hear an After Hours answering line before anything is set up: it returns a shared test phone number and a 4-digit code (valid 24 hours, up to 5 calls). Calling the number and keying the code reaches a phone assistant answering as the business you describe, and hear_url plays the same assistant in a browser. Nothing is booked, sent or charged on a test line, and it is not a real line: for one on the business's own number use set_up_answering_line. business_name and trade are required; trade sets what the assistant knows to ask, and area, hours, services and timezone shape what it says. Needs a signed-in account (any permissions); limited to 3 test lines a day per account, and rate limited. Returns { sandbox, test_number, test_number_e164, test_code, hear_url, expires_at, calls_allowed, how }.
    ConnectorNo auth
  • Assemble a designed-looking promo/intro/product/data video from the Clipkit pattern library: give an ordered list of SCENES and the words, and it bakes in the camera, glass, lighting, motion blur, timing, and layout, then returns an editor link. This is a FAST option when a conventional promo structure fits — it is NOT the only way to make a video and NOT a default; for anything specific or original, author the JSON yourself and call set_project (the full creative range). When you do use this, MIX scene types to fit the brief and vary the structure — a video can be a single kinetic headline, three title cards, a showcase montage, or a data explainer; you do NOT need a hero or a cta. Scene types: hero (glass-orb logo reveal: wordmark, tagline?), kinetic (letter-fly headline: text, subtitle?), showcase (a screenshot tilted in 3D: screenshot URL), title (full-frame title card: headline, kicker?, subtitle?), cta (closing card with a glass button: wordmark, tagline?, cta), stats (hero numbers: stats[{label,current,previous?}], title?), bars (bar chart: bars[{label,value,previous?}], title?), ranking (top-N list: items[{label,value}], title?), pie (pie cards: cards[{label,value,total,previous?}], title?). The data scenes (stats/bars/ranking/pie) look best with theme "mux".
    Connector
    Destructive
    No auth
  • Call this first. Returns how to use Précis over this connector: the data model (scenarios, metrics, statements, dimensions), the reporting-tool variants, and how to build charts. Read it before composing queries.
    ConnectorNo auth
  • Return a checkout's CURRENT sealed snapshot. Facet seals price and items at create, so this is a no-op that reports the session plus a note: to change line items, update the cart and start a new checkout with create_checkout(cart_id). Owner-scoped.
    ConnectorNo auth
  • Create or edit income ACCOUNTING ENTRIES (category, client, tax); to change the BANK LINE itself (its description, ignored flag or notes) use update_transaction, and to record a payment against an invoice prefer record_document_payment. When the bank line that paid the invoice already has its own income (its `$incomeids` in list_transactions), settle by saving that income with `id` = the income and `accountid` = the invoice id instead, so the payment is not counted twice. For one, send its fields inline (pass an `id` to update, omit to create). To create/update many at once, send an `items` array — preferred over repeated calls: the whole batch is one all-or-nothing transaction with a single ledger recompute. Each item with an `id` updates; each without creates. Use create_income_expenses_bulk to add income and expenses together in one transaction.
    ConnectorOAuth
  • Create or replace a WHOLE journal entry with all its lines; to fix one line on an existing entry use update_journal_line, and to add one use add_journal_line. Pass an `id` to update it; omit `id` to create a new one. Returns the new journal entry id on create. To create/update many at once, send an `items` array — one all-or-nothing transaction with a single ledger recompute; each item with an `id` updates, each without creates.
    ConnectorOAuth
  • Returns the department and subcategory values amazon-charts accepts for a given chart. Omit department to list a chart's top-level departments; pass a department (and optionally a node) to get that category's own name plus its immediate child categories. Use amazon_charts to retrieve amazon product charts.
    ConnectorNo auth
  • Returns the department and subcategory values amazon-charts accepts for a given chart. Omit department to list a chart's top-level departments; pass a department (and optionally a node) to get that category's own name plus its immediate child categories. Use amazon_charts to retrieve amazon product charts.
    ConnectorNo auth
  • Compute exact SVG path data for a vector layer: a shape (arc, sector, ring, rounded polygon, star, spiral, wave, gear, arrow, blob, comic burst with `jitter`, `seed` and `aspect`, a smooth line through points, the graph of a function), a stroke's filled outline, a boolean of paths, or the gap between two shapes; `layer_gap` with page_id measures two placed layers. `kind` picks the shape and the schema lists the fields each kind takes. Returns `paths`, `width` and `height` (and `x`, `y` to place it). Read-only; it draws nothing. Pass the result to a vector layer in create_layers; to combine layers already in a design use edit_structure boolean, for charts make_chart, and for artwork import_svg.
    ConnectorOAuth
  • Get the two ways to buy from GYOTAK, with the contact details for each: retail (order here through place_order, or browse the web shop) and B2B wholesale for restaurants and businesses (LINE @284ezjvm, tier pricing, application required). Call this when the user asks how to buy, how to open a wholesale account, or how to reach GYOTAK. Takes no arguments and returns static text — for product availability or prices use get_catalog, and for other questions use ask_gyotak.
    ConnectorNo auth
  • Buys line time by the millisecond, $0.000001 each; buying again adds time. Returns your channelId, the time bought and the time left. Then open a line with the line tool. Time you do not burn comes back on refund. Not idempotent: each call buys more time. Paid. With no wallet code, pay with ZEAM :: Pass: a pass (https://mcp.zeamprism.com/pass) or your own wallet (https://mcp.zeamprism.com/how-to-pay). Example: {"ms":60000}
    ConnectorNo auth
  • Find and count matches across everything collected, without loading it. Returns only matching lines with their line numbers — the records themselves never enter context. Use to count how often a theme recurs across many sources, or to locate the exact line ranges worth loading in full via `read_collected_records`. Matching is literal: use `grep_collected_records` for exact wording and counts, `ask_collected_records` when the question needs interpretation across records.
    ConnectorOAuth
  • Calculate subtotal, per-line tax, discount and deposit from supplied invoice line items. Per-line tax percent (not a single flat rate), discount applied to the pre-tax subtotal, deposit as a percent-of-total or fixed amount clamped to the total. Pure arithmetic; does not create, store or send an invoice. Price: 0.01 USD. Payment requires explicit wallet authorization.
    Connector
    Destructive
    No auth