Model Context Protocol (MCP) server that drives OpendTect headlessly via odpy + the Command Driver — SEG-Y I/O, horizon auto-tracking, and ASCII export, for any survey/project.
Server has 7 tools with complete schemas and descriptions. Naming follows verb_noun convention (survey_info, list_objects, import_segy, export_horizon_ascii, autotrack_horizon, read_horizon, compare_horizons). Descriptions are present and substantive (avg ~150 chars), explaining WHAT and WHEN. However, parameter descriptions lack detail on constraints, ranges, and error recovery. Output schemas are not formally documented. Error handling is minimal, no guidance on retryability or recovery paths. Tools are well-composed (single responsibility) and include dry_run patterns for safety. Missing: per-parameter type validation hints, output schema documentation, actionable error messages.
[EXPERIMENTAL — M2] Seed + auto-track a 3D horizon on `volume`. seeds = [[inline, crossline, z], ...]. Defaults to dry_run=True because the seed/track GUI scripting needs calibration per OpendTect version — review the returned .odcmd, validate against your install, then call with dry_run=False.
Score auto-tracking quality between two versions of a volume (baseline vs candidate), tracked with the same seeds/settings: coverage, holes, extra/lost picks, RMS pick deviation, and a verdict. Needs no OpendTect.
Export a tracked 3D horizon to an ASCII (.xyt) file for scoring. dry_run=True returns the .odcmd without running it.
Import a 3D post-stack SEG-Y volume into the active survey. Set dry_run=True to return the generated .odcmd without executing (use this to calibrate menu labels for your OpendTect version).
List OpendTect database objects of a translator group via odpy (e.g. 'Seismic Data', 'Horizon'). Requires OpendTect's python (odpy).
Output schemas not documented. Tools return dicts but LLMs cannot infer field names, types, or structure. E.g., survey_info, list_objects, import_segy return unspecified dicts.
Parameter descriptions lack constraint details. E.g., 'translator_group' has no enum or examples; 'correlation_threshold' lacks range (0..1 stated in description but not in schema); 'search_window_ms' lacks min/max bounds.
Error handling absent. Tools return CommandResult or dicts with no guidance on retryability, user-fixable vs fatal errors, or recovery steps. E.g., import_segy can fail silently if OpendTect is misconfigured.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | D | 59 | 2026-07-28+ | v2 |
Parse an exported OpendTect ASCII horizon; returns pick count + extent.
Report the OpendTect install + active survey and whether the server is ready to drive the Command Driver. Start here to verify the connection.
autotrack_horizon defaults dry_run=True with a note, but the note is in the return dict, not the parameter description. LLMs may not see it before calling. Parameter description should explicitly state 'Defaults to True; review returned .odcmd before setting False.'
No pagination or result limits documented. list_objects may return unbounded results; no mention of max items or pagination support.