shelx-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., "@shelx-mcpRefine my crystal structure using SHELXL"
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.
shelx-mcp
An MCP server that wraps the SHELX
console crystallography programs so an LLM can build .ins instruction files,
run structure solutions and refinements, and read the results back — all from a
chat interface.
It ships with the authoritative SHELXL instruction reference and the SHELXS / SHELXD (SM & MM) / SHELXT / SHELXC / SHELXE solution-program references bundled offline (from https://shelx.uni-goettingen.de/), so the model can look up what any command or solution keyword does without leaving the conversation.
What it does
The server exposes 12 tools split into two coverage areas:
Refinement (SHELXL) — the cards that build and refine a model.
Structure solution & phasing (SHELXS / SHELXD / SHELXT / SHELXC / SHELXE) — the keywords that find a structure in the first place.
Tool | Coverage | Purpose |
| both | Execute any allowed SHELX program on supplied input files. |
| solution | Run structure solution (SHELXS direct methods, or SHELXT intrinsic phasing). |
| refinement | Run least-squares refinement with SHELXL (or CGLS via SHELXT). |
| refinement | List every SHELXL instruction the server understands. |
| refinement | Full signature + description for one instruction (e.g. |
| refinement | Free-text search across instruction names and descriptions. |
| solution | List SHELXS/SHELXD/SHELXD-MM |
| solution | Full signature + description for one solution keyword (e.g. |
| refinement | Check an |
| refinement | Extract R1, wR2, GooF (S), max shift/esd, atom count and warnings. |
| solution | Extract R1, alpha, space group, Flack x, CC and atom count from SHELXT output. |
| both | Report the configured SHELX directory and available programs. |
Refinement vs. solution coverage. SHELXL refines a model you already have; SHELXS/SHELXD/SHELXT find the model from diffraction data and SHELXC/SHELXE handle experimental phasing of macromolecules. Use
list_commands/command_help/search_commandsfor refinement cards, andlist_solution_keywords/solution_helpfor solution keywords.
How SHELX is driven
SHELX programs are console tools driven by a basename: shelxl name reads
name.ins (and name.hkl when an HKLF instruction is present) and writes
name.res, name.lst, and optionally name.cif / name.fcf. This server writes
the input files to a (throw-away) working directory, runs the executable, and
returns the generated files as text.
Related MCP server: Rosetta MCP
Requirements
Python >= 3.10 (the project uses
uv, which fetches its own interpreter if needed).The SHELX executables installed locally (register and download from https://shelx.uni-goettingen.de/ or via your site licence).
uvfor dependency / environment management.
Installation
git clone https://github.com/stge4code/shelx-mcp.git
cd shelx-mcp
uv sync # creates .venv and installs mcp + python-dotenv
uv sync --extra test # additionally installs pytest for the test suiteConfigure the SHELX location
Copy the template and point SHELX_DIRECTORY at the folder that contains the
*.exe files:
cp .env.example .env
# then edit .env:
# SHELX_DIRECTORY=C:/path/to/shelx64
.envis git-ignored (it contains a machine-specific path). Only.env.exampleis committed.
Run the server
The server speaks MCP over stdio, so you normally do not launch it by hand — your agent does. To smoke-test it manually:
uv run shelx-mcp # runs the stdio server
uv run python -m shelx_mcp.server # equivalentVerify the wiring (and that SHELX was found) before connecting an agent:
uv run python -c "import shelx_mcp.server as s; print(s.shelx_info())"Connecting an agent
All of the configurations below launch the server with:
uv --directory <repo> run shelx-mcpReplace <repo> with the absolute path to this checkout (e.g.
/absolute/path/to/shelx-mcp, or C:/path/to/shelx-mcp on Windows). The
.env file inside the repo is picked up automatically at startup. Every
client uses the same command / args pair; only the config file location
and key names differ.
Agent | Config file | Key | Example |
Crush |
|
| |
OpenCode |
|
| |
Claude Desktop |
|
| |
VS Code / Copilot |
|
| |
Zed |
|
| |
Cursor |
|
| |
Cline |
|
|
Copy the matching example into the agent's config location (or merge its server
block into an existing config) and restart the agent. The shelx server then
appears in the MCP list with its twelve tools available in any conversation.
For Crush specifically, the block looks like (note the mcp key and the
required type field, unlike the mcpServers key used by Claude/Cursor/Cline):
{
"mcp": {
"shelx": {
"type": "stdio",
"command": "uv",
"args": ["--directory", "/absolute/path/to/shelx-mcp", "run", "shelx-mcp"]
}
}
}
uvmust be on the agent'sPATH. If it is not, replace"uv"with the absolute path to theuvbinary (e.g.C:/Users/you/.local/bin/uv.exeon Windows,~/.local/bin/uvon Linux/macOS).
Skills
A reusable agent skill that teaches the workflow (look up instructions,
validate, solve, refine, analyze) lives at
skills/shelx/SKILL.md. To install it for Crush, copy
the folder into your skills directory:
mkdir -p ~/.config/crush/skills/shelx
cp -r skills/shelx/* ~/.config/crush/skills/shelx/Other agents that support markdown skills can load the same file. The skill keeps the SHELX card order and the solve→refine→analyze loop consistent across sessions.
Typical workflow
Look up a command — refinement card:
command_help("ANIS")orsearch_commands("rigid group"); solution keyword:list_solution_keywords("shelxs")thensolution_help("shelxs", "TREF").Build the model — paste or generate an
.insfile, thenvalidate_ins(...)to confirm the header cards.Solve / refine — call
solve(ins, hkl)(SHELXS/SHELXT) orrefine(ins, hkl)(SHELXL).Read the outcome —
analyze_results(lst=..., res=...)returns the R-factors, GooF and any warnings; the full.lst/.resare returned inline by the run tools for deeper inspection.
Tool reference
run_shelx(program, ins, hkl=None, basename="shelx_job", workdir=None, timeout=120, return_output=True)
Run any allowed SHELX program on the supplied .ins (and optional .hkl)
text. Returns the program output, return code, and (when return_output is
true) the generated .res / .lst / .cif files. program must be one of
shelxs, shelxl, shelxt, shelxc, shelxd, shelxe, ciftab.
solve(ins, hkl=None, program="shelxs", basename="solve", timeout=120)
Run structure solution. program is shelxs (direct methods) or shelxt
(dual-space / intrinsic phasing — usually the better first choice for small
molecules). Requires an .ins set up for solution (TITL, CELL, ZERR,
LATT, SYMM, SFAC, UNIT, plus e.g. TREF/FMAP, and HKLF/END) and
the corresponding .hkl data. SHELXT writes its listing to name.lxt and its
solution(s) to name_a.res, name_b.res, ...; both are returned inline.
refine(ins, hkl=None, program="shelxl", basename="refine", timeout=300)
Run least-squares refinement. Requires a complete .ins (with L.S./CGLS and
HKLF) and the .hkl data. Returns the .lst summary and refined .res.
list_commands()
Return every SHELXL instruction name the server knows (alphabetical).
command_help(name)
Return the signature and full description for one SHELXL instruction (e.g.
command_help("ANIS"), command_help("L.S.")).
search_commands(query, limit=10)
Free-text search across instruction names, signatures, descriptions, related cards and example lines.
list_solution_keywords(program)
List the keywords for program ∈ {shelxs, shelxd, shelxd_mm, shelxt,
shelxc, shelxe}: .ins cards for SHELXS/SHELXD/SHELXD-MM, command-line
switches for SHELXT/SHELXE, and stdin keywords for SHELXC.
solution_help(program, keyword)
Return the signature and full description for one solution keyword. For
SHELXS/SHELXD/SHELXD-MM use the card name (e.g. solution_help("shelxs", "TREF"), solution_help("shelxd_mm", "DSUL")); for SHELXT/SHELXE use the
switch including its dash and placeholder (e.g. solution_help("shelxt", "-a"), solution_help("shelxe", "-aN")); for SHELXC use the stdin keyword
(e.g. solution_help("shelxc", "SAD")). SHELXT/SHELXE options are
case-sensitive.
validate_ins(ins)
Check an .ins file for the required SHELXL header cards (TITL, CELL,
ZERR, LATT, SYMM, SFAC, UNIT, HKLF, END) and a few common
mistakes (e.g. SYMM is not required for P1/P-1; UNIT must precede HKLF).
analyze_results(lst=None, res=None)
Summarise refinement metrics: R1, wR2, GooF (S), max shift/esd, atom count and
any warning lines from the .lst / .res text.
analyze_solution(lxt=None, res=None)
Summarise a SHELXT solution run from the .lxt listing and/or a name_a.res
solution model: R1, alpha (phase error), assigned space group, Flack x, CC,
Chem and atom count. Useful for judging whether an intrinsic-phasing run
produced an acceptable solution before starting refinement.
shelx_info()
Report the configured SHELX_DIRECTORY and which SHELX programs are present.
Bundled reference data (offline)
The server does not call the web at runtime. It parses these bundled HTML files (from https://shelx.uni-goettingen.de/) at startup:
File | Programs covered |
| SHELXL refinement instructions |
| SHELXS |
| SHELXD |
| SHELXD |
| SHELXT command-line switches |
| SHELXC stdin keywords |
| SHELXE command-line options |
To refresh the references, re-download the corresponding pages and replace the
files in src/shelx_mcp/data/ (they are included in the wheel via
force-include in pyproject.toml).
Project layout
shelx-mcp/
├── .env.example # template for SHELX_DIRECTORY
├── pyproject.toml # uv / hatchling project metadata
├── examples/
│ ├── crush.json # Crush MCP config
│ ├── opencode.jsonc # OpenCode MCP config
│ ├── claude_desktop.json # Claude Desktop config
│ ├── vscode_mcp.json # VS Code / Copilot (.vscode/mcp.json)
│ ├── zed.json # Zed context_servers
│ ├── cursor.json # Cursor .cursor/mcp.json
│ └── cline.json # Cline settings
├── skills/
│ └── shelx/
│ └── SKILL.md # agent skill: SHELX solve/refine workflow
├── AI.md # technical summary for AI assistants
├── src/shelx_mcp/
│ ├── server.py # FastMCP server + tools
│ ├── runner.py # safe subprocess execution of SHELX
│ ├── reference.py # parses the bundled SHELXL instruction HTML
│ ├── solution_ref.py # parses the bundled SHELXS/D/T/C/E references
│ ├── analysis.py # extracts R1/wR2/GooF/atoms/warnings/solution metrics
│ └── data/
│ ├── shelxl_reference.html # bundled, offline SHELXL manual
│ ├── shelxs_keywords.html # SHELXS .ins cards
│ ├── shelxd_sm_keywords.html # SHELXD .ins cards (small molecules)
│ ├── shelxd_mm_keywords.html # SHELXD .ins cards (macromolecular)
│ ├── shelxt_keywords.html # SHELXT command-line switches
│ ├── shelxc_keywords.html # SHELXC stdin keywords
│ └── shelxe_keywords.html # SHELXE command-line options
└── tests/
└── test_server.pyDevelopment
uv sync --extra test
uv run pytest -q # run the test suite (no real SHELX needed)
uvx ruff@0.11.0 check src tests # lintTests cover reference/solution parsing (all six solution programs), output
analysis (SHELXL and SHELXT), validate_ins, the server tools, and (when
SHELX_DIRECTORY is configured) an end-to-end SHELX run.
Security notes
Only the programs in
ALLOWED_PROGRAMS(shelxs,shelxl,shelxt,shelxc,shelxd,shelxe,ciftab) can be executed — theprogramargument cannot be abused to run arbitrary commands.The
basenameis restricted to[A-Za-z0-9_.-]and the values./..are rejected, so it cannot escape the working directory.Extra input files must be bare names with no directory components.
Input files are written to a temporary directory that is removed after the run (unless you pass
workdirexplicitly), so the server never writes into your repo.
Disclaimer
AI-generated project. This codebase was created with the assistance of large language models and is provided as-is, without warranty of any kind. While the SHELX executables themselves are the authoritative tools from the Sheldrick group, the wrappers, parsers and documentation here may contain errors. Always verify crystallographic results independently (e.g. with checkCIF and by inspecting the full
.lstoutput), and report issues on the GitHub issue tracker.SHELX is © George M. Sheldrick; this project merely wraps the SHELX console programs and bundles excerpts of the official documentation pages from https://shelx.uni-goettingen.de/ for offline lookup. You must obtain your own licensed copy of the SHELX programs — they are not included here.
License
MIT — see LICENSE.
Available Tools
12 toolsanalyze_resultsB
Summarise refinement metrics from SHELXL .lst and/or .res text.
Returns R1, wR2, GooF (S), max shift/esd, atom count and any warning lines.
| Name | Required | Description | Default |
|---|---|---|---|
| lst | No | ||
| res | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It does state what the tool returns (R1, wR2, GooF, max shift/esd, atom count, warning lines), which gives agents confidence about the outcome. However, it doesn't disclose behaviors like what happens if no valid refinement data is found, whether it requires one or both files, or any edge-case handling. No contradiction with annotations since none exist.
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 at roughly two sentences, with the return-value detail front-loaded into the first sentence. Every sentence earns its place by conveying purpose and output expectations. Minor waste is the vague phrase 'SHELXL' which could be slightly expanded, but overall it's 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?
The tool has a modest complexity (2 optional params, output schema exists) and the description is reasonable but not comprehensive. While the output schema exists, which reduces the need to describe return values, the description doesn't explain the relationship between the two optional input parameters or what happens when only one is provided. For a tool with this complexity, it's adequate but has clear gaps in usage context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description carries full parameter documentation burden. The description mentions both 'lst' and 'res' files by name ('from SHELXL .lst and/or .res text') which maps to the two parameters, but it doesn't explain their format, required vs optional status details, or whether one is sufficient. The parameters have generic titles ('Lst', 'Res') with no schema descriptions, so the tool description's brief mention is minimal compensation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear purpose: 'Summarise refinement metrics from SHELXL .lst and/or .res text' with a specific verb (summarise) and resource (refinement metrics files). It lists the specific metrics returned (R1, wR2, GooF, max shift/esd, atom count, warning lines), which distinguishes it from sibling 'analyze_solution'. However, it doesn't explicitly differentiate from 'analyze_solution' by name.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context (analyzing SHELXL output files) and mentions it handles both .lst and .res files. However, it doesn't explicitly state when to use this vs 'analyze_solution', nor does it provide exclusion criteria or explain the relationship between the two input files (whether to provide both, or either is sufficient) or prerequisites for usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
analyze_solutionA
Summarise a SHELXT structure-solution run from .lxt and/or .res text.
SHELXT writes its console summary to name.lxt and its solution(s) to
name_a.res, name_b.res, ... Pass the listing text as lxt and a
solution model as res. Returns the R1, alpha (phase error), assigned
space group, Flack x parameter and atom count of the reported solution.
| Name | Required | Description | Default |
|---|---|---|---|
| lxt | No | ||
| res | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description bears the transparency burden. It discloses what the tool returns (R1, alpha, space group, Flack x, atom count), which is helpful, but doesn't describe edge cases such as expected behavior if inputs are empty/null or malformed, or how multiple solutions are handled.
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 reasonably concise with three short paragraphs, front-loading the purpose. The second paragraph adds meaningful param context. Slightly verbose in naming file extensions but no wasted sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given two optional params, no annotations, and an output schema that presumably defines return fields, the description adequately explains what data to pass and what will be returned. It could be more explicit about null-handling and scenario guidance for partial inputs, but is complete for the core use case.
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 carry the param documentation burden. It does explain that 'lxt' is the listing text and 'res' is a solution model, and that both are optional-ish ('Pass the listing text as lxt and a solution model as res'). However, it doesn't clarify what happens if only one is provided or the expected format/text constraints of each.
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 ('Summarise'), the resource ('a SHELXT structure-solution run'), and the specific inputs/outputs. It distinguishes from the sibling analyze_results by specifying it targets SHELXT output files (.lxt/.res).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear context on when to use it (after a SHELXT run) and what inputs to pass (.lxt and .res text). It doesn't explicitly state when NOT to use it or name alternatives like analyze_results, which slightly limits the score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
command_helpA
Return the SHELXL instruction signature and full description for name.
Example: command_help("ANIS") or command_help("L.S.").
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It clearly states the tool is a read-only lookup returning documentation text, which implies no side effects. It doesn't describe behavior for invalid or unknown instruction names (error handling), but as a documentation retrieval tool the lack of mutation concern is acceptable. The description is honest and not misleading.
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 extremely tight: two sentences plus an example, with zero wasted words. It's appropriately front-loaded with the core purpose and includes a concrete illustrative example for format 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?
The tool is simple (1 required param) and has an output schema, which offloads return-value documentation. For a documentation-lookup tool this is appropriate coverage: the purpose, parameter semantics, and example are all present. It's reasonably complete for its complexity level, though additional notes on help output format or error behavior for invalid names could add a bit more value.
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. The description clarifies that 'name' is a SHELXL instruction name, which adds real meaning beyond the bare schema field 'Name'. The examples ('ANIS', 'L.S.') help clarify the expected format. However, it doesn't specify whether input is case-sensitive or whether special characters/spacing are handled in a specific way.
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 SHELXL instruction signature and full description for a given command name, with concrete examples ('ANIS', 'L.S.'). The purpose is specific (verb 'return' + resource 'instruction signature and description'). It doesn't explicitly distinguish from siblings, though siblings like search_commands and list_commands suggest this is the targeted help-lookup tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage: when you need the signature or description of a specific named SHELXL instruction. However, it doesn't state when NOT to use this vs alternatives (e.g., search_commands for finding commands by keyword, list_commands for enumeration). No exclusions or alternative-tool guidance is provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_commandsA
List every SHELXL instruction the server knows about (alphabetical).
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the burden. It discloses the key behavior: returns the complete set of instructions in alphabetical order. For a read/list operation this is reasonably transparent, though it doesn't mention output format or whether results are paginated.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, efficient sentence that conveys the core purpose plus the alphabetical ordering detail. Zero 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?
The tool has zero parameters and an output schema exists, so the description's job is minimal. 'List every SHELXL instruction alphabetically' fully captures what's needed. It's complete for a no-parameter listing tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so there's nothing for the description to elaborate beyond the schema. Per the rubric, 0 params = baseline 4. The description appropriately doesn't waste space on them.
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?
Clear verb+resource: 'List every SHELXL instruction the server knows about (alphabetical).' States it's an alphabetical listing of known instructions. It's distinguishable from siblings like search_commands and command_help by its exhaustive/listing nature, though it doesn't explicitly name them.
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: when you want the full list of available SHELXL instructions. However, it doesn't explicitly contrast with search_commands (for finding specific ones) or command_help (for details on a single command). No exclusions or alternatives are named.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_solution_keywordsA
List the keywords (.ins cards, command-line options, or stdin
keywords) for a SHELX solution program.
Unlike list_commands (which covers SHELXL refinement), this covers the
programs that find or phase a structure: shelxs (direct methods),
shelxd (dual-space small molecules), shelxd_mm (macromolecular
substructure solution), shelxt (intrinsic phasing command-line
switches), shelxc (SAD/MAD data-preparation stdin keywords) and
shelxe (phasing command-line options).
Args: program: one of shelxs, shelxd, shelxd_mm, shelxt, shelxc, shelxe.
Returns the sorted keyword list, or a message if the program is unsupported.
| Name | Required | Description | Default |
|---|---|---|---|
| program | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral burden. It discloses that the tool returns a sorted keyword list or a message if the program is unsupported, which is useful. However, it doesn't detail edge cases like what happens with invalid program strings, case-sensitivity, or the exact format of the return value. The return-behavior disclosure is adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with an intro paragraph, an enumeration of covered programs, an Args section, and a returns statement. Each sentence earns its place — there's no filler or redundant content. The differentiation from sibling tools is front-loaded in the second paragraph.
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 list tool, the description is quite complete: it enumerates valid inputs, differentiates from the sibling list_commands, and states the return behavior. An output schema exists, so return format is handled structurally. It's not the most complex tool, and the description covers the essential decision-making information an agent 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?
Schema coverage is 0%, so the description must compensate for the undocumented 'program' parameter. It does so well: the Args section enumerates the six valid program values explicitly, giving the agent a precise enumerated set even though the schema itself lacks an enum. This substantially adds 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 is very specific: it lists keywords for SHELX solution programs, explicitly naming the tool's verb ('List') and resource (keywords for solution programs). It clearly differentiates from the sibling list_commands by stating it covers solution programs (shelxs, shelxd, shelxt, etc.) rather than SHELXL refinement.
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 contrasts with list_commands, stating 'Unlike list_commands (which covers SHELXL refinement), this covers the programs that find or phase a structure.' It also enumerates the exact supported programs (shelxs, shelxd, shelxd_mm, shelxt, shelxc, shelxe), giving the agent clear when-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
refineA
Run least-squares structure refinement with SHELXL (or CGLS via shelxt).
Requires a complete .ins file (with L.S. / CGLS and HKLF instructions) and the .hkl reflection data. Returns the .lst summary and refined .res model.
| Name | Required | Description | Default |
|---|---|---|---|
| hkl | No | ||
| ins | Yes | ||
| program | No | shelxl | |
| timeout | No | ||
| basename | No | refine |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 discloses the input requirements and the outputs (.lst summary and .res model), which is helpful. However, it doesn't disclose side effects—refinement typically writes intermediate files including potentially overwriting .res, .lst, .fcf, and log files—nor does it mention error behavior when input is invalid. The output description adds context but stops short of full 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 concise paragraphs. The first delivers the core purpose efficiently, and the second covers inputs/outputs. No filler or redundant phrasing. Slightly more could be added on parameters, but it's tight and front-loaded with the most important information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has 5 parameters (0% schema coverage), multiple sibling tools, and an output schema. The description identifies the key inputs, outputs, and supported programs. However, for a computation-heavy tool with no annotations, it would benefit from disclosing expected runtime implications, file side effects, or common failure modes. The presence of an output schema lightens the return-format explanation burden, but the behavioral/parameter gaps remain.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It explains what ins and hkl are (the .ins file and .hkl reflection data) through the prose. However, it doesn't explain program (beyond the CGLS mention), timeout, or basename semantics—these are named in the schema but their purpose isn't elaborated in the description. Partial compensation, leaving several parameters underspecified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool runs least-squares structure refinement using SHELXL or CGLS via shelxt, with a specific verb (refine) and resource (structure). It distinguishes itself from siblings like solve (solving vs refining) and validate_ins, though it doesn't explicitly name these alternatives.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description specifies prerequisites (complete .ins file with L.S./CGLS and HKLF instructions, plus .hkl data), which gives the agent clear context for when this tool is appropriate. It doesn't explicitly call out when NOT to use it, but the prerequisites effectively gate usage. It mentions the program parameter supports shelxl or CGLS via shelxt, which is useful guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
run_shelxA
Run a SHELX console program on supplied input files and return its output.
Args:
program: one of shelxs, shelxl, shelxt, shelxc, shelxd, shelxe, ciftab.
ins: full text of the .ins instruction file.
hkl: optional text of the .hkl reflection file (needed for refinement).
basename: base file name (no extension) used for inputs/outputs.
workdir: directory to run in; a throw-away temp dir is used when omitted.
timeout: seconds before the run is aborted.
return_output: include the produced .res/.lst/.cif content in the reply.
Returns the program output, return code, and (if requested) the generated files.
| Name | Required | Description | Default |
|---|---|---|---|
| hkl | No | ||
| ins | Yes | ||
| program | Yes | ||
| timeout | No | ||
| workdir | No | ||
| basename | No | shelx_job | |
| return_output | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 discloses that workdir defaults to a throw-away temp dir, that timeout aborts the run, and that return_output controls whether generated files are included in the reply. It notes output includes program output, return code, and generated files. Does not mention potential side effects like file deletion, but as a console-program runner this is reasonably 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 prose intro is one clear sentence, followed by a tight argument list with brief one-line descriptions. Front-loaded with the core purpose. Minor waste: the returns line re-states return_output which is already in the arg list, but overall 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?
Output schema exists, so return-value explanation is not required. With 7 parameters and no annotations, this description covers purposes of all params and key behaviors. Given it's a generic exec wrapper (no output schema coverage needed for return format), the description is appropriately complete for an experienced crystallography domain agent.
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 explain parameters. It does define each param's purpose (program enum list, ins full text, hkl optional, basename file base, timeout seconds, return_output include). However, it provides little beyond restating schema field names — e.g., it does not specify default for timeout (120s), default basename, or constraints on program values beyond listing them. Adequate but not rich compensation for the 0% 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?
Description states a specific verb+resource ('Run a SHELX console program on supplied input files and return its output') and lists all valid programs. It clearly distinguishes from siblings like solve, refine, and list_commands by framing itself as a generic execution wrapper rather than a domain-specific operation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when hkl is needed (for refinement) and when workdir can be omitted (throw-away temp dir). It provides context for when the tool applies, though it does not explicitly say 'use X command instead for Y case' — e.g., when to prefer solve/refine sibling tools over run_shelx. Clearly the generic exec tool, and siblings are domain wrappers.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_commandsA
Search SHELXL instructions by keyword across names and descriptions.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. The description is a search/read operation, which is implicitly non-destructive, but it doesn't disclose behavior like case-sensitivity, pagination, or whether results are limited across names, descriptions, or both. The limit parameter is documented in schema, so some behavior is self-evident.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single sentence that is efficient and waste-free. It captures the search functionality in minimal words with no redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema, so return values are documented elsewhere. However, with zero annotations and no usage context, the description could add value by noting that SHELXL has many commands and this is the way to discover available instructions. Given the low parameter complexity and presence of output schema, this is minimally adequate but could be richer.
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 carries full param responsibility. However, with only 2 simple parameters (query, limit) the complexity is low. The description says 'by keyword across names and descriptions' which explains what query matches against, but doesn't explain what 'limit' does beyond schema's default value. Since the schema covers the types and defaults, and the description adds the matching scope, this is adequate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb+resource ('Search SHELXL instructions') and the scope ('by keyword across names and descriptions'). It clearly distinguishes from siblings like 'list_commands' (which lists all commands) and 'command_help' (which likely shows details for a specific command). It doesn't explicitly name sibling alternatives, but the purpose 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 this is for finding SHELXL commands by keyword, versus listing all (list_commands) or getting specific help (command_help). However, it doesn't explicitly state when to use this tool vs. alternatives, nor any exclusions. The context is somewhat clear from the sibling names but not explicitly documented.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
shelx_infoA
Report which SHELX directory is configured and which programs are available.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 disclosure. The description clearly signals this is a read-only informational query (reports configuration), which is useful. However, it doesn't describe the output format or what happens if no SHELX directory is configured, which could be relevant 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?
One sentence that conveys the tool's complete purpose with zero waste. It efficiently covers what the tool does (reports information) and what it reports (directory and available programs). No filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter informational tool with an output schema, the description is reasonably complete. It tells the agent what information will be provided. It could mention what might cause the report to differ (e.g., uninstalled/unconfigured SHELX), but for such a simple tool, the description covers the essential purpose adequately.
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 0 parameters, and the schema shows no properties. With no parameters to document, baseline is 4. The description appropriately focuses on the tool's function rather than parameter semantics since there are none.
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 reports the configured SHELX directory and available programs. This is a specific verb+resource ('report which directory') that clearly distinguishes it from siblings like run_shelx, solve, and refine, which perform actions rather than information queries. The purpose is clear and specific.
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 this is an informational tool to be used before running SHELX programs, but it doesn't explicitly say when to use it versus alternatives like list_commands or command_help. The context of being an info/reporting tool distinguishes it from action tools, but there's no explicit when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
solution_helpA
Return the signature and description for one SHELX solution keyword.
Covers shelxs / shelxd / shelxd_mm .ins cards (e.g.
TREF, FIND, SHEL, DSUL), shelxt command-line switches
(e.g. -a, -d, -L), shelxc stdin keywords (e.g. SAD,
CELL, SPAG) and shelxe command-line options (e.g. -aN).
Use list_solution_keywords first to discover valid names.
Args:
program: one of shelxs, shelxd, shelxd_mm, shelxt, shelxc, shelxe.
keyword: the instruction card, switch or option name (e.g. TREF,
-a, SAD).
Returns the signature and full description, or a not-found message.
| Name | Required | Description | Default |
|---|---|---|---|
| keyword | Yes | ||
| program | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of disclosing behavior. It states that the tool returns a signature and full description, or a not-found message for invalid keywords—important for setting expectations. It also enumerates the exact families of keyword types covered, providing concrete behavioral scope. It does not explicitly claim to have no side effects, but the return-based wording implies a read-only lookup.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the core purpose, followed by compact coverage details, a usage pointer, and an Args section. Each sentence adds value—there's no filler or redundancy. The line breaks and sections (Covers, Use, Args, Returns) make it scannable and effectively sized for the information it conveys.
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?
Considering the tool's modest complexity (2 string params, no annotations, output schema present), the description covers purpose, scope, prerequisite usage, parameter details, and return behavior. It also addresses the error case (not-found). The existence of an output schema covers return structure, so the description doesn't need to detail that further. It is complete for an agent to select and 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 only names/types with no descriptions, so the parameter meaning rests entirely on the description. The Args section explains each parameter with allowed values for program (enumerating all six variants) and explicit examples for keyword (TREF, -a, SAD), adding substantial semantic 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 opens with a specific verb+object ('Return the signature and description for one SHELX solution keyword'), precisely identifying the tool's function. It further distinguishes itself from siblings by enumerating the covered programs/keyword types and referencing list_solution_keywords, making clear it's the detailed-lookup counterpart to that listing tool.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit context for when to use this tool: after discovering valid names via list_solution_keywords, which is named as a prerequisite. It also clearly scopes the tool to solution keywords (shelxs/shelxd/shelxt/shelxc/shelxe), implicitly excluding other command help. However, it doesn't explicitly state 'use command_help for non-solution commands,' so it's slightly short of a full when-not/alternatives statement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
solveA
Run structure solution (default SHELXS direct methods; use shelxt for dual-space).
Requires an .ins file set up for solution (TITL, CELL, ZERR, LATT, SYMM, SFAC, UNIT, plus a solution-specific instruction such as TREF or FMAP, and HKLF/END) and the corresponding .hkl data.
| Name | Required | Description | Default |
|---|---|---|---|
| hkl | No | ||
| ins | Yes | ||
| program | No | shelxs | |
| timeout | No | ||
| basename | No | solve |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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 states the tool runs a structure solution and requires specific setup files, but does not disclose what happens on failure (e.g., what if shelxs fails and shelxt fallback is needed), timeouts, whether it modifies files, or what results may be produced. The program parameter and defaults are mentioned implicitly but behavior during execution is not 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 compact and front-loaded with the core purpose in the first sentence. The second sentence adds the prerequisite file setup details in a structured list-like format. There is minimal waste. It could potentially be shorter, but the prerequisite detail is valuable for correct usage.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has an output schema (which reduces the need to explain return values) and the description covers the key prerequisites and method selection. The complexity is moderate (crystallographic structure solution with multiple program options), and the description addresses the main usage concerns. Minor gaps exist in clarifying program parameter values and error/failure behavior, but the core completion 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?
Schema description coverage is 0%, so the description must compensate. It explains what the .ins and .hkl files are and their content requirements, which adds meaning beyond the bare schema. However, it doesn't clarify the 'program' (beyond mentioning shelxs/shelxt as solution methods), 'timeout', or 'basename' parameters. The description adds value for the two file parameters but leaves three parameters undocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly identifies the action ('Run structure solution') with a specific resource (the structure solution step of crystallographic data processing). It names the default method (SHELXS direct methods) and the alternative (shelxt for dual-space), which helps distinguish capabilities. However, it doesn't explicitly distinguish itself from the sibling 'refine' tool beyond the implied context, though the difference is reasonably clear from 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?
The description provides clear prerequisites: an .ins file set up for solution with specific required instructions (TITL, CELL, ZERR, LATT, SYMM, SFAC, UNIT, plus TREF/FMAP and HKLF/END) and corresponding .hkl data. It also explains when to use shelxt vs shelxs (default vs dual-space). It doesn't explicitly name alternative tools or state 'when not to use', but the prerequisite specification is substantial practical guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
validate_insB
Check an .ins file for the SHELXL header cards required before HKLF/END.
Reports which mandatory cards (TITL, CELL, ZERR, LATT, SYMM, SFAC, UNIT, HKLF, END) are present, plus a few common mistakes.
| Name | Required | Description | Default |
|---|---|---|---|
| ins | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | 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. The description states it 'Reports which mandatory cards are present, plus a few common mistakes' but does not disclose whether this is a read-only operation, whether it modifies any files, what happens if the input is invalid/malformed, or the format of the report it produces. For a validation tool with zero annotation coverage, more behavioral detail would be 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?
The description is compact at two short sentences, front-loaded with the primary purpose in the first line. It lists concrete card names without excess verbiage. Slightly under-specified in behavioral detail but not padded with filler. Efficient 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?
The tool has 1 parameter and an output schema (which can carry return-value documentation), so completeness burden is moderate. The description names the specific mandatory cards, which is valuable, but it doesn't detail what 'a few common mistakes' covers or what the output report looks like. Given the output schema exists, the return format may be covered elsewhere, making this adequate but not rich.
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 single parameter 'ins' is entirely undocumented by the schema. The description mentions '.ins file' in prose, which implies 'ins' is the file path or content, but it doesn't clarify whether it expects a file path, file content as a string, or something else. The description partially compensates by referencing the file type, but ambiguity remains about the parameter's exact nature.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states what the tool does: checking an .ins file for SHELXL header cards required before HKLF/END. The verb 'Check' with the specific resource '.ins file' and the specific card names (TITL, CELL, ZERR, LATT, SYMM, SFAC, UNIT, HKLF, END) makes the purpose specific and distinguishable. It lacks explicit sibling differentiation but the purpose is clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context: use this to validate an .ins file before running SHELXL. It mentions the specific file type (.ins) and what it checks for, giving the agent a sense of when this is appropriate. However, it doesn't explicitly state when NOT to use this versus alternatives like run_shelx or analyze_results, or what makes this preferable over checking manually.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.
12 tool updates
v0.2.0- First observed
analyze_results - First observed
analyze_solution - First observed
command_help - First observed
list_commands - First observed
list_solution_keywords - First observed
refine - First observed
run_shelx - First observed
search_commands - First observed
shelx_info - First observed
solution_help - First observed
solve - First observed
validate_ins
TDQS
Most tools have distinct purposes: run_shelx is a generic runner, while solve and refine are specialized wrappers that could be confused with it but are clearly described. The pairs list_commands/list_solution_keywords and command_help/solution_help are differentiated by domain (refinement vs. solution), but agents might initially pick the wrong one.
Tool names are predominantly snake_case and verb-first (search_commands, validate_ins, analyze_results), but a few are noun-first (command_help, solution_help, shelx_info). The pattern is mostly consistent and readable, with minor deviations.
With 12 tools, the server is well-scoped for the SHELX crystallography domain. Each tool covers a distinct aspect (running programs, getting help, validating input, analyzing output), and the count is within the ideal 3-15 range without feeling excessive.
The tool surface covers the full workflow: searching/listing/help for commands and keywords, running any SHELX program, dedicated solve/refine wrappers, input validation, output analysis, and environment reporting. No obvious gaps that would block a typical crystallographic workflow.
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
- mcpOAuthio.scispot
Turn any LLM into your lab assistant: search samples, track experiments, analyze data with AI.
Run AI customer support from your terminal: conversations, knowledge base, and chat widget.
Search your AI chat history (ChatGPT, Claude, Codex) from any MCP client. Remote, private, read-only
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceMCP server that wraps xraylarch for X-ray spectroscopy analysis, enabling loading, processing, analyzing, and plotting XAS/XAFS spectra through natural language.2BSD 3-Clause
- FlicenseNot gradedqualityDmaintenanceEnables protein modeling and design using the Rosetta suite via Docker, including structure refinement, mutation stability analysis, docking, and loop modeling through natural language commands.-
- AlicenseNot gradedqualityCmaintenanceEnables AI agents to control RELION 5.x cryo-EM structure determination software through natural language, providing 23 tools for the complete single-particle analysis pipeline.4MIT
- AlicenseNot gradedqualityBmaintenanceEnables natural language interaction with computational chemistry tools including molecule building, electronic structure calculations, geometry optimization, vibrational spectroscopy, and molecular dynamics, powered by RDKit, PySCF, and ASE.MIT
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/stge4code/shelx-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server