Skip to main content
Glama
garethbeaumo

OriginLab MCP Server

by garethbeaumo
README.md
<p align="center">
  <h1 align="center">OriginLab MCP Server</h1>
  <p align="center">
    <strong>Use AI as your OriginLab assistant</strong>
  </p>
  <p align="center">
    Connect OriginLab data analysis and visualization to Antigravity, Claude, Cursor, and other AI clients through the <a href="https://modelcontextprotocol.io">Model Context Protocol</a>.
  </p>
  <p align="center">
    <a href="https://github.com/garethbeaumo/originlab-mcp/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="License"></a>
    <img src="https://img.shields.io/badge/python-3.10%2B-blue.svg" alt="Python">
    <img src="https://img.shields.io/badge/version-0.2.1-green.svg" alt="Version">
    <img src="https://img.shields.io/badge/platform-Windows-lightgrey.svg" alt="Platform">
    <img src="https://img.shields.io/badge/tools-66-orange.svg" alt="Tools">
  </p>
  <p align="center">
    <a href="#quick-start">Quick Start</a> · <a href="#features">Features</a> · <a href="#examples">Examples</a> · <a href="#client-configuration">Client Configuration</a>
  </p>
  <p align="center">
    <a href="README.zh.md">简体中文</a> · English
  </p>
</p>

## What Is OriginLab MCP Server?

OriginLab MCP Server is a bridge between AI clients and OriginLab. It lets you import data, create plots, customize figures, run analysis, and export results through natural-language requests instead of manually operating the Origin UI.

```text
User: Import experiment.csv from my desktop into Origin, use the first column as X
      and the second column as Y, create a scatter plot, run a Gaussian fit,
      then export the graph as PNG.

AI: Done.
    Imported experiment.csv -> Sheet1 (200 rows x 5 columns)
    Created scatter plot -> Graph1
    Gaussian fit completed -> xc=2.35, w=0.82, A=156.3, R²=0.9987
    Exported -> C:\Users\Desktop\Graph1.png
```

### How It Works

```text
AI Client (Antigravity / Claude / Cursor)
       ↓ MCP over stdio
OriginLab MCP Server (Python)
       ↓ originpro + COM
OriginLab
```

## Requirements

| Requirement | Details |
| :--- | :--- |
| Operating system | Windows |
| OriginLab | OriginLab 2021 or later with a valid license |
| Python | 3.10+ |

## Quick Start

For AI assistants or one-command local setup, run this from the repository root:

```powershell
powershell -ExecutionPolicy Bypass -File .\scripts\install-and-open.ps1
```

The script installs `uv` if needed, runs `uv sync`, starts the local status panel, and opens `http://127.0.0.1:8765/` automatically. From that page you can test Origin and write MCP client configs.

Choose one installation method.

<details open>
<summary><b>Option A: uv (recommended)</b></summary>

**1. Install uv**

```powershell
irm https://astral.sh/uv/install.ps1 | iex
```

**2. Install dependencies**

```powershell
cd C:\path\to\originlab-mcp
uv sync
```

**3. Start the server**

```powershell
uv run originlab-mcp
```

</details>

<details>
<summary><b>Option B: pip</b></summary>

**1. Create a virtual environment (optional but recommended)**

```powershell
cd C:\path\to\originlab-mcp
python -m venv .venv
.venv\Scripts\activate
```

**2. Install the project**

```powershell
pip install -e .
```

**3. Start the server**

```powershell
originlab-mcp
```

</details>

After startup, the server waits for MCP client requests over stdio. The first tool call automatically connects to the local OriginLab installation.

### Optional: Local Status Panel

To check whether the MCP server can start, whether Origin can be reached, and whether common client config files exist, start the local UI:

```powershell
uv run originlab-mcp-ui
```

Then open `http://127.0.0.1:8765/`. This page can start/stop a debug MCP server subprocess, test the Origin connection, **read the current Origin session** (worksheets and graphs), and write the `originlab` MCP configuration for Antigravity / Gemini, Cursor, Codex, Trae, and Claude Desktop. For normal use, the AI client should still start the server automatically from its configuration.

When updating an existing config file, the UI creates a `.bak-timestamp` backup first. To prevent the browser from opening automatically:

```powershell
$env:ORIGINLAB_MCP_UI_NO_BROWSER = "1"
uv run originlab-mcp-ui
```

## Features

The server provides **66 tools** covering the OriginLab data workflow.

### Data Management (14 Tools)

| Category | Tools |
| :--- | :--- |
| Import | `import_csv` · `import_excel` · `import_data_from_text` |
| Inspect | `list_worksheets` · `get_worksheet_info` · `get_worksheet_data` · `get_cell_value` |
| Edit | `set_column_designations` · `set_column_labels` · `set_column_formula` |
| Manage | `add_worksheet` · `sort_worksheet` · `clear_worksheet` · `delete_columns` |

### Plotting (11 Tools)

| Category | Tools |
| :--- | :--- |
| Create | `create_plot` · `create_double_y_plot` |
| Modify | `add_plot_to_graph` · `remove_plot_from_graph` · `change_plot_data` · `change_plot_type` |
| Layers | `add_graph_layer` · `group_plots` |
| Inspect | `list_graphs` · `list_graph_templates` · `get_graph_info` |

### Graph Customization (25 Tools)

| Category | Tools |
| :--- | :--- |
| Axes | `set_axis_range` · `set_axis_scale` · `set_axis_step` · `set_axis_title` |
| Lines | `set_plot_line_style` · `set_plot_line_width` |
| Fonts and ticks | `set_graph_font` · `set_tick_style` |
| Colors | `set_plot_color` · `set_plot_colormap` · `set_plot_transparency` |
| Symbols | `set_plot_symbols` · `set_symbol_size` · `set_symbol_interior` |
| Group increments | `set_color_increment` · `set_symbol_increment` |
| Error bars | `set_error_bar_style` |
| Fill | `set_fill_area` |
| Legend | `set_legend` |
| Preset styling | `apply_publication_style` |
| Annotations | `set_graph_title` · `add_text_label` · `add_line_to_graph` · `remove_graph_label` |

### Analysis (3 Tools)

`linear_fit` · `nonlinear_fit` · `list_fit_functions`

> Common Origin fit functions such as Gauss, Lorentz, ExpDec1, and Boltzmann are supported. You can provide initial parameters, fix parameters, and fit with error bars.

### Export and Project Management (6 Tools)

`export_graph` · `export_all_graphs` · `export_worksheet_to_csv` · `save_project` · `open_project` · `new_project`

### System Management (5 Tools)

`get_origin_info` · `read_origin_session` · `release_origin` · `reconnect_origin` · `close_origin`

> `read_origin_session` is a read-only snapshot of the current project: workbooks/worksheets, graphs, matrices, notes, active objects, and project path. Pass `include_preview=true` to include a truncated preview of the active worksheet.

### MCP Resources (Session Reading)

In addition to tools, clients can inspect the Origin session through MCP `resources/read` without changing the project:

| URI | Contents |
| :--- | :--- |
| `originlab://session` | Full project snapshot |
| `originlab://worksheets` | Worksheet list |
| `originlab://graphs` | Graph list |
| `originlab://worksheet/{book}/{sheet}` | One worksheet's columns and data preview |
| `originlab://graph/{name}` | One graph's layers and curves |

### Advanced (2 Tools)

`execute_labtalk` · `get_labtalk_variable`

`execute_labtalk` is an escape hatch for operations not covered by standard tools. `get_labtalk_variable` safely reads LabTalk variable values.

## Examples

| Request | Typical tool call |
| :--- | :--- |
| Inspect the current Origin project | `read_origin_session` |
| Import `data.csv` into Origin | `import_csv` |
| Show worksheet columns and metadata | `get_worksheet_info` |
| Set the first column as X and the next two columns as Y | `set_column_designations` |
| Create a scatter plot | `create_plot` |
| Add another curve from the third column | `add_plot_to_graph` |
| Change the X-axis title and set the curve color to red | `set_axis_title` + `set_plot_color` |
| Apply a publication-style preset | `apply_publication_style` |
| Apply publication styling to layer 2 with line width 3 and symbol size 12 | `apply_publication_style` |
| Run a Gaussian fit | `nonlinear_fit` |
| Set the Y axis to logarithmic scale | `set_axis_scale` |
| Export a graph as PNG | `export_graph` |
| Export all project graphs as SVG | `export_all_graphs` |
| Release Origin so I can use it manually | `release_origin` |

`apply_publication_style` supports `layer_index`, axis-title font size, tick-label font size, legend font size, major tick length, minor tick count, line width, symbol size, and other common publication-figure settings.

Typical workflow:

```text
Import data -> inspect structure -> set column designations -> create plot -> customize graph -> run analysis -> export results
```

## Client Configuration

> [!NOTE]
> You do not need to start the MCP server manually. Once configured, the AI client starts the server process when needed and communicates with it over stdin/stdout.

Replace paths with your actual project path.

You can also run `uv run originlab-mcp-ui`, choose a client in the local status panel, and let it write the config automatically. Manual examples are shown below.

### Antigravity (Gemini) - Recommended

Create `.gemini/settings.json` in the project root.

**Using uv:**

```json
{
  "mcpServers": {
    "originlab": {
      "command": "uv",
      "args": ["--directory", "C:\\path\\to\\originlab-mcp", "run", "originlab-mcp"]
    }
  }
}
```

**Using pip:**

```json
{
  "mcpServers": {
    "originlab": {
      "command": "C:\\path\\to\\originlab-mcp\\.venv\\Scripts\\originlab-mcp.exe"
    }
  }
}
```

<details>
<summary><b>Claude Desktop</b></summary>

Edit `%APPDATA%\Claude\claude_desktop_config.json` using the same format as above.

</details>

<details>
<summary><b>Cursor</b></summary>

Create `.cursor/mcp.json` in the project root using the same format as above.

</details>

<details>
<summary><b>Trae</b></summary>

Create `.trae/mcp.json` in the project root using the same format as above.

</details>

<details>
<summary><b>Codex (OpenAI)</b></summary>

Create `.codex/config.json` in the project root using the same format as above.

</details>

## Testing

```powershell
# uv
uv run python -m pytest tests/ -v

# pip, after activating the virtual environment
pytest tests/ -v
```

The basic test suite does not require OriginLab to be installed.

## Project Structure

```text
originlab-mcp/
├── pyproject.toml                # Project configuration and dependencies
├── CHANGELOG.md                  # Release notes
├── scripts/
│   └── install-and-open.ps1      # One-command setup and UI launcher
├── src/originlab_mcp/
│   ├── server.py                 # MCP server entry point and dependency injection
│   ├── ui.py                     # Local status panel
│   ├── origin_manager.py         # Thread-safe Origin COM connection manager
│   ├── session.py                # Read-only Origin session snapshot
│   ├── resources.py              # MCP Resources (session reading)
│   ├── exceptions.py             # Custom exceptions
│   ├── types.py                  # Protocol type definitions
│   ├── tools/
│   │   ├── data.py               # Data import and worksheet management (14)
│   │   ├── plot.py               # Plot creation and graph management (11)
│   │   ├── customize.py          # Graph customization (25)
│   │   ├── analysis.py           # Linear and nonlinear fitting (3)
│   │   ├── export.py             # Export and project management (6)
│   │   ├── system.py             # System and connection management (4)
│   │   └── advanced.py           # LabTalk escape hatch (2)
│   └── utils/
│       ├── constants.py          # Enums, defaults, and fit-function metadata
│       ├── helpers.py            # Graph/sheet resolution and error handling helpers
│       └── validators.py         # Input validation and standard response builders
└── tests/
    ├── test_helpers.py           # Helper tests
    ├── test_phase3.py            # LabTalk safety and resolve-pattern tests
    ├── test_session.py           # Session reading and MCP resource tests
    ├── test_tools.py             # Tool registration and integration tests
    └── test_ui.py                # Local status panel config tests
```

## FAQ

<details>
<summary><b>Origin connection failed</b></summary>

Check that:

- OriginLab 2021 or later is installed locally
- You have a valid OriginLab license
- The current user can start Origin
- No other program is blocking the Origin COM interface

</details>

<details>
<summary><b>The MCP client cannot see the tools</b></summary>

1. Confirm the client configuration path is correct.
2. Confirm dependencies are installed with `uv sync` or `pip install -e .`.
3. Restart the MCP client.

</details>

<details>
<summary><b>Fit results look inaccurate</b></summary>

1. Check for outliers with `get_worksheet_data`.
2. Provide better initial values through `initial_params`.
3. Fix known parameters with `fixed_params`.
4. Confirm that the fit function is appropriate. Use `list_fit_functions` to inspect common options.

</details>

## License

[MIT](LICENSE) © 2025 garethbeaumo