fairchem-mcp
The fairchem-mcp server enables LLM agents to interactively drive atomistic simulations using FAIRChem/ASE — with live monitoring and mid-flight steering — rather than batch script execution.
Calculator / Model Management
Load FAIRChem UMA/eSEN models (resident in-memory), attach EMT (fast, no GPU needed), or attach LAMMPS for classical force engines. Models stay loaded across calls.
Structure Building & Loading
Declaratively build bulk crystals, molecules, or surfaces (
build_structure), or load from any ASE-readable file — CIF, XYZ, POSCAR, trajectory, etc. (load_structure).
Simulation Launching (all run in the background)
Relaxation: Geometry optimization (FIRE, LBFGS, BFGS), optional cell relaxation
MD: NVT Langevin or NVE with configurable temperature and timestep
NEB: Nudged Elastic Band for reaction barriers; configurable images, interpolation, climbing image
Transition state searches: Dimer method, Sella (RFO + approximate Hessian), POUNCE (eigenvector following)
Phonons: Finite-displacement; returns frequencies, imaginary mode count, stability flag
EOS scan: Cell strain → fit V0, E0, bulk modulus
Elastic tensor: Stress-vs-strain C_ij, VRH moduli, Born stability criteria
Convex hull: Formation energies and phase stability analysis
Minima search: Multiple distinct local minima via deflation/flooding/basinhopping with deduplication by energy and RMSD/fingerprint
Live Monitoring
get_status— current step, energy, max force, and trend verdict (decreasing/plateaued/stuck/diverging)get_trajectory— recent energy/force history (last N snapshots)get_results— final outputs (NEB barriers, phonon frequencies, EOS fit, elastic tensor, distinct minima, etc.)
Mid-Flight Steering
steersupports:pause/resume/abort,set_fmax,switch_optimizer(while preserving positions),set_temperature(MD),set_climb(NEB climbing image)
Code Introspection & Escape Hatch
introspect— inspect signatures and docstrings of installed APIs or live session objectsexecute— run arbitrary Python in the shared persistent session namespaceinspect_expr— evaluate a Python expression and return its repr
Only one job runs at a time, serializing GPU/model access.
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., "@fairchem-mcpRun relaxation on Cu fcc with EMT and show status"
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.
fairchem-mcp
An agent-steerable MCP server for FAIRChem and ASE simulations.
Most LLM-driven simulation today is batch: the agent writes a script, runs it,
waits, and reads the output. fairchem-mcp makes it interactive. The model is
loaded once and kept resident; relaxations and MD run in the background; and the
agent can watch a simulation as it runs and steer it mid-flight — switch the
optimizer when it stalls, tighten fmax, change temperature, pause, or abort.
Why
Resident model. Load a UMA/eSEN model once; reuse it across every call. No reloading the model (seconds–minutes) on each run.
Live monitoring.
get_statusreturns step, energy, max force, and atrendverdict (decreasing/plateaued/stuck/diverging) so the agent can decide whether to intervene.Mid-flight steering.
steercanpause/resume/abort,set_fmax,switch_optimizer, orset_temperatureon a running job. Switching optimizer carries the atomic positions over — it just rebuilds the driver.Hybrid namespace. High-level tools (
start_relaxation, …) and theexecute/inspect_exprescape hatch share one Python namespace, so the agent can drop to raw Python on the very same liveAtoms.Code awareness.
introspectreads the installed API (real signatures and docstrings) and live objects viajedi— not possibly-stale docs.
Related MCP server: MOF Tools MCP Server
Install
pip install -e . # core: mcp + ase + jedi + numpy (works with EMT)
pip install -e ".[fairchem]" # add FAIRChem (torch + models) for UMA/eSEN
pip install -e ".[lammps]" # add LAMMPS as a classical force engine
pip install -e ".[saddles]" # add Sella + POUNCE for transition-state searchesASE, numpy, jedi and mcp are core dependencies (installed automatically) — the server is fully usable out of the box with the built-in EMT calculator.
FAIRChem (optional)
pip install -e ".[fairchem]" pulls in fairchem-core (PyTorch + models). To
actually load a UMA model you also need:
a Hugging Face account with approved access to the
facebook/UMAmodel repository, andhuggingface-cli login(orHF_TOKEN) set;PyTorch for your platform (CUDA build for GPU; CPU works but is slower).
Everything except load_model works with a plain ASE calculator (attach_emt),
so you can develop and test without a GPU or model.
LAMMPS (optional)
pip install -e ".[lammps]" installs the lammps Python package. LAMMPS is used
as a force engine (classical potentials) while ASE drives the dynamics, so
attach_lammps works with every steerable job (MD, relaxation, NEB, phonons,
EOS, minima search).
macOS note (Homebrew MPICH): the PyPI lammps wheel links
@rpath/libmpi.12.dylib and libpmpi.12.dylib, which the dynamic loader can't
find by default. If you have Homebrew's mpich (brew install mpich),
attach_lammps auto-symlinks those libs into the lammps package directory
on first use. If that can't be applied (read-only install, non-Homebrew MPI),
either symlink them yourself or export before launching the server:
export DYLD_FALLBACK_LIBRARY_PATH=/opt/homebrew/lib:$DYLD_FALLBACK_LIBRARY_PATHVerify with: python -c "from lammps import lammps; lammps(cmdargs=['-log','none','-screen','none']).close(); print('ok')".
Transition-state searches (optional)
pip install -e ".[saddles]" adds two extra saddle-point backends:
sella (a rational-function ASE optimizer)
and pounce-solver (multistart
eigenvector following). The dimer method (start_saddle_search) is pure ASE
and needs neither. See examples/saddles/ for all three.
Register with Claude Code
Add to your MCP config (see examples/claude_mcp_config.json):
{
"mcpServers": {
"fairchem": { "command": "fairchem-mcp" }
}
}Tools
Tool | Purpose |
| List FAIRChem pretrained models |
| Load a UMA/eSEN model as a resident calculator |
| Attach a fast EMT calculator (no GPU/model) |
| Attach LAMMPS (classical potentials) as the force engine |
| Make/register an ASE structure |
| Launch a background relaxation / MD (returns a |
| Launch a steerable nudged-elastic-band (reaction barrier) |
| Transition state via the dimer method (Hessian-free) |
| Transition state via Sella (RFO + approximate Hessian) |
| Enumerate saddles by Morse index (POUNCE eigenvector following) |
| Launch a finite-displacement phonon calculation |
| Scan cell strain → fit equation of state (V0, E0, bulk modulus) |
| Stress-vs-strain → elastic tensor (C_ij), VRH moduli, Born stability |
| Formation energies + convex hull (phase stability, energy above hull) |
| Find multiple distinct relaxed geometries via deflation/flooding |
| Observe a running job |
| Final results: NEB barrier/energies, phonon frequencies & stability, distinct minima, EOS fit |
|
|
| Signatures/docstrings/members of installed code or live objects |
| Run/eval Python in the shared session namespace |
Resources: sim://models, sim://job/{id}/status, sim://job/{id}/trajectory.
Example flow
attach_emt() -> calc_1
build_structure({"kind":"bulk","name":"Cu","crystalstructure":"fcc",
"a":3.6,"repeat":[2,2,2],"rattle":0.2}) -> struct_1
start_relaxation("struct_1","calc_1",optimizer="FIRE",fmax=0.01) -> job_1
get_status("job_1") -> {status:"running", trend:{label:"stuck", ...}}
steer("job_1","switch_optimizer",optimizer="LBFGS")
get_status("job_1") -> {status:"converged", ...}
introspect("atoms", live=True) -> live object signature/docstringFinding multiple relaxed geometries
start_minima_search finds several distinct local minima of the PES — useful
for surface adsorption sites, cluster isomers, or conformers. It relaxes
repeatedly from the starting structure on a PES biased to repel the minima
already found, then polishes each escape on the true PES:
kernel="flooding"(default) adds Gaussian bumps (sigmaÅ,amplitudeeV);kernel="deflation"adds inverse-distance poles (eta,power). Both are best for fixed-frame problems (an adsorbate on a frozen slab, an anchored conformer).kernel="basinhopping"(random kick + relax + Metropolis accept) is the right tool for free clusters / nanoparticles, whose rigid-body rotation defeats a spatial bias. Pair it withcomparator="fingerprint"(see below).New minima are deduplicated by energy (
energy_tol) plus a structurecomparator:"rmsd"(raw coords, frame-dependent — fine for a fixed frame) or"fingerprint"(sorted pairwise distances; rotation/translation/permutation invariant — use for free clusters and molecules, or rotated copies get miscounted as distinct). Each accepted minimum is registered as its own structure.
This reuses the escape mechanism from POUNCE's find_minima (deflation /
flooding) but drives it with ASE's gradient optimizers — the right inner solver
for a PES — so each escape relaxation is a normal steerable job (watch the trend,
switch_optimizer, set_fmax, pause/abort). POUNCE's interior-point solver is
deliberately not used as the inner relaxer.
Examples
examples/catalysis/ has four end-to-end catalysis
workflows — adsorption energy, adsorption-site search, diffusion-barrier NEB, and
surface-stability phonons — each as a runnable script and an MCP tool-call
walkthrough. They run on EMT out of the box; set FAIRCHEM_MCP_EXAMPLE_MODEL for
UMA.
examples/saddles/ covers the three single-ended
transition-state routes — dimer, Sella, and POUNCE eigenvector following — on one
shared system so you can compare them.
examples/alloys/ builds up to alloy design: the elastic
stiffness tensor (start_elastic_scan), the formation-energy convex hull
(start_convex_hull), and a design loop that gates candidates on stability then
ranks the survivors by a mechanical property.
Safety
execute / inspect_expr run arbitrary Python in-process. This is a trusted
local developer tool — do not expose it to untrusted input or over a network.
Notes
Only one job runs at a time (serializes model/GPU access).
All optimizers/integrators use
logfile=None; the stdio transport reserves stdout for the MCP protocol.
Available Tools
17 toolsattach_emtA
Attach a fast EMT calculator (no GPU/model needed). Useful for quick tests on Cu/Ag/Au/Ni/Pd/Pt/Al/Pb and method development.
| 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 bears full responsibility. It mentions 'fast' and 'no GPU/model needed', which implies lightweight behavior, but does not disclose potential side effects, state changes, or prerequisites beyond the metals list.
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-loads the core action, and contains no unnecessary words. 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?
Given no parameters and no output schema, the description covers the tool's purpose and usage context adequately. It could mention that it attaches the calculator to a structure, but this is implicit from the sibling tool ecosystem.
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 no parameters, so the schema coverage is 100% trivially. Per the guidelines, a baseline of 4 is applied since the description does not need to add 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 clearly states the tool's verb ('Attach') and resource ('fast EMT calculator'), and specifies the supported metals (Cu/Ag/Au/Ni/Pd/Pt/Al/Pb), effectively distinguishing it from siblings like 'load_model' or 'start_md' which involve different actions.
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 context for when to use it ('quick tests', 'method development'), but lacks explicit guidance on when not to use it or alternatives among the sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_structureA
Build an ASE structure from a declarative spec and register it.
Examples: {"kind":"bulk","name":"Cu","crystalstructure":"fcc","a":3.6,"repeat":[2,2,2]} {"kind":"molecule","name":"H2O"} {"kind":"surface","name":"Pt","size":[2,2,4],"vacuum":10.0} Add "rattle": 0.1 to perturb positions (good for testing relaxation).
| Name | Required | Description | Default |
|---|---|---|---|
| spec | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It mentions that adding 'rattle' perturbs positions, giving some behavioral context. However, it does not disclose side effects (e.g., overwriting existing structures), authentication requirements, or rate limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is concise: one introductory sentence plus examples. No wasted words. Front-loaded with purpose. 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?
Given complexity (nested object spec, no output schema), description provides examples covering key kinds and optional rattle. It mentions 'register it' but does not explain return value or registration effect. Slightly incomplete, but mostly adequate.
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 0% description coverage, but description compensates with detailed examples showing valid spec structures (kind, name, crystalstructure, etc.). This adds substantial meaning beyond the empty object schema, guiding correct parameter usage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states 'Build an ASE structure from a declarative spec and register it', specifying verb, resource, and action. This distinguishes it from siblings like load_structure (load existing) and start_relaxation (run relaxation).
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?
Description provides examples for bulk, molecule, surface kinds, showing usage context. However, it does not explicitly state when to use this tool versus alternatives, nor specify when not to use it (e.g., if structure already exists).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
executeA
Execute Python in the persistent session namespace (escape hatch).
The namespace is shared with all tools: structures, calculators and jobs are bound by id (struct_1, calc_1, job_1) plus aliases (atoms, calc, job). Trusted local-dev use only. Captured stdout is returned.
| Name | Required | Description | Default |
|---|---|---|---|
| code | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Describes the shared namespace and stdout capture, but does not detail error handling, side effects on the namespace, or security implications beyond the trust warning. Without annotations, more behavioral context would be beneficial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three concise sentences that front-load the core purpose, follow with context, and end with a usage caution. 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?
Covers basic purpose, namespace sharing, and output, but given the tool's nature as an escape hatch, it leaves out important details such as how to reference existing objects, error recovery, and limitations. Adequate but not fully 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 description does not elaborate on the 'code' parameter beyond the overall context of executing Python. Since schema coverage is 0%, the description should provide details on format, restrictions, or examples, but it does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states that the tool executes Python code in a persistent session namespace, explicitly calling it an 'escape hatch' and contrasting with other tools. It specifies the resource and action without ambiguity.
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 a clear usage constraint ('Trusted local-dev use only'), which helps the agent decide when to invoke it. However, it does not explicitly list alternatives or when not to use, leaving some inference to the agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_resultsA
Return a job's final results, if any: NEB barrier/energies, or phonon gamma frequencies and stability. None until the job finishes.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses that results are final, may be empty if none, and are only available after job completion. Could mention mutability or side effects, but none expected.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence with list of result types is efficient and front-loaded. Minor improvement possible by separating examples into a bulleted list.
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?
Lists result types despite no output schema and gives timing condition. Missing failure behavior or clarification that no results means job might not have produced them. Adequate for a simple retrieval 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?
Single parameter 'job_id' has no schema description coverage. Description adds no extra meaning beyond the schema's title 'Job Id'. Baseline for 1 param with 0% coverage is acceptable but uninspired.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it returns final job results (NEB barrier/energies, phonon frequencies/stability) and uses specific verbs 'Return' and 'None until job finishes', distinguishing it from siblings like get_status or get_trajectory.
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?
Implicitly indicates usage after job completion via 'None until the job finishes', but does not explicitly state when not to use or compare to alternatives like get_status.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_statusA
Get a live snapshot of a job: status, step, energy, max_force, and a 'trend' verdict (decreasing / plateaued / stuck / diverging) so you can decide whether to intervene.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; description lists output fields (status, step, etc.) but does not disclose side effects, permissions, or whether it is read-only. The term 'snapshot' suggests immutability, but not confirmed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single sentence, 25 words, front-loaded with purpose and output list; 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 simple status tool with one parameter, the description covers what it returns (with fields) and purpose, but lacks detail on return format or possible values (e.g., trend verdicts).
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 description does not elaborate on the job_id parameter beyond its name. The meaning of job_id is implied but not explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states the tool gets a live snapshot of a job, listing specific fields (status, step, energy, max_force, trend) which distinguishes it from sibling tools like get_results or get_trajectory.
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?
Implies usage for decision-making ('decide whether to intervene'), but does not explicitly contrast with alternatives or state when not to use.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_trajectoryA
Return the recent energy/force history of a job (last_n snapshots).
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | ||
| last_n | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. It discloses the data returned and the 'last_n' scope but lacks details on prerequisites, side effects, or whether the job must be completed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Single, front-loaded sentence with no redundant words. All information is essential and efficiently presented.
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 two-parameter tool without output schema, the description covers purpose and one parameter partially, but omits return format, error conditions, and limits on 'last_n'. Adequate but not fully 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 description coverage is 0%. Description adds meaning to 'last_n' by linking it to snapshots, but 'job_id' remains unexplained. Baseline is low, and description 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?
Description specifies a clear verb 'Return' and resource 'recent energy/force history of a job' with scope 'last_n snapshots', distinguishing it from sibling tools like get_results or get_status.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not-to-use guidance, nor alternatives are mentioned. The context is implied by the name and description, but a definitive usage guideline is missing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_exprA
Evaluate an expression in the session namespace and return its repr.
e.g. 'atoms.get_potential_energy()' or 'np.linalg.norm(atoms.get_forces(),axis=1).max()'.
| Name | Required | Description | Default |
|---|---|---|---|
| expr | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided; the description does not disclose potential side effects of evaluating arbitrary expressions, nor does it mention security or session state modifications.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise: two sentences and an example line, with 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?
For a simple single-parameter tool, the description explains the purpose, parameter, and return value (repr). Lacks details on error handling but is adequate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'expr' has no schema description, but the tool description clarifies it is a Python expression evaluated in the session namespace, with concrete examples, adding significant meaning.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool evaluates an expression in the session namespace and returns its repr, with clear examples. This distinguishes it from sibling tools like 'execute' or simulation tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for quick expression evaluation but does not specify when to use this over 'execute' or other tools, nor when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
introspectA
Introspect installed code or live objects.
Static (live=False): dotted path, e.g. 'fairchem.core.calculate.ase_calculator.FAIRChemCalculator'. Live (live=True): an expression over the session namespace, e.g. 'atoms'. A trailing '.' (e.g. 'atoms.' or 'ase.build.') lists members/completions. Returns signature, docstring and members.
| Name | Required | Description | Default |
|---|---|---|---|
| target | Yes | ||
| live | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description explains the tool's read-only nature, return content (signature, docstring, members), and special trailing dot behavior. It omits error handling or performance notes, but is sufficiently transparent for a simple introspection tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single structured paragraph with examples, front-loading the core purpose. It efficiently conveys key details, though could be slightly condensed without losing clarity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no output schema, the description mentions return values (signature, docstring, members) and the trailing dot completion feature. It does not address error cases or overlap with 'inspect_expr', but is largely complete for the tool's complexity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema has 0% description coverage, so the description fully compensates by explaining both parameters: 'target' with examples of static paths and live expressions, and 'live' boolean clarifying its effect. This adds significant meaning 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 clearly states the tool introspects code or live objects and returns signature, docstring, and members, with distinct static/live modes and trailing dot behavior. However, it does not distinguish itself from the sibling 'inspect_expr', which likely has overlapping functionality.
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 context on when to use static vs live mode and mentions trailing dot for completions, but does not explicitly state when to use this tool over alternatives like 'inspect_expr' or give when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_modelsA
List FAIRChem pretrained models (UMA, eSEN, ...) if FAIRChem is installed.
| 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 only mentions an installation prerequisite and gives example model names. There is no disclosure of side effects, performance implications, or return format, which is minimal for behavioral 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 a single sentence that conveys the core action, resource, and a key prerequisite. Every word adds value, with no fluff or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given no parameters and no output schema, the description is fairly complete for a simple listing tool. However, it could be enhanced by noting whether the list includes all available models or only those accessible, but it is adequate.
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 no parameters, so the schema coverage is 100% trivially. Per guidelines, baseline score of 4 is appropriate as there is no need for additional 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 clearly states the verb 'List' and the resource 'FAIRChem pretrained models' with examples (UMA, eSEN). However, it does not explicitly differentiate from sibling tools like load_model, which is acceptable given the distinct action.
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 includes a prerequisite ('if FAIRChem is installed'), which guides usage. But it lacks explicit when-to-use or when-not-to-use guidance compared to alternatives, leaving the agent to infer context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_modelA
Load a FAIRChem model as an ASE calculator, kept resident in memory.
task is the prediction domain: omat (inorganic), omol (molecules), oc20 (catalysis), odac (MOFs), omc (molecular crystals). Returns a calculator_id to pass to start_relaxation/start_md.
| Name | Required | Description | Default |
|---|---|---|---|
| model | No | uma-s-1p1 | |
| task | No | omat | |
| device | No | auto |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It states the model is 'kept resident in memory,' which is a key behavioral detail. It also mentions the return type (calculator_id). No annotation contradiction exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no wasted words. Front-loaded with the core action, then adds parameter context and return value usage. Highly efficient.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Covers purpose, task options, memory residency, and return value linking to downstream tools. Missing explanation for model and device parameters, but given the tool's simplicity, it is fairly 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 description explains the 'task' parameter by listing valid domains, but does not explain 'model' or 'device' beyond defaults in the schema. Schema coverage is 0%, so the description partially compensates but leaves gaps.
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 ('Load') and resource ('FAIRChem model as an ASE calculator'). It distinguishes from sibling tools like list_models and start_relaxation by focusing on the loading step and noting the output is a calculator_id for simulation 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 tells users to pass the returned calculator_id to start_relaxation/start_md, but does not explicitly exclude alternative uses or mention when not to use this tool. It provides clear context for its role in the workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
load_structureB
Load a structure from any ASE-readable file (cif, xyz, traj, POSCAR, ...).
| Name | Required | Description | Default |
|---|---|---|---|
| path | Yes | ||
| index | No | -1 |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears the full burden of disclosing behavioral traits. It only mentions the file format support (ASE-readable) but does not disclose potential errors, file size limits, or whether partial loading is supported (e.g., via 'index').
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence that directly states the action and supported formats. No extraneous 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?
Given two parameters, no output schema, and no annotations, the description is too brief. It does not explain the 'index' parameter, return value, or error behavior, making it incomplete for an agent to use correctly in complex scenarios.
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 zero description coverage (0%), so the description must add meaning. It only mentions file types in the main description, but does not clarify the 'path' or 'index' parameters. The 'index' parameter (default '-1') is left unexplained—whether it selects a specific frame or uses last frame in a trajectory.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Load'), the resource ('a structure'), and the source ('from any ASE-readable file (cif, xyz, traj, POSCAR, ...)'). It distinguishes this tool from siblings like 'build_structure' (which constructs structures) and 'load_model' (which loads ML models).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage for loading structures from supported file formats, but does not explicitly specify when to use this tool over alternatives like 'build_structure' or 'load_model'. No exclusions or prerequisites are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_mdA
Start molecular dynamics (NVT Langevin or NVE) in the background.
step_delay (seconds) throttles steps so you can observe/react between them.
| Name | Required | Description | Default |
|---|---|---|---|
| structure_id | Yes | ||
| calculator_id | Yes | ||
| ensemble | No | NVT | |
| temperature_K | No | ||
| timestep_fs | No | ||
| steps | No | ||
| step_delay | 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 that the tool runs 'in the background' and that step_delay throttles steps, giving basic behavioral insight. However, it does not detail side effects, resource usage, blocking behavior, or what happens at the end of the run.
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 with two sentences, front-loading the core action and immediately providing key detail about step_delay. No redundant or unnecessary information 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?
Given the tool has 7 parameters and no output schema or annotations, the description is too brief. It does not explain how to monitor the simulation (e.g., using get_status or get_results), what the return value is, or constraints like units. Important context for a complex simulation tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning beyond the schema by explaining step_delay (throttling for observation) and implicitly listing possible ensemble values ('NVT Langevin or NVE'). With 0% schema coverage and 7 parameters, it adds value for two parameters but leaves the rest (structure_id, calculator_id, temperature_K, timestep_fs, steps) without additional context.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'start' and the resource 'molecular dynamics', specifying the ensemble types ('NVT Langevin or NVE') and that it runs in the background. This distinguishes it from sibling tools like start_minima_search or start_relaxation, which are different simulation types.
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 mentions step_delay to throttle steps for observation, providing some usage context, but lacks explicit guidance on when to use this tool versus alternatives (e.g., other start_* tools) or when to choose NVT vs NVE. It does not include exclusion criteria or prerequisites.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_minima_searchA
Search for multiple distinct relaxed geometries (local minima of the PES).
Repeatedly relaxes from the starting structure on a PES biased to repel the minima found so far, then polishes on the true PES. kernel is 'flooding' (Gaussian bumps; sigma in Å, amplitude in eV) or 'deflation' (inverse-distance poles). New minima are deduped by energy_tol (eV) + rmsd_tol (Å) and each is registered as a new structure. Poll get_status for n_found/target; get_results returns the distinct minima (structure_id + energy), sorted by energy. Steerable via steer abort/pause (and set_fmax/switch_optimizer mid-relaxation).
| Name | Required | Description | Default |
|---|---|---|---|
| structure_id | Yes | ||
| calculator_id | Yes | ||
| n_minima | No | ||
| kernel | No | flooding | |
| optimizer | No | FIRE | |
| fmax | No | ||
| steps | No | ||
| sigma | No | ||
| amplitude | No | ||
| energy_tol | No | ||
| rmsd_tol | No | ||
| patience | No | ||
| step_delay | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Despite lacking annotations, the description extensively discloses behavioral traits: biased PES, kernel types ('flooding'/'deflation'), deduplication logic, asynchronous polling, and steerability. This fully informs the agent of the tool's 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 a single paragraph of 5 substantive sentences, front-loading the purpose. It is concise with no wasted words, though it could be structured with bullet points for clarity.
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 (13 parameters, no output schema, no annotations), the description covers the algorithm, key parameters, and usage flow well. Minor gaps in parameter details prevent a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description adds meaning to several parameters (kernel, sigma, amplitude, energy_tol, rmsd_tol, fmax, optimizer) but omits details for many others (structure_id, calculator_id, steps, patience, step_delay). With 0% schema coverage, more complete parameter explanation would be beneficial.
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 'Search for multiple distinct relaxed geometries (local minima of the PES)', using a specific verb and resource that distinguishes it from sibling tools like start_relaxation (single relaxation) or start_md (dynamics).
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 the tool's function (multiple minima search, asynchronous polling) but does not explicitly state when to use it over alternatives like start_relaxation. However, the purpose is clear enough to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_nebA
Start a nudged elastic band (reaction barrier) between two relaxed endpoints, in the background. nimages is the number of intermediate images.
Steerable like a relaxation (pause/resume/abort/set_fmax/switch_optimizer) plus steer set_climb to enable the climbing image near convergence. When done, get_results returns the forward/reverse barrier and image energies.
| Name | Required | Description | Default |
|---|---|---|---|
| initial_id | Yes | ||
| final_id | Yes | ||
| calculator_id | Yes | ||
| nimages | No | ||
| optimizer | No | LBFGS | |
| fmax | No | ||
| climb | No | ||
| steps | No | ||
| interpolation | No | idpp | |
| step_delay | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully discloses that the tool runs in the background, is steerable with specific commands (pause/resume/abort/set_fmax/switch_optimizer/set_climb), and that get_results returns forward/reverse barriers and image energies.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences front-load the core purpose, then add steerability and output details. No redundant words; each 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?
Given 10 parameters, no output schema, and no annotations, the description covers high-level behavior but lacks parameter details for most inputs. Missing explanation of required parameters (initial_id, final_id, calculator_id) and their roles.
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 description must explain parameters. Only nimages and climb are explained; the other 8 parameters (optimizer, fmax, steps, interpolation, step_delay, etc.) are not described, leaving significant gaps.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it starts a nudged elastic band calculation for reaction barriers between two endpoints, with explicit mention of key parameter nimages. Distinguishes from sibling tools like start_relaxation and start_md by specifying the NEB context.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description indicates this tool is for barrier calculations and compares its steerability to relaxations, but does not explicitly state when to use it 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.
start_phononsA
Start a phonon (finite-displacement) calculation in the background.
Runs 1 + 6*natoms force evaluations; poll get_status for progress (done/total, fraction). When done, get_results returns gamma-point frequencies (THz), the count of imaginary modes, and a 'stable' flag. supercell defaults to [2,2,2].
| Name | Required | Description | Default |
|---|---|---|---|
| structure_id | Yes | ||
| calculator_id | Yes | ||
| supercell | No | ||
| delta | No | ||
| step_delay | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses key behavioral traits: background execution, number of force evaluations (1 + 6*natoms), polling via get_status, and output from get_results. It also mentions the default supercell size. However, it does not cover potential side effects or authorization needs, but the nature of the tool suggests minimal risks.
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-loading the purpose and then providing behavior details. No unnecessary words; every sentence adds value. It is optimally concise.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the lack of output schema and annotation, the description covers the workflow and result types adequately. However, it omits explanations for required parameters (structure_id, calculator_id), which are essential for correct invocation. The description is partially 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?
With 0% schema description coverage, the description only adds meaning for the supercell parameter (default [2,2,2]). It does not explain structure_id, calculator_id, delta, or step_delay, leaving agents without guidance on critical required parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool starts a phonon calculation using the finite-displacement method, distinguishing it from other start_* tools. It specifies that it runs in the background and provides details on the calculation type and output.
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?
No explicit guidance on when to use this tool versus alternatives like start_md or start_relaxation. The description implies usage for phonon calculations but does not provide context for when it is appropriate or contraindicated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
start_relaxationA
Start a geometry optimization in the background; returns immediately.
Poll get_status to watch progress, and steer() to change fmax, switch optimizer, pause or abort mid-run. Set relax_cell=True to also relax the cell. step_delay (seconds) throttles steps — useful with fast calculators so you have time to observe and react between steps.
| Name | Required | Description | Default |
|---|---|---|---|
| structure_id | Yes | ||
| calculator_id | Yes | ||
| optimizer | No | FIRE | |
| fmax | No | ||
| steps | No | ||
| relax_cell | No | ||
| step_delay | 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 discloses async behavior (returns immediately), background operation, and controls like relax_cell and step_delay. It does not disclose error handling or authentication needs, but key behavioral traits are conveyed.
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 main action. Every sentence provides essential information without waste, earning its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 7 parameters, async nature, and no output schema, the description covers the main workflow (background, polling, steering) but omits error conditions, valid inputs for calculator_id, and return structure. Adequate but with clear 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 description must add meaning. It explicitly describes relax_cell and step_delay, but misses descriptions for structure_id, calculator_id, optimizer, fmax, and steps. Partial coverage adds some value but leaves gaps.
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 starts a geometry optimization in the background and returns immediately, using specific verb and resource. It distinguishes from sibling tools like steer and get_status by implying this is the initiation action.
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 by mentioning to poll get_status for progress and use steer() for modifications, but does not explicitly state when to use this tool versus alternatives like start_md or start_minima_search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
steerA
Steer a running job mid-flight.
command is one of: pause, resume, abort, set_fmax, switch_optimizer, set_temperature, set_climb. Use value for set_fmax / set_temperature, optimizer for switch_optimizer (FIRE / LBFGS / BFGS), and set_climb to enable the climbing image on a NEB (value 0/1, default on).
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | ||
| command | Yes | ||
| value | No | ||
| optimizer | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must fully disclose behavioral traits. It details parameter mappings for each command but does not mention error states, side effects, or prerequisites (e.g., job must be running). This leaves some ambiguity about behavior in edge cases.
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 relatively concise, with the first sentence stating the purpose and the second covering parameter details. It could be slightly more compact, but it efficiently communicates essential information without unnecessary 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 no annotations and no output schema, the description covers core functionality and parameter relationships. However, it lacks details on return values, error handling, and prerequisites (e.g., job must be running, valid job ID). This leaves gaps for an agent to fully understand the tool's context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description compensates by explaining how 'command', 'value', and 'optimizer' parameters interact. It lists the specific values for 'command' and 'optimizer', and clarifies when 'value' is used. This adds significant meaning beyond the schema's minimal structure.
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: 'Steer a running job mid-flight.' This uses a specific verb (steer) and resource (running job), and distinguishes it from sibling tools like start_* and get_* which handle starting or retrieving job 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 by listing the valid commands and their associated parameters. However, it does not explicitly state when not to use this tool or direct the user to alternative tools for other scenarios, missing exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Each tool has a clearly distinct purpose. Potential overlaps (e.g., attach_emt vs load_model) are resolved by descriptions specifying different types of calculators. Similarly, build_structure vs load_structure, and the various start_* tools are differentiated by their specific computational tasks.
Tools mostly follow a verb_noun pattern (e.g., build_structure, load_model, start_relaxation). A few exceptions like execute and introspect are verb-only, but overall the naming is predictable and well-organized with prefixes like get_, start_, load_.
With 17 tools, the server covers the essential workflows for computational chemistry (structure handling, calculator setup, multiple simulation types, monitoring, and introspection) without being bloated. Each tool earns its place.
The tool set provides complete lifecycle coverage: structure creation/loading, calculator attachment, running various simulations (relaxation, MD, NEB, phonons, minima search), job control (steering, status, results), and introspection. No obvious gaps for typical usage.
Maintenance
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
MCP server for building and testing AI agents with multi-model experimentation and insights.
FTIR spectral search and material identification for AI agents via MCP.
AI orchestration for computational chemistry and HPC workflows.
Related MCP Servers
- AlicenseNot gradedqualityFmaintenanceA Model Context Protocol server that enables AI assistants to interact with LAMMPS for molecular dynamics simulations through natural language commands.14Apache 2.0
- AlicenseNot gradedqualityDmaintenanceA specialized MCP server for Metal-Organic Framework research that provides tools for database searching, structural optimization, and energy calculations via ASE. It enables scientific workflows by allowing users to interact with MOF data and perform chemical simulations through a standard SSE interface.MIT
- AlicenseNot gradedqualityCmaintenanceAn MCP server for quantum chemistry that enables LLMs to perform electronic structure analysis, parse calculation outputs, and generate 3D orbital visualizations. It integrates tools like PySCF, cclib, and py3Dmol to facilitate molecular structure manipulation and bonding analysis through natural language.BSD 3-Clause

colabfit-mcpofficial
FlicenseNot gradedqualityCmaintenanceAn MCP server for discovering ColabFit materials science datasets and training MACE interatomic potentials on local hardware, enabling AI assistants to search, download, train, and validate models.2
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/jkitchin/fairchem-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server