端点参考
HTTP 路由(不含 /mcp)
所有非 MCP 路由都由 src/index.ts 中约 L3290-3470 的 fetch 函数处理。每一个响应都会附带 CORS 响应头(定义见 src/mcp.ts L3-11)。
| 路径 | 方法 | 查询参数 | 返回内容 | 源码位置 |
|---|---|---|---|---|
/ | GET | — | JSON 格式的健康检查对象(name/version/endpoints/tools) | L3296 |
/healthz | GET | — | 与 / 相同 | L3296 |
/plot | GET | ?d=<base64url-gzipped-json> | SVG 图片 | L3300-3317 |
/png | GET | ?d=<base64url-gzipped-json> | PNG 图片(resvg 渲染 + CJK 路径化) | L3320-3330 |
/multi_plot | GET | ?spec=<urlencoded-json> | SVG 子图网格 | L3332-3342 |
/multi_plot.png | GET | ?spec=<urlencoded-json> | PNG 子图网格 | L3344-3354 |
/s/{token} | GET | — | 短链接渲染结果(PNG/SVG/HTML) | L3356-3366 |
/force.svg | GET | ?d=<...> | 简版受力图 SVG | L3368-3377 |
/force-analysis.svg | GET | ?d=<...> | 详细受力分析 SVG(含坐标轴/分量/合力) | L3379-3388 |
/circuit.svg | GET | ?d=<...> | 电路图 SVG | L3390-3399 |
/venn.svg | GET | ?d=<...> | 维恩图 SVG | L3401-3410 |
/c-memory.svg | GET | ?d=<...> | C 语言内存布局 SVG | L3412-3421 |
/shape3d.html | GET | ?d=<...> | 交互式 3D 查看器 HTML | L3423-3432 |
/mcp | POST | JSON-RPC 2.0 请求体 | MCP 响应 | L3434-3468 |
| (其他任意路径) | — | — | 404 not_found | L3434-3436 |
?d= 查询参数
所有 SVG/PNG 端点都接受一个经过 gzip 压缩、再经过 base64-url 编码的 JSON 规格对象。编码逻辑在 src/utils.ts 中实现:
toCompressedBase64UrlFromJson(value)—— 先用CompressionStream("gzip")压缩,再进行 base64-url 编码,因此 URL 中不会出现+、/、=parseCompressedBase64UrlJson(packed)—— 反向执行上述过程,把压缩后的字符串解析回 JSON
这个 JSON 的具体结构取决于对应端点。例如 /plot 使用的结构是 {expr, x_min, x_max, points, title, xlabel, ylabel, annotations};而 /multi_plot 使用的结构则是 buildSubplot 返回的 MultiPlotResult。
短链接
当 buildShortUrl(src/index.ts L2306)计算出某个 ?d= URL 长度超过 3600 个字符时,它不会直接把整段参数塞进 URL,而是退化为:把完整 payload 写入 KV,然后返回一个简短的 {origin}/s/{token} 地址。这个 token 是 8 个字符的 base32 字符串。每个 token 在 KV 中都对应一个 ShortLinkRecord,键名形式是 short:{token},TTL 为 30 天(SHORT_LINK_TTL_SECONDS = 60*60*24*30)。
renderShortLink 函数(L2383)会根据 record.path 决定应该调用哪个渲染器:例如 /png 走 renderPngResponse,各类 SVG 路径分别走对应的 render*Svg 函数,而 /shape3d.html 则返回 3D HTML 查看器。
CORS
所有响应都会包含 access-control-allow-origin: *、access-control-allow-methods: GET, POST, OPTIONS 和 access-control-allow-headers: content-type, mcp-session-id。对于 OPTIONS 预检请求,服务端会直接返回 204,并附带同样的一组头。
缓存头
所有图片响应都会设置 cache-control: public, max-age=300,也就是 5 分钟浏览器/边缘缓存。同时,KV 中写入的短链接记录本身也会在 30 天后自动过期,因此短链接不会比底层 KV 记录存在得更久。