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

OriginLab-MCP

Un servidor MCP para OriginLab Origin. Lee y escribe hojas de cálculo, construye y estiliza gráficos de varios paneles, y exporta figuras — y es cuidadoso con la diferencia entre lo que Origin aceptó y lo que Origin hizo.

1.0.0. Cada herramienta aquí se ha ejecutado contra un Origin 2024 real, la aplicación de Origin se instala e inicia el puente, y examples/five_panel_figure.py construye una figura de cinco paneles de principio a fin.

Brechas conocidas, para que no sean una sorpresa: una leyenda colocada en una esquina se comprueba que esté dentro de su panel, no que se asiente sobre los datos; un eje logarítmico no recibe marcas menores a menos que lo pidas; y la tabla de opciones de 213 entradas registra lo que Origin documenta, no lo que se midió que hace cada opción — dieciséis de ellas se han visto cambiar una imagen.

Requisitos

  • Origin u OriginPro 2021b o más reciente (Python 3.9+ integrado)

  • Python 3.10+ para el servidor

  • Windows, ya sea de forma nativa o en una máquina virtual

Related MCP server: Aspose.Cells Cloud MCP Server

Instalación

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

Eso imprime los tres pasos que Origin necesita, que vale la pena indicar aquí porque el obvio no hace nada: arrastrar la carpeta a la galería de Apps se acepta en silencio y no añade ningún botón. Copia la carpeta generada OriginLab MCP Bridge en %LOCALAPPDATA%\OriginLab\Apps, empaquétala desde la ventana de comandos de Origin con

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

— con barras invertidas, porque las barras normales cuelgan mkOPX — y arrastra el .opx resultante a Origin. Aparece un botón; al hacer clic en él, la ventana de scripts se trae al frente, donde el puente informa starting, loaded, serving.

Apunta tu cliente MCP a originlab-mcp.

originlab-mcp --status dice si un puente está escuchando, y sale con un código distinto de cero cuando no lo está. originlab-mcp --stop lo termina.

Detener es un comando en lugar de un segundo botón porque un botón no debe hacer el trabajo por sí mismo: mientras el puente sirve, mantiene el hilo de la interfaz de Origin, así que cualquier cosa que el botón ejecutara se ejecutaría desde dentro del bucle de mensajes. Un botón que solo lanza un proceso externo es posible — así es como lo hace el proyecto upstream — pero la instrucción aún tiene que llegar al puente a través del socket, y --stop es esa instrucción sin la indirección.

Qué es diferente

Origin acepta mucho que luego ignora, sin decirlo nunca.

  • set <plot> -zzzz 9 — una opción que Origin nunca ha oído — devuelve true, se lee de vuelta como 9.0, y deja el gráfico píxel por píxel idéntico.

  • plot:=2003 no es un tipo de gráfico. Origin crea la ventana, dibuja los ejes, escribe la leyenda, y no traza nada.

  • Un estilo escrito en un gráfico dentro de un grupo se lee de vuelta exactamente como se pidió, mientras Origin sigue dibujando el estilo del grupo.

Ninguno de estos se puede detectar desde la respuesta, así que la comprobación ocurre antes de la escritura y después de la figura:

Antes. Las opciones se comprueban contra la propia lista documentada de Origin, y una inventada se rechaza con las opciones que probablemente se quería. Esto importa porque los nombres reales son imposibles de adivinar — el ancho de línea es -w, el patrón de relleno de barra es -pfp — así que una suposición plausible es el fallo probable, no un error tipográfico. Escribir en un miembro de un grupo de gráficos se rechaza directamente. Los tipos de gráfico provienen de oPlotIDs.h en la instalación de Origin en lugar de la documentación, y cada nombre en la tabla se dibujó y se miró.

Después. Una comprobación por llamada no puede alcanzar la pregunta que importa, que es si la figura es correcta. Así que las operaciones que construyen una informan de la cosa que podría contradecirlas:

operación

lo que informa de vuelta

origin_plot

la capa usada, y cuántos gráficos dice Origin que hay en ella

origin_layers_arrange

la geometría real de cada capa, y la caja que todas ocupan

origin_legend_set

dónde está la leyenda, y si eso está dentro de su capa

origin_axis_set

en qué lado del marco aterrizó el título

Esa lista existe debido a un fallo medido: una figura de cinco paneles donde todos los veintitrés pasos devolvieron OK y el resultado era inutilizable. Una leyenda se había colocado en left = 24953 en una página de 6432 de ancho — legend.x está en coordenadas de datos, no en los porcentajes que se le estaban dando — y la exportación de Origin agrandó el lienzo para contenerla, comprimiendo la figura en una esquina. Nada en ninguna respuesta decía que algo estuviera mal.

Una lectura de vuelta se informa como una lectura de vuelta, nunca como prueba:

{
  "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."
}

Exportar el gráfico es lo único que lo resuelve, por eso origin_graph_export es una herramienta de primera clase en lugar de una forma de guardar imágenes.

Los argumentos que este servidor no lee se rechazan, con el nombre más cercano que sí lee. El mismo fallo contra el que protege en Origin apareció aquí primero: worksheet_read toma max_rows, y una llamada que pasaba rows=3 solía obtener todas las filas de la hoja y ninguna indicación de que su argumento se había descartado.

La superficie de herramientas es pequeña a propósito. Una herramienta plot con un parámetro plot_type en lugar de una por tipo de gráfico; un par plot_option_get/set en lugar de un envoltorio por propiedad.

Herramientas

origin_ping

¿Está vivo el puente? — responde incluso cuando originpro está roto

origin_bridge_status

Dónde está el puente, y si está respondiendo

origin_worksheet_info

Tamaño, nombres de columnas, formatos

origin_worksheet_read

Columnas como listas, rechazando en lugar de truncar

origin_worksheet_write

Columnas dentro, con el formato indicado no adivinado

origin_plot

Traza columnas en una página nueva o en una capa nueva de una existente

origin_graph_info

Capas, gráficos, direcciones, pertenencia a grupos

origin_graph_export

PNG fuera — y el único testigo de que un estilo se aplicó

origin_layer_add

Añade un panel, y dice cuál es su índice

origin_layers_arrange

Coloca los paneles en cuadrícula, e informa dónde fueron realmente

origin_legend_set

Reconstruye una leyenda, la coloca, comprueba que está dentro de su panel

origin_axis_set

Escala, rango y título, con el lado del título informado

origin_axis_get

Lee un eje de vuelta

origin_plot_option_get

Lee una opción de set de LabTalk

origin_plot_option_set

Escribe una, e informa de lo que eso estableció

origin_set_options

Busca las 213 opciones set documentadas de Origin

origin_labtalk

La vía de escape, con la salida de Origin capturada

examples/five_panel_figure.py construye una figura de cinco paneles de principio a fin e imprime, en cada paso, el número que podría contradecirla.

Configuraciones

Windows, todo local — el caso habitual. Servidor y Origin en la misma máquina, hablando a través de TCP de bucle local.

Origin en una máquina virtual Windows, trabajando desde macOS o Linux — también compatible. El servidor se ejecuta dentro de la máquina virtual a través de ssh; solo el cliente MCP está en el host. Esto funciona porque el servidor alcanza a Origin a través de un socket de bucle local en lugar de COM, que no puede cruzar un límite de sesión de Windows.

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

docs/remote-origin.md recorre ese caso: el servidor ssh, la clave (Windows pone la de un administrador en un archivo diferente e ignora la habitual sin decirlo), y apuntar un cliente MCP a él.

Notas sobre el comportamiento de Origin

Cosas medidas aquí que ninguna documentación menciona:

  • originpro es de un solo hilo, absolutamente. Llamado desde cualquier hilo que no sea el hilo de la interfaz de Origin, se bloquea mientras mantiene el GIL y bloquea todo el intérprete integrado. La ventana de Origin sigue respondiendo; su Python se ha ido. El puente por lo tanto sirve en ese hilo y bombea la cola de mensajes de Origin entre solicitudes.

  • Un diálogo modal detiene el puente, porque el diálogo mantiene el hilo en el que el puente sirve — mientras el archivo de apretón de manos sigue diciendo que está arriba. Exportar a un directorio que no existe abre uno, así que eso se comprueba antes de que se envíe la exportación.

  • Una leyenda tiene dos pares de coordenadas en espacios diferentes. legend.x/legend.y son las coordenadas de datos de la capa; legend.left/.top son unidades de página, las mismas que informa page.width.

  • plotxy ogl:=<new> hace una capa nueva, no una página nueva, y no la hace activa. [<new>] es la página nueva.

  • Origin intercambia los ejes para gráficos de barras y lo informa a través de ninguna propiedad de capa. Mueve los objetos de título para que coincidan y mantiene su rotación, así que el título del eje de valores termina bajo el marco leyendo de abajo a arriba.

  • -w es puntos × 500; -wp toma puntos. Pasar un valor de puntos a -w da una línea fina en lugar de un error.

  • Un patrón de relleno establecido con -pfp solo es invisible: Origin lo dibuja en el color de relleno, así que -pfc también se necesita, y ninguno cambia nada por sí solo.

  • LabTalk se detiene en la primera declaración que rechaza, así que un script que informa de un fallo ha ejecutado un prefijo desconocido de sí mismo.

  • Origin se niega a iniciar Python mientras un comando está en vuelo, y cada solicitud del puente es uno. Los scripts que contienen run -pyf o py.exec se rechazan de antemano en lugar de fallar sin explicación.

Referencias

Origin y OriginPro son productos de OriginLab Corporation. Este proyecto no está afiliado con OriginLab.

Licencia

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