可视化图表生成MCP
目标
- 给券商用
- 解决开发人员和运营人员的可视化组件代码使用问题
- 给AI工具用(Mirror)
和AIME的区别
- 我们这个范围更广,不局限于金融。
- 我们支持更多的可视化形式(所有可视化都可以接入)
整合优于造轮子
其实也不全是,应该分工,有的人造轮子,然后让Agent进行整合与调度。
相当于有的人开发基座,有的人开发插件(Agent、MCP、Tool)。
我自己也可以搞一个大而全的Agent给我自己用,集成我生活、工作所需的所有Agent,类似Claude Code这个客户端。
可以参考这个文章中的Agent分类和职责:
https://mp.weixin.qq.com/s/RMxRX1cccJ09Zlk4GonePQ
价值
ToB券商价值
MCP相比API的优势
跟常规 API 不同,MCP 作为接口有一个好处。
常规 API 是对开发者的一种承诺,发布后不能轻易改变。但是,MCP 接口只供大模型调用,而大模型每次都会动态读取使用规范,因此我们能够随时更改 MCP 服务器,不会有任何问题。
1 | |
AI辅助规划
1 | |
SVG的MCP
之前Napkin的那个搞下来,不就是一大批SVG的Tools吗!
1 | |
(精)方案分析文档:
[[SVG可视化-七巧板]]
实现方案
Final: 应该是以HTTP的形式提供,类似前端工作流和发布的MCP这样。
单独起个容器服务,用单独的路由搞这个。
几个核心Agent:意图、情绪、风格、表现形式
我们应该是提供一个服务出去,这个也是一个大的agent
然后这个服务内部使用了我们的各个子agent和工具
把不同的图表封装为tool
参考这个:
https://github.com/hustcc/mcp-echarts
可以将我们的VISALL、HIVIS、SD的各个Demo都整合到一起!
构建面向AI的MCP工具!
卧槽,我们的VISALL的layer设计,天然就是MCP的tool啊!
这个可以好好搞一波,而且能大吹特吹了!
使用流程
- 客户端安装MCP
- 获取Tools的信息
- 生成Tool的数据和参数
- 调用Tool,生成配置/图片
- 如果需要生成图片:上传公司的图片存储服务,返回图片链接
- 如果需要生成配置:返回配置信息
- 客户端SDK调用可视化配置,生成图表效果
按这个来看,不需要修改VISALL,只需要额外搞一层MCP即可。
要确定的是:业务方用的是VISALL还是SD?VISALL好一些吧
任务分解
如何渲染?
VISALL、StandardChart和各个组件库需要提供一个渲染的API,用于生成图片。
组件可能是非Canvas的。
搞个webcomponent的容器?HIVIS?
可以考虑直接将渲染所需的完整的JS作为输出,模板化既可。
VISALL的、ECharts的,都可以的:
layer-tool-模板-可渲染的完整代码
生成一个可嵌入的iframe?这样应用成本最低,就像之前的datav官网的嵌入方式那样。
应该基于layer还是case写tool?
用户真正需要的是case,LLM训练的也是case。
应该针对case写tool。
如何快速生成tool?
配置化,写一个管理工具,可以自动生成tool
tool的数据存储到数据库中,方便管理。
同创工坊支持npx本地运行MCP Server么?
这个得确定好,不然跑不动。
同创工坊
vtuber.aicubes.cn/agent-forge-front/#/agent-center?isDev=true
Tools封装
这个应该还好,写成模板,AI批量修改即可。
还是用分包的方式去搞这个事情。
得把layer改为zod的形式,补上描述信息。不写在VISALL里面,解耦出来,独立项目。
这个工作量应该不多,因为数据协议和layer协议基本上是统一的。
MCP协议接入
问题
如何解决tools太多的问题
详见这篇文章为模型创建结构化的技能树
如果工具太多,确实会导致给到 AI 的上下文太长。
我们来详细拆解一下这个问题:
- 当前的行为
按照 mcp-echarts 目前的设计,当服务启动时,它会通过 MCP 协议,一次性地将 src/tools/index.ts 中定义的所有工具(目前是17个)的完整描述(包括 name, description, 和 inputSchema 的 JSON Schema 形式)全部注册给客户端(AI Agent 所在的框架)。
如果未来这个库扩展到包含 50 个、100 个工具,那么这个初始注册的 JSON Schema 描述会变得非常庞大,如果 AI Agent 框架不加处理地将它们全部塞进 Prompt,会迅速消耗宝贵的上下文窗口(Context Window),并可能超出模型的长度限制。
- 现实中的解决方案
这个问题在实际的 AI Agent 架构中通常由 客户端(AI Agent 框架) 来解决,而不是由工具服务本身解决。主要有以下几种策略:
策略一:客户端进行“预筛选”或“路由”(Tool Routing)
- 一个成熟的 AI Agent 框架不会把所有可用的工具都放进最终的 Prompt 中。
- 它会有一个“路由”或“决策”步骤。首先,Agent 会分析用户的原始请求(例如“画一张饼图展示各产品销量占比”)。
- 然后,Agent 内部的一个小模型或者一个逻辑层会判断,用户的这个请求最可能与哪些工具有关。在这个例子中,它可能会只选择 generate_pie_chart 和通用的 generate_echarts 这两个工具的描述,而忽略 bar, line, radar 等其他所有工具。
- 最后,它只把这几个被选中的、最相关的工具的描述和用户的请求一起组合成最终的 Prompt 发送给大语言模型。
策略二:基于“语义搜索”的工具检索
- 对于拥有海量工具(成百上千个)的复杂系统,Agent 框架会把所有工具的描述(特别是 description 字段)预先存储在一个向量数据库中。
- 当用户请求到来时,框架会将用户请求的语义与数据库中的所有工具描述进行向量相似度搜索,找出最匹配的 Top-K 个工具。
- 然后,只将这 K 个最相关的工具注入到 Prompt 中。
- mcp-echarts 的角色
mcp-echarts 作为一个“工具提供方”,它的职责是忠实地报告自己拥有哪些能力。它将自己所有的工具都“上架”,供客户端挑选。
而如何挑选、如何管理上下文长度,这个更复杂的“导购”任务,则由“顾客”——也就是 AI Agent 框架——来承担。
总结:
- 您的担忧是完全成立的,这是所有工具调用系统都需要面对的“上下文爆炸”问题。
- mcp-echarts 目前的行为是“全量上报”自己的能力。
- 解决这个问题的责任方通常是调用
mcp-echarts的客户端(AI Agent 框架),它会通过路由、筛选、语义搜索等方式,动态地选择最相关的工具放入 Prompt,从而有效管理上下文长度。
代码库
(TODO)流程
可以参考Magic UI的流程
https://magicui.design/docs/mcp
将功能拆解,使用时按流程分析和执行具体的tools:
子模块
范式组件库
SD和VISALL都可以,VISALL封装性更好一些。
在之前AI Builder的基础上继续做,反正都是写function calling的tools。
之前是所有图表的定义都放Prompt,现在得打散,放到tool里面(tool.description字段的信息)。比如area:
1 | |
图表推荐
需要构建知识库。
配置代码生成(面向开发)
模板化即可,AIGC的Case可以起到这个效果。
到这一步,其实都不需要MCP,纯HTTP服务即可解决问题。
MCP只是起到简化和集成IDE的作用。
SSR图片生成(面向运营)
这个需要服务端了。
数据流程
安装MCP Server到用户本地
用户本地启动MCP Server
客户端通过Server获取工具列表(含工具描述信息)
客户端通过MCP协议发送工具调用请求
MCP Server接收请求并验证输入数据
MCP Server将请求转发到AntV Studio的API
外部API生成图表并返回URL
MCP Server将URL返回给客户端
客户端可以使用该URL查看或嵌入生成的图表
该项目展现了一个设计良好的微服务架构,通过MCP协议提供了标准化的图表生成能力,使大语言模型能够生成高质量的数据可视化。
图片生成: GPT-VIS-SSR
生成是调用这个接口:
https://antv-studio.alipay.com/api/gpt-vis
源码:
https://github.com/antvis/GPT-Vis/tree/main/bindings/gpt-vis-ssr
实践
1 | |
测试数据
1 | |
资料
https://github.com/antvis/mcp-server-chart
TS的SDK:
https://github.com/modelcontextprotocol/typescript-sdk
MCP Inspector:
https://github.com/modelcontextprotocol/inspector
经典的MCP Server:
https://github.com/modelcontextprotocol/servers