smith-charts-mcp
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@smith-charts-mcpDesign an L-match from 50Ω to 25-j15 at 2.4GHz and plot it on a Smith chart."
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
smith-charts-mcp
A lightweight Model Context Protocol server for RF & microwave engineering, built around the Smith chart.
Give Claude, Cursor or any MCP client the ability to convert impedances, analyze transmission lines and ladder circuits, synthesize L / Pi / T / stub / λ/4 matching networks, analyze transistor S-parameters (stability, gain, noise, conjugate match) and draw publication-quality Smith charts — with human-readable summaries in English or Turkish.
14 tools · 7 prompts · 8 resources
Runs anywhere: local stdio, or as a remote Streamable HTTP server at
/mcp. That lets you add it as a custom connector in Claude on web, desktop and mobile.Lightweight: 2 runtime dependencies (
@modelcontextprotocol/sdk,zod) + optional@resvg/resvg-jsfor PNG. No browser, no web framework, no database.Engineer-friendly input:
"2.4GHz","10nH","1.5pF","4k7","25-j15","0.25λ","45deg","12mm".Chainable: every matching tool returns
componentsin the exact formatanalyze_circuitandrender_smith_chartaccept. Design, verify and plot in three calls.Verified math: 66 tests, including textbook examples (Pozar). Every synthesized network is re-simulated before it is returned.
Installation
Hosted endpoint (no install, works on mobile)
Add https://smith-charts-mcp.technowide.software/mcp as a custom connector:
Claude (web, desktop, iOS, Android): Settings → Connectors → Add custom connector.
Any other client that supports remote Streamable HTTP MCP servers.
The hosted server always runs the latest release. Ask it version_info to see what changed.
Local (stdio)
Requires Node.js ≥ 20.
Claude Code
claude mcp add smith-charts -- npx -y smith-charts-mcpClaude Desktop / Cursor / Windsurf / VS Code
Add the server to your MCP config (claude_desktop_config.json, .cursor/mcp.json, …):
{
"mcpServers": {
"smith-charts": {
"command": "npx",
"args": ["-y", "smith-charts-mcp"],
"env": { "SMITH_CHARTS_MCP_LANG": "en" }
}
}
}From source
git clone https://github.com/furkanmeclis/smith-charts-mcp.git
cd smith-charts-mcp
npm install
npm run buildThen point your client at node /absolute/path/to/smith-charts-mcp/dist/index.js.
Inspect it interactively with npm run inspect, which opens the MCP Inspector.
Remote server (Claude mobile, web and other devices)
Run the Streamable HTTP transport and put it behind HTTPS:
npm run build
PORT=3000 node dist/index.js --http # → http://0.0.0.0:3000/mcp
# or with Docker
docker build -t smith-charts-mcp .
docker run -d -p 3000:3000 --restart unless-stopped smith-charts-mcpExpose it through your reverse proxy, e.g. https://smith-chart-mcp.example.com/mcp. Then in Claude go to Settings → Connectors → Add custom connector and paste that URL. The connector then works in the mobile apps as well.
What the HTTP mode provides:
Stateless: each request is self-contained, so you can run as many replicas as you like.
Endpoints:
GET /health: liveness check.GET /: info page.POST /mcp: the MCP endpoint.CORS is enabled.
Protection: per-IP rate limit (
RATE_LIMIT_PER_MINUTE, default 120) and a 4 MB body limit.No filesystem access:
touchstone_pathandoutput_pathare disabled, so clients cannot read or write files on your server. Pass Touchstone data astouchstone_contentinstead. SetSMITH_CHARTS_MCP_ALLOW_FS=1only on a private deployment.Docker image: includes the DejaVu fonts, so PNG labels render correctly on Linux.
Related MCP server: spicelib-mcp
Tools
Tool | What it does |
| Converts Z, z, Y, Γ, VSWR or return loss into all the others: VSWR, return/mismatch loss, Q, and equivalent series/parallel L or C at a frequency. |
| Zin of a lossy or lossless line with an electrical or physical length (εeff / velocity factor), Γ at load and input, and the positions of the voltage maxima and minima. |
| Cascades load → components → source. Returns Z, Γ and VSWR at every node, a frequency sweep, matched bandwidth and tolerance-corner analysis. |
| All L-section solutions, including complex source and load. Classifies each as low-pass or high-pass and reports DC behaviour, bandwidth and E-series rounding. |
| Pi and T networks for a chosen loaded Q, with every low-pass, high-pass and mixed variant. |
| Single-stub tuner (open or short, shunt or series), with lengths in λ, degrees and metres. |
| λ/4 transformer. Complex loads are first rotated to the nearest voltage maximum or minimum. |
| Summarizes a |
| Rollett K, |Δ|, μ and μ', plus source and load stability circles with their stable side. Can sweep a whole file. |
| Available, operating and unilateral constant-gain circles, with MAG/MSG or G_S,max / G_L,max as reference. |
| Constant noise-figure circles; also evaluates NF and available gain for a proposed source impedance. |
| Simultaneous conjugate match: ΓS, ΓL, GT,max, MSG and U, plus ready-made input and output L-networks. |
| Running version, release notes for any version, and "what changed since X". Also reports runtime capabilities. |
| PNG/SVG Smith chart with impedance, admittance or combined grid and light or dark theme. Overlays include circuit arcs, sweeps, points, VSWR/Q circles, any circle, a Touchstone S11 locus, and amplifier stability (shaded), gain and noise circles. Can also save the image to a file. |
All tools accept language: "en" | "tr". Results come back as a readable summary plus the full numeric JSON, which is also exposed as structuredContent.
Circuit format
Components are listed from the load towards the source:
{
"load": { "z": "25-j15" },
"frequency": "2.4GHz",
"components": [
{ "type": "capacitor", "placement": "series", "value": "6.63pF" },
{ "type": "inductor", "placement": "shunt", "value": "3.32nH", "q": 40 }
],
"sweep": { "span": "800MHz" },
"bandwidth_vswr": 2
}Element types:
inductor,capacitor,resistor: support Q, ESR, ESL and tolerance.rlc: series or parallel combination.impedance: constant Z or a Z(f) table.transmission_line: lossy, with εeff or velocity factor.stub: open or short, shunt or series.transformerandcoupled_inductors.
The load can be a constant z, a gamma, a table, or a measured .s1p file (touchstone_path), for example a VNA sweep of an antenna.
Prompts
Prompt | Workflow |
| Analyze the load, then design and compare every matching method, verify the best one, and plot it. |
| From an |
| Stability report over frequency, with shaded stability circles. |
| Tune a measured |
| Interactive Smith chart lesson (beginner, intermediate or advanced) with practice problems. |
| Step-by-step homework solution, with every number cross-checked by the tools. |
| Zin, standing waves and voltage maxima and minima for a terminated line. |
Every prompt takes a language argument (en / tr).
Resources
smith://docs/formulas.en.md,smith://docs/formulas.tr.md: formula sheet covering reflection, transmission lines, matching, stability, gain and noise.smith://docs/components.en.md,smith://docs/components.tr.md: circuit input format.smith://changelog.en.md,smith://changelog.tr.md: release history.smith://examples/bjt-100m-2g.s2p,smith://examples/lna-1g4-noise.s2p: example devices to experiment with.
Example conversation
You: Match a 25 − j15 Ω load to 50 Ω at 2.4 GHz. I need a DC block and standard E24 parts, and show me the Smith chart.
Claude calls
design_l_match(preferencedc_block,snap_to_series: "E24"), thenanalyze_circuitwith a sweep, thenrender_smith_chart. It answers with: series C 6.63 pF → shunt L 3.32 nH (E24 parts: 6.8 pF and 3.3 nH give VSWR 1.01 at 2.4 GHz). VSWR stays ≤ 2 from about 1.5 GHz to beyond 4.6 GHz, plus the chart above.
Configuration
Variable | Default | Meaning |
|
| Default summary language ( |
|
| Set to |
|
| HTTP listen settings. |
|
| HTTP requests per minute per client IP ( |
| off | Allow |
| auto | Font family and extra font directories used for PNG text. |
PNG output uses the optional @resvg/resvg-js dependency. If it is unavailable, render_smith_chart returns SVG instead.
Every chart carries two marks:
a faint
furkanmeclis/smith-charts-mcpwatermark;a QR code in the free bottom-right corner that links to this repository.
The QR is pre-generated at build time, so it adds no runtime dependency. To regenerate it for a fork, run npm run gen:qr -- <url>.
Development
npm install
npm test # node --test, runs the TypeScript sources directly (Node ≥ 22.18)
npm run typecheck
npm run build # → dist/
npm run dev # run the server from source (stdio)
npm run dev:http # … or over HTTP on :3000/mcpThe project layout:
src/core: pure math, no MCP dependency.src/render: SVG and PNG chart rendering.src/tools: MCP tool definitions.src/promptsandsrc/resources.
Versioning & releases
The project follows Semantic Versioning. Release notes live in CHANGELOG.md and inside the server itself: ask "which version are you and what changed?" and the model calls version_info.
Pushing a vX.Y.Z tag runs the release workflow, which:
verifies the version and runs the tests;
publishes the GitHub release;
publishes the multi-arch image
ghcr.io/furkanmeclis/smith-charts-mcp;redeploys the hosted endpoint.
See CONTRIBUTING.md for the full release steps.
Contributing
Issues and pull requests are welcome, in English or Turkish. Read CONTRIBUTING.md and the Code of Conduct first. Report security issues privately as described in SECURITY.md.
License
MIT © Furkan Meclis
Available Tools
14 toolsamplifier_stabilityTwo-port (amplifier) stability analysisARead-onlyIdempotent
Rollett stability factor K, |Δ|, Edwards-Sinsky μ (load) and μ' (source), unconditional-stability verdict and the input (source-plane) and output (load-plane) stability circles with their stable side. With a Touchstone file and no frequency, returns a K/μ table over the whole file and the stable frequency ranges. Use before designing any amplifier matching network to know which source/load impedances are safe.
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | Two-port device: either all four S-parameters (s11, s21, s12, s22 as {mag, angle_deg} or {re, im}) or a 2-port Touchstone file via touchstone_path / touchstone_content. | |
| language | No | Language of the human-readable summary: 'en' (English) or 'tr' (Türkçe). Defaults to the server setting. | |
| frequency | No | Analysis frequency (interpolated). Omit with a Touchstone file to sweep the whole file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so safety is covered. The description adds useful behavioral context: it lists the full output set and explains that a Touchstone file without a frequency triggers a full-file K/μ sweep and stable-range extraction.
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 tightly structured sentences: the first front-loads the computed outputs, the second covers the Touchstone-sweep behavior, and the third gives the design-stage usage cue. Every sentence earns its place with no 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?
With no output schema, the description successfully explains the return contents (K/μ table, stable frequency ranges, stability circles and their stable side). The nested input schema is fully described and the description supplies the design-workflow context, leaving nothing material missing for correct 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 the schema already documents parameters thoroughly. The description's note about omitting frequency with a Touchstone file to sweep the whole file largely restates what the schema's frequency field already says, adding little new semantics.
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 the exact computed quantities—Rollett K, |Δ|, Edwards-Sinsky μ and μ', unconditional-stability verdict, and source/load stability circles with stable side. This is a specific verb+resource statement that clearly separates the tool from siblings like gain_circles and noise_circles.
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 a clear when-to-use instruction: 'Use before designing any amplifier matching network to know which source/load impedances are safe.' No explicit when-not or named alternatives are provided, but the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_circuitAnalyze a ladder / matching circuitARead-onlyIdempotent
Analyze a cascaded RF circuit (load → components → source) the way a Smith chart does: returns the impedance, Γ and VSWR at every node, the final input impedance with return/mismatch loss, an optional frequency sweep (S11 in dB, VSWR vs. frequency), matched bandwidth for a VSWR limit, and Monte-Carlo-free tolerance corner analysis (± tolerance_pct on each component). Supported elements: inductor, capacitor, resistor (series or shunt, with Q/ESR/ESL), series/parallel RLC, custom impedance or Z(f) table, transmission line (lossy, εeff/velocity factor), open/short stubs (shunt or series), ideal transformer and coupled inductors. The load may be a constant Z, a Γ, a Z(f) table or a measured .s1p file (antenna). Use to verify a matching network, check an antenna tuner, or answer 'what impedance does the source see?'.
| Name | Required | Description | Default |
|---|---|---|---|
| z0 | No | Reference (system) characteristic impedance Z0 in Ω. Default 50. | |
| load | Yes | The load (termination) at the far end of the circuit. Give exactly one of: z, gamma, table, or a 1-port Touchstone (.s1p) via touchstone_path / touchstone_content (e.g. a measured antenna). | |
| sweep | No | Frequency sweep: give start+stop, or span (centred on frequency). | |
| language | No | Language of the human-readable summary: 'en' (English) or 'tr' (Türkçe). Defaults to the server setting. | |
| frequency | Yes | Design / analysis frequency. Electrical lengths (λ, deg) are defined at this frequency. | |
| components | No | Circuit elements ordered from the LOAD towards the SOURCE (the first element is connected directly to the load). Empty = bare load. | |
| bandwidth_vswr | No | Report the contiguous bandwidth around frequency where VSWR ≤ this value (e.g. 2). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive, closed-world), so the bar is lower. The description still adds real behavioral context beyond them: it discloses the full analysis result set, that the sweep is optional, that bandwidth is computed only for a VSWR limit, and that tolerance analysis is deterministic corner-based ('Monte-Carlo-free'), which is a meaningful behavioral distinction. It does not discuss failure modes or how it handles malformed element chains.
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 what the tool returns before the supported-element list, and both sentences carry substantive content. The long element enumeration ('inductor, capacitor, resistor... coupled inductors') largely duplicates the schema's oneOf branches and could be trimmed without information loss.
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?
No output schema exists, so the description must describe returns itself, and it does so thoroughly: per-node impedance/Γ/VSWR, input impedance with return and mismatch loss, optional S11/VSWR sweep, matched bandwidth, and tolerance corners. Combined with 100% schema coverage for the 7 inputs, an agent has everything needed to call and interpret 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?
Schema description coverage is 100% with 7 params, so the schema already documents every parameter including tolerance_pct, load forms, and element types. The description adds only marginal meaning (it re-lists the supported element families and notes ±tolerance_pct semantics), which the oneOf branches already convey. 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?
States a specific verb (analyze) and resource (cascaded RF circuit, load → components → source) and enumerates the concrete outputs: node impedances, Γ, VSWR, input impedance, return/mismatch loss, optional sweep, bandwidth, and tolerance corners. It is clearly distinguishable from the design_* siblings (which synthesize networks) because this tool only evaluates a given circuit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit scenarios: 'verify a matching network, check an antenna tuner, or answer what impedance does the source see?'. That is clear when-to-use guidance, but it never names a sibling alternative (e.g. design_l_match or tline_input_impedance) or states when a different tool is preferable, so it stops short of the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
conjugate_matchSimultaneous conjugate match & maximum gainARead-onlyIdempotent
Simultaneous conjugate match of a two-port for maximum transducer gain: ΓS and ΓL (and the impedances ZS, ZL the matching networks must present to the device), GT,max (= MAG), MSG, unilateral figure of merit U and the unilateral gain error bounds. Requires K > 1 and |Δ| < 1. With design_networks=true it also synthesizes L-section input and output matching networks from the system Z0 (verified by recomputing ΓS/ΓL).
| Name | Required | Description | Default |
|---|---|---|---|
| device | Yes | Two-port device: either all four S-parameters (s11, s21, s12, s22 as {mag, angle_deg} or {re, im}) or a 2-port Touchstone file via touchstone_path / touchstone_content. | |
| language | No | Language of the human-readable summary: 'en' (English) or 'tr' (Türkçe). Defaults to the server setting. | |
| frequency | No | Required with a Touchstone file; also needed for design_networks. | |
| design_networks | No | Also design lumped L-networks for input and output (needs frequency). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so safety is covered; the description adds real behavioral context beyond that: the K>1 and |Δ|<1 preconditions, and that design_networks triggers L-network synthesis that is self-verified by recomputing ΓS/ΓL. It does not describe return format or failure behavior, but it meaningfully enriches 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?
Two sentences, tightly written and front-loaded with the primary purpose and outputs before the conditional design_networks behavior. The heavy parenthetical nesting in the first sentence makes it dense, but every clause carries technical information rather than 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?
For a nested-object, no-output-schema tool, the description covers purpose, the exact computed quantities (effectively describing the return), validity preconditions, and the optional network-design branch. It omits any mention of error/edge-case behavior when the K/|Δ| conditions fail, leaving a small gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the parameters are already documented and the baseline is 3. The description adds incremental meaning for design_networks beyond the schema text ('synthesize L-section input/output networks from the system Z0, verified by recomputing ΓS/ΓL'), clarifying the role of Z0 and frequency, which justifies a bump to 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 description names the specific operation (simultaneous conjugate match of a two-port for maximum transducer gain) and enumerates the exact deliverables (ΓS, ΓL, ZS, ZL, GT,max/MAG, MSG, U, gain error bounds), so the agent knows precisely what the tool returns. It does not name a sibling it differs from (e.g., gain_circles or design_l_match), which keeps it short of a 5.
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 states clear applicability conditions: 'Requires K > 1 and |Δ| < 1' tells the agent when the tool is valid, and conditionally that design_networks=true adds L-section synthesis. It does not route the agent to alternative tools or state explicit when-not cases beyond the stability constraint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_l_matchDesign L-section matching networksARead-onlyIdempotent
Synthesize every two-element lumped L-network (series/shunt L and C) that matches a load to a source at one frequency. Handles complex loads and complex sources (conjugate match). Returns 2–4 solutions with exact component values, low-pass/high-pass classification, DC-block/DC-feed behaviour, verified input impedance and VSWR, matched bandwidth, and optional rounding to standard E12/E24/E96 values. Elements are listed load → source and can be passed directly to analyze_circuit or render_smith_chart. Use for 'match 25-j15 Ω to 50 Ω at 2.4 GHz'.
| Name | Required | Description | Default |
|---|---|---|---|
| z0 | No | Reference (system) characteristic impedance Z0 in Ω. Default 50. | |
| load | Yes | The load (termination) at the far end of the circuit. Give exactly one of: z, gamma, table, or a 1-port Touchstone (.s1p) via touchstone_path / touchstone_content (e.g. a measured antenna). | |
| source | No | Source impedance (default = z0, purely resistive). Complex sources are conjugately matched. | |
| language | No | Language of the human-readable summary: 'en' (English) or 'tr' (Türkçe). Defaults to the server setting. | |
| frequency | Yes | Frequency. Number in SI base units or engineering string, e.g. 2.4e9, '2.4GHz', '915 MHz' | |
| preference | No | Order solutions by this preference (ties broken by bandwidth). Default: widest bandwidth first. | |
| bandwidth_vswr | No | VSWR limit used to report the matched bandwidth of each solution (default 2 ≈ 9.5 dB return loss). | |
| snap_to_series | No | Also round L/C values to this standard E-series and report the resulting match. |
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 agent knows it's a safe, deterministic read. Description adds substantive context beyond annotations: returns 2-4 solutions with exact values, classifications, verified input impedance, matched bandwidth, and optional E-series rounding. It doesn't mention whether results are cached or whether the tool is computationally expensive, but the information given is rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the core purpose in the first sentence. Subsequent sentences add useful detail on returns, element ordering, and usage. Slightly dense but every sentence contributes; no obvious 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?
For a synthesis tool with no output schema, the description comprehensively covers what the tool does, what it returns (2-4 solutions with component values, classifications, VSWR, bandwidth, optional rounding), element ordering, and integration with sibling tools. Nothing essential is missing for correct 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% (>80%), so the schema already documents all 8 parameters thoroughly. The description mentions handling complex loads/sources and optional rounding but adds no syntax or meaning 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?
Specific verb 'Synthesize' + resource 'two-element lumped L-network' + explicit constraint 'matches a load to a source at one frequency.' Differentiates from siblings design_pi_t_match and design_stub_match by naming the network topology and element count.
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 an example use case ('match 25-j15 Ω to 50 Ω at 2.4 GHz') and mentions that elements can be passed to analyze_circuit or render_smith_chart. However, no explicit guidance on when to prefer L-section over pi/T or stub matching, and no stated exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_pi_t_matchDesign Pi / T matching networks with a target QARead-onlyIdempotent
Synthesize three-element Pi (shunt-series-shunt) or T (series-shunt-series) lumped matching networks for a chosen loaded Q, giving control over bandwidth/harmonic suppression that an L-network cannot. Q must exceed √(Rhigh/Rlow − 1). Returns all low-pass/high-pass/mixed variants with component values, virtual resistance, verification and bandwidth. Use for PA output networks, harmonic filtering, or 'match 10 Ω to 50 Ω with Q = 5'.
| Name | Required | Description | Default |
|---|---|---|---|
| q | Yes | Desired loaded Q of the network (sets bandwidth ≈ f0/Q). | |
| z0 | No | Reference (system) characteristic impedance Z0 in Ω. Default 50. | |
| load | Yes | The load (termination) at the far end of the circuit. Give exactly one of: z, gamma, table, or a 1-port Touchstone (.s1p) via touchstone_path / touchstone_content (e.g. a measured antenna). | |
| source | No | Source impedance (default = z0, purely resistive). Complex sources are conjugately matched. | |
| language | No | Language of the human-readable summary: 'en' (English) or 'tr' (Türkçe). Defaults to the server setting. | |
| topology | No | Network type. | both |
| frequency | Yes | Frequency. Number in SI base units or engineering string, e.g. 2.4e9, '2.4GHz', '915 MHz' | |
| preference | No | Order solutions by this preference (ties broken by bandwidth). Default: widest bandwidth first. | |
| bandwidth_vswr | No | VSWR limit used to report the matched bandwidth of each solution (default 2 ≈ 9.5 dB return loss). | |
| snap_to_series | No | Also round L/C values to this standard E-series and report the resulting match. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile (readOnly, idempotent, non-destructive), so the lower bar applies. The description adds real value beyond them: it discloses the mathematical validity constraint on Q and enumerates what is returned (all low-pass/high-pass/mixed variants with component values, virtual resistance, verification, bandwidth). No output schema exists, so this return-value disclosure matters.
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?
Four tight sentences, front-loaded with the verb and resource, then the constraint, the return content, and finally use cases. Every sentence adds distinct information; nothing is redundant with the title or schema.
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 10-parameter tool with nested load objects and no output schema, the description covers purpose, validity constraint, return contents, and use cases adequately. It does not describe failure/error behavior beyond the Q constraint or the effect of ordering options like preference, but nothing essential for a correct call 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?
Schema coverage is 100%, so the baseline is 3. The description goes beyond the schema by explaining that Q sets the loaded bandwidth (≈ f0/Q) and that the required minimum Q derives from the impedance ratio, which gives the agent a semantic grasp of the key parameter's role.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Synthesize') and resource (three-element Pi/T lumped matching networks) and even spells out the topology element order. It explicitly contrasts itself with the L-network sibling (design_l_match), so an agent can route between them without opening either schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete use cases (PA output networks, harmonic filtering, 'match 10 Ω to 50 Ω with Q = 5') and a hard precondition (Q must exceed √(Rhigh/Rlow − 1)). It implies the L-network as the alternative when that constraint fails, but never names the sibling or states explicitly when NOT to use this tool, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_quarter_waveDesign a quarter-wave (λ/4) transformerARead-onlyIdempotent
Design a λ/4 impedance transformer Z1 = √(Z0·R). Real loads are matched directly; complex loads first get a section of Z0 line that rotates them to the nearest voltage maximum (R = Z0·VSWR) or minimum (R = Z0/VSWR) on the real axis. Returns the offset length, transformer impedance, physical lengths (if frequency is given), verification and matched bandwidth. Elements are listed load → source.
| Name | Required | Description | Default |
|---|---|---|---|
| z0 | No | Reference (system) characteristic impedance Z0 in Ω. Default 50. | |
| load | Yes | The load (termination) at the far end of the circuit. Give exactly one of: z, gamma, table, or a 1-port Touchstone (.s1p) via touchstone_path / touchstone_content (e.g. a measured antenna). | |
| source | No | Source impedance (default = z0, purely resistive). Complex sources are conjugately matched. | |
| eps_eff | No | Effective permittivity of the lines (default 1). | |
| language | No | Language of the human-readable summary: 'en' (English) or 'tr' (Türkçe). Defaults to the server setting. | |
| frequency | No | Optional: needed for physical lengths and frequency-dependent loads. | |
| bandwidth_vswr | No | VSWR limit used to report the matched bandwidth of each solution (default 2 ≈ 9.5 dB return loss). | |
| velocity_factor | No | Velocity factor; overrides eps_eff. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (readOnly, idempotent, non-destructive), and the description adds genuine behavioral context: the offset-line step for complex loads, the VSWR-based real-axis targets, and the conditional physical-length output tied to frequency. It also discloses return content and element ordering, which matters since no output schema 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?
Front-loaded with the formula and purpose, followed by conditional behavior and the return-content sentence. Four sentences, each informative, though the algorithm detail is dense relative to the routing guidance an agent most needs.
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 no output schema, the description correctly enumerates what is returned (offset length, transformer impedance, physical lengths, verification, matched bandwidth) and notes the load→source ordering. Given the nested load object and eight parameters, this is nearly complete, missing only error/edge-case behavior.
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 eight parameters, including the complex vs real load handling and defaults. The description adds conceptual context (the rotation step, conjugate source matching) but no per-parameter syntax or format 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?
States a specific verb and resource (design a λ/4 impedance transformer) and even gives the governing formula Z1 = √(Z0·R). An agent can distinguish this immediately from siblings like design_l_match, design_pi_t_match, and design_stub_match.
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 explains the internal approach (real loads matched directly, complex loads get a rotating Z0 section) but never states when to choose this topology over the sibling matching tools. Usage is implied by the matching context rather than compared against alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
design_stub_matchDesign single-stub matching (distributed)ARead-onlyIdempotent
Single-stub tuner design (Pozar §5.2): find the distance d from the load along the main line and the length ℓ of an open- or short-circuited stub (shunt or series) that matches the load to Z0. Returns all solutions in wavelengths, degrees and — when frequency is given — physical length (with eps_eff / velocity_factor), plus verification and matched bandwidth. Components are returned load → source for analyze_circuit / render_smith_chart. Use for microstrip/coax stub tuners and textbook Smith chart stub problems.
| Name | Required | Description | Default |
|---|---|---|---|
| z0 | No | Reference (system) characteristic impedance Z0 in Ω. Default 50. | |
| load | Yes | The load (termination) at the far end of the circuit. Give exactly one of: z, gamma, table, or a 1-port Touchstone (.s1p) via touchstone_path / touchstone_content (e.g. a measured antenna). | |
| source | No | Source impedance (default = z0, purely resistive). Complex sources are conjugately matched. | |
| eps_eff | No | Effective permittivity of the lines (default 1). | |
| stub_z0 | No | Characteristic impedance of the stub (default = z0). | |
| language | No | Language of the human-readable summary: 'en' (English) or 'tr' (Türkçe). Defaults to the server setting. | |
| frequency | No | Optional: needed for physical lengths and frequency-dependent loads. | |
| placement | No | Shunt (parallel) or series stub. | shunt |
| termination | No | Stub termination to report. | both |
| bandwidth_vswr | No | VSWR limit used to report the matched bandwidth of each solution (default 2 ≈ 9.5 dB return loss). | |
| velocity_factor | No | Velocity factor; overrides eps_eff. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, and the description adds real substance on top: returns ALL solutions in wavelengths, degrees and physical length (with eps_eff/velocity_factor), plus verification and matched bandwidth, and states component ordering (load → source) for downstream tools. With no output schema, this carries the return-value burden well.
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, front-loaded with purpose and the computed quantities before the return/chaining detail. Nearly every clause carries information, though the parenthetical citations and return enumeration make it slightly heavier than needed.
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, nested-object tool with no output schema, the description covers what the tool computes, what it returns, and how the result plugs into sibling tools. It does not explain defaults/fallbacks for the many optional impedance and line parameters, but those are fully covered 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?
Schema coverage is 100%, so all 11 parameters are already documented, which sets the baseline at 3. The description only loosely links parameters ('open- or short-circuited stub (shunt or series)', 'when frequency is given') without adding format or constraint detail 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?
Names a specific verb+resource ('single-stub tuner design'), specifies exactly what is computed (distance d from load, stub length ℓ, open/short, shunt/series), and cites Pozar §5.2. It is clearly distinguishable from design_l_match, design_pi_t_match and design_quarter_wave.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a positive usage context ('microstrip/coax stub tuners and textbook Smith chart stub problems') and notes the output feeds analyze_circuit / render_smith_chart, which is genuinely useful chaining guidance. It stops short of naming when to prefer a sibling topology (L-match, Pi-T, quarter-wave) instead, so no explicit exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
gain_circlesConstant-gain circlesARead-onlyIdempotent
Constant-gain circles for amplifier design (Pozar ch. 12): 'available' (G_A, source plane, bilateral), 'operating' (G_P, load plane, bilateral), 'unilateral_source' (G_S) or 'unilateral_load' (G_L) for S12≈0 designs. Returns centre (Γ and Z), radius and whether each gain is achievable, plus the reference maximum gain (MAG/MSG or G_S,max/G_L,max). Omit gains_db to get a ladder of circles below the maximum. Pass the circles to render_smith_chart to plot them.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | available | |
| device | Yes | Two-port device: either all four S-parameters (s11, s21, s12, s22 as {mag, angle_deg} or {re, im}) or a 2-port Touchstone file via touchstone_path / touchstone_content. | |
| gains_db | No | Gains in dB to draw (for unilateral types: the G_S / G_L block gain). | |
| language | No | Language of the human-readable summary: 'en' (English) or 'tr' (Türkçe). Defaults to the server setting. | |
| frequency | No | Required with a Touchstone file. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description adds real behavioral value by disclosing the return contents (centre in Γ and Z, radius, achievability flag, reference maximum MAG/MSG or G_S,max/G_L,max) and the ladder behavior when gains_db is omitted.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense paragraph that is front-loaded with purpose, then type semantics, then return values, then the plotting hand-off. Every sentence carries information, though it is information-heavy enough that it borders on terse for a physics-domain 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?
No output schema exists, and the description compensates by naming the returned quantities (centre, radius, achievability, max gain reference). Combined with 80% schema coverage and the plotting hand-off, it is nearly complete; minor gaps remain around error/precondition behavior for the Touchstone path.
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 80%, so the schema carries most parameter detail. The description still enriches semantics by explaining what each 'type' enum value computes and the special meaning of gains_db for unilateral types plus its omission behavior, going beyond the schema's short field notes.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource ('Constant-gain circles for amplifier design') and enumerates the four circle types ('available', 'operating', 'unilateral_source', 'unilateral_load') with their defining formulas, distinguishing it clearly from siblings like noise_circles and amplifier_stability.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit routing for the 'unilateral_source'/'unilateral_load' types (S12≈0 designs) and the omit-gains_db case, and names the follow-up sibling ('Pass the circles to render_smith_chart'). It lacks explicit when-not guidance versus other matching tools, so a 4 is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
impedance_convertImpedance / admittance / reflection-coefficient converterARead-onlyIdempotent
Convert one RF quantity into all the others for a reference impedance Z0: impedance Z ↔ normalized z ↔ admittance Y ↔ reflection coefficient Γ (S11), plus VSWR, return loss, mismatch loss, delivered power and Q. Give exactly ONE of: z, z_normalized, y, gamma, or vswr (+ optional gamma_angle_deg). With a frequency, also returns the equivalent series and parallel R + L/C element values. Use for: 'what is the VSWR of 75 Ω on 50 Ω?', 'convert S11 = 0.5∠30° to impedance', 'return loss of 25-j15 Ω'.
| Name | Required | Description | Default |
|---|---|---|---|
| y | No | Admittance in siemens, e.g. {re:0.02, im:-0.01}. | |
| z | No | Impedance in Ω, e.g. '25-j15'. | |
| z0 | No | Reference (system) characteristic impedance Z0 in Ω. Default 50. | |
| vswr | No | VSWR (≥1). Combined with gamma_angle_deg (default 0) to build Γ. | |
| gamma | No | Reflection coefficient Γ / S11. | |
| language | No | Language of the human-readable summary: 'en' (English) or 'tr' (Türkçe). Defaults to the server setting. | |
| frequency | No | Optional frequency to compute equivalent L/C values. | |
| z_normalized | No | Normalized impedance z = Z/Z0, e.g. '0.5+j1'. | |
| return_loss_db | No | Return loss in dB (positive). Combined with gamma_angle_deg. | |
| gamma_angle_deg | No | Phase of Γ in degrees when using vswr or return_loss_db. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and openWorldHint=false, so the safety profile is covered. The description adds real behavioral context beyond structured data: the 'exactly ONE of' input constraint, that vswr/return_loss_db require an optional gamma_angle_deg, and that supplying a frequency additionally returns series/parallel R+L/C element values.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads what the tool converts, then immediately states the input constraint, then the frequency-dependent output, then three illustrative queries. No filler sentences; every clause adds selection or invocation value.
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 10-parameter, no-output-schema converter, the description adequately covers inputs, the one-of rule, and the shape of what is returned (VSWR, return loss, mismatch loss, delivered power, Q, and L/C elements with frequency). Minor gap: it does not clarify units/format for the returned summary or how the language parameter affects output.
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 goes beyond the schema by explaining the mutual-exclusivity rule across the five input quantities and how vswr and return_loss_db combine with gamma_angle_deg, which the per-parameter schema descriptions only hint at.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb (convert) and resource (RF impedance/admittance/reflection-coefficient quantities), and enumerates exactly which quantities are produced. An agent can distinguish this from siblings like design_l_match or parse_touchstone purely from the description.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear context ('Convert one RF quantity into all the others') plus concrete invocation examples such as 'what is the VSWR of 75 Ω on 50 Ω?'. It states the one-of input rule, which effectively tells the agent when the tool applies, but it never names an alternative tool or a when-not-to-use condition.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
noise_circlesConstant noise-figure circles (LNA design)ARead-onlyIdempotent
Constant noise-figure circles in the source (ΓS) plane from the noise parameters NFmin, Γopt and Rn — taken from a .s2p noise block (interpolated at frequency) or given explicitly. Optionally evaluates the noise figure for a proposed source impedance/Γ and, if S-parameters are available, the available gain at Γopt (gain/noise trade-off). Use for low-noise amplifier (LNA) input matching.
| Name | Required | Description | Default |
|---|---|---|---|
| rn | No | Equivalent noise resistance Rn in Ω (not normalized). | |
| z0 | No | Reference impedance (default 50 or the Touchstone value). | |
| nf_db | No | Noise figures (dB) to draw. Default: NFmin + 0.25, 0.5, 1, 2 dB. | |
| device | No | Two-port with a noise block (Touchstone) — or give the explicit noise parameters below. | |
| language | No | Language of the human-readable summary: 'en' (English) or 'tr' (Türkçe). Defaults to the server setting. | |
| frequency | No | Frequency. Number in SI base units or engineering string, e.g. 2.4e9, '2.4GHz', '915 MHz' | |
| gamma_opt | No | Optimum source reflection coefficient Γopt. | |
| nf_min_db | No | Minimum noise figure NFmin in dB. | |
| source_gamma | No | Evaluate NF for this source Γ. | |
| source_impedance | No | Evaluate NF for this source impedance. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and non-destructive, so the safety profile is fully covered. The description adds useful behavioral context — interpolation at frequency, fallback from .s2p noise block to explicit parameters, and the conditional gain evaluation — but does not mention output format or edge cases like NF below NFmin. With annotations doing the heavy lifting, 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?
Two information-dense sentences that front-load the core computation and then the optional evaluation. Near-optimal, though the parenthetical interpolation/defaults make it slightly dense for a 10-parameter 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 10 parameters, full schema coverage, and strong annotations, the description covers the main computational path, the dual input modes (Touchstone vs explicit), and the optional downstream analyses. It lacks return-value guidance, but no output schema exists, so a small gap remains.
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 every parameter (rn units in Ω not normalized, z0 default, nf_db defaults, device/touchstone options, gamma_opt, source_gamma vs source_impedance) is already documented in the schema. The description does not add syntax or format detail beyond noting the .s2p noise block origin, 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?
States specific verb (draw/compute constant noise-figure circles), specific domain object (source ΓS plane), and the exact inputs (NFmin, Γopt, Rn). Distinguishes from sibling gain_circles by scope and names the LNA input-matching use case.
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 final sentence 'Use for low-noise amplifier (LNA) input matching' gives clear context, and the description notes the optional evaluation path for a proposed source impedance. It does not, however, explicitly name alternatives like gain_circles or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse_touchstoneParse & summarize a Touchstone (.s1p / .s2p) fileARead-onlyIdempotent
Read a Touchstone v1 S-parameter file (from a VNA, simulator or datasheet) and summarize it: port count, reference impedance, frequency range, per-frequency table (S11/S21/S12/S22 in dB and angle, VSWR, input impedance, and for 2-ports K, μ and MAG/MSG), resonance / best match for 1-ports, unconditionally stable ranges for 2-ports, and noise parameters if present. Supports MA/DB/RI formats and any frequency unit.
| Name | Required | Description | Default |
|---|---|---|---|
| language | No | Language of the human-readable summary: 'en' (English) or 'tr' (Türkçe). Defaults to the server setting. | |
| max_rows | No | Maximum table rows to return (data is decimated evenly). | |
| touchstone_path | No | Absolute path to a Touchstone v1 file (.s1p / .s2p) on the server machine (local/stdio servers only; remote servers need touchstone_content). | |
| touchstone_content | No | Raw Touchstone v1 text (alternative to touchstone_path). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=true, idempotent=true, destructive=false and openWorld=false, so the safety profile is covered. The description adds genuine behavioral context beyond that: the accepted format dialects (MA/DB/RI) and frequency-unit agnosticism, plus what the returned summary synthesizes. It omits auth/permission or error behavior, which keeps it short of a 5.
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?
Effectively one long sentence, but it is front-loaded with the core verb+resource before enumerating outputs, and every clause (formats, port-specific metrics, noise parameters) carries information. Dense yet economical; a slightly lighter enumeration would read better but nothing is wasted.
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 no output schema, the description correctly assumes the burden of describing returns and does so comprehensively, covering both 1-port and 2-port outputs plus noise parameters. It leaves minor gaps on invalid-input/error handling and on how path and content interact, so not a full 5, but it is complete enough for correct 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 the schema already documents language, max_rows, touchstone_path and touchstone_content including their defaults and path-vs-content tradeoff. The description adds no parameter-level detail beyond the 1-port/2-port scope implied by the summary contents, so the 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?
Specific verb+resource: reads a Touchstone v1 S-parameter file and summarizes it. It explicitly enumerates what the summary contains (port count, reference impedance, frequency range, per-frequency table, stability, noise parameters), making it trivially distinguishable from the design/analysis siblings without opening any schema.
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?
Clear context is given: it is for files from a VNA, simulator or datasheet, and the description notes it handles MA/DB/RI formats and any frequency unit. No explicit when-not or alternative routing is offered, but no sibling competes for this job, so the context is sufficient without an exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_smith_chartRender a Smith chart (PNG / SVG)AIdempotent
Draw a publication-quality Smith chart and return it as an image (PNG, via resvg) and/or SVG. Layers (all optional, combine freely): a circuit (load + components listed load → source) drawn as the classic constant-R / constant-G / transmission-line arcs with a node marker per component, plus an optional frequency-sweep trace of the input; impedance or Γ points; VSWR circles; constant-Q contours; arbitrary circles (e.g. from gain_circles / noise_circles / amplifier_stability, centre given as Γ); an S11/S22 locus from a Touchstone file; and amplifier overlays computed from a device (stability circles with the unstable side shaded, available/operating gain circles, noise-figure circles). Impedance, admittance or combined grid; light or dark theme; optional output_path to also save the file.
| Name | Required | Description | Default |
|---|---|---|---|
| z0 | No | Chart reference impedance Z0 (Ω). | |
| grid | No | Grid type: Z chart, Y chart or combined ZY chart. | both |
| size | No | Chart width in px. | |
| theme | No | light | |
| title | No | Chart title. | |
| format | No | Returned image format. | png |
| points | No | Individual impedances (z) or reflection coefficients (gamma) to mark. | |
| circles | No | Arbitrary circles in the Γ plane. | |
| circuit | No | Circuit to draw as Smith chart arcs (same format as analyze_circuit). | |
| language | No | Language of the human-readable summary: 'en' (English) or 'tr' (Türkçe). Defaults to the server setting. | |
| amplifier | No | Amplifier overlays computed from a two-port. | |
| png_scale | No | PNG pixel density multiplier (2 = crisp on HiDPI; 1 = smaller payload). | |
| q_contours | No | Constant-Q contours (|X|/R = Q), e.g. [1, 2, 5]. | |
| output_path | No | Absolute file path to also write the image to (.png or .svg; with format 'both' both files are written). | |
| vswr_circles | No | Constant-VSWR circles to draw, e.g. [1.5, 2, 3]. | |
| touchstone_trace | No | Plot the S11 (or S22) locus of a Touchstone file, e.g. a measured antenna. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=false, idempotentHint=true and destructiveHint=false, and the description is consistent with them by disclosing the write behavior: optional output_path writes the file, with format 'both' writing two files. It adds useful context (rendering engine, file output) but does not discuss failure modes or overwrite semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single dense paragraph, but it is front-loaded with purpose and format before enumerating layers, and every sentence conveys a distinct capability. It is longer than ideal and slightly run-on, though nothing is clearly redundant.
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 16-parameter, deeply nested tool with no output schema, the description covers the full set of renderable layers and states the return format, so an agent can compose a call without opening the schema. It omits only peripheral details like error conditions or file-overwrite behavior.
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 94%, so the schema carries most parameter meaning (baseline 3). The description still adds value by explaining layer intent — VSWR circles, constant-Q contours, Γ-plane circle centres, amplifier overlays with shaded unstable side — and that components run load → source, which the schema alone states less plainly.
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?
Specific verb+resource ("Draw a publication-quality Smith chart") with output format stated immediately (PNG via resvg and/or SVG). It enumerates the exact layer types it can render, which cleanly separates it from siblings like analyze_circuit, gain_circles, and noise_circles that compute rather than draw.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives clear workflow context: circles can come from gain_circles / noise_circles / amplifier_stability and circuit format is 'same format as analyze_circuit', which routes the agent to the right producers. It lacks an explicit when-not or a stated call ordering, so it stops short of full when/alternatives guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
tline_input_impedanceTransmission line input impedanceARead-onlyIdempotent
Input impedance of a (lossy or lossless) transmission line terminated in a load: Zin = Z0·(ZL + Z0·tanh γℓ)/(Z0 + ZL·tanh γℓ). Length can be electrical (λ, degrees) or physical (mm, m, mil) with eps_eff / velocity_factor. Also returns Γ at load and input, electrical/physical length, guided wavelength, and the distances from the load to the first voltage maximum and minimum. Use for coax/microstrip/λ/4/λ/2 line questions and 'where is the voltage minimum?' problems.
| Name | Required | Description | Default |
|---|---|---|---|
| z0 | No | System reference impedance used for Γ / VSWR at the input. Default 50. | |
| load | No | Load impedance ZL in Ω (use 'open' via a huge value or give load_gamma). | |
| length | Yes | Length: electrical ('0.25λ', '0.125 lambda', '90deg') or physical ('12.5mm', '3 cm', '500mil'). Bare numbers are meters. | |
| eps_eff | No | Effective permittivity (default 1). | |
| line_z0 | No | Characteristic impedance of the line (default = z0). | |
| language | No | Language of the human-readable summary: 'en' (English) or 'tr' (Türkçe). Defaults to the server setting. | |
| frequency | No | Required for physical lengths, loss and for converting to physical length. | |
| load_type | No | Shortcut for open- or short-circuit loads. | |
| load_gamma | No | Alternatively the load reflection coefficient (relative to line_z0). | |
| loss_db_per_m | No | Attenuation in dB/m (needs a physical frequency). | |
| velocity_factor | No | Velocity factor; overrides eps_eff. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly/idempotent/non-destructive, so the safety profile is covered. The description goes further by disclosing the full return set (Γ at load and input, electrical/physical length, guided wavelength, distances to first voltage max/min) and noting it handles lossy or lossless lines — genuine behavioral context beyond the annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Front-loads the operation and its formula, then returns, then use cases — a sensible ordering. Three dense sentences with no filler, though the inline formula is somewhat heavy and the return list could be trimmed.
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 no output schema, the description usefully enumerates what comes back and clarifies the length/loss/unit model. Combined with 100% schema coverage, an agent has what it needs; only the absence of explicit prerequisites (e.g. frequency required for physical lengths is left to the schema) keeps it from a 5.
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 every parameter (z0, load, length, eps_eff, velocity_factor, etc.) is already documented in the schema, including unit formats and defaults. The description restates the formula and unit conventions but adds little semantic detail the schema lacks, 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?
States a precise verb+resource — input impedance of a transmission line terminated in a load — and even supplies the governing equation. This is unmistakably distinct from siblings like impedance_convert (a pure impedance transform) or the design_* matching tools, which an agent can tell apart without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives concrete usage context: 'Use for coax/microstrip/λ/4/λ/2 line questions and where-is-the-voltage-minimum problems.' That's clear routing, but it names no alternative tool and states no when-not-to-use condition, so it stops short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
version_infoServer version & changelogARead-onlyIdempotent
Report which version of smith-charts-mcp is running and what changed between versions. Without arguments: current version, release date and its release notes. version: notes of one specific release. since: every change released after that version (e.g. 'what changed since 0.1.0?'). all: the full history. Also reports runtime capabilities (PNG rendering, filesystem access).
| Name | Required | Description | Default |
|---|---|---|---|
| all | No | Return the complete history. | |
| since | No | Show all releases newer than this version. | |
| version | No | Show the notes of this exact version, e.g. '0.1.0'. | |
| language | No | Language of the human-readable summary: 'en' (English) or 'tr' (Türkçe). Defaults to the server setting. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world, so the safety profile is covered. The description still adds genuine context beyond them by disclosing that responses also include runtime capabilities (PNG rendering, filesystem access), which an agent would not learn from the 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?
Front-loaded with purpose, then a compact mode-by-mode breakdown. Efficient and scannable, though the parenthetical example for 'since' slightly duplicates the schema's own example.
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?
There is no output schema, but the description compensates by describing what each mode returns (version, release date, release notes, per-release history, full history, runtime capabilities). An agent has everything needed to call it correctly and interpret the result.
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 four parameters are self-documenting. The description reinforces the semantics of all/since/version by mapping each to an outcome, but adds no syntax or constraint detail beyond the schema, and never mentions the 'language' enum parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Report which version of smith-charts-mcp is running and what changed between versions') and clearly distinguishes itself from the design/chart-rendering siblings. An agent knows immediately this is a metadata/introspection tool.
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?
Enumerates every mode of invocation with the exact selection condition: no arguments for current release, 'version:' for one release's notes, 'since:' for changes after a version (with a natural-language example), and 'all:' for full history. Nothing about argument choice is left to inference.
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.
14 tool updates
v0.1.0- First observed
amplifier_stability - First observed
analyze_circuit - First observed
conjugate_match - First observed
design_l_match - First observed
design_pi_t_match - First observed
design_quarter_wave - First observed
design_stub_match - First observed
gain_circles - First observed
impedance_convert - First observed
noise_circles - First observed
parse_touchstone - First observed
render_smith_chart - First observed
tline_input_impedance - First observed
version_info
TDQS
Scored across 14 tools
Most tools have clearly distinct purposes by topology or analysis type (L vs Pi/T vs stub vs quarter-wave; stability vs gain vs noise circles). Some overlap exists: conjugate_match can also synthesize L-section matching networks, and analyze_circuit overlaps with tline_input_impedance for line calculations, though descriptions clarify primary use cases.
All names use snake_case and are descriptive, but the set mixes verb_noun (design_l_match, analyze_circuit, render_smith_chart) with noun_noun/noun_verb patterns (gain_circles, impedance_convert, tline_input_impedance). The inconsistency is minor and readable, not chaotic.
14 tools fit the RF/Smith-chart domain well; each tool covers a distinct design, analysis, or rendering task without obvious filler. The count is within the well-scoped range and proportional to the breadth of the domain.
The surface covers common matching topologies (L, Pi/T, stub, quarter-wave), circuit/line analysis, Touchstone parsing, amplifier stability/gain/noise, and Smith chart rendering. Minor gaps remain, such as multi-section/optimization workflows or circuit-to-S-parameter export, but core workflows are covered.
Maintenance
Related MCP Connectors
Amateur radio MCP server with band plans, EIRP, cable loss, antenna gains, and more
MCP server for aerospace calculations: orbital mechanics, ephemeris, DSN operations, ...
QuLab MCP remote server (Streamable HTTP) for computational science and lab tools.
61 text, security, converter, calculator, and PDF tools -- callable via MCP on one host.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceMCP server for rftools.io — 213 RF & electronics calculators + 13 server-side simulation tools for AI agents. Give Claude, Cursor, or any MCP-compatible AI assistant access to validated engineering calculators and heavy server-side simulations. Microstrip impedance, link budgets, filter design, converter sizing, antenna patterns, and 190+ more calculators — plus NEC2 antenna simulation, FDTD, Mon841 npm7MIT
- AlicenseAqualityCmaintenanceA thin MCP server that wraps spicelib for circuit simulation. Exposes tools for running AC, transient, DC op, and parameter sweep analyses, enabling behavioral model fitting through iterative simulation and measurement comparison.425 PyPI8GPL 3.0
- AlicenseNot gradedqualityDmaintenanceEnables MCP-compatible agents to generate Qucs circuit schematics, run simulations, and parse results programmatically.1MIT
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to design RF filters and SMPS-EMC from spec using three MCP servers that drive LTspice, Qucs-S, and scikit-rf, with closed-form synthesis, real-component optimization, and CISPR-aware compliance checking.4AGPL 3.0