mcp-server-siglent-sdm3045x
This MCP server lets an AI assistant control a Siglent SDM3045X multimeter to take and analyze measurements.
Take one reading using the instrument’s current function, range, and speed with
read.Select a measurement function, range, speed, and sensor, then take one reading with
measure.Record timestamped readings over up to 600 s at intervals ≥ 0.1 s and get min/max/mean/stdev with
sample.Collect up to 10,000 rapid readings with statistics using
burst.Retrieve instrument model, serial number, firmware, connection resource, and current measurement configuration with
get_device_info.If enabled with
--allow-scpi, send arbitrary SCPI commands/queries via the optionalscpitool.Readings include units, range used, timestamps where applicable, accuracy where available, and overload reporting.
Click on "Deploy 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., "@mcp-server-siglent-sdm3045xtake a DC voltage reading and tell me the accuracy"
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.
mcp-server-siglent-sdm3045x
An MCP server that lets AI assistants take measurements with a Siglent SDM3045X bench multimeter connected via USB or LAN.
Unofficial project, not affiliated with or endorsed by Siglent. Tested with an SDM3045X, firmware 5.02.01.10, over USB (Linux) and LAN.
Tools
Tool | Description |
| One reading with the function and range set on the instrument, keeping them |
| Select a function (DC/AC voltage and current, 2/4-wire resistance, capacitance, frequency, period, continuity, diode, temperature) and take one reading |
| Timestamped readings over a period (max 600 s, interval ≥ 0.1 s) with min/max/mean/stdev |
| Up to 10000 readings as fast as the instrument can (about 180/s at speed fast), with statistics |
| Model, serial number, firmware, connection and the present measurement configuration |
Every reading comes with its unit, the range used and, where the data sheet gives a single
figure, its accuracy (e.g. ±(0.06 % of reading + 8 counts) as an absolute value). Overloads
are reported as "overload": true instead of the instrument's 9.9E37.
With --allow-scpi one more tool is available:
Tool | Description |
| Send any SCPI command or query from the Remote Manual (statistics, limits, null, …) |
The raw SCPI tool is off by default because it can change any setting, including the LAN configuration.
Related MCP server: sdm-mcp
Requirements
Python ≥ 3.10 and uv
The instrument connected to the USB device port on the rear, or to the network.
Linux, USB: the kernel
usbtmcdriver makes the instrument available as/dev/usbtmc0. Give logged-in users access with a udev rule:echo 'SUBSYSTEM=="usbmisc", KERNEL=="usbtmc[0-9]*", TAG+="uaccess"' | sudo tee /etc/udev/rules.d/70-usbtmc.rules sudo udevadm control --reload && sudo udevadm triggerWindows / macOS, USB: install a VISA (NI-VISA or Keysight IO Libraries) and start the server with
--visa-backend @ivi.LAN: no extra software. The instrument needs an address in your subnet; then the server finds it by itself. On the instrument open Utility → I/O Config → LAN Settings and turn on DHCP, or enter a static IP address, subnet mask and gateway under Modify Settings (User Manual, section I/O Configuration, available on the Siglent product page). Check that the instrument's subnet matches your network: ours came with the static address 10.11.13.220, which the broadcast search does not reach. While USB is connected,
SYST:COMM:LAN:IPAD?(e.g. with thescpitool) shows the address in use.
Configuration
Claude Code
claude mcp add siglent-sdm3045x -- uvx mcp-server-siglent-sdm3045x
# fixed address instead of auto-detection:
claude mcp add siglent-sdm3045x -- uvx mcp-server-siglent-sdm3045x --resource 192.168.1.50Claude Desktop and other clients
{
"mcpServers": {
"siglent-sdm3045x": {
"command": "uvx",
"args": ["mcp-server-siglent-sdm3045x"]
}
}
}Options
Option | Environment variable | Default |
|
| auto-detect on USB, then LAN |
|
| any SDM3045X |
|
| off |
|
|
|
|
|
|
RESOURCE can be a device file (/dev/usbtmc0), an IP address or host name (VXI-11), or any
VISA resource string such as TCPIP::192.168.1.50::5025::SOCKET (raw socket) or
USB0::0xF4EC::0x1203::SDM34XXXXXXXXX::INSTR. Port 5024 is a telnet console and does not work
as a socket resource.
Auto-detection tries /dev/usbtmc* first, then Siglent instruments listed by VISA on USB
(leaving out those already asked through /dev/usbtmc*, since pyvisa-py would take them away
from the kernel driver), then VXI-11 instruments in every network this computer is connected to
(UDP broadcast to the portmapper, about 1 s). It accepts the first one that identifies itself as an SDM3045X. With
several instruments, --serial picks one by its serial number (shown by get_device_info, on
the rear label and under Utility → System Setup → System Info). Set --resource instead if
the instrument is in another subnet, where the broadcast does not reach it; the two options
exclude each other.
Measurement notes
The server cannot see how the test leads are connected. It tells the assistant to only switch to functions that match the wiring: currents need the red lead in the I jack; resistance, continuity, diode and capacitance drive a test current of up to 1 mA through the circuit.
Switching function or range remotely also changes what the front panel shows.
Once the server has sent a command, the instrument is in remote mode: the front panel shows "Immediate Trig" and its keys are locked. Press Shift to return to front panel operation. The instrument offers no remote command for this, so the server cannot release it by itself.
Above 7 A, the data sheet recommends 30 s off after 30 s on.
Accuracy figures are the one-year data sheet values (23 °C ± 5 °C, 30 min warm-up, speed slow). 2-wire resistance adds 0.2 Ω unless the leads were nulled; AC accuracy depends on the signal frequency and is given per frequency band; thermocouple figures exclude the cold junction error (up to ±3.5 °C with the built-in sensor).
Development
uv sync
uv run pytest # tests use a simulated instrument
npx @modelcontextprotocol/inspector uv run mcp-server-siglent-sdm3045x # try the tools interactivelyTo check a real instrument, connect it and run:
uv run python scripts/hardware_test.py # voltage-type functions only
uv run python scripts/hardware_test.py --with-test-current # also resistance, current, capacitance, …
uv run python scripts/hardware_test.py --reconnect # also unplug/replug USB when askedThe basic checks only use functions that put no current into the inputs. Observed instrument behaviour, including where it differs from the Remote Manual, is described in docs/protocol.md.
License
MIT
Available Tools
5 toolsburstAIdempotent
Take a series of readings as fast as the instrument can and return statistics plus all values.
Readings are paced by the instrument and have no individual timestamps. Approximate rates (50 Hz mains): dc_voltage, dc_current and resistance 4/s at speed slow, 40/s medium, 175/s fast; ac functions and temperature 4/s; frequency and period 2/s. Bursts estimated to take longer than 600 s are refused. Without function the present function and range are kept; otherwise they are set as in measure.
Args: count: Number of readings, 1 to 10000. function: Measurement function. Leads in HI/LO for voltage, resistance_2w, capacitance, frequency, period, continuity, diode and temperature; in I/LO for currents; resistance_4w also uses HI Sense/LO Sense. range: Fixed range in V, A, Ω or F; omit for autorange. dc_voltage 0.6, 6, 60, 600, 1000; ac_voltage 0.6, 6, 60, 600, 750; dc_current 0.0006, 0.006, 0.06, 0.6, 6, 10; ac_current 0.06, 0.6, 6, 10; resistance_2w/resistance_4w 600, 6000, 60000, 600000, 6e6, 6e7, 1e8; capacitance 2e-9, 2e-8, 2e-7, 2e-6, 2e-5, 0.0002, 0.01. Other functions have no range. speed: Only for dc_voltage, dc_current, resistance_2w, resistance_4w: slow (10 PLC, default, most accurate), medium (1 PLC), fast (0.3 PLC). sensor: Required for temperature: pt100 (RTD) or thermocouple type B, E, J, K, N, R, S or T.
| Name | Required | Description | Default |
|---|---|---|---|
| count | No | ||
| range | No | ||
| speed | No | ||
| sensor | No | ||
| function | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well beyond annotations: no per-reading timestamps, instrument-paced timing, approximate rates by function and speed, duration refusal, and how function/range are retained or changed. These details let an agent predict latency and side effects; annotations already cover safety.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads purpose and return, then uses a structured Args section; the length is justified by five undocumented parameters and instrument-specific constraints. Almost every sentence adds operational detail.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Complete for a complex instrument operation: the output schema handles return structure, while the description covers timing, duration limits, configuration persistence, and parameter requirements. The only minor omission is explicit sibling routing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description fully compensates: count range, function enum with lead requirements, valid ranges per function, speed restrictions and sensor requirement. This is substantially more than the raw schema provides.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific action and return payload: take a series of readings at the instrument's maximum rate and return statistics plus all values. It references measure only for function/range configuration, not to explain when burst should be chosen over measure or sample, so sibling differentiation is partial.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context for use: many readings in one fast burst, with explicit refusal above 600 s and defaults for function/range. It does not state when to use measure, sample or read instead, nor any exclusion beyond the duration limit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_device_infoBRead-onlyIdempotent
Instrument model, serial number, firmware, VISA resource and the present measurement configuration.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint=false, so the safety profile and repeatability are covered by structured data. The description contributes the notable behavioral detail that the returned configuration is the 'present' one, implying a live snapshot rather than cached data. It does not state whether the call actually touches the instrument bus or whether it can fail/time out on a disconnected device.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single compact clause with zero filler, front-loading the most identifying fields (model, serial, firmware). It is a noun phrase rather than a sentence, which makes it slightly less self-explanatory as a standalone statement but costs no reading effort.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given zero parameters, a full output schema, and annotations covering safety and idempotency, the definition only needs to establish purpose – which the field list does adequately. The only missing element is a usage cue relative to the measurement siblings, a minor gap for such a simple read-only query.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing for the description to disambiguate; baseline 4 applies. The description correctly implies the tool is argument-free by framing itself purely as a retrieval of device attributes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description enumerates exactly what is retrieved: instrument model, serial number, firmware, VISA resource, and current measurement configuration. Combined with the verb in the name (get_device_info), the resource and scope are unambiguous, and the other siblings (read, measure, sample, burst) are clearly measurement operations rather than identity queries. It stops short of an explicit sentence stating the action, relying on the name for the verb.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to call this versus the measurement siblings, and no stated preconditions (e.g., whether a VISA session must already be open). An agent must infer that this is a discovery/identity call made before measurement, which is plausible but not stated anywhere.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
measureAIdempotent
Select a measurement function and take one reading.
This switches the instrument (front panel included) to the given function, with autorange unless a range is given. Returns value, unit, range used, timestamp (UTC) and, where the data sheet allows, the accuracy of the reading.
Args: function: Measurement function. Leads in HI/LO for voltage, resistance_2w, capacitance, frequency, period, continuity, diode and temperature; in I/LO for currents; resistance_4w also uses HI Sense/LO Sense. range: Fixed range in V, A, Ω or F; omit for autorange. dc_voltage 0.6, 6, 60, 600, 1000; ac_voltage 0.6, 6, 60, 600, 750; dc_current 0.0006, 0.006, 0.06, 0.6, 6, 10; ac_current 0.06, 0.6, 6, 10; resistance_2w/resistance_4w 600, 6000, 60000, 600000, 6e6, 6e7, 1e8; capacitance 2e-9, 2e-8, 2e-7, 2e-6, 2e-5, 0.0002, 0.01. Other functions have no range. speed: Only for dc_voltage, dc_current, resistance_2w, resistance_4w: slow (10 PLC, default, most accurate), medium (1 PLC), fast (0.3 PLC). sensor: Required for temperature: pt100 (RTD) or thermocouple type B, E, J, K, N, R, S or T.
| Name | Required | Description | Default |
|---|---|---|---|
| range | No | ||
| speed | No | ||
| sensor | No | ||
| function | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Without relying on the annotations, the description discloses that the call changes instrument state including the front panel (explaining the readOnlyHint=false despite a measurement), that autorange is the default, that `speed` trades PLC count against accuracy, and what the reading includes. That is materially more than the annotation block conveys.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in one sentence and the Args block is dense reference material rather than padding. The long per-function range list is heavy, but with 0% schema coverage that detail has to live somewhere, so it earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a four-parameter tool with enum-constrained inputs and conditional requirements, every branch is covered: autorange vs fixed range, speed applicability, temperature sensor, and the state change it causes. An output schema exists, and the reading-summary sentence is a small bonus rather than a gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full burden and does: it maps each function enum value to its wiring (HI/LO vs I/LO, HI Sense/LO Sense), enumerates valid ranges per function with units, restricts `speed` to four functions with accuracy implications, and states that `sensor` is required for temperature with valid types.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The first sentence gives a specific verb+resource pair: select a measurement function and take one reading, plus the side effect that it switches the instrument (front panel included). It implicitly distinguishes itself from `burst`/`sample` by saying 'one reading', but it never names those siblings or states the contrast explicitly, so the agent must infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied rather than stated: pick a function, omit `range` for autorange, add `sensor` for temperature. Nothing tells the agent when to call `measure` versus `sample`, `read`, or `burst`, which is exactly the decision it faces among these siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
readAIdempotent
Take one reading with the function, range and speed currently set on the instrument.
Function, range and speed are kept; the trigger is set to immediate with one reading per trigger, as measure does. Returns value, unit, range, timestamp (UTC) and, where the data sheet allows, the accuracy.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes meaningfully beyond the annotations: it discloses that the instrument's function/range/speed are preserved, that the trigger is reconfigured to immediate with one reading per trigger, and what comes back. This explains why readOnlyHint is false for an operation otherwise named 'read' — a real ambiguity resolved. It stops short of stating timing/blocking behavior or what happens on instrument error.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the core action, then state effects, then return value. The 'as measure does' comparison is the one clause that adds ambiguity rather than information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and the description needn't enumerate returns, though it does briefly. For a zero-parameter instrument action, the key facts — what state is used, what state changes, what comes back — are all present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Zero parameters, so the schema carries no burden. The description usefully clarifies that the call implicitly uses whatever function, range and speed are currently configured rather than requiring arguments.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a concrete action and resource ('take one reading') and the instrument state it acts on (function, range, speed currently set). It does not clearly separate itself from the sibling 'measure' — in fact 'as measure does' implies the two behave alike, which could make an agent unsure which to pick.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit guidance on when to use 'read' versus 'measure', 'sample' or 'burst'. The only comparative statement ('as measure does') describes trigger behavior rather than a selection criterion, so the agent has to guess.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
sampleAIdempotent
Record timestamped readings at a fixed interval and return statistics plus all samples.
Readings are paced by this computer. A reading takes about 0.3 s at speed slow and in most other functions, 0.6 s for frequency and period; with a shorter interval readings are taken back to back, and none starts later than one interval after duration_s, so the recording ends on time with fewer samples. Without function the present function and range are kept; otherwise they are set as in measure.
Args: duration_s: Recording time in seconds (max 600). interval_s: Time between readings in seconds (min 0.1). function: Measurement function. Leads in HI/LO for voltage, resistance_2w, capacitance, frequency, period, continuity, diode and temperature; in I/LO for currents; resistance_4w also uses HI Sense/LO Sense. range: Fixed range in V, A, Ω or F; omit for autorange. dc_voltage 0.6, 6, 60, 600, 1000; ac_voltage 0.6, 6, 60, 600, 750; dc_current 0.0006, 0.006, 0.06, 0.6, 6, 10; ac_current 0.06, 0.6, 6, 10; resistance_2w/resistance_4w 600, 6000, 60000, 600000, 6e6, 6e7, 1e8; capacitance 2e-9, 2e-8, 2e-7, 2e-6, 2e-5, 0.0002, 0.01. Other functions have no range. speed: Only for dc_voltage, dc_current, resistance_2w, resistance_4w: slow (10 PLC, default, most accurate), medium (1 PLC), fast (0.3 PLC). sensor: Required for temperature: pt100 (RTD) or thermocouple type B, E, J, K, N, R, S or T.
| Name | Required | Description | Default |
|---|---|---|---|
| range | No | ||
| speed | No | ||
| sensor | No | ||
| function | No | ||
| duration_s | No | ||
| interval_s | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses detailed behavior: reading duration depends on speed/function, shorter intervals cause back-to-back readings, no reading starts later than one interval after duration_s, and the recording ends on time with fewer samples. It also explains state persistence when function/range are omitted. These are meaningful operational details not available from the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded and the Args section is structured, with detail warranted by zero schema coverage. The pacing sentence is somewhat dense and could be clearer, but there is little wasted content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return values need not be explained. The description covers timing behavior, parameter constraints, state persistence, and function-specific applicability for a complex six-parameter tool. Nothing material appears missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries the full parameter burden. It documents all six parameters: duration max, interval min, function lead selection, valid range values per function, speed applicability, and sensor requirements for temperature. This adds essential meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states a specific action: recording timestamped readings at a fixed interval and returning statistics plus all samples. The scope and output are clear. It references measure for inherited settings, but does not explicitly position itself against burst or read, so sibling differentiation is incomplete.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies this tool is for timed recording rather than a single measurement, and says omitted function/range keep the present settings while otherwise they are set as in measure. However, it gives no explicit when-to-use versus alternatives like measure, burst, or read, and no exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
5 tool updates
v0.1.0- First observed
burst - First observed
get_device_info - First observed
measure - First observed
read - First observed
sample
TDQS
Scored across 5 tools
The single-reading tools read and measure overlap somewhat, but the descriptions clearly distinguish them: read preserves current configuration, while measure changes function/range and takes a reading. sample and burst are clearly differentiated by pacing, timestamps, and statistics. get_device_info is distinct.
Most tool names are single imperative verbs (read, measure, sample, burst), but get_device_info uses a verb_noun convention with a get_ prefix. The mix is readable but not a consistent predictable pattern.
Five tools is well-scoped for a bench multimeter server: immediate reading, configured measurement, timed sampling, fast burst capture, and device information. Each tool has a clear purpose and earns its place.
The surface covers core measurement workflows including single readings, configured readings, sampling, burst acquisition, and device/configuration info. A configure-only tool or explicit trigger/zero controls are missing, but agents can work around this via measure.
Maintenance
Related MCP Connectors
Protocol-native energy infrastructure orchestration for AI data centers. Provides 46 MCP tools across 8 grid protocols (IEC-61850, DNP3, Modbus, OCPP, OpenADR, IEEE 2030.5, IEC 60870-5-104, ICCP) with 5 core API primitives: connect, dispatch, settle, comply, and intel. Enables AI agents to programmatically interact with substations, grid interfaces, and energy assets for real-time workload-grid coordination.
Query your team's drift, vulnerability, and upgrade data from any AI assistant. OAuth 2.1, 51 tools.
Tesla data for your AI: battery, range, charging, tires, alerts, history. Controls off by default.
Connects AI assistants to TrackingTime for querying time entries, projects, tasks, customers, and team data using natural language.
Related MCP Servers
- AlicenseCqualityDmaintenanceEnables AI tools to remotely control a SIGLENT SDS800X HD series oscilloscope, configure acquisition, capture waveforms, and analyze signal quality safely through high-level SCPI tools.204GPL 3.0
- FlicenseNot gradedqualityDmaintenanceMCP server to remotely control Siglent SDM3000 series digital multimeters via TCP/IP SCPI protocol, enabling measurement, configuration, and data acquisition.-
- AlicenseAqualityAmaintenanceEnables LLMs to control RIGOL oscilloscopes over SCPI via LAN or USB, including configuring channels/timebase/trigger, taking measurements, capturing waveforms and screenshots, decoding serial protocols, running FFT analysis, and controlling the built-in AFG.38MIT
- AlicenseNot gradedqualityCmaintenanceEnables MCP clients to connect to and control Siglent oscilloscopes and power supplies over SCPI/TCP using typed tool calls with input validation, safety controls, and built-in observability.1Apache 2.0