raspa-mcp
Click on "Install 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., "@raspa-mcpRun GCMC simulation for CO2 adsorption in MOF-5 at 300K and 1 bar."
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.
raspa-mcp
Turn any AI agent into a molecular simulation expert — overnight.
raspa-mcp is a Model Context Protocol (MCP) server that wraps RASPA2 — the gold-standard molecular simulation engine for porous materials — into a clean, agent-friendly tool layer. Feed it a CIF file and a molecule name; let your agent handle the rest.
Why raspa-mcp?
Running RASPA2 correctly requires deep expertise: choosing the right ensemble, setting unit cell replications, picking force fields, validating Ewald summation parameters, and parsing Fortran-style output files. Historically this knowledge lived in the heads of computational chemists and nowhere else.
raspa-mcp encodes that expertise as 20 structured MCP tools — covering every major simulation type RASPA2 supports — so that an LLM agent like featherflow can autonomously design, validate, execute, and interpret molecular simulations without human intervention.
Related MCP server: PLUMED2 MCP Server
Features at a Glance
Simulation Templates (12 types)
Template | Purpose |
| Grand Canonical Monte Carlo — adsorption isotherms |
| Widom test-particle insertion — Henry coefficient at infinite dilution |
| Helium void fraction (prerequisite for GCMC) |
| Fixed-N Monte Carlo — configurational sampling, RDF |
| Variable-volume MC — equilibrium density, flexible cell |
| NVT Molecular Dynamics — diffusion, transport |
| Constant-pressure MD — thermal expansion |
| Microcanonical MD — energy conservation benchmarking |
| Binary mixture GCMC — co-adsorption, selectivity |
| Configurational-Bias MC — chain/flexible molecules (C4+) |
| Thermodynamic Integration — free energy ΔA |
| Flexible-framework MD — breathing, gate opening |
Output Parsing (7 parsers)
Adsorption loading — mol/kg, mg/g, cm³(STP)/g, molecules/uc, ±errors
Isosteric heat Qst — from energy fluctuations [kJ/mol]
Henry coefficient & μ_ex — from Widom insertion, −RT ln(W)
Helium void fraction — direct extraction
Radial distribution function g(r) — peak detection, full r/g(r) arrays
MSD → Diffusion coefficients — self D_s and collective D_c via Einstein relation (NumPy linear fit, latter 50% of trajectory)
3D density grid — 2D slice extraction from
.gridfilesThermodynamic Integration — trapezoidal ∫⟨∂U/∂λ⟩dλ → ΔA [kJ/mol]
Multi-component mixture — per-component loading with backward compatibility
Analysis Tools
Selectivity S_AB —
(x_A/x_B) / (y_A/y_B)from mixture loadingsIsotherm plotting — single and multi-MOF comparison PNGs (matplotlib)
Density slice plotting — heatmap PNG from 3D grid data
Built-in Knowledge Base
6 molecules: CO2, N2, CH4, H2O, helium, n-butane (TraPPE / SPC-E)
5 force fields: TraPPE-CO2/N2/CH4/H2O, UFF — with mixing rules, pseudo-atom definitions
Input validator — catches 20+ common mistakes before RASPA2 ever runs
Environment checker — reports RASPA2 readiness on server startup
Installation
0. Install uv (if not already present)
# Linux / macOS
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"uv is a fast Python package manager. It replaces
pip+venvwith a single tool and handles the Python version automatically.
1. Clone and install the Python package
git clone https://github.com/lichman0405/raspa-mcp
cd raspa-mcp
uv syncuv sync creates a virtual environment under .venv/, pins the Python version (3.11+), and installs all dependencies — no manual venv or pip needed.
2. Compile and configure RASPA2 (one-time setup)
uv run python -m raspa_mcp.installerThis single command:
Checks for build tools (
git,gcc,make,autoconf,automake,libtool) and installs any that are missing automatically viaapt-get/dnf/yum/brewetc.Clones RASPA2 from GitHub and compiles from source
Installs to
~/.local/raspa2by default (override with--prefix)Writes
RASPA_DIRandPATHexports to your shell RC file automatically
# custom install prefix:
uv run python -m raspa_mcp.installer --prefix /opt/raspa2
# force reinstall even if already present:
uv run python -m raspa_mcp.installer --forceAfter the command finishes, reload your shell:
source ~/.bashrc # or ~/.zshrc, ~/.profile, etc.Compatibility: Tested on Ubuntu 24.04 (GCC 14). The installer automatically applies
-std=gnu11and other compiler flags to work around known issues in the RASPA2 source tree on modern GCC versions.
RASPA2 source: https://github.com/iRASPA/RASPA2
Reference: D. Dubbeldam, S. Calero, D.E. Ellis, R.Q. Snurr, Mol. Simul. 42, 81–101 (2016)
Quickstart — featherflow
Register raspa-mcp with one command (run in the featherflow project directory):
featherflow config mcp add raspa2 \
--command uv \
--arg run \
--arg --directory \
--arg /path/to/raspa-mcp \
--arg raspa-mcp \
--lazy \
--description "RASPA2 molecular simulation: GCMC, MD, adsorption isotherms, force fields, output parsing" \
--timeout 600
--lazy: raspa-mcp exposes 20 tools — lazy mode registers a single gateway entry-point instead of all tools upfront, keeping per-call LLM token cost low.--timeout 600: RASPA2 simulations can take minutes; featherflow recommends 300–600 s for scientific computing MCP servers.
Verify:
featherflow config mcp listYour agent can now autonomously:
User: Study CO2 adsorption in ZIF-8 at 298 K from 0.1 to 50 bar.
Agent:
1. raspa-mcp.get_simulation_template("VoidFraction") → run RASPA2
2. raspa-mcp.parse_raspa_output(...) → void fraction = 0.47
3. raspa-mcp.get_simulation_template("GCMC") → fill placeholders × 7 pressures
4. raspa-mcp.validate_simulation_input(...) → clean
5. shell_exec → RASPA2 × 7
6. raspa-mcp.parse_raspa_output(...) → isotherm data
7. raspa-mcp.plot_isotherm(...) → ZIF-8_CO2.png
8. feishu-mcp.upload_file_and_share(...) → report deliveredNo human intervention required.
MCP Tools Reference
Tool | Category |
| Discovery |
| Input generation |
| Input generation |
| Force field |
| Force field |
| Force field |
| Molecule |
| Molecule |
| Workspace |
| Validation |
| Output parsing |
| Output parsing |
| Output parsing |
| Output parsing |
| Output parsing |
| Analysis |
| Visualization |
| Visualization |
| Visualization |
| Environment |
| Custom workflow |
| Custom workflow |
| Custom workflow |
| Custom workflow |
| Custom workflow |
| Custom workflow |
| Custom workflow |
| Custom workflow |
Custom-everything workflow
When you bring your own CIF, your own force field, and your own molecule definitions, the tooling above gives you safe builders for every file RASPA2 expects:
inspect_cif(cif) → formula, cell, charges, overlap warnings
recommend_supercell(cif, 12) → UnitCells line + ChargeMethod hint
create_workspace(work, name, cif)
generate_force_field_def(work) # safe "3 zeros" overwrite file
generate_force_field_mixing_rules_def(work, atom_types=[...]) # LJ ε/σ
generate_pseudo_atoms_def(work, atoms=[...]) # atom registry
generate_molecule_def(work, "MyAdsorbate", ...) # per-molecule .def
preflight_workspace(work) # cross-file sanity
force_field.def≠force_field_mixing_rules.def. The first file is overwrite rules (use the "3 zeros" minimum for almost every job). The second file is where Lennard-Jones ε/σ live. Mixing them up is the single most common cause of cryptic:#parse errors from RASPA2. The generators emit the correct format for both.
For an end-to-end recipe call get_workflow_recipe("custom_mof_gcmc").
All write operations are sandboxed under RASPA_MCP_WORKSPACE_BASE
(default ~/raspa_workspaces) — paths outside that root are rejected.
Testing
uv run pytest tests/ -q # 41 tests, ~1.5 s
uv run ruff check raspa_mcp/ tests/Architecture
raspa-mcp/
├── raspa_mcp/
│ ├── server.py # 20 MCP tools (FastMCP, stdio transport)
│ ├── parser.py # Output parsers (loading, RDF, MSD, TI, density)
│ ├── validator.py # Input validator (20+ rule checks)
│ ├── installer.py # RASPA2 env detection + source build + raspa-mcp-setup CLI
│ └── data/
│ ├── templates.py # 12 simulation.input templates
│ ├── molecules.py # 6 molecule definitions + metadata
│ └── forcefields.py # 5 force field file sets
├── tests/
│ └── test_server.py # 41 unit tests
└── docs/
└── workflow.md # Full autonomous research workflow walkthroughFull Business Workflow
See docs/workflow.md for a complete end-to-end walkthrough of an autonomous MOF screening study using featherflow + raspa-mcp + RASPA2 + feishu-mcp, from a single chat message to a ranked report delivered to Feishu — approximately 120–140 tool calls, zero human steps.
License
MIT
Acknowledgements
Built on top of RASPA2 by Dubbeldam, Calero, Ellis & Snurr. Force-field parameters from the TraPPE family (Martin, Siepmann et al.) and the Universal Force Field (Rappé et al.).
Available Tools
28 toolscalculate_selectivityA
Calculate adsorption selectivity S_AB from mixture GCMC results (4-4).
Uses the adsorption selectivity definition: S_AB = (x_A / x_B) / (y_A / y_B) where x = adsorbed-phase mole fraction, y = gas-phase (feed) mole fraction.
Inputs come from parse_raspa_output()["components"] for a GCMCMixture simulation.
loading_a / loading_b: average loading of each component in mol/kg (or any consistent units — they cancel in the ratio). feed_fraction_a / feed_fraction_b: mole fractions in the feed gas (must sum to 1.0 for a binary; for partial fractions in a larger mixture, pass the relevant pair).
Returns S_AB > 1 means the material prefers A over B. S_AB < 1 means preference for B. S_AB = 1 means no selectivity.
| Name | Required | Description | Default |
|---|---|---|---|
| label_a | No | A | |
| label_b | No | B | |
| loading_a | Yes | ||
| loading_b | Yes | ||
| feed_fraction_a | Yes | ||
| feed_fraction_b | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It explains the mathematical definition, unit cancellation, and interpretation of returned values (S_AB > 1, < 1, = 1). It omits edge-case handling but adds meaningful behavioral detail.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-organized: purpose, formula, parameter details, and return interpretation. Every sentence earns its place with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple calculation tool without an output schema, the description sufficiently covers formula, input sources, and output semantics. It lacks error-handling details and optional-label explanation, but is complete enough for typical 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 0%, so the description must compensate. It explains loading_a/b and feed_fraction_a/b with units and constraints, but does not explain label_a/b. Since labels are optional and self-evident from defaults, this is a minor 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?
The description clearly states the tool calculates adsorption selectivity S_AB from mixture GCMC results, supported by the exact formula. This specific verb+resource+scope distinguishes it from sibling parsing/plotting tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives clear context by specifying the input source (parse_raspa_output()['components'] for GCMCMixture) and notes feed fraction constraints. It does not explicitly list alternatives or exclusions, but the intended usage is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_raspa2_environmentA
Check whether RASPA2 is correctly installed and configured on this server.
Verifies:
'simulate' binary is on PATH
RASPA_DIR environment variable is set and valid
Force field and molecule files exist under $RASPA_DIR
Returns a full diagnostic report. If ready=False, run: raspa-mcp-setup (compiles RASPA2 from source).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains exactly what is checked, states that a diagnostic report is returned, and mentions the remediation command for the failure case. It does not explicitly state it performs no modifications, but 'check' and the listed verifications imply a read-only operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the main purpose. The numbered list of checks is compact and easy to scan, and every sentence adds useful information 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?
For a zero-parameter diagnostic tool, the description is complete. It explains what will be checked, what the output is (a full diagnostic report), and what action to take when the environment is not ready. No output schema exists, but the return type is clearly expressible as a diagnostic report.
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 has zero parameters, so the input schema already provides complete parameter information. The baseline of 4 applies, and the description correctly spends no space on parameter details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Check whether RASPA2 is correctly installed and configured on this server.' It then lists the precise verification points (binary on PATH, environment variable, force field/molecule files), which clearly distinguishes it from sibling simulation and parsing tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly states the tool's purpose and includes an actionable next step if the check fails ('run: raspa-mcp-setup'). It does not explicitly list when to use this tool versus alternatives, but the context of checking the environment before simulations is strongly implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_workspaceA
Create a properly structured RASPA2 simulation workspace directory.
RASPA2 expects a specific directory layout. This tool creates it and copies the CIF file into the right location.
Structure created: / simulation.input ← Claude writes this force_field_mixing_rules.def ← Claude writes this pseudo_atoms.def ← Claude writes this frameworks/ / .cif molecules/ TraPPE/ ← Claude writes .def files here
Args: work_dir: Absolute path for the new simulation directory. framework_name: Name matching the CIF file (without .cif extension). cif_source_path: Absolute path to the existing CIF file.
Security:
work_dir must resolve to a path inside the allowed workspace base,
controlled by the RASPA_MCP_WORKSPACE_BASE environment variable
(default: ~/raspa_workspaces). This prevents an LLM from creating
directories or copying files at arbitrary filesystem locations
(e.g. /etc, /root) when this MCP runs as a privileged user.
| Name | Required | Description | Default |
|---|---|---|---|
| work_dir | Yes | ||
| framework_name | Yes | ||
| cif_source_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description fully carries the behavioral disclosure burden. It explicitly states that it creates directories and copies a CIF file, and it details what it does NOT create: 'simulation.input, force_field_mixing_rules.def, pseudo_atoms.def, and molecules/TraPPE/*.def' are left for Claude to write. It also discloses a security restriction: 'work_dir must resolve to a path inside the allowed workspace base, controlled by the RASPA_MCP_WORKSPACE_BASE environment variable.' This is substantial transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized and front-loaded. It begins with a clear one-sentence summary, then provides a concrete directory tree, followed by Args and Security sections. Every sentence earns its place, and there is no redundant content. The formatting improves readability.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This tool is a file-system operation with no output schema. The description is complete enough: it specifies the exact structure created, the source CIF copy, the parameter roles, and a critical security constraint. It also clarifies the boundary of what the tool does versus what the model must write, which is essential for the agent's workflow.
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?
Despite 0% schema description coverage, the description compensates thoroughly with an 'Args:' section that adds meaning beyond the bare schema. For example, it explains that framework_name is the name matching the CIF file (without extension), work_dir is an absolute path to the new simulation directory, and cif_source_path points to the existing CIF file. This is more informative than the schema's simple type/title fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Create a properly structured RASPA2 simulation workspace directory.' It then details the exact directory layout and the CIF copying action, which clearly distinguishes it from sibling tools like preflight_workspace or the generate_* tools. The scope 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 provides clear context: 'RASPA2 expects a specific directory layout. This tool creates it and copies the CIF file into the right location.' This implies it is the initial setup step for a simulation workspace. However, it does not explicitly name alternatives or exclusions (e.g., 'use preflight_workspace to validate an existing workspace'), so it stops short of full 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.
generate_force_field_defA
Generate force_field.def (the OVERWRITE-rules file) at work_dir.
With no extra arguments, produces the safe minimal "3 zeros" form, which is
what most users actually need when their LJ parameters live in
force_field_mixing_rules.def.
DO NOT confuse this file with force_field_mixing_rules.def — putting LJ
epsilon/sigma here is the most common cause of cryptic :# parse errors
from RASPA2. Use generate_force_field_mixing_rules_def for those.
Args:
work_dir: Workspace directory (must be inside RASPA_MCP_WORKSPACE_BASE).
rules_to_overwrite, interactions_to_define, mixing_rules_to_overwrite:
Optional lists of {"line": str, "comment": str | None} entries.
return_only: If True, do not touch disk; just return the rendered text.
| Name | Required | Description | Default |
|---|---|---|---|
| work_dir | Yes | ||
| return_only | No | ||
| rules_to_overwrite | No | ||
| interactions_to_define | No | ||
| mixing_rules_to_overwrite | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses default disk writes, the safe minimal output, and the return_only flag to avoid writing. It also mentions the workspace path constraint. It does not explicitly state whether an existing file is overwritten, but the core behaviors are well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is focused and well-structured: a one-sentence purpose, a helpful warning, and a clear Args list. Every sentence adds value with no fluff, and critical warnings are front-loaded.
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 5-parameter tool with no annotations or output schema, the description covers purpose, safe default usage, parameter meanings, and differentiation from a sibling. Minor gaps like the exact return format when return_only is true remain, but overall it is sufficiently 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 descriptions are missing (0% coverage), but the description compensates by explaining work_dir with a workspace constraint, return_only as a no-write flag, and the three optional lists with their entry structure ({line, comment}). This adds meaningful semantics beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Generate') and resource ('force_field.def'), explicitly naming it as the OVERWRITE-rules file. It clearly distinguishes the tool from the sibling generate_force_field_mixing_rules_def by name and purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly warns against confusing this file with force_field_mixing_rules.def and directs users to the sibling tool for LJ parameters. It also explains that with no arguments it produces the safe minimal '3 zeros' form, which is the common use case.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_force_field_mixing_rules_defA
Generate force_field_mixing_rules.def — the LJ epsilon/sigma file.
Each atom_types item: {"name": str, "epsilon_K": float, "sigma_A": float, "interaction": "lennard-jones", "comment": str | None}.
For the "shifted vs truncated" choice, "shifted" zeroes the LJ
potential at the cutoff (smoother energies); "truncated" matches RASPA2
legacy behaviour. Set tail_corrections=True for fluid-phase work.
Args:
work_dir: Workspace directory (sandboxed).
atom_types: Required list of atom-type dicts.
general_mixing_rule: Lorentz-Berthelot (default) or Jorgensen.
general_truncation: shifted (default) or truncated.
tail_corrections: Apply analytic LJ tail corrections.
return_only: Dry-run; do not write to disk.
| Name | Required | Description | Default |
|---|---|---|---|
| work_dir | Yes | ||
| atom_types | Yes | ||
| return_only | No | ||
| tail_corrections | No | ||
| general_truncation | No | shifted | |
| general_mixing_rule | No | Lorentz-Berthelot |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explains the effect of 'shifted' and 'truncated' options, mentions that return_only is a dry-run, and describes the atom_types item structure. It does not discuss permissions, overwriting behavior, or error handling, which is a minor gap, but the core behavioral traits are disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat long but well-structured, starting with a one-line summary, then detailing the atom_types schema, the truncation choice, and a formal Args list. Every sentence adds value, and the format makes it easy to scan. Slightly verbose but appropriate for the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 6 parameters, no output schema, and no annotations, the description covers all parameter semantics and key behavioral aspects. It lacks an explicit description of the return value when return_only is true, and it does not provide a concrete example of the output file. However, it is complete enough for an agent to understand and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It provides an explicit Args section explaining every parameter, including the nested structure of atom_types, the options for general_mixing_rule, general_truncation, tail_corrections, and return_only. This fully compensates for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb and resource: 'Generate force_field_mixing_rules.def — the LJ epsilon/sigma file.' It clearly distinguishes this tool from siblings like generate_force_field_def and generate_pseudo_atoms_def by specifying the exact file and content. The 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 provides clear context for parameter choices, including the shifted vs truncated behavior and when to use tail corrections for fluid-phase work. However, it does not explicitly state when to use this tool versus alternatives like generate_force_field_def, so it stops short of full exclusion guidance. The implied usage is strong, but explicit alternatives are not named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_molecule_defA
Generate a per-molecule .def file at
<work_dir>/molecules/<subdirectory>/<molecule_name>.def.
atoms items: {"type": str, "x": float, "y": float, "z": float}.
Coords are Å relative to the molecule centre of mass.
bonds items: [i, j, "RIGID_BOND"] (or any RASPA2 bond keyword).
bends items: [i, j, k, "<bend_keyword>"].
torsions items: [i, j, k, l, "<torsion_keyword>"].
Set MoleculeDefinition <subdirectory> in simulation.input so RASPA2
finds this file. Avoid MoleculeDefinition local — that points to
$RASPA_DIR/share/raspa/molecules/local/, not your workspace.
| Name | Required | Description | Default |
|---|---|---|---|
| atoms | Yes | ||
| bends | No | ||
| bonds | No | ||
| rigid | No | ||
| n_groups | No | ||
| torsions | No | ||
| work_dir | Yes | ||
| return_only | No | ||
| subdirectory | No | TraPPE | |
| molecule_name | Yes | ||
| acentric_factor | Yes | ||
| critical_pressure_Pa | Yes | ||
| critical_temperature_K | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description discloses important behaviors such as coordinate origin (centre of mass), units (Å), and file path. However, it omits behavior of key parameters like return_only, rigid, n_groups, and doesn't state overwrite behavior or return 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 well-structured, with a clear purpose line, representative code blocks for array formats, and a usage note. No redundant sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 13-parameter tool with no output schema or annotations, the description covers the main file content and path but leaves several parameters undocumented. It provides a good foundation but not enough for fully independent use, especially regarding return_only and thermodynamic parameters.
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 has zero description coverage for parameters. The description explains the structure of atoms/bonds/bends/torsions arrays and the path template implicitly covers work_dir, subdirectory, molecule_name. But critical properties, rigid, n_groups, and return_only remain unexplained, so coverage is partial.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Generate a per-molecule .def file' with a specific path pattern. This distinguishes it from sibling tools like generate_force_field_def and get_molecule_definition.
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 clear context on how to use the generated file ('Set MoleculeDefinition <subdirectory> in simulation.input') and a specific warning against 'MoleculeDefinition local'. However, it doesn't explicitly compare against alternative tools for retrieving or generating molecule definitions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
generate_pseudo_atoms_defA
Generate pseudo_atoms.def — the atom registry. Every atom-type symbol
that appears in the CIF, in force_field_mixing_rules.def, or in any
molecule .def must be listed here.
Each atoms item must include at minimum: name, chem, mass,
charge. Optional keys with defaults: print=yes, print_as=name,
oxidation=0, polarization=0, b_factor=1.0, radii=1.0,
connectivity=0, anisotropic=0, anisotropic_type='absolute',
tinker_type=0.
| Name | Required | Description | Default |
|---|---|---|---|
| atoms | Yes | ||
| work_dir | Yes | ||
| return_only | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It explains the file's purpose and the required/optional keys for each atom entry, which adds behavioral context. However, it does not disclose side effects like file writing behavior, overwriting, or the `return_only` toggle.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and front-loaded with the core purpose. Every sentence adds value: the first identifies the output file and role, the second details required and optional atom fields. No redundant or vague phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite explaining the atom item structure, the description omits important operational details: whether the tool writes to disk, how `return_only` changes behavior, what happens if `atoms` is missing required keys, and error conditions. For a generation tool with no output schema, these are significant gaps.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It does so for the `atoms` parameter by listing required and optional keys per item, adding substantial meaning beyond the bare schema. However, `work_dir` and `return_only` remain unexplained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: generating `pseudo_atoms.def`, the atom registry. It specifies the resource and the action ('Generate'). While it doesn't explicitly compare to sibling tools like `generate_molecule_def`, the unique role as atom registry is distinct enough.
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: it is the tool for creating the registry that must include all atom types from various sources. It gives context about coverage requirements but does not explicitly state when to use this over alternatives or provide exclusion criteria.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_forcefield_filesA
Return the complete content of pseudo_atoms.def and force_field_mixing_rules.def for the given force field.
These files must be placed in the simulation working directory alongside simulation.input.
Args: forcefield_name: e.g. "TraPPE-CO2", "TraPPE-N2", "TraPPE-CH4"
| Name | Required | Description | Default |
|---|---|---|---|
| forcefield_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It clearly indicates a read-only operation ('Return the complete content') but does not disclose any error handling, prerequisites, or side effects. Since it's a simple retriever, some behavioral context is assumed but not explicitly stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the core purpose. The note about file placement is a single, relevant sentence. The Args section is clearly formatted with examples. No unnecessary words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one parameter, no output schema, and a simple retrieval action, the description is nearly complete. It specifies the exact files returned and where they should be used. It could mention the return format (e.g., plain text or dict) but this is not critical for a straightforward read tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It does so by providing example forcefield names (TraPPE-CO2, TraPPE-N2, TraPPE-CH4), giving meaningful context beyond the schema's bare 'Forcefield Name'. This is sufficient for a single parameter, though it could be improved by listing all valid options or pointing to list_available_forcefields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states it returns the complete content of two specific files (pseudo_atoms.def and force_field_mixing_rules.def) for a given force field, using a clear verb ('return') and resource. This clearly distinguishes it from sibling tools like generate_force_field_def, which generate rather than retrieve files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context that the returned files must be placed in the simulation working directory alongside simulation.input, implying the tool is used when setting up a simulation. However, it does not explicitly mention alternatives or when not to use it (e.g., when generating new force fields), which would merit a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_molecule_definitionA
Return the content of the RASPA2 molecule definition file (.def) for a built-in molecule.
The file must be placed at: /molecules/TraPPE/.def
Args: molecule_name: e.g. "CO2", "N2", "CH4", "H2O", "helium"
| Name | Required | Description | Default |
|---|---|---|---|
| molecule_name | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the transparency burden. It clearly indicates a read operation (returns content) and specifies the file location, but it does not disclose error behavior, return format, or case sensitivity. No contradictions with annotations (none provided).
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the purpose. The Args section reinforces examples without unnecessary verbosity, and every sentence adds 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 one-parameter read tool, the description gives the essential purpose and path, but it omits error handling and does not point to the sibling tool list_available_molecules for discovering valid names. This makes it incomplete for an agent that needs to recover from invalid inputs or navigate the available molecule set.
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 only defines the parameter name with no description, so the description's examples (CO2, N2, CH4, H2O, helium) add valuable semantics by showing valid values. It also states the molecule must be built-in, providing a constraint not present 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?
The description clearly states the tool returns the content of a RASPA2 molecule definition file for a built-in molecule, using a specific verb and resource. However, it does not explicitly differentiate from sibling tools like list_available_molecules or generate_molecule_def, so it lacks full sibling distinction.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage by showing the file path and example molecule names, giving some context for when to use it. However, it does not explicitly state when to use this tool versus alternatives, nor does it mention exclusions or references to sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_parameter_docsA
Return documentation for RASPA2 simulation.input parameters.
Args: parameter_name: Specific parameter name (e.g. "CutOff", "EwaldPrecision"), or None to get all parameters.
| Name | Required | Description | Default |
|---|---|---|---|
| parameter_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. The verb 'Return' strongly implies a read-only operation with no side effects, but the description does not explicitly state this, nor does it disclose behavior for invalid parameter names or return format. It is adequate for a trivial lookup tool but lacks richer behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded, with the core purpose in the first sentence and an efficient Args section covering the parameter. Every sentence earns its place, and there is no redundant or filler content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple with one optional parameter and no output schema, but the description does not specify the return format (e.g., plain text, dictionary, list) or error behavior for invalid parameter names. While it gives enough to invoke the tool, an agent would benefit from knowing the response shape or error handling, especially given the lack of an 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 parameter 'parameter_name' has no schema description (0% coverage), but the tool description compensates by explaining the parameter explicitly: it can be a specific string (with examples) or None to retrieve all parameters. This adds meaningful semantics beyond the raw schema, making the parameter's purpose and allowed values clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool returns documentation for RASPA2 simulation.input parameters, with a specific verb ('Return') and resource ('RASPA2 simulation.input parameters'). It distinguishes itself from sibling tools like list_available_forcefields or get_simulation_template by focusing on parameter documentation. The 'Args' section further clarifies the scope.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage via the parameter_name argument: provide a specific name or omit it to get all parameters. However, it does not explicitly state when to use this tool over alternatives, nor does it mention exclusions or prerequisites. The context is clear but implicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_simulation_templateA
Return the canonical simulation.input template for the given simulation type. The template contains ${PLACEHOLDER} markers — replace them with actual values before writing the file.
Also returns parameter documentation explaining each placeholder.
| Name | Required | Description | Default |
|---|---|---|---|
| simulation_type | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the full burden. It discloses that the return includes a template with ${PLACEHOLDER} markers and parameter documentation, which are key behavioral details. It does not mention side effects or error handling, but as a read-only getter this is largely sufficient.
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 three sentences, with the main purpose front-loaded first, followed by placeholder semantics and documentation details. Every sentence adds value and there is no fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter getter with no output schema, the description covers the essential return values (template and docs) and the placeholder aspect. It does not specify the exact return format or error behavior, but given the low complexity this is nearly 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?
The schema provides an enum for simulation_type but has 0% description coverage. The description does not explain any of the enum values or add parameter-specific meaning; it only says 'for the given simulation type,' which is already implied. This fails to compensate for the low schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Return the canonical simulation.input template for the given simulation type' with a specific verb and object. It distinguishes itself from siblings like list_simulation_types and get_parameter_docs by explicitly mentioning the template and placeholder markers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies the tool is used when you need a template for a simulation type before writing a file. It provides clear context but does not explicitly mention alternatives or exclusions, 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.
get_workflow_recipeA
Return an ordered, tool-by-tool recipe for a common RASPA2 scenario.
Args:
scenario: One of custom_mof_gcmc, henry_widom, diffusion_md,
or None to list all available scenarios.
| Name | Required | Description | Default |
|---|---|---|---|
| scenario | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It goes beyond the schema by enumerating accepted scenario values and specifying the behavior when scenario is None (list all). This adds meaningful context about input handling and output scope, though it doesn't detail the exact recipe format 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?
The description is compact and well-structured: a single sentence states the primary purpose, followed by an Args section that clearly documents the parameter and its options. Every sentence adds value, with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple (one optional parameter, no output schema), and the description adequately covers its core behavior. It explains what the tool returns and how to use the parameter, but could be slightly more complete by specifying the recipe's structure (e.g., whether it includes arguments or tool names only). Overall, it's sufficient for an agent to invoke correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no description for the 'scenario' parameter (0% coverage), so the description fully compensates by enumerating the valid string values and explaining the None default behavior. This is essential semantic meaning that the schema alone does not convey.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Return an ordered, tool-by-tool recipe for a common RASPA2 scenario.' It uses a specific verb ('Return'), identifies the resource ('recipe'), and differentiates from siblings like get_simulation_template by emphasizing the sequential, tool-by-tool nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool by listing valid scenarios (custom_mof_gcmc, henry_widom, diffusion_md) and noting that None lists all available scenarios. It provides clear context for usage but stops short of explicitly naming alternatives or exclusions, which would push it to a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_cifA
Inspect a CIF file: formula, cell parameters, charge column status, minimum interatomic distance. Flags common pitfalls (no charges, non-neutral cell, atom overlap).
Use before launching a simulation against an unfamiliar CIF.
| Name | Required | Description | Default |
|---|---|---|---|
| cif_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses behavioral details: it flags common pitfalls like no charges, non-neutral cell, and atom overlap. It also lists what it inspects. While it doesn't discuss permissions or output format, for a read-only inspection tool the behavior is well covered.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences: the first lists what the tool does, the second gives usage guidance. Every word earns its place, with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (one parameter, no output schema), the description is nearly complete. It explains the tool's function and when to use it. It could mention the return format, but the lack is not critical for such a straightforward inspection tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description does not directly explain the parameter, but the parameter name 'cif_path' and title 'Cif Path' make its meaning clear. The description adds no extra semantics beyond mentioning 'CIF file', so it meets the baseline but does not compensate further.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool inspects a CIF file and enumerates specific attributes (formula, cell parameters, charge column status, minimum interatomic distance) and flags pitfalls. This is a specific verb+resource that distinguishes it from sibling tools, which focus on simulations, force fields, and output parsing.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use it: 'Use before launching a simulation against an unfamiliar CIF.' This provides clear context. It does not mention when not to use it or alternatives, but no sibling tool serves the same inspection role, so exclusions are unnecessary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_available_forcefieldsA
List all built-in force fields with their molecule targets, references, and applicability notes. Use this to decide which force field to use.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the transparency burden. It implies a non-destructive read operation via 'List all' and reveals the output fields, but it does not explicitly state that there are no side effects or dependencies. For a straightforward listing tool, this is acceptable but not overly detailed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences, front-loaded with the core action and resource. Every phrase adds meaningful information: the content fields, the purpose ('decide which force field to use'), and no filler. Excellent efficiency.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has no parameters, no output schema, and is a simple listing operation, the description is adequately complete. It covers what the tool returns and why to use it. Including a note about return format would be a minor enhancement, but the description satisfies the core needs.
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 no parameters, so there is no need for parameter-level explanation. The description adds value by detailing what information is returned, which helps the agent know what to expect. Baseline for zero parameters is 4, and the description does not detract from it.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and clearly identifies the resource ('built-in force fields'), along with the kind of information returned ('molecule targets, references, and applicability notes'). This distinguishes it from sibling tools like recommend_forcefield, which actually recommends rather than lists.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: 'Use this to decide which force field to use.' This gives clear context, though it does not mention alternatives or exclusions. For a simple listing tool, this is adequate and useful.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_available_moleculesA
List all built-in molecule definitions with metadata. Molecules not listed here require manual .def file construction.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It indicates read-only behavior ('List') and adds the scope that it lists only built-in definitions, but it does not describe return format, pagination, or any potential limitations beyond the .def note. This is adequate but not rich behavioral disclosure.
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. The first sentence immediately states the core purpose; the second adds critical operational context. Every word is purposeful with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, parameter-less listing tool without an output schema, the description covers the core behavior and a key limitation (manual .def for missing molecules). It could mention output format, but that's not necessary given the simplicity. The description provides sufficient context for selection and 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?
The tool has zero parameters, so the baseline is 4. There is nothing to explain about parameter semantics, and the schema already documents no properties. The description doesn't need to compensate.
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 'List all built-in molecule definitions with metadata,' which clearly specifies the verb (list) and resource (built-in molecule definitions). The addition of 'with metadata' provides specific scope, and it distinguishes from siblings like list_available_forcefields and get_molecule_definition.
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, 'Molecules not listed here require manual .def file construction,' implies a use case: check if a molecule is built-in and if not, you will need to construct a .def file. While it doesn't explicitly name alternatives, it provides decision-relevant context about when this tool is needed versus manual construction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_simulation_typesA
List all RASPA2 simulation types with descriptions and typical use cases. Call this first to decide which simulation type fits the user's goal.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, but the description fully describes the tool's behavior: it lists all simulation types with relevant context. As a read-only listing operation, there are no side effects or hidden behaviors to disclose beyond what is stated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and resource, and includes a usage directive. No wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only list tool with no output schema, the description fully covers what the tool does, what it returns, and when to call it. It is contextually 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?
The tool has zero parameters, so the description's job is simply to explain what the listing contains. The description does this by mentioning descriptions and typical use cases, satisfying the baseline for parameter 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 uses the specific verb 'List' with the resource 'all RASPA2 simulation types' and notes the output includes descriptions and typical use cases. This clearly differentiates it from siblings like get_simulation_template or list_available_forcefields.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly instructs to 'Call this first' to decide which simulation type fits the user's goal, providing clear context for when to use it in the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse_density_gridA
Parse RASPA2 3D density grid files and extract a 2D slice (3-4).
RASPA2 writes .grid files when the simulation.input contains: WriteDensityProfile3DVTKGrid yes DensityAveragingTypeVTK number_of_molecules
The 3D grid is stored as Nx×Ny×Nz float values (row-major). This function returns the full grid metadata and ONE 2D slice. Pass the returned 'slice_data' field to plot_density_slice() to save a PNG.
KNOWN LIMITATION: This tool returns a 2D cross-section only, NOT a full 3D isosurface or volumetric render. For true 3D visualization (isosurfaces, volume rendering), export the raw 'slice_data' and use external tools such as VESTA, py3Dmol, or ParaView with the original .grid/.vtk file. To explore different planes, call this tool multiple times with different slice_axis ('x','y','z') and slice_index values.
KNOWN LIMITATION: The .grid ASCII format written by RASPA2 has minor variations across versions (header line count differs). If parsing fails (status='no_grid_files' or 'warning' in dataset), verify that WriteDensityProfile3DVTKGrid is set and check the raw file header.
Args: output_dir: Path to RASPA2 Output (or parent) directory. molecule: Optional filter on molecule name (e.g. "CO2"). slice_axis: Axis perpendicular to the slice: 'x'/'a', 'y'/'b', 'z'/'c'. slice_index: Grid-plane index along slice_axis; -1 = midpoint.
| Name | Required | Description | Default |
|---|---|---|---|
| molecule | No | ||
| output_dir | Yes | ||
| slice_axis | No | z | |
| slice_index | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses known limitations (2D-only, not 3D), version-specific format variations, and failure status values ('status='no_grid_files' or 'warning''). It also states that it returns 'full grid metadata and ONE 2D slice.' While it doesn't explicitly state side effects (e.g., file system writes), the read-only nature is implied by its parse-and-return function. This is more than minimal disclosure, though not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with paragraphs and an Args list, but it runs a bit long due to two 'KNOWN LIMITATION' sections. However, every sentence carries useful information (format prerequisites, return data, version caveats, visualization alternatives). It is front-loaded with the core purpose and then provides supporting details. Slightly verbose but not bloated.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity (file parsing, version variations, multiple parameters, no output schema), the description is quite complete. It covers RASPA2 prerequisites, return values (metadata and slice_data), how to visualize, failure modes, and parameter semantics. The only gap is the exact shape/type of the returned slice_data, but this is partially mitigated by the reference to plot_density_slice(). Overall, it provides sufficient context for safe selection and 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 coverage is 0%, so the description compensates excellently with an Args section that explains each parameter: output_dir (path), molecule (optional filter), slice_axis (with 'x'/'a' aliases), and slice_index (with -1 as midpoint). This adds practical meaning beyond the schema titles and defaults, giving the agent the exact semantics needed to select and pass values.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Parse RASPA2 3D density grid files and extract a 2D slice (3-4).' It also distinguishes from sibling tools by explicitly noting it returns a 2D slice and referencing plot_density_slice() for visualization, and further clarifies that it does NOT provide full 3D isosurfaces. This makes the tool's purpose specific and non-overlapping.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance on when to use this tool and how to proceed: 'Pass the returned slice_data field to plot_density_slice() to save a PNG', 'For true 3D visualization... use external tools such as VESTA, py3Dmol, or ParaView', and 'To explore different planes, call this tool multiple times.' It also specifies the RASPA2 configuration needed to generate the .grid files, which is a clear prerequisite and alternative context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse_msd_outputA
Parse RASPA2 MSD files and compute self- or collective-diffusion coefficients (2-1/3-1/3-2).
Requires a completed NVT-MD or NPT-MD simulation with 'ComputeMSD yes' set. RASPA2 writes MSDSelf_.dat (self-diffusion) and MSDCollective_.dat.
The Einstein relation D = MSD(t) / 6t is fitted to the linear regime (latter 50% of trajectory). Result is given in A²/ps and m²/s.
Typical self-diffusivities in MOFs:
Fast gas (H2, He): 10⁻⁸ – 10⁻⁷ m²/s
CO2, CH4 in wide pores: 10⁻⁹ – 10⁻⁸ m²/s
Slow diffusers (large MOF pores, tight channels): < 10⁻¹¹ m²/s
Args: output_dir: Path to RASPA2 Output directory. molecule: Optional filter by molecule name (e.g. "CO2"). diffusion_type: "self" (MSDSelf) or "collective" (MSDCollective).
| Name | Required | Description | Default |
|---|---|---|---|
| molecule | No | ||
| output_dir | Yes | ||
| diffusion_type | No | self |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. It discloses the calculation method (Einstein relation, linear regime, latter 50% of trajectory), units (A²/ps and m²/s), and typical expected values. It does not mention error handling or missing files, but provides substantial behavioral context.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is somewhat long but well-structured, starting with purpose, then prerequisites, method, expected output, and args. Every sentence adds value; typical diffusivity ranges are useful for sanity checks. It is appropriately sized but could be slightly trimmed without losing key information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description must explain return values. It states 'Result is given in A²/ps and m²/s' and mentions diffusion coefficients, which is sufficient. However, it does not describe the exact return structure (e.g., dictionary, list) or whether it returns values for all molecules or only filtered ones, leaving some ambiguity.
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 0%, and the description compensates fully with an 'Args' section that explains output_dir, molecule, and diffusion_type. It clarifies the meaning of 'self' and 'collective' and gives an example molecule filter ('CO2'). This goes beyond the minimal schema information.
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 begins with a specific verb and resource: 'Parse RASPA2 MSD files and compute self- or collective-diffusion coefficients'. It clearly identifies the tool's function, distinguishes it from generic parse tools like parse_raspa_output, and specifies the types of diffusion coefficients.
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 states prerequisites: 'Requires a completed NVT-MD or NPT-MD simulation with ComputeMSD yes set.' It also explains the file naming conventions (MSDSelf_<mol>.dat and MSDCollective_<mol>.dat). However, it does not explicitly mention when not to use this tool or name alternative tools, but the context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse_raspa_outputA
Parse RASPA2 output files and return structured results as JSON.
Extracts: loading (mol/kg, mg/g, cm³STP/g), Henry coefficients, void fraction, energies (including Qst and mu_ex), and builds an isotherm table if multiple pressure points are detected.
Args: output_dir: Path to the Output directory produced by RASPA2, typically '/Output/System_0/'.
| Name | Required | Description | Default |
|---|---|---|---|
| output_dir | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It explains that it returns structured JSON, lists the extracted data, and notes a conditional behavior ('builds an isotherm table if multiple pressure points are detected'). It does not explicitly state that the tool is read-only, but this is strongly implied by 'Parse', and the absence of side-effect warnings is acceptable for a parser.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and efficient: it opens with a one-sentence summary, then uses a bullet-like list for extracted data, and a clear Args block for the parameter. Every sentence adds value, with no fluff or redundancy. It is appropriately sized for a tool with a single parameter.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple tool with one parameter and no output schema or annotations, the description is quite complete: it states the purpose, the exact data extracted, the return format (JSON), and the parameter semantics. It could have added a bit more detail about expected directory structure or error behavior, but the provided information is sufficient for an agent to select and invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has only one parameter (output_dir) with no description, and the schema description coverage is 0%. The description compensates fully by providing a dedicated Args section that explains the parameter's meaning ('Path to the Output directory produced by RASPA2') and gives a concrete example path, making the parameter's semantics clear beyond the raw schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a specific verb 'Parse' and a clear resource 'RASPA2 output files', and specifies that it returns structured JSON. It goes on to list the exact extracted quantities (loading, Henry coefficients, void fraction, energies, isotherm table), which clearly differentiates it from sibling parse tools like parse_rdf_output, parse_msd_output, parse_ti_output, and parse_density_grid.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly indicates this tool is for parsing RASPA2 output directories, and the Args section specifies the typical path ('<workdir>/Output/System_0/'). It doesn't explicitly mention when not to use it or name alternatives, but the specificity of 'RASPA2 output files' makes the intended use case unambiguous, and the sibling list includes other parse tools for different data types.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse_rdf_outputA
Parse RASPA2 radial distribution function (RDF) output files (3-3).
RASPA2 writes RDF data to RDF__.dat files when 'ComputeRDF yes' is set in simulation.input (requires NVT-MC or NVT-MD simulation).
Returns r(Å) and g(r) arrays per pair, plus first-peak position — useful for identifying preferred adsorption sites and coordination shells.
component_a / component_b: optional name filters (e.g. "CO2", "framework"). Leave empty to return all RDF datasets in the output directory.
Args: output_dir: Path to RASPA2 Output directory. component_a: Optional filter: only return pairs containing this name. component_b: Optional filter: only return pairs containing this name.
| Name | Required | Description | Default |
|---|---|---|---|
| output_dir | Yes | ||
| component_a | No | ||
| component_b | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses return values (r(Å), g(r) arrays, first-peak position) and the source file naming convention. It does not explicitly state read-only behavior or failure modes, but 'parse' strongly implies non-modifying behavior. Overall, it gives solid insight into what 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 description is detailed but not bloated. The first sentence gives the purpose, followed by useful context on file generation and return values, then structured parameter explanations. Every sentence adds value, though it could be slightly more compact without losing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a parser with no output schema, the description covers the essential context: what files are parsed, under what simulation conditions they are generated, what data is returned, and how filters work. It lacks an explicit example of the returned data structure, but the information provided is sufficient for an agent to invoke the tool 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?
The input schema has 0% description coverage, so the description must compensate. It does so thoroughly with an 'Args' section explaining output_dir as the path to the RASPA2 Output directory and component_a/component_b as optional name filters, including examples and the behavior when left empty.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'Parse RASPA2 radial distribution function (RDF) output files' with a specific verb and resource. It clearly distinguishes from sibling tools like parse_raspa_output, parse_msd_output, and parse_ti_output by focusing on RDF 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 description provides clear context on when RASPA2 produces RDF files (ComputeRDF yes in NVT-MC or NVT-MD) and how to use optional filters. It does not explicitly compare to alternatives, but the context strongly implies when this tool is appropriate versus general parse_raspa_output.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse_ti_outputA
Parse RASPA2 Thermodynamic Integration (TI) output and compute ΔA (1-8).
Expects one completed RASPA2 simulation per lambda value (0.0 → 1.0), each in its own subdirectory. The subdirectory name should contain the lambda value (e.g. 'lambda_0.3/', '0.3/', etc.).
RASPA2 must be run with Lambda and LambdaDefinition set in simulation.input. Each output file must contain a line matching: Average <dU/dlambda>: X.XXXXX +/- Y.YYYYY [K]
KNOWN LIMITATION: The exact format of this line varies between RASPA2 versions and build options. If status='no_ti_data' is returned, check:
That the simulation used Lambda / LambdaDefinition keywords.
That the RASPA2 version writes 'Average <dU/dlambda>'.
That subdirectory names contain the numeric lambda value. In that case, extract dU/dlambda values manually from the output files and call numpy.trapezoid() directly.
The function integrates ⟨∂U/∂λ⟩ over λ using the trapezoidal rule: ΔA = ∫₀¹ ⟨∂U/∂λ⟩ dλ [K] → ×R → [kJ/mol]
Fewer lambda points = less accuracy:
3 points (0, 0.5, 1): rough estimate
5 points: adequate for most cases
11 points (0.0, 0.1, ..., 1.0): high accuracy
Args: output_dir: Root directory containing per-lambda subdirectories.
| Name | Required | Description | Default |
|---|---|---|---|
| output_dir | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of disclosing behavior. It details the expected input directory structure, the need for Lambda/LambdaDefinition settings, the exact line format that may vary by RASPA2 version, the integration method (trapezoidal rule), unit conversion, and accuracy implications of lambda point count. It is exceptionally transparent about limitations and provides troubleshooting steps—far beyond what annotations could convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Although the description is longer than average, it is efficiently structured with clear sections (purpose, expectations, known limitation, method, accuracy, args). Every sentence adds value: the limitation section prevents misinterpretation, the accuracy guide informs lambda sampling choices, and the Args section ties back to the schema. No filler is present.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers input requirements, method, limitations, and fallback actions, giving a near-complete picture. It mentions the return status 'no_ti_data' but does not explicitly describe the full return object (e.g., deltaA value, status, units). Given the absence of an output schema, a slightly more explicit return contract would make it fully complete. Nonetheless, it is largely adequate for an agent to use and interpret.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides only the parameter name and type (output_dir: string), with zero description coverage. The description compensates fully by explaining 'Root directory containing per-lambda subdirectories' and giving examples of acceptable subdirectory names like 'lambda_0.3/' and '0.3/'. This gives the agent everything it needs to populate the parameter correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb and resource: 'Parse RASPA2 Thermodynamic Integration (TI) output and compute ΔA'. This clearly distinguishes it from sibling tools like parse_raspa_output or parse_rdf_output by naming the TI-specific input and the free energy output. The purpose is unambiguous and immediately understandable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use this tool: it expects completed RASPA2 simulations per lambda value, specific subdirectory naming, and required simulation keywords. It also gives a fallback path (manual extraction and numpy.trapezoid) when the tool returns no_ti_data. However, it does not explicitly mention alternatives among sibling tools, so it stops short of a full when-to-use vs. when-not-to-use guide.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plot_density_sliceA
Render a 2D density slice from parse_density_grid() as a heatmap PNG (3-4).
slice_data is the 'slice_data' field from parse_density_grid() — a 2D list of float density values.
cell_lengths: optional [La, Lb] in Å for axis tick labels. axes_labels: optional [x_label, y_label], defaults to ["a (Å)", "b (Å)"]. colormap: matplotlib colormap name; 'hot', 'viridis', 'Blues' all work well.
| Name | Required | Description | Default |
|---|---|---|---|
| title | No | Density Slice | |
| colormap | No | hot | |
| molecule | No | ||
| slice_data | Yes | ||
| axes_labels | No | ||
| output_path | Yes | ||
| cell_lengths | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full transparency burden. It explains the input format, optional axis labels/units, and colormap defaults, but omits behavior around output_path (e.g., overwriting), the meaning of the cryptic '(3-4)', or what happens with title/molecule parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the main purpose, followed by brief parameter clarifications. The '(3-4)' is unclear and the text could be tightened, but there is no wasted verbiage overall.
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 plotting tool with 7 parameters, no annotations, and no output schema, the description covers the core workflow and key parameters but misses important details like how output_path is used and what the return value is. It is adequate but not fully self-contained.
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 0%, but the description adds useful semantics for slice_data, cell_lengths, axes_labels, and colormap. However, it does not explain output_path (required), title, or molecule, leaving meaningful gaps for an agent to infer.
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 action ('Render a 2D density slice'), a specific resource ('from parse_density_grid()'), and the output format ('heatmap PNG'). It clearly distinguishes itself from the sibling parse_density_grid and other plotting tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly references parse_density_grid() as the source of slice_data, making the tool's prerequisite clear. It does not name alternative tools or when not to use it, but the context is strong and the intended workflow is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plot_isothermA
Generate a single-MOF adsorption isotherm plot (PNG).
isotherm_data is a list of dicts, each with at least:
a pressure field ("pressure_Pa", "pressure_bar", or "pressure_kPa")
a loading field (default key: "loading_mol_kg")
Typical source: the "isotherm" list returned by parse_raspa_output() when multiple pressure-point simulations are run and their outputs placed in sub-directories named by pressure value.
pressure_unit: unit of pressure values in isotherm_data (Pa, bar, kPa). loading_key: key name for the loading column (e.g. "loading_mol_kg", "loading_mg_g", "loading_cm3_STP_g"). output_path: absolute path where the PNG file will be saved.
Returns: {"status": "ok", "path": ..., "n_points": ...} or {"status": "error", "message": ...}
| Name | Required | Description | Default |
|---|---|---|---|
| molecule | No | ||
| framework | No | ||
| loading_key | No | loading_mol_kg | |
| output_path | Yes | ||
| isotherm_data | Yes | ||
| pressure_unit | No | Pa | |
| temperature_K | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It explains the input format (list of dicts), required fields, units, and return values (success/error), including the output path and point count. It does not mention potential error conditions or edge cases, but provides enough for safe invocation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a purpose sentence, bullet-pointed parameter explanations, and a return format note. It is appropriately sized for the tool's complexity—not too verbose, but every detail is useful. Could be slightly tighter, but front-loading is effective.
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 7-parameter tool with no annotations or output schema, the description covers the core inputs and output format comprehensively. It explains the data structure and return schema, and gives a typical usage scenario. Missing documentation of the three optional parameters is acceptable given their simplicity and default values.
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 0%, so the description must compensate. It thoroughly explains isotherm_data (list of dicts with pressure/loading fields), pressure_unit (Pa/bar/kPa), loading_key (examples), and output_path (absolute path). It omits molecule, framework, and temperature_K, but those are fairly self-explanatory and have defaults, so the added value is high.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Generate a single-MOF adsorption isotherm plot (PNG)', which is a specific verb+resource that clearly distinguishes it from the sibling tool plot_isotherm_comparison. The rest of the description reinforces this scope, making the tool's purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context by stating the typical source ('the isotherm list returned by parse_raspa_output()') and the single-MOF scope, which implies when to use it versus a comparison tool. However, it does not explicitly name plot_isotherm_comparison as the alternative for multi-MOF plots, so exclusion is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plot_isotherm_comparisonA
Generate a multi-MOF comparison isotherm plot (PNG) — all MOFs on one figure.
datasets is a list of dicts, each representing one MOF: { "label": "MIL-101(Cr)", # legend label "isotherm_data": [{...}, {...}, ...] # same format as plot_isotherm() }
Designed for the final "top-N candidates" comparison step: pass in the isotherm_data from each MOF's parse_raspa_output() call together with a descriptive label, and receive a single publication-ready comparison figure.
pressure_unit / loading_key: same semantics as plot_isotherm(). output_path: absolute path where the PNG will be saved.
Returns: {"status": "ok", "path": ..., "n_series": ...} or {"status": "error", "message": ...}
| Name | Required | Description | Default |
|---|---|---|---|
| datasets | Yes | ||
| molecule | No | ||
| loading_key | No | loading_mol_kg | |
| output_path | Yes | ||
| pressure_unit | No | Pa | |
| temperature_K | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description bears full responsibility for transparency. It discloses the output format (PNG), the return structure including success and error cases, and that it writes to an absolute path. It does not mention file overwrite behavior or permission requirements, but for a plotting tool the disclosure is reasonable.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured and concise: a one-sentence summary, a code block for the complex parameter, and terse notes for the remaining parameters and return value. Every sentence contributes meaningful information without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool has 6 parameters and no output schema, the description provides the essential invocation details, return format, and workflow context. It covers the most complex parameter (datasets) and returns status/path/n_series. It leaves out explanation of two optional parameters, but this is acceptable for a plotting utility.
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 0% schema description coverage, the description compensates by thoroughly explaining the 'datasets' parameter with a concrete example, and notes that pressure_unit/loading_key follow the same semantics as plot_isotherm(). However, it omits explanation of the molecule and temperature_K parameters, and only gives a minimal description for output_path as 'absolute path'.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description explicitly states 'multi-MOF comparison isotherm plot (PNG)' and 'all MOFs on one figure', clearly identifying the tool's function. It also distinguishes it from the sibling plot_isotherm by emphasizing multi-MOF comparison, and mentions its role in the 'top-N candidates' 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?
The description provides clear usage context: 'Designed for the final top-N candidates comparison step' and instructs to pass isotherm_data from parse_raspa_output(). However, it does not explicitly contrast with plot_isotherm (single-MOF) or state when not to use this tool, though the multi-MOF vs single-MOF distinction is implied.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
preflight_workspaceA
Validate a workspace directory before launching simulate.
Checks:
simulation.input exists and passes validate_simulation_input
the CIF named by FrameworkName exists at frameworks//.cif
force_field.def exists and is in overwrite-rules format (NOT mixing)
force_field_mixing_rules.def exists and lists atom types
pseudo_atoms.def covers every atom type used by the mixing-rules file
each Component in simulation.input has a matching molecule .def
Returns {"ok": bool, "errors": [...], "warnings": [...], "findings": {...}}.
| Name | Required | Description | Default |
|---|---|---|---|
| work_dir | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description carries the full burden of behavioral disclosure. It lists specific validation checks (e.g., CIF existence, force field format) and explicitly returns `ok`, `errors`, `warnings`, and `findings`. While it does not mention side effects, the validation nature implies read-only 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?
The description is well-structured with a bulleted list of checks and a clear return format. It front-loads the primary purpose and avoids verbose or redundant 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?
For a single-parameter validation tool, the description covers the complete behavior: checks performed and the response shape. Although no output schema exists, the explicit return structure and enumerated checks give the agent sufficient context to use the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides only `work_dir` with no description, and the description does not directly define this parameter's format or constraints. However, the first line clearly implies `work_dir` is the workspace directory to validate, adding meaning beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: 'Validate a workspace directory before launching simulate.' It uses a specific verb (Validate) and resource (workspace directory), and distinguishes itself from the sibling validate_simulation_input by covering the entire workspace rather than a single input.
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 specifies the tool is to be used 'before launching simulate,' providing clear context for when to invoke it. It does not explicitly mention alternatives or exclusions, but the broader validation scope is implicitly contrasted with the narrower validate_simulation_input.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recommend_forcefieldA
Given a molecule name (common name, formula, or IUPAC), recommend the most appropriate built-in force field and provide literature guidance.
For molecules NOT in the built-in library, returns structured guidance on how to find parameters from literature using Semantic Scholar.
Args: molecule: e.g. "CO2", "methane", "PH3", "SO2", "water"
| Name | Required | Description | Default |
|---|---|---|---|
| molecule | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does add useful context: the tool uses Semantic Scholar for literature guidance when a molecule is not in the library, and it returns structured guidance in that case. However, it does not disclose whether the tool is read-only, whether it makes network calls that could be slow or rate-limited, or what happens on invalid input. This is acceptable for a recommendation tool but not fully transparent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and well-structured, with two sentences plus an example list. It front-loads the core purpose, then adds the edge-case behavior, then provides parameter examples. Every sentence earns its place without redundancy or fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the tool's core function and the fallback behavior, but it does not describe the return format or structure. Since there is no output schema, the agent is left guessing what the recommendation looks like (e.g., force field name, confidence, parameter set). It is adequate for invoking the tool but not for fully interpreting the response, so it falls short of being 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?
The input schema only specifies 'molecule' as a string with no description. The description compensates by explicitly stating the accepted forms (common name, formula, or IUPAC) and providing concrete examples like 'CO2', 'methane', 'PH3', 'SO2', 'water'. This gives the agent clear guidance on how to populate the parameter, far exceeding the schema's minimal information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: given a molecule name, it recommends the most appropriate built-in force field and provides literature guidance. This distinguishes it from sibling tools like list_available_forcefields (which lists all force fields) and get_forcefield_files (which retrieves files). The verb 'recommend' and resource 'built-in force field' are specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: when you have a molecule name and need force field recommendation. It also differentiates behavior for molecules not in the built-in library, offering a fallback pathway. However, it does not explicitly state when not to use this tool or mention alternatives (e.g., use list_available_forcefields to see all options), so there is no explicit exclusion or comparison with siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
recommend_supercellA
Recommend an integer supercell (nx, ny, nz) such that each axis is at
least 2 × cutoff_A (the RASPA2 minimum-image rule). Also recommends
a ChargeMethod based on whether the CIF has non-zero charges.
| Name | Required | Description | Default |
|---|---|---|---|
| cif_path | Yes | ||
| cutoff_A | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses the calculation logic (axis length rule and charge-dependent method choice), which is useful. However, it does not mention potential side effects, error handling, or what happens if the CIF has no charges or invalid data, leaving the agent with incomplete behavioral understanding.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise and front-loaded with the main action. Two sentences convey the core purpose and additional logic without unnecessary words or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema and no returned value description. The description states what the tool recommends but not the structure of the output (e.g., a dictionary with supercell and charge_method). It also lacks edge-case behavior, making it incomplete for an agent to invoke and process results confidently.
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 0%, so the description must compensate. It does add semantic meaning to both parameters: 'cutoff_A' is tied to the minimum-image rule, and 'cif_path' is implied to be a CIF file used to detect charges. However, it does not explicitly describe the expected format of 'cif_path' or units of 'cutoff_A' beyond the variable name, so it only partially compensates.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's function: recommending an integer supercell (nx, ny, nz) with a specific rule (minimum-image 2×cutoff_A) and also recommending a ChargeMethod. It uses a specific verb ('recommend') and resources ('supercell', 'ChargeMethod'), and distinguishes it from sibling recommendation tools like 'recommend_forcefield'.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context for when to use the tool: when constructing a supercell for RASPA2 simulations with a minimum-image rule, and when determining a charge method based on CIF charges. However, it does not explicitly mention alternatives or exclusions, 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.
validate_simulation_inputA
Validate the content of a RASPA2 simulation.input file BEFORE running.
Returns errors (blocking — must fix) and warnings (advisory). Always call this after generating simulation.input and before running simulate.
Args: content: Full text content of the simulation.input file.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the transparency burden. It discloses that it returns blocking errors and advisory warnings, which is useful. However, it does not mention side effects (or lack thereof), return format, or behavior on invalid input, leaving some gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: two purpose sentences, one timing sentence, and a clear Args line. Every sentence adds value with no redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a validation tool with a single parameter and clear return semantics (errors/warnings), the description is sufficiently complete. It could elaborate on the specific error types or scope, but the core information needed by an agent is present.
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 only defines 'content' as a string. The description adds 'Full text content of the simulation.input file', clarifying that it expects the file's entire text, not a path. With 0% schema coverage, this is a meaningful contribution.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb 'validate' and names the exact resource ('RASPA2 simulation.input file'), clearly distinguishing it from sibling tools that parse output or generate files. The scope 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?
Explicitly states when to call ('always call this after generating simulation.input and before running simulate') and what it returns (errors vs warnings). Does not explicitly name alternatives, but the context is strong.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Every tool targets a distinct concern: simulation type templates, force field generation, molecule definitions, workspace setup, output parsing, and plotting are clearly separated. Even closely related tools like generate_force_field_def and generate_force_field_mixing_rules_def are explicitly differentiated in their descriptions.
All tool names follow a consistent snake_case verb_noun pattern (list_*, get_*, generate_*, parse_*, plot_*, etc.). There are no camelCase or mixed conventions, making the API predictable and easy to navigate.
With 28 tools, the surface is oversized for the domain. While RASPA2 simulations involve many steps, several tools could be consolidated (e.g., plot_isotherm and plot_isotherm_comparison, or the various generate_*_def tools). The count exceeds the 25-tool threshold that indicates a bloated interface.
The toolset covers setup, input file generation, validation, and output parsing, but critically lacks any tool to actually execute the RASPA2 simulation. The workflow references running 'simulate' externally, which is a major gap for an MCP server dedicated to RASPA2. Additionally, there are no tools for restarting, monitoring, or canceling simulations.
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Stateless agentic tools over MCP: concept extraction, long-context, knowledge graph, planning.
65+ AI tools as MCP: research, write, code, scrape, translate, RAG, agent memory, workflows
MCP server exposing the Backtest360 engine API as tools for AI agents.
OCR, transcription, file extraction, and image generation for AI agents via MCP.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceAn MCP server for deconstructing and analyzing Metal-Organic Framework (MOF) structures, including SBU and ligand identification, guest removal, and COF stacking analysis. It enables AI agents to perform automated chemical informatics and structural characterization on crystal structures via CIF files.1
- AlicenseNot gradedqualityDmaintenanceEnables AI assistants to generate, validate, and optimize PLUMED input files for molecular dynamics simulations using a set of MCP tools.GPL 3.0
- AlicenseNot gradedqualityCmaintenanceMCP-native scientific skills for reproducible computational biology and AI-driven drug-discovery workflows. It combines deterministic scientific tools with an MCP server to give AI agents real computational capabilities.Apache 2.0
- AlicenseNot gradedqualityDmaintenanceAn MCP server for chemistry-focused tools, enabling LLM agents to perform molecule parsing, format conversion, property lookup, and other chemistry operations with explainable responses.Apache 2.0
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/lichman0405/raspa-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server