Skip to main content
Glama
Yike-Ye
by Yike-Ye

OriginLab-MCP

MCP-сервер для OriginLab Origin. Он читает и записывает рабочие листы, строит и стилизует многопанельные графики и экспортирует фигуры — и он внимателен к разнице между тем, что Origin принял, и тем, что Origin сделал.

1.0.0. Каждый инструмент здесь был протестирован на реальном Origin 2024, приложение Origin устанавливает и запускает мост, а examples/five_panel_figure.py создаёт пятипанельную фигуру от начала до конца.

Известные пробелы, чтобы они не стали неожиданностью: легенда, помещённая в угол, проверяется на нахождение внутри своей панели, а не на то, лежит ли она поверх данных; логарифмическая ось не получает вспомогательных делений, если вы не попросите; и таблица параметров из 213 записей фиксирует то, что документирует Origin, а не то, что каждый параметр, как было измерено, делает — за шестнадцатью из них наблюдали, как они меняют картинку.

Требования

  • Origin или OriginPro 2021b или новее (встроенный Python 3.9+)

  • Python 3.10+ для сервера

  • Windows, нативно или в виртуальной машине

Related MCP server: Aspose.Cells Cloud MCP Server

Установка

pip install originlab-mcp
originlab-mcp --build-app .

Это выводит три шага, которые нужны Origin, и их стоит здесь изложить, потому что очевидный шаг ничего не делает: перетаскивание папки в галерею приложений молча принимается и не добавляет кнопку. Скопируйте сгенерированную папку OriginLab MCP Bridge в %LOCALAPPDATA%\OriginLab\Apps, упакуйте её из командного окна Origin с помощью

mkOPX app:="OriginLab MCP Bridge" opx:="C:\path\to\OriginLab MCP Bridge.opx";

— обратные слэши, потому что прямые слэши зависают в mkOPX — и перетащите получившийся .opx в Origin. Появляется кнопка; при её нажатии окно сценария выходит на передний план, где мост сообщает starting, loaded, serving.

Укажите вашему MCP-клиенту на originlab-mcp.

originlab-mcp --status сообщает, слушает ли мост, и завершается с ненулевым кодом, если нет. originlab-mcp --stop завершает его.

Остановка — это команда, а не вторая кнопка, потому что кнопка не должна выполнять работу сама: пока мост обслуживает запросы, он удерживает поток пользовательского интерфейса Origin, поэтому всё, что запускает кнопка, выполнялось бы изнутри цикла сообщений. Кнопка, которая только порождает внешний процесс, возможна — именно так это делает вышестоящий проект — но инструкция всё равно должна достичь моста через сокет, и --stop — это та инструкция без посредничества.

Что отличается

Origin принимает многое из того, что затем игнорирует, никогда не сообщая об этом.

  • set <plot> -zzzz 9 — параметр, о котором Origin никогда не слышал — возвращает true, считывается как 9.0 и оставляет график попиксельно идентичным.

  • plot:=2003 — это не тип графика. Origin создаёт окно, рисует оси, пишет легенду и ничего не строит.

  • Стиль, записанный в график внутри группы, считывается точно так, как запрошено, в то время как Origin продолжает рисовать стиль группы.

Ни одно из этих действий нельзя обнаружить по ответу, поэтому проверка происходит до записи и после фигуры:

До. Параметры проверяются по собственному документированному списку Origin, и выдуманный параметр отклоняется с указанием тех параметров, которыми он, вероятно, должен был быть. Это важно, потому что настоящие имена невозможно угадать — ширина линии это -w, шаблон заливки столбцов это -pfp — так что правдоподобное предположение — это вероятная ошибка, а не опечатка. Запись в элемент графика внутри группы отклоняется сразу. Типы графиков берутся из oPlotIDs.h в установке Origin, а не из документации, и каждое имя в таблице было нарисовано и просмотрено.

После. Проверка на каждый вызов не может ответить на главный вопрос — правильна ли фигура. Поэтому операции, которые её строят, сообщают то, что может им противоречить:

операция

что она сообщает в ответ

origin_plot

использованный слой и сколько графиков, по словам Origin, в нём

origin_layers_arrange

реальную геометрию каждого слоя и рамку, которую они все занимают

origin_legend_set

где находится легенда и находится ли она внутри своего слоя

origin_axis_set

на какой стороне рамки оказался заголовок

Этот список существует из-за измеренного сбоя: пятипанельная фигура, где все двадцать три шага вернули OK, а результат оказался непригодным. Одна легенда была помещена в left = 24953 на странице шириной 6432 — legend.x находится в координатах данных, а не в процентах, которые ей передавались — и экспорт Origin увеличил холст, чтобы вместить её, сжав фигуру в угол. Ни в одном ответе не было сказано, что что-то не так.

Считывание сообщается как считывание, а не как доказательство:

{
  "requested": 60,
  "readback": {"readable": true, "value": 60.0, "matches_request": true},
  "readback_means": "Origin stored this value where 'get' can find it. It is not
                     proof that the graph changed: Origin also stores options it
                     does not recognise."
}

Экспорт графика — единственное, что решает вопрос, поэтому origin_graph_export — это полноценный инструмент, а не способ сохранить картинки.

Аргументы, которые этот сервер не читает, отклоняются с указанием ближайшего имени, которое он читает. Тот же сбой, от которого он защищает в Origin, сначала проявился здесь: worksheet_read принимает max_rows, и вызов с rows=3 раньше получал все строки листа без указания, что его аргумент был отброшен.

Поверхность инструментов намеренно мала. Один инструмент plot с параметром plot_type вместо одного на каждый тип диаграммы; одна пара plot_option_get/set вместо обёртки на каждое свойство.

Инструменты

origin_ping

Жив ли мост — отвечает, даже если originpro сломан

origin_bridge_status

Где находится мост и отвечает ли он

origin_worksheet_info

Размер, имена столбцов, форматы

origin_worksheet_read

Столбцы в виде списков, отказ вместо усечения

origin_worksheet_write

Столбцы на вход, с указанным форматом, а не угаданным

origin_plot

Построить столбцы на новой странице или в новом слое существующей

origin_graph_info

Слои, графики, адреса, членство в группах

origin_graph_export

PNG на выход — и единственный свидетель, что стиль применился

origin_layer_add

Добавить панель и сообщить её индекс

origin_layers_arrange

Разложить панели сеткой и сообщить, куда они реально попали

origin_legend_set

Перестроить легенду, разместить её, проверить, что она внутри своей панели

origin_axis_set

Масштаб, диапазон и заголовок, с указанием стороны заголовка

origin_axis_get

Прочитать ось обратно

origin_plot_option_get

Прочитать одну опцию LabTalk set

origin_plot_option_set

Записать одну и сообщить, что это установило

origin_set_options

Поиск по 213 документированным опциям set Origin

origin_labtalk

Запасной выход с захватом вывода Origin

examples/five_panel_figure.py создаёт пятипанельную фигуру от начала до конца и на каждом шаге выводит число, которое может ей противоречить.

Варианты развёртывания

Windows, всё локально — обычный случай. Сервер и Origin на одной машине, общаются через loopback TCP.

Origin в виртуальной машине Windows, работа с macOS или Linux — тоже поддерживается. Сервер работает внутри виртуальной машины через ssh; только MCP-клиент находится на хосте. Это работает, потому что сервер обращается к Origin через loopback-сокет, а не через COM, который не может пересечь границу сеанса Windows.

MCP client  ──ssh──▶  server (Windows)  ──TCP 127.0.0.1──▶  Origin

docs/remote-origin.md подробно описывает этот случай: ssh-сервер, ключ (Windows помещает ключ администратора в другой файл и игнорирует обычный, не сообщая об этом), и настройка MCP-клиента на него.

Заметки о поведении Origin

Вещи, измеренные здесь, о которых не упоминает ни одна документация:

  • originpro абсолютно однопоточен. Вызванный из любого потока, кроме потока пользовательского интерфейса Origin, он блокируется, удерживая GIL, и приводит к взаимоблокировке всего встроенного интерпретатора. Окно Origin остаётся отзывчивым; его Python исчезает. Поэтому мост обслуживает запросы в этом потоке и прокачивает очередь сообщений Origin между запросами.

  • Модальный диалог останавливает мост, потому что диалог удерживает поток, на котором работает мост — в то время как файл рукопожатия продолжает говорить, что он работает. Экспорт в несуществующий каталог открывает такой диалог, поэтому это проверяется перед отправкой экспорта.

  • У легенды есть две пары координат в разных пространствах. legend.x/legend.y — это координаты данных слоя; legend.left/.top — это единицы страницы, те же, что сообщает page.width.

  • plotxy ogl:=<new> создаёт новый слой, а не новую страницу, и не делает его активным. [<new>] — это новая страница.

  • Origin меняет оси для столбчатых диаграмм и не сообщает об этом через какое-либо свойство слоя. Он перемещает объекты заголовков, чтобы соответствовать, и сохраняет их поворот, поэтому заголовок оси значений оказывается под рамкой и читается снизу вверх.

  • -w — это пункты × 500; -wp принимает пункты. Передача значения в пунктах в -w даёт тонкую линию, а не ошибку.

  • Шаблон заливки, заданный только через -pfp, невидим: Origin рисует его цветом заливки, поэтому также нужен -pfc, и ни один из них сам по себе ничего не меняет.

  • LabTalk останавливается на первом операторе, который он отклоняет, поэтому сценарий, сообщающий об ошибке, выполнил неизвестный префикс самого себя.

  • Origin отказывается запускать Python, пока выполняется команда, а каждый запрос моста — это команда. Сценарии, содержащие run -pyf или py.exec, отклоняются заранее, а не завершаются ошибкой без объяснения.

Ссылки

  • Ge-Shun/origin-mcp — подход с встроенным мостом для транспорта, которому следует архитектура этого проекта.

  • garethbeaumo/originlab-mcp — сервер, прикреплённый через COM; проще запускать, когда Origin находится в том же сеансе рабочего стола.

  • Origin LabTalk reference · originpro

Origin и OriginPro — продукты корпорации OriginLab. Этот проект не связан с OriginLab.

Лицензия

MIT.

Install Server
A
license - permissive license
A
quality
A
maintenance

Maintenance

Maintainers
Response time
Release cycle
1Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Servers

View all related MCP servers

Related MCP Connectors

  • ClinicalTrials MCP — wraps ClinicalTrials.gov API v2 (free, no auth)

  • PyPI MCP — wraps the Python Package Index (PyPI) JSON API (free, no auth).

  • Monday.com MCP — wraps the Monday.com GraphQL API (BYO API key)

View all MCP Connectors

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/Yike-Ye/OriginLab-MCP'

If you have feedback or need assistance with the MCP directory API, please join our Discord server