OriginLab-MCP
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, в нём |
| реальную геометрию каждого слоя и рамку, которую они все занимают |
| где находится легенда и находится ли она внутри своего слоя |
| на какой стороне рамки оказался заголовок |
Этот список существует из-за измеренного сбоя: пятипанельная фигура, где все двадцать три шага вернули 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 вместо обёртки на каждое свойство.
Инструменты
| Жив ли мост — отвечает, даже если originpro сломан |
| Где находится мост и отвечает ли он |
| Размер, имена столбцов, форматы |
| Столбцы в виде списков, отказ вместо усечения |
| Столбцы на вход, с указанным форматом, а не угаданным |
| Построить столбцы на новой странице или в новом слое существующей |
| Слои, графики, адреса, членство в группах |
| PNG на выход — и единственный свидетель, что стиль применился |
| Добавить панель и сообщить её индекс |
| Разложить панели сеткой и сообщить, куда они реально попали |
| Перестроить легенду, разместить её, проверить, что она внутри своей панели |
| Масштаб, диапазон и заголовок, с указанием стороны заголовка |
| Прочитать ось обратно |
| Прочитать одну опцию LabTalk |
| Записать одну и сообщить, что это установило |
| Поиск по 213 документированным опциям |
| Запасной выход с захватом вывода 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──▶ Origindocs/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 и OriginPro — продукты корпорации OriginLab. Этот проект не связан с OriginLab.
Лицензия
MIT.
Maintenance
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
- FlicenseAqualityCmaintenanceMCP server for Microsoft Office file operations. Read, write, and create Excel, Word, and PowerPoint files directly from your local filesystem.12
- AlicenseCqualityCmaintenanceAutomates Microsoft Excel spreadsheet creation and editing via MCP tools for any MCP-compatible client.37MIT
- AlicenseNot gradedqualityDmaintenanceEnables remote control of Adobe Photoshop on macOS and Windows via MCP, supporting multiple backends including AppleScript, PowerShell, and UXP plugin.12MIT
- AlicenseBqualityBmaintenanceA local MCP server that enables AI assistants to control Origin/OriginPro on Windows via Python automation, with adaptive path detection to resolve import errors.631MIT
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)
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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