Hier ist eine Frage, die ein Regelungstechniker tatsächlich stellt:
„Wenn ich im Web Editor eine Komponente auf das Canvas ziehe und auf Speichern klicke – was geht dann am Ende über die Leitung zum Controller?“
Das ist eine völlig berechtigte Frage. In den meisten Codebasen ist sie zugleich eine zweistündige Archäologie-Sitzung – denn um sie zu beantworten, muss man vier Sprachen, drei Laufzeitumgebungen und ein Netzwerkprotokoll durchqueren, und kein einzelnes Suchwerkzeug sieht sie alle.
Fantom MCP Server wurde für genau diese Frage gebaut.
Der Stack, den die Frage durchquert
Der Sandstar Web Editor ist eine visuelle Programmierumgebung für das Sedona Framework. Man zieht Komponenten auf ein Canvas, verdrahtet sie miteinander und deployt auf laufende Controller. Darunter wandert eine einzige Nutzergeste durch einen wirklich heterogenen Stack:
Vier Sprachen, ein Feature. grep findet den String sox in allen. Was es nicht sagen kann: dass der writeComp-Handler im Fantom-Weblet genau das ist, was der Vue-Store aufruft – oder dass eine Änderung seiner Signatur einen Subscription-Pfad drei Schichten weiter kaputtmacht.
Dreiundzwanzig Sprachen in einem Index
Die Sprach-Registry des Fantom MCP Servers deckt 23 Sprachen ab:
axon · c · cpp · csharp · css · dart · fantom · go · html · java · javascript · json · kotlin · php · polymer · python · ruby · rust · scala · swift · typescript · vue · xeto
Drei dieser Grammatiken – Fantom, Axon und Xeto – wurden für dieses Projekt geschrieben, weil es keine gab. Das ist aus demselben Grund wichtig wie beim Axon MCP Server: Ein Chunk, der mitten im Block endet, ist ein Chunk, der nichts bedeutet.
Drei Indizes, nicht einer
Semantische Suche allein reicht nicht aus, um eine strukturelle Frage zu beantworten. Der Fantom MCP Server hält drei Speicher vor und nutzt sie gemeinsam:
- LanceDB hält die Vektoren, hinter einem ANN-Index. Frühere Releases machten bei jeder Abfrage einen vollständigen Table Scan; der Aufbau des approximativen Index war es, der das Retrieval von „spürbar“ auf „sofort“ gebracht hat.
- LadybugDB (Kuzu) hält den tatsächlichen Call-Graph – Knoten und Kanten, persistiert.
getCallers,getCallees,getCodeImpactundgetCodeNeighborssind Graph-Abfragen, keine pro Anfrage erneut ausgeführten grep-Durchläufe. - FlexSearch hält einen Keyword-Index, denn manchmal kennt man den Bezeichner tatsächlich.
Ergebnisse aus dem Vektor- und dem Keyword-Zweig werden per Reciprocal Rank Fusion zusammengeführt und anschließend optional von einem Cross-Encoder oder einem OpenRouter-Reranker neu sortiert. Welches davon läuft und wo, ist eine Routing-Entscheidung – in einem eigenen Beitrag behandelt.
Wie das in der Praxis aussieht
askCodebase führt eine Retrieval-Schleife über den Index aus und synthetisiert eine belegte Antwort – wobei die Quellenangabe der entscheidende Punkt ist. Bei einer sprachübergreifenden Frage ist die nützliche Form einer Antwort weniger „hier ist ein Absatz“ als vielmehr „hier sind die vier Funktionen, in vier Sprachen, in Aufrufreihenfolge“.
Illustrativ – das Folgende ist die Form einer Stack-übergreifenden Antwort, kein Protokoll eines konkreten Durchlaufs:
- eine Vue-Store-Action in
.ts, die eine JSON-Nachricht absetzt - der Weblet-Handler in
.fan, der sie entgegennimmt - der Router-Eintrag, der diese Nachricht auf einen der 17 SOX-Befehlstypen abbildet
- der Component-Write-Pfad, der schließlich über DASP/UDP auf der Leitung landet
Anschließend kann man auf jeden davon getCodeImpact anwenden und herausfinden, was sich sonst noch bewegt, wenn man ihn ändert. Das ist die Abfrage, die ohne persistierten Graph wirklich schwer ist – und die einem den Nachmittag rettet.
Fragen, wie der Code so geworden ist
Struktur beantwortet „was ruft was auf“. Eine zweite Werkzeugfamilie beantwortet „und warum ist es so“:
whatChangedRecently– was sich in diesem Projekt zuletzt bewegt hatgetSymbolHistory– wie sich eine Funktion entwickelt hatexplainSymbolChange– was eine bestimmte Änderung bewirkt hatdiffIndexRuns– was der Index selbst zwischen zwei Durchläufen unterschiedlich gesehen hat
Für eine Codebasis, die über Jahre gepflegt und zwischen Integratoren weitergereicht wird, ist das oft wertvoller als die semantische Suche. Der Code ist lesbar. Die Begründung ist das, was mit dem letzten Entwickler gegangen ist.
Und die Migration erledigt es weiterhin
SkySpark 4.0 hat das Erweiterungsformat geändert. migrateSkySpark4x schreibt using-Anweisungen um, konvertiert Axon-Strings, erzeugt die Xeto-Dateien (lib.trio, funcs.xeto, lib.xeto), validiert mit dem Fantom-Compiler und setzt beim Start ein Git-Backup-Tag. commitMigration schließt sie ab; rollbackMigration macht sie mit einem einzigen Aufruf rückgängig.
Insgesamt 41 MCP-Tools – über Dokumentationssuche, semantische Codesuche, Call-Graph-Analyse, Historie, Generierung und Migration hinweg.
Das ehrliche Fazit
Der Fantom MCP Server macht Ihre Codebasis nicht einfacher. Der Web Editor bleibt Vue, das mit Fantom spricht, das über UDP mit SOX spricht – und das ist die richtige Architektur für das, was er tut.
Was sich ändert: Die Grenzen zwischen diesen Schichten sind für ein Suchwerkzeug keine Mauern mehr. Eine Frage, einmal gestellt, durchquert alle vier – und kommt mit den Funktionen zurück, der Reihe nach, in welcher Sprache sie auch immer geschrieben sein mögen.
Fantom MCP Server ist source-available unter github.com/Project-SandStar/FantomMcpServer. Siehe auch die Projektseite und Sandstar Web Editor.