cdxml-toolkit
This server is a ChemDraw MCP toolkit that lets agents and users resolve, draw, validate, and edit chemical structures and reaction schemes, while also supporting lab-data parsing, Office document integration, and experiment workflows.
Resolve chemical names, abbreviations, formulas, and CAS numbers into validated molecule descriptors.
Analyze and modify molecules (name surgery, SMARTS transforms, reactions) with structural diff verification.
Draw molecules and reaction schemes as editable CDXML documents.n- Parse reaction files (CDXML, CDX, RXN, ELN CSV) into semantic JSON summaries.
Extract chemical structures from images using DECIMER, with optional OCR labels.
Convert between CDX and CDXML formats.
Parse LCMS and NMR PDF reports into structured peak data.
Format structured lab-book entries with automatic LCMS/NMR lookups.
Extract, embed, inspect, replace, and batch-embed editable ChemDraw OLE objects in PowerPoint/Word files.
Search compounds across reaction JSON experiments by SMILES similarity.
Render CDXML files to PNG via native ChemDraw COM.
Clean, merge, polish, and segment reaction scheme layouts.
Fill Office templates and batch-create PPTX/DOCX with embedded ChemDraw objects.
Discover experiment files, analyze LCMS time series, assemble lab-book entries, and parse SciFinder RDF.
Compare molecules individually or in batches using ChemScript and RDKit fingerprints.
Inspect and execute ChemScript SDK programs in an isolated environment.
Report runtime capabilities and diagnose local Chemistry/Office/ChemScript availability.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@cdxml-toolkitDraw a 3-step reaction scheme for the Boc deprotection from this image."
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.
CDXML Toolkit — ChemDraw MCP Server and Python Chemical Drawing
Platform support: Portable CDXML and RDKit workflows run on Windows, macOS, and Linux. ChemDraw COM rendering, ChemScript, and editable ChemDraw objects in Word or PowerPoint require a Windows host with a licensed desktop ChemDraw installation.
Featured demos
Explore real paper images and data through native previews, reference comparisons and editable downloads.
Case | What it demonstrates | Available scope |
Five structures, conditions, yields and wavy bonds | Complete figure; not pixel-identical | |
Eight structures, electron arrows, charges and conditions | Complete figure; not pixel-identical | |
Editable lanes, spots and Rf | Runnable example | |
Assembly from native ChemDraw templates | Runnable example | |
Real processed 1D data and an editable spectrum | Runnable example | |
Numerical data as editable curves | Runnable example | |
Full native scheme and electron arrows | Stereo acceptance pending; not 1:1 | |
Full native scheme and electron arrows | Stereo acceptance pending; not 1:1 |
Paper reaction scheme
Turn a published reaction scheme into an editable ChemDraw document. This example preserves the five structures, reaction conditions, yields and compound labels shown in the reference image.
Original paper figure

Editable reconstruction — ChemDraw-native output

Download editable CDXML · Inspect structure-by-structure comparisons · Source and verification details
Structures extracted from the saved CDXML match the five reviewed reference structures. The shared wavy bond for 17a/17b remains unspecified, as in the original figure.
Visually reviewed and editable; not pixel-identical. Font metrics, arrows and some line geometry still differ. Matching saved structures does not independently prove that every detail was recognized correctly.
Sceptrin mechanism
Reference excerpt

ChemDraw reconstruction

Editable CDXML · Native CDX · Side-by-side comparison · Verification and source limitations
Eight numbered structures and six chloride counterions retain their molecular inventory, depicted stereochemistry and formal charges through an actual ChemDraw CDXML → CDX → CDXML save cycle. Undefined R groups remain generic substituents. The reconstruction is visually reviewed, not pixel-identical: font metrics, electron-arrow paths, some bridge geometry and the placement of the delocalized charge indicators differ. The source's cropped recrystallization statement is not completed by inference.
Native TLC
Native TLC plate, lane and spot objects with illustrative Rf values.

Editable CDXML · Run this example · Data and template provenance
Native apparatus
Built from installed ChemDraw apparatus templates, preserving their editable native artwork.

Editable CDXML · Run this example · Data and template provenance
Experimental NMR
Real processed 1D NMR data, with peak picking and selected-region integration available. No automatic atom assignment.

Editable CDXML · Run this example · Data and template provenance
Simulated reaction kinetics
Explicitly simulated first-order decay demonstrates the numerical-data-to-figure workflow.

Editable CDXML · Run this example · Data and template provenance
Complex synthesis: 101–112
Full scheme with editable structures. Includes every compound number, reaction condition and mechanism arrow. Native saving preserves connectivity, charge, isotopes and alkene geometry. Bridgehead stereochemistry remains unresolved, and font and line geometry differ; this is not a validated 1:1 reproduction.

Full editable CDXML · Reference comparison · Acceptance and provenance

Complex synthesis: 113–122
Full scheme with editable structures. Includes every compound number, reaction condition and mechanism arrow. Native saving preserves connectivity, charge, isotopes and alkene geometry. Bridgehead stereochemistry remains unresolved, and font and line geometry differ; this is not a validated 1:1 reproduction.

Full editable CDXML · Reference comparison · Acceptance and provenance

Related MCP server: Mol-MCP
Reconstruction scope and structure review
Both complex synthesis examples contain the complete layout, native molecular structures, text, brackets and electron arrows. Molecules remain editable atoms, bonds and expandable abbreviations; screenshots and traced outlines do not substitute for molecular objects.
Check | Current result |
Connectivity, elements, charge, isotopes and alkene geometry after native saving | Save-cycle checks pass for both figures |
Complete stereochemistry | Not accepted; RDKit and ChemScript return opposing assignments at some bridgeheads |
Visual comparison with the reference | Native previews and full comparisons inspected; font, arrow and some line geometry still differ |
Strict pixel-for-pixel 1:1 | Not achieved |
Save-cycle agreement does not establish perfect recognition of the reference. Compounds 105–109, 115–120 and 121 contain conflicting specified configurations; some expanded chains and abbreviation definitions in the source also need clarification. The reconstructions preserve each depiction rather than silently making the route chemically self-consistent. The atom-level comparison records component hashes and atom mappings for review; absence of a disagreement does not independently establish source stereochemistry.
After installing the runtime, rebuild these two layouts offline without repeating DECIMER recognition:
python examples/paper-reconstructions/rebuild.py ./paper-figures-outputUse a new output directory. This assembles saved molecular components; native previews still require Windows ChemDraw. See the rebuild example and limitations. Source paper artwork is not relicensed under the software license.
Publication figures
Create editable figures with explicit atom coordinates, six reaction-arrow styles, electron arrows, rich conditions, atom numbering and native-template preservation.
Tool | Use it for |
| Fixed-coordinate structures, arrows, rich text, grids, highlights and native templates |
| Inspect atom indices and CIP labels; explicit stereo edits, bounded stereoisomer/tautomer enumeration, MCS and R-group decomposition |
| Save side-by-side images and difference measurements for actual visual review |
The renderer checks chemical identity by extracting structures from the saved CDXML. Wavy bonds remain unspecified; enhanced AND/OR/ABS stereo groups are retained. Chemistry checks and visual similarity are separate: neither a valid SMILES nor a low image-difference score proves a faithful paper reproduction. Unsupported fresh radical and non-tetrahedral depictions require a verified native template.
Installation: these features require the source version installed by the Quick Start commands; they are not included in the v0.7.0a1 release.
What it provides
Area | Practical result |
Chemistry grounding | Resolve names, abbreviations, CAS numbers, formulas, and recognized image candidates through databases, ChemScript, OPSIN, or DECIMER. |
Controlled structure work | Compare molecules, apply named transformations, preserve stereochemistry, and inspect MCS-based structural differences. |
ChemDraw output | Draw molecules, clean or merge schemes, convert CDX/CDXML, and render native PNG or SVG files. |
Laboratory figures | Native TLC objects and Rf measurement; editable apparatus assembled from installed ChemDraw templates. |
Scientific data | Peak picking and selected-region integration for processed 1D NMR; editable numerical plots. No automatic atom assignment or complete FID pipeline. |
Office workflows | Extract, replace, and batch-embed editable ChemDraw OLE objects in PowerPoint and Word. |
Experiment workflows | Parse ELN exports, SciFinder RDF, LCMS or NMR reports, and assemble structured lab-book material. |
Agent service | Run through stdio locally or authenticated Streamable HTTP for a trusted remote computer. |
Quick start
Required: 64-bit Python 3.10–3.13. Portable CDXML and RDKit operations run without ChemDraw. Native rendering, ChemScript, and editable Office objects require Windows plus a licensed desktop ChemDraw installation. Python 3.14 is not supported yet.
conda create -n cdxml python=3.12 pip -y
conda activate cdxml
git clone https://github.com/ZiChenWang114514/cdxml-toolkit-community.git
Set-Location .\cdxml-toolkit-community
# Both distributions expose the cdxml_toolkit import package.
pip uninstall -y cdxml-toolkit
pip install -e ".[all]"
# Read-only environment and capability report.
cdxml-doctor --no-testsThe default installation includes the portable CDXML, RDKit, and MCP runtime. Optional groups are windows, office, chemscript, analysis, scientific, image, decimer, opsin, http, all, and dev.
Install the current community source directly when a checkout is unnecessary:
pip install "cdxml-toolkit-community[all] @ git+https://github.com/ZiChenWang114514/cdxml-toolkit-community.git@main"cdxml-doctor --no-tests does not change the machine. To detect ChemDraw and prepare a compatible ChemScript environment interactively, run:
cdxml-doctor --no-tests --configure-chemscript
cdxml-doctor --jsonChemScript is optional. OPSIN provides offline IUPAC name resolution when Java is available. The wheel does not bundle a JRE; the runtime first checks JAVA_HOME and java on PATH. A pre-approved local archive can be installed with explicit integrity metadata:
$env:CDXML_TOOLKIT_JRE_ZIP = "C:\installers\temurin-jre.zip"
$env:CDXML_TOOLKIT_JRE_SHA256 = "approved sha256"
cdxml-doctor --no-testsArchive size, extracted size, paths, links, and optional SHA-256 are checked before installation.
Connect an agent
Any MCP-compatible agent can connect to the runtime. Start the full 39-tool stdio service:
cdxml-mcpRegister the Python interpreter and arguments in your client's MCP configuration. A common JSON format is:
{
"mcpServers": {
"chemdraw": {
"command": "C:\\Users\\YOU\\miniconda3\\envs\\cdxml\\python.exe",
"args": ["-m", "cdxml_toolkit.mcp_runtime"]
}
}
}Configuration location and syntax depend on the client. Restart the agent, then try:
Resolve aspirin, draw it as CDXML, and render a PNG preview.For paper reconstruction and laboratory figures, load the client-independent ChemDraw Skill. The historical profile identifier codex remains available for compatibility; it does not restrict which agent can use the tools.
Copy CLAUDE.md into an agent workspace when the client supports project instructions. It tells the agent to obtain molecular structures from tools, use OCSR for images, preserve chemical semantics, and verify transformations instead of inventing structure strings.
How the runtime works
Important runtime properties:
Tool calls run in subprocess workers with configurable hard timeouts and structured errors.
ChemDraw, Word, and PowerPoint automation share serialized native-resource coordination.
Output-producing tools validate artifacts and avoid unintentionally replacing existing files.
Metrics record counts, duration, timeouts, worker failures, and queue length without tool arguments or molecular content.
get_toolkit_capabilitiesreports the available local features before an agent chooses a workflow.
Tool profiles
Choose the smallest useful profile to reduce tool-selection noise:
Profile | Tools | Focus |
| 16 | Compatible core tools plus capability discovery |
| 21 | Office inspection, replacement, templates, and batch embedding |
| 20 | Experiment discovery, LCMS series, lab books, and SciFinder RDF |
| 20 | Molecule comparison and controlled ChemScript SDK access |
| 39 | Complete local and remote collection |
The generated MCP tool reference and JSON schema contain the exact live signatures. CI checks both files for drift.
Streamable HTTP
Stdio remains the local default. An activated Windows workstation can serve a trusted remote computer after installing the http extra:
$env:CHEMDRAW_MCP_HTTP_API_KEY = "generate-a-long-random-value"
cdxml-mcp --transport streamable-http --host 0.0.0.0 --port 8029 `
--allowed-host chemdraw-host.example:8029 `
--allowed-origin https://trusted-client.exampleRemote binding requires a bearer key and an explicit host list. /health contains no molecule data; /metrics requires authentication when the server is remotely reachable.
DECIMER image upload is disabled by default. Remote recognition requires confirm_upload=true, validates that the payload decodes as an image, and enforces request and response limits.
Command line
Command | Purpose |
| Complete MCP runtime; 39-tool |
| Compatible 15-tool core server |
| Read-only diagnostics, tests, and explicit ChemScript setup |
| Render JSON, YAML, or compact text to CDXML |
| Render CDXML to PNG or SVG |
| Merge schemes or clean reaction layout |
| Embed editable ChemDraw objects in PPTX or DOCX |
| Parse instrument reports |
| Regenerate the Markdown and JSON tool references |
The scheme renderer accepts YAML, reaction JSON, and a compact text syntax described in the showcase catalog.
Development
python -m pip install -e ".[dev,windows,office,analysis,image,scientific]"
python -m pytest -m "not network" -q
python -m build
python -m twine check dist/*Hosted CI checks Python 3.10–3.13, MCP SDK 1.x and 2.x, generated references, portable tests, and distributions. Native ChemDraw, ChemScript, Word, and PowerPoint checks run on a licensed Windows workstation.
Read the contribution guide, security policy, and maintenance guide before proposing or releasing changes.
Community stewardship
This repository continues leehiufung911/cdxml-toolkit. The distribution is cdxml-toolkit-community; the compatible Python import remains cdxml_toolkit.
Community maintainer: ZiChenWang114514
Original author: Hiu Fung Kevin Lee (@leehiufung911)
Third-party data and component notices: NOTICE.md
License: MIT
The original project was directed by Hiu Fung Kevin Lee, a PhD organic chemist, and documented as built and tested with Claude Code (Opus 4.6).
Data-driven publication figures
Create substrate-scope and full-structure SAR panels from CSV/XLSX and trusted structures. Stable compound IDs bind measurements to editable ChemDraw objects. Update data or replace a structure after native editing while preserving unrelated layout and annotations; ambiguous matches produce conflict drafts. See the workflow and examples. XLSX support requires the toolkit publication extra.
Available Tools
35 toolsanalyze_lcms_seriesAnalyze Lcms SeriesC
Analyze a chronological series of standard LCMS PDF reports.
| Name | Required | Description | Default |
|---|---|---|---|
| files | Yes | ||
| output_path | No | ||
| mz_tolerance | No | ||
| rt_tolerance | No | ||
| trend_threshold | No | ||
| ignore_instrument | 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 of behavioral disclosure. It fails to mention what 'analyze' entails—whether it produces a summary, modifies files, requires specific permissions, or any side effects. The phrase 'chronological series' hints at ordering but does not describe the analysis logic or output format. This is a significant gap for a non-trivial 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 sentence, which is technically concise, but it is significantly under-specified rather than appropriately concise. It lacks necessary details about the tool's behavior and parameters, making it more a placeholder than a well-structured definition. The sentence is front-loaded with the verb, but that cannot compensate for the missing substance.
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 (6 parameters, no annotations, no output schema), the description is woefully incomplete. It does not explain the analysis workflow, expected inputs, output format, or how parameters influence behavior. An agent would have no idea what to expect or how to invoke this tool correctly beyond providing a list of files.
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 for the six parameters. It mentions 'standard LCMS PDF reports' but does not clarify the purpose of 'files', 'output_path', 'mz_tolerance', 'rt_tolerance', 'trend_threshold', or 'ignore_instrument'. Without any parameter explanation, agents cannot infer correct usage from the description alone.
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 'Analyze' and the resource 'a chronological series of standard LCMS PDF reports'. This is specific enough to distinguish it from generic parsing tools, though it does not name an explicit alternative or sibling. The purpose is understandable but not fully differentiated from similar tools like parse_analysis_file or discover_experiment_files.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description offers no guidance on when to use this tool versus alternatives, no prerequisites, no exclusions, and no context about the intended workflow. It merely states what it does without indicating scenarios where it is preferred or where another tool (e.g., parse_analysis_file for single files) would be more appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
assemble_lab_bookAssemble Lab BookC
Assemble a deterministic lab-book entry from experiment files.
| Name | Required | Description | Default |
|---|---|---|---|
| input_dir | Yes | ||
| experiment | No | ||
| output_path | No | ||
| tracking_json | 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 of behavioral disclosure. The word 'deterministic' hints at output consistency, but the description fails to mention side effects (e.g., file creation at output_path), required permissions, or behavior on missing files. This is a significant gap for a tool with multiple optional parameters.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence, which is good for brevity, but it is too under-specified for a tool with four parameters and no other metadata. It front-loads the core purpose but omits essential details that would justify its length; it is concise but not appropriately informative.
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 complexity (4 parameters, 1 required, no annotations, no output schema), the description is grossly inadequate. It does not explain what constitutes a lab-book entry, how experiment files are discovered, what the optional parameters do, or what the return value looks like. This is not complete enough for an agent to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameter meanings, but it does not mention any parameters at all. The agent gets no insight into what input_dir, experiment, output_path, or tracking_json represent or how they influence the assembly, making the tool nearly unusable 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 tool assembles a lab-book entry from experiment files, with 'deterministic' adding specificity about output behavior. However, it does not explicitly distinguish it from sibling tools like format_lab_entry, which might also generate lab-related content, so it only partially differentiates.
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 no guidance on when to use this tool versus alternatives, nor does it mention prerequisites or exclusions. It simply states what it does without context, leaving the agent to guess about appropriate invocation scenarios.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_compare_moleculesBatch Compare MoleculesC
Compare up to 256 molecule pairs with one ChemScript bridge session.
| Name | Required | Description | Default |
|---|---|---|---|
| pairs | Yes | ||
| n_bits | No | ||
| radius | No | ||
| fingerprint | No | morgan |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It mentions 'one ChemScript bridge session' implying an efficiency aspect, but does not disclose side effects, prerequisites, error behavior, rate limits, or whether the operation is read-only. The agent is left without critical context for a tool that likely interacts with an external SDK.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, front-loaded sentence with no filler words. It delivers the core purpose and a key constraint (the 256-pair limit and single session) efficiently, earning full marks for conciseness and structure.
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 batch tool with four parameters, no output schema, and no annotations, this one-liner is grossly incomplete. It omits parameter semantics, output format, error handling, and any prerequisites. An agent cannot correctly call this tool without additional documentation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description does not explain any of the four parameters except implicitly referring to 'molecule pairs' (for the 'pairs' parameter). It gives no information about n_bits, radius, or fingerprint, which are essential for controlling the comparison. The description fails to compensate for the lack of schema documentation.
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 action ('Compare') with a specific resource ('molecule pairs') and a batch scope ('up to 256'), which distinguishes it from the sibling 'compare_molecules' (singular). However, it does not specify the type of comparison (e.g., structural similarity, identity), leaving the exact nature of the operation slightly ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage context is implied by the name and the phrase 'batch' and 'up to 256 molecule pairs', suggesting it is for multiple comparisons. However, there is no explicit statement about when to use this versus the singular 'compare_molecules' tool, and no exclusions or alternative guidance are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_embed_cdxml_in_officeBatch Embed Cdxml In OfficeC
Create PPTX or DOCX containing editable ChemDraw OLE objects.
| Name | Required | Description | Default |
|---|---|---|---|
| margin_pt | No | ||
| cdxml_paths | Yes | ||
| output_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states that it 'creates' files, but does not mention whether it overwrites existing files, requires a specific environment (e.g., Office or ChemDraw), handles multiple inputs, or any side effects. For a file-generation tool, this is a significant gap.
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 with no fluff, which is efficient. However, it is under-specified for a tool that creates complex office documents with OLE objects, and the brevity sacrifices necessary context. It earns a middle score because it is concise but not fully informative.
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, no annotations, and zero parameter documentation, the description is far from complete. It omits runtime behavior, output specifications, handling of multiple files (despite the batch name), and potential error cases. An agent cannot reliably predict the tool's behavior from this one-liner.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, and the description does not explain any of the three parameters (cdxml_paths, output_path, margin_pt). It adds no meaning beyond what the parameter names alone suggest, and it fails to compensate for the lack of schema descriptions, leaving parameter semantics entirely to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Create') and resource ('PPTX or DOCX containing editable ChemDraw OLE objects'), which identifies the action and output format. However, it does not distinguish itself from the sibling tool 'embed_cdxml_in_office', and it relies on the tool name to convey batch processing, making it clear but not fully differentiated.
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 no guidance on when this tool should be used over alternatives, such as the singular 'embed_cdxml_in_office' or other office-related tools. It does not mention criteria like batch vs. single-file needs, prerequisites, or when not to use it, leaving the agent without routing context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
clean_scheme_layoutClean Scheme LayoutC
Clean an existing CDXML reaction layout without changing the source file.
| Name | Required | Description | Default |
|---|---|---|---|
| approach | No | chemdraw_mimic | |
| input_path | Yes | ||
| output_path | No | ||
| render_preview | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility. It states the tool does not change the source file, which is a useful behavioral note, but it does not disclose what 'clean' does, whether it produces an output file, or any side effects. This is minimal for a tool with a mutating-sounding action.
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, efficient sentence with no fluff. It front-loads the main purpose and adds the key constraint. It is concise, though it sacrifices needed detail for brevity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With four parameters, no schema descriptions, no output schema, and no annotations, this tool demands a richer description. The one-liner does not explain the cleaning approach, output handling, or preview behavior. The agent lacks sufficient information to invoke it correctly beyond providing input_path.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It only implicitly references input_path via 'existing CDXML reaction layout' but does not explain approach, output_path, or render_preview. The agent gets no guidance on what these parameters mean or how they affect behavior.
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 ('clean') and the resource ('existing CDXML reaction layout'), and adds the distinguishing constraint 'without changing the source file.' This is specific and distinguishes it from siblings like polish_reaction_scheme, though it does not name alternatives explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no indication of when to use this tool versus the many sibling tools (e.g., polish_reaction_scheme, render_scheme). It does not provide context, preconditions, or exclusions, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
compare_moleculesCompare MoleculesB
Compare two molecule representations using ChemScript identity and RDKit Tanimoto fingerprints.
| Name | Required | Description | Default |
|---|---|---|---|
| n_bits | No | ||
| radius | No | ||
| molecule_a | Yes | ||
| molecule_b | Yes | ||
| fingerprint | No | morgan |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full responsibility for behavioral disclosure. The description mentions the internal comparison methods but does not state whether the operation is read-only, what the return value looks like (similarity score, boolean, or something else), whether errors can occur on invalid input, or any side effects. This lack of behavioral detail is a significant gap.
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, concise sentence with no fluff. The core action and methods are front-loaded, making it immediately scannable. There is no redundant or misleading 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?
Given the tool has 5 parameters, no output schema, and no parameter descriptions, the description is far from complete. An agent needs to know what each parameter does, the expected input format, and what the result looks like to call this tool correctly. The description only provides a high-level goal without bridging these gaps, making it inadequate for a tool with this 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?
The schema description coverage is 0%, so the description must compensate. The description mentions 'Tanimoto fingerprints', which gives a hint about the 'fingerprint' parameter (likely the fingerprint type), but it does not explain 'n_bits' or 'radius' (which are common fingerprint parameters) or the expected format of 'molecule_a' and 'molecule_b'. Agents are left guessing about the meaning of these 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 action ('Compare two molecule representations') and specifies the methods ('ChemScript identity and RDKit Tanimoto fingerprints'). It distinguishes the tool from siblings like batch_compare_molecules (which presumably handles multiple comparisons) and other molecule-processing tools. The verb+resource combination is specific and unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The usage is implied: use this tool when you need to compare exactly two molecules. However, there is no explicit guidance about when to use this versus alternatives (e.g., batch_compare_molecules for multiple comparisons, or other analysis tools). The description does not mention when not to use it or any prerequisites like input format requirements.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
convert_cdx_cdxmlA
Convert bidirectionally between CDX (binary) and CDXML (XML) formats.
Direction is detected from the file extension:
.cdx input → .cdxml output
.cdxml input → .cdx output
Uses available backends in order: ChemDraw COM (best fidelity, Windows) → pycdxml (pure Python, partial support) → OpenBabel.
ChemDraw COM requires ChemDraw to be installed and closed before running.
Args: input_path: Path to .cdx or .cdxml file. output_path: Output file path. If not given, same directory as input with the swapped extension (e.g. foo.cdx → foo.cdxml).
Returns: Dict with keys: ok, input, output (absolute path to written file). Returns {ok: False, error: "..."} if conversion fails.
Safety override: Convert CDX/CDXML through a validated no-overwrite staging file.
| Name | Required | Description | Default |
|---|---|---|---|
| input_path | Yes | ||
| output_path | 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 of behavioral disclosure. It thoroughly describes the conversion logic (extension detection), backend selection and prerequisites, the return dict format including error handling, and even a safety override for no-overwrite staging. This leaves little to inference and fully informs the agent of expected behavior and side effects.
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 clear sections and front-loaded purpose. It is slightly longer than minimal but every sentence adds value: backend details, prerequisites, return format, and safety. The safety override line, while specific, is useful context. It could be trimmed by omitting the explicit 'Returns' dict details, but it remains efficient and readable.
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 (backend selection, extension detection, output defaults, error handling), the description covers all necessary aspects. It explains the return dict even though no output schema exists, making it fully complete for an agent to invoke correctly. No critical information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully compensate. The Args section explains both parameters: input_path (a path to .cdx or .cdxml) and output_path (optional, with detailed default behavior: same directory, swapped extension). This adds essential meaning beyond the bare schema and clarifies the exact usage of each parameter.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool converts bidirectionally between CDX and CDXML formats, with the direction determined by file extension. This is a specific verb-resource pair that distinguishes it from sibling tools like render_cdxml_files (rendering) or extract_cdxml_from_office (extraction), leaving no ambiguity about its core function.
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 the tool is used (conversion) and provides backend selection details, including the requirement that ChemDraw COM needs ChemDraw installed and closed. It does not explicitly exclude alternative tools, but the purpose is clear enough that an agent would know to use this for CDX/CDXML conversion. It also notes the backend fallback order, offering practical guidance on expected behavior.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
diagnose_runtimeDiagnose RuntimeC
Report local runtime capabilities; native probes are explicit and temporary.
| Name | Required | Description | Default |
|---|---|---|---|
| run_native_probe | No | ||
| run_office_probe | No | ||
| run_chemscript_probe | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must disclose behavioral traits. It adds that 'native probes are explicit and temporary,' which hints at non-persistent side effects, but it doesn't explain what this means in practice (e.g., whether probes spawn processes, if they are safe, or the nature of the report). Most behavioral details are absent.
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 brief, comprising a single sentence. While there is no fluff, it is under-specified and fails to provide essential information about the probes or the report format. It is concise but not appropriately sized for the tool's complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a diagnostic tool with three parameters, no annotations, and no output schema. The description does not explain what the probes do, what the report contains, or how the results should be interpreted. It is severely incomplete for an agent to call it correctly and use its results.
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 by explaining the meanings of run_native_probe, run_office_probe, and run_chemscript_probe. It does not mention any parameters or their effects, leaving the agent without any clue what these booleans control.
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 local runtime capabilities, which is a clear verb and resource. It implicitly distinguishes from siblings like get_toolkit_capabilities by focusing on runtime rather than toolkit capabilities. However, it doesn't explicitly mention the three probe types (native, office, chemscript) that the parameters suggest, so specificity is slightly lacking.
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 no guidance on when to use this tool versus alternatives, no preconditions, and no context such as using it to check runtime before running other tools. It only states its purpose, leaving the agent to infer when to call it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
discover_experiment_filesDiscover Experiment FilesC
Discover and classify files belonging to one experiment.
| Name | Required | Description | Default |
|---|---|---|---|
| input_dir | Yes | ||
| experiment | No | ||
| output_path | 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 behavior. It only says 'discover and classify' without indicating side effects, whether it writes files (output_path suggests possible), permission requirements, or limitations. This is insufficient for an agent to understand the tool's impact or safety profile.
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, concise sentence that front-loads the purpose with no wasted words. It is efficiently structured and easy to parse. However, it is so terse that it verges on under-specification, but as purely a conciseness measure, it earns a high score.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With three parameters, no output schema, and no annotations, the description must provide substantial context but offers almost none. It does not state what the tool returns, how classification works, or when to use it. An agent would be unable to call this tool correctly without additional documentation, making it severely incomplete for its 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 description coverage is 0%, and the description gives no explanation of the parameters (input_dir, experiment, output_path). The agent must infer meaning solely from names, which are not self-explanatory (e.g., what format for experiment? What does output_path control?). The description adds zero value beyond the schema fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states the tool discovers and classifies files belonging to one experiment, providing a clear verb and resource. It is not a tautology and is distinct from siblings like parse_analysis_file or search_compound, though it does not explicitly differentiate itself. It lacks specifics on file types or classification scheme, but the core purpose is understandable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives. There is no mention of prerequisites, context, or exclusions. An agent cannot determine if this tool is appropriate for a given task compared to similar file-related operations, so it fails to support tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
draw_moleculeA
Render a single molecule to a standalone CDXML document.
Takes a molecule dict (at minimum {"smiles": "..."}) and generates a self-contained CDXML string with 2D coordinates in ACS Document 1996 style (BondLength=14.40, Arial 10pt). Optionally places a text label below the structure using the "label", "name", or "iupac_name" field (in that order).
IMPORTANT: Do NOT construct {"smiles": "..."} with hand-edited SMILES. Always get mol_json from another tool (resolve_name, modify_molecule, parse_reaction, etc.). If you need to edit a SMILES, use modify_molecule(operation="set_smiles") first — it gives you an MCS diff to verify the edit was correct before drawing.
Args: mol_json: Molecule dict with at least {"smiles": "..."}. Optional display fields: "label" (used verbatim), "name", "iupac_name". Should come from another tool's output, not hand-constructed. output_path: If given, also write CDXML to this file path.
Returns: Dict with keys: ok, cdxml (CDXML document string), and output_path if a path was specified. Returns {ok: False, error: "..."} on failure.
Safety override: Draw a molecule through a validated no-overwrite staging file.
| Name | Required | Description | Default |
|---|---|---|---|
| mol_json | Yes | ||
| output_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden. It discloses output format (CDXML string), return dict keys (ok, cdxml, output_path), error handling ({ok: False, error: "..."}), and a safety note about no-overwrite staging. This transparently covers all behavioral aspects relevant to an agent.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a leading summary, clear Args/Returns sections, and critical warnings front-loaded. Each sentence provides necessary information without redundancy, balancing depth with conciseness.
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 complexity of the task (molecule rendering, CDXML output, safety considerations), the description is complete. It covers input requirements, output structure, error cases, sources for valid mol_json, and even a safety override note, leaving no critical information missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It fully explains mol_json (minimum required SMILES, optional fields label/name/iupac_name, and the directive to source from other tools) and output_path (optional file write). Every parameter's meaning and constraints are clarified.
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 specific action and resource: 'Render a single molecule to a standalone CDXML document,' and differentiates from sibling tools like render_scheme and render_to_png by specifying output as CDXML with ACS style. The verb 'render' and resource 'molecule' are unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage rules: 'Do NOT construct {"smiles": "..."} with hand-edited SMILES. Always get mol_json from another tool...' and explicitly names the alternative (modify_molecule) for editing SMILES, along with a rationale (MCS diff verification). This fully informs when to use and when not to use the tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
embed_cdxml_in_officeA
Embed a CDXML file as an editable ChemDraw OLE object in PPTX or DOCX.
Converts CDXML → CDX + EMF preview via ChemDraw COM, builds a CFB OLE compound file, and injects it into a PPTX slide or DOCX paragraph as a double-clickable, editable ChemDraw object.
Requires: ChemDraw COM (Windows, ChemDraw 16+), python-pptx or python-docx. ChemDraw must be installed and closed before calling this tool.
The output format (.pptx or .docx) is detected from office_path extension. If office_path does not exist, a new file is created.
Args: cdxml_path: Path to the CDXML file to embed. office_path: Path to the target .pptx or .docx file. Created if it does not exist. output_path: Output file path. If not given, writes to office_path (modifies in place via temp file).
Returns: Dict with keys: ok, input_cdxml, output (absolute path to written Office file), format ("pptx" or "docx"), num_objects_embedded. Returns {ok: False, error: "..."} if embedding fails.
Safety override: Create a new validated PPTX or DOCX and reject all existing targets.
| Name | Required | Description | Default |
|---|---|---|---|
| cdxml_path | Yes | ||
| office_path | Yes | ||
| output_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full behavioral disclosure. It reveals the conversion process (CDXML → CDX + EMF), the OLE compound file construction, in-place modification behavior when output_path is omitted, file creation when office_path doesn't exist, and the exact return dict structure including error handling. The 'Safety override' note adds further transparency about operational constraints.
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 thorough, structured with an Args/Returns section, and front-loaded with the core purpose. It is longer than minimal but every sentence adds necessary detail (prerequisites, behavior, return schema, safety note) without redundancy. Slight verbosity in the explanatory first paragraph could be trimmed, but it remains well-organized.
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 tool with non-trivial complexity (OLE embedding, COM dependency, multiple output modes), the description covers prerequisites, input/output behavior, error conditions, return format, and even a safety override. It leaves no critical ambiguity for an agent to resolve—everything needed for correct invocation and result interpretation is present.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides only types and names with zero descriptions (0% coverage). The description fully compensates by explaining each parameter: cdxml_path is the CDXML source, office_path is the target PPTX/DOCX (created if missing, format detected from extension), and output_path is optional with default to office_path. This is significantly more informative than the schema alone.
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 precise, specific action: embedding a CDXML file as an editable ChemDraw OLE object into PPTX or DOCX. It names the input, output, and conversion pipeline (CDXML → CDX + EMF via ChemDraw COM). It clearly distinguishes from sibling tools like extract_cdxml_from_office (reverse operation) and batch_embed_cdxml_in_office (batch variant) by its singular-target nature.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit prerequisites (ChemDraw COM, Windows, ChemDraw 16+, python-pptx/docx) and a critical precondition ('ChemDraw must be installed and closed'), which is essential for correct invocation. However, it does not explicitly state when to use this tool versus batch_embed_cdxml_in_office or other alternatives—though the singular-target behavior is implied by the name and description.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
execute_chemscript_sdkExecute Chemscript SdkC
Execute a declarative ChemScript SDK program in an isolated Python.NET process.
| Name | Required | Description | Default |
|---|---|---|---|
| program | Yes | ||
| max_items | No | ||
| allow_file_io | No | ||
| allow_overwrite | No | ||
| allow_unsafe_interop | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for disclosing behavior. It mentions 'isolated Python.NET process', which hints at sandboxing, but fails to disclose side effects (despite parameters like allow_file_io and allow_overwrite), error handling, resource limits, or the nature of the result. The description is too sparse to give an agent confidence in what actually happens when the program runs.
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 and is indeed concise, but it is under-specified for the complexity of the tool. It sacrifices necessary detail for brevity, making it inappropriately minimal given the absence of schema descriptions and annotations. It is front-loaded with the purpose, but the anemic content does not earn conciseness credit.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This tool has 5 parameters, no output schema, no annotations, and 0% schema description coverage. The one-sentence description fails to explain how to construct the program array, what the boolean flags do, what the return value looks like, or any operational context. An agent cannot safely invoke this tool without additional external knowledge, so it is far from 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% for all five parameters, and the description adds no explanation of any parameter. The 'program' array is only described as 'declarative ChemScript SDK program' but its structure, possible entries, and required shape are unexplained. The other parameters (max_items, allow_file_io, allow_overwrite, allow_unsafe_interop) are completely undocumented in both schema and description, forcing an agent to guess their semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific action verb ('Execute') with a clear resource ('a declarative ChemScript SDK program') and an execution context ('in an isolated Python.NET process'). It differentiates from siblings like 'inspect_chemscript_sdk' which is about inspection rather than execution, making it unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, no mention of prerequisites, and no conditions that would make this tool preferable. It does not name related tools such as inspect_chemscript_sdk or explain the differences in usage scenarios. The agent is left to infer context from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_cdxml_from_officeA
Extract embedded ChemDraw objects from a PPTX, DOCX, XLS, or XLSX file.
Office files (PPTX/DOCX/XLSX) are ZIP archives that may contain ChemDraw OLE objects as binary blobs. XLS files are OLE2 compound documents with embedded ChemDraw objects stored in MBD* sub-storages. This tool extracts every ChemDraw object, converts it to CDXML, and writes the files to output_dir.
Requires: olefile. CDX→CDXML conversion uses available backends.
Args: file_path: Path to a .pptx, .docx, .xlsx, or .xls file. output_dir: Directory for extracted CDXML files. Default: a folder named "_chemdraw/" next to the input file.
Returns: Dict with keys: ok, input, output_dir, objects (list of: source_path, cdxml_output, cdx_output, error for each extracted object). Returns {ok: False, error: "..."} if extraction fails entirely.
Safety override: Extract every object transactionally; publish nothing on partial failure.
| Name | Required | Description | Default |
|---|---|---|---|
| file_path | Yes | ||
| output_dir | 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 of behavioral disclosure. It explains the extraction process, the conversion to CDXML, output directory behavior, the return dictionary structure, and failure semantics ('publish nothing on partial failure'). This exceeds what would be expected for a simple extraction 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 relatively long but well-structured into logical sections (purpose, technical detail, requirements, args, returns, safety). The purpose is front-loaded, and every sentence contributes value (e.g., file format internals, transactionality). A minor deduction for verbosity that could be tightened.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for an extractor tool with no output schema. It details supported inputs, conversion backends, dependencies (olefile), output directory default, return keys, and failure handling. An agent has everything needed to call it correctly without additional inference.
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%, yet the description fully compensates by specifying the file path types ('a .pptx, .docx, .xlsx, or .xls file') and the output_dir default ('a folder named "<basename>_chemdraw/" next to the input file'). This adds semantic meaning beyond the bare schema field names.
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 a specific verb ('extract'), a specific resource ('embedded ChemDraw objects from a PPTX, DOCX, XLS, or XLSX file'), and differentiates from sibling tools like convert_cdx_cdxml (file format conversion) and extract_structures_from_image (image extraction). The scope is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description scopes usage to office files and explains the underlying storage (ZIP vs OLE2) for each format, which helps an agent understand when this tool applies. It does not explicitly name alternatives to avoid, but the format-specificity combined with sibling tool names provides adequate guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_structures_from_imageA
Extract chemical structures from an image using DECIMER.
Takes a PNG, JPG, or PDF image and returns SMILES + confidence scores + bounding boxes for every detected chemical structure. Segments the image into individual structure regions automatically. Optionally detects nearby text labels via OCR.
DECIMER models download on first run (~570 MB to ~/.data/DECIMER-V2/). Requires: DECIMER, opencv-python, and optionally pytesseract/easyocr.
The returned SMILES should be passed through resolve_name or modify_molecule to verify and enrich — DECIMER SMILES may not be canonical and can have low confidence for complex structures.
Args: image_path: Path to PNG, JPG, or PDF file. detect_labels: Attempt OCR detection of text labels near structures. Requires pytesseract or easyocr; labels are null without an OCR library. Default True.
Returns: Dict with keys: ok, image_path, structures (list of: smiles, confidence in [0,1], bbox [x0,y0,x1,y1], label or null). Returns {ok: False, error: "..."} if DECIMER is not installed or extraction fails.
| Name | Required | Description | Default |
|---|---|---|---|
| image_path | Yes | ||
| detect_labels | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral burden and delivers thoroughly. It discloses that DECIMER models download on first run (with size and path), lists required dependencies, specifies that OCR is optional and labels default to null without libraries, details the return dictionary shape including error handling ({ok: false, error: ...}), and notes that SMILES may not be canonical or low-confidence for complex structures. This is exemplary 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 structured with clear sections (intro, requirements, usage, args, returns). It front-loads the core purpose and input/output types. While it is somewhat lengthy, every sentence adds essential information (dependencies, error behavior, downstream hints), so it is appropriately sized rather than bloated. A minor improvement would be splitting the 'Requires' note into a dedicated section for scannability.
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 tool with only 2 parameters and no output schema, the description covers all necessary context: input formats, exact output structure, error handling, dependencies, model download behavior, and downstream verification advice. An agent has complete information to decide whether to call this tool and how to interpret its results. Nothing critical is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must fully explain parameters, and it does. image_path is defined as 'Path to PNG, JPG, or PDF file,' and detect_labels is explained with its behavior, dependencies, and default (True). The description also explains what each parameter affects in the output, enabling correct argument values without schema assistance.
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 precise verb-resource-method statement: 'Extract chemical structures from an image using DECIMER.' It names the exact input formats and outputs, making the tool's purpose unambiguous and distinct from siblings like extract_structures_via_decimer_api (which implies a different execution mode) and other image/format converters.
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 by specifying input types (PNG, JPG, PDF) and mentions DECIMER requires models to download, signaling a local execution setting. It does not explicitly contrast with extract_structures_via_decimer_api, but it does route downstream use by advising to pass results through resolve_name or modify_molecule for verification, which provides actionable guidance on when to use this tool in a workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
extract_structures_via_decimer_apiExtract Structures Via Decimer ApiC
Upload an image to DECIMER only when confirm_upload is explicitly true.
| Name | Required | Description | Default |
|---|---|---|---|
| hand_drawn | No | ||
| image_path | Yes | ||
| output_path | No | ||
| confirm_upload | No | ||
| approved_origin | No | ||
| approved_sha256 | No | ||
| timeout_seconds | 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 a behavioral constraint (the confirm_upload condition) but says nothing about side effects, output format, prerequisites, or reversibility. The upload-only framing is misleading about the actual extraction functionality.
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 single sentence is concise but under-specified. It doesn't front-load essential information about what the tool does or how to use it. The sentence reads like a guardrail instruction, not a tool definition, so it is under-specification rather than effective conciseness.
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 tool with 7 parameters, no output schema, and no annotations, this description is grossly incomplete. An agent cannot determine correct usage, expected return, or even the core function. The description provides almost none of the context needed for reliable invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage for its 7 parameters. The description mentions confirm_upload but adds no semantic meaning beyond its name. It does not explain image_path, hand_drawn, output_path, approved_origin, approved_sha256, or timeout_seconds, nor how they interact. The description fails to compensate for the lack of schema information.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('upload an image to DECIMER') and resource, but omits the tool's actual purpose of extracting chemical structures, which is only implied by the name. It also does not differentiate from the sibling 'extract_structures_from_image', leaving purpose ambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The only guidance is a conditional caveat ('only when confirm_upload is explicitly true'), which is a parameter precondition rather than a usage guideline. It provides no context on when to choose this tool over alternatives or any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
fill_office_templateFill Office TemplateC
Fill PPTX/DOCX text and editable ChemDraw placeholders from a manifest.
| Name | Required | Description | Default |
|---|---|---|---|
| output_path | No | ||
| manifest_path | Yes | ||
| template_path | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It does not mention whether the operation modifies files in place, whether it requires specific permissions, whether it is destructive (overwriting placeholders), or what happens to existing content. It also does not describe the manifest format or expected behavior. For a mutation tool that fills placeholders, this is a significant gap in 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, efficient sentence that front-loads the primary action ('Fill') and the target resource. It is appropriately concise for a simple tool, but it omits essential details that would improve usability. Given that it is short and to the point, it earns a 4 for conciseness, though it sacrifices completeness.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With three parameters, no output schema, and no annotations, the description leaves many gaps: the manifest format, placeholder syntax, file type constraints, handling of output_path (what happens if null?), return value, and error behavior are all unspecified. This is inadequate for an agent to correctly invoke the tool without additional context. The description is far from complete for the complexity involved.
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 for the lack of parameter information. The description only hints at the manifest_path ('from a manifest') but does not explain the structure or expected content of the manifest, nor does it clarify the role of output_path (default null) or template_path beyond their names. The tool description adds minimal value over what the parameter names suggest, especially given the absence of schema descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear action 'Fill' targeting a specific resource ('PPTX/DOCX text and editable ChemDraw placeholders') from a 'manifest'. This distinguishes it from sibling tools that embed, extract, or replace ChemDraw objects. However, the term 'manifest' is undefined, and it does not explicitly differentiate from tools like replace_chemdraw_objects_in_office, which also modify content in office files. The purpose is clear but not perfectly precise.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
There is no guidance on when to use this tool versus alternatives such as embed_cdxml_in_office, replace_chemdraw_objects_in_office, or inspect_chemdraw_objects_in_office. The description gives no context about scenarios, prerequisites, or exclusions. An agent would struggle to know if this is the right tool for a given task without additional information.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
format_lab_entryA
Format a list of entry dicts into a structured lab book text entry.
Takes a list of typed entry dicts (or a JSON string) and produces a formatted lab book entry. The tool re-parses LCMS PDFs to fill in exact numbers — you only provide peak identifications (name, approximate RT, ion) as search keys.
IMPORTANT: Do NOT write free-form LCMS text. Use the structured entry types below. The tool will look up the actual RT, area%, m/z, and UV from the PDF.
Entry types and their required fields:
{"type": "text", "content": "Procedure paragraph or section header..."}
{"type": "lcms-species", "file": "path/to/report.pdf", "label": "t = 0 min", "peaks": [ {"name": "Product", "rt": 1.02, "ion": {"mode": "ES-", "mz": 444.1}}, {"name": "SM", "rt": 0.65, "ion": {"mode": "ES+", "mz": 275.1}}, {"name": "TPPO", "rt": 1.02, "ion": {"mode": "ES+", "mz": 279.1}} ]}
{"type": "lcms-areas", "file": "path/to/report.pdf", "label": "t = 10 min", "peaks": [ {"name": "Product", "rt": 1.03, "compound_related": true}, {"name": "Byproduct", "rt": 1.26, "compound_related": false} ]}
{"type": "lcms-species", "file": "path/to/report.pdf", "label": "Purified product", "peaks": [ {"name": "Product", "rt": 1.01, "ion": {"mode": "ES-", "mz": 444.2}, "purity": true, "detector": "220nm"} ]}
{"type": "lcms-manual", "file": "path/to/manual_integration.pdf", "label": "Manual LC", "peaks": [ {"name": "Product", "rt": 1.01, "compound_related": true} ]}
{"type": "nmr", "content": "1H NMR (400 MHz, DMSO-d6): ..."}
Workflow: First call parse_analysis_file on each PDF to see peaks/masses. Then build entries referencing those PDFs with approximate RT and ion as search keys. This tool re-reads the PDF and fills in exact numbers.
Args: entries_json: List of entry dicts, or a JSON string, or {"entries": [...]}. output_path: If given, write the formatted text to this file and return {ok, output_path, size} instead of {ok, text}.
Returns: Dict with keys: ok, text (formatted lab book entry string). When output_path is provided, returns {ok, output_path, size} instead.
Safety override: Format a lab entry and atomically publish verified text.
| Name | Required | Description | Default |
|---|---|---|---|
| output_path | No | ||
| entries_json | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full disclosure burden, and it does so well. It reveals the key behavioral trait — 're-parses LCMS PDFs to fill in exact numbers' and 'look up the actual RT, area%, m/z, and UV from the PDF' — so the agent knows inputs are approximate search keys. It also discloses both return shapes ({ok, text} vs {ok, output_path, size}). The 'Safety override' line mentioning 'atomically publish verified text' is slightly cryptic and not fully reconciled with the stated returns, but it does gesture at an unstated publishing side-effect. No annotation contradiction exists since none are provided.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long, but front-loaded with purpose and a critical warning. Each section earns its place: the entry-type examples are verbose yet necessary because the schema provides zero structure for these payloads. The workflow, args, and returns sections are tight. Minor deduplication exists (entry-type example for 'lcms-species' appears twice with different fields), and the 'Safety override' line is tangential, but overall the length is justified by the schema gap.
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 (five entry types, nested peak/ion structures, PDF re-parsing, two return modes) and 0% schema coverage, the description covers nearly everything needed to call it correctly: entry schemas, required fields, workflow, parameter forms, and return behavior. The main gap is failure handling — what happens when a search-key match fails or a PDF can't be re-parsed — but for the task of formatting entries, the essential calling contract is fully specified.
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 fully compensate — and it does. entries_json is documented with all three accepted shapes ('List of entry dicts, or a JSON string, or {"entries": [...]}'), and output_path is explained with its effect on the return value (write to file and return path/size instead of text). The extensive entry-type examples actually document the nested structure that the schema (additionalProperties: true) leaves opaque. This adds real meaning beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Format'), a precise input ('a list of typed entry dicts or a JSON string'), and a concrete outcome ('a structured lab book text entry'). It clearly distinguishes itself from siblings like parse_analysis_file (which parses, not formats) and assemble_lab_book (which assembles a full book, this formats single entries). An agent can tell exactly what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides an explicit workflow: 'First call parse_analysis_file on each PDF to see peaks/masses. Then build entries referencing those PDFs...' This directly names the sibling prerequisite and sequencing. It also gives a negative constraint ('Do NOT write free-form LCMS text'). It doesn't list exclusions for when NOT to use this tool (e.g., for non-LCMS formatting alternatives), but the positive guidance is strong and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_toolkit_capabilitiesGet Toolkit CapabilitiesA
Return versions, profile, tool schema digest, and local capability status.
| 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 of behavioral disclosure. It does state what information is returned (versions, profile, tool schema digest, local capability status), implying a read-only getter operation. However, it does not explicitly mention that it has no side effects, nor does it disclose any potential cost, caching, or failure modes. The listing of returns is helpful but minimal.
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, efficient sentence that front-loads the action ('Return') and specifies the exact contents. There is zero wasted text, and it covers all essential information in a compact format.
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?
While the tool is simple (no params, no output schema), the description does not provide guidance on when an agent would need this information. It lists what is returned but does not explain the purpose or value of these fields. For an introspection tool, more context about its typical use (e.g., 'Call this before using other tools to confirm available capabilities') would be beneficial.
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, and schema coverage is 100% (vacuously). With no parameters to describe, the baseline is 4. The description appropriately doesn't attempt to document parameters since there are none, and adding parameter detail would be redundant.
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: it returns versions, profile, tool schema digest, and local capability status. This is a specific verb+resource combination, and the list of returned items distinguishes it from all sibling tools, which are focused on domain-specific operations like molecule conversion or rendering.
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 no guidance on when to use this tool versus others. As a capabilities/introspection tool, it would likely be called before other operations to check versions or support, but this is not stated. There are no alternatives mentioned or exclusions given, leaving the agent to infer usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_chemdraw_objects_in_officeInspect Chemdraw Objects In OfficeC
Inventory editable ChemDraw objects and extract numbered CDXML previews.
| Name | Required | Description | Default |
|---|---|---|---|
| input_path | Yes | ||
| output_dir | No | ||
| render_previews | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It implies a read-only operation by using 'inventory' and 'inspect', but it does not explicitly state whether the input file is modified, what side effects occur, or whether permissions are needed. The existence of output_dir and render_previews suggests writes, but this is not described.
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, concise sentence with no filler or redundancy. It is well-structured and immediately scannable.
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 (3 params, 0% schema coverage, no output schema) and the similarity to siblings, the description is incomplete. It does not define the input format, what qualifies as an 'editable ChemDraw object,' or the structure of the numbered CDXML previews. An agent would lack critical information to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain each parameter's meaning and usage. It does not describe input_path, output_dir, or render_previews. The phrase 'numbered CDXML previews' hints at output artifacts but does not clarify what output_dir or render_previews control. Parameters remain 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 states a clear purpose: inventory editable ChemDraw objects and extract numbered CDXML previews. It uses a specific verb-resource combination that indicates what the tool does. However, it does not differentiate from similar siblings like extract_cdxml_from_office, which also deals with CDXML extraction, so it lacks explicit sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives no guidance on when to use this tool versus alternatives. It does not mention prerequisites, limitations, or the situations in which this tool is preferred over siblings like extract_cdxml_from_office or batch_embed_cdxml_in_office. The agent is left to infer usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_chemscript_sdkInspect Chemscript SdkC
Catalog every public ChemScript type/member, with filtering or a complete JSON export.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | No | ||
| offset | No | ||
| type_name | No | ||
| output_path | No | ||
| include_infrastructure | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full responsibility for behavioral disclosure. It implies a read-only cataloging operation but does not explicitly state side effects, performance implications, whether the output is a snapshot, or any access requirements. It also doesn't mention what the JSON export includes or if it is comprehensive.
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 concise sentence with the main purpose front-loaded. It is not verbose, but it is too brief to cover the tool's complexity. The brevity might be seen as concise, but it sacrifices necessary detail, so it's acceptable but not exemplary.
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 tool with 6 parameters, no annotations, no output schema, and zero schema description coverage, this one-liner is grossly inadequate. It fails to explain the output format, parameter semantics, filtering behavior, or any edge cases, making it nearly impossible for an agent to correctly invoke the tool without additional 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 parameters like limit, query, offset, type_name, output_path, and include_infrastructure are entirely undocumented. The description's mention of 'filtering' hints at how some parameters work but does not explain the meaning, types, or interactions of any specific parameter, leaving the agent to guess.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a clear verb ('Catalog') and resource ('public ChemScript type/member'), and mentions filtering and JSON export, which distinguishes it from execution tools like execute_chemscript_sdk. However, it doesn't explicitly contrast with get_toolkit_capabilities or other inspection tools, so it's clear but not fully differentiated.
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 guidance is given on when to use this tool versus alternatives such as get_toolkit_capabilities or execute_chemscript_sdk. There is no mention of prerequisites, typical use cases, or when not to use it, leaving the agent to infer context from the name and description alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
merge_reaction_schemesMerge Reaction SchemesC
Merge parallel, sequential, or unrelated CDXML reaction schemes.
| Name | Required | Description | Default |
|---|---|---|---|
| mode | No | auto | |
| equiv_mode | No | default | |
| input_paths | Yes | ||
| output_path | No | ||
| allow_adjacent | No | ||
| render_preview | No | ||
| reference_cdxml | No | ||
| force_sequential | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure, and it discloses almost nothing. It doesn't state whether input files are modified or left untouched, whether output_path creates a new file or overwrites, what the rendering behavior is, whether the operation is reversible, or any side effects. 'Merge' hints at a combining operation but nothing about the mutation or output semantics.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single front-loaded sentence with zero filler, which is easy to parse. However, the brevity is a symptom of under-specification rather than efficient compression — the sentence is short because it omits nearly all operational detail. Acceptable as conciseness, but the structure earns no credit for covering meaningful content.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 8 parameters, 0% schema coverage, no annotations, and no output schema, this single sentence is materially inadequate. An agent cannot determine valid mode values, equivalence behaviors, output handling, or what the preview/reference options do. For a tool this parameterized and complex, the description should offer far more operational 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 must compensate for the 8 parameters, and it explains none of them. None of mode, equiv_mode, input_paths, output_path, allow_adjacent, render_preview, reference_cdxml, or force_sequential are mentioned, leaving the agent to guess what these mode toggles and flags mean. This is a serious gap for a tool with two mode-style parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Merge'), a specific resource ('CDXML reaction schemes'), and the scope ('parallel, sequential, or unrelated'). This clearly distinguishes the operation from siblings like clean_scheme_layout, polish_reaction_scheme, and segment_large_scheme, which perform different transforms on schemes. It's not a tautology and names the file format explicitly, so an agent can tell roughly what it does.
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 phrase 'parallel, sequential, or unrelated' gives a weak hint about when merging applies, but there is no explicit when-to-use guidance, no exclusions, and no mention of alternatives among the many scheme-related siblings (parse_scheme, segment_large_scheme, render_scheme, etc.). An agent has no signal about when to choose merge over a sibling that parses or renders a scheme instead.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
modify_moleculeA
Analyze or transform a molecule with structural verification.
IMPORTANT: This is the ONLY correct way to modify a molecule. Never edit SMILES strings yourself and pass them directly to draw_molecule — always go through modify_molecule so you get an MCS-based structural diff to verify the change was correct.
Takes a molecule dict (at minimum {"smiles": "..."}) and applies one of 6 operations. Returns the modified molecule with a structural diff showing exactly what atoms/bonds were added, removed, or changed.
Operations: "analyze" — Inspect without modifying: functional groups, IUPAC names, formula, MW, prefix form. No extra kwargs needed. "name_surgery" — Modify via IUPAC name: add/remove substituents. Pass add=[{"locant": "2", "prefix": "fluoro"}] and/or remove=["methyl"] kwargs. "smarts" — Apply a SMARTS reaction transform. Pass smarts= "reaction SMILES" (e.g. "[c:1][F]>>[c:1][Cl]") or reaction_name= from list_reactions output. "set_smiles" — Use when you have edited a SMILES and want to verify the change. Pass the original mol_json and new_smiles=. The MCS diff will confirm exactly what was added/removed. Do NOT generate SMILES from scratch — use resolve_name. "set_name" — Set the display name. Pass new_name=. "reaction" — Apply a named template from list_reactions. Pass reaction_name= and optionally reagent={"smiles": ...} for binary reactions (coupling, etc.).
Args: mol_json: Source molecule dict with at least {"smiles": "..."}. operation: One of: "analyze", "name_surgery", "smarts", "set_smiles", "set_name", "reaction". add: For "name_surgery" — list of {"locant": str, "prefix": str} dicts. remove: For "name_surgery" — list of prefix strings to remove. new_smiles: For "set_smiles" — validated SMILES string. new_name: For "set_name" — new display name string. reaction_name: For "smarts"/"reaction" — template name. reagent: For "reaction" — dict with "smiles" key for the second reagent. smarts: For "smarts" — reaction SMARTS string. description: For "set_smiles" — optional context note.
Returns: For "analyze": ok, input_smiles, canonical_name, alternative_names, functional_groups, prefix_form, bracket_tree, formula, mw. For modifications: ok, input_smiles, output_smiles, input_name, output_name, aligned_names, diff (atoms_added, atoms_removed, atoms_changed, mcs_smarts, delta_formula, delta_mw), formula, mw.
| Name | Required | Description | Default |
|---|---|---|---|
| add | No | ||
| remove | No | ||
| smarts | No | ||
| reagent | No | ||
| mol_json | Yes | ||
| new_name | No | ||
| operation | Yes | ||
| new_smiles | No | ||
| description | No | ||
| reaction_name | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations were provided, so the description carries the full behavioral burden. It discloses that the tool returns a structural diff (atoms_added/removed/changed, mcs_smarts) and that it verifies changes, which is critical. However, it does not explicitly mention any side effects like permanence or permission requirements, and the analyze operation being read-only is only implicitly inferred. Overall it is transparent but falls short of exhaustive 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?
Though lengthy, the description is well-structured with clear sections (overview, operations, args, returns). The critical instruction about being the only correct way is front-loaded, and each sentence serves a purpose for a tool with six operations. No fluff; complexity justifies length.
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—10 params, 6 operations, nested objects, and no output schema—the description is comprehensive. It details return fields for both analyze and modification modes, covers all param/operation combinations, and distinguishes from 30+ siblings. There is no missing information that an agent needs to call this tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description fully compensates by defining every parameter in context. Each operation lists which kwargs to pass (e.g., 'add=[{"locant": "2", "prefix": "fluoro"}]' for name_surgery) and explains the meaning of mol_json and operation. It even provides a SMARTS example, adding value far beyond the bare schema types and defaults.
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 clear, specific purpose: 'Analyze or transform a molecule with structural verification.' It enumerates six distinct operations with concrete examples (e.g., 'name_surgery' with add/remove kwargs, 'smarts' with reaction SMILES), and explicitly contrasts itself with draw_molecule and resolve_name, making it unambiguous which tool to use.
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 strong when/when-not guidance: 'This is the ONLY correct way to modify a molecule. Never edit SMILES strings yourself and pass them directly to draw_molecule.' It also explicitly directs when to use alternatives: 'Do NOT generate SMILES from scratch — use resolve_name.' For each operation it specifies exact inputs, leaving no ambiguity about applicability.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse_analysis_fileA
Parse an LCMS or NMR analysis PDF to extract peaks and data.
Supports Waters LCMS reports and MestReNova NMR PDFs. Returns structured peak data for LCMS species identification or NMR characterisation.
This module is under active development. If unavailable, the tool returns a graceful error rather than crashing.
Args: pdf_path: Path to an LCMS or NMR PDF report. output_path: If given, write the parsed data as JSON to this file and return {ok, output_path, size} instead of the full dict.
Returns: For LCMS: dict with retention_times, peak_areas, masses, UV traces. For NMR: dict with chemical_shifts, multiplicities, integrations. When output_path is provided, returns {ok, output_path, size}. Returns {ok: False, error: "..."} if module unavailable or parse fails.
Safety override: Parse an analysis file and atomically publish verified JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| pdf_path | Yes | ||
| output_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the module is under active development, returns a graceful error if unavailable, and describes both success and failure return shapes. It also explains the optional output_path behavior. While it does not explicitly state side effects (like being read-only), the overall behavior is well documented.
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 clear sections (Args, Returns), but it is somewhat verbose and includes a suspicious 'Safety override' line that seems out of place and adds noise. It could be tightened without losing essential 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 description covers the input types, both types of output (LCMS and NMR), optional output_path behavior, error handling, and the fact that it's under development. It lists key output keys (retention_times, chemical_shifts, etc.), providing a clear picture. Missing details like file size limits or dependencies are minor for a parsing tool of this nature.
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 'Args' section explains pdf_path as the path to an LCMS or NMR PDF report and output_path as an optional destination for JSON output with a specific return format. This adds meaningful information beyond the property names, effectively compensating for the schema's lack of descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description starts with a clear, specific action: 'Parse an LCMS or NMR analysis PDF to extract peaks and data.' It names the input format (Waters LCMS, MestReNova NMR) and the intended output (structured peak data for species identification or characterization). This clearly distinguishes it from siblings like parse_reaction (reaction files) and analyze_lcms_series (likely for series analysis).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides context by stating it supports Waters LCMS reports and MestReNova NMR PDFs, implying when to use it. However, it does not explicitly compare against alternative tools or state when NOT to use it. The 'Safety override' line is disconnected and does not clarify usage. Since it lacks explicit alternatives, it only merits a 3.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse_reactionA
Parse reaction files into a semantic JSON descriptor.
Extracts every species with canonical SMILES, role classification (using Schneider fingerprint scoring for reactant/reagent binary, plus curated database for semantic roles like base/solvent/catalyst), display names, equivalents, mass data, and adducts. Produces a single JSON source of truth suitable for summarize_reaction, render_scheme, or LCMS analysis.
Provide at least one file path. Multiple may be combined (e.g. cdxml + csv) to merge structural data with ELN metadata.
Args: cdxml: Path to a .cdxml reaction file. cdx: Path to a .cdx reaction file (converted internally). csv: Path to a Findmolecule ELN CSV export. rxn: Path to a .rxn file. input_dir: Directory containing experiment files (auto-discovers cdxml/cdx/csv/rxn by experiment ID). output_path: If given, write the result JSON to this file and return {ok, output_path} instead of the full dict.
Returns: Reaction descriptor dict with keys: version, experiment, input_files, reaction_smiles, reaction_class, species (list with role, smiles, formula, mw, etc.), conditions, and eln_data. When output_path is provided, returns {ok, output_path} instead.
Safety override: Parse a reaction and atomically publish its JSON descriptor.
| Name | Required | Description | Default |
|---|---|---|---|
| cdx | No | ||
| csv | No | ||
| rxn | No | ||
| cdxml | No | ||
| input_dir | No | ||
| output_path | 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 the parsing algorithm (Schneider fingerprint scoring, curated database), output structure, and the output_path behavior (returns {ok, output_path}). However, the trailing 'Safety override: Parse a reaction and atomically publish its JSON descriptor' is ambiguous — it does not clarify what 'publish' means or whether there are side effects beyond writing to a file. Still, overall transparency is high.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-organized: purpose, extraction detail, usage, args, returns, and a final note. Most sentences are information-dense. The 'Safety override' line appears misplaced and unclear, adding noise without clear value, which prevents a 5. Minor redundancy, but overall structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given six parameters, no annotations, and no output schema, the description provides everything needed: required input (at least one file), optional file combination, full output schema (keys), return behavior when output_path is set, and even references to dependent tools. No critical usage context is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description fully compensates. Each of the six parameters is individually documented with specific behavior (e.g., 'cdx: Path to a .cdx reaction file (converted internally)'), and it explains how multiple parameters can be combined and how input_dir auto-discovers files. This goes far 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 states a specific verb and resource: 'Parse reaction files into a semantic JSON descriptor.' It details the output (species with SMILES, roles, etc.) and explicitly lists supported file formats, making it clear this is for reaction files, distinct from sibling parsers like parse_scheme or parse_analysis_file. The purpose is unambiguous and information-rich.
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 practical usage instructions (provide file paths, combine multiple formats) and notes the output is suitable for downstream tools, but does not explicitly contrast this tool with siblings. It does not state when to prefer parse_reaction over parse_scheme or parse_analysis_file, leaving selection to implication. Adequate but not explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse_schemeA
Parse a CDXML reaction scheme into a structured description.
Reads a CDXML file containing a reaction scheme (single- or multi-step) and returns a structured JSON with a species registry, reaction graph, topology classification, and a natural language narrative suitable for LLM reasoning.
Uses two strategies in order: step-attribute path (reads attributes if present) then geometry-based fallback (spatial arrow detection). Text labels near arrows are classified as "chemical", "condition_ref", "footnote", "yield", "compound_label", "citation", or "bioactivity".
Args: cdxml_path: Path to a CDXML file containing a reaction scheme. output_path: If given, write the result JSON to this file and return {ok, output_path, size} instead of the full dict.
Returns: Dict with keys: source_file, species (dict of species records with smiles, name, formula, mw, role, text_category), steps (list with reactant/product/reagent species IDs and conditions), topology (linear/parallel/convergent/divergent), content_type, narrative (human-readable summary), and optionally sub_schemes for multi-panel files. When output_path is provided, returns {ok, output_path, size}.
Safety override: Parse a scheme and atomically publish its JSON descriptor.
| Name | Required | Description | Default |
|---|---|---|---|
| cdxml_path | Yes | ||
| output_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full disclosure burden. It reveals the dual parsing strategies, label classifications, and the side effect of writing to output_path when provided. The cryptic 'Safety override: Parse a scheme and atomically publish its JSON descriptor' is vague but does hint at a publishing behavior. Overall it is transparent about the tool's actions and return structure, though it leaves some ambiguity around the safety override.
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 long and detailed, but logically organized with an opening summary, strategy explanation, argument details, and return structure. Some elements (the lengthy list of label categories, the safety override sentence) add noise and could be trimmed. Still, it remains readable and front-loaded with the core purpose.
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 complex tool with minimal schema and no output schema, the description is thorough: it specifies all major output keys, strategies, and the optional output_path behavior. It does not address error handling, file format specifics, or prerequisites, but for the core invocation and expected result it is sufficiently complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must fully explain parameters. It does: cdxml_path is clearly defined as a path to a CDXML file containing a reaction scheme, and output_path explains the conditional write behavior and the altered return shape. This adds significant meaning beyond the bare schema types.
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 clear verb and resource: 'Parse a CDXML reaction scheme into a structured description.' It then enumerates exactly what the output contains (species registry, reaction graph, topology classification, narrative) differentiating it from mere conversion or rendering siblings. This is unambiguous and actionable.
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 how the tool works internally (strategies, classification) but never states when to choose it over siblings like parse_reaction, summarize_reaction, or extract_structures_from_image. No explicit 'use this when...' or 'for X instead' guidance is provided, leaving the agent to infer applicability from the function alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
parse_scifinder_rdfParse Scifinder RdfC
Parse SciFinder RDF and optionally enrich CAS data over the network.
| Name | Required | Description | Default |
|---|---|---|---|
| input_path | Yes | ||
| output_path | No | ||
| resolve_cas | No | ||
| confirm_pubchem | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description must carry the full burden of behavioral disclosure. It mentions 'optionally enrich CAS data over the network', which hints at network activity, but doesn't explain what that entails (e.g., external calls, data validation, side effects). It also fails to mention output format, error behavior, or limits. This is a significant gap for a parsing 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 short sentence, which is technically concise, but it is under-specified rather than efficiently detailed. It omits essential information about parameters and behavior, so its brevity does not contribute to usability. The one useful clause about enrichment is buried at the end without front-loading critical details.
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 four parameters, no output schema, and no annotations, this description is severely incomplete. It does not explain what the tool returns, how to use the parameters, what 'enrichment' does, or any operational constraints. An agent cannot reliably call this tool correctly with only this description.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema provides zero descriptions for the four parameters (input_path, output_path, resolve_cas, confirm_pubchem), and the description does not compensate. The phrase 'enrich CAS data over the network' loosely relates to resolve_cas and confirm_pubchem, but it offers no specifics about what each parameter controls or expects. With 0% schema coverage, the description fails to give agents the parameter information they need.
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 identifies a specific verb 'Parse' and a specific resource 'SciFinder RDF', and adds 'optionally enrich CAS data over the network' to indicate a secondary capability. This distinguishes it from other parse tools like parse_analysis_file or parse_reaction by naming the unique data source. However, it doesn't explicitly contrast with siblings, so it's not a perfect 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus its many siblings (parse_analysis_file, parse_reaction, resolve_name, etc.). It doesn't mention use cases, prerequisites, or exclusions. An agent would have to infer from the name alone that this is for SciFinder RDF files, which is not explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
polish_reaction_schemePolish Reaction SchemeC
Run the audited deterministic polishing pipeline on a CDXML scheme.
| Name | Required | Description | Default |
|---|---|---|---|
| eln_csv | No | ||
| approach | No | chemdraw_mimic | |
| align_mode | No | rdkit | |
| input_path | Yes | ||
| output_path | No | ||
| render_preview | No | ||
| reference_cdxml | No | ||
| merge_conditions | 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 of behavioral disclosure. It adds the terms 'audited' and 'deterministic', hinting at reproducibility and review, but does not explain side effects, whether files are modified in place, or what the pipeline actually does to the scheme. This is insufficient for a mutation-like 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 sentence with no waste, which is concise. However, it is under-specified for the tool's complexity, providing only a minimal phrase that does not earn its place by adding needed information. It is better than a pure tautology but still lacks substance.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With 8 parameters, no annotations, and no output schema, this description is drastically incomplete. It fails to explain what 'polishing' entails, how inputs/outputs are specified, or what the pipeline returns. An agent would have to guess at most aspects of usage.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description mentions no parameters at all. It does not clarify input_path, output_path, approach, align_mode, or any other of the 8 parameters. The description offers zero help in understanding how to invoke the tool with correct arguments.
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 verb ('run') and a resource ('polishing pipeline on a CDXML scheme'), but 'polishing' is vague and undefined. It does not distinguish the tool from siblings like clean_scheme_layout or merge_reaction_schemes, leaving an agent unsure what specific transformation is performed.
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 guidance is given about when to use this tool versus alternatives. The phrase 'audited deterministic polishing pipeline' implies some context but does not specify conditions, prerequisites, or exclusions, so an agent cannot route to it correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_cdxml_filesRender Cdxml FilesC
Render one or more CDXML files through native ChemDraw COM.
| Name | Required | Description | Default |
|---|---|---|---|
| dpi | No | ||
| format | No | png | |
| output_dir | No | ||
| input_paths | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden of behavioral disclosure. It mentions 'native ChemDraw COM' implying a dependency, but does not explain side effects like file creation, output location, or system requirements. No mention of what happens to input files or whether this is a read-only or mutation operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single sentence with no fluff, making it very concise and front-loaded with the core verb and resource. However, it is so terse that it lacks useful structure, but this is not a verbosity issue; it is an under-specification issue, which is captured elsewhere.
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 tool with 4 parameters, no output schema, and no annotations, the description is grossly incomplete. It does not explain output formats, resolution settings, directory handling, or any requirements for ChemDraw COM. An agent cannot fully understand the tool's behavior from this description alone.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate for all parameters. It only hints at 'one or more CDXML files' which maps to input_paths, but provides no meaning for dpi, format, or output_dir. The parameter semantics are largely 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 states the verb 'Render' and the resource 'CDXML files', and adds specificity with 'through native ChemDraw COM'. This distinguishes it from generic rendering tools, though it does not explicitly name alternatives like render_scheme or render_to_png. The resource type (CDXML) is distinctive enough for a clear purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus siblings. There is no mention of context, prerequisites, or exclusions. The description only states what it does, leaving an agent to infer usage without any comparative guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_schemeA
Render a chemical reaction scheme to publication-ready CDXML.
Accepts exactly ONE of: yaml_text, compact_text, or json_path. Call with NO arguments to see the full YAML schema reference.
yaml_text: Write YAML with structures (ID + SMILES) and steps (substrates, products, above/below arrow).
json_path: Path to reaction JSON from parse_reaction (auto-layout).
IMPORTANT: Every SMILES in the YAML must come from a tool — resolve_name, modify_molecule, parse_reaction, extract_structures_from_image, etc. Never write SMILES from built-in chemistry knowledge or from reading an image with vision. Always call the appropriate tool first, then use the SMILES from its output in your YAML.
Convention: ONE substrate on center line per step. Additional reagents go in above_arrow (structures or text). This shares intermediates between sequential steps.
Args: yaml_text: YAML scheme descriptor string. compact_text: Compact DSL syntax string. json_path: Path to a reaction JSON file. layout: Layout for json_path: "auto", "landscape", "portrait". output_path: If given, write the CDXML to this file and return {ok, output_path, size} instead of the raw CDXML string.
Returns: CDXML string (when output_path is None), or {ok, output_path, size} when output_path is provided, or YAML schema reference if called with no arguments.
Safety override: Render a scheme through a validated no-overwrite staging file.
| Name | Required | Description | Default |
|---|---|---|---|
| layout | No | auto | |
| json_path | No | ||
| yaml_text | No | ||
| output_path | No | ||
| compact_text | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden. It discloses that calling with no arguments returns the YAML schema reference, that output_path writes to a file, and mentions a safe staging mechanism ('validated no-overwrite staging file'). It also instructs against using built-in chemistry knowledge for SMILES. This goes beyond a minimal description but does not detail side effects like file permissions or potential destructive operations beyond the no-overwrite claim.
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 sections for purpose, usage, args, returns, and a safety note. It is somewhat long but every sentence adds value, such as the SMILES sourcing warning and the convention for one substrate. The front-loaded purpose and clear parameter descriptions make it effective despite its length.
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 5 parameters, no output schema, and no annotations, the description provides all necessary information: input formats, workflow guidance, return types, and how to obtain the full YAML schema. It even covers the safety override. An agent has enough to call the tool correctly without ambiguity.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description fully compensates. It explains each parameter (yaml_text, compact_text, json_path, layout, output_path), their mutual exclusivity, and the layout values. It also clarifies the return behavior based on output_path. This adds substantial meaning beyond the raw schema types and defaults.
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 renders a chemical reaction scheme to publication-ready CDXML, specifying the verb, resource, and output. It differentiates from siblings like parse_scheme and clean_scheme_layout by emphasizing the publication-ready CDXML output and the accepted input formats (YAML, compact DSL, JSON from parse_reaction).
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 usage context such as accepting exactly one of three input formats, the workflow of getting SMILES from other tools, and the convention for one substrate per step. However, it does not explicitly state when to use this tool versus siblings like render_to_png or clean_scheme_layout, and there are no explicit exclusions or alternative tool recommendations.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
render_to_pngA
Render a CDXML file to PNG using ChemDraw COM.
Uses ChemDraw's native rendering engine (via COM automation) at 300 DPI with a solid white background. ChemDraw must be installed (Professional 16+) and closed before calling this tool.
This tool uses ChemDraw COM exclusively — no RDKit fallback. For a quick preview without ChemDraw, use draw_molecule which returns CDXML that can be opened directly.
Args: cdxml_path: Path to the CDXML file to render. output_path: Output PNG path. If not given, writes to the same directory as the input with a .png extension.
Returns: Dict with keys: ok, input, output (absolute path to PNG file). Returns {ok: False, error: "..."} if ChemDraw COM is unavailable or rendering fails.
Safety override: Render CDXML to a validated PNG through a staging file.
| Name | Required | Description | Default |
|---|---|---|---|
| cdxml_path | Yes | ||
| output_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden. It discloses key behaviors: COM automation, 300 DPI, white background, the requirement that ChemDraw be closed, and the lack of an RDKit fallback. It also explains output path defaults and error return format. However, the 'Safety override: Render CDXML to a validated PNG through a staging file' line is cryptic and unexplained, and it does not mention potential side effects like overwriting existing files.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a leading purpose, details, Args, Returns, and a safety note. It is front-loaded with the core function. However, the 'Safety override' sentence is out of place and adds confusion without clear benefit, making the description slightly less concise than it could be.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete for a tool with external dependencies: it covers installation requirements, prerequisites (ChemDraw closed), output behavior, return dict keys, and error handling. It also names an alternative tool for fallback. Nothing essential is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0% (the schema provides no descriptions), so the description must compensate. It does so with an Args section that explains cdxml_path (path to CDXML file) and output_path (default behavior: writes to same directory with .png extension). This adds meaning beyond the bare schema, making parameter usage clear.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The opening sentence states a specific verb, resource, and output: 'Render a CDXML file to PNG using ChemDraw COM.' It clearly distinguishes from siblings by explicitly mentioning 'no RDKit fallback' and naming draw_molecule as an alternative, so an agent knows exactly what this tool does and what it is not.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use this tool (requires ChemDraw Professional 16+ and that it be closed) and provides an alternative for quick previews: 'For a quick preview without ChemDraw, use draw_molecule which returns CDXML that can be opened directly.' This gives clear when-to-use and 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.
replace_chemdraw_objects_in_officeReplace Chemdraw Objects In OfficeC
Replace selected ChemDraw OLE contents and previews without moving them.
| Name | Required | Description | Default |
|---|---|---|---|
| input_path | Yes | ||
| output_path | No | ||
| render_pdf_preview | No | ||
| replacements_manifest | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full responsibility for behavioral disclosure. It hints at mutation ('replace') and preserving position ('without moving them'), but omits crucial details like whether the input file is modified in place, what output_path does, the effect of render_pdf_preview, or any side effects or reversibility.
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 with no redundancy, but it is under-specified. While concise, it sacrifices essential information, making it inadequately detailed for a tool of this complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool is a mutation operation with 4 parameters, no annotations, and no output schema, the one-sentence description is grossly incomplete. It lacks the manifest format, selection mechanism, output handling, preview behavior, and any error or edge-case information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention any of the four parameters. It provides no explanation of input_path, output_path, render_pdf_preview, or replacements_manifest, leaving the agent to infer meaning solely from names and types.
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 ('Replace'), a clear resource ('selected ChemDraw OLE contents and previews'), and a scope ('selected'), while also noting a key constraint ('without moving them'). This distinguishes it from sibling tools like inspect (read-only) and embed (add new).
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 guidance is given on when to use this tool versus alternatives. It does not mention when to prefer it over inspect_chemdraw_objects_in_office or embed_cdxml_in_office, nor does it state any prerequisites or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
resolve_nameA
Resolve any chemical identifier to a rich molecule descriptor.
Converts a name, abbreviation, condensed formula, or CAS number into a structured molecule dict with SMILES, formula, MW, exact mass, IUPAC name, reagent role, and display text. Uses a 4-tier resolution chain: curated reagent DB → condensed formula parser → ChemScript IUPAC → PubChem.
Do NOT hand-construct SMILES — use this tool instead. The returned dict can be passed directly to modify_molecule, draw_molecule, or used to build a render_scheme input.
Args: query: Chemical identifier — common name, IUPAC name, abbreviation, condensed formula (e.g. "PhB(OH)2"), or CAS number. Examples: "aspirin", "Cs2CO3", "2-chloropyridine", "534-17-8", "Et3N". use_network: Allow PubChem lookup (requires internet). Default True.
Returns: Dict with keys: ok, name, smiles, formula, mw, exact_mass, iupac_name, source (which tier resolved it), role (if in reagent DB), display_text, prefix_form (IUPAC substituent prefix, if applicable). Returns {ok: False, error: "..."} if unresolvable.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| use_network | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Since no annotations are provided, the description carries the full burden of behavioral disclosure. It does so comprehensively: it explains the 4-tier resolution chain (curated reagent DB → condensed formula parser → ChemScript IUPAC → PubChem), the exact return dict keys, the error behavior ({ok: False, error: ...}), and the network dependency for PubChem (via the use_network parameter). No aspect of the tool's behavior is left to the agent's guess, and there is no contradiction with any 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 multi-paragraph and includes an Args section and a Returns section, which makes it longer than a typical one-liner. However, every sentence contributes: the opening sentence front-loads the purpose, the examples are invaluable, and the return dict documentation is essential given there is no output schema. It is structured with clear headings and is not padded with fluff. It earns a 4 because it is detailed but not excessively verbose for a tool of this complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This tool has no output schema and moderate complexity (2 parameters, one optional). The description covers all necessary context: the input resolution rules, the exact output keys, the error condition, and even pointers to downstream usage (modify_molecule, draw_molecule, render_scheme). Nothing an agent needs to call it correctly or interpret its result is missing. Given the rich content of the returns dict, the written documentation is fully sufficient.
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% — the schema only shows bare types (string, boolean) with no descriptions. The description compensates richly: for 'query' it defines what constitutes a chemical identifier, gives examples across all accepted forms (aspirin, Cs2CO3, 2-chloropyridine, CAS number, Et3N), and for 'use_network' it explains the purpose (PubChem lookup) and the requirement (internet) plus default. This additional meaning is exactly what an agent needs to correctly construct inputs.
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, action-oriented statement: 'Resolve any chemical identifier to a rich molecule descriptor.' It then enumerates the exact input types (name, abbreviation, condensed formula, CAS number) and the output structure (SMILES, formula, MW, etc.), which makes the tool's purpose unambiguous and clearly distinguishes it from sibling tools like search_compound or parse_reaction. The 'Do NOT hand-construct SMILES' instruction further cements its role as the canonical resolver.
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 direct usage guidance: 'Do NOT hand-construct SMILES — use this tool instead' and explains how the returned dict can be fed into other tools (modify_molecule, draw_molecule, render_scheme). This tells when to use it and provides context for integration. However, it does not explicitly state when *not* to use it or name an alternative tool (e.g., search_compound) for similar identifier lookups, leaving room for an agent to wonder about overlapping tools. So it is strong but not fully exhaustive.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_compoundA
Search for a compound across experiment JSON files by SMILES similarity.
Scans a directory of reaction JSON files (from parse_reaction) and returns exact matches and structurally similar compounds above the given Tanimoto threshold. Useful for finding related experiments, checking if a compound has been made before, or tracing a compound through a multi-step synthesis.
This module is under active development. If unavailable, the tool returns a graceful error rather than crashing.
Args: smiles: SMILES string of the compound to search for. Use resolve_name to get a validated SMILES first. experiment_dir: Directory containing reaction JSON files to search. similarity_threshold: Tanimoto similarity cutoff (0–1). Default 0.85.
Returns: Dict with keys: ok, query_smiles, exact_matches (list), similar_matches (list with similarity scores), total_files_searched. Returns {ok: False, error: "..."} if module unavailable or search fails.
| Name | Required | Description | Default |
|---|---|---|---|
| smiles | Yes | ||
| experiment_dir | Yes | ||
| similarity_threshold | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It discloses that the module is under active development and returns a graceful error if unavailable, and it details the return dict structure. However, it doesn't explicitly state that the operation is read-only or describe any side effects. For a search tool, this is adequate but not exhaustive.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with Args and Returns sections, and the main purpose is front-loaded in the first sentence. It's longer than strictly necessary but each part earns its place—no filler or repetition. The structure aids quick scanning.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description explains the return keys and error handling. It mentions the prerequisite of using resolve_name and the scanning behavior. It covers what an agent needs to make the call correctly. It could elaborate on the structure of match lists, but that's a minor gap.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description fully compensates by explaining each parameter in the Args section. It clarifies the format of smiles, the role of experiment_dir, and the semantics/default of similarity_threshold (Tanimoto cutoff, 0–1, default 0.85). This goes well 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 verb and resource: 'Search for a compound across experiment JSON files by SMILES similarity.' It also specifies the mechanism (Tanimoto threshold) and distinguishes itself from siblings like compare_molecules by focusing on scanning a directory of JSON files. Though it doesn't explicitly name alternatives, the purpose is unambiguous 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?
Provides explicit use cases: 'finding related experiments, checking if a compound has been made before, or tracing a compound through a multi-step synthesis.' It also advises using resolve_name to get a validated SMILES first, which is actionable guidance. It doesn't state when not to use it or name alternatives, but the context is clear enough.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
segment_large_schemeSegment Large SchemeB
Segment a disconnected or multi-panel CDXML scheme into logical regions.
| Name | Required | Description | Default |
|---|---|---|---|
| verbose | No | ||
| cdxml_path | Yes | ||
| output_path | 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 of behavioral disclosure. It only states the action (segmenting) without describing side effects, output format, whether the input is modified, or what the function returns. An agent cannot anticipate what 'segmenting' produces (e.g., a list of regions, a modified file) or any side effects on the input file. This is a significant gap for a tool with no annotation support.
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, well-formed sentence with no filler. The action is front-loaded, and every word contributes to meaning. It is appropriately concise for the tool's purpose.
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 tool that likely performs a non-trivial transformation on a scheme, the description is incomplete. It does not specify the return value, whether the input file is overwritten, or how the segments are represented. The absence of an output schema and annotations increases the need for description coverage, which is lacking. An agent would struggle to predict the tool's behavior and result.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate by explaining parameter meanings. It does not mention cdxml_path, output_path, or verbose at all. The schema only provides names and types, but no semantic guidance. The description adds zero value for parameter understanding.
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 ('segment') applied to a specific resource ('disconnected or multi-panel CDXML scheme') with a clear outcome ('logical regions'). This uniquely distinguishes it from sibling tools like parse_scheme, render_scheme, and clean_scheme_layout, which have different purposes. The phrasing is precise and immediately conveys the tool's function.
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 conditions the use on the input type ('disconnected or multi-panel CDXML scheme'), providing clear context for when to apply it. However, it does not mention alternatives or situations where this tool should be avoided, so it lacks explicit exclusions. This matches 'clear context, no exclusions'.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
summarize_reactionA
Return a compact, context-efficient view of a reaction JSON file.
The full reaction JSON can be 3,000+ tokens with geometry data. This tool returns only the fields you need for a given task, making it practical for LLM reasoning without burning context.
Default fields (when no arguments given): species: id, name, role, role_detail, smiles, display_text, formula, mw top-level: experiment, conditions eln_data: product_yield, reaction_type
Pass ["*"] for any field set to get all fields (equivalent to loading the full JSON). Request specific fields by name for task-focused summaries.
Args: json_path: Path to a reaction JSON file from parse_reaction. species_fields: Species fields to include. Available: id, name, role, role_detail, smiles, smiles_neutral, is_sm, is_dp, is_substrate, is_solvent, exact_mass, exact_mass_full, mw, formula, adducts, source, source_id, csv_equiv, csv_mass, csv_name, csv_volume, csv_supplier, display_text, original_geometry. Pass [""] for all. top_fields: Top-level fields. Available: version, experiment, input_files, reaction_smiles, reaction_class, reaction_name, classification_confidence, warnings, metadata, conditions. Pass [""] for all. eln_fields: ELN data fields. Available: sm_mass, product_obtained, product_yield, procedure_text, procedure_plain, reaction_type, start_date, labbook_name, solvents, solvent_details. Pass ["*"] for all.
Returns: Compact dict with requested fields for each species and top-level keys.
| Name | Required | Description | Default |
|---|---|---|---|
| json_path | Yes | ||
| eln_fields | No | ||
| top_fields | No | ||
| species_fields | 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 of behavioral disclosure. It transparently states that the tool returns a subset of fields, defaults to specific fields, and can return all fields on request. It does not describe any side effects or error behavior, but for a read-only summary operation this is acceptable. The description is honest about what it does and does not hide any traits.
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 longer than average but is well-organized: purpose statement, problem motivation, defaults, usage note, then a clear Args block with bullet-like lists and a Returns line. It is front-loaded with the core purpose and every paragraph earns its place. The field enumerations are necessary given the schema's lack of descriptions, so the length is justified.
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 4 parameters, 0% schema coverage, no output schema, and no annotations, the description is nearly complete. It explains default fields, available fields per parameter, the wildcard option, and the return type ('Compact dict'). It omits edge-case handling (e.g., invalid field names) and does not mention error behavior, but for a read-only summarizer these are minor. Overall, it gives an agent everything needed to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It does so thoroughly: for each of the three field-list parameters, it enumerates every available option, explains the ['*'] wildcard, and specifies defaults. It also defines json_path as a path from parse_reaction. This adds substantial meaning beyond the bare schema, making it possible for an agent to construct calls without guessing.
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-resource pair ('Return a compact, context-efficient view of a reaction JSON file') and immediately explains the problem it solves (3,000+ token files) and distinct behavior (field filtering). It clearly differentiates itself from siblings like parse_reaction by naming the source and offering a filtered view. This is a precise, unambiguous purpose.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explains when to use this tool ('practical for LLM reasoning without burning context') and how to get all fields via ['*'], but it does not explicitly state when NOT to use it or directly compare to alternatives like parse_reaction. It does reference parse_reaction as the source, implying its role, and covers default vs. custom usage clearly. Slightly short of a 5 because exclusion criteria are not stated.
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.
35 tool updates
v0.1.0- First observed
analyze_lcms_series - First observed
assemble_lab_book - First observed
batch_compare_molecules - First observed
batch_embed_cdxml_in_office - First observed
clean_scheme_layout - First observed
compare_molecules - First observed
convert_cdx_cdxml - First observed
diagnose_runtime - First observed
discover_experiment_files - First observed
draw_molecule - First observed
embed_cdxml_in_office - First observed
execute_chemscript_sdk - First observed
extract_cdxml_from_office - First observed
extract_structures_from_image - First observed
extract_structures_via_decimer_api - First observed
fill_office_template - First observed
format_lab_entry - First observed
get_toolkit_capabilities - First observed
inspect_chemdraw_objects_in_office - First observed
inspect_chemscript_sdk - First observed
merge_reaction_schemes - First observed
modify_molecule - First observed
parse_analysis_file - First observed
parse_reaction - First observed
parse_scheme - First observed
parse_scifinder_rdf - First observed
polish_reaction_scheme - First observed
render_cdxml_files - First observed
render_scheme - First observed
render_to_png - First observed
replace_chemdraw_objects_in_office - First observed
resolve_name - First observed
search_compound - First observed
segment_large_scheme - First observed
summarize_reaction
TDQS
Scored across 35 tools
Many tools have overlapping purposes (e.g., render_scheme vs render_cdxml_files vs render_to_png, extract_structures_from_image vs extract_structures_via_decimer_api, assemble_lab_book vs format_lab_entry). Descriptions clarify distinctions but the large number of similar-sounding tools (e.g., clean_scheme_layout, merge_reaction_schemes, polish_reaction_scheme) could still cause misselection, especially for a busy agent.
All tool names use snake_case and most follow a verb-first pattern (convert_, parse_, resolve_, modify_, render_, embed_, etc.). There are minor deviations like 'render_to_png' (preposition) and 'extract_structures_via_decimer_api' (long but consistent). Overall, naming is predictable and stylistically uniform.
With 35 tools, the server is heavily tool-dense. While the domain (chemistry/cheminformatics) is broad, many tools are highly specialized or meta (diagnose_runtime, inspect_chemscript_sdk, execute_chemscript_sdk, get_toolkit_capabilities) and may not be necessary for typical workflows. The count exceeds the upper bound of a well-scoped set, making it feel bloated.
The toolkit covers a wide range of chemistry workflows: molecule resolution, modification, drawing, reaction parsing, scheme manipulation, office integration, LCMS/NMR analysis, and lab book assembly. There are minor gaps (e.g., no direct molecule editing without modification, no explicit NMR peak assignment tool) but agents can work around these using existing tools.
Maintenance
Related MCP Connectors
- mcpOAuthio.scispot
Turn any LLM into your lab assistant: search samples, track experiments, analyze data with AI.
- WauldoOAuthcom.wauldo
Stateless agentic tools over MCP: concept extraction, long-context, knowledge graph, planning.
AI-powered bioprotocol optimization — generate, search, and manage lab protocols via MCP
Extract structured data points from research papers and other documents with an LLM.
Related MCP Servers
AlicenseNot gradedqualityCmaintenanceChemMCP is an easy-to-use and extensible chemistry toolkit for LLMs and AI assistants, enabling molecular analysis, property prediction, and reaction synthesis tasks without domain-specific training.71Apache 2.0- FlicenseBqualityDmaintenanceProvides computational chemistry tools for LLMs, enabling molecular operations like SMILES processing and geometry manipulation via a modular agent and tool system.9-
- AlicenseNot gradedqualityAmaintenanceEnables generation of chemical structures, reactions, spectra, titration curves, 3D models, and more from natural language or SMILES, using RDKit for offline rendering and supporting formats like PNG, SVG, CDXML, and Anki decks.13Apache 2.0
- AlicenseNot gradedqualityAmaintenanceConnects AI assistants to a live ChemDraw window on Windows via COM automation, enabling drawing, editing, and organizing chemical structures directly in the open document. Supports structure insert/export, scope tables, shorthand groups, figure layout, chemistry QC, publication tools, annotations, polymer brackets, and TLC plates.1MIT