ovito-mcp 2026.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,266 @@
1
+ # Created by https://www.toptal.com/developers/gitignore/api/visualstudiocode,python,macos,linux,windows
2
+ # Edit at https://www.toptal.com/developers/gitignore?templates=visualstudiocode,python,macos,linux,windows
3
+
4
+ ### Linux ###
5
+ *~
6
+
7
+ # temporary files which can be created if a process still has a handle open of a deleted file
8
+ .fuse_hidden*
9
+
10
+ # KDE directory preferences
11
+ .directory
12
+
13
+ # Linux trash folder which might appear on any partition or disk
14
+ .Trash-*
15
+
16
+ # .nfs files are created when an open file is removed but is still being accessed
17
+ .nfs*
18
+
19
+ ### macOS ###
20
+ # General
21
+ .DS_Store
22
+ .AppleDouble
23
+ .LSOverride
24
+
25
+ # Icon must end with two \r
26
+ Icon
27
+
28
+
29
+ # Thumbnails
30
+ ._*
31
+
32
+ # Files that might appear in the root of a volume
33
+ .DocumentRevisions-V100
34
+ .fseventsd
35
+ .Spotlight-V100
36
+ .TemporaryItems
37
+ .Trashes
38
+ .VolumeIcon.icns
39
+ .com.apple.timemachine.donotpresent
40
+
41
+ # Directories potentially created on remote AFP share
42
+ .AppleDB
43
+ .AppleDesktop
44
+ Network Trash Folder
45
+ Temporary Items
46
+ .apdisk
47
+
48
+ ### macOS Patch ###
49
+ # iCloud generated files
50
+ *.icloud
51
+
52
+ ### Python ###
53
+ # Byte-compiled / optimized / DLL files
54
+ __pycache__/
55
+ *.py[cod]
56
+ *$py.class
57
+
58
+ # C extensions
59
+ *.so
60
+
61
+ # Distribution / packaging
62
+ .Python
63
+ build/
64
+ develop-eggs/
65
+ dist/
66
+ downloads/
67
+ eggs/
68
+ .eggs/
69
+ lib/
70
+ lib64/
71
+ parts/
72
+ sdist/
73
+ var/
74
+ wheels/
75
+ share/python-wheels/
76
+ *.egg-info/
77
+ .installed.cfg
78
+ *.egg
79
+ MANIFEST
80
+
81
+ # PyInstaller
82
+ # Usually these files are written by a python script from a template
83
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
84
+ *.manifest
85
+ *.spec
86
+
87
+ # Installer logs
88
+ pip-log.txt
89
+ pip-delete-this-directory.txt
90
+
91
+ # Unit test / coverage reports
92
+ htmlcov/
93
+ .tox/
94
+ .nox/
95
+ .coverage
96
+ .coverage.*
97
+ .cache
98
+ nosetests.xml
99
+ coverage.xml
100
+ *.cover
101
+ *.py,cover
102
+ .hypothesis/
103
+ .pytest_cache/
104
+ cover/
105
+
106
+ # Translations
107
+ *.mo
108
+ *.pot
109
+
110
+ # Django stuff:
111
+ *.log
112
+ local_settings.py
113
+ db.sqlite3
114
+ db.sqlite3-journal
115
+
116
+ # Flask stuff:
117
+ instance/
118
+ .webassets-cache
119
+
120
+ # Scrapy stuff:
121
+ .scrapy
122
+
123
+ # Sphinx documentation
124
+ docs/_build/
125
+
126
+ # PyBuilder
127
+ .pybuilder/
128
+ target/
129
+
130
+ # Jupyter Notebook
131
+ .ipynb_checkpoints
132
+
133
+ # IPython
134
+ profile_default/
135
+ ipython_config.py
136
+
137
+ # pyenv
138
+ # For a library or package, you might want to ignore these files since the code is
139
+ # intended to run in multiple environments; otherwise, check them in:
140
+ # .python-version
141
+
142
+ # pipenv
143
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
144
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
145
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
146
+ # install all needed dependencies.
147
+ #Pipfile.lock
148
+
149
+ # poetry
150
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
151
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
152
+ # commonly ignored for libraries.
153
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
154
+ #poetry.lock
155
+
156
+ # pdm
157
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
158
+ #pdm.lock
159
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
160
+ # in version control.
161
+ # https://pdm.fming.dev/#use-with-ide
162
+ .pdm.toml
163
+
164
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
165
+ __pypackages__/
166
+
167
+ # Celery stuff
168
+ celerybeat-schedule
169
+ celerybeat.pid
170
+
171
+ # SageMath parsed files
172
+ *.sage.py
173
+
174
+ # Environments
175
+ .env
176
+ .venv
177
+ env/
178
+ venv/
179
+ ENV/
180
+ env.bak/
181
+ venv.bak/
182
+
183
+ # Spyder project settings
184
+ .spyderproject
185
+ .spyproject
186
+
187
+ # Rope project settings
188
+ .ropeproject
189
+
190
+ # mkdocs documentation
191
+ /site
192
+
193
+ # mypy
194
+ .mypy_cache/
195
+ .dmypy.json
196
+ dmypy.json
197
+
198
+ # Pyre type checker
199
+ .pyre/
200
+
201
+ # pytype static type analyzer
202
+ .pytype/
203
+
204
+ # Cython debug symbols
205
+ cython_debug/
206
+
207
+ # PyCharm
208
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
209
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
210
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
211
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
212
+ #.idea/
213
+
214
+ ### Python Patch ###
215
+ # Poetry local configuration file - https://python-poetry.org/docs/configuration/#local-configuration
216
+ poetry.toml
217
+
218
+ # ruff
219
+ .ruff_cache/
220
+
221
+ # LSP config files
222
+ pyrightconfig.json
223
+
224
+ ### VisualStudioCode ###
225
+ .vscode/
226
+
227
+ # Local History for Visual Studio Code
228
+ .history/
229
+
230
+ # Built Visual Studio Code Extensions
231
+ *.vsix
232
+
233
+ ### VisualStudioCode Patch ###
234
+ # Ignore all local history of files
235
+ .history
236
+ .ionide
237
+
238
+ ### Windows ###
239
+ # Windows thumbnail cache files
240
+ Thumbs.db
241
+ Thumbs.db:encryptable
242
+ ehthumbs.db
243
+ ehthumbs_vista.db
244
+
245
+ # Dump file
246
+ *.stackdump
247
+
248
+ # Folder config file
249
+ [Dd]esktop.ini
250
+
251
+ # Recycle Bin used on file shares
252
+ $RECYCLE.BIN/
253
+
254
+ # Windows Installer files
255
+ *.cab
256
+ *.msi
257
+ *.msix
258
+ *.msm
259
+ *.msp
260
+
261
+ # Windows shortcuts
262
+ *.lnk
263
+
264
+ # End of https://www.toptal.com/developers/gitignore/api/visualstudiocode,python,macos,linux,windows
265
+
266
+ .claude
@@ -0,0 +1,95 @@
1
+ default:
2
+ image: python:3.11
3
+
4
+ stages:
5
+ - test
6
+ - publish
7
+
8
+ variables:
9
+ PIP_CACHE_DIR: "$CI_PROJECT_DIR/.cache/pip"
10
+
11
+ cache:
12
+ paths:
13
+ - .cache/pip
14
+
15
+ test:
16
+ stage: test
17
+ parallel:
18
+ matrix:
19
+ # The floor and ceiling of requires-python. This package needs
20
+ # torch, so every extra matrix entry is expensive; the two ends catch the version
21
+ # incompatibilities that matter.
22
+ - PYTHON_VERSION: ["3.10", "3.14"]
23
+ image: python:${PYTHON_VERSION}
24
+ script:
25
+ # Upgrade pip before anything else. The python:3.10 image ships a pip old enough to
26
+ # reject a wheel whose metadata Name differs from the requested name only by
27
+ # normalization ('typing_extensions' vs 'typing-extensions'). It discards every wheel
28
+ # candidate, falls back to the sdist, and then cannot install that sdist's build
29
+ # dependency (flit_core) because --index-url below has replaced PyPI with the
30
+ # PyTorch-only index. Newer pip canonicalizes both names and uses the wheel, which is
31
+ # why the 3.14 entry was unaffected.
32
+ - pip install --upgrade pip
33
+ # Install the CPU-only torch build first so the sentence-transformers dependency
34
+ # below is already satisfied and pip never pulls the ~2.5GB CUDA wheel. CI has no GPU.
35
+ - pip install torch --index-url https://download.pytorch.org/whl/cpu
36
+ - pip install -e ".[test]"
37
+ - pytest -q
38
+
39
+ publish-pypi:
40
+ stage: publish
41
+ rules:
42
+ - if: $CI_COMMIT_TAG =~ /^v\d+\.\d+/
43
+ variables:
44
+ HATCH_INDEX_USER: __token__
45
+ # HATCH_INDEX_AUTH holds the PyPI API token. It is not defined here: set it as a
46
+ # masked CI/CD variable in the GitLab project settings (see RELEASING.md).
47
+ # Disable keyring, which otherwise hangs waiting for a backend on a headless runner.
48
+ PYTHON_KEYRING_BACKEND: keyring.backends.null.Keyring
49
+ script:
50
+ # Fail fast, and legibly, when the token never reached the job. Without this the
51
+ # symptom is an opaque "403 Forbidden" from PyPI at the very end of the pipeline,
52
+ # which looks like a bad token rather than a missing one.
53
+ - |
54
+ if [ -z "$HATCH_INDEX_AUTH" ]; then
55
+ echo "HATCH_INDEX_AUTH is empty or unset in this job." >&2
56
+ echo "A 'Protected' CI/CD variable is only exposed to protected refs. Either add a" >&2
57
+ echo "protected-tag rule covering 'v*' under Settings > Repository > Protected tags," >&2
58
+ echo "or clear the Protected flag on the variable." >&2
59
+ exit 1
60
+ fi
61
+ case "$HATCH_INDEX_AUTH" in
62
+ pypi-*) ;;
63
+ *)
64
+ echo "HATCH_INDEX_AUTH does not look like a PyPI API token." >&2
65
+ echo "Expected it to start with 'pypi-'; got ${#HATCH_INDEX_AUTH} characters." >&2
66
+ echo "Check for a truncated paste, surrounding quotes, or trailing whitespace." >&2
67
+ exit 1
68
+ ;;
69
+ esac
70
+ - pip install hatch
71
+ # Fail on a tag that disagrees with the packaged version. PyPI refuses re-uploads of
72
+ # a version, so a mismatch has to be caught before `hatch publish`, not after.
73
+ #
74
+ # The tag is compared against the PEP 440 *normalized* version, because that is what
75
+ # ends up in the artifact filename and on PyPI. `hatch version` echoes the literal
76
+ # string from pyproject.toml, so a non-canonical spelling like "2026.1-rc1" would
77
+ # otherwise satisfy a literal comparison while publishing as "2026.1rc1".
78
+ # `packaging` is available here as a hatchling dependency.
79
+ - |
80
+ RAW_VERSION="$(hatch version)"
81
+ VERSION="$(python -c 'import sys; from packaging.version import Version; print(Version(sys.argv[1]))' "$RAW_VERSION")"
82
+ if [ "v$VERSION" != "$CI_COMMIT_TAG" ]; then
83
+ echo "Tag $CI_COMMIT_TAG does not match the version that would be published ($VERSION)." >&2
84
+ if [ "$RAW_VERSION" != "$VERSION" ]; then
85
+ echo "Note: pyproject.toml says '$RAW_VERSION', which normalizes to '$VERSION'." >&2
86
+ echo "Write the version in canonical PEP 440 form to avoid this." >&2
87
+ fi
88
+ echo "Retag as v$VERSION, or bump the version to match the tag." >&2
89
+ exit 1
90
+ fi
91
+ - hatch build
92
+ - hatch publish
93
+ environment:
94
+ name: pypi
95
+ url: https://pypi.org/project/ovito-mcp/
@@ -0,0 +1,39 @@
1
+ # OVITO Pro Add-on Package License
2
+ Copyright (c) 2026 OVITO GmbH. All rights reserved.
3
+
4
+ This software (the "Software") is a copyrighted work of OVITO GmbH ("Licensor"). The Software is made available in source form on the Python Package Index (PyPI) for distribution convenience only. Making the source code accessible does not constitute a grant of open-source rights, and no rights are granted to any person except as expressly set out below.
5
+
6
+ ## 1. Grant of License
7
+ Subject to the terms of this License, Licensor grants you a limited, non-exclusive, non-transferable, non-sublicensable license to install, execute, and use the Software, solely if and for so long as you hold a valid, active license to OVITO Pro issued by OVITO GmbH ("OVITO Pro License").
8
+ This license to use the Software:
9
+ - is granted only to the same individual, group, or organization holding the corresponding OVITO Pro License, subject to the same installation limits as that OVITO Pro License;
10
+ - terminates automatically upon expiration, termination, or non-renewal of the underlying OVITO Pro License, without notice;
11
+ - does not include any right to use the Software independently of, or separately from, OVITO Pro.
12
+
13
+ ## 2. Restrictions
14
+ Except as expressly permitted under Section 1, you may not:
15
+
16
+ a. use the Software without holding a valid, active OVITO Pro License;
17
+ b. copy, distribute, sublicense, sell, rent, lease, or otherwise make the Software available to any third party;
18
+ c. modify, adapt, translate, or create derivative works based on the Software;
19
+ d. reverse engineer, decompile, or disassemble the Software, except to the extent such restriction is prohibited by applicable mandatory law;
20
+ e. remove or alter any copyright, trademark, or other proprietary notices contained in the Software;
21
+ f. use the Software for any purpose other than in conjunction with your licensed use of OVITO Pro.
22
+
23
+ ## 3. Ownership
24
+ The Software is licensed, not sold. Licensor retains all right, title, and interest in and to the Software, including all intellectual property rights therein. No rights are granted other than those expressly set forth in this License.
25
+
26
+ ## 4. No Warranty
27
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND NONINFRINGEMENT.
28
+
29
+ ## 5. Limitation of Liability
30
+ IN NO EVENT SHALL LICENSOR BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY ARISING FROM, OUT OF, OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE, TO THE MAXIMUM EXTENT PERMITTED BY APPLICABLE LAW.
31
+
32
+ ## 6. Termination
33
+ This License terminates automatically, without notice from Licensor, upon any breach of its terms, or upon expiration or termination of the underlying OVITO Pro License. Upon termination, you must cease all use of the Software and delete all copies in your possession.
34
+
35
+ ## 7. Governing Law
36
+ This License shall be governed by the laws of the Federal Republic of Germany, without regard to its conflict-of-law provisions. The place of jurisdiction shall be Darmstadt, Germany, to the extent permitted by law.
37
+
38
+ ## 8. Contact
39
+ For questions regarding this License, contact: mail@ovito.org
@@ -0,0 +1,245 @@
1
+ Metadata-Version: 2.5
2
+ Name: ovito-mcp
3
+ Version: 2026.1
4
+ Summary: MCP server for interactive work in OVITO Pro
5
+ Project-URL: Homepage, https://www.ovito.org
6
+ Project-URL: Documentation, https://docs.ovito.org/reference/data_inspector/coding_agent.html
7
+ Project-URL: Repository, https://gitlab.com/ovito-org/ovito-mcp-server
8
+ Project-URL: Bug Tracker, https://gitlab.com/ovito-org/ovito-mcp-server/-/issues
9
+ Author-email: OVITO GmbH <support@ovito.org>
10
+ License: Proprietary
11
+ License-File: LICENSE
12
+ Keywords: mcp,molecular-dynamics,ovito,visualization
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Science/Research
15
+ Classifier: License :: Other/Proprietary License
16
+ Classifier: Programming Language :: Python :: 3
17
+ Classifier: Programming Language :: Python :: 3.10
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Programming Language :: Python :: 3.14
22
+ Classifier: Topic :: Scientific/Engineering :: Visualization
23
+ Requires-Python: >=3.10
24
+ Requires-Dist: jupyter-client>=8.0
25
+ Requires-Dist: jupyter-core>=5.0
26
+ Requires-Dist: mcp<3,>=2.0
27
+ Requires-Dist: numpy>=1.26
28
+ Requires-Dist: sentence-transformers>=5.6.0
29
+ Provides-Extra: test
30
+ Requires-Dist: pytest; extra == 'test'
31
+ Description-Content-Type: text/markdown
32
+
33
+ # OVITO Pro MCP Server
34
+
35
+ Connects an AI coding agent to a running **OVITO Pro** session, so you can work with your
36
+ simulation data by describing what you want in plain language. The agent operates inside
37
+ the session you already have open — it can load files, build and adjust pipelines, analyze
38
+ results, and look things up in the OVITO documentation, while you watch each step happen
39
+ live in the GUI and keep working in the same window yourself.
40
+
41
+ Works with Claude Code, GitHub Copilot CLI, OpenAI Codex, OpenCode, Google Antigravity, and
42
+ other coding agents that support MCP.
43
+
44
+ ## Requirements
45
+
46
+ - **OVITO Pro 3.16 or later**, with a valid license
47
+ - **Python 3.10 or later**
48
+ - A supported coding agent, installed and set up separately (see
49
+ [Agent configuration](#agent-configuration))
50
+
51
+ ## Installation
52
+
53
+ Install the server:
54
+
55
+ ```sh
56
+ pip install ovito-mcp
57
+ ```
58
+
59
+ Verify the installation and check the version with:
60
+
61
+ ```sh
62
+ ovito-mcp --version
63
+ ```
64
+
65
+ The documentation-search tools provided by the OVITO MCP server use two small sentence-transformers models that are downloaded
66
+ once from the Hugging Face Hub (~180 MB total) and cached locally. The server downloads them
67
+ automatically in the background the first time it starts, and never touches the network for
68
+ them again. If you would rather do this one-time download up front — recommended on a slow or
69
+ restricted network, so it can't slow down the first search — run:
70
+
71
+ ```sh
72
+ ovito-mcp --download-models
73
+ ```
74
+
75
+ Then register it with your coding agent, using the **absolute path** to the `ovito-mcp` console
76
+ script. For Claude Code:
77
+
78
+ ```powershell
79
+ # Windows (PowerShell)
80
+ claude mcp add ovito-mcp --scope user -- (Get-Command ovito-mcp).Source
81
+ ```
82
+
83
+ ```sh
84
+ # macOS / Linux
85
+ claude mcp add ovito-mcp --scope user -- "$(which ovito-mcp)"
86
+ ```
87
+
88
+ See [Agent configuration](#agent-configuration) below for the other agents.
89
+
90
+ ## Using it
91
+
92
+ In OVITO Pro, open the
93
+ [**AI Agent**](https://docs.ovito.org/reference/data_inspector/coding_agent.html) tab in
94
+ the data inspector panel at the bottom of the main window, pick your coding agent, and
95
+ press **Start**.
96
+
97
+ OVITO launches the agent and connects it to the session in front of you. Anything the agent
98
+ does appears live in the GUI, and you can keep interacting with the same scene while it
99
+ works.
100
+
101
+ No further setup is needed — the agent finds everything it needs from the running OVITO Pro
102
+ session.
103
+
104
+ See the [AI Agent manual page](https://docs.ovito.org/reference/data_inspector/coding_agent.html)
105
+ for the OVITO-side documentation, including security considerations.
106
+
107
+ ## Agent configuration
108
+
109
+ Register `ovito-mcp` by its **absolute path** in the configurations below. Find that path with:
110
+
111
+ ```powershell
112
+ # Windows (PowerShell)
113
+ (Get-Command ovito-mcp).Source
114
+ ```
115
+
116
+ ```sh
117
+ # macOS / Linux
118
+ which ovito-mcp
119
+ ```
120
+
121
+ and substitute it for `/path/to/ovito-mcp` in the snippets below.
122
+
123
+ ### Claude Code / Claude Desktop
124
+
125
+ Add this to your `~/.claude.json`:
126
+
127
+ ```json
128
+ "mcpServers": {
129
+ "ovito-mcp": {
130
+ "type": "stdio",
131
+ "command": "/path/to/ovito-mcp"
132
+ }
133
+ }
134
+ ```
135
+
136
+ ### OpenCode
137
+
138
+ Add this to your `~/.opencode.json`:
139
+
140
+ ```json
141
+ "mcp": {
142
+ "ovito-mcp": {
143
+ "type": "local",
144
+ "command": ["/path/to/ovito-mcp"],
145
+ "enabled": true
146
+ }
147
+ }
148
+ ```
149
+
150
+ ### Google Antigravity
151
+
152
+ Add this to your `~/.antigravity/config.json`:
153
+
154
+ ```json
155
+ "mcpServers": {
156
+ "ovito-mcp": {
157
+ "command": "/path/to/ovito-mcp"
158
+ }
159
+ }
160
+ ```
161
+
162
+ ### OpenAI Codex
163
+
164
+ Add this to your `$HOME/.codex/config.toml`:
165
+
166
+ ```toml
167
+ [mcp_servers.ovito-mcp]
168
+ command = "/path/to/ovito-mcp"
169
+ ```
170
+
171
+ ### GitHub Copilot
172
+
173
+ Add this to your `~/.copilot/mcp-config.json`:
174
+
175
+ ```json
176
+ "mcpServers": {
177
+ "ovito-mcp": {
178
+ "command": "/path/to/ovito-mcp"
179
+ }
180
+ }
181
+ ```
182
+
183
+ ## Advanced configuration
184
+
185
+ Neither setting below is needed for normal use. Both are environment variables, intended
186
+ for development and unusual setups.
187
+
188
+ | Env var | Purpose |
189
+ | -------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
190
+ | `OVITO_EXE` | Path to the OVITO Pro executable (`ovito.exe` on Windows, `ovito` on Linux, `Ovito.app/Contents/MacOS/ovito` on macOS). Only needed to let the agent start OVITO Pro itself, instead of connecting to a session you already have running. |
191
+ | `OVITO_RAG_DB` | Path to an alternative documentation database. Overrides the one that ships with OVITO Pro, for developing against a custom build. |
192
+
193
+ ## Workflow examples
194
+
195
+ ### Prompt:
196
+
197
+ *"Analyze the grain boundary in this sample and highlight repeating structural units in the boundary."*
198
+
199
+ **Video:** https://www.ovito.org/download/data/videos/ai_agent_demo_gb_analysis.mp4
200
+
201
+ - Identified the sample as a 2D-periodic bicrystal grain boundary
202
+ - Ran structure identification via polyhedral template matching
203
+ - Determined the boundary plane, tilt angle, and tilt axis
204
+ - Measured periodicity along the boundary with an FFT
205
+ - Color-coded the repeating structural units and aligned the camera
206
+
207
+ ### Prompt:
208
+
209
+ *"Import the ethene molecule and show the electron density along a representative slice — then add bond orders, a colorbar, and color the bonds by particle type."*
210
+
211
+ **Video:** https://www.ovito.org/download/data/videos/ai_agent_demo_electron_density.mp4
212
+
213
+ - Loaded the molecule's charge-density file and computed the molecular plane
214
+ - Sliced along the plane and aligned the camera to it
215
+ - Switched to a logarithmic color scale after spotting oversaturation
216
+ - Added a color legend in preview mode
217
+ - Computed bond orders and colored bonds to match particle colors
218
+
219
+ ### Prompt:
220
+
221
+ *"Recreate the analysis and view from this reference figure using my data already loaded in OVITO — don't manipulate the data for better agreement."*
222
+
223
+ **Video:** https://www.ovito.org/download/data/videos/ai_agent_demo_nano_indentation.mp4
224
+
225
+ - Identified the sample as SrTiO₃ with a free surface
226
+ - Selected the BCC-like cation sublattice for dislocation analysis
227
+ - Applied the Dislocation Extraction Algorithm (DXA)
228
+ - Matched line and defect-mesh coloring to the reference figure
229
+ - Adjusted the camera to match the reference viewport
230
+
231
+ ### Prompt:
232
+
233
+ *"Read this trajectory and compute the diffusion constant — then plot the result."*
234
+
235
+ **Video:** https://www.ovito.org/download/data/videos/ai_agent_demo_diffusion.mp4
236
+
237
+ - Loaded a 1,000-frame trajectory in a 5 Å cubic periodic box
238
+ - Unwrapped trajectories to avoid MSD saturation from periodic boundaries
239
+ - Computed the mean squared displacement (MSD) over time
240
+ - Fit MSD vs. time using the Einstein–Smoluchowski relation
241
+ - Plotted the result: D = 0.0490 Ų/ps (R² = 0.995)
242
+
243
+ ## Support
244
+
245
+ Questions and bug reports: <support@ovito.org>