下面是一位控制工程师真实会问的问题:
“当我在 Web 编辑器中把一个组件拖到画布上并点击保存时,最终在链路上发往控制器的到底是什么?”
这是一个完全合理的问题。但在大多数代码库中,它也意味着一场两小时的“考古”——因为要回答它,你得跨越四种语言、三个运行时和一个网络协议,而没有任何一个搜索工具能同时看到它们。
Fantom MCP Server 就是为这个问题而生的。
这个问题跨越的技术栈
Sandstar Web Editor 是面向 Sedona Framework 的可视化编程环境。你把组件拖到画布上,把它们连起来,然后部署到在线控制器。在底层,一次用户操作会穿过一个真正异构的技术栈:
四种语言,一个功能。grep 能在它们全部之中找到字符串 sox。但它无法告诉你:Fantom weblet 中的 writeComp 处理函数正是 Vue store 调用的那个东西,也无法告诉你改动它的签名会破坏三层之外的一条订阅路径。
一个索引,二十三种语言
Fantom MCP Server 的语言注册表覆盖 23 种语言:
axon · c · cpp · csharp · css · dart · fantom · go · html · java · javascript · json · kotlin · php · polymer · python · ruby · rust · scala · swift · typescript · vue · xeto
其中三套语法——Fantom、Axon 和 Xeto——是为这个项目专门编写的,因为此前根本不存在。这很重要,原因与在 Axon MCP Server 中一样:一个在代码块中间被截断的分块,就是一个毫无意义的分块。
三个索引,而不是一个
仅靠语义搜索不足以回答结构性问题。Fantom MCP Server 维护三个存储,并把它们协同使用:
- LanceDB 保存向量,背后是 ANN 索引。早期版本在每次查询时都做全表扫描;构建近似索引正是让检索从“能察觉到延迟”变成“即时”的关键。
- LadybugDB(Kuzu)保存真正的调用图——节点与边,持久化存储。
getCallers、getCallees、getCodeImpact和getCodeNeighbors都是图查询,而不是每次请求都重跑一遍的 grep。 - FlexSearch 保存关键词索引,因为有时候你确实知道那个标识符。
向量侧和关键词侧的结果通过倒数排名融合(RRF)合并,然后可选地由 cross-encoder 或 OpenRouter 重排器重新排序。其中哪一个运行、在哪里运行,是一个路由决策——在单独的一篇文章中讲述。
实际用起来是什么样
askCodebase 在索引上运行一个检索循环,并合成一个带引用的答案——引用正是关键所在。对于跨语言的问题,有用的答案形态不是“这里有一段文字”,而更像是“这里是四个函数,分属四种语言,按调用顺序排列”。
示意性说明——以下是跨栈答案的形态,而非某次具体运行的记录:
.ts中的一个 Vue store action,它发出一条 JSON 消息.fan中接收它的 weblet 处理函数- 将该消息映射到 17 种 SOX 命令类型之一的路由条目
- 最终通过 DASP/UDP 发往链路的组件写入路径
然后你可以对其中任意一个调用 getCodeImpact,弄清楚改动它还会牵动什么。这正是在没有持久化图的情况下真正难以完成的查询,也正是能帮你省下一个下午的那一个。
追问代码为什么变成这样
结构回答的是“谁调用了谁”。另一类工具回答的是“它为什么是这样”:
whatChangedRecently—— 这个项目最近有什么变动getSymbolHistory—— 某个函数是如何演变的explainSymbolChange—— 某次具体改动做了什么diffIndexRuns—— 索引本身在两次运行之间看到了哪些不同
对于一个跨越数年维护、并在集成商之间辗转交接的代码库来说,这往往比语义搜索更有价值。代码是可读的。真正随着上一位工程师一起离开的,是那些推理与决策。
而且它依然能做迁移
SkySpark 4.0 改变了扩展格式。migrateSkySpark4x 会重写 using 语句、转换 Axon 字符串、生成 Xeto 文件(lib.trio、funcs.xeto、lib.xeto)、用 Fantom 编译器进行校验,并在开始时打上 Git 备份标签。commitMigration 完成迁移;rollbackMigration 一次调用即可撤销。
总计 41 个 MCP 工具,覆盖文档搜索、语义代码搜索、调用图分析、历史、生成与迁移。
老实说的总结
Fantom MCP Server 并不会让你的代码库变得更简单。Web 编辑器仍然是 Vue 与 Fantom 对话、Fantom 再通过 UDP 上的 SOX 与控制器对话——对于它要做的事情来说,这就是正确的架构。
真正改变的是:这些层之间的边界,不再是搜索工具面前的高墙。一个问题,问一次,跨越全部四层——然后按顺序把那些函数返回给你,不论它们碰巧是用哪种语言写的。
Fantom MCP Server 以源代码可见(source-available)方式发布于 github.com/Project-SandStar/FantomMcpServer。另见项目页面与 Sandstar Web Editor。