Skip to main content
Glama
ntopology-mcp

ntopology-mcp

by sohumsuthar

ntopology-mcp

Сервер MCP для nTop (ранее nTopology), который напрямую читает и редактирует графы блоков блокнотов, запускает их в безголовом режиме через nTop Automate и измеряет получаемую геометрию.

nTop поставляет официальный MCP-сервер, и он решает другую задачу: он ищет в документации nTop. Этот же работает с вашими файлами. Они дополняют друг друга — их сервер отвечает на вопрос «как настроить топологическую оптимизацию», а этот настраивает её и запускает.

Документированный путь автоматизации (nTop Automate) предполагает, что вы вручную создаёте блокнот в графическом интерфейсе, выставляете несколько входов как переменные и изменяете их из скрипта. Это покрывает перебор параметров. Но это не позволяет добавить блок, переподключить вход или изменить структуру графа. Этот сервер делает это, рассматривая файл .ntop как то, чем он является: контейнер, содержащий JSON-граф блоков.

Инструменты

Инструмент

Описание

inspect_notebook

Версия, разделы, количество блоков и значений, а также то, что вычисляет корень

read_graph

Блоки с типизированными сигнатурами, соединениями и литеральными значениями; фильтруется, по умолчанию 200

validate_graph

Висячие входы, дублирующиеся идентификаторы, отсутствующий корень, литералы без значения, лишние рёбра за параметром list<T>

set_literal_value

Изменить скаляр, путь к файлу, вектор, точку, логическое значение или перечисление

set_input

Переподключить один входной слот блока

add_block

Добавить вычисляемый блок по типизированной сигнатуре

add_literal

Добавить константу

prune_graph

Направить корень на выбранные выходы и отбросить всё недостижимое

run_notebook

Выполнить через ntopcl, возвращая структурированные ошибки, предупреждения и время выполнения каждого блока

search_blocks

Поиск сигнатур блоков, присутствующих в вашей установке nTop

mesh_stats

Объём, площадь, ограничивающая рамка, количество открытых и не-многообразных рёбер, связные компоненты

set_output

Выбрать, какой блок ntopcl -o сообщает как выход блокнота

find_example

Поиск в собственных примерах блокнотов nTop и справочных страницах

environment

Сообщить, что сервер может найти на этой машине

Related MCP server: Onshape MCP Server

Требования

  • Установлен nTop. Проверено на 5.54.2 в Windows.

  • Лицензия nTop Automate для run_notebook. Она лицензируется отдельно от места в графическом интерфейсе; всё остальное работает без неё.

  • Node.js 20+ для запуска сервера. Тестовому набору нужен 21+, где node --test принимает глоб.

Установка

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

Конфигурация

Добавьте в конфигурацию вашего 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 необязателен, если nTop находится в стандартном расположении Windows. NTOPCL_PATH может указывать прямо на ntopcl.exe. Сначала вызовите environment, чтобы подтвердить, что сервер нашёл.

Пример

Перенаправьте существующую оптимизацию на другое проектное пространство, сократите её до одной цепочки выходов и запустите:

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

Инструменты редактирования проверяют перед записью и отказываются сохранять граф с ошибками, поэтому всё, что они создают, уже проверено. Запустите validate_graph на блокнотах, которые этот сервер не записывал — например, отредактированных в графическом интерфейсе nTop — прежде чем тратить минуты на run_notebook.

Формат блокнота

Формат .ntop не документирован nTop. Далее описано то, что было получено при изучении файлов, созданных версией 5.54.2, а парсер проверен путём циклического преобразования реальных блокнотов байт-в-байт.

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

Раздел main содержит два дочерних элемента: fn — граф блоков в JSON, и leaves — объектный контейнер, раздел index которого хранит все литеральные значения. Блок с непустым func что-то вычисляет; блок с пустым func является литералом. Входы ссылаются на производящий блок по идентификатору, при этом 0 и -1 оба означают «не подключено».

Поведение, о котором стоит знать

Эти моменты стоят реального времени отладки и, где возможно, закодированы в validate_graph или в описаниях инструментов:

  • Параметр list<T> должен питаться ровно одним блоком core.list<T>. Подключение двух неявных значений прямо в слот списка заставляет nTop отклонять весь файл при загрузке с общим сообщением «unable to load your file», не называя ничего. validate_graph ловит форму, которая возникает на практике: подключённые рёбра сверх объявленного количества параметров у блока, имеющего параметр list<T>.

  • Лишние хвостовые неподключённые входные слоты — это нормально. nTop сам их создаёт, когда версия блока получает необязательный параметр, так что это не ошибка.

  • plane<point,vector,vector> принимает начало координат и два вектора, которые натягивают плоскость. Нормаль — это их векторное произведение, а не второй аргумент.

  • offset_implicit инвертирован относительно интуиции: положительное смещение разъедает. Скругление выпуклых рёбер (морфологическое открытие) — это offset(+r) затем offset(-r).

  • Перечисление blend у boolean_union: 1 добавляет материал в месте соединения, 2 удаляет его, 0 — жёсткое объединение.

  • Третий вход implicit_to_mesh v2.4.0 — это минимальный размер элемента. Установите его на 5 мм, и пластина толщиной 5 мм молча исчезнет.

  • Суффикс версии имеет значение. Бинарные файлы содержат все исторические ревизии блока, но nTop регистрирует только текущую. Старая ревизия завершается с тем же сообщением «Unknown block … Toolkit or Connector that is not installed», что и нелицензированный набор инструментов, поэтому устаревшая сигнатура выглядит точно так же, как отсутствующая лицензия. search_blocks возвращает самую новую ревизию имени первой; предпочитайте её и относитесь к голой форме без версии с подозрением.

  • Неподключённый вход — это -1 (Empty), а не 0 (None). 0 на обязательном входе заставляет nTop отказаться загружать файл. Но и -1 не всегда безопасен: некоторые необязательные входы отклоняют его с сообщением Input at N is Empty but optional, и их нужно снабдить литералом. Следуйте тому, что уже делает окружающий блокнот, а остальное пусть решают validate_graph и пробный запуск.

  • ntopcl -o сообщает блок, названный собственным ключом output графа, который устанавливает set_output. Входы корневой группы не являются выходами блокнота; без set_output вы получите Output path specified, but can't find output in notebook.

  • Блоки результатов, предоставляющие временные ряды, индексируются с 1, и шаг 1 часто является нефизической инициализацией, а не ответом. Чтение его даёт правдоподобно выглядящую бессмыслицу без ошибок.

  • Сохранение области во время оптимизации использует passive_region_constraint<region>, питаемый от fe_region_by_implicit, добавленный в список ограничений оптимизации. Вход Initial Density ничего не замораживает — nTop документирует его только как начальное предположение.

nTop поставляет собственные примеры — сначала читайте их

nTop устанавливает около 100 рабочих примеров блокнотов в C:\ProgramData\nTopology\documentation\ExtendedBlockDocs\ и полные HTML-справочные страницы в block-documentation\blocks\. find_example ищет в обоих местах. Пример блокнота за секунды проясняет соединения блока, формы литералов и пути свойств, тогда как обратная разработка того же по сообщениям об ошибках занимает часы. Проверяйте там, прежде чем гадать.

Формы литеральных значений

Литеральные значения хранятся по типам, и формы не единообразны:

Тип

Значение

real

{"isFinite":true,"units":{"length":1},"val":0.005} (СИ - метры)

point

массив из трёх таких объектов

text

{"string":"inlet"} — не {"val":...}

choice

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

file_path

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

unit_length_enum

{"id":"mm"}

Неправильная форма приводит к сбою при загрузке с сообщением Leaf failed to deserialize with block/variable <name>.

Сигнатуры блоков

nTop хранит сигнатуры своих блоков как ASCII-строки внутри собственных бинарных файлов, включая ревизии, которые больше не регистрируются. search_blocks извлекает их из вашей установки во время выполнения и упорядочивает самую новую ревизию каждого имени первой. Данные сигнатур не включены в этот репозиторий — сигнатуры принадлежат nTop, и этот сервер читает их из вашей лицензионной установки, а не распространяет их повторно.

Ограничения

  • Формат контейнера был восстановлен методом обратной разработки и проверен только на nTop 5.54.2. inspect_notebook сообщает версию, которую записывает каждый файл; относитесь к другим версиям как к непроверенным и делайте резервные копии.

  • Инструменты редактирования записывают на месте, если не передать output. Они отказываются записывать граф, не прошедший проверку, но не могут знать, является ли правка семантически правильной для вашей модели.

  • run_notebook требует лицензию nTop Automate. Без неё ntopcl завершает работу после входа, и ошибка отображается.

  • На практике только Windows, поскольку именно там работает nTop.

Разработка

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

Тесты самодостаточны и не требуют nTop. Два набора расширяются при наличии дополнительных данных:

  • NTOP_TEST_NOTEBOOKS — пути к .ntop файлам, разделённые точкой с запятой, проверяются байт-в-байт. Это ограничено предоставленными вами путями, а не установкой nTop. В репозитории не поставляются блокноты, поэтому утверждение о циклической проверке выше следует перепроверить на своих файлах, а не принимать на веру.

  • Каталожный набор сканирует реальную установку, если она найдена, и пропускает в противном случае.

Лицензия

MIT — см. LICENSE. Не аффилирован с nTop и не одобрен им. «nTop» и «nTopology» являются товарными знаками их соответствующего владельца.

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
      -