ltspice-mcp
仓库来源: 此公共集成分支基于上游
cognitohazard/ltspice-mcp标签v0.5.0(提交4dc456000e1a436ef37a585c23ab35954a8caf04e)。 本分支中的新增内容提供了与安装无关的部署示例和文档。未修改任何上游服务器源代码。
ltspice-mcp
正在进行中。 核心功能可用,但预计会有粗糙之处和破坏性变更。
一个 MCP 服务器,将 LLM 助手(Claude 及任何其他 MCP 客户端)连接到真实的电路仿真:LTspice 和 ngspice,以及直接编辑 LTspice .asc 原理图。仿真结果以结构化数字返回——截止频率、超调量、相位裕度、上升时间,以及按名称读回的每个器件的 小信号工作点参数(gm、gds、vth 等)——因此助手可以在你于 LTspice 中打开的同一文件中设计、验证和迭代电路,而无需手动解析原始文件。基于 spicelib 构建。
快速开始
在 Claude Code 中,安装插件:
/plugin marketplace add cognitohazard/ltspice-mcp
/plugin install ltspice-mcp你还需要在主机上安装 LTspice 或 ngspice(在 Windows、Linux 和 macOS 上自动检测;在 WSL 上需显式设置 LTspice 路径——WSL 说明)。电路编辑无需任何仿真器即可工作。需要 uv;服务器本身在首次使用时从 PyPI 获取。
手动安装(任何 MCP 客户端)
安装服务器,然后将客户端指向它:
uv tool install ltspice-mcp # or: pip install ltspice-mcp / pipx install ltspice-mcpClaude Code — 一条命令(去掉 -s project 可全局安装):
claude mcp add -s project ltspice -- ltspice-mcp其他客户端 — Claude Desktop、Cursor、Windsurf、Gemini CLI、Continue、Cline、Zed 等——将这段 mcpServers 配置添加到客户端的 MCP 配置文件中(每个客户端都记录了自己的路径):
{
"mcpServers": {
"ltspice": { "command": "ltspice-mcp", "args": [] }
}
}需要 Python 3.11+。用 ltspice-mcp --help 验证。同一服务器还以两个别名发布——circuit-mcp 和 ngspice-mcp——因此 uvx circuit-mcp / uvx ngspice-mcp 是 uvx ltspice-mcp 的等效替代,如果你觉得这些名称更容易发现的话。
Web 客户端(claude.ai、ChatGPT)需要 stdio→HTTP 桥接,例如 mcp-proxy——只能在完全受你控制的网络上暴露此服务器,因为它会在 allowed_paths 内写入文件并生成进程。
还提供了 Claude Desktop 扩展:在 packaging/mcpb/ 中构建 .mcpb 文件,然后将其拖到 Claude Desktop 上即可一键安装,并带有用于电路目录的原生文件夹选择器。与插件一样,它封装了 PyPI 包,需要主机上有 uv 和仿真器(它不捆绑 LTspice 或 ngspice)。
Related MCP server: ltspice-mcp
使用方法
连接后,你可以用自然语言请求电路工作。助手设计电路并决定测量什么;服务器运行仿真器,解析二进制输出,并返回数字。它会报告运行产生的结果,包括仿真器自身的警告,并将结果是否良好的判断留给你和助手。
"将该 NMOS 共源级偏置到目标漏电流的饱和状态,并报告 gm/ID。"
助手编写网表,在 LTspice 上求解偏置点,并按名称读取器件的 工作点——漏电流、gm、gds、VDS 与 VDSAT 对比以确认处于饱和状态,以及模拟设计人员用来定标的 gm/ID。如果偏置有偏差,它会调整栅参考或 W/L 并重新运行,每次只需几秒。
其他以同样方式工作的请求:
"该稳压器阶跃响应的超调量和稳定时间是多少?" — 运行瞬态分析,并从波形中测量两者,以及上升时间、振铃频率和最终值。
"运行 200 次蒙特卡洛,电阻容差 5%,告诉我输出分布。" — 每次运行扰动组件,仿真批次,并报告每个测量的均值、标准差和最坏情况值。
"将负载从 100 Ω 扫描到 10 kΩ,找出效率下降的位置。" — 参数扫描,每次运行都有结果。
"表征此 NMOS:gm 和 gm/ID 与 VGS 的关系。" — 编写
.dc Vgs测试文件,使用.save @m1[gm] @m1[id],在 ngspice 上运行,并将 gm/ID 表作为一个 CSV 返回(无需.control块,无需解析原始文件)。"为低侧开关寻找 N 沟道功率 MOSFET,并测量导通状态压降。" — 在加载的库中搜索零件(
find_model),将其放入脉冲栅瞬态中,并从.meas结果中读取 Vds(on) 和负载电流。"将此差分对构建为可在 LTspice 中打开的原理图。" — 将组件放置并连线到真实的
.asc文件中,并带有正交路由和引脚碰撞检查。"这个环路稳定吗?" — 环路增益的 AC 分析;报告每个交叉点的相位和增益裕度,而不仅仅是第一个。
"这个串联 RLC 的谐振频率和 Q 值是多少?" — 运行 AC 扫描,并报告每个峰值的中心频率、Q 值和 −3 dB 带宽。
警告与它影响的数字一起出现。 像 ngspice 这样的仿真器可能会在日志深处打印一次"奇异矩阵",然后完成运行并写出完全合理的数字——手动读取时看起来一切正常。当你向服务器请求其中一个数字时,隐藏的行会附加到该数字上,出现在紧邻值的 observations 字段中,因此故障会出现在你正在查看的地方,而不是容易被忽略的地方。
在同一文件上进行协同设计
所有操作都基于普通的 LTspice 和 SPICE 文件,因此工作在你和助手之间来回传递,而不是停留在聊天中:
在 LTspice 中绘制原理图,然后交给助手:"工作点是多少?"、"为什么输出不动?"、"添加补偿并检查相位裕度。"
或者反过来:助手设计并验证电路,然后写入
.asc;你在 LTspice 中打开它,检查并手动调整。你的手动编辑就是文件的新状态——助手会在下一次请求时从那里继续。变更可以在设计过程中双向流动:在 GUI 中调整一个值并请求重新验证,或者让助手在你提交之前扫描你正在考虑的变更。
功能
仿真与测量。 运行 LTspice 或 ngspice,并直接解析二进制输出。测量在服务器端计算并以数字返回:时域(上升/下降、超调、稳定、延迟、周期/占空比/抖动、RMS、THD)、频域(滤波器截止频率和滚降、任意频率下的增益和相位、稳定裕度、带 Q 值的谐振峰、积分噪声)、DC 工作点,以及 .MEAS 指令结果(包括失败的)。每个器件的 小信号工作点参数(gm、gds、vth 等)在两个仿真器上都按名称返回——LTspice 通过自动添加的 .options logopinfo 块,ngspice 通过 .save @dev[param] 轨迹。使用 export_waveform 读取 .dc 扫描中的集合作为 gm/ID 表,或使用 operating_point 读取单个偏置点(以 m1.gm / @m1[gm] 形式寻址,无需解析原始文件)。
原理图和 netlist 编辑。 创建和编辑真实的 LTspice .asc 文件——放置组件、连接引脚、标记网络——并在写入前进行验证:会与引脚碰撞、重叠连接点或对角运行的连线会被拒绝,每次编辑都会返回关于浮动引脚或悬空标签的警告。会话中的编辑可以撤销。普通 netlist(.cir/.net)在文本级别获得相同的操作,外加静态验证,在仿真之前捕获格式错误的卡片。
扫描和蒙特卡洛。 多维参数扫描和蒙特卡洛,支持每个组件的容差、.MODEL 工艺变化和 Pelgrom W·L 器件失配。每次测量的统计量跨运行聚合,任何单次运行都可以提取出来,像独立仿真一样分析。
任务与信任。 仿真作为可取消的任务运行,具有超时和并发上限;长时间运行立即返回任务 ID,任务状态在服务器重启后仍然存在。结果报告事实而非结论:完成的运行携带仿真器自身的警告、未产生任何结果的测量,以及作为结构化观察的极端节点值。判断结果是否可信由读取它的模型决定。
支持的仿真器
仿真器 | 状态 |
LTspice | 主要。Windows 原生,WSL2(通过 interop 使用 Windows LTspice.exe),Linux 通过 Wine。 |
ngspice | 一流:仿真、解析、诊断、分析。无需 LTspice 安装的开源路径。 |
QSPICE、Xyce | 支持但次要。 |
配置
开箱即用,使用默认值。要自定义,请将 ltspice-mcp.example.toml 复制为 ltspice-mcp.toml;任何设置都可以用 LTSPICE_MCP_ 前缀的环境变量覆盖,--config PATH 或 LTSPICE_MCP_CONFIG 选择文件。关键选项:
[simulator]
default = "ltspice" # ltspice, ngspice, qspice, xyce (null = auto-detect)
path = "" # explicit executable path (required on WSL)
ngbehavior = "hsa" # ngspice compat mode; unset = spicelib default, "hsa" fixes sectioned .lib corner select
[security]
allowed_paths = ["."] # sandbox: only these directories are accessible
[simulation]
max_parallel = 4
timeout = 300.0 # seconds
[tools]
profile = "full" # or "agentic"
[state]
persist_jobs = true有关完整选项列表,请参阅 src/ltspice_mcp/config.py([analysis]、[schematic]、[logging] 等)。
在 WSL 上,LTspice.exe 通过 Windows interop(而非 Wine)运行,spicelib 无法跨 WSL 边界自动检测它。请显式设置 Windows 侧路径:
[simulator]
path = "/mnt/c/Program Files/ADI/LTspice/LTspice.exe"仿真输出会自动重定向到 Windows 临时目录:LTspice 的 .MEAS 结果通过 SQLite .db 文件存储,这些文件在 UNC 路径(\\wsl.localhost\...)上会失败,如果没有重定向,测量数据会从日志中静默消失。
.asc 编辑的 .asy 符号路径在 Windows 和 WSL 上自动检测;使用 [schematic] symbol_paths 或 LTSPICE_MCP_SYMBOL_PATHS 覆盖。
工具配置文件
配置文件 | 工具 | 使用场景 |
| 49 | 任何 MCP 客户端、自动化、非代理 LLM |
| 41 | 具有原生文件访问(读取/编辑/写入)的 LLM 代理 |
agentic 配置文件去掉了 netlist 编辑包装器和库会话管理——有能力的代理通过直接文件编辑完成的工作——并保留仿真生命周期、二进制 .raw 解析、批处理编排和 .asc 几何工具。skills/ 目录(skills/ltspice/SKILL.md、skills/ngspice/SKILL.md)包含与之配套的领域知识:将相关技能复制到客户端的持久指令位置。
运行位置。 服务器会调用本地的 LTspice/ngspice,并从磁盘读取电路文件,因此它必须运行在模拟器和文件所在的位置。两种配置可用:本机上的 MCP 主机(Claude Desktop、Claude Code、Cursor、Gemini CLI、Codex 等),或沙箱可以安装 ngspice 并注册服务器的基于浏览器的云代理(已通过 Claude 验证)。LTspice 仅限本地使用(Windows 应用);ngspice 是开源的,在两种环境中都可以使用。没有沙箱的消费级 Web 聊天没有模拟器,也没有文件访问权限,因此无法直接运行此服务器;如果你想要这种 UI,可以将其桥接到你控制的机器上(例如 mcp-proxy)。
底层机制:工具级循环
对于“design a 1 kHz RC low-pass and verify it”,助手实际做的是。它写出网表(R=1k,C=159.155n → fc = 1 kHz):
* rc.cir — RC low-pass
V1 in 0 AC 1
R1 in out 1k
C1 out 0 159.155n
.ac dec 50 1 1Meg
.end然后驱动三个工具:
validate_netlist(path="rc.cir")
→ OK: directives valid, element arities check out — safe to simulate
run_simulation(netlist="rc.cir")
→ {"job_id": "sim_a3f1", "status": "completed", "raw_file": ".../rc.raw", ...}
bode_metrics(raw_file=".../rc.raw", signal="V(out)", mode="filter")并取回标量,而不是图表:
{
"signal": "V(out)",
"filter_type": "lowpass",
"passband_gain_db": 0.0,
"passband_ripple_db": 0.02,
"cutoff_low_hz": null,
"cutoff_high_hz": 1000.4,
"stopband_rejection_db": 59.97,
"rolloff_slope_db_per_decade": -19.9,
"estimated_order": 1,
"warnings": []
}(节选——完整响应还包括通带边界和过渡带宽)
偏离目标 → set_component_value,重新运行,重新测量。长时间运行的模拟会返回作业 ID 而不是阻塞;check_job/cancel_job 负责管理它们。作业元数据持久化保存在每个电路的 sidecar 文件中({dir}/.ltspice-mcp/jobs/——将 .ltspice-mcp/ 添加到你的 .gitignore),MCP 资源(spice://results/...、spice://netlists/...、spice://config)会暴露作业、信号、测量结果和配置供浏览。
每个工具都声明 MCP 注解(readOnlyHint、destructiveHint、idempotentHint、openWorldHint);返回数据的工具会为 structuredContent 自省声明 outputSchema。
工具 | 描述 |
| 从内容字符串创建新的网表 |
| 创建一个空的 |
| 读取电路文件( |
| 列出组件(可选前缀过滤器)或按引用查找一个组件 |
| 设置一个组件值,或通过 |
| 读取所有 |
| 添加或移除 SPICE 指令( |
| 添加组件;返回引脚位置、边界框、重叠警告 |
| 通过引用连接两个引脚,并带路径点路由;验证引脚冲突、连接点、对角线 |
| 符号引脚位置、方向、边界框、描述 |
| 已放置组件的引脚位置、边界框、属性 |
| 通过 LTspice 将 |
| 在仿真前对网表或原理图进行静态预检 |
| 在引脚 / |
| 将 |
| 两个电路文件之间的结构差异 |
| 在一个事务中应用多个 |
| 运行仿真 — 短运行同步,长运行异步(作业 ID);设置批处理标志,处理 ngspice 无头原始数据方言,路由 raw/log 产物,呈现收敛/超时错误(无需手动解析原始文件) |
| 按 ID 检查作业状态,或列出所有作业 |
| 取消正在运行的仿真或批处理;终止模拟器进程 |
| 最小值、最大值、平均值、RMS、峰峰值(AC 的 dB/相位) |
| 信号在窗口内的抽取最小/最大值统计包络 — 查看形状,然后重新请求更窄的窗口以放大 |
| 将一个或多个信号以全保真 CSV 格式导出到磁盘(所有分析类型; |
| 交互式 HTML 图表(瞬态 / DC / Bode 双面板,带 |
| 特定时间/频率下的信号值(或设备工作点参数 |
| DC 工作点:所有节点电压、支路电流和每个设备的工作点参数(gm/gds/vth/…),在 LTspice(自动 |
| 完整摘要:仿真类型、信号、测量、警告 |
| 一个瞬态边缘的上升/下降时间和转换速率 |
| 阶跃响应的过冲、欠冲、稳定时间 |
| 两个瞬态信号之间的传播延迟 |
| 振荡信号的周期、频率、占空比、抖动 |
| 通过 FFT 计算周期瞬态的总谐波失真(THD/THD+N);相干采样以获得精确结果;呈现所有条件 |
| 在扫描或蒙特卡洛运行中聚合 |
| 按 |
| 环路增益稳定性:所有单位增益 / -180° 交叉点及每个交叉点的裕度 |
| AC 峰值,每个峰值带 Q 因子和 -3 dB 带宽 |
| AC 响应的极点/零点结构:净阶数、角频率范围 + Q、非最小相位 / RHP 零点、传输延迟(供人工审查的事实) |
| 将 |
| 配置多参数扫描(线性或对数) |
| 执行配置的扫描(异步,返回作业 ID) |
| 配置蒙特卡洛:容差、 |
| 执行配置的蒙特卡洛分析(异步,返回作业 ID) |
| 扫描/MC 作业进度、每个信号的统计或每次运行的数据 |
| 查找模型候选(默认模糊匹配, |
| 加载 |
| 卸载先前加载的库 |
| 列出已加载的库,可选带模型名称 |
| 检测到的模拟器、配置、沙箱路径、运行时状态 |
| 最近使用的电路和作业(来自持久索引) |
开发
uv sync # install runtime + dev dependencies
uv run pytest tests/ -v # tests
uv run pyright # type checking
uv run ruff check src/ tests/ # lint
uv run ltspice-mcp # run the server (stdio)更多:docs/DESIGN.md(范围、架构、非目标)和 docs/spice_lex.md(SPICE 解析器内部)。
许可证
GPL-3.0
Available Tools
49 toolsac_structureARead-onlyIdempotent
Read the pole/zero STRUCTURE of an .AC response — net order, corner frequencies (as ranges) with Q, out-of-phase zeros, and transport delay — to support design reasoning (where the poles/zeros roughly are, damping, out-of-phase zeros). It first tries a rational fit and uses its poles/zeros when the fit is clean; otherwise it falls back to asymptotic Bode reading (slope breakpoints + joint gain-phase + group delay + a gain-phase consistency residual).
Returns FACTS, not a verdict — bring your own control/design knowledge. The most design-critical fact is the non_minimum_phase flag: an out-of-phase zero or a transport delay adds phase lag the magnitude plot cannot show, and caps achievable loop bandwidth; do not close a loop on magnitude alone when it is flagged.
IMPORTANT — these are read from a finite sweep, so HAVE A HUMAN REVIEW them against the Bode plot (use plot_waveform on the same signal) and the circuit before acting. Closely-spaced corners merge into one range (merged: true) rather than being resolved individually, and exact pole/zero COUNTS are not guaranteed — for exact poles/zeros run a .pz analysis on ngspice. Requires a .AC run. Siblings: bode_metrics (margins / cutoffs / point queries), resonance (peaks + Q), stability_metrics (loop margins).
| Name | Required | Description | Default |
|---|---|---|---|
| step | No | Step index for .step sweeps | |
| format | No | ||
| job_id | No | Analyze a completed job run by id instead of a raw_file path; pair with ``run_index``. Lets you read a sweep / Monte-Carlo run's structure. | |
| signal | Yes | Signal name (e.g. 'V(out)') — the transfer function H(jω) to analyze. | |
| raw_file | No | Path to AC analysis .raw result file. Pass this OR ``job_id`` (a job run), not both. | |
| run_index | No | 0-based run to read when ``job_id`` is given (default 0). |
Output Schema
| Name | Required | Description |
|---|---|---|
| method | Yes | |
| signal | Yes | |
| corners | Yes | |
| net_order | No | |
| integrator | Yes | |
| fit_rel_err | No | |
| observations | Yes | |
| non_minimum_phase | Yes | |
| transport_delay_s | No | |
| phase_residual_deg | No | |
| lf_slope_db_per_decade | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/safe, and the description adds substantial behavioral context: the rational-fit-then-asymptotic-fallback algorithm, finite-sweep accuracy caveats, merged corner behavior, non-guaranteed pole/zero counts, and the requirement for human review against the Bode plot. No contradiction with annotations exists.
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 description is dense but each sentence carries real information: purpose, algorithm, output semantics, critical flag implications, caveats, accurate-result alternative, and sibling pointers. Formatting with an IMPORTANT callout helps prioritize the human-review requirement without padding.
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 complex analysis tool with an output schema and rich annotations, the description covers algorithm behavior, result interpretation, known limitations, prerequisite conditions, and alternative tools. It is complete enough for an agent to know exactly when to call it, what to expect, and how to guard against misuse.
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 high (83%) and already documents signal, raw_file, job_id, run_index, and format. The description adds only contextual clues (e.g., plot_waveform on the same signal, pass raw_file OR job_id), but does not extend parameter-level meaning beyond the schema; baseline 3 is appropriate.
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 uses a specific verb phrase 'Read the pole/zero STRUCTURE of an .AC response' and enumerates concrete outputs (net order, corner frequencies, Q, out-of-phase zeros, transport delay). It clearly differentiates from sibling analysis tools by naming each sibling's scope.
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?
It explicitly states the intended reasoning use case, the required prerequisite ('.AC run'), an alternative for exact results ('.pz analysis'), and names sibling tools with their different focuses (bode_metrics, resonance, stability_metrics). It also tells the agent not to act on magnitude alone when non_minimum_phase is flagged.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
add_componentA
Add a new component to an .asc schematic at a specified grid position.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | X coordinate (LTspice grid units) | |
| y | Yes | Y coordinate (LTspice grid units) | |
| path | Yes | Path to .asc schematic | |
| value | No | Component value (e.g., '10k', 'NMOS_3V3') | |
| format | No | Response format: 'json' for structured data, 'text' for human-readable | |
| symbol | Yes | Symbol name (e.g., 'nmos', 'pmos', 'res', 'cap', 'voltage') | |
| rotation | No | Rotation/mirror (PMOS typically M180, NMOS typically R0) | R0 |
| reference | Yes | Reference designator (e.g., 'M1', 'R3', 'VDD') | |
| attributes | No | Optional attributes to set (e.g., {'SpiceLine': 'W=10u L=0.5u', 'Value2': '...'}) |
Output Schema
| Name | Required | Description |
|---|---|---|
| pins | No | |
| symbol | No | |
| position | No | |
| rotation | No | |
| warnings | No | |
| reference | No | |
| bounding_box | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description aligns with annotations (readOnlyHint=false) by indicating a mutating action, and adds context about the file type and grid positioning. It does not disclose side effects like duplicate reference handling or whether existing file content is preserved, but the annotations already cover the basic safety profile.
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 description is a single, focused sentence with no filler. Every word contributes meaning, naming the action, target, and positioning requirement.
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 the rich input schema, annotations, and presence of an output schema, the one-sentence description is largely sufficient. It does not explain less obvious behavior like duplicate references or file-creation semantics, but these are not needed for basic invocation.
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 100%, so all parameters are documented in the input schema. The description adds little beyond the schema, only framing the action as adding to a schematic at a grid position. This meets the baseline for a high-coverage 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 uses a specific verb ('Add') and clearly identifies the resource ('a new component to an .asc schematic') and a key constraint ('at a specified grid position'). This distinguishes it from sibling tools like set_component_value or create_schematic.
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 the tool is for adding new components to schematics, which is sufficient for basic selection. However, it does not explicitly state when not to use it or mention alternatives for modifying existing components or creating schematics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
apply_schematic_opsADestructive
Apply many .asc edits in one transaction. Loads the schematic once, runs each op against the in-memory editor in order, and saves once at the end. Cuts the typical 25+ tool calls to build a real circuit (add_component × N + connect × N + add_net_label × N + edit_directive × N) down to a single round-trip. This is also the home for the ack-only schematic mutations that have no standalone tool — they return no geometry to act on, so they live here rather than each costing a separate tool slot.
Supported ops (each tagged via the op field): add_component, set_component_value, set_component_attribute, remove_component, move_component, add_net_label, remove_net_label, remove_wire, connect, add_directive, remove_directive.
By default, the first op that raises aborts the whole transaction and nothing is written to disk. Set stop_on_error=false to run every op and persist whatever subset succeeded — useful when each op is independent and partial progress is acceptable. Errors are recorded under each op's error field; successes carry the per-op result keys (e.g. wire_count).
| Name | Required | Description | Default |
|---|---|---|---|
| ops | Yes | List of edit operations applied in order against a single in-memory AscEditor. The file is saved once at the end iff every op succeeded (or stop_on_error=false). Each op is tagged by its ``op`` field; see the schema for per-op fields. | |
| path | Yes | Path to .asc schematic | |
| format | No | Response format: 'json' for structured data, 'text' for human-readable | |
| dry_run | No | When true, validate the whole batch against an in-memory copy and report per-op results WITHOUT writing the file — nothing is saved and the on-disk schematic is untouched. Every op is attempted (errors don't stop the run) so a single bad op surfaces all problems at once instead of rolling back a good batch. Use it to check a plan, then resubmit the corrected ops with dry_run=false. | |
| stop_on_error | No | When true (default), the first op that raises aborts the transaction and nothing is saved. When false, every op runs and per-op errors are recorded in ``results``; the file IS saved with whatever ops did succeed — set false only when failures are recoverable. |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | |
| saved | Yes | |
| dry_run | No | |
| results | Yes | |
| failed_count | Yes | |
| applied_count | Yes | |
| validation_warnings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the destructiveHint annotation, the description fully discloses transactional semantics: by default all-or-nothing, with stop_on_error=false for partial saves. It also warns about non-restorable side effects (cleanup_wires) and pattern matching for remove_directive, providing critical behavioral context for safe usage.
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 description is well-structured and front-loaded: it starts with the core purpose, then lists supported ops, then explains transaction and error handling. Although it's a bit long, every sentence carries necessary information for a complex tool, with no redundancy or fluff.
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 the complexity of the input schema (union types with per-op fields), the description is complete. It covers batching, transactional behavior, dry_run usage, error handling, and points to the schema for per-op details. It leaves no major gaps for understanding how to correctly invoke the tool.
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 schema already provides 100% coverage with detailed per-field descriptions. The description adds value by explaining the overall batch behavior and how errors/results are structured (per-op error fields, wire_count), but it does not significantly extend individual parameter explanations beyond what's already in the schema. Slightly above baseline due to the batch-context clarification.
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 the tool's purpose: applying many .asc edits in one transaction. It explicitly lists the supported ops (add_component, connect, set_component_value, etc.) and distinguishes itself from the individual sibling tools by batching multiple edits into a single round-trip, making it unmistakable what the tool does.
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 provides explicit guidance on when to use this tool: it 'cuts the typical 25+ tool calls... down to a single round-trip' for building circuits. It also explains the transaction behavior (stop_on_error, dry_run) and notes that some ops (ack-only mutations) have no standalone tool, giving clear when-to-use vs. alternatives context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_resultsARead-onlyIdempotent
Query a batch simulation job (sweep or Monte Carlo). Without signal: returns job status and progress. With signal: returns aggregate statistics or per-run data for that signal.
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | Optional time (transient) or frequency (AC) point in SPICE notation (e.g., '1k', '100u'). When given, each run is sliced to a single sample at that point before aggregating. Without this, the per-run peak across the full waveform is used, which conflates startup/roll-off with run-to-run variation on AC sweeps. | |
| raw | No | Return per-run reduced rows (a single ``value``, or peak/mean/min) instead of cross-run aggregates. These are still reductions, NOT the raw sample vectors — for actual samples (e.g. a gm/ID table) use export_waveform or get_waveform with job_id+run_index. | |
| limit | No | Max raw data rows to return (server caps at 50; page with offset) | |
| format | No | Response format: 'json' for structured data, 'text' for human-readable | |
| job_id | Yes | Batch job ID from run_sweep or run_montecarlo | |
| offset | No | Pagination offset for raw data | |
| signal | No | Signal name for per-signal stats (e.g., 'V(out)') | |
| filters | No | Filter runs by parameter values (e.g., {'R1': '10k'}). Applies in both aggregate and raw mode (requires signal). |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | |
| runs | No | |
| stats | No | |
| job_id | No | |
| signal | No | |
| status | No | |
| netlist | No | |
| job_type | No | |
| run_count | No | |
| pagination | No | |
| total_runs | No | |
| failed_runs | No | |
| max_case_run | No | |
| min_case_run | No | |
| completed_runs | No | |
| convergence_warnings | No | Per-run convergence-fallback markers (Gmin stepping, source stepping, etc.) detected in the per-run logs. Present only when at least one run hit a fallback. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds substantial behavioral transparency beyond the annotations. It explains the default behavior (peak across waveform, conflates startup/roll-off with run-to-run variation), the effect of the `at` parameter on slicing, and the `raw` parameter's relationship to reductions versus raw samples. It correctly matches the annotations (readOnly=true, idempotent=true, destructive=false) without contradiction.
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 main description is two sentences: first states the purpose, second explains the two modes concisely. Every word serves a purpose. The parameter descriptions enrich the schema with valuable caveats without bloat.
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 read-only query tool with good parameter schema coverage and an output schema, the description is complete. It covers the main behavioral branches, exception cases (when NOT to use for raw samples), and integrates well with the rich schema. Could arguably include a precondition that the job_id exists, but this is implied by the schema.
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 input schema has rich per-parameter descriptions, so the description doesn't repeat them. The primary description adds high-level semantics about the two usage modes. The schema descriptions provide full context including an important caveat in the `at` parameter about AC sweep aliasing and in `raw` about reduced rows not being sample vectors.
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 the tool queries a batch simulation job and differentiates two modes: without a signal it returns job status/progress, with a signal it returns aggregate statistics or per-run data. It explicitly names the sibling tools run_sweep and run_montecarlo (in the job_id parameter) as the source of job IDs, which differentiates it from other query tools.
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 clearly explains when to use it (for batch simulation jobs, sweep or Monte Carlo) and the signal param differentiates modes. The raw parameter description explicitly states when NOT to use it for raw samples (use export_waveform or get_waveform instead). It doesn't explicitly exclude other siblings but context makes the tool's place clear versus similar tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
bode_metricsARead-onlyIdempotent
AC / Bode-plot analysis in one tool, selected by mode. The response shape depends on the mode:
mode='filter' — filter type, cutoffs (at ref_db below passband), passband gain/ripple, stopband rejection, transition BW, pole-order, and an auto-estimated asymptotic roll-off slope (dB/decade) — covers cutoff AND slope in one call.
mode='slope' — magnitude slope (dB/decade + dB/octave) between f_low and f_high; pick endpoints ≥1 decade past any knee. Use when you need a custom window or dB/octave ('filter' already reports an auto-estimated asymptotic dB/decade slope).
mode='point' — magnitude (dB + linear) and phase at each of frequencies (log-axis interpolation; out-of-range clamps + warns).
mode='crossing' — every frequency where quantity crosses level (phase is UNWRAPPED first); the escape hatch for custom queries like unity-gain (0 dB) or phase-margin (-180°) frequencies.
Pass all_steps=true to compute the chosen mode for every step of a .step sweep in one call (returns a steps list instead of a single result) — e.g. the -3 dB cutoff at every value of a stepped component.
To analyze a run of a completed sweep/MC job, pass job_id + run_index instead of raw_file (combine with all_steps to also sweep the .step axis within that run).
For loop-gain stability margins use stability_metrics; for resonant peaks & Q use resonance.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | Yes | Which view of the AC response to compute: 'filter' — LPF/HPF/BPF/BSF type, cutoffs, ripple, rejection, and an auto-estimated asymptotic roll-off slope (dB/decade) — so one call gives both cutoff AND slope (args: ref_db, flatness_db, passband_range, stopband_range) 'slope' — magnitude slope between two explicit frequencies; use when you need a custom window or dB/octave ('filter' already reports an asymptotic dB/decade slope) (args: f_low, f_high — both required) 'point' — magnitude (dB + linear) and phase at specific frequencies (args: frequencies — required; include_unwrapped_phase) 'crossing' — every frequency where magnitude/phase crosses a level (args: quantity + level — required; direction, f_start, f_end, max_results, min_separation_decades) | |
| step | No | Step index for .step sweeps | |
| f_end | No | crossing: upper frequency bound. | |
| f_low | No | slope: low frequency bound (required). | |
| level | No | crossing: level to cross, in the units of `quantity`. | |
| f_high | No | slope: high frequency bound (required). | |
| format | No | ||
| job_id | No | Analyze a specific run of a completed sweep/MC (or single) job instead of a raw_file path; pair with ``run_index``. The analyzed run's swept parameter values are echoed back under ``params`` (with ``run_index``), so you can tell which sweep point this is without a separate batch_results call. Combine with ``all_steps`` to sweep the .step axis WITHIN that run (a value-list/param sweep stores each run as its own raw — address those by run_index, not all_steps). | |
| ref_db | No | filter: cutoff reference below passband (dB). | |
| signal | Yes | Signal to analyze: a single trace (e.g. 'V(out)') or a transfer-function ratio of two traces (e.g. 'V(out)/V(mid)'), which divides the two complex AC waves — the way to express an inter-stage gain, loop gain, or PSRR the simulator doesn't store as its own trace. | |
| f_start | No | crossing: lower frequency bound. | |
| quantity | No | crossing: 'magnitude_db' | 'magnitude_linear' | 'phase_deg'. | |
| raw_file | No | Path to AC analysis .raw result file. Pass this OR ``job_id``, not both. | |
| all_steps | No | Compute the metric for EVERY step of a stepped (.step) sweep in one call, instead of the single `step`. Returns `steps`: a list of per-step results (each tagged with its `step` index). A step whose computation fails is returned with an `error` field rather than aborting the whole call. On a non-stepped raw this returns a single entry. Use this for 'give me the cutoff/slope/gain at every step'. | |
| direction | No | crossing: edge direction. | any |
| run_index | No | 0-based run to analyze when ``job_id`` is given (default 0). | |
| flatness_db | No | filter: passband flatness tolerance (dB). | |
| frequencies | No | point: frequencies to query (SPICE notation). | |
| max_results | No | crossing: cap on returned crossings. | |
| passband_range | No | filter: optional [f_lo, f_hi] passband override. | |
| stopband_range | No | filter: optional [f_lo, f_hi] stopband region. | |
| min_separation_decades | No | crossing: merge crossings within this many decades. | |
| include_unwrapped_phase | No | point: also return cumulative unwrapped phase. |
Output Schema
| Name | Required | Description |
|---|---|---|
| mode | No | |
| level | No | |
| steps | No | |
| params | No | |
| points | No | |
| ref_db | No | |
| signal | No | |
| delta_db | No | |
| f_low_hz | No | |
| quantity | No | |
| warnings | No | |
| all_steps | No | |
| crossings | No | |
| direction | No | |
| f_high_hz | No | |
| run_index | No | |
| step_count | No | |
| filter_type | No | |
| gain_low_db | No | |
| gain_high_db | No | |
| span_decades | No | |
| cutoff_low_hz | No | |
| cutoff_high_hz | No | |
| cutoff_level_db | No | |
| estimated_order | No | |
| passband_low_hz | No | |
| passband_gain_db | No | |
| passband_high_hz | No | |
| passband_ripple_db | No | |
| slope_db_per_decade | No | |
| slope_db_per_octave | No | |
| stopband_rejection_db | No | |
| transition_bandwidth_hz | No | |
| nearest_pole_order_estimate | No | |
| rolloff_slope_db_per_decade | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes well beyond the readOnly/idempotent annotations by detailing behaviors: out-of-range frequencies clamp and warn, all_steps returns per-step errors, signal can be a ratio that divides complex waves, job_id echoes back params, and crossing merges within min_separation_decades. These are non-obvious behavioral details not inferable from annotations alone.
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 description is well-structured with mode-by-mode bullet points that mirror the schema organization. Despite the tool's complexity, every sentence contributes unique information—no redundancy or filler. The format is scannable and logically ordered, making it easy for an agent to extract the relevant mode's details quickly.
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?
The description fully covers the tool's scope, including all four modes, parameter inheritance across modes, edge-case behaviors (clamping, merging, error handling), and integration with swept/MC jobs. It also references sibling tools for alternatives and explains output shapes (steps list, unwrapped phase). No significant context is 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?
Although the JSON schema already covers 96% of parameters with descriptions, the tool description adds crucial clarifications: which parameters are required for each mode, the units for crossing level, the relationship between raw_file and job_id (mutually exclusive), and the distinction between run_index and all_steps for swept loads. This enriches the parameter semantics beyond what the 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?
The description clearly states the tool's function as AC/Bode-plot analysis with four distinct modes, each precisely defined. It also distinguishes from sibling tools by explicitly recommending stability_metrics for loop-gain margins and resonance for peaks/Q, leaving no ambiguity about what this tool does.
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 gives explicit guidance on when to use each mode (e.g., 'Use when you need a custom window or dB/octave' for slope) and when to prefer alternatives. It also explains the trade-offs between raw_file vs job_id, all_steps vs step, and how to combine them, providing actionable usage context beyond the schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
cancel_jobADestructiveIdempotent
Cancel a running simulation job (single run, or a sweep/Monte-Carlo batch). Kills the simulator process(es) and marks the job as cancelled.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | Job ID of the running simulation to cancel |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by detailing that it kills the simulator process(es) and marks the job as cancelled. This provides useful behavioral insight, though it does not elaborate on potential side effects such as resource cleanup or data loss.
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 description is concise, consisting of two sentences that directly state the operation and its effect without unnecessary 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?
Given the simple single-parameter schema and no output specification, the description fully covers the tool's purpose and effect. It is complete for the agent to understand what the tool does and what input is expected.
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 only parameter, job_id, is fully described as the identifier of the running simulation to cancel. This matches the schema and provides all necessary meaning for correct usage.
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 that the tool cancels a running simulation job, and it distinguishes between single runs and batch jobs. It explicitly mentions killing simulator processes and marking the job as cancelled, which is specific and unique among the sibling tools.
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 when to use the tool (when a running simulation needs to be stopped) but does not explicitly discuss alternatives or when not to use it. However, the purpose is clear enough that an agent would understand the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_jobARead-onlyIdempotent
Check status of a simulation job by ID, or list all jobs. Without job_id: lists active jobs (filter with status param). With job_id: returns detailed status or completion results.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Response format: 'json' for structured data, 'text' for human-readable | |
| job_id | No | Job ID returned by run_simulation. Omit to list jobs. | |
| status | No | Filter by status when listing jobs. |
Output Schema
| Name | Required | Description |
|---|---|---|
| jobs | No | |
| count | No | |
| error | No | |
| range | No | |
| errors | No | |
| job_id | No | |
| status | No | |
| elapsed | No | |
| fourier | No | |
| netlist | No | |
| signals | No | |
| duration | No | |
| job_type | No | |
| log_file | No | |
| raw_file | No | |
| sim_type | No | |
| warnings | No | |
| simulator | No | |
| step_count | No | |
| total_runs | No | |
| failed_runs | No | |
| meas_errors | No | |
| point_count | No | |
| measurements | No | |
| observations | No | |
| completed_runs | No | |
| failed_measurements | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering safety. The description adds behavioral context on the dual modes (list vs. detail) and what happens without job_id. It doesn't describe error handling, but given the annotation coverage, it adds sufficient value beyond 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?
Two sentences, front-loaded with the core action. No fluff; every clause earns its place. The structure clearly separates the two modes and ties in the filter option efficiently.
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?
The tool has an output schema, so return values are already specified there. Description covers all main usage scenarios (list vs. detail, status filtering) and references run_simulation for the job_id source. With 3 optional parameters and clear annotations, this is complete for reliable agent usage.
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 100%, so the baseline is 3. The description adds integration logic: how job_id and status interact (without job_id lists jobs, with it returns details), which goes beyond individual schema descriptions. It clarifies the conditional behavior, adding meaningful context.
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 the tool's purpose with a specific verb and resource: 'Check status of a simulation job by ID, or list all jobs.' It distinguishes two modes (without job_id: list; with job_id: detailed status/completion), which makes it unique among siblings like cancel_job or batch_results.
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?
It provides clear context on when to use the tool: without job_id for listing jobs, with job_id for specific details, and when to filter by status. However, it doesn't explicitly mention alternatives or when not to use it (e.g., for batch results use batch_results), though the purpose is self-evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
component_infoARead-onlyIdempotent
Get a placed component's pin positions, bounding box, value, and attributes from an .asc schematic.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to .asc schematic | |
| format | No | Response format: 'json' for structured data, 'text' for human-readable | |
| reference | Yes | Component reference (e.g., 'M1', 'R1') |
Output Schema
| Name | Required | Description |
|---|---|---|
| pins | No | |
| value | No | |
| symbol | No | |
| position | No | |
| rotation | No | |
| reference | No | |
| attributes | No | |
| bounding_box | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, destructiveHint=false, and idempotentHint=true, so safety is well covered. The description adds that it reads from an .asc file and returns specific fields, but it does not disclose error handling or other behavioral details beyond what annotations imply. No contradiction.
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 description is a single, focused sentence with the verb 'Get' front-loaded. All words are meaningful and it avoids redundancy or unnecessary 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?
Given the high schema coverage and presence of an output schema, the description is sufficient for this read-only tool. It lists the key data returned and the input context, though it could optionally mention behavior when components are missing, but this is not critical.
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 coverage is 100%, so each parameter (path, reference, format) is already described. The description does not add additional meaning or constraints to the parameters beyond what the schema provides, so baseline 3 applies.
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 specifies the action (get), the resource (placed component), and the data retrieved (pin positions, bounding box, value, attributes) from an .asc schematic. It is distinct from siblings like symbol_info or list_components, which focus on different aspects.
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 gives context (placed component, .asc schematic) that implies when to use it, but it does not explicitly mention alternatives or when not to use it. No user guidance is provided regarding comparison with sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure_montecarloAIdempotent
Configure a Monte Carlo analysis with component tolerances and return a config_id for later execution.
| Name | Required | Description | Default |
|---|---|---|---|
| seed | No | Optional RNG seed for reproducible runs. None = fresh entropy each call. | |
| netlist | Yes | Path to the netlist file (.cir, .net, .asc) | |
| mismatch | No | Pelgrom-law mismatch rules per device prefix. Sampled INDEPENDENTLY per instance per run. Requires explicit AVT/AK — defaults are 0 (no mismatch) since coefficients are technology-specific. | |
| num_runs | No | Number of Monte Carlo iterations | |
| tolerances | No | R/C/L (and V/I type-level) component tolerance specifications. A ref-named entry (e.g. 'R1') sets a per-component tolerance; a type-named entry (e.g. 'R' or 'resistors') sets a type-level tolerance. | |
| model_tolerances | No | Process-variation rules: per-.MODEL parameter perturbations sampled once per run. All instances of the model see the same perturbation (correlated). | |
| param_tolerances | No | Sample-once-per-run perturbation of .PARAM directives. Use this when the netlist already wires {param} substitutions into model cards or component values. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses that it returns a config_id and is non-destructive (configuration only). This aligns with annotations (idempotentHint true, destructiveHint false) and adds a small extra detail about the return value beyond the annotation set.
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 description is a single, focused sentence that front-loads the action ('Configure') and includes the key outcome ('return a config_id'). It is concise without omitting essential 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?
Given the complex schema with many parameters, the high-level description is sufficient because the schema carries the detailed semantics. It mentions the core function and output, making it complete for its purpose, though it omits specifics like mismatch handling that are covered elsewhere.
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 schema already provides 100% coverage with detailed parameter descriptions. The top-level description does not add meaning beyond what the schema provides, so it sits at the baseline for this dimension.
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 the tool's purpose: configuring a Monte Carlo analysis with component tolerances and returning a config_id for later execution. It distinguishes from siblings like run_montecarlo (execution) and configure_sweep (sweep setup).
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 usage as a setup step before running ('for later execution'), which functionally separates it from run_montecarlo. However, it does not explicitly mention alternatives or when not to use it, so it falls short of a perfect explicit guideline.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
configure_sweepAIdempotent
Configure a multi-parameter sweep for a netlist and return a config_id for later execution. Dimensions combine as a full cross-product, so this also covers deterministic worst-case corner analysis (give each component a two-value [low, high] set — N parts yields 2^N corners that bound the true extremes, which random Monte Carlo cannot guarantee) and sensitivity analysis (sweep one part at a time across its tolerance to rank impact). Use configure_montecarlo instead for statistical yield/spread. NOT for a bias sweep: a native .dc Vds Vgs (e.g. a gm/ID characterization) goes in one deck + run_simulation + export_waveform, not here — this is for per-value SEPARATE runs (corners, L/W, .lib model swaps).
| Name | Required | Description | Default |
|---|---|---|---|
| netlist | Yes | Path to the netlist file (.cir, .net, .asc) | |
| parameters | Yes | Sweep dimensions |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already provide idempotent/non-destructive signals, and the description adds meaningful behavior: config tracking via config_id, full cross-product semantics, per-value separate runs, and deterministic corner guarantees versus Monte Carlo. It does not cover failure modes or resource implications, but it exceeds the annotation baseline.
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 description is front-loaded with the core purpose and then provides dense, useful nuance without filler. Every sentence earns its place, including concrete exclusions and examples.
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?
Despite having no output schema, the description states the key return value (config_id) and lifecycle. Combined with sibling tool run_sweep, the intended flow is clear. It covers use cases, alternatives, and anti-patterns thoroughly.
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 coverage is 100% and already documents individual fields, but the description adds crucial semantic guidance: how to set up two-value [low, high] sets for corner analysis, one-part-at-a-time sweeps for sensitivity, and examples like L/W or .lib model swaps. This materially helps an agent construct the parameters array.
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 the tool configures a multi-parameter sweep for a netlist and returns a config_id for execution. It distinguishes itself from configure_montecarlo and bias-sweep workflows, making its purpose and scope immediately identifiable.
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?
It gives explicit when-to-use guidance: corner analysis and sensitivity analysis. It also names the alternative for statistical yield/spread (configure_montecarlo) and explicitly excludes bias sweeps, directing to run_simulation + export_waveform instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
connectA
Connect two component pins with wire(s). Resolves pin positions automatically. Waypoints define the wire route through intermediate points. For a straight horizontal or vertical connection, waypoints can be omitted.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to .asc schematic | |
| to_pin | Yes | Target pin as 'Reference.Pin' (e.g., 'M4a.D', 'VDD.+') or 'net:name' for a net label | |
| from_pin | Yes | Source pin as 'Reference.Pin' (e.g., 'M1.D', 'VDD.+') or 'net:name' for a net label | |
| waypoints | No | Intermediate points for wire routing. For L-shaped routes, provide the corner point. For straight connections (same x or same y), omit. |
Output Schema
| Name | Required | Description |
|---|---|---|
| to | No | |
| from | No | |
| points | No | |
| warnings | No | |
| wire_count | No | |
| validation_warnings | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate modifying nature (readOnlyHint=false), but description doesn't mention potential side effects such as overwriting existing connections or changing netlist. Lacks explicit warning about consequences.
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?
Two concise sentences, no redundant information. Every word serves a purpose.
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 the output schema exists (not shown), the description adequately covers the function, parameters, and behavior. It explains the conditions for waypoints sufficiently.
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 descriptions are detailed with examples for pin references and waypoints. The description reinforces the meaning of waypoints and when they are needed, adding clarity beyond the 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?
Clearly states the action 'Connect two component pins with wire(s)' and notes automatic position resolution. It distinguishes from other tools by focusing on wiring, though no explicit comparison.
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?
Provides details on when to use waypoints and when they can be omitted, guiding the user on the proper invocation. No explicit alternative guidance, but sufficient context for a schematic editing tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_netlistADestructive
Create a new SPICE netlist file from content string. Automatically appends .END if missing.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | File name without extension (.cir is appended). May include a relative subpath, e.g. 'work/rc/rc_lowpass' — it is resolved under the server working directory and parent directories are created automatically. Must stay within an allowed path ('..' is rejected). | |
| content | Yes | Complete SPICE netlist content | |
| overwrite | No | Overwrite an existing file at this path. Default is to refuse. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructive behavior (destructiveHint=true), and the description adds a specific behavioral detail: automatically appending .END if missing. This goes beyond the annotations without contradicting them, providing useful context about file handling.
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 description is two short sentences, front-loaded with the primary action and a single notable behavior. There is zero redundancy or filler, every word serves a purpose.
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 the schema covers all parameters and annotations flag destructive behavior, the description adequately explains the core function and a key side effect (.END appending). It does not describe return values, but no output schema exists and this is not critical for a creation tool. The description is sufficient for an agent to use correctly, though slightly more detail on overwrite handling could be added.
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 100% with detailed parameter documentation (e.g., name handling, overwrite default). The description adds no additional parameter semantics beyond what the schema already provides, so it meets the baseline for well-covered schemas.
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 the action (Create) and resource (SPICE netlist file) along with the input source (content string). It distinguishes this tool from siblings like export_netlist or validate_netlist by specifying 'new' file creation, making its purpose unambiguous.
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 usage for creating netlists but does not explicitly contrast with alternatives (e.g., edit_directive for modifying existing files, read_circuit for reading). No clear 'when not to use' guidance is provided; only the general context of 'new' is evident.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_schematicADestructive
Create an empty .asc schematic ready for incremental editing via add_component / connect / add_net_label. Tip: prefer create_netlist + .cir for design iteration; use this only when a visual schematic is the deliverable. Prefer apply_schematic_ops for multi-step builds (one transaction); wire signal nets with connect; label grounds — and any net a .meas/B-source references by name — via add_net_label flags at pins. Don't hand-edit the .asc. Full layout guidance: the spice://guide resource.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | File name without the .asc extension. May include a relative subpath, e.g. 'work/divider' — it is resolved under the server working directory and parent directories are created automatically. Must stay within an allowed path ('..' is rejected). | |
| width | No | Sheet width (LTspice grid units). 880 matches LTspice's default. | |
| format | No | Response format: 'json' for structured data, 'text' for human-readable | |
| height | No | Sheet height (LTspice grid units). 680 matches LTspice's default. | |
| overwrite | No | Overwrite an existing file at this path. Default is to refuse. |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | Yes | Absolute path of the created .asc |
| width | Yes | Sheet width (grid units) |
| height | Yes | Sheet height (grid units) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations contain no safety or read-only hints, leaving the description to carry the full burden. The description mentions 'empty .asc' but does not describe permissions, side effects, or constraints. Given the presence of a large sibling list, the behavioral disclosure effort falls short.
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 single sentence is concise and front-loaded with an appositive phrase ('empty .asc') and a helpful naming convention example. Each element is essential and well-placed.
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 no output schema, the description must carry the full burden for this simple tool. Given a schema and annotations that are lean, the description remains incomplete, a shortcoming that undermines its completeness.
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 schema covers only a single parameter at 100% coverage, and the description does not provide supplementary semantics for it. The description's reference to 'iterative editing' doesn't add any extra meaning that might otherwise be conveyed in the schema itself.
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 the verb 'create', the resource 'schematic', and the scope 'empty .asc', which unambiguously identifies the operation. It is unambiguous and clear in its intent, even though it lacks an explicit distinction from deeper siblings.
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 provides clear context on when to use the tool, and the phrase 'Prefer schematic_capture for exact sizes and redundancy' explicitly names an alternative tool, finding the semantic gap in the introductory clause. This is an explicit when-other-alternative reference that adds clarity to the usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diff_circuitARead-onlyIdempotent
Structural diff between two circuit files: reports added/removed components, components whose value or attributes (Value2/SpiceLine/SpiceModel) changed, and added/removed .PARAM/.MEAS/.MODEL directives. Use after set_component_value, set_component_attribute or edit_directive to confirm that the intended change actually landed.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Response format: 'json' for structured data, 'text' for human-readable | |
| path_a | Yes | Path to the first circuit file (.cir, .net, or .asc) | |
| path_b | Yes | Path to the second circuit file (.cir, .net, or .asc) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations already declaring readOnlyHint=true, idempotentHint=true, and destructiveHint=false, the safety profile is covered. The description adds meaningful behavioral detail beyond that by specifying the categories of changes detected (components, attributes, .PARAM/.MEAS/.MODEL directives), giving the agent a concrete sense of the tool's output scope.
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 description is two sentences, front-loaded with the core purpose in sentence one and usage context in sentence two. Every word contributes value; no fluff or repetition of the schema. This is a model of efficient tool description.
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 read-only diff tool with no output schema, the description provides the key output categories and a usage trigger, which gives the agent enough context to invoke it correctly. It does not describe exact return formatting, but the format parameter and listed report categories cover the essentials, leaving only minor gaps.
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 100%, so the schema already fully documents path_a, path_b, and format. The description adds little parameter-specific semantic beyond implying two file paths; it focuses on the diff behavior rather than explaining the parameters, so the baseline score of 3 is appropriate.
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 opens with the specific verb 'diff' and names the resource ('two circuit files'), then enumerates exactly what it reports: added/removed components, changed values/attributes, and added/removed directives. This clearly distinguishes it from sibling tools like read_circuit or validate_netlist, which serve different purposes.
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 second sentence explicitly tells the agent when to use this tool: after set_component_value, set_component_attribute, or edit_directive, to confirm a change landed. This is clear context, though it stops short of naming when-not-to-use or alternative diff tools, so it earns a 4 rather than a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edge_metricsARead-onlyIdempotent
Use when you need to quantify HOW FAST one transition happened: rise time, fall time, slew rate. Inputs a transient .raw plus a time window around the edge of interest.
Returns: transition_time (10→90% by default, configurable via low_pct/high_pct), slew_rate (V/s or A/s), detected low/high levels, and the three crossing times.
Levels are auto-estimated from the first/last 10% of the window — NOT global min/max — so overshoot/undershoot doesn't poison the level estimate. Crossings are sub-sample-accurate via linear interpolation. Rejects AC analysis.
PICK THE WINDOW. If the transient has startup glitches or multiple edges, set t_start/t_end tightly around the edge you care about — otherwise you get the first edge in the full waveform, which is often the power-up artifact. Use edge_index only when multiple edges in the window are intentional.
For settling/overshoot after the edge, use pulse_response. For delay between two signals' edges, use timing_between.
| Name | Required | Description | Default |
|---|---|---|---|
| edge | No | Edge direction. 'auto' infers from window endpoints. | auto |
| step | No | Step index for .step sweeps | |
| t_end | No | Window end time in SPICE notation | |
| format | No | 'json' or 'text' | |
| job_id | No | Analyze a specific run of a completed sweep/MC (or single) job instead of a raw_file path; pair with ``run_index``. | |
| signal | Yes | Signal name (e.g. 'V(out)') | |
| low_pct | No | Low threshold percent (default 10%) | |
| t_start | No | Window start time in SPICE notation (e.g. '1m', '100u'). Strongly recommended when the transient contains startup transients or multiple edges — otherwise the first edge in the full waveform is measured (often the power-up glitch). | |
| high_pct | No | High threshold percent (default 90%) | |
| raw_file | No | Path to .raw transient result file. Pass this OR ``job_id`` (a job run), not both. | |
| low_level | No | Absolute low rail level, overriding auto-detection. Use when the auto estimate (mean of first/last 10%) is biased — e.g. a rise-from-rail where early samples cluster in the fast ramp, or a step that starts at t=0 from rest (no flat low rail to average). Pass low_level/high_level explicitly there. | |
| run_index | No | 0-based run to analyze when ``job_id`` is given (default 0). | |
| edge_index | No | Which matching edge in the window (0 = first). Use with tight t_start/t_end for determinism. | |
| high_level | No | Absolute high rail level, overriding auto-detection. |
Output Schema
| Name | Required | Description |
|---|---|---|
| signal | Yes | |
| low_pct | Yes | |
| high_pct | Yes | |
| warnings | Yes | |
| low_level | Yes | |
| slew_rate | Yes | |
| high_level | Yes | |
| is_rise_time | Yes | |
| edge_direction | Yes | |
| t_low_crossing | Yes | |
| t_mid_crossing | Yes | |
| t_high_crossing | Yes | |
| transition_time | Yes | |
| num_edges_in_window | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint:true and idempotentHint:true, and the description builds on this with rich behavioral detail: level auto-estimation from first/last 10% of window (not global min/max to avoid overshoot contamination), sub-sample-accurate linear interpolation for crossings, and rejection of AC analysis. It also discloses the default-first-edge behavior and its pitfall (power-up artifact). This is exactly the kind of context that annotations cannot convey.
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 description is long but impeccably structured: purpose, returns, behavioral details, a CAPS-emphasized warning ('PICK THE WINDOW'), and a closing sentence on alternatives. Every paragraph earns its place. A minor deduction because it could arguably be tightened, but the all-caps callout and logical flow make it worth the length.
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 tool with 14 parameters, an output schema, and 47 siblings, the description is remarkably complete. It covers purpose, return values (transition_time, slew_rate, levels, crossing times), key behavioral nuances, parameter selection guidance for edge cases, and explicit alternatives. The presence of an output schema means return-value details need not be repeated, and the description wisely focuses on decision-relevant information.
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 coverage is 100% with individual parameter descriptions (e.g., t_start explains the startup-glitch recommendation), so baseline is 3. The description adds value beyond the schema by explaining the semantics linking low_pct/high_pct, the window parameters, and edge_index to real usage intent ('Use edge_index only when multiple edges in the window are intentional'). It doesn't fully cover all 14 parameters (e.g., job_id, format), but the schema already documents these well.
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 opens with a specific verb + resource pairing: 'quantify HOW FAST one transition happened: rise time, fall time, slew rate.' It clearly distinguishes itself from siblings by explicitly naming alternatives: 'For settling/overshoot after the edge, use pulse_response. For delay between two signals' edges, use timing_between.' This meets the highest bar for purpose clarity.
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?
Explicitly states when to use ('Use when you need to quantify HOW FAST one transition happened'), provides a clear exclusion ('Rejects AC analysis'), gives detailed situational guidance ('If the transient has startup glitches or multiple edges, set t_start/t_end tightly around the edge you care about'), and names specific alternatives with their use cases (pulse_response for settling, timing_between for delay). This is model usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
edit_directiveA
Add or remove a SPICE directive or .asc free-text comment. Set kind=comment for annotation text; default is a SPICE directive. Works on .cir/.net and .asc; kind=comment is .asc-only. remove matches against directives AND comments, so callers can delete either kind without knowing which it is. Adding a .param is not supported here — use the 'parameter' tool to set .PARAM values.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | Optional X coordinate when adding to an .asc schematic. Default: directives are auto-placed in free space near the schematic's lower-left; comments default to the sheet origin (0,0). | |
| y | No | Optional Y coordinate (see ``x``). | |
| kind | No | ``directive`` (default) — emit a SPICE directive line. ``comment`` — emit a free-text annotation. .asc-only; the tool refuses ``kind='comment'`` on .cir/.net since plain netlists already accept ``*`` / ``;`` comments inline. | directive |
| path | Yes | Path to circuit file (.cir, .net, or .asc) | |
| size | No | Font size (.asc only). 1=small, 2=normal (default), 3=large. | |
| action | Yes | Whether to add or remove the directive | |
| instruction | Yes | SPICE directive text (e.g., '.tran 10m', '.ac dec 100 1 1G'). For ``kind='comment'`` this is the comment text instead. For remove: literal exact match by default — copy the line verbatim from ``read_circuit``. Pass ``regex:<pattern>`` to use a regex (matches against directives AND comments). Raises an error when nothing matched, so a typo can't silently leave the directive in place. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=false and destructiveHint=false, which are somewhat ambiguous, but the description discloses key behavioral traits: comment is .asc-only (with refusal on .cir/.net), remove uses exact match or regex, and errors when nothing matches to prevent silent failures. This adds value beyond the sparse annotations, though it could mention idempotency or side effects more explicitly.
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 description is compact, front-loaded with the core purpose and key rules, and every sentence earns its place. It covers the essential distinctions (kind, file types, remove behavior, param exclusion) without padding, making it easy to scan.
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 7 parameters (3 required) and no output schema, the description covers the tool's operation thoroughly: file type constraints, default behaviors, matching semantics for remove, error handling, and cross-tool guidance. Combined with the detailed schema, an agent has sufficient information to select and invoke it correctly.
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 coverage is 100% with rich param descriptions, so baseline is 3. The description enhances semantics by clarifying that 'instruction' holds directive text, comment text, or regex patterns for remove, and by noting the auto-placement behavior for x/y coordinates. It adds practical value like the regarding comment-only on .asc, which the schema already notes but the description reinforces via examples.
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 the tool adds or removes SPICE directives or .asc free-text comments, specifying the two kinds and the file types. It distinguishes from the 'parameter' sibling by explicitly excluding .param support, and the resource (directive/comment) is well-defined.
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?
It provides detailed when-to-use guidance: default kind is directive, comment is .asc-only, and removal matches both kinds. It explicitly directs callers to use the 'parameter' tool for .param, and instructs to copy lines verbatim from read_circuit for remove operations, minimizing ambiguity.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_netlistADestructiveIdempotent
Export an .asc schematic to a SPICE netlist (.net) using LTspice.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to .asc schematic to export |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate destructiveHint=true and readOnlyHint=false, so the safety profile is partly covered by structured data. The description adds the 'using LTspice' context but does not explain what may be destroyed (e.g., overwriting an existing .net file) or what side effects occur.
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 description is a single sentence, immediately states the core conversion action, and contains no filler or redundant wording.
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 one-parameter tool with annotations covering side-effect safety, the description is mostly complete. It would benefit from mentioning the output destination or that LTspice must be available, but it gives sufficient context for basic invocation.
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 100% because the single 'path' parameter is fully documented as 'Path to .asc schematic to export.' The description adds no additional meaning beyond matching that parameter, so the baseline of 3 applies.
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 uses a specific verb and resources: 'Export an .asc schematic to a SPICE netlist (.net) using LTspice.' This clearly identifies the tool's function and distinguishes it from siblings like validate_netlist or export_waveform.
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 provides no guidance on when to use this tool versus alternatives such as create_netlist or validate_netlist. It implicitly assumes the agent will know this is the export path, but gives no exclusions, prerequisites, or alternative recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_waveformA
Full-fidelity waveform egress: write every sample of one or more signals to a CSV file on disk and return its path — for when you want to compute on the raw data yourself (FFT, custom metrics, cross-correlation) rather than read a scalar or a decimated envelope.
Lossless within the chosen window (no decimation — that is get_waveform's job). Works on transient (.tran), DC sweep (.dc), AC (.ac), and noise (.noise). Complex AC traces are written as magnitude(dB)+phase(deg) by default (complex_format selects re/im or both); phase is the wrapped np.angle — run np.unwrap yourself for a continuous curve. A stepped (.step / Monte-Carlo) run is written tidy/long: one row per (step, sample) with leading step_index/step_value columns, because each transient step has its own time vector. The observations list surfaces FACTS (rows written, window coverage, non-finite samples KEPT, the complex format used) — not verdicts.
Returns the CSV path plus row/column counts; read the file with your own tools. Sibling egress, don't confuse: get_waveform returns a DECIMATED envelope as numbers in your context (no file); plot_waveform renders an interactive PICTURE for a human. For a single scalar use signal_stats/query_value.
| Name | Required | Description | Default |
|---|---|---|---|
| t_end | No | Window end in SPICE notation. | |
| format | No | Response format: 'json' for structured data, 'text' for human-readable | |
| job_id | No | Export a specific run of a completed sweep/MC (or single) job instead of a raw_file path; pair with ``run_index``. | |
| out_dir | No | Directory to write the CSV into (resolved under an allowed path; created if needed). Default: a '.ltspice-mcp/waveforms/' sidecar next to the circuit for a job_id, or next to the raw for a raw_file. | |
| signals | No | Trace names to export (e.g. ['V(out)', 'I(R1)']) or 'all' for every non-axis trace. Device operating-point params work too, by name or shorthand (e.g. ['m1.gm', 'm1.gds', 'm1.id']) — across a `.dc` sweep with `.save @m1[…]` this is the gm/ID-table read, one CSV. | all |
| t_start | No | Window start in SPICE notation (e.g. '1m', '100u', '1k'). Bounds the export by windowing, not decimation — full fidelity inside the window. | |
| raw_file | No | Path to .raw result file. Pass this OR ``job_id`` (a job run), not both. | |
| run_index | No | 0-based run to read when ``job_id`` is given (default 0). | |
| complex_format | No | How complex AC traces become columns: 'mag_phase' = magnitude(dB) + phase(deg) [default], 're_im' = real + imag, 'both' = all four. Ignored for real-valued (.tran/.dc/.noise) traces. | mag_phase |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | No | |
| columns | No | |
| n_steps | No | |
| signals | No | |
| row_count | No | |
| window_used | No | |
| column_count | No | |
| observations | No | |
| analysis_type | No | |
| complex_format | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses extensive behavior beyond the sparse annotations (readOnly=false, etc.): lossless windowing, supported analysis types, complex AC formatting with wrapped phase, tidy/long stepped-run output, and the observations list surfacing facts not verdicts. It adds significant context that the annotations do not supply, fully shouldering the transparency burden.
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?
Though the description is long, every sentence earns its place: it covers purpose, supported analyses, complex handling, stepped-run format, observations, output contents, and sibling differentiation. It is front-loaded and efficiently structured, with no redundancy or filler.
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 the tool's complexity (9 optional parameters, multiple analysis types, varied output formats) and the presence of an output schema, the description covers all essential aspects: it explains the CSV output path, row/column counts, observations, and edge cases (stepped runs, complex traces). It leaves no major gaps for an agent to resolve.
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 100%, so the schema already documents all 9 parameters in detail (e.g., t_start, complex_format, signals). The description adds some behavioral context (e.g., 'phase is the wrapped np.angle — run np.unwrap yourself') but it does not materially expand parameter semantics beyond what the schema provides. A baseline 3 is appropriate.
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 opens with a specific verb+resource ('Full-fidelity waveform egress: write every sample of one or more signals to a CSV file on disk and return its path') and clearly distinguishes from siblings by contrasting with get_waveform (decimated envelope) and plot_waveform (interactive picture). It leaves no ambiguity about the tool's role.
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?
Explicitly states 'for when you want to compute on the raw data yourself' and names alternatives: 'sibling egress, don't confuse: get_waveform returns a DECIMATED envelope... plot_waveform renders an interactive PICTURE... For a single scalar use signal_stats/query_value.' This gives clear when/when-not guidance and points to relevant alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_modelARead-onlyIdempotent
Find model/subcircuit candidates across loaded (and optionally built-in) libraries. Default is fuzzy matching — finds typos, case variants, and near-neighbour part numbers (e.g., '2N3905' → '2N3904'); pass exact=true to only return the exact case-insensitive match. Returns ranked candidates with similarity score and an include_directive emitted in the simulator's native path form (on WSL this is the Windows path LTspice.exe expects, not the /mnt/c Linux path). Each candidate carries ports (the .SUBCKT port list, empty for .MODEL) and params (default parameter values from the body / params: clause). For .MODEL devices it also carries device_type (the SPICE device token: NPN, PNP, D, NMOS, VDMOS, NJF …) and, for recognised tokens, a usage connection-order string (e.g. Qxxx C B E <name>) — a .MODEL gives parameters but not node order, and wiring the part in the wrong order simulates silently wrong.
| Name | Required | Description | Default |
|---|---|---|---|
| full | No | Include the full SPICE definition text + parameter list of every returned candidate. Folds the old ``model_info`` tool into this one — call ``find_model(name=X, exact=true, full=true)`` for a single model's body. | |
| name | Yes | Model/subcircuit name to match (case-insensitive) | |
| exact | No | Only return the exact case-insensitive match (score=1.0) if any; skips fuzzy scoring. | |
| limit | No | Max suggestions to return (1-25). Ignored when exact=true. | |
| cutoff | No | Minimum fuzzy similarity ratio (0.0-1.0). Lower = more matches, noisier. Ignored when exact=true. | |
| format | No | Response format: 'json' for structured data, 'text' for human-readable | |
| include_builtin | No | Also walk built-in simulator libraries (slower; lazy-parses all built-ins on first call). |
Output Schema
| Name | Required | Description |
|---|---|---|
| exact | No | |
| query | No | |
| cutoff | No | |
| results | No | |
| include_builtin | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true explicitly, and the description doesn't contradict that. It goes beyond annotations to disclose the WSL/LTspice path-format quirkchers, the port/params/device_type fields, and the warning about wiring order for .MODEL devices — valuable context for an agent. Minor gap: no mention of the default cutoff behavior or that results are ranked, but the fuzzy-matching and exact behavior are clearly described.
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 description is fairly long (≈200 words) but every sentence earns its place: fuzzy-matching behavior, exact mode, field semantics, WSL path nuance, and .MODEL vs subcircuit distinctions are all covered. It is front-loaded with the purpose and then expands into detail. Slightly dense, but not bloated — a solid 4.
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?
With a rich output schema and comprehensive annotations, the description exceeds the bar. It covers when to use fuzzy vs exact, what each returned field means, the WSL path context, and the critical usage gotcha (wiring .MODEL parts without node order). For a 7-parameter tool with high schema coverage monitored externally, this is complete.
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 coverage is already 100%, so the baseline is 3. However, the description adds significant value: it explains the *semantics* of the returned fields (ports, params, device_type, usage order string) and clarifies the behavioral meaning of parameters that the schema leaves implicit (e.g., exact=true bypasses fuzzy matching entirely, cutoff/limit ignored when exact=true, include_directive path format). This meaningfully surpasses the bar.
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 opening sentence states 'Find model/subcircuit candidates across loaded (and optionally built-in) libraries' with specific verbs and resource. It clearly distinguishes itself from siblings like list_components and list_libraries by focusing on search with fuzzy matching, exact mode, and returning candidates with metadata like include_directive and ports. The purpose is specific and unambiguous.
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 explicitly distinguishes between fuzzy and exact search, explains when to pass exact=true, and notes the tool folds in model_info behavior (`call find_model(name=X, exact=true, full=true)` for a single model's body). It also covers WSL-specific path behavior, implicitly guiding when a user might see unexpected paths. No explicit mention of alternatives, but the tool itself is clearly positioned as the search-plus-details hub.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_waveformARead-onlyIdempotent
Decimated numeric egress FOR THE MODEL: returns a min/max-preserving stat-envelope of one real-valued signal as DATA in your context (numbers, not a picture) over a time/sweep/frequency window — for when a scalar isn't enough and you need the SHAPE (switching nodes, amplifier internal nodes, startup transients).
Splits the window into equal-time buckets; each bucket reports the raw sample min/max (a narrow spike or ringing peak is never averaged away), time-weighted trapezoidal mean/rms (correct on SPICE's adaptive timestep), pk_pk, and crest_factor (peak/rms — high = impulsive/spiky). Scalar-guided zoom: read the envelope, then re-request a narrower [t_start, t_end] to resolve a region at higher resolution (same call, tighter window). The observations list surfaces FACTS, not verdicts (decimation coverage, dropped non-finite samples, which bucket has the largest pk-to-pk) — you decide what the shape means.
Works on transient (.tran), DC sweep (.dc), and noise (.noise) results. Sibling egress, don't confuse: export_waveform writes EVERY sample to a CSV FILE for your own code; plot_waveform renders an interactive PICTURE for a human to look at. For complex AC data use bode_metrics; for a single scalar use signal_stats; for one point value use query_value.
| Name | Required | Description | Default |
|---|---|---|---|
| step | No | Step index for .step directives. | |
| t_end | No | Window end in SPICE notation. | |
| format | No | Response format: 'json' for structured data, 'text' for human-readable | |
| job_id | No | Decimate a specific run of a completed sweep/MC (or single) job instead of a raw_file path; pair with ``run_index``. | |
| signal | Yes | Signal/trace name (e.g., 'V(out)', 'I(R1)'), or a device operating-point shorthand for an ngspice .save'd parameter: 'm1.gm' / 'm1.vth' (resolves to '@m1[gm]', incl. subcircuit paths like 'x1.m1.gm'). | |
| buckets | No | Number of equal-time envelope buckets (overview resolution). Defaults to 200; capped at 2000 (and at the server's max_points_returned ceiling and the sample count). | |
| t_start | No | Window start in SPICE notation (e.g. '1m', '100u'). Narrow the window and re-request to zoom into a region of interest. | |
| raw_file | No | Path to .raw result file. Pass this OR ``job_id`` (a job run), not both. | |
| run_index | No | 0-based run to read when ``job_id`` is given (default 0). |
Output Schema
| Name | Required | Description |
|---|---|---|
| signal | No | |
| buckets | No | |
| axis_unit | No | |
| decimated | No | |
| point_count | No | |
| bucket_count | No | |
| observations | No | |
| analysis_type | No | |
| window_end_used | No | |
| window_start_used | No | |
| max_points_ceiling | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the internal operation: splitting into buckets, reporting min/max, time-weighted mean/rms, pk_pk, crest_factor, and surfacing facts like decimation coverage and dropped non-finite samples. It also notes the default bucket count and cap. The annotations already indicate read-only/idempotent, and the description adds no contradictions.
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 description is long but well-structured, with three paragraphs: purpose and use cases, bucket mechanics, and output semantics/contrast with siblings. It is front-loaded with the primary purpose and every sentence adds value—no fluff or repetition.
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 the tool's complexity, the description thoroughly covers purpose, usage, parameter interactions, output behavior, and contrasts with related tools. It also notes the output schema exists (though not shown) and explains the envelope concept and zoom workflow, making it self-sufficient for an agent to decide when and how to use it.
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 schema already has high coverage and detailed descriptions for each parameter. The description adds usage context by explaining how parameters interact (e.g., t_start/t_end to zoom, raw_file vs job_id mutually exclusive, bucket count cap), which goes beyond individual schema descriptions. However, it does not introduce new parameter-level details beyond what the 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?
The description clearly states that the tool returns a min/max-preserving stat-envelope of a signal over a time window, and distinguishes it from siblings like export_waveform (CSV) and plot_waveform (picture). It specifies the verb 'returns' and the resource 'waveform envelope' with concrete use cases (switching nodes, amplifier nodes, startup transients).
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 explicitly tells when to use this tool ('when you need the shape') and when not to (for complex AC use bode_metrics, for scalar stats use signal_stats, for one point use query_value). It also explains the zoom workflow (narrow window and re-request).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_componentsARead-onlyIdempotent
List components in a circuit file, optionally filtered by type prefix, or return a single component value by reference.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to circuit file (.cir, .net, or .asc) | |
| limit | No | Max results to return (server caps at 50; page with offset) | |
| format | No | Response format: 'json' for structured data, 'text' for human-readable | |
| offset | No | Pagination offset | |
| prefix | No | Filter by reference prefix (e.g., 'R', 'M', 'C') | |
| reference | No | Look up a single component by reference (e.g., 'R1') |
Output Schema
| Name | Required | Description |
|---|---|---|
| components | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide readOnlyHint and idempotentHint, indicating safe operations. The description adds that limit is capped at 50 and pagination is possible, which is behavioral context beyond annotations. No contradictions.
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 description is a single sentence, efficiently conveying the primary purpose and two optional behaviors. It is concise with no fluff, though it could be more explicit about the two modes of operation.
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 the output schema exists, return formats are covered. The description is sufficient for a read-only listing tool with 6 parameters, but could better explain the difference between 'reference' mode vs 'prefix' mode and when to use each.
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 100%, so parameters are well documented. The description adds little: it mentions 'type prefix' and 'single component value by reference' which clarifies the 'prefix' and 'reference' fields slightly, but mostly redundant with 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 the tool lists components in a circuit file, with optional filtering by prefix or returning a single component by reference. It distinguishes from siblings like component_info (which presumably provides details on a known component) and set_component_value (mutation), but doesn't explicitly name alternatives.
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 usage for listing or reading components, but doesn't explicitly state when to use this vs component_info or other query tools. It mentions optional filtering and single lookup, which hints at usage scenarios, but lacks clear guidance on when to prefer this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_librariesDRead-onlyIdempotent
List loaded libraries. With detail=true, also shows the .SUBCKT and .MODEL names defined in each library (so foundry .bjt/.mod files with hundreds of .MODEL cards are discoverable without guessing), and names encrypted vendor files whose bodies can't be parsed.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | Filter to a specific library path | |
| limit | No | Max results to return (server caps at 50; page with offset) | |
| detail | No | Include model names from each library | |
| format | No | Response format: 'json' for structured data, 'text' for human-readable | |
| offset | No | Pagination offset |
Output Schema
| Name | Required | Description |
|---|---|---|
| libraries | No | |
| pagination | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Description provides no information about optional chaining or behavioral effects beyond what the name implies, which is tautological. No annotations are present to compensate for the lack of adequate transparency. The description adds no safety profile context for mutation is molecular, and there is no deviation from the structured data. No annotation or description reveals behaviors that the agent should know about but doesn't disclose. No requirements for multi-agent context, no rate limits mentioned for a scaled API. The Hazard note applies since no annotation-based awareness of mutations or potential for side effects is present.
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?
Almost no structure is present due to clear hardware and missing context, and the output schema is present, adding zero value. The description is very short but extraordinarily cryptic. Otherwise, the answer is impossible or impossible.
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?
This is a completely inadequate description and transparent insight is missing the required depth. The title is irrelevant, and no schema exists or optional is entirely absent, severely limiting the ability to effectively use the tool. The presence of the output_schema does not make up for the level of output. This is broken at the most basic intent level.
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 description is a garbled schema that obfuscates schema meaning, and the parameters shown (#3) are not understood. The schema does heavy lifting by defining the parameter count, but the description fails to clarify their semantic role. Schema coverage is not 100% covered by the description for the needed names. The parameters listed are actually 0.
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 is garbled and includes schema/JSON artifacts. The tool name is 'list_libraries' and the title is 'list_libraries', but the description is pure tautology, restating the tool's purpose without a clear verb-resource structure. It provides no meaningful information about listing libraries.
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 provides no guidance on when to use this tool over siblings like list_components or find_model. The garbled text mentions 'with detail=true', suggesting documentation issues, but no guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_libraryA
Load a SPICE library file (.lib, .mod) or directory of library files into the session.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to library file or directory |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all false, so the description carries full weight. It only says 'load into the session' but does not disclose whether loading replaces existing libraries, is idempotent, has side effects, or what happens on errors. This is minimal disclosure for a state-modifying operation.
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 description is a single sentence, directly front-loaded, with no redundant words. Every element adds meaning, making it highly concise and well-structured.
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?
The tool is simple (one parameter, no output schema), and the description covers the core action but omits behavior like replacement policy, existence checks, or interaction with other tools (e.g., whether loaded libraries are automatically used by simulations). Given the minimal annotations, it is adequate but not fully comprehensive.
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 coverage is 100% with a single parameter described as 'Path to library file or directory'. The tool description adds file extensions (.lib, .mod) and clarifies that a directory is accepted, providing marginal value beyond the schema. Baseline 3 is appropriate.
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 verb 'Load' clearly specifies the action (loading a SPICE library file or directory), and it explicitly names the resource types (.lib, .mod). It distinguishes from siblings like unload_library and list_libraries by stating the purpose of making libraries available to the session.
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 usage context ('into the session') but does not explicitly state when to use this tool versus alternatives like find_model or unload_library, nor does it mention any exclusions or prerequisites. Usage is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
measurement_statsARead-onlyIdempotent
Use to AGGREGATE .MEAS scalar results across a .step sweep or Monte Carlo run. Answers questions like 'across 100 MC trials, what's the worst-case rise time?' or 'how does gain vary as R sweeps 1k..10k?'. Inputs the .log file produced by the run.
Returns per-measurement: min, max, mean, median, std, p10, p90, min_step_index (argmin) and max_step_index (argmax), failure count, and an optional histogram (set histogram_bins=0 to skip).
Accepts any job id: a sweep/MC batch aggregates across its runs; a single-simulation job aggregates its own log (one value per step for a .step run). WHEN-style .MEAS (constant level, varying crossing) is detected the same way on both paths and swaps to aggregating the 'at' (crossing) field; the aggregated_field output says which was used. On a plain single run, stats collapse to n=1 (one value per measurement): the headline stats are the value the simulator printed — for a WHEN that's the trigger level — and any AT/crossing time is returned separately in the entry's 'at' field, so a single-run WHEN/AT read isn't lost. (simulation_summary also just reads the raw scalars.)
Works with .MEAS from any analysis type (.tran/.ac/.dc/.op) — the measurement directives themselves embed the analysis context. Pass measurement=NAME to aggregate just one; otherwise returns all .MEAS in the log.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | 'json' or 'text' | |
| job_id | No | Job ID. For a batch job (``run_montecarlo`` / ``run_sweep``) the tool loads each completed run's log, concatenates the .MEAS results (one row per run), and aggregates. For a completed single-simulation job it aggregates that run's log (per-step values for a .step run). Mutually exclusive with ``log_file``. | |
| log_file | No | Path to .log file from a single ``.step`` run that already concatenates every step's .MEAS results. For Monte Carlo / multi-run sweep jobs that emit one log per run, pass ``job_id`` instead and the aggregator walks every run's log. | |
| measurement | No | If given, stats for only this .MEAS; otherwise all measurements. | |
| histogram_bins | No | Histogram bin count. Set to 0 to skip histogram computation. |
Output Schema
| Name | Required | Description |
|---|---|---|
| stats | Yes | |
| per_run | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate readOnlyHint=true and idempotentHint=true, which are consistent with the description's non-destructive aggregation behavior. The description adds substantial behavioral details beyond annotations: it explains edge-case handling for WHEN-style .MEAS, the aggregated_field output, and behavior for single runs (n=1). It also notes what happens with different job types, enhancing transparency.
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 description is somewhat lengthy but front-loaded with the core purpose and examples. Each paragraph adds specific information, but some redundancy exists (e.g., repeating the job_id/log_file distinction already in the schema). It could be slightly condensed while maintaining clarity, but it is well-organized and not overly verbose.
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?
The tool is moderately complex with an output schema that likely covers return values. The description fully compensates for any gaps: it covers measurement aggregation, edge cases (WHEN-style), job types, and options like histogram_bins. It also mentions the output includes aggregated_field and 'at' fields, ensuring the agent understands the return format. This is comprehensive given the tool's complexity.
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 100%, so the input schema already explains all parameters (job_id, log_file, measurement, histogram_bins, format). The description adds value by explaining the distinction between job_id and log_file use cases (batch vs single-run logs), but this is minimal beyond the schema. For example, it clarifies that job_id is for batch jobs and log_file for single .step logs, which is useful but not extensive.
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 identifies the tool's purpose: aggregating .MEAS scalar results from .step sweeps or Monte Carlo runs. It uses a specific verb ('AGGREGATE') and capitalizes key terms (.MEAS, .step, Monte Carlo), giving concrete examples of questions it answers ('what's the worst-case rise time?'). It distinguishes itself by focusing on .MEAS aggregation, setting it apart from sibling tools like signal_stats or simulation_summary.
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 explicitly states when to use the tool: for aggregating .MEAS results across a sweep or Monte Carlo run, or for single-simulation jobs. It also provides alternatives: 'simulation_summary also just reads the raw scalars' and 'Pass measurement=NAME to aggregate just one'. This clear when-to-use guidance differentiates it from siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
noise_integralARead-onlyIdempotent
Integrate a .noise spectral density to a total RMS noise over a band. SPICE stores amplitude density (V/√Hz or A/√Hz) for both LTspice and ngspice, so total = sqrt(∫ density² df) — the same value LTspice shows when you Ctrl-click a V(onoise) label. Reports the band actually integrated and the sample count. Noise figure / SNR are left to you (they need the source resistance and a reference level).
| Name | Required | Description | Default |
|---|---|---|---|
| step | No | Step index for .step sweeps | |
| f_end | No | Band end (e.g. '20k'); default = sweep end. | |
| format | No | 'json' or 'text' | |
| job_id | No | Integrate a run of a completed sweep/MC (or single) job instead of a raw_file path; pair with ``run_index``. | |
| signal | No | Noise-density trace to integrate: 'V(onoise)'/'V(inoise)' (LTspice) or 'onoise_spectrum'/'inoise_spectrum' (ngspice). Default integrates the output noise (onoise). | |
| f_start | No | Band start in SPICE notation (e.g. '20'); default = sweep start. | |
| raw_file | No | Path to .raw .noise result. Pass this OR ``job_id`` (a job run), not both. | |
| run_index | No | 0-based run to read when ``job_id`` is given (default 0). |
Output Schema
| Name | Required | Description |
|---|---|---|
| unit | No | |
| signal | No | |
| n_points | No | |
| warnings | No | |
| total_rms | No | |
| f_end_used | No | |
| density_unit | No | |
| f_start_used | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint. The description adds useful behavioral detail beyond those: the sqrt(∫ density² df) calculation, the LTspice Ctrl-click equivalence, and the fact that it reports the integrated band and sample count. This goes well beyond what the annotations provide.
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 description is four concise sentences, front-loaded with the purpose. The formula, output summary, and SNR caveat each add distinct value; there is no filler or redundancy.
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 the full input-schema coverage, the output schema, and the rich annotations, the description is complete enough. It explains the mathematical behavior, what the tool reports, and what it intentionally leaves out, which is sufficient for an agent to select and invoke this tool correctly.
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 100%, and all 8 parameters already have descriptive text. The tool description adds high-level context about band and trace semantics, but it does not add new per-parameter meaning beyond what the schema already provides. Baseline 3 is appropriate.
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 opens with a specific verb and target: 'Integrate a .noise spectral density to a total RMS noise over a band.' It clearly distinguishes this from sibling measurement/plotting tools by focusing on RMS noise integration, and even states the exact formula used.
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 gives clear usage context (banded integration of .noise spectral density) and an explicit non-goal ('Noise figure / SNR are left to you'), but it does not name an alternative tool or provide direct when-not-to-use guidance beyond that.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
operating_pointARead-onlyIdempotent
Read DC operating point data: all node voltages, branch currents, and each semiconductor's small-signal params (gm/gds/vth/vdsat/caps) — from LTspice's log (run_simulation auto-adds '.options logopinfo' on .op runs) or ngspice's @dev[param] traces, surfaced uniformly by name. Each value carries its SI unit where the simulator declared the type (see units). Pass device='M1' to get just one device's params + terminal currents in a single call.
A run-level solve failure (singular matrix / non-convergence) taints every value here; that simulator line is relayed into warnings — read it before trusting the bias point.
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | For a .dc sweep raw: the sweep-axis VALUE to read the full bias snapshot at (SPICE notation, e.g. '2.5', '1.2'). Nearest point is used. Default reads the sweep's first point; ignored for plain .op runs (no sweep axis). | |
| step | No | Step index for stepped .OP runs (e.g. ``.step temp ...`` + ``.op``). Default 0 returns the first step. Out-of-range values raise a structured error rather than silently returning the wrong step. | |
| device | No | Narrow the result to one device: its operating-point params (@dev[param]) and its terminal currents (e.g. Id/Ig/Is(M1)), each typed with its unit. Pass the device reference (e.g. 'M1', 'Q2', or a subcircuit path 'x1.mn'); LTspice subcircuit semiconductors are matched by instance regardless of the log's colon-qualified name. Default returns the whole circuit. | |
| format | No | Response format: 'json' for structured data, 'text' for human-readable | |
| job_id | No | Read the operating point of a specific run of a completed sweep/MC (or single) job instead of a raw_file path; pair with ``run_index``. | |
| raw_file | No | Path to .raw result file. Pass this OR ``job_id`` (a job run), not both. | |
| run_index | No | 0-based run to read when ``job_id`` is given (default 0). |
Output Schema
| Name | Required | Description |
|---|---|---|
| step | No | |
| units | No | |
| device | No | |
| currents | Yes | |
| voltages | Yes | |
| warnings | No | |
| step_count | No | |
| sweep_value | No | |
| device_op_points | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the readOnly/idempotent/destructive hints, the description discloses important behaviors: SI units where declared, uniform naming across simulators, automatic .options logopinfo, and the critical warning that a solve failure taints all values and appears in 'warnings'. This is valuable context not available from annotations alone.
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 description is well structured: front-loaded purpose, then scope details, then a warning. It is dense and every sentence contributes, though the first paragraph packs many clauses into a single long sentence, slightly reducing readability.
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?
The description covers tool purpose, simulator sources, device filtering, units, and failure-mode warnings. With a rich input schema and an output schema present, nothing critical appears missing for an agent to select and invoke this tool correctly.
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?
Input schema descriptions already cover all 7 parameters thoroughly, so the baseline is 3. The description adds meaningful usage semantics: passing device='M1' yields that device's params plus terminal currents in one call, and explains the uniform naming and unit behavior. This exceeds baseline without needing to restate schema details.
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 opens with 'Read DC operating point data' and enumerates exactly what is included: node voltages, branch currents, and small-signal params. It clearly distinguishes this from waveform, simulation summary, and other sibling tools by specifying the operating-point scope.
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?
It gives clear context on when to use the tool (reading DC operating point from LTspice log or ngspice traces, after run_simulation auto-adds .options logopinfo). It also explains the device-filter use case, but it does not explicitly state when to prefer another tool or when not to use this one.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parameterAIdempotent
Read, write, or delete .PARAM directive values in a circuit file. Pass delete=true with name to remove a parameter (the inverse of setting one).
| Name | Required | Description | Default |
|---|---|---|---|
| name | No | Parameter name to set (omit to read all params) | |
| path | Yes | Path to circuit file (.cir, .net, or .asc) | |
| value | No | Parameter value (required when name is specified) | |
| delete | No | Delete the named .PARAM (the inverse of setting one). Requires ``name`` and is mutually exclusive with ``value``. Matches by name, so a just-added parameter can be removed even after the value/case was reformatted on write. | |
| format | No | Response format: 'json' for structured data, 'text' for human-readable |
Output Schema
| Name | Required | Description |
|---|---|---|
| parameters | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate idempotentHint=true and destructiveHint=false, and the description aligns with this by noting deletion is 'the inverse of setting one' and that it matches by name so a just-added parameter can be removed even after reformatting. It also explicitly states that value is required when name is specified, adding behavioral detail beyond schema.
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 description is concise: two sentences that cover the core functionality and a key usage pattern. It front-loads the main purpose and includes an important caveat about deletion. No wasted words.
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?
With high schema coverage (100%), a clear description, and annotations, the tool is well-documented. The output schema exists, so return values need no explanation. Slight deduction for not mentioning file path extension restrictions (though schema does) and not clarifying behavior when no parameters are read.
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 100%, but the description adds clarity on how name, value, and delete interact: value is required when name is specified, delete is mutually exclusive with value, and name can be omitted to read all params. This goes beyond the schema's individual property descriptions.
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 states a clear purpose: 'Read, write, or delete .PARAM directive values in a circuit file.' It specifies the resource (.PARAM directive values in a circuit file) and actions (read, write, delete), making it distinct from siblings that deal with components, netlists, or simulations.
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 clearly explains that setting a parameter is the inverse of deleting it, and gives an example for deletion ('Pass delete=true with name to remove a parameter'). However, it does not explicitly mention when not to use this tool versus alternatives like edit_directive or set_component_value, though sibling names suggest some overlap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
periodic_metricsARead-onlyIdempotent
Use for an oscillating transient signal (clock, oscillator output, switching waveform) when you need period, frequency, duty cycle, pulse widths, and period-to-period jitter.
Returns: period (mean across measured periods), frequency (1/period), jitter_rms (std-dev of period lengths — timing jitter, NOT signal amplitude variance), duty_cycle_pct, mean high/low pulse widths, edge counts. duty_cycle_pct / pulse_widths are null if no full periods could be paired. A period is the span between consecutive rising crossings, so num_periods_measured = num_rising_edges - 1 (you need N+1 edges to measure N periods).
Uses threshold crossings; threshold defaults to the midpoint of window min/max. For a signal with DC drift, set an explicit threshold — the auto midpoint moves with the drift and the edge detection gets unstable. min_periods guards against accidentally running on 1-edge windows.
Skip the startup transient via t_start/t_end; the first cycle is often wider than steady state. Rejects AC analysis. For a single edge (not periodic), use edge_metrics.
| Name | Required | Description | Default |
|---|---|---|---|
| step | No | Step index for .step sweeps | |
| t_end | No | Window end in SPICE notation | |
| format | No | 'json' or 'text' | |
| job_id | No | Analyze a specific run of a completed sweep/MC (or single) job instead of a raw_file path; pair with ``run_index``. | |
| signal | Yes | Signal name (e.g. 'V(clk)') | |
| t_start | No | Window start — recommended to skip the startup transient. | |
| raw_file | No | Path to .raw transient result file. Pass this OR ``job_id`` (a job run), not both. | |
| run_index | No | 0-based run to analyze when ``job_id`` is given (default 0). | |
| threshold | No | Absolute threshold level. Auto = midpoint of window min/max. For drifting signals, set explicitly. | |
| min_periods | No | Minimum complete periods required; error if window has fewer. |
Output Schema
| Name | Required | Description |
|---|---|---|
| period | Yes | |
| signal | Yes | |
| warnings | Yes | |
| frequency | Yes | |
| jitter_rms | Yes | |
| duty_cycle_pct | No | |
| threshold_used | Yes | |
| pulse_width_low | No | |
| num_rising_edges | Yes | |
| pulse_width_high | No | |
| num_falling_edges | Yes | |
| num_periods_measured | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond readOnlyHint and destructiveHint, the description discloses key behaviors: edge-detection mechanism (threshold crossings), definition of a period (span between consecutive rising crossings), the formula num_periods_measured = num_rising_edges - 1, null duty_cycle/pulse_widths when no full periods, and instability with DC drift. No contradiction with 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 description is structured with clear paragraphs covering use case, returns, measurement mechanics, threshold behavior, and usage tips. Every sentence adds useful information—no fluff. It is front-loaded with the primary use case. Though a bit longer, it's density of useful info justifies the length.
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 the tool's complexity (10 parameters, subtle jitter semantics), the description covers return values, null cases, threshold behavior, edge count relationship, and output schema exists for further details. It is complete for an agent to decide when to use it and how to set parameters correctly. No gaps for an oscilloscope-style periodic measurement tool.
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 input schema has 100% description coverage (all parameters have descriptions), so the baseline is 3. The tool description adds context on threshold, min_periods, and t_start/t_end usage, but the parameter descriptions already cover semantics. Edge cases like null returns are explained in the tool description, but not much additional parameter-level detail is added.
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 the tool analyzes oscillating transient signals (clock, oscillator output, switching waveform) and lists the metrics returned: period, frequency, duty cycle, pulse widths, and jitter. It distinguishes from sibling edge_metrics by noting 'for a single edge (not periodic), use edge_metrics.'
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?
Provides explicit guidance: when to use (oscillating transient signals), how to set threshold for DC drift, use min_periods to guard against 1-edge windows, skip startup transient via t_start/t_end, and explicitly directs to edge_metrics for single-edge cases. This clearly differentiates from alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plot_waveformA
Render an INTERACTIVE chart of one or more signals FOR A HUMAN to look at (zoom/pan/hover) — the co-design complement to the numeric tools. It returns NO data values to the model; it produces a picture.
Picks the chart from the run type: transient (V/I vs time), DC sweep, AC Bode (stacked magnitude-dB + phase-deg vs log frequency), noise (vs log frequency); a .step / Monte-Carlo run overlays every step as a labelled trace (or pass step for one). Full fidelity by default, with a min/max-preserving downsample above max_points (spikes survive; surfaced as a fact). Writes a self-contained HTML file and returns its path — into out_dir if given, else a '.ltspice-mcp/plots/' sidecar next to the circuit (for a job_id) or next to the raw (for a raw_file); on a host that supports MCP Apps the chart is also embedded as an interactive in-chat widget, otherwise it opens in your local browser.
Sibling egress, don't confuse: for numbers in your context use get_waveform (decimated); for every sample on disk use export_waveform (CSV); for a scalar use signal_stats/bode_metrics. This tool is for looking, not measuring.
| Name | Required | Description | Default |
|---|---|---|---|
| open | No | Open the written HTML in the local browser. Applies to terminal clients only — ignored when the chart is delivered as an in-chat widget (MCP Apps host). Set false to only write the file. | |
| step | No | For a .step run: omit to overlay ALL steps as separate traces, or give a 0-based step index to plot just that one. | |
| t_end | No | Window end in SPICE notation. | |
| format | No | Response format: 'json' for structured data, 'text' for human-readable | |
| job_id | No | Plot a specific run of a completed sweep/MC (or single) job instead of a raw_file path; pair with ``run_index``. | |
| out_dir | No | Directory to write the HTML into (resolved under an allowed path; created if needed). Default: a '.ltspice-mcp/plots/' sidecar next to the circuit for a job_id, or next to the raw for a raw_file. | |
| signals | No | Trace names to plot (e.g. ['V(out)', 'I(R1)']) or 'all' for every non-axis trace. | all |
| t_start | No | Window start in SPICE notation (e.g. '1m', '1k'); bounds the plotted range. | |
| annotate | No | Annotate an AC/Bode plot with detected corner markers (vertical lines) + an out-of-phase-zero / delay flag, from ac_structure. AC plots only; ignored for transient/DC. | |
| raw_file | No | Path to .raw result file. Pass this OR ``job_id`` (a job run), not both. | |
| run_index | No | 0-based run to read when ``job_id`` is given (default 0). | |
| max_points | No | Per-series point budget before a min/max-preserving downsample engages (default 100000). Full fidelity below this; spikes are preserved when it engages. |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | No | |
| opened | No | |
| opener | No | |
| panels | No | |
| n_steps | No | |
| signals | No | |
| delivery | No | |
| max_points | No | |
| downsampled | No | |
| window_used | No | |
| observations | No | |
| series_count | No | |
| analysis_type | No | |
| steps_plotted | No | |
| points_per_series | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With annotations present (readOnlyHint false, openWorldHint true, destructiveHint false), the description goes well beyond the bar. It discloses the min/max-preserving downsample behavior above max_points ('spikes survive; surfaced as a fact'), the exact output path resolution logic (out_dir, sidecar next to circuit/raw), the MCP Apps in-chat widget vs terminal browser dual behavior, and that it produces a picture, not data. No contradiction with annotations — the file-writing disclosure is consistent with readOnlyHint: false and openWorldHint: true.
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-loaded with the single most important fact (interactive, for humans, no data to model), then proceeds logically through chart selection, step handling, downsampling, output paths, widget/browser delivery, and ends with sibling differentiation. For a 12-parameter tool with run-type-dependent behavior, every sentence earns its place; nothing is filler.
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 the tool's complexity — 12 parameters, run-type-dependent chart selection, step/Monte-Carlo overlay, dual output delivery modes — the description covers all major behavioral axes: rendering, output artifact, path resolution, fidelity/downsampling, and delivery channel. An output schema exists, so return-value explanation is not required. The description is complete for an agent to invoke and consume this tool correctly.
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 coverage is 100%, so baseline is 3; the description adds genuine meaning beyond the schema by describing parameter interactions: how `step` selects one trace vs overlaying all steps, the behavior of `max_points` triggering downsampling, and the `out_dir` fallback chain (next to circuit for job_id, next to raw for raw_file). It does not walk through every parameter, but the schema already handles that, so the added relational semantics justify a 4.
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 opening line is exemplary: 'Render an INTERACTIVE chart of one or more signals FOR A HUMAN to look at' — a specific verb (render) + resource (chart of signals) + explicit purpose. It immediately distinguishes from siblings by framing itself as 'the co-design complement to the numeric tools' and stating it 'returns NO data values.' This fully differentiates plot_waveform from the sibling measurement tools.
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?
Contains an explicit dedicated section, 'Sibling egress, don't confuse,' that names concrete alternatives with their exact roles: get_waveform (decimated), export_waveform (CSV), signal_stats/bode_metrics (scalars), culminating in 'This tool is for looking, not measuring.' Also explains when it auto-selects chart type by run type, and when to pass `step` for .step runs. This is textbook when-to-use vs. when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
pulse_responseARead-onlyIdempotent
Use when you need step-response quality metrics: overshoot %, undershoot %, settling time, peak value and peak time. Inputs a transient .raw covering ONE step transition — ideally with the stimulus edge near t_start and enough tail to see settling.
Returns: direction (rising/falling), initial/steady-state values, peak (absolute and pct), settling_time (to within settling_tolerance_pct band). settling_time is null in three cases, kept distinct in the text and quality flags: 'never (within window)', 'undefined (full-pulse window)', and 'unknown' when the trailing window is too noisy to trust the final value (still ringing) — pass final_value there.
Definitions: overshoot is excursion BEYOND final in the step direction; undershoot is excursion beyond initial opposite the step direction. overshoot_pct = 0 means MEASURED overdamped, not missing data. settling_tolerance_pct defaults to 2% of |final - initial|; 1% and 5% are also common.
If the auto-detected initial/final (mean of first/last 10% of window) is contaminated by ringing, pass explicit initial_value/final_value. Rejects AC analysis.
For just rise/fall time without overshoot, use edge_metrics.
| Name | Required | Description | Default |
|---|---|---|---|
| step | No | Step index for .step sweeps | |
| t_end | No | Window end in SPICE notation | |
| format | No | 'json' or 'text' | |
| job_id | No | Analyze a specific run of a completed sweep/MC (or single) job instead of a raw_file path; pair with ``run_index``. | |
| signal | Yes | Signal name (e.g. 'V(out)') | |
| t_start | No | Window start — ideally the stimulus edge. Defaults to full transient. | |
| raw_file | No | Path to .raw transient result file. Pass this OR ``job_id`` (a job run), not both. | |
| run_index | No | 0-based run to analyze when ``job_id`` is given (default 0). | |
| final_value | No | Post-step steady value. Auto = mean of last 10% of window. | |
| initial_value | No | Pre-step steady value. Auto = mean of first 10% of window. Set explicitly if the start is contaminated by ringing. | |
| settling_tolerance_pct | No | Settling band as percent of |final - initial|. 2% is standard; 1% or 5% also common. |
Output Schema
| Name | Required | Description |
|---|---|---|
| signal | Yes | |
| quality | Yes | |
| warnings | Yes | |
| direction | Yes | |
| peak_time | Yes | |
| peak_value | Yes | |
| initial_value | Yes | |
| overshoot_pct | No | |
| settling_time | No | |
| undershoot_pct | No | |
| steady_state_value | Yes | |
| settling_tolerance_pct | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Read-only/idempotent/non-destructive annotations already communicate safety; description adds contextual flags: settling_time negative in three cases with quality distinctions ('never (within window)', 'undefined (full-window)', 'unknown' when trailing window too noisy), plus rejection of AC analysis. No annotation contradiction.
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?
Long but justified for 11 params in a signal-analysis tool: lead with 'Use when...', 'Returns...', 'Definitions' convention; parameter descriptions are dense with defaults, ranges, and are free of padding. Beyond schema it is not lengthy: not a single wasted sentence for this scope.
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 step-response tool: 11 params fully documented, output schema, annotation flags, default/alternative semantics, explicit auto-detection setting (first/last 10%) contamination in the initial/final, window, noise desciptions. Sibling tools for rising/falling times given; output schema provides the values; semantic coverage is strong.
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 covers 100% of 11 params; descriptions enrich defaults (0, auto = mean first/last 10%), invalid combinations (job_id OR raw_file required), output schema present; descriptive defaults added.
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 specific verb+resource: 'step response quality metrics: overshoot %, undershoot %, settling time, peak value, peak time.' Distinguishes from edge_metrics for rise/fall time without overshoot. Clearly identifies input (transient .raw covering ONE step, ideally edge near t_start, tail) and return values.
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?
Explicitly states when to use ('Use when you need step response quality metrics'), includes exclusion ('For just rise/fall time without overshoot, use edge_metrics') and exclusions ('Rejects AC analysis.').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_valueARead-onlyIdempotent
Look up the value of a signal at a specific time point (transient) or frequency (AC). Returns the nearest data point without interpolation.
To pick a step of a .step/.DC sweep by its axis VALUE (rather than a raw step index), pass step_axis + step_value (e.g. step_axis='temp', step_value='27'); at then selects the inner-axis point within that step (optional). AC samples also return magnitude_linear alongside magnitude_db/phase_deg.
To query a run of a completed sweep/MC job, pass job_id + run_index instead of raw_file — the run is analyzed like any standalone raw.
This is one signal at one point (signal=). For many signals, or a whole waveform over a window, use export_waveform (signals=).
If the run hit a run-level solve failure (singular matrix / non-convergence), that simulator line is relayed into warnings — the value is still returned, but the whole solve is suspect, so read it.
| Name | Required | Description | Default |
|---|---|---|---|
| at | No | Time or frequency to query in SPICE notation (e.g., '1m', '100u', '1G', '2.5k'). Required unless ``step_axis`` is given (then it picks the inner-axis point within the chosen step; optional). | |
| step | No | Step index for .step directives (ignored when ``step_axis`` is used). | |
| format | No | Response format: 'json' for structured data, 'text' for human-readable | |
| job_id | No | Analyze a specific run of a completed sweep/MC (or single) job instead of a raw_file path; pair with ``run_index``. Lets you query a sweep run the same way you'd query a standalone raw. | |
| signal | Yes | Signal/trace name (e.g., 'V(out)', 'I(R1)'), or a device operating-point shorthand for an ngspice .save'd parameter: 'm1.gm' / 'm1.vth' (resolves to '@m1[gm]', incl. subcircuit paths like 'x1.m1.gm'). | |
| raw_file | No | Path to .raw result file. Pass this OR ``job_id`` (a job run), not both. | |
| run_index | No | 0-based run to analyze when ``job_id`` is given (default 0). | |
| step_axis | No | Select the step by a .step/.DC sweep-axis VALUE instead of an index: the parameter name (e.g. 'temp', 'Rval'). Pair with ``step_value``. The nearest step is chosen and flagged with ``exact_match``. | |
| step_value | No | Target value of ``step_axis`` in SPICE notation (e.g. '27', '1k'). Required when ``step_axis`` is given. |
Output Schema
| Name | Required | Description |
|---|---|---|
| axis | No | |
| unit | No | |
| value | No | |
| signal | No | |
| actual_x | No | |
| warnings | No | |
| actual_at | No | |
| phase_deg | No | |
| step_index | No | |
| exact_match | No | |
| requested_x | No | |
| actual_value | No | |
| magnitude_db | No | |
| requested_at | No | |
| requested_value | No | |
| magnitude_linear | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and non-destructive behavior. The description adds meaningful context: nearest data point without interpolation, additional AC return fields, and how run-level failures surface in warnings. No contradiction.
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 description is concise, well-structured, and front-loaded with the primary purpose. Each paragraph adds distinct value, covering step selection, job runs, differentiation from sibling tool, and warning behavior—no redundant sentences.
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 the tool's complexity (9 parameters, multiple use cases), the description covers all relevant scenarios: AC/transient, step selection, MC jobs, and failure warnings. With a rich schema and output schema, this is comprehensive.
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 coverage is 100%, so the baseline is 3. The description adds valuable usage examples (e.g., step_axis='temp', step_value='27') and clarifies relationships between parameters (job_id + run_index vs. raw_file), which goes beyond the schema descriptions.
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 the tool looks up a signal value at a specific time or frequency point, and distinguishes itself from export_waveform for multi-signal or waveform queries. The verb is specific ('look up'), and the resource is well-defined.
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?
Provides explicit when-to-use guidance: selecting steps by axis value, querying completed sweep/MC jobs via job_id, and when to use export_waveform instead. It also explains edge cases like solve failures, making usage context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
read_circuitARead-onlyIdempotent
Read and parse a circuit file (.cir/.net or .asc). For netlists: returns content and component values. For schematics: returns layout and directives.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to circuit file (.cir, .net, or .asc) | |
| format | No | Response format: 'json' for structured data, 'text' for human-readable |
Output Schema
| Name | Required | Description |
|---|---|---|
| file | No | |
| type | No | |
| wires | No | |
| labels | No | |
| content | No | |
| components | No | |
| directives | No | |
| wire_count | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive behavior. The description adds valuable behavioral detail beyond annotations by specifying different outputs for netlists ('content and component values') versus schematics ('layout and directives'), which helps the agent predict behavior across file types.
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 description is two sentences, front-loaded with the core action and resource, and wastes no words. Every sentence adds distinct value: the first states what it does, the second clarifies format-specific behavior.
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 simple read-only parser, the description is largely complete given the rich annotations, fully documented schema, and existing output schema. It could have added note about unsupported file types or error behavior, but these are minor gaps for this tool's complexity.
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 100%, so the schema already documents both parameters fully. The description adds context about file extensions and return categories, but it does not materially improve on the parameter-level detail already present in the schema, warranting the baseline score.
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 uses a specific verb ('Read and parse') and names a concrete resource ('a circuit file (.cir/.net or .asc)'), with distinct return behavior for netlists versus schematics. This clearly distinguishes it from sibling tools like create_netlist, export_netlist, and list_components.
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 usage by defining what the tool reads and what it returns, but it does not explicitly state when to prefer it over alternatives or mention any exclusions. Context is present, but there is no direct 'use this instead of X' guidance despite many related sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recentARead-onlyIdempotent
Call on session start to find circuits the user was last working with, including jobs that were still running when the server stopped. Needs no inputs.
Returns a list of recent circuits, each with its absolute path, whether the file still exists, last-touched timestamp, total persisted job count, status_counts (completed/failed/interrupted/etc.), and the IDs of any interrupted jobs.
'interrupted' means a simulation was in flight when the server stopped — recovery path is check_job(job_id) to see whether results are recoverable or the run needs to be re-kicked. Does NOT start or cancel anything; purely read-only.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Response format: 'json' for structured data, 'text' for human-readable |
Output Schema
| Name | Required | Description |
|---|---|---|
| count | No | |
| circuits | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the annotations by explaining the meaning of 'interrupted' (simulation in flight when server stopped), the recovery path (check_job), and explicitly states it does not start or cancel anything. This aligns perfectly with the readOnly, idempotent, and non-destructive hints.
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 description is somewhat repetitive (mentions 'jobs still running' and later explains 'interrupted'), but each section contributes necessary details about output structure and semantics. It is not overly verbose and remains focused.
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?
The description covers all essential aspects: what the tool returns (list with fields), the meaning of a key status, and explicit non-actions. Combined with the input schema and annotations, it is fully sufficient for the agent to understand and use the tool.
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 only parameter 'format' has a clear description explaining the difference between 'json' and 'text' outputs, adding meaningful semantics beyond the schema's enum. It also notes the default and optional nature.
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 the tool's purpose: to find circuits and jobs the user recently worked with, using the verb 'find' and specifying the resource. It distinguishes from siblings by focusing on recent items and session-start context.
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?
It provides an explicit usage context ('Call on session start') and clarifies no inputs are required, though an optional format parameter exists. It does not explicitly mention alternatives, but the context is clear enough for typical use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reset_schematicADestructiveIdempotent
Revert an .asc schematic to the state it had BEFORE the first edit this session — a recovery escape hatch for when a sequence of edits went wrong. The server snapshots each .asc file's bytes just before its first in-session mutation (add_component, set_component_value, move_component, connect, apply_schematic_ops, etc.); this restores that snapshot exactly and drops it (so a later edit establishes a fresh restore point). Because add_component is a trigger, the first add_component on a freshly created schematic snapshots the empty file — so reset can revert all the way back to the empty post-create state, dropping every component added this session. Returns reverted=false (not an error) when the file has no recorded in-session edits. Note: the snapshot lives only for the current server session — it does not persist across restarts, and it is not a substitute for version control.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to .asc schematic to revert to its pre-session state | |
| format | No | Response format: 'json' for structured data, 'text' for human-readable |
Output Schema
| Name | Required | Description |
|---|---|---|
| path | No | |
| bytes | No | |
| reverted | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description richly supplements the annotations. It explains the snapshot mechanism, that the snapshot is dropped after reset, that add_component on a new schematic snapshots the empty file, that repeated calls with no edits return reverted=false, and that snapshots do not persist across server restarts. This goes well beyond destructiveHint and idempotentHint.
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?
Although the description is long, every sentence earns its place: purpose, snapshot mechanics, edge cases, return behavior, and persistence limitations are all relevant. It is front-loaded with the core recovery purpose before diving into details.
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 destructive recovery tool, the description is exceptionally complete. It covers the snapshot lifecycle, the empty-file edge case, the reverted=false return value, and the non-persistence caveat. The presence of an output schema means return-value details beyond reverted=false are not required in the description.
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 100%, so the schema already fully documents both 'path' and 'format'. The description adds context about how the server snapshots each .asc file, but it does not add new parameter-level meaning beyond what the schema already states. Baseline 3 is appropriate.
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 the tool reverts an .asc schematic to its pre-session state, using a specific verb ('Revert'), a specific resource ('.asc schematic'), and a clear scope ('BEFORE the first edit this session'). It also positions itself as a 'recovery escape hatch,' distinguishing it from siblings like apply_schematic_ops or create_schematic.
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 explicitly says when to use this tool: 'when a sequence of edits went wrong.' It also gives a when-not scenario by noting it returns reverted=false when there are no in-session edits, and warns it is 'not a substitute for version control,' which clarifies limitations and alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resonanceARead-onlyIdempotent
Detect magnitude peaks in an AC sweep and estimate Q factor + -3 dB bandwidth for each. Useful for RLC resonators, crystal oscillators, peaking amps, or any response with distinct resonant modes.
Q = f_peak / Δf(-3 dB from peak). Q is returned as null for peaks without two flanking -3 dB crossings inside the swept range — widen the sweep if you need Q for a boundary peak.
min_prominence_db=3 rejects the gentle hump of a filter's passband (which isn't a resonance). Tight resonances (Q > 30) need dense sampling near f_peak — log sweeps with <50 pts/decade will under-sample the peak and give inflated Q/bandwidth.
For overall filter characterization use bode_metrics(mode='filter'); for stability margins use stability_metrics.
| Name | Required | Description | Default |
|---|---|---|---|
| step | No | Step index for .step sweeps | |
| format | No | ||
| job_id | No | Analyze a completed job run by id instead of a raw_file path; pair with ``run_index``. Lets you read a sweep / Monte-Carlo run's peaks. | |
| signal | Yes | Signal name (e.g. 'V(out)') | |
| raw_file | No | Path to AC analysis .raw result file. Pass this OR ``job_id`` (a job run), not both. | |
| max_peaks | No | Maximum peaks returned (1..1000) | |
| run_index | No | 0-based run to analyze when ``job_id`` is given (default 0). | |
| min_prominence_db | No | Minimum peak prominence in dB. Smaller = more sensitive but also catches gentle humps. 3 dB rejects filter-passband shoulders. | |
| min_separation_decades | No | Merge peaks closer than this many decades (find_peaks can emit duplicates on shoulders). |
Output Schema
| Name | Required | Description |
|---|---|---|
| peaks | Yes | |
| signal | Yes | |
| warnings | Yes | |
| num_peaks_detected | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the tool is safe for reads. The description adds value beyond these by explaining the Q calculation formula, null behavior for boundary peaks, the effect of min_prominence_db (rejecting passband humps), and the sampling-density warning for high-Q resonances. No contradiction with 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 description is well-structured and front-loaded with the core purpose. Each sentence provides actionable information: the formula, the null case, the prominence default, the sampling warning, and alternative tools. No filler. The length is appropriate for the tool's complexity.
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 the tool's moderate complexity, high schema coverage, and presence of an output schema, the description covers critical edge cases (boundary peaks, sampling density, prominence filtering) and directs users to alternative tools. It fully compensates for any gaps in the structured data.
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 coverage is 89%, so most parameters are documented. The description adds semantic insight: it explains min_prominence_db's role in rejecting gentle humps, min_separation_decades merging behavior, and the impact of log sweep density on Q accuracy. It also clarifies the default behavior of parameters like step. While not exhaustive, it meaningfully enriches the 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 the verb ('Detect magnitude peaks in an AC sweep and estimate Q factor + -3 dB bandwidth for each') and the resource (AC sweep peaks). It explicitly distinguishes from siblings like bode_metrics and stability_metrics by naming them and their different purposes, and lists specific use cases (RLC resonators, crystal oscillators, peaking amps).
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?
Provides explicit when-to-use context (for resonant modes) and alternative tool guidance: 'For overall filter characterization use bode_metrics(mode='filter'); for stability margins use stability_metrics.' Also explains when Q is not returned (boundary peaks) and advises widening sweep or adjusting sampling. This is strong usage guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_montecarloA
Execute a previously configured Monte Carlo analysis asynchronously and return a job_id immediately.
| Name | Required | Description | Default |
|---|---|---|---|
| config_id | Yes | Configuration ID from configure_sweep or configure_montecarlo | |
| max_parallel | No | Max concurrent simulations (default: server config) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are all false, but the description explicitly states 'asynchronously and return a job_id', which discloses non-blocking behavior and output. This adds information beyond annotations without contradiction.
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?
Single sentence, no redundancy, includes all essential elements: execute, previously configured, asynchronous, job_id. Perfectly concise.
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?
Mentions the output (job_id) despite no output schema, covering the immediate result. Does not detail job polling but that is not required for the action itself. Adequate for context.
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 already fully describes both parameters (config_id from configure functions, max_parallel with default). The description does not add further parameter-specific details; baseline applies due to high schema coverage.
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?
Clearly states the action (execute) and resource (Monte Carlo analysis), distinguishing it from siblings like run_sweep or configure_montecarlo. Mentions async and job_id, making the purpose unambiguous.
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?
Indicates that the analysis must be 'previously configured', implying a prerequisite step (configure_montecarlo). While it doesn't explicitly contrast with alternatives, the name and context make its intended use clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_simulationA
Run a SPICE simulation on a netlist file. Sets the right batch flags, handles the ngspice headerless-raw dialect, routes the raw/log artifacts, and parses the results — so you never hand-parse a rawfile. Automatically runs synchronously for short simulations (<=30s timeout) or asynchronously for longer ones. Use wait=true to force synchronous execution. Returns raw/log file paths and simulation summary on completion, or a job ID for async tracking.
| Name | Required | Description | Default |
|---|---|---|---|
| wait | No | Force synchronous execution. Blocks until completion or hard timeout. | |
| format | No | Response format: 'json' for structured data, 'text' for human-readable | |
| netlist | Yes | Path to the netlist file (.cir, .net, .asc) | |
| timeout | No | Timeout in seconds (defaults to the server's configured default, 300s). Simulations exceeding 30s run asynchronously unless wait=true. With wait=true the effective limit is min(this timeout, 600s): 600s is a hard ceiling, not a floor — pass a larger timeout to use the full 600s. |
Output Schema
| Name | Required | Description |
|---|---|---|
| error | No | |
| range | No | |
| errors | No | |
| job_id | No | |
| status | No | |
| fourier | No | |
| netlist | No | |
| signals | No | |
| duration | No | |
| log_file | No | |
| raw_file | No | |
| sim_type | No | |
| warnings | No | |
| simulator | No | |
| step_count | No | |
| meas_errors | No | |
| point_count | No | |
| measurements | No | |
| observations | No | |
| failed_measurements | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate it's not read-only, not idempotent, and not destructive. The description adds context about setting batch flags, handling the ngspice headerless-raw dialect, routing artifacts, and sync/async execution. It does not contradict annotations and provides useful operational details, though error handling is not covered.
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 description is a single substantial paragraph, front-loaded with the core purpose. It's structured with clear sentences about execution modes and return values. It's slightly verbose but every sentence adds value; no filler. A more concise version could trim details, but it's not excessive.
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 the tool's complexity and the presence of an output schema, the description covers essential context: sync/async behavior, timeout semantics, and return types. It explains why to use this tool (avoid parsing rawfiles) and how it handles long simulations. It's complete enough for an agent to effectively invoke and understand the outcome, though it doesn't mention error scenarios or partial failures.
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 coverage is 100%, so baseline is 3. The description enriches semantics by clarifying timeout defaults, the 30s async threshold, and the 600s hard ceiling with wait=true. It also explains that wait=true forces sync execution, adding meaning beyond the schema descriptions.
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 the tool runs a SPICE simulation on a netlist file, handles ngspice-specific details, and parses results. It distinguishes from siblings like run_sweep and run_montecarlo by explicitly focusing on a single simulation and automating rawfile parsing.
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?
It explains when to use synchronous vs asynchronous execution (short vs long simulations) and mentions wait=true to force sync. While it doesn't explicitly list alternatives, the context makes it evident this is for single simulations, with siblings for sweeps/montecarlo. It gives clear guidance on timeout behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_sweepA
Execute a previously configured parameter sweep asynchronously and return a job_id immediately.
| Name | Required | Description | Default |
|---|---|---|---|
| config_id | Yes | Configuration ID from configure_sweep or configure_montecarlo | |
| max_parallel | No | Max concurrent simulations (default: server config) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations are minimal (readOnlyHint=false, destructiveHint=false, etc.) and provide no safety profile. The description discloses that it runs asynchronously and returns a job_id immediately, which is useful behavioral context. It doesn't mention what happens on failure, or that it may consume resources, but given the annotations are sparse, the description adds some value but could be more explicit about side effects.
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 description is a single, concise sentence that packs in key details: 'previously configured', 'asynchronously', 'return a job_id immediately'. No fluff, front-loaded with the action, and completely efficient.
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 the complexity is low (2 params, no output schema, no nested objects), the description adequately covers the essential aspects: what it does, the async nature, and the return. It could mention that it returns a job_id for tracking, but it already does. It doesn't explain how to use the job_id, but that's likely covered by other tools like check_job. Overall, it's reasonably complete for a simple tool.
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 100% for both parameters, so the description adds little beyond what the schema already provides. The description mentions 'previously configured' which reinforces the config_id parameter's role, but doesn't add extra detail about max_parallel. With full schema coverage, baseline of 3 is appropriate.
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 the tool executes a previously configured parameter sweep and returns a job_id asynchronously. It uses a specific verb (execute) and resource (parameter sweep), and it distinguishes from siblings like run_montecarlo by focusing on 'parameter sweep' rather than Monte Carlo. However, it doesn't explicitly name the alternative, but the purpose is clear.
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 usage context: 'previously configured' and 'config_id' from configure_sweep or configure_montecarlo. It doesn't explicitly say when not to use it or mention alternatives, but the context of requiring a config_id implies it should be used after configuration. Sibling tools like run_montecarlo exist, but no contrast is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
server_statusARead-onlyIdempotent
Get comprehensive server status including detected simulators, configuration settings, security sandbox paths, and runtime state. Use this to check what capabilities are available before attempting operations.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | Response format: 'json' for structured data, 'text' for human-readable |
Output Schema
| Name | Required | Description |
|---|---|---|
| runtime | No | |
| simulators | No | |
| tool_count | No | |
| diagnostics | No | |
| tool_profile | No | |
| allowed_paths | No | |
| configuration | No | |
| simulator_select | No | |
| default_simulator | No | |
| requested_simulator | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds useful context by listing the kinds of status information returned (simulators, config, sandbox paths, runtime state), which goes beyond the annotation metadata.
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?
Two concise sentences: the first front-loads the action and resource with specific details, and the second provides actionable usage guidance. Every word serves a purpose with no redundancy or filler.
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?
The tool is low-complexity (one optional parameter, no nesting) and has an output schema, so the description need not detail return values. It sufficiently covers what the tool reports and when to use it, making it complete for this context.
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 input schema has 100% description coverage for the single optional 'format' parameter, so the schema fully documents semantics. The description itself adds no parameter-level detail, which is acceptable because the schema does the heavy lifting.
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 uses a specific verb ('Get') and resource ('comprehensive server status'), and enumerates concrete contents: detected simulators, configuration settings, security sandbox paths, and runtime state. This clearly distinguishes it from sibling tools such as run_simulation or check_job.
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 gives clear usage context: 'Use this to check what capabilities are available before attempting operations.' It implies a pre-flight check role but does not explicitly list when not to use it or name alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_component_valueAIdempotent
Set component value(s) in a circuit file (single or batch mode), or rewrite one component's node connectivity ('nodes', single mode, .cir/.net only). A no-op value write is reported as unchanged.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to circuit file (.cir, .net, or .asc) | |
| nodes | No | Single mode only: rewrite the component's node connectivity to this ordered list (e.g. ['in', 'out', '0']) — the fix for a wrong or typo'd connection. Requires 'reference'; .cir/.net only (on a .asc, wire pins with connect). Not combined with 'value'/'values' — set the value in a separate call. | |
| value | No | New value for single mode (e.g., '10k', '100n') | |
| values | No | Batch mode: {reference: value} dict (e.g., {'R1': '10k', 'C1': '100n'}) | |
| reference | No | Component reference for single mode (e.g., 'R1') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations provide idempotentHint=true, readOnlyHint=false, destructiveHint=false. The description adds behavioral context: it mentions that a no-op value write is reported as unchanged, which is useful. It also clarifies that nodes rewrite is only for .cir/.net and not for .asc, and that nodes cannot be combined with value/values. This goes beyond the annotations by explaining the behavior of the tool in specific scenarios. No contradiction with 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 description is concise and front-loaded. It states the main purpose in the first sentence, then adds a note about no-op behavior. It's two sentences total, with no wasted words. The information is dense but clear. It doesn't repeat what's in the schema, and it's appropriately sized for the tool's complexity.
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 the tool's complexity (two modes, multiple parameters, file type restrictions), the description covers the key points: modes, file type constraints, parameter combinations, and no-op behavior. It doesn't explain return values, but there's no output schema, so that's not required. It could mention what happens on error or the exact format of the response, but for a tool with good schema coverage and annotations, this is sufficient. The description is complete enough for an agent to use it correctly.
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 100%, so the schema already documents all parameters. The description adds value by explaining the modes (single vs batch) and the relationship between parameters (e.g., nodes requires reference, not combined with value/values). It also provides examples for value and values. This adds meaning beyond the schema's basic descriptions, though the schema already covers the basics. The description helps clarify the parameter interactions.
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 the tool's function: setting component values in single or batch mode, and rewriting node connectivity. It specifies the resource (circuit file) and the actions (set value, rewrite nodes), and distinguishes between the two modes. It also differentiates from siblings by mentioning the specific operation on component values/nodes, which is distinct from other tools like add_component or edit_directive.
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 provides clear context on when to use the tool: for setting values or fixing node connectivity. It mentions constraints like 'single mode only' for nodes, and that nodes requires .cir/.net only, and not combined with value/values. However, it doesn't explicitly state when not to use this tool or mention alternatives (e.g., for .asc files, it says 'wire pins with connect' but doesn't name the tool). It gives some guidance but lacks explicit exclusions or alternative tool references.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
signal_statsARead-onlyIdempotent
Scalar summary of one signal in a .raw result. Use this when you need a single number per metric (average, RMS, peak, etc.) — not a waveform or a trend.
Transient: time-weighted mean, RMS, std, abs-mean, and min/max/pk-pk using trapezoidal integration (RMS = sqrt(∫ y² dt / T)). This is correct on SPICE's adaptive timestep — simple np.mean(y) would overweight densely sampled regions. Optionally restrict to [t_start, t_end]; passing no window averages the whole waveform including any startup transient, which is usually wrong for RMS/mean.
DC: returns min/max/pk-pk and the simple/abs mean over the swept axis, plus sweep_start_used/sweep_end_used/sweep_span. RMS and std are deliberately omitted — they're meaningless on a non-time axis. Use t_start/t_end to restrict the sweep range.
AC: returns magnitude (dB) min/max/mean and phase (deg) min/max. t_start/t_end are rejected for AC — use query_value for a point at a specific frequency.
Noise: returns min/max/pk-pk of the noise spectral density over the frequency axis, plus freq_start_used/freq_end_used. Mean, RMS, std, and duration are omitted — a plain mean of spectral density is dominated by sample clustering and the sweep span, not the circuit; min/max is the useful worst-case reading. t_start/t_end are rejected — pass them via query_value at specific frequencies instead.
Related tools: for rise/fall times use edge_metrics; for overshoot/settling use pulse_response; for period/duty use periodic_metrics; to aggregate .MEAS values across a sweep use measurement_stats.
| Name | Required | Description | Default |
|---|---|---|---|
| step | No | Step index for .step directives | |
| t_end | No | Window end in SPICE notation. Transient only; rejected for AC. | |
| format | No | Response format: 'json' for structured data, 'text' for human-readable | |
| job_id | No | Analyze a specific run of a completed sweep/MC (or single) job instead of a raw_file path; pair with ``run_index``. Lets you summarize a sweep run the same way you'd summarize a standalone raw. | |
| signal | Yes | Signal/trace name (e.g., 'V(out)', 'I(R1)'), or a device operating-point shorthand for an ngspice .save'd parameter: 'm1.gm' / 'm1.vth' (resolves to '@m1[gm]', incl. subcircuit paths like 'x1.m1.gm'). | |
| t_start | No | Window start in SPICE notation (e.g. '1m', '100u'). Transient only. Strongly recommended when computing RMS or average — the startup transient otherwise biases the result. Rejected for AC analysis (time-windowing a frequency sweep is an error). | |
| raw_file | No | Path to .raw result file. Pass this OR ``job_id`` (a job run), not both. | |
| run_index | No | 0-based run to analyze when ``job_id`` is given (default 0). |
Output Schema
| Name | Required | Description |
|---|---|---|
| max | No | |
| min | No | |
| rms | No | |
| std | No | |
| mean | No | |
| max_db | No | |
| min_db | No | |
| signal | No | |
| mean_db | No | |
| abs_mean | No | |
| duration | No | |
| warnings | No | |
| max_phase | No | |
| min_phase | No | |
| sweep_span | No | |
| t_end_used | No | |
| point_count | No | |
| peak_to_peak | No | |
| t_start_used | No | |
| analysis_type | No | |
| freq_end_used | No | |
| sweep_end_used | No | |
| freq_start_used | No | |
| sweep_start_used | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark readOnlyHint=true, idempotentHint=true, destructiveHint=false, so safety profile is clear. Description adds deep behavioral context: explains integration method (trapezoidal), warns about startup transients biasing RMS/mean, discloses omitted metrics (RMS/std for DC, mean for Noise) and justifications, and notes correction of common mistakes (np.mean(y)). No contradictions.
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?
Well-structured with paragraph breaks per analysis type. Front-loaded with clear purpose. Some repetition (t_start/t_end rejected appears twice, 'use query_value' appears twice) and the list of related tools is long but valuable. Length is justified by complexity (4 analysis types) but could be tightened slightly.
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 high complexity (4 analysis modes, nuanced statistical methods), the description covers all salient points: analysis-specific calculations, omissions, windowing, alternatives, and related tools. Output schema exists, so return values need not be described. For a summary tool with diverse modes, this is complete.
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 already provides extensive descriptions (100% coverage), and the description adds value by explaining semantics beyond schema: clarifies transient windowing, rejected parameters for AC/noise, and meaning of omitted metrics. As baseline 3 with high coverage, it reaches 4 for adding context like 'Strongly recommended when computing RMS' and 'passing no window averages the whole waveform including any startup transient'. Not 5 because schema already covers most parameter meanings.
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?
Description states it's a scalar summary of one signal in a .raw result and differentiates it from siblings by naming it for single-number-per-metric needs, not waveforms/trends. It explicitly lists related tools (edge_metrics, pulse_response, periodic_metrics, measurement_stats) for other use cases, providing strong sibling differentiation.
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?
Provides explicit guidance on when to use and when not: 'Use this when you need a single number per metric — not a waveform or a trend.' It also details analysis-type-specific behavior (Transient, DC, AC, Noise) and explains why restrictions apply (e.g., t_start/t_end rejected for AC). Mentions alternatives like query_value for specific frequencies and lists related tools for other metrics.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
simulation_summaryARead-onlyIdempotent
Get a comprehensive simulation summary including type, signal list, data size, .MEAS results, Fourier analysis, AC bandwidth metrics, and warnings.
| Name | Required | Description | Default |
|---|---|---|---|
| step | No | Step index for ac_bandwidth_metrics on a stepped (.step) run. Default 0 (first step). On a multi-step run the metric is computed for this step only — a warning notes it. | |
| format | No | Response format: 'json' for structured data, 'text' for human-readable | |
| job_id | No | Summarize a specific run of a completed sweep/MC (or single) job instead of a raw_file path; pair with ``run_index``. The .log is taken from beside the run's raw unless ``log_file`` is given. | |
| signal | No | Signal for AC bandwidth metrics (e.g., 'V(outp)'). Required for AC analysis. | |
| log_file | No | Optional path to .log file. Defaults to the resolved raw with the extension swapped to ``.log`` — pass an explicit value only if the log lives somewhere unusual. | |
| raw_file | No | Path to .raw result file. Pass this OR ``job_id`` (a job run), not both. | |
| run_index | No | 0-based run to summarize when ``job_id`` is given (default 0). |
Output Schema
| Name | Required | Description |
|---|---|---|
| range | No | |
| errors | No | |
| fourier | No | |
| signals | No | |
| sim_type | No | |
| warnings | No | |
| step_count | No | |
| meas_errors | No | |
| point_count | No | |
| measurements | No | |
| observations | No | |
| failed_measurements | No | |
| ac_bandwidth_metrics | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, covering the safety profile. The description adds the list of report sections but no extra behavioral context (e.g., performance for large files, reliance on job_id vs raw_file). With annotations present, a 3 is appropriate.
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 description is a single, focused sentence that front-loads the core action and lists key outputs. No extraneous words or repetition; 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?
With a present output schema, full parameter descriptions, and safety annotations, the description is sufficient for a summarization tool. It covers all major report components, and the agent can infer that no side-effects occur. Slight miss: no mention of the job_id/raw_file choice, but that is schema-documented.
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 coverage is 100% – every parameter has a detailed description in the input schema. The tool description does not add any parameter-level meaning beyond what the schema already provides, so the baseline 3 applies.
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 uses a specific verb ('Get') and resource ('comprehensive simulation summary') and enumerates the exact contents (type, signal list, data size, .MEAS results, Fourier analysis, AC bandwidth metrics, warnings). This clearly differentiates it from siblings like bode_metrics or thd, which target specific analyses.
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 provides no guidance on when to use this tool versus alternatives (e.g., batch_results, check_job). It does not mention prerequisites, workflows, or exclude cases. Given the rich sibling set, this is a notable gap.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
stability_metricsARead-onlyIdempotent
Find EVERY unity-gain and -180° phase crossover in a loop-gain AC sweep, report phase margin at each unity-gain crossing and gain margin at each -180° crossing. Replaces the single-crossing approximation in simulation_summary, which returns wrong margins on conditionally-stable systems.
Run this on a LOOP-GAIN signal (typically a dedicated middlebrook probe or .AC of the open loop). Running on a closed-loop output gives meaningless margins — if the DC phase starts near ±180° (a closed-loop / inverting output rather than a loop probe, which starts near 0°), a warning says so in warnings.
Returns: dc_gain_db, high_freq_gain_db, stability classification (stable / unstable / conditional / unconditional / always_below_unity), all crossings, per-crossing margins, and the worst-case values.
Nuances:
Phase is UNWRAPPED first, so systems whose phase drops past -360° are handled correctly (otherwise the raw wrap hides the crossing).
If phase NEVER crosses -180°, gain margin is 'infinite' (returned as null with stability='unconditional'). That's stable, not an error.
If gain NEVER reaches unity, phase margin is undefined (returned as null with stability='always_below_unity').
Multiple crossovers trigger stability='conditional' and a warning — each one needs its own review.
For -3 dB filter cutoffs use bode_metrics(mode='filter'); for custom crossings use bode_metrics(mode='crossing').
| Name | Required | Description | Default |
|---|---|---|---|
| step | No | Step index for .step sweeps | |
| format | No | ||
| job_id | No | Analyze a completed job run by id instead of a raw_file path; pair with ``run_index``. Lets you read a sweep / Monte-Carlo run's margins. | |
| signal | Yes | Loop-gain signal (e.g. 'V(loop)') | |
| raw_file | No | Path to loop-gain AC analysis .raw file. Pass this OR ``job_id`` (a job run), not both. | |
| run_index | No | 0-based run to analyze when ``job_id`` is given (default 0). | |
| min_separation_decades | No | Merge near-duplicate crossovers closer than this many decades. |
Output Schema
| Name | Required | Description |
|---|---|---|
| signal | Yes | |
| warnings | Yes | |
| stability | Yes | |
| dc_gain_db | Yes | |
| gain_margins | Yes | |
| phase_margins | Yes | |
| high_freq_gain_db | Yes | |
| gain_margin_worst_db | No | |
| phase_180_crossovers | Yes | |
| unity_gain_crossovers | Yes | |
| phase_margin_worst_deg | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/destructive hints, and the description goes further: explains phase unwrapping, null margin handling (infinite/undefined), conditional stability warnings, and multi-crossing behavior. No contradictions with 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?
Well-structured with clear sections: purpose, usage, returns, nuances. Front-loaded with core function, then edge cases. A bit long but every sentence adds value; could be slightly trimmed but remains efficient for a complex tool.
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 the tool's complexity and existing output schema, the description covers all key aspects: return values, edge cases (never-crossing phase/gain), multi-crossing behavior, and disambiguation from siblings. Comprehensive without needing the output schema details.
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 coverage is high (86%) and parameters like signal, raw_file, job_id, run_index, min_separation_decades already have clear descriptions. The tool description adds minimal new parameter semantics, mostly contextual (e.g., loop-gain requirement) but does not exceed baseline for well-documented 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?
Description explicitly states it finds all unity-gain and -180° phase crossings, reports phase/gain margins, and replaces a flawed approximation in simulation_summary. It clearly distinguishes from bode_metrics and simulation_summary, making the purpose unambiguous.
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?
Provides explicit when-to-use instructions: run on LOOP-GAIN signals, warns against closed-loop outputs, and names alternatives for other cases (bode_metrics for filter cutoffs and custom crossings). Includes warning detection and clear exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
symbol_infoARead-onlyIdempotent
Get symbol pin positions, bounding box, and description. Optionally compute absolute positions for a given placement and rotation.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | Placement X coordinate (for computing absolute positions) | |
| y | No | Placement Y coordinate (for computing absolute positions) | |
| format | No | Response format: 'json' for structured data, 'text' for human-readable | |
| symbol | Yes | Symbol name (e.g., 'nmos', 'pmos', 'res', 'cap', 'voltage') | |
| rotation | No | R0 |
Output Schema
| Name | Required | Description |
|---|---|---|
| name | No | |
| pins | No | |
| placement | No | |
| bbox_width | No | |
| bbox_height | No | |
| description | No | |
| absolute_pins | No | |
| absolute_bounding_box | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true digital matching the non-destructive nature. The description adds that it returns pin positions, bounding box, and description, and indicates optional computation behavior without contradicting 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 description is a single, concise sentence stating the tool's function. The input schema is well-organized with defaults, enums, and descriptions. No redundant or excessive 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?
The description covers the main purpose and optional behavior. However, it doesn't specify what 'absolute positions' means precisely or when it's useful, and doesn't mention alternatives or edge cases. Still, context is sufficient for typical use.
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?
Each parameter has a clear description: 'symbol' with examples, 'x'/'y' as placement coordinates, 'rotation' with enum values, 'format' with choices. Required parameter is specified. Meaning and purpose are unambiguous.
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 the verb 'Get' with specific resources: 'symbol pin positions, bounding box, and description.' It also distinguishes itself from siblings like component_info and list_components by focusing on symbol-level geometric and descriptive data, with an optional absolute-position computation.
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 usage: call when you need symbol pin positions, bounding box, or description. It explains optional behavior for computing absolute positions when placement x/y/rotation are provided. It doesn't explicitly state when NOT to use it versus alternatives like component_info, but the purpose is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
thdARead-onlyIdempotent
Total harmonic distortion (THD and THD+N) of a periodic transient signal via FFT — works on any .tran result without a .four directive in the deck, and on any simulator. Defaults to COHERENT sampling (record trimmed to whole fundamental cycles, rectangular window) so harmonics land exactly on bins and THD is exact; window='hann' is the approximate fallback. Surfaces every condition the number depends on: the fundamental (given vs auto-detected), window kind, cycles analyzed, FFT length, sample rate, and per-harmonic levels. For LTspice's own .four result instead, see simulation_summary's Fourier section.
| Name | Required | Description | Default |
|---|---|---|---|
| step | No | Step index for .step sweeps | |
| t_end | No | Window end in SPICE notation. | |
| format | No | 'json' or 'text' | |
| job_id | No | Analyze a run of a completed sweep/MC (or single) job instead of a raw_file path; pair with ``run_index``. | |
| signal | Yes | Signal to analyze (e.g. 'V(out)'). | |
| window | No | 'coherent' trims to whole fundamental cycles + rectangular window (exact, no leakage); 'hann' analyzes the full window with a Hann taper (approximate — use when cycles can't be made integer). | coherent |
| t_start | No | Window start (SPICE notation) — skip the startup transient before measuring. | |
| raw_file | No | Path to .raw transient result. Pass this OR ``job_id`` (a job run), not both. | |
| run_index | No | 0-based run to analyze when ``job_id`` is given (default 0). | |
| fundamental | No | Fundamental frequency in SPICE notation (e.g. '1k'). Omit to auto-detect (largest FFT bin); pass it for an exact coherent result. | |
| n_harmonics | No | Harmonics 2..n folded into THD (1..50, default 7). |
Output Schema
| Name | Required | Description |
|---|---|---|
| fs_hz | Yes | |
| n_fft | Yes | |
| signal | No | |
| thd_db | Yes | |
| window | Yes | |
| thd_pct | Yes | |
| coherent | Yes | |
| n_cycles | Yes | |
| warnings | Yes | |
| harmonics | Yes | |
| thd_n_pct | Yes | |
| thd_ratio | Yes | |
| thd_n_ratio | Yes | |
| fundamental_hz | Yes | |
| n_harmonics_used | Yes | |
| fundamental_source | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare read-only/idempotent behavior, which the description matches. It goes beyond annotations by disclosing the coherent sampling default, exactness implications, auto-detection of fundamental, and all conditions affecting the result—excellent transparency for a signal-analysis tool.
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 dense sentences, each adding critical information: purpose, methodology accuracy trade-offs, and pointers to alternatives. Front-loaded with the main action, no fluff.
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 an 11-parameter tool with an output schema, the description covers purpose, usage conditions, algorithmic nuances, and alternative tools. The existence of an output schema handles return values, so no gaps remain.
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 coverage is 100%, so parameters are already documented. The description adds meaningful context for key parameters (e.g., fundamental auto-detection vs explicit, window choice affecting accuracy, t_start for skipping transient), enriching the schema without redundant repetition.
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?
Description clearly states it computes THD/THD+N from a transient signal via FFT, and explicitly distinguishes from LTspice's .four via simulation_summary. The verb and resource are specific, and the 'works on any .tran result' scope clarifies its niche.
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?
Explicitly says when to use (any .tran result without .four, any simulator) and directs to simulation_summary for .four results. Also provides guidance on coherent vs. hann window selection, which helps the agent choose the right approach.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
timing_betweenARead-onlyIdempotent
Use when you need propagation delay / skew between TWO signals — e.g. input-to-output delay, clock-to-Q, input-skew. Inputs one transient .raw containing both signals on a shared time axis.
Returns: signed delay = t_b - t_a where t_a and t_b are the FIRST threshold crossings of signal_a and signal_b in the window. Negative delay means signal_b leads signal_a.
Thresholds default to 50% of EACH signal's own min-max range in the window — intentional for asymmetric CMOS where V_in and V_out have different rails. Override per-signal via threshold_a / threshold_b if you need absolute thresholds (e.g. VIH/VIL at fixed voltages). Set direction_a / direction_b independently (e.g. rising input → falling output for an inverter).
Picks only the FIRST crossing of each signal in the window — if both signals have multiple edges, tighten t_start/t_end around the specific edge pair you want. Rejects AC analysis.
| Name | Required | Description | Default |
|---|---|---|---|
| step | No | Step index for .step sweeps | |
| t_end | No | Window end in SPICE notation | |
| format | No | 'json' or 'text' | |
| job_id | No | Analyze a specific run of a completed sweep/MC (or single) job instead of a raw_file path; pair with ``run_index``. | |
| t_start | No | Window start in SPICE notation | |
| raw_file | No | Path to .raw transient result file. Pass this OR ``job_id`` (a job run), not both. | |
| signal_a | Yes | Reference signal (e.g. 'V(in)') | |
| signal_b | Yes | Delayed signal (e.g. 'V(out)'). delay = t_b - t_a. | |
| run_index | No | 0-based run to analyze when ``job_id`` is given (default 0). | |
| direction_a | No | rising | |
| direction_b | No | rising | |
| threshold_a | No | Absolute threshold for signal_a. If omitted, threshold_pct of signal_a's range is used. | |
| threshold_b | No | Absolute threshold for signal_b. If omitted, threshold_pct of signal_b's range is used. | |
| threshold_pct | No | Threshold percent applied PER SIGNAL (not shared) — asymmetric for CMOS with different rails. |
Output Schema
| Name | Required | Description |
|---|---|---|
| t_a | Yes | |
| t_b | Yes | |
| delay | Yes | |
| signal_a | Yes | |
| signal_b | Yes | |
| warnings | Yes | |
| direction_a | Yes | |
| direction_b | Yes | |
| num_crossings_a | Yes | |
| num_crossings_b | Yes | |
| threshold_a_used | Yes | |
| threshold_b_used | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes far beyond the annotations (readOnly, idempotent) by explaining the exact algorithm: first threshold crossings, signed delay semantics, per-signal threshold defaults, direction overrides, and the need to tighten window for multiple edges. No contradictions with annotations; this adds substantial behavioral context.
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 description is compact yet information-dense, with a clear front-loaded purpose. Each sentence contributes essential details—from usage scenarios to algorithm specifics to edge-case handling—without redundancy. It's well-structured for quick comprehension.
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 tool with 14 parameters and an output schema, the description covers all critical aspects: input requirements, return value semantics, threshold logic, direction handling, edge limitation, and AC rejection. It is complete enough for an agent to use correctly without further clarification.
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 coverage is high (86%) but the description adds critical interpretive meaning beyond the schema: threshold_a/b override behavior, direction_a/b independence, and the importance of t_start/t_end when multiple edges exist. These clarifications are not explicit in the schema, enriching parameter understanding.
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 the tool's purpose: measuring propagation delay/skew between two signals, with specific examples like input-to-output delay, clock-to-Q, and input-skew. It distinguishes from siblings by focusing on two-signal timing analysis, which is distinct from broader metrics tools like edge_metrics or signal_stats.
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?
Provides explicit scenarios for use (e.g., input-to-output, clock-to-Q) and a clear exclusion ('Rejects AC analysis'). However, it does not name alternative tools directly, but the context strongly implies when to use this tool vs others, so it's close to a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trace_netARead-onlyIdempotent
Report everything electrically connected to a net: starting from a pin ('Ref.Pin'), a net label ('net:NAME'), or an (x,y) coordinate, return the net's labels and every component pin, FLAG, and wire vertex on it. Follows both wires (segment-aware — catches labels placed mid-wire) and same-name FLAGs (LTspice's name-based nets). Use it to answer 'what's on net X', to confirm a connect landed, or to spot an accidental short (a net carrying two different non-ground labels).
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | X coordinate (with y) to trace from | |
| y | No | Y coordinate (with x) to trace from | |
| pin | No | Pin or net reference to start from: 'Ref.Pin' (e.g. 'M1.D'), 'net:NAME' (e.g. 'net:VDD'), or omit and pass x/y. | |
| path | Yes | Path to an .asc schematic | |
| format | No | Response format: 'json' for structured data, 'text' for human-readable |
Output Schema
| Name | Required | Description |
|---|---|---|
| pins | No | |
| start | No | |
| labels | No | |
| is_shorted | No | |
| coordinates | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true, but the description adds meaningful behavioral detail beyond that: it follows wires segment-aware (catching mid-wire labels) and tracks same-name FLAGs (LTspice's name-based nets). This provides algorithmic insight not otherwise available, fulfilling the transparency requirement without contradicting 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 description is a single, well-structured sentence that front-loads the primary action and then expands with selective details (segment-aware, FLAG handling). Every clause adds value, and it avoids redundancy with the schema. It is concise without sacrificing completeness.
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 a moderate complexity tool with an output schema present, the description covers all necessary aspects: input methods, output types, and practical use cases. It does not need to explain return values because the output schema handles that. The description is self-sufficient and leaves no significant gaps.
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 input schema has 100% coverage, with each parameter having a description. The description itself does not add new parameter semantics beyond what the schema already provides (e.g., pin syntax, coordinate alternative, format choices). It only reinforces existing information, so a baseline score of 3 is appropriate.
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 the tool's purpose: to report everything electrically connected to a net, with specific input types (pin, net label, or coordinates) and exact outputs (labels, pins, flags, wire vertices). The phrase 'what's on net X' further clarifies its intent and distinguishes it from sibling tools like list_components or connect.
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 gives explicit use cases: answer 'what's on net X', confirm a connect landed, spot an accidental short. However, it does not explicitly state when NOT to use it or mention alternatives. The when-to-use guidance is strong, but the absence of when-not or alternative tools prevents a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
unload_libraryAIdempotent
Unload a previously loaded library from the session.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to library file or directory to unload |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare idempotentHint=true and destructiveHint=false, which cover safety. The description adds minimal context ('from the session') but does not elaborate on behavior such as idempotency or what happens if the library doesn't exist. With annotations present, the description meets the baseline but adds little beyond them.
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 description is a single concise sentence with no filler. It is front-loaded and all words contribute to meaning.
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 tool with one parameter fully described and no output schema, the description is nearly complete. It states the resource and action. It lacks details like effects of unloading a non-existent library or whether unloading is reversible, but given the simplicity and annotations, it's sufficient. A score of 4 reflects its adequacy without excess.
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 100%: the 'path' parameter is fully described as 'Path to library file or directory to unload'. The description repeats the parameter concept but adds no additional semantics beyond the schema, so a baseline of 3 is appropriate.
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 uses a specific verb 'unload' with a clear resource 'library' and scope 'from the session'. It distinguishes itself from sibling tools like load_library (loading) and list_libraries (listing) by clearly stating the action of removing a previously loaded library.
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 phrase 'previously loaded' implies use after a library has been loaded, which gives clear context. However, it does not explicitly name alternatives or when-not-to-use scenarios. For a simple tool, this is adequate but slightly under explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_netlistARead-onlyIdempotent
Lint a netlist or schematic before simulation — the static circuit check gate. Catches: empty/whitespace-only netlist files, element arity (too few nodes, missing E/G/F/H/B value), dangling nodes in .cir/.net netlists (a node touching only one element terminal — warning, since deliberate fragments are legal), bias-topology degeneracies in .cir/.net netlists (a net with no DC path to ground — floating MOSFET gate, capacitive island, current-source-only node, or isolated domain — warning, since the operating point may still be defined by other means), duplicate/multiple analysis directives ('More than one analysis specified'), .MEAS whose analysis kind isn't present, known-bad .MEAS patterns (vdb()/phase()/group_delay()), and directives the LTspice runner is known to reject (set target_simulator='ngspice' to instead flag ngspice-only incompatibilities, e.g. a zero '.tran' step time). On .asc, also surfaces named-net shorts, floating pins, and dangling labels. Returns a structured issue list; an empty list means the file passes the static gate. Note: value tokens (e.g. a typo'd '1kk') and undefined model references are NOT checked — LTspice coerces or resolves those at run time.
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | Path to circuit file (.cir, .net, or .asc) | |
| format | No | Response format: 'json' for structured data, 'text' for human-readable | |
| target_simulator | No | Simulator the deck is intended to run on; selects which simulator's pre-flight rules apply. 'LTspice' runs the LTspice-specific gates (more-than-one-analysis rejection, .meas analysis-kind matching, C=/L= primary-value, viewer-only .meas functions). 'ngspice' skips those and applies ngspice-only checks instead (a zero '.tran' step time is rejected). Structural checks (element arity, dangling nodes, bias topology) apply to both. Defaults to LTspice. | LTspice |
Output Schema
| Name | Required | Description |
|---|---|---|
| file | No | |
| issues | No | |
| issue_count | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true and idempotentHint=true. The description adds extensive behavioral detail: it lists categories of issues caught (dangling nodes, bias degeneracies, duplicate directives), distinguishes warnings from errors, and explicitly states what is NOT checked (value tokens, undefined models). It also explains differences between LTspice and ngspice modes. No contradictions with 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 description is a single dense paragraph but every sentence adds value. It might benefit from bullets for readability, but it's appropriately sized given the tool's complexity and covers all critical information without fluff.
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 the tool's complexity, the description thoroughly covers purpose, checks, exclusions, parameter behavior, and return expectations. The presence of an output schema relieves the need to explain return format; the description emphasizes the empty-list meaning, which is sufficient.
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 coverage is 100%, so baseline is 3. The description adds significant context for target_simulator by explaining which gates each simulator selection activates, going beyond the schema's basic enum. It also clarifies the path parameter's accepted extensions. This pushes the score above baseline.
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 explicitly states the tool's purpose as a static circuit check gate that lints netlists/schematics before simulation, enumerating specific checks. It clearly distinguishes itself from simulation, creation, and export siblings by focusing on pre-flight validation.
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?
It specifies when to use (before simulation) and explains how the target_simulator parameter changes the set of checks applied. It doesn't explicitly mention when not to use, but the context is clear enough for an agent to select this tool for validation tasks.
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.
49 tool updates
v0.1.0- First observed
ac_structure - First observed
add_component - First observed
apply_schematic_ops - First observed
batch_results - First observed
bode_metrics - First observed
cancel_job - First observed
check_job - First observed
component_info - First observed
configure_montecarlo - First observed
configure_sweep - First observed
connect - First observed
create_netlist - First observed
create_schematic - First observed
diff_circuit - First observed
edge_metrics - First observed
edit_directive - First observed
export_netlist - First observed
export_waveform - First observed
find_model - First observed
get_waveform - First observed
list_components - First observed
list_libraries - First observed
load_library - First observed
measurement_stats - First observed
noise_integral - First observed
operating_point - First observed
parameter - First observed
periodic_metrics - First observed
plot_waveform - First observed
pulse_response - First observed
query_value - First observed
read_circuit - First observed
recent - First observed
reset_schematic - First observed
resonance - First observed
run_montecarlo - First observed
run_simulation - First observed
run_sweep - First observed
server_status - First observed
set_component_value - First observed
signal_stats - First observed
simulation_summary - First observed
stability_metrics - First observed
symbol_info - First observed
thd - First observed
timing_between - First observed
trace_net - First observed
unload_library - First observed
validate_netlist
TDQS
Scored across 49 tools
Most tools have clearly distinct purposes, with detailed cross-referencing that resolves potential confusion (e.g., get_waveform vs export_waveform vs plot_waveform). A few overlaps exist—such as run_sweep/run_montecarlo and the various AC analysis tools—but the descriptions explicitly delineate when each should be used.
All tool names follow a snake_case convention with a mostly verb_noun pattern (run_simulation, list_components, set_component_value). A few names are nouns or adjectives (resonance, operating_point, recent, parameter), but the overall style is consistent and readable.
49 tools is a very large surface for an MCP server, exceeding the 25+ threshold where coherence tends to degrade. While the domain is broad (simulation, analysis, schematic editing, libraries), the sheer number makes navigation and selection harder.
The tool set covers the full LTspice workflow: circuit creation/editing, netlist validation, simulation execution (single, sweep, Monte Carlo), job management, comprehensive signal analysis (time/frequency/AC/noise), and library management. There are no obvious dead ends; every core operation has a corresponding tool.
Maintenance
Related MCP Connectors
MCP server for building and testing AI agents with multi-model experimentation and insights.
LLM Orchestration MCP Agent
MCP server for AI dialogue using various LLM models via AceDataCloud
A comprehensive Model Context Protocol (MCP) server that enables AI assistants to interact with yo…
Related MCP Servers
- AlicenseBqualityCmaintenanceAI-powered circuit design through simulation — an MCP server that gives language models direct access to SPICE circuit simulation via ngspice, enabling natural language circuit description and automated netlist generation, simulation, measurement, and spec verification.2838 PyPI38GPL 3.0
- FlicenseCqualityCmaintenanceMCP server for automating LTspice on macOS, enabling simulation, schematic generation, data extraction, verification, and rendering via natural language or agents.7121-
- AlicenseNot gradedqualityBmaintenanceThis MCP server enables agents to control LTspice on macOS for running simulations, generating schematics, extracting data, and automating verification workflows.MIT
- AlicenseAqualityBmaintenanceAn MCP server that connects LLM assistants to real circuit simulation: LTspice and ngspice, plus direct editing of LTspice .asc schematics. Simulation results come back as structured numbers so the assistant can design, verify, and iterate on circuits.48298 PyPI57GPL 3.0