内容
# opendtect-mcp
**模型上下文协议(MCP)服务器,用于驱动 [OpendTect](https://dgbes.com/software/opendtect/) 无头运行** — SEG-Y 导入、三维水平面自动跟踪、ASCII 导出和水平面一致性评分。
它封装了两个 OpendTect 接口,均公开且有文档:
- **`odpy`**(OpendTect 的 Python 框架,Apache-2.0)用于数据库/勘测的内省。
- **命令驱动器**(`od_main --cmd script.odcmd`)用于 GUI 操作(导入 / 跟踪 / 导出)。
一个纯 Python 评分层,将两个跟踪的水平面转换为量化指标。
> **与 dGB Earth Sciences 无关,不受其支持或赞助**。“OpendTect” 是 dGB Earth Sciences 的商标;此处仅用于描述互操作性。本项目不包含任何 OpendTect 代码或数据 — 它通过文档化的接口调用单独安装的 OpendTect。
---
## 它公开的内容(MCP 工具)
| 工具 | 需要 OD? | 功能 |
|---|---|---|
| `survey_info` | 内省 | OD 安装 + 活动勘测 + 准备情况检查(**从这里开始**) |
| `list_objects` | odpy | 列出翻译器组的 DB 对象(`地震数据`、`水平面`、…) |
| `import_segy` | 命令驱动器 | 将 3D 叠后 SEG-Y 导入勘测 |
| `autotrack_horizon` | 命令驱动器 | *(实验性,M2)* 种子 + 自动跟踪 3D 水平面 |
| `export_horizon_ascii` | 命令驱动器 | 将跟踪的水平面导出到 ASCII `.xyt` |
| `read_horizon` | 否 | 解析导出的水平面(拾取计数 + 范围) |
| `compare_horizons` | 否 | **评分基准 vs 候选跟踪**:覆盖率、空洞、RMS 拾取偏差、裁决 |
GUI 操作工具接受 `dry_run=True` 以返回生成的 `.odcmd` **而不执行**,因此您可以安全地为您的 OD 版本校准菜单标签。
---
## 安装
```bash
cd opendtect-mcp
pip install -e . # 或:pip install -e ".[dev]" 用于测试
```
Python ≥ 3.10。`odpy` 随 OpendTect 捆绑;如果它不在您的 Python 路径上,请运行 `pip install odpy` 或使用 OpendTect 捆绑的 Python 运行此服务器。
## 配置
所有配置均通过环境变量(否则自动检测常见安装位置)— 参见 `.env.example`:
```bash
export OPENDTECT_BIN=/path/to/od_main
export OPENDTECT_DATA_ROOT=/path/to/SurveyDataRoot
export OPENDTECT_SURVEY=YourSurvey
```
验证:
```bash
python -c "from opendtect_mcp.config import ODConfig; import json; print(json.dumps(ODConfig.from_env().check(), indent=2))"
```
## 连接到 MCP 客户端(例如 Claude Code)
将以下内容添加到您的 MCP 配置(`.mcp.json` 在项目中,或用户级配置):
```json
{
"mcpServers": {
"opendtect": {
"command": "opendtect-mcp",
"env": {
"OPENDTECT_BIN": "/path/to/od_main",
"OPENDTECT_DATA_ROOT": "/path/to/SurveyDataRoot",
"OPENDTECT_SURVEY": "YourSurvey"
}
}
}
}
```
然后要求助手调用 `survey_info`。
---
## 状态和校准
- ✅ **现在有效,无 OD:** `read_horizon`、`compare_horizons`、所有 `dry_run` 脚本生成、单元测试(`pytest`)。
- ✅ **M0/M1(内省 + 导入/导出):** 功能齐全;`.odcmd` **菜单标签是版本特定的**,可能需要一次性校准(参见 `odcmd_templates.py`,带有 `# CALIBRATE` 标记的行)。使用 `dry_run=True`,针对您的 OD 运行,读取 `odcmdlog.txt`,调整标签。
- 🚧 **M2(`autotrack_horizon`):** 已搭建;种子放置是最难脚本化的 GUI 操作,需要校准后才能使用 `dry_run=False`。
命令驱动器通过标签导航 GUI,因此给定 OD **版本** 只需要校准一次 — 保留 `odcmd_templates.py` 中的验证字符串。
参见 **`examples/horizon_tracking_comparison.md`** 以获取基准 vs 候选跟踪工作流的端到端示例。
## 布局
```
opendtect_mcp/
config.py 环境驱动的 OD/勘测解析 + 准备情况检查
command_driver.py 编写 + 运行 .odcmd,解析 odcmdlog.txt
odcmd_templates.py 参数化的 .odcmd 生成器(← 校准此处)
odpy_bridge.py odpy 数据库管理器/公共包装器(优雅降级)
horizon_io.py ASCII 水平面解析 + 一致性评分(无 OD)
server.py FastMCP 服务器 + 工具定义
tests/ 无 OD 单元测试
examples/ 工作流指南
```