oscilloscope-mcp

oscilloscope-mcp

Enables remote control of Siglent oscilloscopes via SCPI over TCP/IP, allowing natural language commands for configuration, measurements, and waveform data retrieval.

Category
访问服务器

README

Oscilloscope MCP Server

基于 SDS2000X Plus Programming Guide CN11G 编写的 MCP (Model Context Protocol) Server,通过 TCP/IP (SCPI 协议,端口 5024) 远程控制 Siglent SDS2000X Plus 系列示波器。

硬件要求

  • Siglent SDS2000X Plus 系列示波器(也兼容 SDS1000X, SDS2000X, SDS5000X 等系列)
  • 示波器通过 LAN 连接,已知 IP 地址

快速开始

# 1. 安装依赖
pip install -r requirements.txt

# 2. 配置 MCP(在 Claude Code 的 .mcp.json 中添加)
# 路径指向本目录下的 server.py

# 3. 在 Claude Code 中使用

配置 Claude Code

方式一:项目级配置(推荐)

将本目录下的 .mcp.json 复制到你的项目根目录,或合并到已有的 .mcp.json 中:

{
  "mcpServers": {
    "oscilloscope": {
      "command": "python",
      "args": ["path/to/oscilloscope-mcp/server.py"]
    }
  }
}

方式二:全局配置

~/.claude/.mcp.json(Linux/macOS)或 %USERPROFILE%\.claude\.mcp.json(Windows)中添加上述配置。

通信协议

项目 说明
物理层 Ethernet (TCP/IP)
端口 5024
协议 Raw TCP Socket (Telnet 兼容)
命令 IEEE 488.2 + SCPI
编码 ASCII,每行以 \n 结尾

可用工具(34 个)

连接管理

工具 说明
connect 通过 IP 连接示波器(端口固定 5024,必须先调用)
disconnect 断开连接
send_command 发送任意 SCPI 命令(万能逃生舱)
get_id 获取设备 ID (*IDN?)
reset 恢复出厂设置 (*RST)

运行控制

工具 说明
run 启动采集(Run 键)
stop 停止采集(Stop 键)

通道配置

工具 说明
configure_channel 配置通道(显示/刻度/耦合/探头/带宽/反转/标签/单位/偏移校准)
get_channel 读取通道当前设置

数字通道(MSO 型号)

工具 说明
configure_digital 配置数字通道(显示/位置/高度/标签/阈值)

时基

工具 说明
configure_timebase 设置水平时基(扫描速度/延迟/模式:MAIN/WINDOW/ROLL/XY)
get_timebase 读取时基设置

触发

工具 说明
configure_trigger 配置触发(模式/类型/源/电平/斜率/耦合/释抑)— 修复:正确路由到当前触发类型子系统
get_trigger 读取触发设置
force_trigger 强制触发

采集

工具 说明
configure_acquisition 配置采集(模式/存储深度/插值/平均次数)
get_acquisition 读取采集设置(含当前采样率)

测量

工具 说明
measure 执行自动测量(VPP/FREQ/RMS/RISE/FALL/...共 50+ 种)
get_measure_stats 获取测量统计(均值/最小值/最大值/标准差/计数)
clear_measure_stats 清除测量统计

波形数据

工具 说明
get_waveform_preamble 获取波形元数据(格式/点数/X增量/Y增量/原点)
get_waveform_data 获取波形电压数据(支持降采样)

截图

工具 说明
get_screenshot 截取屏幕保存为 PNG(自动保存到本地文件)

显示

工具 说明
configure_display 配置显示(网格/余辉/亮度/网格样式/坐标轴)

光标

工具 说明
configure_cursors 配置光标测量(模式/源/类型)
get_cursor_values 读取光标测量值

数学

工具 说明
configure_math 配置数学通道(加减乘除/FFT/微分/积分/平方根/绝对值)

其他

工具 说明
autoset 自动设置
save_setup / recall_setup 保存/调用设置(内部存储或 USB)— 修复:文件名注入防御
get_frequency_counter 读取硬件频率计
get_status 获取运行状态
get_next_error 读取并清除错误队列
quick_snapshot 快速概览:所有活动通道的 VPP/FREQ + 时基 + 触发 + 采样率

安全加固

  • 端口锁定:连接工具不再暴露 port 参数,固定使用 SCPI 标准端口 5024
  • 标签注入防御:通道标签自动转义双引号、限制 20 字符
  • 文件名注入防御:保存/调用文件名限制字母数字和 _-,拒绝路径穿越字符
  • Source 枚举约束:所有 source 参数限定为合法通道标识符(C1-C4, MATH 等)
  • 主机名验证:拒绝 URL 格式的 host 输入
  • 余辉枚举:persistence 参数限定为有效值(OFF/0.5/1/5/10/INF)

使用示例

连接并获取设备信息:

> connect host=192.168.1.100
Connected to 192.168.1.100:5024

> get_id
Siglent Technologies,SDS2504X Plus,SDS2XJAC1R0021,1.5.2.10

测量通道 1 的峰峰值和频率:

> measure measurement=VPP source1=C1
VPP(C1) = 3.32 V

> measure measurement=FREQ source1=C1
FREQ(C1) = 1000.5 Hz

配置触发并获取波形数据:

> configure_trigger mode=NORMal source=C1 level=1.5
Trigger configured

> get_waveform_data source=C1
Waveform Data for C1:
  Total points in memory: 100000
  Points returned: 100000
  Min: -1.65 V
  Max: 1.68 V
  Mean: 0.01 V

配置通道并启用 FFT:

> configure_channel channel=1 display=true scale=0.5 coupling=D1M
Channel 1 configured:
  - Display: ON
  - Scale: 0.5 V/div
  - Coupling: D1M

> configure_math display=true function=FFT source1=C1 fft_window=HANN fft_scale=DBVRMS
Math configured

项目结构

oscilloscope-mcp/
├── server.py            # MCP Server 主程序
├── requirements.txt     # Python 依赖
├── .mcp.json            # MCP 配置模板
├── README.md            # 本文件
├── .gitignore
└── oscilloscope_mcp.log # 运行日志(自动生成)

兼容性

默认适配 Siglent SDS2000X Plus,但大多数 SCPI 命令与以下系列兼容:

  • SDS1000X / SDS1000X-E
  • SDS2000X / SDS2000X Plus / SDS2000X HD
  • SDS5000X
  • SDS6000A

日志

运行日志写入同目录下的 oscilloscope_mcp.log

故障排除

问题 解决方案
连接超时 检查示波器 IP 是否正确、网络是否互通
命令无响应 确认示波器端口 5024 未被防火墙阻止
通道不可用 2 通道型号只有 CH1-CH2
MCP 启动失败 pip install -r requirements.txt 确保依赖已安装

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选