rigol-dg900-mcp
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@rigol-dg900-mcpOutput a 3.3V square wave at 1 kHz on channel 1"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
rigol-dg900-mcp
An MCP server that lets an AI assistant drive a RIGOL DG800 Pro / DG900 Pro function / arbitrary waveform generator over LAN (raw SCPI on TCP 5555).
This is a signal source, not an oscilloscope
The DG800/DG900 family generates waveforms. It cannot measure a signal, capture it, or display it. If you are looking for a way to look at a waveform, this is the wrong instrument and the wrong repository — you want a scope (Rigol's DS/MSO lines).
The one measuring feature it does have is a frequency counter on a separate input (
dg_counter), and that only reports frequency / period / duty of a periodic signal. It will not tell you anything useful about, say, serial data.The
DGprefix is easy to mistake for a scope model. It is not one.
*IDN? -> RIGOL TECHNOLOGIES,DG902 Pro,DG9P281200133,...Why LAN and not USB
The DG900 Pro exposes both USB (USB-TMC) and LAN. On Windows the USB path needs a
USB-TMC driver bound to the device — without one it sits at CM_PROB_FAILED_INSTALL
and neither libusb nor PyVISA can see it. Binding WinUSB means Zadig, admin rights and
a system change.
LAN needs none of that: it is a plain TCP socket carrying SCPI lines. No driver, no admin, no vendor runtime. That is the only transport this server implements.
To find the address: on the instrument, Utility → I/O → LAN.
Related MCP server: SkippyMCP
Tools
Tool | What it does |
| Register the instrument's IP. Verifies |
| Model, per-channel waveform, output state, output load. Read only. |
| Output impedance. |
| Set the waveform. Does not enable the output. |
| Safe helper: 0 V → |
| Actually emits a signal. |
| Turns the output off. |
| Built-in frequency counter. |
| Arbitrary SCPI query (must end in |
Safety design
dg_applynever turns the output on. You set values first, then energise — in that order.Anything above 10 Vpp is rejected before it reaches the instrument.
Above 5 Vpp you must pass
expect_vppmatching the value, so a leftover setting from earlier work cannot be emitted by accident.dg_output_onre-reads the instrument's current setting, not the conversation's, and refuses if it exceeds 5 Vpp without confirmation.dg_queryrefuses anything that is not a query.The socket is opened and closed per call, so a long call cannot block "turn the output off".
This does not replace a physical means of disconnecting the instrument.
The gotcha that will destroy something
Output impedance defaults to 50 Ω, and the instrument compensates for it.
The generator sets its internal source so that the configured load sees the amplitude you asked for. Ask for 3.3 Vpp with the load set to 50 Ω, then connect a high-impedance input — a microcontroller pin, a scope probe, a logic input — and the pin actually sees 6.6 Vpp.
That is how you put 6.6 V into a 3.3 V pin.
Always set the load to high impedance before driving logic:
dg_set_load(1, "INF")dg_status and dg_apply both warn when the load is still 50 Ω, and print what the real
amplitude would be. dg_logic_pulse forces high-Z before it sets anything, which is why it
exists.
Requirements
Python 3.10+
mcp(the official Python SDK;FastMCPships inside it)
No PyVISA, no libusb, no vendor runtime. Only the standard library plus mcp.
pip install mcpInstall
claude mcp add --scope user dg900 -- python /path/to/server.pyThen restart your client so the tools appear.
Set the address once:
dg_set_host("192.168.1.50")It is stored in state.json next to the server. DG_HOST / DG_PORT environment
variables take precedence if set.
SCPI used
From the official RIGOL programming guide (DG800 Pro/DG900 Pro Programming Guide):
Command | Meaning |
| Identify |
| Set waveform |
| Query waveform |
| Output on/off |
| Output impedance |
| Square duty cycle |
| Frequency counter on/off |
| Counter readings |
Status
Written against the official programming guide. The LAN transport and the tool logic have not yet been exercised against the instrument — the unit this was written for was connected by USB only. Verified behaviour will be recorded here once it has been run on hardware.
日本語
RIGOL DG800 Pro / DG900 Pro(任意波形発生器)を LAN 経由(SCPI over TCP、5555番) で 操作するための MCP サーバーです。
これは信号を「出す」機械です。オシロスコープではありません
DG800/DG900 系は波形を作って出す機械です。信号を測ることも、取り込むことも、 画面に出すこともできません。波形を見たいのなら、機種もこのリポジトリも違います (見るための機械は Rigol なら DS / MSO 系)。
唯一の測る機能は、別の端子に付いている周波数計(
dg_counter)だけです。 しかもこれは繰り返しのある信号の周波数・周期・デューティしか出しません。 通信のデータのような、繰り返しでない信号を測っても意味のある値は出ません。
DGという型名はオシロの型番と取り違えやすいので、念のため書いておきます。
なぜ USB ではなく LAN か
この機種は USB と LAN の両方を持っています。ただし Windows で USB を使うには
USB-TMC のドライバを機器に割り当てる作業が要ります。割り当てないと機器は
CM_PROB_FAILED_INSTALL のまま止まり、libusb からも PyVISA からも見えません。
割り当てには Zadig のような道具と管理者権限、つまり環境を変える作業が要ります。
LAN なら何も要りません。ただの TCP の口に SCPI の文字列を流すだけです。 ドライバも管理者権限もメーカー製の常駐ソフトも不要。この実装は LAN だけを使います。
アドレスの調べ方: 機器の画面で Utility → I/O → LAN。
道具
道具 | 内容 |
| 接続先の IP を登録する。 |
| 機種・各チャンネルの波形・出力の入切・負荷。読むだけ |
| 出力インピーダンス。 |
| 波形を決める。出力は入れない |
| 0V〜指定電圧の方形波。先に高インピーダンスへ強制する安全版 |
| 実際に信号が出る |
| 出力を切る。 |
| 内蔵の周波数計で測る |
| 任意の SCPI の問い合わせ(末尾が |
安全のきまり
dg_applyは出力を入れない。値を決めてから入れる、という順序を守れる10Vpp を超える指示は、機器に送る前に断る
5Vpp を超えるときは
expect_vppに同じ値を渡さないと実行しない。 前の作業の設定が残っていて、意図しない振幅が出る事故を防ぐdg_output_onは会話の値ではなく機器に入っている設定を読み直して判断するdg_queryは問い合わせ以外を受け付けない接続は呼び出しごとに開閉する。長く握って「出力を切る」が待たされる事態を作らない
これは機器を物理的に切り離す手段の代わりにはなりません。
何かを壊す落とし穴
出力インピーダンスの初期値は 50Ω で、機器はそれを見込んだ電圧を出します。
機器は「設定した負荷につないだときに指示どおりの振幅になる」ように出力します。 負荷が 50Ω のまま 3.3Vpp を指示して、入力インピーダンスの高い相手 (マイコンの足、計測器の入口、論理回路の入力)につなぐと、 相手には 6.6Vpp が届きます。
3.3V の足に 6.6V を入れる、というのはこうして起きます。
論理回路を叩く前に、必ず高インピーダンスにしてください。
dg_set_load(1, "INF")dg_status と dg_apply は、負荷が 50Ω のままなら実際に出る振幅を添えて警告します。
dg_logic_pulse が存在するのは、この事故を構造的に防ぐためです
(設定の前に高インピーダンスへ強制する)。
必要なもの
Python 3.10 以上
mcp(公式の Python SDK。FastMCPはこの中に入っている)
PyVISA も libusb もメーカーの常駐ソフトも要りません。標準ライブラリと mcp だけです。
使えるようにする
claude mcp add --scope user dg900 -- python /path/to/server.py登録したら、道具が現れるように利用側を起動し直します。アドレスは一度登録すれば残ります。
dg_set_host("192.168.1.50")state.json に保存されます。環境変数 DG_HOST / DG_PORT があればそちらが優先されます。
いまの状態
公式のプログラミングガイドに沿って書きましたが、実機での動作確認はまだです。 書いた時点で手元の個体は USB でしか繋がっておらず、LAN の口を使えませんでした。 実機で確かめたことは、確かめ次第ここに書き足します。
ライセンス
MIT
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityDmaintenanceAn MCP server that enables AI assistants to control Siglent SDS oscilloscopes over a local network using SCPI commands. It allows users to measure signals, configure channel and acquisition settings, and capture waveforms or screenshots through natural language.Last updated13245MIT
- Alicense-qualityBmaintenanceAn MCP server for controlling Rigol oscilloscopes from an AI assistant. It translates MCP tool calls into SCPI commands over PyVISA.Last updated1MIT
- Alicense-qualityDmaintenanceMCP server that lets AI assistants control Siglent SDG waveform generators over a local network using natural language, supporting signal generation, modulation, sweep, burst, and arbitrary waveforms.Last updated13MIT
- Alicense-qualityDmaintenanceAn MCP server that connects AI assistants to the Owon DS1102 oscilloscope, enabling waveform capture, measurement retrieval, and remote control of scope settings.Last updated1GPL 3.0
Related MCP Connectors
MCP server for Producer/Riffusion AI music generation
MCP server exposing the Backtest360 engine API as tools for AI agents.
MCP server for Gainium — manage trading bots, deals, and balances via AI assistants
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/kakuteki/rigol-dg900-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server