Skip to main content
Glama
fqfqfqff

mathcad-prime-mcp

by fqfqfqff

mathcad-prime-mcp

MCP-сервер поверх штатного Automation API PTC Mathcad Prime 12 (Ptc.MathcadPrime.Automation.dll, COM ProgID MathcadPrime.Application). Даёт Claude открывать .mcdx-документы, читать/писать переменные, помеченные как Input/Output, и сохранять файл.

Важное ограничение

Automation API видит только те переменные, которые в самом документе Prime явно помечены как Input или Output variable (ПКМ на переменной -> "Set as Input/Output Variable" на ленте Automation). Обычные переменные без такой метки через mathcad_get_variables не появятся и не читаются/пишутся.

Related MCP server: advanced-math-mcp

Особенность процесса

MathcadPrime.exe - синглтон на сессию Windows: повторные подключения COM попадают в один и тот же процесс, включая уже открытый пользователем вручную. mathcad_quit убивает процесс только если сервер сам его запустил (было подтверждено тестом - если Prime уже был открыт до первого вызова, quit ничего не закрывает).

Инструменты

  • mathcad_open(path) - открыть/переиспользовать документ, список Input/Output

  • mathcad_list_worksheets() - все открытые в текущем инстансе Prime документы

  • mathcad_get_variables(path) - обновить список алиасов Input/Output

  • mathcad_set_value(path, name, value, units="") - задать скаляр

  • mathcad_set_string(path, name, value) - задать строку

  • mathcad_set_batch(path, values, timeout_ms=30000) - пакетно задать несколько значений и пересчитать разом

  • mathcad_get_value(path, name, source="output"|"input") - универсальное чтение (число/строка/матрица)

  • mathcad_get_value_as(path, name, units) - чтение output с конвертацией единиц

  • mathcad_get_matrix / mathcad_set_matrix - матрицы

  • mathcad_recalculate(path) - форсировать пересчёт (Synchronize)

  • mathcad_save(path) / mathcad_save_as(path, new_path)

  • mathcad_quit() - безопасно закрыть только свой процесс

Установка

uv sync

При ошибке uv Failed to write to the client cache - сломан junction AppData\Local\uv, обходить через UV_CACHE_DIR=<своя папка> uv sync.

Зарегистрирован в ~/.claude.json -> mcpServers.mathcad-prime (.venv\Scripts\python.exe -m mathcad_prime_mcp.server). Нужен перезапуск Claude Code, чтобы сервер подхватился.

Что проверено вживую

Открытие реального документа (lab1.mcdx), чтение метаданных/списка Input-Output, безопасность mathcad_quit (не трогает чужой уже открытый процесс), корректность кириллических путей через COM. set_value / get_value / batch / матрицы протестированы только по сигнатурам API (нет под рукой документа с размеченными Input/Output переменными) - если что-то пойдёт не так на реальном расчёте, смотреть сюда первым делом.


Авторские инструменты: лист целиком из текста

Второй слой сервера (tools_ws.py + пакет ws/) обходит ограничение выше. Он не пользуется Automation API для чтения значений, а работает с самим файлом: .mcdx это zip, формулы лежат в mathcad/worksheet.xml, а все посчитанные значения и ошибки Prime складывает в mathcad/result.xml. Поэтому лист можно собрать из текста и проверить, ни разу не взглянув на экран.

Инструменты

Инструмент

Что делает

mathcad_source_help

синтаксис компактного исходника

mathcad_write

исходник -> .mcdx, пересчёт, проверка, выравнивание в два прохода

mathcad_verify

пересчитать и вернуть весь лист текстом: формулы, значения, ошибки

mathcad_trace_data

числовые данные кривых графика (для расчёта выводов)

mathcad_figures

png расчётной части и каждого графика, обрезанные по содержимому

mathcad_cheatsheet

памятка к защите: формулы + значения + пояснения @note

mathcad_report

markdown -> отчёт .docx по ГОСТ (и .pdf)

Формат исходника

# комментарий
@text 1. Чтение файла и параметры помехи      # подпись прямо в листе
S := READWAV("lab4.wav") ; m := floor(max(S)*0.1) ; L := length(S)
@note m - амплитуда шума, 10 процентов от максимума   # только в шпаргалку
n := 0..L-1 ; D[n] := rnd(m)-m/2 ; V[n] := S[n]+D[n]
WRITEWAV("out.wav",44100,16,V)=               # вычисление, показывает значение
L= ; sk=                                      # вывод значений
@plot x=n y=S[n]:red:2,V[n]:navy:1 xlim=0..200 ylim=0..5 size=620x260
@gap 40

Строка это ряд регионов, ; разделяет регионы в ряду. Выражения: + - * / ^, |x| модуль, f(a,b) вызов, X[i] индекс, a..b диапазон. Суммы и произведения: sum(k, 0..N-1, x[k]*y[n-k]), prod(i, 1..N, i). Греческие имена по ASCII-псевдонимам: Phi (Хевисайд), pi, sigma, omega, Delta. Слева от := допустимо имя, X[i] или f(x).

Отчёт

mathcad_report собирает .docx по ГОСТ из markdown: Times New Roman 14, полуторный интервал, поля 30/15/20/20 мм, титульный лист из front matter. Сверх markdown понимает $$формула$$ строкой по центру, ![подпись](f.png) с автоматическим масштабом по ширине страницы, X_{i} и 10^{5}, разрыв страницы, таблицы. То, что раньше писалось генератором на 200 строк, теперь пишется как обычный текст.

Тесты

pytest tests (Mathcad для них не нужен): разбор формул в обе стороны, инварианты вёрстки (регионы не наезжают, ряд влезает в страницу, график не рвётся границей страницы), сборка текстовых блоков, чтение ошибок.

Почему проверка не требует скриншотов

mathcad_verify печатает по строке на регион:

  6  sk := stdev(D)
 22  sk =  ->  183.909
 28  график  x=n,n  y=S[n],V[n]   x[0..44099] y[-6368..6368]; y[-6684..6683]
  2  b := a+zzz   ### ОШИБКА: Эта переменная не определена.

Текст ошибки тот же, что показывает Prime. У графиков видны диапазоны данных каждой кривой, то есть корректность кривой проверяется числами.

Как получается ровная вёрстка

Ширину формулы вместе с показанным результатом знает только Prime. Поэтому mathcad_write собирает лист дважды: после первого пересчёта читает из файла проставленные Prime actualWidth/actualHeight и раскладывает по ним ровными колонками. Поверх этого учтены две особенности отрисовки:

  • формула привязана по базовой линии, поэтому дроби и степени выступают вверх за свой top, и над рядом резервируется запас;

  • actualWidth не включает надстрочную степень, поэтому значение вида 6.554·10^4 рисуется шире, чем сообщает Prime, и наезжает на соседа справа. Регионам с экспоненциальным результатом добавляется запас по ширине.

Ряд, который не влезает в ширину листа, переносится на следующую строку сам.

Подписи в листе

Текстовый блок в Prime 12 это не просто тег: содержимое лежит в отдельной части-архиве mathcad/xaml/FlowDocumentN.XamlPackage (WPF FlowDocument), на которую ссылается mathcad/_rels/worksheet.xml.rels, а item-idref элемента <text> совпадает с Id этой связи. Всё это собирает ws/textblock.py.

Ограничения

  • rnd даёт новую реализацию при каждом пересчёте: числа в отчёте и в файле совпадут, только если после последнего пересчёта не пересчитывать снова.

  • Если формулы читают файлы по относительному имени (READWAV, READPRN), .mcdx должен лежать рядом с ними; для mathcad_figures это work_dir.

  • mathcad_figures пересчитывает лист, поэтому WRITEWAV/WRITEPRN в исходнике перезапишут свои файлы новой реализацией шума.

  • Картинки снимаются в масштабе Prime. Чтобы пикселей было больше без возни с зумом, вспомогательные листы печатаются на A3: график выходит ~950 px вместо ~610. Высота ограничена видимой частью окна, иначе край срежет.

  • mathcad_figures сам выбрасывает из вспомогательного листа вызовы WRITE*/APPEND*, иначе пересчёт перезаписал бы файлы рабочей лабы.

Схемы Prime

Полезно при расширении: <установка Prime>\Mathcad Converter\schema\*.xsd описывают worksheet/math (версии 10-30, текущая в файлах 50, но структура близка). Оттуда взята структура текстового региона.

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables Claude to create and manipulate SolidWorks CAD models through natural language commands, automating part creation, sketching, and extrusion.
    10
    -
  • A
    license
    A
    quality
    C
    maintenance
    Enables advanced mathematics operations including linear algebra, vector math, symbolic computation, and calculus through MCP tools. Designed for use with Claude and other MCP-compatible LLMs.
    19
    2
    MIT
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables Claude and other LLM clients to read and write Microsoft Project files directly, covering tasks, resources, assignments, dependencies, and critical path information without needing Microsoft Project open.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables an LLM to drive Mathcad 15 worksheets over stdio by setting input variables, recalculating, reading and inspecting results and regions, diagnosing errors, and saving or exporting files. It also supports batch input/output computation runs and guarded file handling with path restrictions and backup on overwrite.
    MIT