You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Release v0.4.0: Enhanced device list with filtering, summary stats, and test equipment support
- Device list now returns brief summary first (always visible) then full table
- Added filtering by type, status, and search query
- Added summary statistics (counts by type/status/SSH status)
- Added test equipment detection and querying tools (list_test_equipment, query_test_equipment)
- Added last seen timestamps and power switch relationships to device list
- Improved cache with atomic writes and thread-safe locking
- Updated help documentation with new features and best practices
- Optimized device discovery with parallel SSH identification
Copy file name to clipboardExpand all lines: CHANGELOG.md
+24Lines changed: 24 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -2,6 +2,30 @@
2
2
3
3
[Semantic Versioning](https://semver.org/)
4
4
5
+
## [0.4.0] - 2025-11-17
6
+
7
+
### Added
8
+
-**Device List Summary Display**: `list_devices` now returns a brief summary first (always visible without expanding) followed by the full detailed table
9
+
-**Device Filtering**: `list_devices` supports filtering by `device_type_filter`, `status_filter`, and `search_query` for quick device discovery
10
+
-**Summary Statistics**: Device list includes summary statistics showing counts by type, status, and SSH status
11
+
-**Test Equipment Detection**: Automatic detection of test equipment (DMMs, oscilloscopes) via SCPI protocol on common ports (5025, 5024, 3490, 3491)
12
+
-**Test Equipment Tools**: New `list_test_equipment` and `query_test_equipment` tools for managing and querying test equipment with SCPI commands
13
+
-**Last Seen Timestamps**: Device list displays "Last Seen" timestamps showing when each device was last successfully identified
14
+
-**Power Switch Relationships**: Device list shows which power switch (Tasmota device) controls each device
15
+
-**Friendly Name Management**: `update_device_friendly_name` tool to update friendly names for discovered devices in cache
16
+
17
+
### Fixed
18
+
-**Device List Visibility**: Fixed device list display in Cursor by returning brief summary as separate TextContent item (always visible)
19
+
-**Cache Thread Safety**: Improved cache operations with atomic file writes and thread-safe locking to prevent race conditions during parallel device discovery
20
+
-**Cache Corruption**: Fixed cache corruption issues by using temporary files and `os.replace` for atomic writes
21
+
-**Tasmota Detection Persistence**: Fixed Tasmota detection results being overwritten by ensuring proper cache merging
22
+
23
+
### Changed
24
+
-**Device Discovery Optimization**: Further optimized device discovery with parallel SSH identification for uncached devices
25
+
-**SSH User Priority**: SSH authentication now prioritizes "fio" user, then "root" for device identification
26
+
-**Device List Format**: Enhanced device list with additional columns (Last Seen, Power Switch) and improved formatting
27
+
-**Help Documentation**: Updated help documentation with new features, workflows, and best practices
Copy file name to clipboardExpand all lines: README.md
+5-4Lines changed: 5 additions & 4 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -7,7 +7,7 @@
7
7
8
8
MCP server exposing remote embedded hardware testing capabilities to AI assistants.
9
9
10
-
**Version**: 0.3.0
10
+
**Version**: 0.4.0
11
11
12
12
> **⚠️ ALPHA QUALITY WARNING**: This package is currently in **alpha** development status. It is **not ready for professional or production use**. The API may change, features may be incomplete, and there may be bugs. Use at your own risk. See [PUBLISHING.md](PUBLISHING.md) for more details.
13
13
@@ -146,17 +146,18 @@ Data flow: AI → MCP Server → Tools → Lab Framework → Hardware
-**Power**: `start_power_monitoring` (DMM or Tasmota), `get_power_logs`, `analyze_power_logs`, `monitor_low_power`, `compare_power_profiles` - Power monitoring via DMM (SCPI) or Tasmota energy monitoring
152
-
-**Tasmota**: `tasmota_control`, `list_tasmota_devices`, `power_cycle_device` - Power cycle devices via Tasmota switches
152
+
-**Tasmota**: `tasmota_control`, `list_tasmota_devices`, `power_cycle_device` - Power cycle devices via Tasmota switches. Tasmota devices show power state (ON/OFF) and consumption (Watts) in device list
153
+
-**Test Equipment**: `list_test_equipment`, `query_test_equipment` - Auto-detect and query test equipment (DMM, oscilloscopes) via SCPI protocol
-**Process Management**: `kill_stale_processes` - Kill duplicate processes that might interfere
155
156
-**Remote Access**: `create_ssh_tunnel`, `list_ssh_tunnels`, `close_ssh_tunnel`, `access_serial_port`, `list_serial_devices` - SSH tunnels and serial port access
156
157
-**Change Tracking**: `get_change_history`, `revert_changes` - Track and revert changes for security/debugging
-**Device Verification**: `verify_device_identity`, `verify_device_by_ip`, `update_device_ip` - Verify device identity in DHCP environments. Device list shows SSH status, last seen timestamps, and power switch relationships
160
161
-**Help**: `help` - Get usage documentation and examples
"list_devices": "List all configured lab devices with status, IPs, and types",
30
-
"test_device": "Test connectivity to a device (ping and SSH check)",
31
-
"ssh_to_device": "Execute SSH command on a device (requires device_id, command, optional username)",
29
+
"list_devices": "List all devices with status, IPs, types, firmware, SSH status, last seen, and power switches. Returns brief summary (always visible) then full table. Supports filtering by device_type_filter, status_filter, search_query. Includes summary statistics (counts by type/status/SSH status). Shows Tasmota power state/consumption and test equipment detection.",
30
+
"test_device": "Test connectivity to a device (ping and SSH check). Best practice: Use before running operations on devices. In DHCP environments, use verify_device_identity to ensure correct device.",
31
+
"ssh_to_device": "Execute SSH command on a device (requires device_id, command, optional username). Best practice: Test device connectivity first with test_device.",
32
+
"verify_device_identity": "Verify device identity at given IP matches expected device (important for DHCP). Updates IP in config if verified and changed.",
33
+
"verify_device_by_ip": "Identify which device (if any) is at a given IP address by checking hostname/unique ID.",
34
+
"update_device_ip": "Verify device identity and update IP address in config if device is verified and IP has changed (for DHCP environments).",
35
+
"update_device_friendly_name": "Update friendly name for a discovered device in the cache. Allows custom names when referencing devices.",
32
36
},
33
37
"vpn_management": {
34
38
"vpn_status": "Get current WireGuard VPN connection status",
"tasmota_control": "Control Tasmota power switch (device_id, action: on|off|toggle|status|energy)",
44
-
"list_tasmota_devices": "List all configured Tasmota devices",
48
+
"list_tasmota_devices": "List all configured Tasmota devices and the devices they control",
49
+
"power_cycle_device": "Power cycle a device by controlling its Tasmota power switch (turns off, waits, then turns on). Optional: off_duration (default: 5 seconds).",
50
+
},
51
+
"test_equipment": {
52
+
"list_test_equipment": "List all test equipment devices (DMM, oscilloscopes, etc.) found on the network. Includes both configured devices and auto-discovered devices.",
53
+
"query_test_equipment": "Send a SCPI command to test equipment (DMM, etc.) and get the response. Common commands: *IDN? (identify), MEAS:VOLT:DC? (measure DC voltage), MEAS:CURR:DC? (measure DC current). Supports device_id from config or IP address.",
45
54
},
46
55
"ota_management": {
47
56
"check_ota_status": "Check Foundries.io OTA update status (device_id)",
"analyze_power_logs": "Analyze power logs for low power/suspend detection (test_name?, device_id?, threshold_mw?)",
64
73
"monitor_low_power": "Monitor device for low power consumption (device_id, duration?, threshold_mw?, sample_rate?)",
65
-
"compare_power_profiles": "Compare power consumption across test runs (test_names[], device_id?)",
74
+
"compare_power_profiles": "Compare power consumption across multiple test runs (test_names[], device_id?). Visualizes differences between test sessions.",
"device_not_found": "Verify device_id in device inventory (use list_devices). In DHCP environments, use verify_device_identity to ensure correct device.",
144
+
"ssh_fails": "Check SSH keys configured, device online, VPN connected. SSH authentication prioritizes 'fio' user, then 'root'. Check SSH status in device list.",
"device_list_not_visible": "Device list returns brief summary first (always visible), then full table. If not visible, restart MCP server connection.",
147
+
"cache_errors": "Device cache uses atomic writes and thread-safe locking. If errors occur, cache may be corrupted - clear cache directory and rescan.",
127
148
},
128
149
"best_practices": [
129
150
"Always check VPN status before accessing lab devices",
description="List all test equipment devices (DMM, oscilloscopes, etc.) found on the network. Includes both configured devices and auto-discovered devices.",
description="Send a SCPI command to test equipment (DMM, etc.) and get the response. Common commands: *IDN? (identify), MEAS:VOLT:DC? (measure DC voltage), MEAS:CURR:DC? (measure DC current)",
327
+
inputSchema={
328
+
"type": "object",
329
+
"properties": {
330
+
"device_id_or_ip": {
331
+
"type": "string",
332
+
"description": "Device ID from config or IP address of the test equipment",
333
+
},
334
+
"scpi_command": {
335
+
"type": "string",
336
+
"description": "SCPI command to send (e.g., '*IDN?', 'MEAS:VOLT:DC?')",
337
+
},
338
+
},
339
+
"required": ["device_id_or_ip", "scpi_command"],
340
+
},
341
+
),
294
342
Tool(
295
343
name="power_cycle_device",
296
344
description="Power cycle a device by controlling its Tasmota power switch (turns off, waits, then turns on)",
0 commit comments