工具参考
规范工具名体系
8个规范工具名(定义在src/types.ts中):health(健康检查)、plot(函数绘图)、plot_series(自定义数据系列)、diagram(图表生成)、geometry_3d(3D几何体)、teaching(教学图表)、template(模板图表)、analysis(统计分析)。MCP服务器在tools/list响应中暴露24个独立工具条目——因为8个规范名加上16个为向后兼容而保留的旧版别名同时被注册了。旧版别名通过src/compat.ts中的静态映射表自动转换为规范名和对应的渲染格式参数。
路由分发流程(以调用plot_multi旧名工具为例)
- 调用方通过工具名称发起JSON-RPC调用,附带工具参数(例如
{"name":"plot_multi","arguments":{...}}) handleToolCall函数(在src/index.ts中约L3205行)首先调用lookupCompat查询旧名映射表- 旧名
plot_multi被解析为规范名plot加上渲染格式render.format=png resolveLegacyName根据规范名和渲染格式选择实际的处理函数- 处理函数在
_legacyToolHandler(约L3100)中分派到三个具体构建器之一:buildSvgLinkData(生成SVG或短链接URL)、pngLinkPayload(生成PNG图片链接数据)、buildTeachingTemplate(生成教学图表模板)
24个工具分类一览
| 类别 | 包含的工具 | 源码位置 |
|---|---|---|
| 健康检查 | health | index.ts L342, L709 |
| 单函数绘图 | plot(生成SVG或短链接)、plot_json(返回JSON数据)、plot_png_link(返回PNG图片链接) | index.ts L347-372 |
| 多函数叠加图 | plot_multi、plot_multi_json、plot_multi_png_link | index.ts L374-399 |
| 子图网格 | multi_plot——支持指定行列数和每格独立的数据系列,可共享坐标轴范围 | index.ts L401-432 |
| 自定义数据系列 | plot_series、plot_series_json、plot_series_png_link——支持line折线/scatter散点/line+scatter折散混合/hist直方图/box箱线图/pie饼图六种图表类型 | index.ts L434-458 |
| 柱状图快捷方式 | plot_bar_json——直接传入categories分类数组和values数值数组,无需构造PlotSpec | index.ts L578-585 |
| 力分析图 | force_diagram_link(简化版,仅显示力箭头)、force_analysis_link(完整版,含坐标轴、力的正交分量分解和合力箭头) | index.ts L461-486 |
| 力分析模板 | force_analysis_template_link——8种物理力学模板:斜面(incline)/悬挂(hanging)/滑轮(pulley)/双块(double_block)/弹簧(spring)/弹簧振子(spring_oscillator)/滑轮组(pulley_group)/水平面(horizontal) | index.ts L507-528, L902-1173 |
| 电路图 | circuit_diagram_link(自由排列模式:手动指定组件坐标+导线+串联/并联层级)、circuit_template_link(10种预设模板:串联(series)/并联(parallel)/开关灯(switch_lamp)/电源电阻(source_resistor)/LED电阻(led_resistor)/仪表回路(meter_loop)/晶体管开关(transistor_switch)/继电器驱动(relay_driver)/蜂鸣器回路(buzzer_loop)/运放跟随器(opamp_follower)) | index.ts L488-545 |
| 维恩图 | venn_diagram_link——支持2或3个集合,每个交叠区域可自定义标签文字(如A_only/B_only/A_B/A_B_C/outside) | index.ts L548-559 |
| C语言内存布局图 | c_memory_diagram_link——可视化指针、结构体、数组等C语言数据结构在栈内存和堆内存中的实际布局 | index.ts L561-572 |
| 3D几何体 | shape3d_link——cube立方体/sphere球体/cylinder圆柱体/cone圆锥体/vector3d三维向量,另有scatter3d三维散点/line3d三维线段/surface3d三维曲面(需提供expr表达式) | index.ts L574-576, L655-664 |
| 教学图表 | teaching_template_link(单一主题教学图表)、teaching_sequence_link(2-3步教学序列图表,将多张图表以短链接串联) | index.ts L587-604 |
| 批量图片生成 | plot_multi_images——一次请求最多处理8个独立的绘图任务,结果以数组形式返回 | index.ts L3174-3190 |
| 统计分析 | analysis——describe描述统计/corr相关性分析/groupby分组聚合。第一阶段占位实现,功能尚未完整 | index.ts L3208, L695-706 |
15个教学主题
来自teachingToolProperties对象(定义在index.ts L86-92):parabola(抛物线)、definite_integral(定积分的几何意义)、tangent_derivative(切线与导数关系)、fourier_series(傅里叶级数逼近)、projectile_motion(抛体运动轨迹)、simple_harmonic_motion(简谐振动)、energy_conservation(机械能守恒)、rc_charging(RC电路充电过程)、rlc_transient(RLC电路瞬态响应)、incline_force(斜面上物体受力分析)、stress_strain(应力-应变曲线)、band_gap(半导体能带隙示意)、venn_probability(维恩图与概率)、c_pointer_array(C语言指针和数组内存关系)、c_struct_layout(C语言结构体内存对齐布局)。
每个教学主题可以渲染为:一张带详细标注的图表(通过teaching_template_link工具),或一个由2-3张图表组成的教学序列(通过teaching_sequence_link工具)。教学序列的拼接逻辑硬编码在buildTeachingSequence函数中(index.ts约L2830位置)——它通过多次调用buildTeachingPlotPayload和sanitizeForceTemplatePayload函数,将多张独立的图表以短链接(/s/{token})的形式串联成一个教学序列。
五种渲染格式
RenderFormat类型定义在src/types.ts L9:"png" | "svg" | "json" | "link" | "html"。不同格式的行为取决于具体使用的工具:
- png——返回一个托管在Cloudflare Worker上的PNG图片URL(例如
https://.../png?d=<base64>)。访问该URL时,Worker实时渲染PNG图片并返回二进制图像数据 - svg——在JSON-RPC响应的
structuredContent字段中以字符串形式内联返回完整的SVG文档内容 - json——返回完整的
PlotSpec结构对象(包含所有绘图参数和计算后的数据载荷) - link——通过
/s/{token}短链接机制生成一个8字符的随机token,将完整的绘图参数存入Cloudflare KV存储中(30天自动过期),返回一个简洁的短链接URL - html——返回一个交互式3D几何体查看器的HTML页面(仅适用于
shape3d_link工具)
四种注释标注类型
定义在src/plot.ts L7-11:vertical_line(在指定x坐标处画一条竖直线)、point(在指定(x,y)坐标处标注一个点)、label(在指定位置放置任意文字标签)、area(在x轴区间内高亮显示一个半透明区域,额外接受opacity透明度参数)。所有标注类型都接受color颜色参数。这些标注被plot_json和plot_series_json系列工具使用。
数据系列变换管道
定义在src/plot.ts L76-186。每个数据系列上可以设置transforms数组字段,系统按数组中的顺序依次对数据点应用以下变换操作:
| 变换名称 | 效果描述 | 适用条件 |
|---|---|---|
normalize | 对数据做归一化处理,支持三种算法:minmax(最小-最大归一化,缩放到[0,1])、zscore(Z分数标准化,均值为0标准差为1)、maxabs(最大绝对值归一化) | 不适用于hist直方图/box箱线图/pie饼图这三种不需要归一化的图表类型,也不适用于带error bars误差线的数据系列 |
smooth/rolling_average | 居中移动平均平滑算法——用当前数据点及其前后各(window-1)/2个邻居的平均值替代原始值。可以消除数据中的高频噪声,使曲线更加平滑 | 仅适用于line折线图系列;window窗口大小默认值为3 |
filter | 按条件过滤数据点:只保留满足target op value条件的那些点(例如只保留y值大于某个阈值的点) | 支持的比较运算符op:>大于/>=大于等于/<小于/<=小于等于/==等于 |
downsample | 降采样:对大量数据点做均匀抽样(每隔N个点取一个)或LTTB(Largest Triangle Three Buckets,最大三角形三桶)智能降采样算法。LTTB算法可以在大幅减少数据点数量的同时最大程度保留曲线的视觉形状特征 | 适用于数据点数量非常大的系列(如几万到几百万个数据点) |
如果用户在不合适的图表类型上使用了某种变换(例如在scatter散点图系列上应用smooth平滑变换),系统会发出一个警告信息并在最终响应中跳过该变换。设置args.debug = true可以在响应体中收到一个debug调试对象,包含每个变换阶段的中间数据追踪信息,用于诊断为什么某个数据系列看起来"不对"。