DSH Origin Plugin: drive OriginLab Origin scientific plotting from AI chat via MCP. 62 tools: modal-dialog watchdog, LabTalk safety gate, FigureSpec declarative YAML, fit params, matrix tools, matplotlib bridge, PPT assembly, editable OPJU delivery. Windows + Origin 2021+.
Drift inferred · capture-to-capture
No drift recorded — single capability capture; advisories appear once its surface changes.
transport stdio counts 74 tools · 0 res
· 0 prompts
permission surface via code analysis
tools
-
origin_add_line
-
origin_add_text
-
origin_annotate
-
origin_anova
-
origin_apply_style
-
origin_capabilities
-
origin_capability_diff
-
origin_catalog
-
origin_column_formula
-
origin_cookbook
-
origin_correlate
-
origin_diagnose
-
origin_edit_axis
-
origin_edit_legend
-
origin_edit_page
-
origin_edit_plot
-
origin_error_codes
-
origin_execute_plan
-
origin_export
-
origin_export_delivery
-
origin_export_pptx
-
origin_fft
-
origin_figure
-
origin_filter_data
-
origin_find_peaks
-
origin_fit
-
origin_help
-
origin_histogram
-
origin_import_matplotlib
-
origin_inspect_graph
-
origin_integrate
-
origin_labtalk
-
origin_layout_info
-
origin_list_graphs
-
origin_list_pages
-
origin_list_sheets
-
origin_load_file
-
origin_manage_data
-
origin_manage_pages
-
origin_manage_plots
-
origin_mask_points
-
origin_matrix_plot
-
origin_matrix_read
-
origin_matrix_write
-
origin_pages_gc
-
origin_pca
-
origin_peak_find
-
origin_peak_fit
-
origin_plot
-
origin_plot3d
-
origin_plot_contour
-
origin_plot_file
-
origin_plot_plan
-
origin_plot_template
-
origin_read_worksheet
-
origin_reconnect
-
origin_release
-
origin_save_project
-
origin_simulate
-
origin_spec_export
-
origin_spec_import
-
origin_stats
-
origin_status
-
origin_survival
-
origin_template_apply
-
origin_template_list
-
origin_template_save
-
origin_template_search
-
origin_transform
-
origin_ttest
-
origin_verify_graph
-
origin_view_graph
-
origin_warmup
-
origin_write_data
prompt-surface
shipped agent-instruction files + hidden-content / dangerous-code findings —
quoted from the analyzed source
analyzed commit 98865f5 · analyzer v33 · 1h ago
skills & prompt files 5
- agent-rules Fantasality-dsh-origin-plugin-98865f5/AGENTS.md
- skill Fantasality-dsh-origin-plugin-98865f5/skills/install-dsh-origin/SKILL.md
- skill Fantasality-dsh-origin-plugin-98865f5/skills/origin-plotting/SKILL.md
- skill Fantasality-dsh-origin-plugin-98865f5/skills/origin-scripting/SKILL.md
- skill Fantasality-dsh-origin-plugin-98865f5/skills/origin-stats/SKILL.md
danger signals2
- dynamic code execution eval()/exec() Fantasality-dsh-origin-plugin-98865f5/origin_engine.py :1694
py_out = eval(py_expr, {"__builtins__": {}}, env) - dynamic code execution __import__() Fantasality-dsh-origin-plugin-98865f5/origin_mcp_stdio.py :54
__import__(mod)
evidence-backed
findings quoted directly from the published source artifact — not inferred
code files: 64
filesystem 20
- fs Fantasality-dsh-origin-plugin-98865f5/install.py :27
import shutil - fs Fantasality-dsh-origin-plugin-98865f5/origin_app/bridge_manager.py :104
with open(PIDFILE, "r", encoding="utf-8") as fh: - fs Fantasality-dsh-origin-plugin-98865f5/origin_bridge.py :49
with open(pickle_path, "rb") as f: - fs Fantasality-dsh-origin-plugin-98865f5/origin_capabilities.py :154
with open(path, "r", encoding="utf-8", errors="replace") as fh: - fs Fantasality-dsh-origin-plugin-98865f5/origin_engine.py :1044
with open(path, "rb") as fh: - fs Fantasality-dsh-origin-plugin-98865f5/origin_fileio.py :269
with open(path, "rb") as f: - fs Fantasality-dsh-origin-plugin-98865f5/origin_gallery.py :60
with open(zpath, "wb") as f: - fs Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :478
生成 pickle:在 matplotlib 侧 `pickle.dump(fig, open('fig.pickle','wb'))` - fs Fantasality-dsh-origin-plugin-98865f5/origin_spec.py :95
with open(path, "w", encoding="utf-8") as f: - fs Fantasality-dsh-origin-plugin-98865f5/origin_template.py :95
with open(path, "r", encoding="utf-8") as f: - fs (weak) Fantasality-dsh-origin-plugin-98865f5/scripts/build_origin_app.py :28
import shutil - fs Fantasality-dsh-origin-plugin-98865f5/smoke/chemistry_cases.py :743
with open(out, "w", encoding="utf-8") as f:
show 8 more
- fs Fantasality-dsh-origin-plugin-98865f5/smoke/chemistry_cases_v2.py :535
with open(out, "w", encoding="utf-8") as f: - fs Fantasality-dsh-origin-plugin-98865f5/smoke/e2e_verify.py :63
with open(path, "w", newline="", encoding="utf-8") as f: - fs (weak) Fantasality-dsh-origin-plugin-98865f5/smoke/fine_edit_test.py :174
b1b = open(before, "rb").read() - fs Fantasality-dsh-origin-plugin-98865f5/smoke/labtalk_probe2.py :257
with open(out, "w", encoding="utf-8") as fh: - fs Fantasality-dsh-origin-plugin-98865f5/smoke/labtalk_probe3.py :195
with open(out, "w", encoding="utf-8") as fh: - fs Fantasality-dsh-origin-plugin-98865f5/smoke/labtalk_probe4.py :198
with open(out, "w", encoding="utf-8") as fh: - fs Fantasality-dsh-origin-plugin-98865f5/smoke/visual_diff.py :20
import shutil - fs (weak) Fantasality-dsh-origin-plugin-98865f5/tests/test_offline.py :111
src = open(os.path.join(os.path.dirname(os.path.dirname(
shell / exec 4
- shell Fantasality-dsh-origin-plugin-98865f5/origin_app/bridge_manager.py :40
import subprocess - shell Fantasality-dsh-origin-plugin-98865f5/origin_engine.py :203
import subprocess as _sp - shell Fantasality-dsh-origin-plugin-98865f5/smoke/four_ways_physchem.py :121
import subprocess - shell (weak) Fantasality-dsh-origin-plugin-98865f5/tests/test_live.py :17
import subprocess
network 3
- net Fantasality-dsh-origin-plugin-98865f5/origin_app/bridge_manager.py :226
import socket - net Fantasality-dsh-origin-plugin-98865f5/origin_gallery.py :10
import urllib.parse - net Fantasality-dsh-origin-plugin-98865f5/smoke/http_template_verify.py :21
import urllib.error
secrets 2
- secrets Fantasality-dsh-origin-plugin-98865f5/origin_mcp_http.py :285
token = os.environ.get("DSH_ORIGIN_HTTP_TOKEN") - secrets Fantasality-dsh-origin-plugin-98865f5/smoke/http_template_verify.py :35
TOKEN = os.environ.get("DSH_ORIGIN_HTTP_TOKEN") or "smoke-test-token-8731"
tool registrations 74
- origin_status Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :173
- origin_help Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :189
- origin_catalog Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :202
- origin_error_codes Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :219
- origin_diagnose Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :225
- origin_cookbook Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :235
- origin_list_graphs Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :246
- origin_list_sheets Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :252
- origin_write_data Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :261
- origin_read_worksheet Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :275
- origin_column_formula Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :289
- origin_peak_fit Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :305
show 28 more
- origin_mask_points Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :324
- origin_add_line Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :338
- origin_labtalk Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :355
- origin_release Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :374
- origin_reconnect Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :384
- origin_manage_plots Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :390
- origin_manage_data Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :408
- origin_matrix_write Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :422
- origin_matrix_read Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :432
- origin_matrix_plot Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :438
- origin_spec_export Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :451
- origin_spec_import Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :461
- origin_import_matplotlib Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :472
- origin_export_pptx Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :485
- origin_template_search Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :504
- origin_figure Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :521
- origin_warmup Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :557
- origin_pages_gc Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :563
- origin_template_save Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :572
- origin_template_list Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :584
- origin_template_apply Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :590
- origin_capabilities Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :596
- origin_capability_diff Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :605
- origin_layout_info Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :611
- origin_annotate Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :622
- origin_simulate Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :634
- origin_find_peaks Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :652
- origin_load_file Fantasality-dsh-origin-plugin-98865f5/origin_mcp_server.py :663
34 more not shown — this panel samples each group; the count above is the real total.
declared dependencies 8
- originpro@*
- pywin32@*
- numpy@*
- openpyxl@*
- pyyaml@*
- Pillow@*
- matplotlib@*
- python-pptx@*