MCP server for reading voltage/waveform data from DreamSourceLab DSCope oscilloscopes via the WaveGate native capture tool (sigrok4dsl backend)
ScopeProbe has 3 tools with visible schemas and descriptions, but significant quality gaps limit production readiness. Tool names lack clear action verbs (scope_scan, scope_measure_dc, scope_capture_stats are somewhat descriptive but not verb-first). Descriptions are present but written in Chinese with technical jargon; English descriptions would improve LLM comprehension. Parameter descriptions exist but are minimal (e.g., 'DSCope channel number' for channel). Output schemas are not formally documented, responses are inferred from code (e.g., {ok, voltage, vdiv_mv, ...}). Error handling returns {ok: False, error: str(e)} but lacks recovery guidance or error classification. No tool annotations (readOnlyHint, destructiveHint, idempotentHint) despite all tools being READ_ONLY. Composition is reasonable, each tool has one responsibility, but no batch variants or pagination support.
采一段波形返回码值统计(min/max/mean/median/峰峰码),不做电压换算——快速看信号在不在、抖不抖。
采 DSCope 通道 channel,算 **DC 电压**(中位码值→电压)。 vdiv_mv=0 → **自动切档**:依次试 1V/2V/5V per div,选不贴量程边界的那档(量 ~12V 会切到 2V/div)。 vdiv_mv>0 → 固定该档(mV/div,如 2000=2V/div)。 返回 {ok, voltage, vdiv_mv, code_median, code_min, code_max, clipping, tried, hint}。 注:自动切档需 wavegate-capture 支持 `--vdiv`;旧版忽略 `--vdiv` 时维持设备当前档位(见 README)。
扫描 DSCope 设备。返回 {ok, devices:[{model,serial,channels,...}]}。
Tool names do not start with clear action verbs. 'scope_scan' is somewhat descriptive but 'scope_measure_dc' and 'scope_capture_stats' are vague about what action is performed. LLMs rely on verb-first naming (get_, create_, measure_, capture_) to infer intent.
Descriptions are in Chinese with heavy technical jargon (e.g., '采 DSCope 通道 channel,算 **DC 电压**'). LLMs trained primarily on English struggle with non-English descriptions. Descriptions also exceed 1024 chars (scope_measure_dc ~450 chars is acceptable, but readability is poor). No English fallback provided.
Output schemas are not formally documented. Responses are inferred from code (e.g., scope_measure_dc returns {ok, voltage, vdiv_mv, code_median, code_min, code_max, clipping, tried, hint}). LLMs cannot plan downstream calls without knowing expected fields. No JSON Schema for return types.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-23 | F | 46 | 2026-07-28+ | v2 |
Error handling is minimal. All tools return {ok: False, error: str(e)} with no recovery guidance. Errors like 'wavegate-capture 无 JSON 输出' (no JSON output) do not tell the LLM what to do next (retry? check environment? call a different tool?). No error classification (retryable vs fatal).
No tool annotations despite all tools being READ_ONLY. FastMCP supports @mcp.tool(readOnlyHint=True) but it is not used. This forces LLMs to infer safety from descriptions, increasing hallucination risk.