Flint Chart 中文教程:固定 0.5.1,并收紧 MCP 的文件访问
Flint Chart 是 Microsoft 的语义图表编译器。它用一份 ChartAssemblyInput 生成 Vega-Lite、ECharts、Chart.js、Plotly 或原生 Excel 图表,并提供代理可调用的 MCP server。两个 npm 包当前都是 0.5.1,要求 Node.js 18+。
data.url 读取当前进程能访问的 JSON、CSV 和 TSV。处理不可信任务时,应加 --disable-file-reference。1. 用固定版本建立临时项目
mkdir flint-eval && cd flint-eval
npm init -y
npm install flint-chart@0.5.1
不要从 Python 教程开始。官方 README 明确写着 Python package 尚未发布,仓库里的 flint-py 是源码预览;普通用户当前应使用 JS/TS 或 MCP。
2. 编译一张最小 Vega-Lite 图表
import { assembleVegaLite } from 'flint-chart';
const spec = assembleVegaLite({
data: { values: [{ quarter: 'Q1', revenue: 1200 }] },
semantic_types: { quarter: 'Quarter', revenue: 'Price' },
chart_spec: {
chartType: 'Bar Chart',
encodings: { x: { field: 'quarter' }, y: { field: 'revenue' } },
baseSize: { width: 480, height: 320 },
},
});
console.log(JSON.stringify(spec, null, 2));
先检查生成 spec 的字段、聚合、排序、单位和轴范围,再交给 Vega-Lite renderer。Flint 减少代理直接写大型 spec 的错误,但不会知道业务口径是否正确。
3. 同一输入可以换后端
import {
assembleECharts,
assembleChartjs,
assemblePlotly,
assembleExcel,
} from 'flint-chart';
后端有不同能力。0.5.1 为 Plotly 增加 ThemeSpec 支持,但官方也说明无法实现的主题决定可能近似并写入报告。跨后端验收要对比实际图像、交互和导出的 Excel,而不是只看编译成功。
4. 本地 MCP 优先使用 stdio
{
"mcpServers": {
"flint": {
"command": "npx",
"args": ["-y", "flint-chart-mcp@0.5.1", "--disable-file-reference"]
}
}
}
stdio 只跟启动它的客户端通信。固定版本后,先调用 list_chart_types 和 validate_chart,再用内联 data.values 渲染一张 SVG。支持 MCP Apps 的客户端可以打开交互视图;否则使用静态 render_chart。
5. 文件访问和远程 URL 的边界
| 输入 | 本地 MCP 默认行为 |
|---|---|
| data.values | 直接使用内联 rows |
| 本地 .json/.csv/.tsv | 当前进程可读时允许;相对路径从工作目录解析 |
| 远程 http/https data.url | 拒绝,避免 SSRF |
| 加 --disable-file-reference | 本地文件也拒绝,只接受内联 rows |
只读不等于低风险。代理若能读到工作站上的财务、客户或密钥导出文件,内容仍可能进入模型上下文。应该同时使用隔离工作目录和最小系统权限。
6. 不要直接把 HTTP 模式暴露出去
源码的 HTTP CLI 默认 host 是 0.0.0.0。它方便容器或远程客户端,但会监听全部接口。没有反向代理认证、TLS、网络 ACL、速率限制和文件引用关闭时,不应在共享网络启动。官方也提供公共 HTTP MCP;敏感数据应留在本地 stdio,不能因为项目方提供端点就默认可以上传。
7. 和 Vega-Lite 怎么选
相比 Vega-Lite,Flint 处在更高一层:它用字段语义、自动布局和主题生成 Vega-Lite,也能生成其他后端。Vega-Lite 的声明式 grammar 对变换、通道、组合和交互控制更直接。已有成熟 Vega-Lite 代码时不必增加一层;代理需要跨后端输出时,Flint 更合适。
8. 0.5.1 与验证边界
CHANGELOG 将 0.5.1 标为 2026-08-13,主要把主题支持扩展到 Plotly,并新增 Vega-Lite Calendar Heatmap。0.5.0 引入正式 ThemeSpec、10 个预设、主题发现与 Theme Lab。
验证边界:未验证包完整性、任一后端输出、主题一致性、Excel 文件、MCP 客户端、PNG/SVG、HTTP 暴露或公共远程 MCP 的数据处理。示例要在固定版本和非敏感数据中实跑。
这里仅补原教程没有展开的事实和边界。安装命令与操作步骤仍以前文为准。
先判断这个项目是否适合你
近期变化与关注原因
代理直接写大型后端图表 spec 容易产生无效字段、脆弱布局和跨后端差异。Flint 增加语义类型、自动布局、模板和验证层,再编译到具体图表库。0.5.x 又加入正式主题规范、Plotly 主题和 Calendar Heatmap,覆盖从数据语义到视觉系统的更多环节。
适合谁用
适合让代理从结构化数据生成可验证图表、在多个前端后端间复用同一语义输入、统一品牌主题,以及在 MCP 客户端中迭代图表。需要直接使用 Vega-Lite 全部底层语法、已有固定后端 spec,或在 Python 中只通过 PyPI 安装的场景,当前 Flint 可能增加不必要的抽象或尚未满足。
采用建议
Flint 适合需要代理生成图表并跨多个后端复用语义输入的团队。先固定 0.5.1,用内联小数据和 stdio 验证编译结果;接入真实文件前决定是否关闭本地文件引用,任何对外 HTTP 部署都应另加认证、网络限制和数据审查。
原教程未展开的系统信息
核心功能
语义图表输入
用 Rank、Temperature、Price、Country 等 70 多种语义类型补充字段含义,让模板和格式选择不只依赖原始数据类型。
自动布局与主题
编译器根据基数、画布和图表类型决定尺寸、标签和图例;ThemeSpec 可使用预设、继承或自定义视觉规则。
本地 MCP 渲染
flint-chart-mcp 提供图表发现、验证、静态渲染和交互视图;本地模式在进程内渲染,不上传数据。
架构与数据流
Flint 输入先经过 schema 与语义类型检查,优化器再根据数据基数和画布计算轴范围、band step、facet grid 与纵横比,最后由各后端动态模板生成原生 spec。flint-chart 是核心 TypeScript 库,flint-chart-mcp 在其上增加 stdio/HTTP 传输、MCP App、PNG/SVG 渲染和本地文件解析。远程 data.url 被拒绝;本地 JSON/CSV/TSV 默认可读,并在工具处理前转为内联 rows。
技术栈和运行条件
语言
TypeScript/JavaScript;Python 端仍是源码预览
框架
Node.js 18+、MCP SDK、Vega-Lite、ECharts、Chart.js、Plotly、Office.js,MIT
关键依赖
- flint-chart 0.5.1
- flint-chart-mcp 0.5.1
- @napi-rs/canvas 与 @resvg/resvg-js 用于本地渲染
- MCP SDK 与 ext-apps 用于工具和交互视图
运行环境
库可装入 Node 项目;MCP 推荐用本地 stdio。HTTP 模式默认监听 0.0.0.0,未加外部认证层时不应暴露到不可信网络
常见问题
Flint Chart 当前稳定版本是多少?
flint-chart 和 flint-chart-mcp 当前都为 0.5.1,要求 Node.js 18 或更高。官方 CHANGELOG 将 0.5.1 标为 2026-08-13;安装时应同时固定两个包的版本。
Flint 的 Python 包可以直接从 PyPI 安装吗?
目前不可以。官方 README 和教程明确说 Python package 尚未发布,仓库中的 flint-py 是源码预览。普通用户应使用 JavaScript/TypeScript 包或 MCP server。
本地 Flint MCP 会读取任意文件吗?
默认会读取当前进程权限可访问、由 data.url 指定的本地 JSON、CSV 或 TSV。面对不可信代理或服务部署时,应添加 --disable-file-reference,只接受内联 data.values。
Flint MCP 会把图表数据上传到远程渲染服务吗?
本地 stdio server 在进程内渲染,官方称不会远程上传,并拒绝远程 data.url。若改用官方公共 HTTP MCP,请把它当外部服务,敏感数据不要发送,先核对其当前隐私与服务条款。