Flint Chart
Turn compact, editable specifications into polished charts across multiple visualization backends.
CI uses explicit read-only contents permission, and CodeQL permissions are scoped by job, but the evidence does not define least-privilege boundaries for the MCP server at runtime, so least_privilege is only thinly supported. The README says data may be embedded or read from local JSON, CSV, and TSV files and distinguishes hosted from local MCP use, but it gives no hosted-service retention, transport, telemetry, sensitive-data, or action-confirmation policy. No rollback or recovery workflow is documented. External effects are partly identified as opening an interactive view and producing PNG, SVG, native specifications, or Excel output, but their full side-effect boundary is not described. Scheduled CodeQL, constrained CI permissions, and dependency overrides are useful dependency-security measures; no scan results, lockfile, or vulnerability-response evidence was supplied, preventing full marks. The official Microsoft organization, Microsoft Research and IDEAS Lab attribution, copyright notice, and MIT file provide clear, consistent provenance, justifying full source_attribution marks.
The README, package scripts, CI, and tests broadly agree about the principal components and build workflow, while the supplied tests exercise concrete sparse-data, axis-selection, and dodge-planning cases. However, the README says version 0.5.1 extends themes to Plotly and later says ThemeSpec currently affects only Vega-Lite, so self_consistency is not complete. Node 18+, npm commands, workspace scripts, and CI on two Node versions adequately support ordinary dependency availability, but subpackage manifests, a lockfile, and platform or offline constraints were not supplied. There is no evidence of user-facing error messages, diagnostic structure, or recovery guidance, so failure_messages scores zero.
Library use, hosted and local MCP, chat and coding environments, large datasets, custom themes, multiple rendering backends, and Excel give thorough audience-and-scenario coverage. Backend scope, the source-only Python preview, accepted local file types, and theme applicability provide some boundaries, but the theme statements conflict and unsupported chart types, scale limits, and MCP restrictions are not systematically documented. The MCP is said to expose tools for template choice, validation, and rendering, but no tool schemas, invocation rules, or refusal conditions are included, leaving trigger_precision thin. Node requirements, compatible client examples, a hosted endpoint, local operation, and development commands provide adequate environment fit; complete client configuration is deferred to an external page, so this is not full coverage.
The README clearly structures features, installation, library use, themes, MCP, repository layout, development, and contribution paths, earning full information_architecture marks. Installation is concise and includes Node 18+ plus a local-MCP recommendation for large datasets, but full MCP client configuration is deferred elsewhere. Package, component, and assemble API names are consistent in the supplied files, although no compatibility or deprecation policy establishes stronger naming stability. There are several concrete code, agent-prompt, and test examples, but no FAQ or troubleshooting examples. The Python preview and a theme limitation are disclosed, yet limitations are not comprehensive and the theme statements conflict. The complete MIT text matches the README metadata, justifying full license marks. Dated updates, semantic releases, release references, and a changelog path justify full versioning_changelog marks. The official organization, named research groups, contribution guidance, security-reporting path, and CI update path clearly establish maintenance responsibility.
Outputs are designed for direct use with Vega-Lite, ECharts, Chart.js, Plotly, Excel, PNG, SVG, and interactive views; editable input specifications and inheritable themes further support usability. A compact semantic input that derives layout and produces several backend-native representations offers clear marginal value over requiring agents to hardcode each backend. MIT licensing, npm/npx installation, and a shared input shape reduce adoption cost, but hosted-service data costs, network dependence, rendering-resource usage, package size, and operational burden are not disclosed, so cost_benefit is not complete.
Major claims can be traced to named APIs, repository paths, scripts, CI, and tests for specific algorithmic behavior, but core implementations, MCP tool definitions, and output snapshots were not supplied, preventing full claim_traceability. README component claims are corroborated by package.json, CI, and test files, while important claims about all backends, the hosted MCP service, and visual quality lack independent support in the provided evidence. Facts, plans, and recommendations are usually labeled, such as the unreleased Python package and forthcoming paper; however, the arXiv badge versus the statement that a paper is coming soon, along with conflicting Plotly-theme scope statements, weakens complete fact-inference separation.
- The supplied material does not state the hosted MCP endpoint's retention, logging, telemetry, transport-protection, or sensitive-data policies; verify them before sending non-public data.
- The MCP can read local JSON, CSV, and TSV files, but no runtime file-access scope, path restriction, or per-read confirmation mechanism is shown; run it with a constrained directory and minimal permissions.
- The README conflicts on whether ThemeSpec supports Plotly; consult the implementation and backend reference at the assessed revision before relying on that capability.
- No evidence shows user-facing MCP failure messages, recovery or undo behavior, or complete tool-trigger schemas.
- This assessment is based only on the supplied static files; installation, tests, rendering, and security scans were not executed.
What does this agent do, and when should you use it?
Flint is a visualization intermediate language that derives scales, axes, spacing, labels, and layout from a semantic chart specification, its data, and an optional theme. The repository contains the `flint-chart` TypeScript library and the `flint-chart-mcp` server for chat and coding environments. A single `ChartAssemblyInput` can compile to native Vega-Lite, ECharts, Chart.js, or Plotly specifications, as well as editable Excel charts. The MCP server creates, validates, and renders charts, returning interactive views, PNG or SVG output, or backend-native specifications. It can be used through a hosted HTTP MCP endpoint or run locally with `npx`, with local deployment recommended for large datasets. The primary packaged implementation is JavaScript/TypeScript; the Python port remains an unpublished source-only preview.
Flint consumes a ChartAssemblyInput containing data, semantic_types, chart_spec, and optionally theme_spec. Data can be embedded in data.values, while MCP calls can also load local JSON, CSV, or TSV files through data.url. Its core interprets fields using more than 70 semantic types, including Rank, Temperature, Price, and Country, then selects layout, labels, legends, axes, mark geometry, typography, and color based on the data, chart design, canvas constraints, and theme. The library exposes assembleVegaLite, assembleECharts, assembleChartjs, assemblePlotly, and assembleExcel to produce each target's native object. The flint-chart-mcp component gives MCP-capable clients operations for choosing a template, validating the input, rendering output, and opening an interactive chart view.
- A data analyst who wants a chat assistant to turn public data into a validated, rendered chart can connect to the hosted or local MCP server.
- A TypeScript team targeting Vega-Lite, ECharts, Chart.js, or Plotly can switch rendering backends without changing its
ChartAssemblyInputshape. - An office analytics team that must hand off editable spreadsheets can call
assembleExcelto produce native Excel chart artifacts. - A design or brand team standardizing a chart library can apply a built-in theme or inherit a preset and override selected brand decisions with
ThemeSpec. - An agent workflow processing large local JSON, CSV, or TSV datasets can run the MCP server locally and reference files through
data.url. - A contributor developing chart templates can use the repository's Vite and React gallery/editor workflow with hot reloading against the library source.
What are this agent's strengths and limitations?
- One
ChartAssemblyInputproduces five kinds of backend-native output, including editable Excel charts, reducing the need to maintain separate input models. - More than 70 semantic field types and automatic sizing, spacing, label, mark, and legend decisions specifically reduce the low-level parameters an agent must author.
- The project supports direct TypeScript integration, a hosted HTTP MCP service, and a locally runnable MCP server for both application and conversational workflows.
- The formal
ThemeSpecsupports presets, inheritance, and selective overrides, allowing layout, semantic presentation, and visual identity to be reused as one system. - MCP output can include an interactive view, static PNG or SVG, or a backend-native specification, covering several delivery and handoff needs.
- Running and developing the packaged implementation requires Node.js 18 or newer; the Python port is only a source preview and has not been released as a package.
- The supplied theme documentation has a version-context discrepancy: the 0.5.1 update says themes extend to Plotly, while the theme section still says
ThemeSpeccurrently affects Vega-Lite, so adopters should verify behavior for their version and backend. - Loading local files through
data.urlrequires a local MCP server and filesystem access; the hosted endpoint is not a substitute for every local large-data workflow. - Applications consuming native specifications still need an appropriate Vega-Lite, ECharts, Chart.js, or Plotly rendering environment; Flint primarily assembles the output.
- The material explicitly documents remote MCP setup for Claude custom connectors and GitHub Copilot, but does not establish native integration with the other named chat or API platforms.
How do you install or deploy this agent?
Prerequisite: Node.js 18 or newer. Install the library in a JavaScript or TypeScript project:
npm install flint-chartStart the local server for agents and MCP clients:
npx -y flint-chart-mcpFor hosted use, add this remote HTTP MCP endpoint to a compatible client instead of installing the server locally:
https://flint.data-formulator.ai/mcpNo API key or other credential requirement is documented in the supplied material. In Claude, add the endpoint through Customize → Connectors → Add custom connector. The local server is recommended for large datasets.
How do you use this agent?
A first library invocation can produce a Vega-Lite specification from the common input format:
import { assembleVegaLite } from 'flint-chart';
const spec = assembleVegaLite({data: { values: myData },
semantic_types: { weight: 'Quantity', mpg: 'Quantity', origin: 'Country' },
chart_spec: {chartType: 'Scatter Plot',
encodings: {x: { field: 'weight' },
y: { field: 'mpg' },
color: { field: 'origin' }},
baseSize: { width: 400, height: 300 }}
});
Add theme_spec: 'economist' beside chart_spec to apply that preset. Pass the same input to assembleECharts(input), assembleChartjs(input), assemblePlotly(input), or assembleExcel(input) to change the output backend. For MCP use, connect the hosted endpoint or start the local server, then ask the agent to visualize data with Flint and a chosen style. MCP requests may embed rows in data.values or reference a local JSON, CSV, or TSV file with data.url.
How does this agent compare with similar options?
Compared with directly hardcoding the many scale, axis, spacing, label, and layout parameters required by Vega-Lite, ECharts, Chart.js, or Plotly, Flint uses a smaller semantic specification to derive those decisions and lets the same input target several backends. The tradeoff is an additional semantic-type, template, and compilation layer; teams needing exhaustive control over backend-specific behavior should verify that the generated native specifications meet their requirements.
FAQ
Does Flint require payment or an API key?
Can it read data from local files?
data.url, subject to the local server's filesystem permissions. Rows can also be embedded directly in data.values.Is MCP mandatory?
flint-chart and call its assemble* functions directly. MCP is the interface for agent-driven template selection, validation, rendering, and interactive viewing.Can I self-host it?
npx -y flint-chart-mcp; a hosted HTTP MCP endpoint is also available. Local operation is recommended for large datasets.Do themes behave identically on every backend?
ThemeSpec currently affects Vega-Lite, so theme coverage should be tested against the selected release and backend.