Depannage
Le serveur ne se connecte pas a TopSolid
Cause la plus frequente : l'acces distant n'est pas active dans TopSolid.
- Dans TopSolid : Outils > Options > General > Automation
- Cocher "Gerer l'acces distant"
- Verifier que le port est 8090
- Redemarrer TopSolid (obligatoire apres ce changement)
"Connect() retourne false"
C'est un comportement normal dans TopSolid v7.20 — bug connu. La connexion fonctionne quand meme.
Verification : si topsolid_get_state retourne une version superieure a 0, la connexion est OK. Ne pas se fier au booleen Connect().
Port 8090 occupe
netstat -ano | findstr 8090Si un autre processus utilise le port, soit le fermer, soit changer le port dans les options TopSolid (Outils > Options > General > Automation > Numero de port).
Plusieurs instances du serveur MCP
Le serveur utilise un Mutex nomme — une seule instance peut tourner a la fois. Si le serveur refuse de demarrer :
tasklist | findstr TopSolidMcpServer
taskkill /F /IM TopSolidMcpServer.exeOutils d'ecriture/execution echouent avec "DLL not found"
Symptome : topsolid_compile, topsolid_run_recipe, topsolid_execute_script ou topsolid_modify_script retournent :
Error: TopSolid DLL not found at C:\Program Files\TOPSOLID\TopSolid 7.21\bin\...Cause : le serveur n'a pas trouve votre installation TopSolid automatiquement.
Resolution (v1.6.8+) : le serveur detecte automatiquement la version installee via le registre Windows. Si cela echoue encore, definissez la variable d'environnement TOPSOLID_BIN_PATH :
{
"mcpServers": {
"topsolid": {
"command": "C:\\TopSolidMCP\\TopSolidMcpServer.exe",
"env": {
"TOPSOLID_BIN_PATH": "C:\\Program Files\\TOPSOLID\\TopSolid 7.20\\bin"
}
}
}
}Remplacez 7.20 par votre version reelle (visible dans Aide > A propos dans TopSolid). Sur une installation historique Missler, le chemin ressemble plutot a C:\Missler\V627\bin.
La liste complete des drapeaux et variables d'environnement est dans le demarrage rapide.
Resolution alternative (toutes versions) : creer une jonction de repertoire en PowerShell admin :
New-Item -ItemType Junction `
-Path "C:\Program Files\TOPSOLID\TopSolid 7.21" `
-Target "C:\Program Files\TOPSOLID\TopSolid 7.20"Installation TopSolid partielle (Design ou Drafting absent)
Toutes les licences TopSolid n'installent pas les memes modules Automation. Seul TopSolid.Kernel.Automating.dll est obligatoire ; TopSolid.Cad.Design.Automating.dll et TopSolid.Cad.Drafting.Automating.dll sont optionnels.
Avant le correctif de l'issue #11, l'absence d'un de ces deux modules faisait echouer la connexion et le serveur tombait au demarrage.
Depuis ce correctif, les deux modules sont detectes a l'execution, au moment de la connexion. Un module absent n'est plus une erreur fatale : le serveur le signale sur stderr et dans topsolid_get_state, ne reference plus l'assembly correspondante a la compilation des scripts, et continue a servir tout le reste (recettes PDM, parametres, masse/volume, base de connaissance...).
Le module detecte est visible dans la reponse de topsolid_get_state :
Modules : Design = available, Drafting = not availableet dans les logs au demarrage :
[TopSolidConnector] Connected to TopSolid v<version> on port 8090 (Design: yes, Drafting: no).Cas reel rencontre : TopSolid 2026 (V627) installe sous C:\Missler\V627\bin — c'est-a-dire selon l'ancienne arborescence Missler V<nnn>, pas C:\Program Files\TOPSOLID\TopSolid 7.xx — avec une licence Design / Wood / Fold mais sans Drafting. Sur ce poste, le serveur demarre, se connecte et sert normalement les recettes qui ne dependent pas de Drafting.
Ce que renvoient les recettes qui dependent d'un module absent
Le namespace du module manquant n'est pas importe dans les scripts generes (sinon tous les scripts echoueraient a compiler). Une recette de mise en plan lancee sans le module Drafting echoue donc a la compilation, avec une erreur du type :
Compilation error:
Line 3: CS0103 - Le nom 'TopSolidDraftingHost' n'existe pas dans le contexte actuelC'est un echec propre, renvoye au client MCP — le serveur reste debout. Il n'y a aujourd'hui pas de desenregistrement automatique des outils ni de message « module non disponible » par recette : verifiez la ligne Modules : de topsolid_get_state avant de conclure a un bug.
Si la detection du dossier d'installation echoue
Le resolveur cherche dans le registre (Missler Software, sous-cles TopSolid 7.xx et V<nnn>), puis dans Program Files, puis sur les disques fixes. S'il ne trouve rien, il le dit clairement sur stderr et vous pouvez pointer le dossier a la main :
{
"mcpServers": {
"topsolid": {
"command": "C:\\TopSolidMCP\\TopSolidMcpServer.exe",
"env": { "TOPSOLID_BIN_PATH": "C:\\Missler\\V627\\bin" }
}
}
}TOPSOLID_BIN_PATH doit pointer sur le dossier qui contient TopSolid.Kernel.Automating.dll.
Un script expire au bout de 60 s et TopSolid ne repond plus
Cause la plus frequente : TopSolid attend un clic sur une boite de dialogue modale (« aucune entite a exporter », reparation de famille, confirmation...). Le pont rend la main au bout de 60 s mais le script continue en arriere-plan, et TopSolid reste bloque.
- Le message d'expiration inclut le titre, le texte et les boutons de la boite quand le serveur la trouve. Sinon, appeler
topsolid_detect_dialog: il lit les fenetres de TopSolid sans passer par l'API, donc il repond meme quand TopSolid est bloque. - Fermer la boite dans TopSolid. Le serveur ne clique jamais a la place de l'utilisateur.
- Ne pas relancer le meme appel avant d'avoir compris la cause. Pour un export, utiliser
export_file, qui refuse les documents sans forme au lieu d'ouvrir cette boite.
"EndModification must be called before calling this method"
TopSolid refuse un appel PDM ou document (Pdm.DeleteSeveral, MoveSeveral, SetDescription, Save, Documents.Open...) a l'interieur d'une transaction StartModification / EndModification.
- Depuis la v1.8.16, le serveur lance sans transaction un script fait uniquement de ces appels, et refuse avant execution un script qui les melange a des modifications du modele, en nommant les appels en cause.
- Avant la v1.8.16, ces scripts echouaient avec ce message, de meme que les recettes
set_designation,set_name,set_reference,save_all_project... Dans un script ecrit a la main, faire ces appels apresEndModification(true, true).
Erreurs de compilation de scripts
Le serveur compile les scripts via CSharpCodeProvider — le compilateur csc livre avec le .NET Framework, pas Roslyn. Le code est donc compile en C# 5 et les syntaxes C# 6+ ne sont pas supportees :
| Syntaxe interdite | Alternative C# 5 |
|---|---|
$"Hello {name}" | string.Format("Hello {0}", name) |
obj?.Method() | if (obj != null) obj.Method() |
var (a, b) = ... | Declarations separees |
using var x = ... | using (var x = ...) { } |
nameof(x) | "x" (chaine en dur) |
Encodage / accents corrompus
Le serveur utilise UTF-8. Si les accents sont corrompus dans les reponses, verifier que le client MCP envoie bien les requetes en UTF-8 (pas Windows-1252 ou ISO-8859-1).
Plusieurs versions de TopSolid ouvertes simultanement
Si vous avez plusieurs instances TopSolid (ex: v7.17 et v7.20), le serveur doit cibler la bonne avec --port :
TopSolidMcpServer.exe --port 8090Chaque instance TopSolid a son propre port dans Outils > Options > General > Automation. Verifiez quel port est configure dans l'instance que vous voulez piloter.
Configuration MCP avec port specifique :
{
"mcpServers": {
"topsolid": {
"command": "C:\\TopSolidMCP\\TopSolidMcpServer.exe",
"args": ["--port", "8090"]
}
}
}Sans --port
Sans --port, le serveur detecte automatiquement le premier TopSolid lance et cible son port Automation (v1.8.3). Si aucun port Automation n'est detecte, il retombe sur 8090 par defaut.
Selectionner l'instance depuis l'icone tray (v1.8.3)
Plus besoin d'editer la config a la main : clic droit sur l'icone tray → Parametres > Instance TopSolid.
- Le sous-menu liste tous les TopSolid lances sur le PC, avec leur version et leur port Automation (
TopSolid 7.21 (port 8091)), ou(sans port)quand l'option Automation n'est pas activee dans cette instance — l'entree est alors visible mais grisee. - Automatique (premier TopSolid détecté) — le mode par defaut : au demarrage et au clic, le serveur detecte le premier TopSolid lance et cible son port. C'est le mode "tout automatique", coche dans le menu.
- Un clic sur une instance retargete le serveur immediatement (deconnexion + reconnexion sur le port choisi) et enregistre le choix comme default pour les demarrages suivants.
- Gérer… ouvre la fenetre modale de declaration (v1.8.10), la seule surface de reglage :
| Bouton | Action |
|---|---|
| ↑ / ↓ | Reordonne l'instance dans la liste (l'ordre persiste et devient l'ordre du menu) |
| ✎ (ou double-clic) | Edite l'instance selectionnee : nom + port modifiables, puis Enregistrer |
| 🗑 | Supprime l'instance |
| ★ | Definit par defaut — ciblee immediatement et au demarrage |
| ➕ | Ajoute une instance declaree (nom + port) |
La section Serveur MCP de la meme fenetre regroupe le reste :
- Port MCP (HTTP) : le port de l'endpoint natif (
8080par defaut). Appliquer redemarre l'endpoint immediatement, sans relancer le serveur. La variable d'environnementTOPSOLID_MCP_HTTP_PORTgarde priorite. - URL client affichee a cote :
http://localhost:<port>/mcp— c'est cette URL + la cle API (Parametres > Cle API) que met un client HTTP. - Mode lecture seule : coche/decoche (remplace l'ancien item de menu). Applique au prochain demarrage du serveur.
v1.8.10 — suppression des doublons
Les anciens items de menu « Port TopSolid » et « Mode lecture seule » ont disparu du menu tray : tout se gere dans Parametres > Instance TopSolid > Gérer…. Une seule surface, pas de doublon.
Ports differents par instance
Chaque instance TopSolid a son propre port dans Outils > Options > General > Automation. Le menu tray le montre pour chaque instance lancee — plus besoin de les connaitre par coeur.
"Aucun document en edition" alors qu'un document est ouvert
Causes possibles :
- Plusieurs instances TopSolid — le serveur est connecte a la mauvaise instance (voir section ci-dessus)
- Le document n'est pas en edition — il est ouvert mais pas en mode edition (double-cliquez dessus dans l'arborescence)
- TopSolid vient d'etre redemarre — relancez le client MCP pour forcer une reconnexion
TopSolid a plante pendant une session
Apres un plantage de TopSolid, le serveur repond « TopSolid not connected » a chaque appel. C'est normal : il ne faut ni le tuer ni le relancer. Des que TopSolid redemarre avec l'acces distant actif, le serveur se reconnecte tout seul (la reconnexion apparait dans server.log). Attendre que topsolid_get_state reponde sans erreur avant de reprendre.
Si le plantage a suivi un export, voir plus haut « Un script expire au bout de 60 s » : un export d'un document sans forme en est la cause la plus frequente.
TopSolid est lance mais le serveur ne le voit pas
Verifier que :
- L'acces distant est active et TopSolid a ete redemarre apres activation
- Le port dans les options TopSolid correspond a celui que le serveur utilise (8090 par defaut)
- Aucun pare-feu ne bloque le port 8090 en local
- TopSolid est bien en cours d'execution (pas juste le lanceur)
Le serveur ne demarre pas / version node legacy (v1.7) residuelle
Depuis la v1.8.0, il n'y a plus de Node.js ni de bridge : TopSolidMcpServer.exe embarque l'endpoint HTTP natif (--http-standalone). Si vous venez d'une v1.7.x :
- Supprimez l'ancien setup : taches planifiees
TopSolidMcpBridgeetTopSolidMcpTray, raccourci Startup du tray PS1 (details dans integration du v1.8). - Installez la v1.8 : double-clic
install\Installer_TopSolidMCP.bat— il fait le nettoyage v1.7 tout seul puis installe l'exe natif. - Si l'exe ne demarre pas, verifiez que le port 8080 n'est pas deja occupe (un node v1.7 qui tourne encore) :
Get-NetTCPConnection -LocalPort 8080 -State Listen, tuez le process node puis relancez.
Les problemes specifiques Node v1.7 (mcp-proxy) ne s'appliquent plus : la v1.8.0 n'utilise plus Node.
Mise a jour du serveur
Le serveur inclut un script de mise a jour automatique :
.\update.ps1Le script compare la version locale avec la derniere release GitHub et propose la mise a jour si une nouvelle version est disponible.
Logs et rapports de crash (v1.8.1)
Depuis la v1.8.1, le serveur journalise son stderr dans un fichier :
%LOCALAPPDATA%\TopSolidMcp\logs\server.log- Chaque ligne est prefixee d'un horodatage UTC. Le fichier est limite (rotation a 512 Ko vers
server.log.old), donc il ne grossit pas indefiniment. - Ce fichier est la source du bouton « Signaler un bug » du tray : les ~30 dernieres lignes sont integrees automatiquement a l'issue GitHub pre-remplie (la cle API est masquee
***avant tout envoi — defense en profondeur avec le scrub cote serveur). - Confidentialite : avant tout envoi, tout chemin sous votre dossier de profil (
C:\Users\<nom>) est remplace par%USERPROFILE%(insensible a la casse, separateurs\et/) — le nom de compte Windows ne peut pas fuiter dans l'issue publique. - En cas de crash (exception non geree sur un thread quelconque), un rapport
crash-AAAAMMJJ-HHMMSS.txtest ecrit dans le meme dossier : exception complete + pile d'appels + dernieres lignes de log, avec la meme regle de confidentialite (cle API masquee, profil remplace par%USERPROFILE%— messages d'exception et piles d'appels inclus). Le prochain « Signaler un bug » l'attache a l'issue sans action de votre part (rapports de moins de 30 jours uniquement). - La tache planifiee
TopSolidMcpServerlance le serveur viaconhost.exe --headless: aucune fenetre console n'apparait au demarrage, les logs vont dans le fichier (et non plus dans une console perdue).
Ouvrir les logs rapidement
Depuis Win+R : %LOCALAPPDATA%\TopSolidMcp\logs. Pour suivre en direct : Get-Content "$env:LOCALAPPDATA\TopSolidMcp\logs\server.log" -Wait -Tail 20