scaps-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., "@scaps-mcprun a J-V simulation on my perovskite solar cell and report the efficiency"
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.
scaps-mcp
MCP server for SCAPS-1D, the one-dimensional solar cell simulator of the University of Gent. It drives your own SCAPS installation headless and gives any MCP client device design, simulation, batches, curve fitting, result analysis and realism checks.
SCAPS is not included. Request it from its authors as described on the SCAPS website and follow their conditions of use, which include citing SCAPS in publications.
Capabilities
Devices: describe any
.def, edit it with every SCAPSsetcommand, load.materialfiles into layers, create devices from scratch (up to 7 layers, 7 defects per layer, 3 defects per interface), and set solver numerics that scripts cannot reach.Simulation: J-V, QE, C-V and C-f with any working point, illumination side, spectrum or generation model, ND filter and cut-off; energy band, generation-recombination and AC profiles.
Batches: grid or paired sweeps over any
setoractionkey, including temperature, intensity and bias.Fitting and optimisation: bounded Nelder-Mead against one or several measured curves (light and dark J-V, QE, C-V), or towards maximum, minimum or target efficiency, Voc, Jsc or FF.
Input files: import shared
.def,.material, absorption, spectrum, generation, filter, grading and measurement files, or write them from data with unit conversion (absorption from alpha or extinction coefficient k).Analysis: Shockley-Queisser limit of the absorber under the spectrum used, QE-integrated Jsc, Mott-Schottky built-in voltage and doping, band offsets at every interface.
Realism checks: results above the detailed-balance limit, missing radiative recombination, ideal interfaces, band spikes and cliffs, compensating defects, implausible densities of states, default absorption models and other common causes of unphysical SCAPS studies.
Jobs: long runs continue in the background with progress, waiting and cancellation.
Validation: every key and value is checked against the command list of the installed SCAPS version before SCAPS starts.
Related MCP server: demeter-mcp
Requirements
SCAPS-1D 3.3 (tested with 3.3.12)
Python 3.11 or newer
Setup on Windows
Install SCAPS with its installer into a folder you can write to. SCAPS uses its installation folder as its working folder, and its authors advise against Program Files. Copy any SCAPS update files over the installed ones and check that the server finds it:
uvx scaps-mcp doctorSetup on Linux (optional)
SCAPS is a Windows program; on Linux it runs headless under Wine and Xvfb. Install both (Debian and Ubuntu):
sudo dpkg --add-architecture i386
sudo apt update
sudo apt install wine wine32:i386 xvfbCreate a 32-bit prefix and install SCAPS into it, from the folder holding the unpacked SCAPS installer:
export WINEARCH=win32 WINEPREFIX="$HOME/scaps/prefix"
xvfb-run -a bash -c 'wineboot -i && wineserver -w'
xvfb-run -a bash -c 'wine setup.exe /q /AcceptLicenses yes /r:n && wineserver -w'Copy any SCAPS update files over the installed ones and check that the server finds it:
uvx scaps-mcp doctorFinding SCAPS
Without SCAPS_HOME, the server looks for a folder holding scapsXXXX.exe with its def, results and script folders, in folders whose name contains "scaps", one or two levels below:
Windows: the system drive, your user folder, Documents, Desktop, Downloads, Program Files and Program Files (x86).
Linux: your home folder and the
drive_candProgram Filesfolders of Wine prefixes:~/.wine,$WINEPREFIX,$SCAPS_WINEPREFIX, winetricks prefixes and prefixes inside home folders named likescaps.
When several installations are found, the newest SCAPS version is used. scaps_status and doctor show the folder in use and any others. Set SCAPS_HOME to choose one yourself.
Configuration
Variable | Meaning | Default |
| SCAPS folder containing | found automatically |
| executable name | newest |
| seconds per SCAPS run | 300 |
| where run inputs and results are kept | user cache folder |
| Linux only: Wine prefix | the prefix containing the SCAPS folder |
| Linux only: Wine binaries | found on the system |
| Linux only: |
|
Plots need the optional extra: uvx --with matplotlib scaps-mcp, or install scaps-mcp[plot].
Clients
Claude Code:
claude mcp add --transport stdio scaps -- uvx scaps-mcpStraight from the repository instead of PyPI:
claude mcp add --transport stdio scaps -- uvx --from git+https://github.com/asiff00/scaps-mcp scaps-mcpAdd --env SCAPS_HOME=<folder> before scaps when SCAPS is somewhere the server does not search.
Project configuration (.mcp.json), with a long tool timeout for batches and fits:
{
"mcpServers": {
"scaps": {
"command": "uvx",
"args": ["scaps-mcp"],
"timeout": 3600000
}
}
}Other MCP clients start the same command, with SCAPS_HOME in the server environment only when SCAPS is somewhere the server does not search.
Tools
Tool | Purpose |
| Installation, version, run folder, plotting support, running jobs |
| Definitions, materials, spectra, absorption, grading, measurement and other files |
| Search the installed SCAPS command list |
| Layers, defects, interfaces with band offsets, contacts, realism checks |
| Set commands, materials and solver numerics, saved as a new definition |
| New device from a layer, defect, interface and contact description |
| Add a shared SCAPS file and report missing referenced files |
| Write absorption, spectrum, generation, filter, grading or measurement files from data |
| One simulation with metrics, curves, profiles, analysis and checks |
| Grid or paired sweeps over set and action keys |
| Fit measured curves or optimise a figure of merit |
| List, inspect, wait for or cancel runs |
| Paginated tables from any result file |
| PNG plot of result curves and profiles |
| Validated SCAPS script for recorder, math, loops and tandem workflows |
| Detailed-balance limits for given band gaps and spectrum |
Definitions and run files are also available as scaps://definitions/{name} and scaps://runs/{run_id}/{file} resources.
Conventions
Keys and units follow the SCAPS script language: thickness in um, densities in cm^-3, interface densities in cm^-2, mobility in cm^2/Vs, velocity in cm/s, cross sections in cm^2, energies in eV, temperature in K. Layers, defects and interfaces count from 1, and layer 1 touches the left (back) contact. Contacts are addressed as contactleft and contactright.
Scripts cannot add the first bulk defect to a layer; scaps_create_device inserts one and configures it. Grading laws, per-level parameters of multivalent defects and the GUI curve fitter have no script commands; use grading files, scaps_optimize and definitions made in the GUI.
Safety
One SCAPS process runs per installation at a time, guarded by a file lock (fcntl on Linux, msvcrt on Windows) that all processes honour. Stopping the server, including with SIGTERM, stops the SCAPS process it started; a process left behind by a crash is stopped by the next run. File names must be bare names inside SCAPS folders. Scripts may not run system commands or open blocking dialogs. For isolation, remove the Wine drive mapping of the host root from the prefix.
Companion skill
The scaps-1d skill teaches an agent SCAPS workflows and realism rules. It works on its own and uses these tools when they are available.
Development
uv sync
uv run pytest
uv run pytest -m scaps
uv run ruff check src testsCitation
Simulations made with SCAPS should cite M. Burgelman, P. Nollet and S. Degrave, Modelling polycrystalline semiconductor solar cells, Thin Solid Films 361-362 (2000) 527-532, doi:10.1016/S0040-6090(99)00825-1.
License
MIT
Available Tools
16 toolsscaps_batchBatch SCAPS simulationsA
Run one SCAPS session over many parameter values and tabulate the J-V metrics of every point.
Covers thickness, doping, defect, band offset, temperature, intensity and bias studies. Every point's files are kept for scaps_results and scaps_plot.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | grid runs every combination; zip pairs the lists element-wise. | grid |
| actions | No | SCAPS action commands, e.g. {'iv.startV': 0, 'iv.stopV': 1.2, 'iv.increment': 0.02, 'qe.startlambda': 300, 'cf.points.per.decade': 5, 'intensity.ND': 1, 'spectrumcutoff.on': null, 'spectrumcutoff.longlambda': 800}. Omitted settings keep SCAPS defaults. | |
| profiles | No | Spatial results at the working point voltage: eb (bands, quasi-Fermi levels, carriers, field, currents, generation and recombination rates) and genrec (occupation of every defect level); ac (small signal) at the last point of a cv or cf measurement. | |
| spectrum | No | Spectrum file in SCAPS spectrum/; default AM1.5G 1 sun. | |
| variables | Yes | Set or action keys and their values, e.g. {'layer1.thickness': [0.3, 0.5, 1]} or {'workingpoint.temperature': [280, 300, 320], 'intensity.ND': [0, 1, 2]}. | |
| definition | Yes | Definition file in SCAPS def/, e.g. 'example CIGS.def'. | |
| parameters | No | Ordered SCAPS set commands in script units, e.g. {'layer1.thickness': 2, 'layer1.NA': 1e16, 'layer1.defect1.Ntotal': 1e14, 'layer1.defect1.singleacceptor': null, 'interface1.IFdefect1.Ntotal': 1e10, 'contactleft.flatband.off': null, 'contactleft.workfunction': 5.1, 'external.Rs': 0.5, 'illumination.fromleft': null, 'numerical.Shockley-Queisser_limit.always': null}. null marks commands without a value. | |
| illumination | No | Calculate under the spectrum or in the dark. | light |
| measurements | No | Measurements: iv (J-V), qe, cv, cf. May be empty when profiles are requested. | |
| wait_seconds | No | Wait this long for the result; longer runs continue as a job. | |
| temperature_k | No | Working point temperature in K. |
Output Schema
| Name | Required | Description |
|---|---|---|
| checks | Yes | |
| points | Yes | |
| run_id | Yes | |
| status | Yes | |
| seconds | Yes | |
| progress | Yes | |
| variables | Yes | |
| definition | Yes | |
| measurements | Yes | |
| scaps_errors | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the safety profile (not read-only, not idempotent, not destructive, closed-world), so the bar is lower. The description adds one genuinely useful behavior beyond the schema: every point's files are persisted for scaps_results and scaps_plot. It does not warn about combinatorial cost for grid mode, partial failures in a batch, or long-run job behavior.
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 short sentences with the core action front-loaded and the file-retention note placed after. Nothing is padded, though the trailing sentence is a workflow hint rather than part of the core purpose and could be tightened.
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 11 parameters, nested objects, full schema coverage, annotations and an output schema, the description covers what the tool does and what it leaves behind. The remaining gap is operational expectations for a batch tool (cost of grid expansion, what happens to points that fail), which would matter for an agent planning a large sweep.
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; each of the 11 parameters, including the grid/zip mode distinction and the variables shape, is documented in the schema itself. The description adds no interpretation beyond that, such as how definition vs parameters vs variables interact.
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: run one SCAPS session over many parameter values and tabulate J-V metrics per point. It also enumerates the study types covered (thickness, doping, defect, band offset, temperature, intensity, bias). It never explicitly contrasts itself with the closest sibling, scaps_simulate (single run) or scaps_optimize, so sibling differentiation is left implicit.
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 through the list of covered sweep types and names downstream consumers (scaps_results, scaps_plot) via the retained per-point files, which is a useful workflow hint. However, there is no explicit 'use this instead of scaps_simulate when you have more than one value' routing statement and no 'when not to use' conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scaps_create_deviceCreate a SCAPS deviceADestructiveIdempotent
Build a new device from scratch and save it as a .def file.
A layer may name a .material file ('material': 'CIGSe.material'); its properties apply first and explicit keys override them.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | New definition name, saved in SCAPS def/. | |
| layers | Yes | Layers from the left (back) contact. Each maps set-command suffixes to values, e.g. {'name': 'absorber', 'thickness': 0.5, 'Eg': 1.55, 'chi': 3.9, 'epsilon': 10, 'NC': 2.2e18, 'NV': 1.8e19, 'mun': 2, 'mup': 2, 'NA': 1e15, 'radiative': 1e-11, 'absorption.file': 'material.abs', 'material': 'CIGSe.material', 'defects': [{'singleacceptor': null, 'gauss': null, 'Et': 0.6, 'Ntotal': 1e14, 'capture_cross_section.electron': 1e-15, 'capture_cross_section.hole': 1e-15}]}. Unset properties keep SCAPS defaults; up to 7 defects per layer. | |
| options | No | Other set commands, e.g. {'illumination.fromleft': null, 'numerical.Shockley-Queisser_limit.always': null}. | |
| numerics | No | Numerical settings stored in the .def 'convergence' section, which scripts cannot set, e.g. {'maxiter': 2000, 'clamp_psi': 0.25, 'termination_psi': 1e-4, 'defectdiscretisations': 9}. | |
| overwrite | No | ||
| interfaces | No | Interface defects by interface number (1 lies between layers 1 and 2), up to 3 each, e.g. {1: [{'Ntotal': 1e10, 'singledonor': null}]}. | |
| left_contact | No | e.g. {'workfunction': 5.1, 'Sn': 1e5, 'Sp': 1e7}; a work function switches flat band off. | |
| right_contact | No | As left_contact. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | Yes | |
| device | Yes | |
| run_id | Yes | |
| definition | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, destructive=true, idempotent=true, and openWorld=false, so the description does not need to carry the full safety burden. It adds useful context that the result is saved as a .def file and that layer material files are applied before explicit overrides, but it omits overwrite behavior and file-collision risk despite the destructive annotation.
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 with the primary purpose front-loaded and the material-override rule efficiently appended. Every sentence adds useful information without waste.
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 schema, output schema, and annotations present, the description is largely sufficient for correct invocation. The main remaining gap is overwrite/destructive behavior, which is only flagged by annotations and not explained 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 coverage is high at 88%, so the schema already documents most parameters. The description adds meaningful semantics for the layers parameter by explaining that a named .material file is applied first and explicit keys override it, which is not fully captured in the schema example.
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 specific verb and resource: build a new device from scratch and save it as a .def file. The phrase 'from scratch' distinguishes this from edit_device and import_file, which are adjacent siblings in the toolset.
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 creation context is clear from 'build a new device from scratch,' which implies use when no existing device is being modified. However, it does not explicitly name edit_device or import_file as alternatives 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.
scaps_describe_deviceDescribe a SCAPS deviceARead-onlyIdempotent
Read a .def file: layers, bulk defects, interfaces with band offsets, contacts and realism checks.
Fields use script names and units, so any value can be passed back as a parameter (layers[0].NA -> 'layer1.NA'). Graded layers report their base value.
| Name | Required | Description | Default |
|---|---|---|---|
| definition | Yes | Definition file in SCAPS def/, e.g. 'example CIGS.def'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| units | Yes | |
| checks | Yes | |
| layers | Yes | |
| contacts | Yes | |
| definition | Yes | |
| interfaces | Yes | |
| sq_limit_mode | Yes | |
| working_point | Yes | |
| absorber_layer | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this is a read-only, idempotent, non-destructive operation. The description adds useful behavioral context beyond annotations: it specifies the file content categories returned, explains script-style field names and units, and notes that graded layers report their base value.
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 short and front-loaded: it first states the core read action and returned content, then adds the important field-name/unit behavior. It contains 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?
Given the rich annotations, high schema coverage, single parameter, and existing output schema, the description provides enough context for correct selection and invocation. It explains what the tool reads and how fields are represented without redundantly documenting the output 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 single parameter already has 100% schema description coverage, including an example definition filename. The description does not add further meaning about the `definition` input itself; its extra detail concerns returned fields and round-tripping values rather than the 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?
The description gives a specific verb and resource: it reads a `.def` file and enumerates the contents it exposes (layers, bulk defects, interfaces, contacts, realism checks). It is clear what the tool does, but it does not explicitly distinguish itself from siblings such as `scaps_edit_device` or `scaps_create_device`.
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 read-oriented purpose implies when the tool is useful, and the note about passing values back as parameters hints at a workflow with editing/creation tools. However, there is no explicit when-to-use guidance, no exclusions, and no named alternative tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scaps_edit_deviceEdit a SCAPS deviceBDestructiveIdempotent
Change a device and save it as a .def file: parameters, layers, defects, materials and solver settings.
| Name | Required | Description | Default |
|---|---|---|---|
| base | Yes | Existing definition to start from. | |
| save_as | Yes | New definition name, saved in SCAPS def/. | |
| numerics | No | Numerical settings stored in the .def 'convergence' section, which scripts cannot set, e.g. {'maxiter': 2000, 'clamp_psi': 0.25, 'termination_psi': 1e-4, 'defectdiscretisations': 9}. | |
| materials | No | Load .material files into layers before the operations, e.g. {1: 'CIGSe.material'}. | |
| overwrite | No | Replace an existing file of that name. | |
| operations | No | Ordered set commands, including structural ones: 'layer2.duplicate', 'layer3.remove', 'layer1.defect1.duplicate', 'layer1.defect2.gauss', 'interface1.2_default_IFdefects', 'layer1.Eg.file': 'profile.grd', 'layer1.absorption.file': 'material.abs'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| notes | Yes | |
| device | Yes | |
| run_id | Yes | |
| definition | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare destructiveHint=true and idempotentHint=true, so the safety profile is largely covered. The description adds scope by listing parameters, layers, defects, materials, and solver settings, but it does not elaborate on overwrite behavior or structural operations beyond what the schema already documents.
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 front-loaded sentence with no wasted words. It states the core action and output file format immediately.
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 rich schema coverage, an output schema, and destructive annotations, the description is largely sufficient for invoking the tool. Its main gap is that it does not help an agent choose between editing and sibling creation or scripting tools.
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 carries the burden of parameter meaning. The description only lists broad edit categories and does not add syntax or mapping 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 states a clear verb and resource: change a device and save it as a .def file. It also names the editable areas, so an agent can distinguish it from pure read or simulation tools, though it does not explicitly contrast with create_device or run_script.
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 no explicit when-to-use or when-not-to-use guidance. It implies editing an existing base definition, but it does not name alternatives such as scaps_create_device or scaps_run_script.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scaps_import_fileImport a SCAPS fileADestructiveIdempotent
Add a SCAPS file someone shared (device .def, .material, .abs, spectrum, measurement...) to the installation.
Definitions and materials are parsed to confirm they are valid, and files they reference but that are missing (absorption, grading, filter) are listed.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | Yes | File type; decides the SCAPS folder. | |
| name | Yes | File name with its SCAPS extension, e.g. 'perovskite cell.def'. | |
| content | Yes | Full text of the file. | |
| overwrite | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| file | Yes | |
| kind | Yes | |
| summary | Yes | |
| missing_references | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds genuine behavior beyond annotations: definitions and materials are parsed for validity and missing referenced files are reported back. However, annotations declare destructiveHint=true while the description only says 'Add', never disclosing that an existing file may be overwritten or what the overwrite flag destroys.
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 front-loaded sentences; the parenthetical example list earns its place by tying file types to the kind enum. Minor waste in the trailing newline and a slightly run-on second sentence, but 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?
Output schema exists so return values need no explanation, and required inputs are covered by the schema. The gap is the destructive overwrite path and per-kind placement of files, which the description leaves entirely to annotations and 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 75%, and the description adds meaning beyond it by indicating that validation applies only to definitions and materials and that dependencies (absorption, grading, filter) can be missing. The undocumented 'overwrite' parameter is left unexplained in both places.
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 ('Add ... to the installation') and resource (a SCAPS file), and enumerates concrete examples (.def, .material, .abs, spectrum, measurement) that map onto the kind enum. It implicitly distinguishes itself from scaps_create_device/scaps_edit_device by framing the input as a file someone else shared, though it never names those 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?
'a SCAPS file someone shared' hints at the import-vs-create distinction, but there is no explicit when-to-use, when-not-to-use, or named alternative among the many siblings (scaps_create_device, scaps_write_data). The agent must infer that this is for externally supplied files.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scaps_jobsManage SCAPS jobsA
List recent runs, or get, wait for or cancel one. A finished job includes its full result.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| action | No | What to do. | list |
| job_id | No | Job (run) id for status, wait and cancel. | |
| wait_seconds | No | Wait this long for the result; longer runs continue as a job. |
Output Schema
| Name | Required | Description |
|---|---|---|
| jobs | Yes | |
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly=false, destructive=false, idempotent=false, and openWorld=false. The description adds that a finished job contains its full result and that cancel is possible, but it does not explain cancellation side effects, blocking behavior beyond wait_seconds, or permissions.
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 short sentences, front-loaded with the action menu and a useful note about finished-job results. No text 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 an output schema and annotations, the description needn't explain return values or safety. It still leaves gaps about job lifecycle, action-specific conditions, and how this differs from scaps_results/scaps_status, so it is adequate but not 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 75%, with descriptions for action, job_id, and wait_seconds; the description loosely maps 'recent runs' to limit and 'one' to job_id, but does not add format or constraints beyond the schema. Baseline 3 is appropriate when the schema does most of the work.
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 specifies the resource (recent runs/jobs) and the operations (list, get/status, wait, cancel), so an agent can infer what the tool does. It does not name or distinguish sibling tools such as scaps_results or scaps_status, so it falls short of 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?
The action list implies the available modes, but there is no explicit when-to-use guidance, prerequisites, or alternatives such as when to use this versus scaps_results. The agent must infer usage from the enum and schema.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scaps_list_filesList SCAPS filesBRead-onlyIdempotent
List files in a SCAPS data folder: definitions, spectra, absorption, grading, generation and more.
| Name | Required | Description | Default |
|---|---|---|---|
| kind | No | SCAPS data folder to list. | definitions |
| limit | No | ||
| offset | No | ||
| contains | No | Case-insensitive substring filter. |
Output Schema
| Name | Required | Description |
|---|---|---|
| kind | Yes | |
| files | Yes | |
| total | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, destructiveHint=false and closed-world scope, so the safety profile is fully covered. The description adds nothing beyond that: no pagination behavior, no indication of whether listing is recursive or shallow, no note on ordering. A 3 is appropriate given annotations carry the 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?
One front-loaded sentence that names the resource first. The trailing 'and more' is vague and adds little, but overall there is no wasted text.
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?
Safety and return shape are handled by annotations and the output schema, so the essentials are present. However, for a paginated listing tool the description should at least acknowledge limit/offset behavior and the scope of what 'folder' means; those gaps leave the agent relying on the schema alone.
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 only 50%: kind and contains are documented, but limit and offset have no descriptions. The description's folder list merely restates the kind enum and does not explain pagination semantics or how contains interacts with listing, so it fails to compensate for the coverage gap.
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 (List) and resource (files in a SCAPS data folder), then names the folder categories covered. It is distinguishable from write/run siblings like scaps_write_data and scaps_run_script, though it does not explicitly contrast with read-ish siblings such as scaps_results or scaps_status.
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 never says when to use this tool versus scaps_results, scaps_status, or scaps_describe_device, nor any prerequisites. Only the folder enum loosely implies usage; there is no explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scaps_optimizeFit or optimise a SCAPS deviceA
Fit device parameters to measured curves, or optimise efficiency, Voc, Jsc or FF, by bounded Nelder-Mead.
Replaces the GUI-only SCAPS curve fitter and supports several measurements at once (light and dark J-V, QE, C-V). Each simplex step is one SCAPS session per measurement condition; long runs continue as a job past wait_seconds, so poll with scaps_jobs.
| Name | Required | Description | Default |
|---|---|---|---|
| goal | Yes | fit measured curves, maximise or minimise a J-V metric, or reach a target value. | |
| metric | No | Metric for maximize, minimize and target. | |
| target | No | Target value of the metric for goal 'target'. | |
| actions | No | SCAPS action commands, e.g. {'iv.startV': 0, 'iv.stopV': 1.2, 'iv.increment': 0.02, 'qe.startlambda': 300, 'cf.points.per.decade': 5, 'intensity.ND': 1, 'spectrumcutoff.on': null, 'spectrumcutoff.longlambda': 800}. Omitted settings keep SCAPS defaults. | |
| measured | No | For fit: curves to match together, e.g. [{'kind': 'iv', 'file': 'Numos Ex 1 light.iv'}, {'kind': 'iv', 'x': [...], 'y': [...], 'illumination': 'dark', 'log': true, 'weight': 1}]. Files come from SCAPS measurements/ and are scaled by their area and units headers. Inline data: x in V, Hz or nm; y in mA/cm2 (SCAPS sign), nF/cm2 or %. Default illumination is light for iv and qe, dark for cv and cf. | |
| spectrum | No | Spectrum file in SCAPS spectrum/; default AM1.5G 1 sun. | |
| variables | Yes | Set or action keys to vary with bounds, e.g. {'layer1.defect1.Ntotal': {'min': 1e12, 'max': 1e16, 'log': true}, 'layer2.thickness': {'min': 0.03, 'max': 0.12, 'start': 0.05}}. | |
| definition | Yes | Definition file in SCAPS def/, e.g. 'example CIGS.def'. | |
| parameters | No | Ordered SCAPS set commands in script units, e.g. {'layer1.thickness': 2, 'layer1.NA': 1e16, 'layer1.defect1.Ntotal': 1e14, 'layer1.defect1.singleacceptor': null, 'interface1.IFdefect1.Ntotal': 1e10, 'contactleft.flatband.off': null, 'contactleft.workfunction': 5.1, 'external.Rs': 0.5, 'illumination.fromleft': null, 'numerical.Shockley-Queisser_limit.always': null}. null marks commands without a value. | |
| wait_seconds | No | Wait this long for the result; longer runs continue as a job. | |
| temperature_k | No | Working point temperature in K. | |
| max_evaluations | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| best | Yes | |
| checks | Yes | |
| run_id | Yes | |
| status | Yes | |
| history | Yes | |
| progress | Yes | |
| objective | Yes | |
| best_value | Yes | |
| evaluations | Yes | |
| best_metrics | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Adds meaningful behavior beyond annotations: bounded Nelder-Mead, one SCAPS session per measurement condition per simplex step, multi-measurement support, and job continuation after wait_seconds. With annotations already declaring non-read-only/non-idempotent status, this is rich process context, though side effects on files are not fully spelled out.
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 and compact: it states the core action first, then measurement support, then job behavior. Every sentence contributes, though the GUI-fitter replacement context is somewhat secondary.
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 12-parameter schema, existing output schema, and 92% schema coverage, the description supplies the needed process context: fitting vs optimisation, multiple measurements, and long-run job polling. It is complete enough for invocation, with only minor gaps around side effects and sibling alternatives.
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 92%, so the schema already documents parameters such as goal, measured curves, variables, and actions. The description adds conceptual context for fitting/optimisation but little parameter-level detail 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 specific actions (fit measured curves, optimise efficiency/Voc/Jsc/FF) on SCAPS device parameters and names the method (bounded Nelder-Mead). It is clear what the tool does, but it does not explicitly contrast itself with simulation siblings such as scaps_simulate or scaps_batch.
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 for fitting versus metric optimisation, and explicitly says long runs past wait_seconds should be polled with scaps_jobs. It does not provide explicit when-not-to-use guidance or contrast with scaps_simulate/scaps_batch.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scaps_plotPlot SCAPS resultsCRead-onlyIdempotent
Render result curves as a PNG image. Requires the optional 'plot' extra.
| Name | Required | Description | Default |
|---|---|---|---|
| x | No | X column; default the natural axis of the file type. | |
| y | No | Y columns; default the key column of the file type. | |
| files | Yes | Result files of the run to overlay. | |
| log_x | No | ||
| log_y | No | ||
| table | No | Table title or index, as in scaps_results. | |
| title | No | ||
| run_id | Yes | Run id. | |
| width_px | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare this as a safe, idempotent, non-destructive read. The description adds one genuinely useful piece of context the annotations cannot convey: it requires the optional 'plot' extra, which can fail if uninstalled. However, it says nothing about how the PNG is returned (inline content, file path, base64) or how overlays are composed, which matters for a 9-parameter render 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?
Two short sentences, no filler, with the action front-loaded. Brevity is appropriate; the issue is missing content rather than excess.
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 9-parameter tool with no output schema, an undocumented return shape and half the parameters undescribed, the description is too thin. An agent cannot tell what it receives back or how to control axis scaling and image size from the description alone.
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 only 56%, and the description contributes zero parameter information. Key controls like log_x, log_y, and width_px have no description anywhere, and the overlay semantics of the 'files' array are only partially covered by 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?
States a specific verb and output artifact: render result curves as a PNG image. This differentiates it implicitly from data-oriented siblings like scaps_results, but it never names that sibling, so the differentiation is left to inference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no explicit guidance on when to call this versus scaps_results (fetch data) or scaps_optimize. The only usage-adjacent statement is the dependency on the optional 'plot' extra, which is a prerequisite, not a when-to-use rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scaps_resultsRead SCAPS resultsARead-onlyIdempotent
Return one table of a result file: J-V, QE, C-V, C-f curves or band, generation and AC profiles.
| Name | Required | Description | Default |
|---|---|---|---|
| file | No | Result file of the run; omit to list the files. | |
| step | No | Keep every n-th row to thin long profiles. | |
| table | No | Table title ('bulk', 'interface') or index; default the main table. | |
| offset | No | ||
| run_id | Yes | Run id from scaps_simulate, scaps_batch or scaps_run_script. | |
| columns | No | Columns to keep; default all. | |
| max_rows | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| file | Yes | |
| info | Yes | |
| kind | Yes | |
| rows | Yes | |
| title | Yes | |
| offset | Yes | |
| run_id | Yes | |
| tables | Yes | |
| columns | Yes | |
| total_rows | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, non-destructive, and closed-world behavior, so the safety profile is covered. The description adds that only one table is returned at a time and what table categories exist, but says nothing about pagination/truncation from max_rows/offset, file-listing behavior, or error 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?
A single front-loaded sentence with zero filler. The table-type enumeration is compact and directly useful, and nothing is 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?
The tool has an output schema and annotations, reducing what the description must cover, and it explains the one-table-per-call model and table types. However, it omits important retrieval behavior: the default max_rows cap of 200, offset/thinning semantics for long profiles, and the file-listing fallback when 'file' is omitted.
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?
With 71% schema coverage, the baseline would be 3, but the description meaningfully supplements the 'table' parameter by enumerating valid table categories (J-V, QE, C-V, C-f, band, generation, AC profiles) that the schema does not constrain via enum. It does not clarify offset/max_rows/step paging semantics, which lack descriptions in 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?
States a specific verb and resource ('Return one table of a result file') and enumerates the table types (J-V, QE, C-V, etc.), making the tool's function clear. It does not explicitly differentiate from siblings like scaps_list_files or scaps_plot, but the core purpose is 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 extracting a single table, and the schema notes that omitting 'file' lists files, but there is no explicit when-to-use guidance or named alternative (e.g., scaps_list_files for listing, scaps_plot for visualization). Implied usage only.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scaps_run_scriptRun a SCAPS scriptADestructive
Run a SCAPS script for workflows beyond the other tools: recorder, curve fitting, math, loops, tandem.
The server prepends quit and error-log settings and 'clear all'. Commands are checked against the installed SCAPS; file names must be bare; system commands are rejected. Results saved with 'save results. name' are collected into the run.
| Name | Required | Description | Default |
|---|---|---|---|
| script | Yes | SCAPS script text, one command per line. | |
| timeout_s | No | Override SCAPS_TIMEOUT. | |
| wait_seconds | No | Wait this long for the result; longer runs continue as a job. | |
| validate_only | No | Only check the script and report problems. |
Output Schema
| Name | Required | Description |
|---|---|---|
| files | Yes | |
| run_id | Yes | |
| status | Yes | |
| seconds | Yes | |
| problems | Yes | |
| progress | Yes | |
| warnings | Yes | |
| scaps_errors | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Goes well past the annotations, which only flag destructiveHint=true. It discloses implicit script mutation (server prepends 'quit', error-log settings, and 'clear all'), a validation gate against the installed SCAPS version, sandboxing rules (bare file names, system commands rejected), and the mechanism by which outputs are collected ('save results.<kind> name'). That explains both why the call is destructive and how to retrieve artifacts.
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?
Purpose is front-loaded in the first clause, then a compact block of execution constraints follows with no filler sentences. Slightly dense as a run-on of constraints, but every clause carries information an agent 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 an output schema present, return values needn't be explained, and the annotations carry the safety profile. The description covers prepended commands, validation, sandbox rules, and result collection; the only gaps are the long-run job handoff and timeout semantics, which are 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 description coverage is 100%, so script, timeout_s, wait_seconds, and validate_only are already documented in the schema. The description adds nothing parameter-specific — neither the wait/job-continuation tradeoff nor validate_only is referenced in prose. The 'save results.<kind> name' note describes script content, not an input 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 ('Run a SCAPS script') and immediately scopes it against the sibling family with 'for workflows beyond the other tools', then enumerates the escape-hatch use cases (recorder, curve fitting, math, loops, tandem). An agent can distinguish this from scaps_simulate, scaps_batch, or scaps_optimize without opening a 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?
'For workflows beyond the other tools' clearly signals this is the fallback/general-purpose tool rather than a first choice, and the enumerated use cases make the intended context concrete. It stops short of naming which specific sibling to prefer for common cases (e.g. 'use scaps_simulate for a single IV curve'), so the exclusions remain implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scaps_script_referenceSearch SCAPS script commandsARead-onlyIdempotent
Search the command list of the installed SCAPS version.
layer, defect, interface and IFdefect stand for numbered forms (layer2, defect1); contact stands for contactleft or contactright; marks commands without a value.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | Words to match, e.g. 'defect Ntotal' or 'action qe'. |
Output Schema
| Name | Required | Description |
|---|---|---|
| query | Yes | |
| total | Yes | |
| source | Yes | |
| commands | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only, idempotent, and non-destructive behavior, so the description need not restate safety. It adds that the reference is tied to the installed SCAPS version and explains notation placeholders in command entries, though it does not describe matching behavior or result scope beyond that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The purpose is front-loaded in one sentence, and the notation legend is compact and relevant. The legend could be more tightly tied to 'returned command list', but there is little waste.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists and annotations cover safety, so return format and side effects need not be explained. Still, an agent lacks explicit routing guidance and any explanation of query matching or limit behavior; adequate but with visible 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 schema documents the required query parameter with examples, and the description adds domain vocabulary for numbered forms and <none> placeholders, which helps interpret/search command tokens. However, it never mentions the limit parameter or query matching semantics, so it only partially compensates for 50% schema description 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?
States a specific verb ('Search') and resource ('command list of the installed SCAPS version'), making it clearly a reference lookup rather than script execution or simulation. Sibling tools such as scaps_run_script and scaps_simulate are distinct from this.
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 implied use is to look up command syntax for the installed SCAPS version, but the description gives no explicit when-to-use/when-not guidance or alternatives. It does not say to consult this before scaps_run_script or clarify that it only searches rather than executes.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scaps_simulateRun a SCAPS simulationA
Simulate a device: J-V metrics, QE, C-V, C-f and spatial profiles, with analysis and realism checks.
Analysis gives the absorber's Shockley-Queisser limit, QE-integrated Jsc and a Mott-Schottky fit of C-V. Overrides apply to this run only; files stay available through scaps_results and scaps_plot.
| Name | Required | Description | Default |
|---|---|---|---|
| actions | No | SCAPS action commands, e.g. {'iv.startV': 0, 'iv.stopV': 1.2, 'iv.increment': 0.02, 'qe.startlambda': 300, 'cf.points.per.decade': 5, 'intensity.ND': 1, 'spectrumcutoff.on': null, 'spectrumcutoff.longlambda': 800}. Omitted settings keep SCAPS defaults. | |
| profiles | No | Spatial results at the working point voltage: eb (bands, quasi-Fermi levels, carriers, field, currents, generation and recombination rates) and genrec (occupation of every defect level); ac (small signal) at the last point of a cv or cf measurement. | |
| spectrum | No | Spectrum file in SCAPS spectrum/; default AM1.5G 1 sun. | |
| voltage_v | No | Working point bias in V. | |
| definition | Yes | Definition file in SCAPS def/, e.g. 'example CIGS.def'. | |
| parameters | No | Ordered SCAPS set commands in script units, e.g. {'layer1.thickness': 2, 'layer1.NA': 1e16, 'layer1.defect1.Ntotal': 1e14, 'layer1.defect1.singleacceptor': null, 'interface1.IFdefect1.Ntotal': 1e10, 'contactleft.flatband.off': null, 'contactleft.workfunction': 5.1, 'external.Rs': 0.5, 'illumination.fromleft': null, 'numerical.Shockley-Queisser_limit.always': null}. null marks commands without a value. | |
| frequency_hz | No | Working point frequency in Hz. | |
| illumination | No | Calculate under the spectrum or in the dark. | light |
| measurements | No | Measurements: iv (J-V), qe, cv, cf. May be empty when profiles are requested. | |
| wait_seconds | No | Wait this long for the result; longer runs continue as a job. | |
| temperature_k | No | Working point temperature in K. | |
| response_format | No | detailed adds the key columns of each curve. | concise |
Output Schema
| Name | Required | Description |
|---|---|---|
| files | Yes | |
| checks | Yes | |
| curves | Yes | |
| run_id | Yes | |
| status | Yes | |
| metrics | Yes | |
| seconds | Yes | |
| analysis | Yes | |
| profiles | Yes | |
| progress | Yes | |
| definition | Yes | |
| measurements | Yes | |
| scaps_errors | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare non-read-only, non-destructive, non-idempotent, closed-world behavior, so the bar is lower. The description adds genuinely new behavioral facts: overrides are run-scoped and not persisted, and artifacts remain reachable through scaps_results and scaps_plot. It does not describe job continuation semantics or cost/failure behavior, but that is largely covered by the wait_seconds schema field.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the verb and outputs, then analysis, then persistence semantics. No filler; the only slightly soft phrase is 'realism checks', which is never unpacked.
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?
Output schema exists so return values need not be explained, and the description covers analysis results, override scoping, and artifact access. For a 12-parameter simulation entry point it is nearly complete; the main gaps are sibling routing and the meaning of 'realism checks'.
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 12 parameters in detail. The description adds no parameter-level meaning (e.g. how 'parameters' interacts with 'definition', or what 'profiles' require). 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 and resource ('Simulate a device') and enumerates the computed outputs (J-V, QE, C-V, C-f, spatial profiles) plus analysis. It does not explicitly separate itself from close siblings like scaps_run_script or scaps_batch, though the mention of scaps_results/scaps_plot hints at its position in the workflow.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the scope ('Overrides apply to this run only') and by pointing to scaps_results and scaps_plot for persisted output, which routes the agent after a run. There is no explicit when-to-use / when-not guidance relative to scaps_run_script, scaps_batch, or scaps_optimize.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scaps_sq_limitShockley-Queisser limitBRead-onlyIdempotent
Detailed-balance Jsc, Voc, FF and efficiency limits for given band gaps under a SCAPS spectrum.
| Name | Required | Description | Default |
|---|---|---|---|
| spectrum | No | Spectrum file in SCAPS spectrum/; default AM1.5G 1 sun. | |
| band_gaps_ev | Yes | Band gaps in eV. | |
| temperature_k | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| limits | Yes | |
| spectrum | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and closed-world behavior, so the safety profile is covered. The description adds that this is a detailed-balance calculation (not a device simulation), but says nothing about cost for up to 200 band gaps, whether one result per gap is returned, or temperature's effect on the limits.
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?
One compact sentence with the output quantities front-loaded and the input framing second. It wastes no words, though the phrase 'under a SCAPS spectrum' is slightly opaque compared to the schema's clearer AM1.5G default.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
An output schema exists, so return-value detail is not required, and the description names the computed quantities. However, for a tool that runs a SCAPS-based calculation alongside job/queue siblings, it omits whether the call is synchronous, how long many band gaps take, and how temperature factors in.
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 67%: spectrum and band_gaps_ev are documented in the schema, and the description only mirrors those concepts ('given band gaps', 'SCAPS spectrum'). The undocumented temperature_k parameter is not clarified by the description either, so this sits at the baseline for partial 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?
States a specific verb (compute detailed-balance limits) and resource (Jsc, Voc, FF, efficiency for given band gaps), which is far more precise than the bare title. An agent can distinguish it from simulation siblings like scaps_simulate or scaps_optimize, though no sibling is named explicitly.
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 implicit use case (theoretical limiting efficiency for one or more band gaps) is inferable from the wording, but there is no explicit when-to-use, no mention of when to prefer scaps_simulate, and no prerequisites such as requiring a SCAPS spectrum file to exist.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scaps_statusSCAPS installation statusARead-onlyIdempotent
Report the SCAPS installation in use and how it was found, other installations, run folder and jobs.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| busy | Yes | |
| plotting | Yes | |
| runs_dir | Yes | |
| timeout_s | Yes | |
| executable | Yes | |
| scaps_home | Yes | |
| active_jobs | Yes | |
| wine_prefix | Yes | |
| scaps_version | Yes | |
| script_commands | Yes | |
| scaps_home_source | Yes | |
| other_installations | Yes |
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 useful behavioral context by specifying that it reports the installation in use, how it was discovered, other installations, the run folder, and jobs, which tells the agent what diagnostic information to expect.
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 definition is a single front-loaded sentence with no filler. The list of reported items is slightly run-on and the phrase 'how it was found' could be tightened, but it remains appropriately sized for a status 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?
With an output schema present, rich read-only annotations, and zero parameters, the description is nearly complete for the tool's complexity. It identifies the report contents but does not clarify the discovery-method concept or the relationship to scaps_jobs, leaving a minor contextual 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?
The tool takes zero parameters, so there are no parameter semantics to explain. With no inputs, the baseline is 4; the description appropriately does not waste space on nonexistent parameters.
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 (Report) and resource (SCAPS installation status), and enumerates what is included: installation in use, discovery method, other installations, run folder, and jobs. It clearly distinguishes itself as the diagnostic/status tool among the scaps_* siblings, though the phrasing 'how it was found' is slightly ambiguous.
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 a diagnostic/status use case but gives no explicit guidance on when to call this versus alternatives such as scaps_jobs or scaps_results, even though it mentions jobs. The intended usage is inferable from the title and report contents, but not spelled out.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
scaps_write_dataWrite a SCAPS input fileBDestructiveIdempotent
Write numeric data as a SCAPS input file with the right format and units.
Use it for measured absorption (alpha or extinction coefficient k), custom spectra, external optical generation profiles, contact filters, grading profiles and measurement files for comparison.
| Name | Required | Description | Default |
|---|---|---|---|
| x | Yes | absorption: wavelength or photon energy (x_unit); spectrum, filter: wavelength nm; generation: position um; grading: position um, relative position or composition; measurement: V (iv, cv), Hz (cf) or nm (qe). | |
| y | Yes | absorption: alpha or k (see quantity); spectrum: W/m2/nm or W/m2 per point; generation: G; filter: % transmission or reflection; grading: property in script units; measurement: mA, nF or QE %. | |
| dark | No | measurement only. | |
| kind | Yes | Input file type. | |
| name | Yes | File name; the SCAPS extension is added if missing. | |
| note | No | Source or description, written as comment lines. | |
| extra | No | measurement only: conductance G in S. | |
| bias_v | No | measurement only. | |
| shared | No | grading only: one profile over adjacent layers. | |
| x_unit | No | absorption only: unit of x, wavelength or photon energy. | nm |
| area_cm2 | No | measurement only. | |
| position | No | grading only. | absolute |
| quantity | No | absorption: alpha_per_cm (default), alpha_per_m or k; spectrum: irradiance_w_m2_nm (default) or power_w_m2; generation: per_cm3_s (default) or per_m3_s; grading: the property, e.g. composition, Eg, NA, Nt; measurement: iv, cv, cf or qe. | |
| overwrite | No | ||
| pin_mw_cm2 | No | measurement only. | |
| frequency_hz | No | measurement only. | |
| interpolation | No | grading only. | |
| temperature_k | No | measurement only. | |
| normalise_w_m2 | No | spectrum only: scale total power. |
Output Schema
| Name | Required | Description |
|---|---|---|
| file | Yes | |
| kind | Yes | |
| folder | Yes | |
| points | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations declare destructiveHint=true for a file-writing tool, yet the description never mentions that an existing file may be overwritten or that overwrite defaults to false and must be set deliberately. It also says nothing about where files land or whether writes are visible to other tools. Beyond restating 'right format and units', it adds no behavioral context that the annotations do not already carry.
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 short sentences with the core action front-loaded and the supported data types listed after. There is minor waste in the vague phrase 'with the right format and units', which conveys little the schema doesn't.
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 output schema and rich parameter schema relieve the description of return-value and per-parameter explanation. However, for a 19-parameter destructive write tool, the description is thin on the overwrite/safety story and on how kind selects which optional parameters matter.
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 95%, including per-kind semantics for x, y, quantity, and x_unit, so the schema does most of the work. The description adds only the general 'format and units' framing, with no extra cross-parameter guidance (e.g., matching quantity to kind or units to x_unit). 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 states a specific verb and resource: write numeric data as a SCAPS input file, including that formatting and units are handled. It enumerates the data families (absorption, spectra, generation, filters, grading, measurement), which maps cleanly onto the kind enum. It does not distinguish itself from scaps_import_file, which could plausibly handle similar data.
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 gives a positive usage scope that matches the six kind values, so an agent can tell roughly when the tool applies. There is no guidance on when not to use it, no mention of scaps_import_file as the alternative for existing files, and no note on when overwrite should be set.
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.
16 tool updates
v0.1.0- First observed
scaps_batch - First observed
scaps_create_device - First observed
scaps_describe_device - First observed
scaps_edit_device - First observed
scaps_import_file - First observed
scaps_jobs - First observed
scaps_list_files - First observed
scaps_optimize - First observed
scaps_plot - First observed
scaps_results - First observed
scaps_run_script - First observed
scaps_script_reference - First observed
scaps_simulate - First observed
scaps_sq_limit - First observed
scaps_status - First observed
scaps_write_data
TDQS
Scored across 16 tools
Most tools target clearly distinct actions (create/edit/describe device, write data, import file, plot, sq_limit). The main overlap is among the simulation family — scaps_simulate, scaps_batch, scaps_optimize, scaps_run_script — but their descriptions draw usable boundaries (single run, parameter sweep, fitting, escape hatch). Minor potential confusion between scaps_results and scaps_plot, and between scaps_create_device and scaps_edit_device, is resolved by the descriptions.
All tools share the scaps_ prefix and mostly follow verb_noun (write_data, list_files, create_device, edit_device, describe_device, run_script, import_file). A few deviate to bare verbs or nouns (scaps_simulate, scaps_status, scaps_jobs, scaps_results, scaps_batch), but the pattern remains predictable and readable.
16 tools is at the upper end of the comfortable range, but the domain (device construction, simulation, batch/optimization, results, jobs, file management, scripting) genuinely warrants this surface. Each tool maps to a real workflow step rather than padding.
Coverage is strong: create/edit/describe devices, simulate, batch, optimize, retrieve/plot results, manage jobs, import files, query script reference, and a low-level script escape hatch. Gaps are minor — no explicit delete/cleanup of run artifacts and no dedicated material-authoring tool, though scaps_write_data and scaps_edit_device partially cover these.
Maintenance
Related MCP Connectors
Build, run and analyse block-diagram simulations: PID, Bode, FFT, optimisation and code export.
Simulate electric UAV powertrains and search a public motor, propeller and battery database.
NREL MCP — wraps the US National Renewable Energy Laboratory developer API
- 3DOptixOAuthcom.3doptix
Optical design, simulation and analysis with GPU-powered ray tracing. Import from Zemax and CAD.
Related MCP Servers
- 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.48GPL 3.0
- FlicenseNot gradedqualityDmaintenanceMCP bridge for Demeter/Artemis EXAFS fitting. Enables headless fits, building Artemis projects, generating LaTeX reports, and launching the Artemis GUI.-
- AlicenseNot gradedqualityDmaintenanceEnables natural-language-driven automation of Ansys Lumerical photonic simulations (FDTD, MODE, DEVICE, INTERCONNECT) with 40+ tools for geometry, materials, sources, monitors, solvers, results, optimization, and documentation.1MIT
- AlicenseAqualityAmaintenanceMaintained fork of Three-Little-Birds/openvsp-mcp, adding OpenVSP geometry inspection, typed parameter editing, SVG/STL previews, validated VSPAERO analysis, and durable parallel batches with progress, cancellation, resume, and CSV/JSON export. Independently maintained by rhyne1012; not an official OpenVSP or NASA project.18MIT