Skip to main content
Glama
ntopology-mcp

ntopology-mcp

by sohumsuthar

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

inspect_notebook

Versión, secciones, recuentos de bloques y valores, y qué evalúa la raíz

read_graph

Bloques con firmas tipadas, cableado y valores literales; filtrable, 200 por defecto

validate_graph

Entradas colgantes, ids duplicados, raíz faltante, literales sin valor, aristas extra más allá de un parámetro list<T>

set_literal_value

Cambiar un escalar, ruta de archivo, vector, punto, booleano o enumeración

set_input

Recablear una ranura de entrada de un bloque

add_block

Añadir un bloque calculado a partir de una firma tipada

add_literal

Añadir una constante

prune_graph

Apuntar la raíz a salidas elegidas y descartar todo lo inalcanzable

run_notebook

Ejecutar a través de ntopcl, devolviendo errores estructurados, advertencias y tiempos por bloque

search_blocks

Buscar las firmas de bloques presentes en tu instalación de nTop

mesh_stats

Volumen, área, caja delimitadora, recuentos de aristas abiertas y no múltiples, componentes conectados

set_output

Elegir qué bloque informa ntopcl -o como salida del cuaderno

find_example

Buscar en los cuadernos de ejemplo y páginas de referencia que nTop incluye

environment

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 --test acepta un glob.

Instalación

git clone https://github.com/sohumsuthar/ntopology-mcp.git
cd ntopology-mcp
npm install
npm run build

Configuració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=true

Las 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, content

La 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 bloque core.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_graph detecta 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ámetro list<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_implicit está invertido respecto a la intuición: un desplazamiento positivo erosiona. Redondear bordes convexos (una apertura morfológica) es offset(+r) seguido de offset(-r).

  • El enumerado de mezcla de boolean_union: 1 añade material en la unión, 2 lo elimina, 0 es una unión dura.

  • La tercera entrada de implicit_to_mesh v2.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_blocks devuelve 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), no 0 (Ninguno). 0 en una entrada requerida hace que nTop se niegue a cargar el archivo. Pero -1 tampoco es universalmente seguro: algunas entradas opcionales lo rechazan con Input at N is Empty but optional y deben recibir un literal. Iguala lo que el cuaderno circundante ya hace y deja que validate_graph y una ejecución de prueba resuelvan el resto.

  • ntopcl -o informa el bloque nombrado por la clave output del propio gráfico, que set_output establece. Las entradas del grupo raíz no son salidas del cuaderno; sin set_output obtienes Output 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 por fe_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

real

{"isFinite":true,"units":{"length":1},"val":0.005} (SI - metros)

point

array de tres objetos de ese tipo

text

{"string":"inlet"} - no {"val":...}

choice

{"choices":["Full Analysis","Potential Flow"],"selected":0}

file_path

{"val":"C:/path/to/file.step"}

unit_length_enum

{"id":"mm"}

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_notebook informa 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_notebook necesita una licencia de nTop Automate. Sin una, ntopcl sale 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 CI

Las pruebas son autónomas y no requieren nTop. Dos conjuntos se amplían con más recursos disponibles:

  • NTOP_TEST_NOTEBOOKS — rutas .ntop separadas 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 tools
add_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

    A3.7/5.0

    Scored across 14 tools

    Disambiguation5/5

    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.

    Naming Consistency4/5

    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.

    Tool Count5/5

    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.

    Completeness4/5

    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

    ActivityStale
    ResponsivenessNo recent community issues

    Related MCP Connectors

    Related MCP Servers

    • A
      license
      Not graded
      quality
      D
      maintenance
      Enables building and modifying parametric solid models in a local SOLIDWORKS installation via the COM API.
      MIT
    • F
      license
      Not graded
      quality
      D
      maintenance
      Enables 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
      -