siglent sds-mcp
A. 模型上下文协议 (MCP)服务器,让AI助手通过您的本地网络控制Siglent示波器。将Claude连接到您的工作台,并通过自然语言测量、捕获和配置您的示波器。
概述
此MCP服务器通过TCP套接字(端口5025)上的SCPI命令与Siglent SDS示波器通信。无需VISA驱动程序或NI-MAX安装,只需连接到您的示波器即可。
Oscilloscope screenshot captured via MCP
*通过以下方式捕获示波器显示 screenshot MCP工具。*
*终端中的自然语言范围控制和测量工作流程。*
主要特点:
- 12个工具,涵盖通道、时基、触发器、测量、波形捕获和屏幕截图
- 启动时通过环境变量自动连接
- 查询队列自动序列化命令——工具可以安全地并行运行
- 波形数据作为电压/时间阵列返回,准备进行分析
- 捕获截图并将其转换为PNG,以便在Claude中内联显示
- 原始SCPI逃生口,用于执行内置工具未涵盖的任何命令
兼容性
| 状态 | 型号 |
|---|---|
| 已测试 | SDS1104X-E |
| 预计工作 | SDS1000X-E系列(SDS1202X-E、SDS1204X-E等) |
| 可能有效 | 其他支持TCP上SCPI的Siglent SDS模型 |
服务器使用来自的标准SCPI命令 SDS1000X-E编程指南支持端口5025上相同命令集的其他Siglent模型应该只需很少或不需要修改即可工作。
快速开始
您需要一个可在网络上访问的Siglent示波器(TCP端口5025)。从下面三个选项中选择一个,并将配置添加到您的 .mcp.json (在您的项目目录中,或 ~/.claude/.mcp.json 全球访问)。
替换 192.168.1.126 使用您的作用域的IP地址。
选项A:Docker(推荐)
无需安装Node.js。适用于Linux、macOS和Windows(通过WSL2或Docker桌面)。
{
"mcpServers": {
"siglent-sds": {
"type": "stdio",
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "SIGLENT_IP=192.168.1.126",
"ghcr.io/magnusjohansson/siglent-sds-mcp:latest"
]
}
}
}选项B:npx
需要Node.js 20+。自动下载并运行包。
{
"mcpServers": {
"siglent-sds": {
"type": "stdio",
"command": "npx",
"args": ["-y", "siglent-sds-mcp"],
"env": {
"SIGLENT_IP": "192.168.1.126"
}
}
}
}选项C:克隆和构建
git clone https://github.com/magnusjohansson/siglent-sds-mcp.git
cd siglent-sds-mcp
npm install
npm run build{
"mcpServers": {
"siglent-sds": {
"type": "stdio",
"command": "node",
"args": ["/path/to/siglent-sds-mcp/build/index.js"],
"env": {
"SIGLENT_IP": "192.168.1.126"
}
}
}
}替换 /path/to/siglent-sds-mcp 带有克隆的实际路径。
环境变量
| 变量 | 必填 | 默认 | 描述 |
|---|---|---|---|
SIGLENT_IP | 无 | -- | 启动时自动连接的示波器IP地址 |
SIGLENT_PORT | 没有 | 5025 | TCP端口(仅在设置不同时更改) |
自动连接行为
如果 SIGLENT_IP 设置后,服务器会在启动后立即尝试连接到作用域。这在后台运行 不 阻止MCP服务器——Claude可以立即开始使用其他工具。如果作用域脱机或无法访问,服务器会记录一条警告,您可以稍后使用手动连接 connect 工具。
如果 SIGLENT_IP 如果未设置,服务器将在没有作用域连接的情况下启动。使用 connect 准备就绪时连接的工具。
与其他AI客户端一起使用
上面的快速入门示例使用Claude Code的 .mcp.json 格式,其中包括 "type": "stdio" 现场。其他AI客户端使用相同的JSON结构,但 没有 这 "type" 字段和不同的配置文件位置。
克劳德桌面
编辑 claude_desktop_config.json:
- 窗户:
%APPDATA%\Claude\claude_desktop_config.json - macOS:
~/Library/Application Support/Claude/claude_desktop_config.json
码头工人
{
"mcpServers": {
"siglent-sds": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "SIGLENT_IP=192.168.1.126",
"ghcr.io/magnusjohansson/siglent-sds-mcp:latest"
]
}
}
}新巴拿马型船舶
{
"mcpServers": {
"siglent-sds": {
"command": "npx",
"args": ["-y", "siglent-sds-mcp"],
"env": {
"SIGLENT_IP": "192.168.1.126"
}
}
}
}注: 更改配置文件后,您必须完全重新启动Claude Desktop。
光标
编辑以下内容之一:
- 用户级别:
~/.cursor/mcp.json(适用于所有项目) - 项目级别:
.cursor/mcp.json(通过版本控制与您的团队共享)
您还可以通过UI添加服务器: 设置>光标设置>MCP>添加新的全局MCP服务器.
码头工人
{
"mcpServers": {
"siglent-sds": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "SIGLENT_IP=192.168.1.126",
"ghcr.io/magnusjohansson/siglent-sds-mcp:latest"
]
}
}
}新巴拿马型船舶
{
"mcpServers": {
"siglent-sds": {
"command": "npx",
"args": ["-y", "siglent-sds-mcp"],
"env": {
"SIGLENT_IP": "192.168.1.126"
}
}
}
}帆板运动
编辑 mcp_config.json:
- 窗户:
%USERPROFILE%\.codeium\windsurf\mcp_config.json - macOS/Linux:
~/.codeium/windsurf/mcp_config.json
您还可以通过UI配置服务器: 级联面板>MCP图标>管理MCP服务器>查看原始配置.
码头工人
{
"mcpServers": {
"siglent-sds": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "SIGLENT_IP=192.168.1.126",
"ghcr.io/magnusjohansson/siglent-sds-mcp:latest"
]
}
}
}新巴拿马型船舶
{
"mcpServers": {
"siglent-sds": {
"command": "npx",
"args": ["-y", "siglent-sds-mcp"],
"env": {
"SIGLENT_IP": "192.168.1.126"
}
}
}
}谷歌反重力
配置通过IDE的UI进行管理:
- 打开 代理窗格 在工作区的右侧
- 点击
...顶部的按钮 - 选择 MCP服务器
- 点击 管理MCP服务器
- 点击 查看原始配置
- 添加下面的配置并保存
码头工人
{
"mcpServers": {
"siglent-sds": {
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "SIGLENT_IP=192.168.1.126",
"ghcr.io/magnusjohansson/siglent-sds-mcp:latest"
]
}
}
}新巴拿马型船舶
{
"mcpServers": {
"siglent-sds": {
"command": "npx",
"args": ["-y", "siglent-sds-mcp"],
"env": {
"SIGLENT_IP": "192.168.1.126"
}
}
}
}替换 192.168.1.126 在上述所有示例中,您的作用域的IP地址。
ChatGPT桌面
ChatGPT Desktop仅支持远程HTTPS MCP服务器(称为“连接器”),不支持本地stdio服务器。由于此MCP服务器使用stdio传输,因此它与ChatGPT Desktop不直接兼容。
工具
6个类别的12个工具。看 docs/tools-reference.md 有关完整参数的详细信息。
| 类别 | 工具 | 描述 |
|---|---|---|
| 连接 | connect | 通过TCP连接到示波器 |
disconnect | 关闭连接 | |
identify | 查询设备ID(制造商、型号、序列号、固件) | |
| 频道 | get_channel | 读取通道配置(vdiv、偏移、耦合等) |
configure_channel | 设置vdiv、偏移、耦合、带宽限制、跟踪、探头 | |
| 收购 | get_acquisition_status | 读取时基、采样率、触发设置 |
configure_acquisition | 设置时基、触发器、运行/停止/单次 | |
| 测量 | measure | 读取测量值(频率、Vpp、RMS等) |
measure_statistics | 启用/读取/重置测量统计信息 | |
| 波形 | get_waveform | 下载电压/时间数据阵列 |
screenshot | 将范围屏幕捕获为PNG格式 | |
| SCPI | scpi_query / scpi_command | 发送任意SCPI命令 |
对话示例
读取通道配置
你: 频道1的当前设置是什么? 克劳德打电话来get_channel随着channel: "C1"并返回电压/div、偏移、耦合和其他设置。
测量信号
你: 测量通道2上的频率和峰间电压。 克劳德打电话来measure两次-一次parameter: "FREQ"和一次parameter: "PKPK"在信道C2上——并报告这两个值。
捕获并分析波形
你: 从通道1下载波形,告诉我你看到了什么。 克劳德打电话来 get_waveform 在C1上,接收电压/时间数据,并分析信号形状、频率、幅度和任何异常。截图
你: 让我看看现在的示波器屏幕是什么样子的。 克劳德打电话来 screenshot,接收base64 BMP图像,并将其内联显示。配置特定测量的范围
你: 为3.3V逻辑信号设置通道1——直流耦合,1V/div,在1.6V的上升沿触发。 克劳德打电话来configure_channel(设置vdiv、耦合)和configure_acquisition(依次设置触发源、水平、斜率)。
建筑
Claude Code siglent-sds-mcp Oscilloscope:5025- 运输: 标准输入上的MCP(JSON-RPC 2.0)
- 协议: 原始TCP套接字上的SCPI命令,换行终止
- 查询队列: 所有SCPI查询都通过内部队列进行序列化。示波器一次处理一个命令,因此即使工具发出并行请求(通过
Promise.all),队列确保它们按顺序发送。 - 二进制块解析: 波形和屏幕截图数据使用IEEE 488.2定长块格式(
#9XXXXXXXXX+数据字节+\n\n).连接层自动检测并解析这些。 - 电压重建: 原始ADC代码转换为电压:
code * (vdiv / 25) - offset,对带符号的值进行two补码处理。
发展
npm run build # Compile TypeScript
npm run watch # Watch mode — recompile on changes
npm run dev # Build and run
npm run inspector # Launch with MCP Inspector for debuggingDocker(本地构建)
在本地构建映像:
docker build -t siglent-sds-mcp .然后在您的 .mcp.json:
{
"mcpServers": {
"siglent-sds": {
"type": "stdio",
"command": "docker",
"args": [
"run", "--rm", "-i",
"-e", "SIGLENT_IP=192.168.1.126",
"siglent-sds-mcp"
]
}
}
}项目结构
src/
index.ts # Entry point, MCP server setup
connection.ts # TCP socket manager with query queue
tools/
connection.ts # connect, disconnect, identify
channel.ts # get_channel, configure_channel
acquisition.ts # configure_acquisition, get_acquisition_status
measure.ts # measure, measure_statistics
waveform.ts # get_waveform, screenshot
scpi.ts # scpi_query, scpi_command故障排除
“未连接到示波器”
范围尚未连接。任一组 SIGLENT_IP 在你的 .mcp.json env用于自动连接,或使用 connect 手动工具。
连接超时
- 验证作用域的IP地址(检查作用域的实用程序>接口菜单)
- 确保端口5025可访问(尝试
telnet 5025从您的机器) - 检查是否没有防火墙阻止连接
- 该作用域一次只接受一个TCP连接——关闭任何其他SCPI客户端
查询超时
一些SCPI查询可能需要几秒钟,特别是在较慢的作用域模型上。默认超时为5秒。对于 scpi_query,您可以使用以下命令增加超时时间 timeout_ms 参数。
Docker:无法访问示波器
默认情况下,Docker容器可以通过网桥网络(NAT)访问LAN设备。如果容器无法连接到您的作用域:
- 验证是否可以从主机访问范围:
telnet 192.168.1.126 5025 - 在Linux上,尝试添加
--network hostDocker参数:
"args": ["run", "--rm", "-i", "--network", "host", "-e", "SIGLENT_IP=192.168.1.126", "ghcr.io/magnusjohansson/siglent-sds-mcp:latest"]注: --network host 不适用于macOS或Windows Docker桌面。
Docker:架构错误/exec格式错误
已发布的图像支持 linux/amd64 和 linux/arm64Docker应该自动拉取正确的一个。如果你看到exec格式错误,请显式拉取:
docker pull --platform linux/amd64 ghcr.io/magnusjohansson/siglent-sds-mcp:latest“CHDR”出现在响应中
这不应该发生——服务器设置 CHDR OFF 在连接。如果在响应中看到命令头,请尝试断开连接并重新连接。
许可证
麻省理工学院——见 许可证 了解详情。
