Voici une question qu'un ingénieur en automatismes pose réellement :
« Quand je fais glisser un composant sur le canevas du Web Editor et que j'enregistre, qu'est-ce qui part réellement sur le réseau vers le contrôleur ? »
C'est une question tout à fait légitime. C'est aussi, dans la plupart des bases de code, une séance d'archéologie de deux heures — parce qu'y répondre suppose de traverser quatre langages, trois runtimes et un protocole réseau, et aucun outil de recherche ne les voit tous à la fois.
Fantom MCP Server a été conçu pour cette question.
La pile que la question traverse
Sandstar Web Editor est un environnement de programmation visuelle pour le Sedona Framework. Vous faites glisser des composants sur un canevas, vous les câblez entre eux, et vous déployez sur des contrôleurs en service. En dessous, un seul geste utilisateur traverse une pile véritablement hétérogène :
Quatre langages, une seule fonctionnalité. grep sait trouver la chaîne sox dans tous. Ce qu'il ne peut pas vous dire, c'est que le gestionnaire writeComp du weblet Fantom est précisément ce que le store Vue appelle, ni que modifier sa signature casse un chemin d'abonnement situé trois couches plus loin.
Vingt-trois langages dans un seul index
Le registre de langages de Fantom MCP Server couvre 23 langages :
axon · c · cpp · csharp · css · dart · fantom · go · html · java · javascript · json · kotlin · php · polymer · python · ruby · rust · scala · swift · typescript · vue · xeto
Trois de ces grammaires — Fantom, Axon et Xeto — ont été écrites pour ce projet, parce qu'aucune n'existait. Cela compte pour la même raison que dans Axon MCP Server : un fragment qui s'interrompt au milieu d'un bloc est un fragment qui ne veut rien dire.
Trois index, pas un seul
La recherche sémantique seule ne suffit pas à répondre à une question structurelle. Fantom MCP Server maintient trois magasins et les utilise conjointement :
- LanceDB contient les vecteurs, derrière un index ANN. Les versions précédentes effectuaient un balayage complet de la table à chaque requête ; c'est la construction de l'index approximatif qui a fait passer la récupération de « perceptible » à « immédiate ».
- LadybugDB (Kuzu) contient le véritable graphe d'appels — nœuds et arêtes, persistés.
getCallers,getCallees,getCodeImpactetgetCodeNeighborssont des requêtes de graphe, pas des passes de grep relancées à chaque requête. - FlexSearch contient un index par mots-clés, parce qu'il arrive qu'on connaisse réellement l'identifiant.
Les résultats des côtés vectoriel et mots-clés sont fusionnés par reciprocal rank fusion, puis éventuellement reclassés par un cross-encoder ou un reranker OpenRouter. Lequel de ces traitements s'exécute, et où, relève d'une décision de routage — traitée dans son propre article.
À quoi cela ressemble en pratique
askCodebase exécute une boucle de récupération sur l'index et synthétise une réponse sourcée — la citation étant précisément le point essentiel. Pour une question inter-langages, la forme utile d'une réponse tient moins du « voici un paragraphe » que du « voici les quatre fonctions, en quatre langages, dans l'ordre des appels ».
À titre d'illustration — ce qui suit est la forme d'une réponse multi-couches, pas la transcription d'une exécution réelle :
- une action de store Vue en
.ts, qui envoie un message JSON - le gestionnaire de weblet en
.fanqui le reçoit - l'entrée de routeur qui associe ce message à l'un des 17 types de commandes SOX
- le chemin d'écriture de composant qui aboutit sur le réseau via DASP/UDP
Vous pouvez ensuite interroger getCodeImpact sur l'un d'eux et découvrir ce qui bouge d'autre si vous le modifiez. C'est la requête véritablement difficile sans graphe persisté, et c'est celle qui vous épargne l'après-midi.
Demander comment le code en est arrivé là
La structure répond au « qu'est-ce qui appelle quoi ». Une seconde famille d'outils répond au « et pourquoi est-ce ainsi » :
whatChangedRecently— ce qui a bougé récemment dans ce projetgetSymbolHistory— comment une fonction a évoluéexplainSymbolChange— ce qu'un changement précis a faitdiffIndexRuns— ce que l'index lui-même a vu différemment entre deux exécutions
Pour une base de code maintenue pendant des années et transmise d'un intégrateur à l'autre, cela vaut souvent plus que la recherche sémantique. Le code est lisible. C'est le raisonnement qui est parti avec le dernier ingénieur.
Et il assure toujours la migration
SkySpark 4.0 a changé le format des extensions. migrateSkySpark4x réécrit les instructions using, convertit les chaînes Axon, génère les fichiers Xeto (lib.trio, funcs.xeto, lib.xeto), valide avec le compilateur Fantom et pose un tag de sauvegarde Git au passage. commitMigration la finalise ; rollbackMigration l'annule en un seul appel.
41 outils MCP au total, couvrant la recherche documentaire, la recherche sémantique de code, l'analyse du graphe d'appels, l'historique, la génération et la migration.
Le résumé honnête
Fantom MCP Server ne rend pas votre base de code plus simple. Le Web Editor restera du Vue qui parle à du Fantom qui parle à SOX sur UDP, et c'est l'architecture correcte pour ce qu'il fait.
Ce qui change, c'est que les frontières entre ces couches cessent d'être des murs pour un outil de recherche. Une seule question, posée une seule fois, traverse les quatre — et revient avec les fonctions, dans l'ordre, quel que soit le langage dans lequel elles sont écrites.
Fantom MCP Server est disponible en source ouverte sur github.com/Project-SandStar/FantomMcpServer. Voir aussi la page du projet et Sandstar Web Editor.