ntopology-mcp
ntopology-mcp
Un servidor MCP para nTop (anteriormente nTopology) que lee y edita gráficos de bloques de cuadernos directamente, los ejecuta sin interfaz gráfica a través de nTop Automate y mide la geometría resultante.
nTop incluye un servidor MCP oficial y resuelve un problema diferente: busca en la documentación de nTop. Este opera sobre tus archivos. Ambos son complementarios: el suyo responde "cómo configuraría una optimización topológica", este la configura y la ejecuta.
La ruta de automatización documentada (nTop Automate) espera que construyas un cuaderno a mano en la interfaz gráfica, expongas algunas entradas como variables y varíes esas desde un script. Eso cubre barridos de parámetros. No te permite añadir un bloque, recablear una entrada o reestructurar un gráfico. Este servidor lo hace, tratando el archivo .ntop como lo que es: un contenedor que alberga un gráfico de bloques JSON.
Herramientas
Herramienta | Descripción |
| Versión, secciones, recuentos de bloques y valores, y qué evalúa la raíz |
| Bloques con firmas tipadas, cableado y valores literales; filtrable, 200 por defecto |
| Entradas colgantes, ids duplicados, raíz faltante, literales sin valor, aristas extra más allá de un parámetro |
| Cambiar un escalar, ruta de archivo, vector, punto, booleano o enumeración |
| Recablear una ranura de entrada de un bloque |
| Añadir un bloque calculado a partir de una firma tipada |
| Añadir una constante |
| Apuntar la raíz a salidas elegidas y descartar todo lo inalcanzable |
| Ejecutar a través de |
| Buscar las firmas de bloques presentes en tu instalación de nTop |
| Volumen, área, caja delimitadora, recuentos de aristas abiertas y no múltiples, componentes conectados |
| Elegir qué bloque informa |
| Buscar en los cuadernos de ejemplo y páginas de referencia que nTop incluye |
| Informar qué puede encontrar el servidor en esta máquina |
Related MCP server: Onshape MCP Server
Requisitos
nTop instalado. Verificado contra 5.54.2 en Windows.
Licencia de nTop Automate para
run_notebook. Esta se licencia por separado del asiento de la interfaz gráfica; todo lo demás funciona sin ella.Node.js 20+ para ejecutar el servidor. El conjunto de pruebas necesita 21+, donde
node --testacepta un glob.
Instalación
git clone https://github.com/sohumsuthar/ntopology-mcp.git
cd ntopology-mcp
npm install
npm run buildConfiguración
Añade a la configuración de tu cliente MCP:
{
"mcpServers": {
"ntopology": {
"command": "node",
"args": ["C:\\path\\to\\ntopology-mcp\\dist\\index.js"],
"env": {
"NTOP_INSTALL_ROOT": "C:\\Program Files\\nTopology\\nTopology"
}
}
}
}NTOP_INSTALL_ROOT es opcional si nTop está en la ubicación predeterminada de Windows. NTOPCL_PATH puede apuntar directamente a ntopcl.exe. Llama a environment primero para confirmar lo que el servidor encontró.
Ejemplo
Reorientar una optimización existente hacia un espacio de diseño diferente, reducirla a una sola cadena de salida y ejecutarla:
read_graph notebook=bracket.ntop filter=file_path
set_literal_value notebook=bracket.ntop blockId=477 value={"val": "C:/parts/wedge.step"}
prune_graph notebook=bracket.ntop rootInputs=[900] output=bracket_run.ntop
run_notebook notebook=bracket_run.ntop
mesh_stats path=C:/parts/result.stl listComponents=trueLas herramientas de edición validan antes de escribir y se niegan a guardar un gráfico con errores, por lo que cualquier cosa que produzcan ya está verificada. Ejecuta validate_graph en cuadernos que este servidor no escribió — por ejemplo, uno editado en la interfaz gráfica de nTop — antes de dedicar minutos a run_notebook.
El formato del cuaderno
El formato .ntop no está documentado por nTop. Lo siguiente se derivó inspeccionando archivos escritos por 5.54.2, y el analizador se verifica haciendo un viaje de ida y vuelta con cuadernos reales byte por byte.
file : "MAGIC%$1" u64 sectionCount u64 reserved
sectionCount * { name[16], u64 endOffset }
80 zero bytes, then sections laid out in table order
section : "MAGIC@@9" type[16] name[16] u64 contentLength 80 zero bytes, contentLa sección main contiene dos hijos: fn, el gráfico de bloques como JSON, y leaves, un contenedor de objetos cuya sección index lleva cada valor literal. Un bloque con un func no vacío calcula algo; un bloque con un func vacío es un literal. Las entradas referencian el bloque productor por id, con 0 y -1 ambos significando no conectado.
Comportamiento que vale la pena conocer
Estos cuestan tiempo real de depuración y están codificados en validate_graph o en las descripciones de las herramientas cuando es posible:
Un parámetro
list<T>debe ser alimentado por exactamente un bloquecore.list<T>. Cablear dos implícitos directamente en la ranura de lista hace que nTop rechace el archivo completo al cargarlo con un error genérico "unable to load your file", sin nombrar nada.validate_graphdetecta la forma que esto produce en la práctica: aristas conectadas más allá del recuento de parámetros declarado en un bloque que tiene un parámetrolist<T>.Las ranuras de entrada adicionales no conectadas al final son normales. nTop las emite por sí mismo cuando una versión de bloque gana un parámetro opcional, por lo que no son un error.
plane<point,vector,vector>toma un origen y dos vectores que abarcan el plano. La normal es su producto cruzado, no el segundo argumento.offset_implicitestá invertido respecto a la intuición: un desplazamiento positivo erosiona. Redondear bordes convexos (una apertura morfológica) esoffset(+r)seguido deoffset(-r).El enumerado de mezcla de
boolean_union:1añade material en la unión,2lo elimina,0es una unión dura.La tercera entrada de
implicit_to_meshv2.4.0 es el Tamaño Mínimo de Característica. Configúralo a 5 mm y una placa de 5 mm desaparece silenciosamente.El sufijo de versión es crucial. Los binarios contienen cada revisión histórica de un bloque, pero nTop solo registra la actual. Una revisión antigua falla con el mismo mensaje "Unknown block … Toolkit or Connector that is not installed" que un toolkit sin licencia, por lo que una firma obsoleta se ve exactamente como una licencia faltante.
search_blocksdevuelve la revisión más nueva de un nombre primero; prefierela y trata con sospecha una forma sin versión.Una entrada no conectada es
-1(Vacío), no0(Ninguno).0en una entrada requerida hace que nTop se niegue a cargar el archivo. Pero-1tampoco es universalmente seguro: algunas entradas opcionales lo rechazan conInput at N is Empty but optionaly deben recibir un literal. Iguala lo que el cuaderno circundante ya hace y deja quevalidate_graphy una ejecución de prueba resuelvan el resto.ntopcl -oinforma el bloque nombrado por la claveoutputdel propio gráfico, queset_outputestablece. Las entradas del grupo raíz no son salidas del cuaderno; sinset_outputobtienesOutput path specified, but can't find output in notebook.Los bloques de resultado que exponen series temporales están indexados desde 1, y el paso 1 a menudo es una inicialización no física en lugar de la respuesta. Leerlo produce tonterías de aspecto plausible sin error.
Preservar una región durante la optimización usa
passive_region_constraint<region>alimentado porfe_region_by_implicit, añadido a la lista de restricciones de optimización. La entrada Densidad Inicial no congela nada — nTop lo documenta como una suposición inicial solamente.
nTop incluye sus propios ejemplos: léelos primero
nTop instala aproximadamente 100 cuadernos de ejemplo funcionales en
C:\ProgramData Topology\documentation\ExtendedBlockDocs\ y páginas de referencia HTML completas bajo
block-documentationlocks\. find_example busca en ambos. Un cuaderno de ejemplo resuelve el cableado, las formas literales y las rutas de propiedades de un bloque en segundos, donde la ingeniería inversa de lo mismo a partir de mensajes de error lleva horas. Verifica allí antes de adivinar.
Formas de valores literales
Los valores literales se almacenan por tipo y las formas no son uniformes:
Tipo | Valor |
|
|
| array de tres objetos de ese tipo |
|
|
|
|
|
|
|
|
Una forma incorrecta falla al cargar con Leaf failed to deserialize with block/variable <name>.
Firmas de bloques
nTop almacena sus firmas de bloques como cadenas ASCII dentro de sus propios binarios, incluyendo revisiones que ya no están registradas. search_blocks las extrae de tu instalación en tiempo de ejecución y ordena la revisión más nueva de cada nombre primero. No se incluyen datos de firmas en este repositorio — las firmas son de nTop, y este servidor las lee de tu instalación con licencia en lugar de redistribuirlas.
Limitaciones
El formato de contenedor está diseñado por ingeniería inversa y verificado solo contra nTop 5.54.2.
inspect_notebookinforma la versión que cada archivo registra; trata otras versiones como no verificadas y mantén copias de seguridad.Las herramientas de edición escriben en el lugar a menos que pases
output. Se niegan a escribir un gráfico que falle la validación, pero no pueden saber si una edición es semánticamente correcta para tu modelo.run_notebooknecesita una licencia de nTop Automate. Sin una,ntopclsale después del inicio de sesión y el error se muestra.Solo Windows en la práctica, ya que es donde se ejecuta nTop.
Desarrollo
npm run check # type-check src and test
npm test # build, then run the test suite
npm run format:check # Prettier is enforced by config, not by CILas pruebas son autónomas y no requieren nTop. Dos conjuntos se amplían con más recursos disponibles:
NTOP_TEST_NOTEBOOKS— rutas.ntopseparadas por punto y coma, con viaje de ida y vuelta byte por byte. Esto está condicionado a las rutas que proporciones, no a que nTop esté instalado. No se incluyen cuadernos con el repositorio, por lo que la afirmación de viaje de ida y vuelta anterior es algo que deberías re-verificar con tus propios archivos en lugar de tomarlo por confianza.El conjunto de catálogo escanea una instalación real cuando se encuentra una, y se omite en caso contrario.
Licencia
MIT — ver LICENSE.
No afiliado ni respaldado por nTop. "nTop" y "nTopology" son marcas comerciales de su respectivo propietario.
Available Tools
14 toolsadd_blockA
Add a computed block. Give the full typed signature from search_blocks. Inputs are source block ids in parameter order; use 0 for an unconnected optional input. A list parameter takes exactly one core.list block.
Inputs: func (required), name (required), type (required), inputs (required), +3 more.
add_literalC
Add a literal block holding a constant. Value shape follows nTop: a length scalar is {"isFinite":true,"units":{"length":1},"val":0.005} in metres, a point is an array of three such objects, an enum is {"enum":0}.
Inputs: name (required), type (required), value (required), notebook (required), +2 more.
environmentB
Report whether ntopcl and an nTop installation were found, and how many block signatures are visible.
Inputs: no named parameters.
find_exampleA
Search nTop's own shipped documentation for a block: working example notebooks and HTML reference pages. Consult this BEFORE reverse-engineering a block's wiring - nTop ships 100+ example .ntop files that show the correct inputs, literal shapes and property paths.
Inputs: query (required), documentationRoot.
inspect_notebookA
Summarise a .ntop notebook: nTop version it was written by, its sections, how many blocks and literal values it holds, and what the root block evaluates.
Inputs: notebook (required).
mesh_statsA
Measure an STL: volume, surface area, bounding box, watertightness and connected components. Use this to check what a notebook actually produced.
Inputs: path (required), listComponents.
prune_graphA
Point the root block at the given outputs and drop every block no longer reachable. Use this to cut a large notebook down to one chain before running it.
Inputs: notebook (required), rootInputs (required), output.
read_graphA
List the blocks in a notebook with their typed signatures, wiring and literal values. Use filter to narrow by block name or signature.
Inputs: notebook (required), limit, filter.
run_notebookB
Execute a notebook headlessly through nTop Automate (ntopcl) and return its errors, warnings and per-block timings. Requires an nTop Automate licence.
Inputs: notebook (required), save, timeoutMs, inputsJson, +1 more.
search_blocksA
Search the block signatures present in the installed nTop binaries. Returns the exact typed signature strings that add_block needs, newest revision of each name first. The binaries retain retired revisions, and nTop rejects those with the same error it gives an unlicensed toolkit - so prefer the highest [version] and distrust a bare unversioned form.
Inputs: query (required), limit, installRoot.
set_inputA
Rewire one input slot of a block to a different source block. Use 0 to disconnect.
Inputs: slot (required), blockId (required), notebook (required), sourceId (required), +1 more.
set_literal_valueC
Set the value of a literal block - a scalar, file path, vector, point, boolean or enum. Writes in place unless output is given.
Inputs: value (required), blockId (required), notebook (required), output.
set_outputA
Choose which block ntopcl reports as the notebook output. Required before run_notebook's outputJson will produce anything - nTop reads the graph's own output key, not the root group's inputs, and answers "can't find output in notebook" when it is unset. Pass -1 to clear.
Inputs: blockId (required), notebook (required), output.
validate_graphA
Check a notebook for problems that stop it loading or building: dangling inputs, duplicate ids, literals with no value, and list parameters wired with several inline edges instead of a core.list block.
Inputs: notebook (required).
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 14 tools
Each tool has a clearly distinct purpose: adding literals vs. setting their values, reading the graph vs. inspecting the notebook, validating vs. running, searching blocks vs. finding examples. No two tools appear to do the same thing, so an agent can reliably pick the right one.
The vast majority of tools follow a consistent verb_noun snake_case pattern (add_literal, search_blocks, set_output). Two exceptions break the pattern: 'mesh_stats' is a noun_noun compound and 'environment' is a bare noun, which slightly reduces predictability but does not cause real confusion.
14 tools is well within the sweet spot for a domain-specific server. Each tool addresses a distinct step in the notebook lifecycle—inspection, editing, validation, execution, and analysis—earning its place without bloat or obvious omission.
The tool surface covers the core workflow: read/inspect/validate, add and modify blocks/literals, rewire inputs, set outputs, run, and check results. Minor gaps exist (e.g., no explicit block deletion, no direct 'save notebook' tool), but existing tools like prune_graph and set_input can work around these without agent failure.
Maintenance
Related MCP Connectors
Control Unreal Engine to browse assets, import content, and manage levels and sequences. Automate…
Manage SysML2 projects; check, evaluate, verify, query, document and diagram models.
Geometry and CAD file metadata extraction for STL, OBJ, PLY, PCD, LAS/LAZ, glTF/GLB.
Formula-backed WorkPaper tools for workbook readback, input edits, and JSON persistence.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceEnables automated control of Ansys Workbench, Mechanical, and MAPDL through scripted journals and batch processing for simulation workflows.102MIT
- FlicenseNot gradedqualityDmaintenanceEnables programmatic CAD modeling with Onshape through document discovery, parametric sketching, feature management, and gear creation.-
- AlicenseNot gradedqualityDmaintenanceEnables building and modifying parametric solid models in a local SOLIDWORKS installation via the COM API.MIT
- FlicenseNot gradedqualityDmaintenanceEnables control of a live SOLIDWORKS session through the Windows COM API, providing native sketch, feature, body, reference-geometry, view, probe, and export operations, along with transactional CAD plans, parametric sketches, multibody tools, and deterministic raster-to-sketch vectorization pipelines.1-