Solitarius MCP
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@Solitarius MCPRun reinforcement learning to optimize molecules for high QED"
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.
Solitarius MCP
MCP server exposing REINVENT4 generative molecular-design operations as validated, LLM-callable tools. It is compatible with MCP-capable agentic coding platforms such as Claude Code, Codex CLI, Gemini CLI, and others.
Solitarius MCP is the controlled execution interface of Solitarius, a three-layer agentic architecture for computer-aided molecular inverse design:
REINVENT4: the molecular-generation and optimisation engine (sampling, transfer learning, staged reinforcement learning).
Solitarius MCP(this repository): exposes REINVENT4 operations as validated tools an LLM agent can call through a common interface.Solitarius Agentic System: coordinates specialist agents (Planner, Formulator, Executor, Analyser) that turn a natural-language objective into a traceable molecular-generation campaign.
You can use this server on its own when an agent needs direct access to individual REINVENT4 operations, or together with the orchestration layer when a campaign needs planning, scoring-function formulation, execution, analysis, and iteration.
Prerequisite: you run the server yourself — there is no hosted instance. Either in a conda environment via stdio, or as a Docker HTTP service you build locally (~10–15 min, needs nvidia-container-toolkit). REINVENT4 itself wants an NVIDIA GPU for transfer learning and RL. See Installation.
The Solitarius MCP interface groups callable operations into input/configuration validation, scoring-component construction and testing, execution, job management, and monitoring and analysis. These tools map agent requests onto REINVENT4 TOML configurations for sampling, transfer learning, and reinforcement learning, and return generated molecules, trained models, optimisation histories, and analysis summaries through the same interface. Lightweight skills provide a direct-instruction alternative for running the same general workflow without the MCP server.
Table of Contents
Related MCP server: refua-mcp
Key Features
All long-running tools follow a dry_run → launch protocol that separates workflow construction from computation: the dry run resolves all parameters and returns the complete TOML config without starting REINVENT4, so the agent and user can inspect the model, inputs, and settings before committing resources. After explicit approval, the same validated config is launched and the tool returns the output locations plus a persistent job identifier for monitoring. Outputs land in a timestamped directory (reinvent_runs/<type>_<timestamp>/) with config.toml, reinvent.log, and all result files.
The tools are grouped by their role in a molecular-generation campaign.
Input and configuration
Tool | What it does |
| Check (and optionally clean) a SMILES/CSV input file for validity and format issues before it reaches a generator. |
| Validate a complete REINVENT TOML config against the |
Scoring-component construction
Tool | What it does |
| Guide that maps an objective onto supported scoring components, targets, and transforms before an RL configuration is built. |
| Generate a |
| Test a custom component against example molecules before wiring it into an RL run. |
Execution
Tool | What it does |
| Sample molecules from a prior or trained checkpoint. Returns SMILES + model likelihoods. |
| Fine-tune a prior on a focused SMILES dataset, with input validation/cleanup available before launch. |
| Goal-directed optimisation through staged RL with a multi-component scoring function. |
Job management
Tool | What it does |
| Create a persistent record for a launched TL or RL job. |
| Attach the running OS process ID to a registered job. |
Monitoring and analysis
Tool | What it does |
| Poll status (running/completed/failed) of any TL or RL job from its process and log heuristics. |
| Plot RL score convergence and per-component trends from a stage CSV. Works mid-run and post-run. |
| Evaluate SMILES/CSV: validity, physicochemical properties, druglikeness (QED, Lipinski), scaffold diversity, structural alerts, UMAP projection, optional similarity/novelty vs a reference set. Writes |
Example reinvent_analyze_molecules output: UMAP projection of generated molecules coloured by score, overlaid on a reference set.
Installation
Option A: Local stdio
Run the server directly in a conda environment. Supported by all platforms that accept an MCP stdio server.
conda activate reinvent4
pip install -r requirements.txt
# Verify the server imports cleanly (no output = OK)
python -c "import server"Register with your platform:
# Claude Code
claude mcp add reinvent4 \
/path/to/miniconda3/envs/reinvent4/bin/python \
/absolute/path/to/reinvent-mcp/server.py
# With custom plugins / explicit CWD
claude mcp add \
--env PYTHONPATH=/absolute/path/to/reinvent-mcp/custom_plugins \
--env REINVENT_CWD=/absolute/path/to/reinvent-mcp \
reinvent4 \
/path/to/miniconda3/envs/reinvent4/bin/python \
/absolute/path/to/reinvent-mcp/server.py
# Codex CLI
codex mcp add reinvent4 -- \
/path/to/miniconda3/envs/reinvent4/bin/python \
/absolute/path/to/reinvent-mcp/server.py
# Gemini CLI: ~/.gemini/settings.json
# "mcpServers": { "reinvent4": { "command": "python", "args": ["/absolute/path/to/reinvent-mcp/server.py"] } }Option B: Docker HTTP (recommended for deployment)
Prerequisites
Docker Engine with nvidia-container-toolkit
REINVENT4 cloned into this repo root:
git clone https://github.com/MolecularAI/REINVENT4.git --depth 1 REINVENT4Build and start
# Generate .env (prompts for your data directory; run once per machine)
bash gen_env.sh
# Create output directories
mkdir -p reinvent_runs custom_plugins/reinvent_plugins/components jobs
# Build the image (~10-15 min first time)
docker compose build
# Start the server
docker compose up -d
# Confirm it's running (expect: "Uvicorn running on http://0.0.0.0:8080" — mapped to host port 8081)
docker compose logs -fStop / rebuild
docker compose down
docker compose up -d --build # rebuild after code changesRegister with your platform
Claude Code — install as a plugin (recommended). This is the only route that also
installs the skills; claude mcp add gives you the tools alone.
The container from the previous section must already be running — the plugin declares the server, it does not start it. Install it first and the tools will load but every call will fail to connect.
/plugin marketplace add pregHosh/Solitarius-mcp
/plugin install solitarius-mcp@solitariusIf host port 8081 is already taken and you changed it in docker-compose.yml, point the
plugin at the new port instead of editing it:
export SOLITARIUS_MCP_URL=http://127.0.0.1:8082/sseOr register the server manually (any platform; no skills):
# Claude Code
claude mcp add --transport http reinvent4 http://localhost:8081/sse
# Codex CLI
codex mcp add reinvent4 --url http://localhost:8081/sse
# Gemini CLI
# gemini mcp add -s user --transport http reinvent4 http://localhost:8081/sseUse
--transport http(not--transport sse). The server uses MCP'sstreamable-httptransport (mcp ≥ 1.0); the legacy SSE flag will fail even though the URL path is/sse.
Environment variables
Variable | Default | Purpose |
| server directory | Base for resolving relative paths |
|
|
|
|
| Bind host (HTTP transports) |
|
| Bind port (HTTP transports) |
| (none) | Must include parent of |
Skills: Lite Mode
skills/ provides slash commands that call the reinvent CLI directly; no MCP server or Docker needed. Requires REINVENT4 on PATH. Supported by Claude Code, Codex CLI, Gemini CLI, and other platforms that load skill/instruction files.
/sample · /rl · /transfer-learn · /analyze · /validate · /job-status · /custom-component
Troubleshooting
reinvent: command not found
Pass the full env PATH when registering: --env PATH=/path/to/miniconda3/envs/reinvent4/bin:$PATH
ModuleNotFoundError: mcp
Run pip install -r requirements.txt inside the reinvent4 conda environment.
Custom component not found
PYTHONPATHmust point to the parent ofreinvent_plugins/, notreinvent_plugins/itself.No
__init__.pyinreinvent_plugins/orreinvent_plugins/components/.Test:
python -c "from reinvent_plugins.components import comp_mycomponent"
Tools not appearing
Run
claude mcp list/ check your platform's MCP status.stdio:
python server.pyshould printInvalid JSON: EOF; that confirms the import succeeded.Docker:
docker compose psshould showUp, notRestarting.
Failed to connect with Docker
Confirm --transport http was used (not --transport sse). Check docker compose ps and docker compose logs.
Port already in use
Find the process: ss -tlnp | grep 8081. Kill it or change the host port in docker-compose.yml (8082:8080), then re-register with the new port.
GPU not detected in Docker
docker compose down
docker compose up -d # must recreate container for GPU deploy config to apply
docker exec reinvent4-mcp nvidia-smiIf nvidia-container-toolkit is missing, install it per the NVIDIA install guide, then sudo systemctl restart docker.
Job status shows completed immediately
Status is inferred from the log file. If the log doesn't exist yet, wait a moment and poll again with reinvent_job_status.
Citation
If you use Solitarius-MCP or the Solitarius agentic system, please cite:
Solitarius: An Agentic Architecture for Computer-aided Molecular Inverse Design
@article{worakul_solitarius_2026,
title = {Solitarius: {An} {Agentic} {Architecture} for {Computer}-aided {Molecular} {Inverse} {Design}},
url = {https://chemrxiv.org/doi/abs/10.26434/chemrxiv.15005834/v2},
doi = {10.26434/chemrxiv.15005834/v2},
publisher = {American Chemical Society (ACS)},
author = {Worakul, Thanapat and Corminboeuf, Clémence},
year = {2026},
}This work builds on REINVENT4; please also cite:
@article{loeffler_reinvent_2024,
title = {Reinvent 4: {Modern} {AI}–driven generative molecule design},
volume = {16},
issn = {1758-2946},
shorttitle = {Reinvent 4},
url = {https://doi.org/10.1186/s13321-024-00812-5},
doi = {10.1186/s13321-024-00812-5},
language = {en},
number = {1},
urldate = {2026-07-03},
journal = {Journal of Cheminformatics},
author = {Loeffler, Hannes H. and He, Jiazhen and Tibo, Alessandro and Janet, Jon Paul and Voronov, Alexey and Mervin, Lewis H. and Engkvist, Ola},
month = feb,
year = {2024},
keywords = {Generative AI, Reinforcement learning, Transfer learning, Multi parameter optimization, Recurrent neural networks, Transformers},
pages = {20},
}Available Tools
13 toolsreinvent_analyze_moleculesA
Evaluate a set of generated SMILES across multiple quality dimensions.
Designed for raw sampling output (CSV or .smi) from reinvent_sampling, but works with any SMILES file. Writes an analysis_report.json and per_molecule.csv to disk and returns a structured summary to the agent.
Evaluators available: Always: validity, physicochemical, druglikeness, scaffold, alerts, diversity With ref: similarity, novelty, coverage (auto-skipped if no ref_smiles_file)
physicochemical covers: MW, LogP, TPSA, HBD, HBA, rotatable bonds, num atoms (incl. H), num heavy atoms, num heteroatoms, fraction heteroatoms, num rings, num aromatic rings, num aliphatic rings. druglikeness covers: QED, Lipinski RO5, Veber rules, SA score (if available). scaffold: Bemis-Murcko scaffold count and diversity. alerts: PAINS and Brenk structural alert rates. diversity: internal diversity (1 − mean pairwise Tanimoto, ECFP4). similarity: nearest-neighbour Tanimoto to reference set. novelty: % generated SMILES not present in reference (exact canonical match). coverage: % reference molecules with ≥1 generated neighbour at Tanimoto ≥ 0.4.
When plots=True, generates PNGs: physicochemical_dist.png — MW/LogP/TPSA/HBD/HBA/QED(/SA) histograms atom_profile.png — num atoms/heavy/hetero/frac_het/rotbonds/rings atom_types.png — element frequency bar chart (C/N/O/S/halogens/…) ring_profile.png — total/aromatic/aliphatic ring histograms similarity_hist.png — NN Tanimoto to ref (if ref provided) umap_projection.png — ECFP4 UMAP; requires umap-learn
Args: smiles_file: Path to sampling CSV or .smi file (SMILES col auto-detected). ref_smiles_file: Optional reference / known-active SMILES file. evaluators: List of evaluator names, or "all" (default). plots: Generate PNG plots (default True). Set False to skip all visualisation. color_by: Property to colour generated UMAP points (viridis). Any column in per_molecule.csv: "qed", "mw", "sa_score", "logp", "tpsa", etc. Default None = generated blue / reference red. output_dir: Where to write outputs (default: _analysis/ next to input).
| Name | Required | Description | Default |
|---|---|---|---|
| plots | No | ||
| color_by | No | ||
| evaluators | No | all | |
| output_dir | No | ||
| smiles_file | Yes | ||
| ref_smiles_file | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description clearly discloses side effects: writes analysis_report.json and per_molecule.csv to disk, and generates PNG plots when plots=True. It also mentions auto-skipping of evaluators without a reference file, which is a behavioral nuance. No annotations are provided, so the description carries the full burden, and it does so thoroughly.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a clear opening, evaluator breakdown, physicochemical details, and an Args list. While it is lengthy, most details add value (e.g., listing exact metrics). Some evaluator metric lists could be condensed, but the overall structure is logical and front-loaded with 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 6 parameters and no output schema, the description covers nearly all relevant context: input formats, evaluators, metrics, plot outputs, defaults, and auto-skip behavior. It does not explicitly describe the structure of the returned summary, but this is a minor gap given the abundant detail elsewhere.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The input schema has 0% description coverage, so the description must compensate entirely. It provides detailed meaning for every parameter in the Args section, including type, purpose, defaults, and examples (e.g., color_by lists 'qed', 'mw', etc.; output_dir default is shown). This fully bridges the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb+resource combination: 'Evaluate a set of generated SMILES across multiple quality dimensions.' It clearly distinguishes this tool from siblings by noting it is designed for raw sampling output from reinvent_sampling, while other siblings handle sampling, RL, validation, etc.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool ('Designed for raw sampling output from reinvent_sampling') and clarifies it works with any SMILES file. It also notes auto-skipping of reference-based evaluators if no reference file is provided, which guides usage. However, it does not explicitly state when not to use it or name alternative analysis tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reinvent_attach_pidA
Attach a process ID to a registered user job for live polling.
After running a job manually and registering it with reinvent_register_job, call this to attach the PID. The server can then use os.kill(pid, 0) to check if the process is still running, improving polling reliability.
Args: job_id: Job ID from reinvent_register_job pid: Process ID of the running reinvent job
| Name | Required | Description | Default |
|---|---|---|---|
| pid | Yes | ||
| job_id | 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 adds meaningful context beyond the obvious: the server uses os.kill(pid, 0) to check if the process is running, and the tool improves polling reliability. It could be more transparent about error handling or side effects (e.g., overwriting an existing PID), but the provided mechanism and rationale are strong.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well-structured: a one-sentence purpose, a brief workflow explanation, and a small Args list. Every sentence adds value, and the first sentence front-loads the core function.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple attach operation, the description covers the what, when, and why. It also gives the practical benefit (live polling reliability). It does not describe the return value or failure modes, which could be useful, but given the absence of an output schema and the tool's simplicity, the provided context is largely sufficient for an agent to select and 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 description coverage is 0%, so the description must explain the parameters. The Args section defines job_id as 'Job ID from reinvent_register_job' and pid as 'Process ID of the running reinvent job', which adds meaning beyond the bare schema. It could be more detailed (e.g., formats or validation), but it clearly ties job_id to the upstream registration step.
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 action: 'Attach a process ID to a registered user job for live polling.' This is a specific verb (attach), resource (process ID to job), and purpose. It distinguishes itself from siblings by referencing the workflow with reinvent_register_job and focusing on polling.
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 a clear 'when to use': after running a job manually and registering it with reinvent_register_job. It explains the benefit ('improving polling reliability') and mentions the server's os.kill mechanism. However, it does not explicitly state when not to use it or name alternative tools, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reinvent_custom_scoring_componentA
Generate a valid comp_*.py plugin file for REINVENT4.
Based on the canonical template from scoring_function.md. No reinstall needed — REINVENT4 discovers comp_*.py files at runtime.
IMPORTANT: Always provide implementation_code. Write the complete call body as plain unindented Python before calling this tool, then pass it here. Indentation is added automatically. This writes the full implementation in one atomic operation. If omitted, a TODO placeholder is written and the file cannot be edited afterward due to permissions.
When implementation_code is provided, the generated plugin is immediately smoke-tested (import, instantiate, call on sample SMILES, contract check). The test_result appears in the response; on failure, regenerate with corrected implementation_code.
Args: component_name: Python class name (e.g. 'MyQSARModel') description: What this component scores scoring_logic: How to compute the score — plain English, pseudocode, or code parameters: List of {name, type, description} dicts for user-configurable inputs component_tag: '_component' (standard), 'filter' (zeros total if 0), 'penalty' (multiplier) use_molcache: If True, call receives List[Chem.Mol]; else List[str] dependencies: External packages required output_dir: Where to write comp*.py (default: reinvent_plugins/components/) implementation_code: Complete body of call as unindented Python. test_after_generate: Run the smoke test after writing (default True). test_smiles: Override SMILES used by the smoke test. test_params: Per-endpoint parameter values for the smoke test, e.g. {"threshold": 0.5} — scalars are list-wrapped automatically.
Returns file path, source code, TOML snippet, and test_result (when tested).
| Name | Required | Description | Default |
|---|---|---|---|
| output_dir | No | ||
| parameters | No | ||
| description | Yes | ||
| test_params | No | ||
| test_smiles | No | ||
| dependencies | No | ||
| use_molcache | No | ||
| component_tag | No | __component | |
| scoring_logic | Yes | ||
| component_name | Yes | ||
| implementation_code | No | ||
| test_after_generate | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden. It discloses key behavioral traits: atomic write operation, runtime discovery, TODO placeholder behavior, permission restrictions preventing later edits, automatic smoke testing, and the exact return payload. This goes well beyond what annotations would typically provide.
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: a concise purpose statement, a critical IMPORTANT callout, a bulleted Args list, and a Returns line. Every sentence adds value—no fluff or redundancy—and the most critical usage requirement is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with 12 parameters, no output schema, and no annotations, the description fully covers inputs, outputs, side effects, and error behavior. It even explains the smoke test flow and says that test_result appears in the response, making the invocation contract complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% coverage from description text, but the description's Args block documents all 12 parameters with meaning, defaults, and examples (e.g., test_params with scalar list-wrapping). This fully compensates for the schema's lack of descriptions, providing agents with the necessary context to fill parameters correctly.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-object statement: 'Generate a valid comp_*.py plugin file for REINVENT4.' This clearly states the tool's primary function and distinguishes it from sibling tools like reinvent_test_scoring_component or reinvent_sampling by focusing on plugin generation.
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 IMPORTANT section provides explicit usage guidance: always provide implementation_code, write it as unindented Python, indentation is added automatically, and the file cannot be edited afterward. It also explains when the smoke test runs. However, it does not explicitly name alternatives or state when not to use this tool versus sibling tools, so it falls short of a 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reinvent_job_statusA
Poll the status of any registered REINVENT4 TL or RL job.
Works for both agent-launched and user-registered jobs. Returns: running/completed/failed status, log tail, current epoch, and (on completion) result summaries, top SMILES, checkpoint paths.
Args: job_id: ID from reinvent_transfer_learning, reinvent_reinforcement_learning, or reinvent_register_job
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | 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. It discloses what the tool returns (status, log tail, current epoch, result summaries, top SMILES, checkpoint paths) and its scope (both agent-launched and registered jobs). This goes beyond a simple 'get status' and helps the agent predict behavior, though it doesn't mention error handling or invalid IDs.
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 Returns and Args sections, and every sentence adds value. It is slightly longer than strictly necessary but remains focused 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 simplicity and the lack of an output schema, the description provides adequate context by listing return contents and parameter provenance. It does not mention potential error cases or how to interpret statuses, but for a polling tool this is 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?
The input schema only defines 'job_id' as a string, but the description's Args section adds critical meaning: 'ID from reinvent_transfer_learning, reinvent_reinforcement_learning, or reinvent_register_job.' This tells the agent where to obtain the value, compensating for the 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Poll the status of any registered REINVENT4 TL or RL job', using a specific verb ('Poll') and a clear resource ('status'). This distinguishes it from sibling tools that launch, validate, or analyze jobs, making its purpose immediately obvious.
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 states 'Works for both agent-launched and user-registered jobs', providing useful context for when to use the tool. It does not explicitly name alternatives, but since it is the only status-polling tool among the siblings, the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reinvent_plot_rl_historyA
Inspect columns or generate optimisation history plots for a REINVENT4 RL run.
Works mid-run and post-run — plots whatever step data exists at call time. Provide job_id (looks up workdir from registry) OR csv_path directly. job_id takes precedence if both are given.
TWO-CALL PROTOCOL: Call 1 — extra_columns=None (inspect mode): Returns column categorisation (standard, plottable, metadata). No plots are generated. Agent presents plottable_columns to user.
Call 2 — extra_columns=[...] (plot mode): Generates PNGs for Agent, Prior, Target, Score (always) + extra_columns. Saves to output_dir (default: /plots/). Returns paths of all saved PNG files.
Args: job_id: Job ID from reinvent_register_job or reinvent_reinforcement_learning csv_path: Direct path to a stage CSV file (for ad-hoc / finished run analysis) extra_columns: None for inspect; list of column names to plot beyond the standard 4 output_dir: Where to save PNGs (default: /plots/ or /plots/)
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | No | ||
| csv_path | No | ||
| output_dir | No | ||
| extra_columns | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description fully carries the burden of behavioral disclosure. It explains the absence of plot generation in inspect mode ('No plots are generated'), the standard set of plots generated in plot mode, output directory defaults, and return value (paths of saved PNGs). It also notes precedence behavior when both job_id and csv_path are supplied.
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 formatting. It is front-loaded with a one-line purpose, then the two-call protocol, then a concise parameter list. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with no output schema and moderate complexity, the description is complete: it covers the two modes, parameter semantics, default paths, return values, and runtime applicability. It gives the agent enough to invoke the tool correctly in both inspect and plot scenarios.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description's Args section fully explains each parameter's meaning and usage: job_id for registry lookup, csv_path for direct file access, extra_columns for selecting additional columns, and output_dir for saving plots. This significantly compensates for the lack 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 clearly states the tool's function: 'Inspect columns or generate optimisation history plots for a REINVENT4 RL run.' It specifies the exact resource and verb, and distinguishes from siblings by describing its unique two-mode behavior (inspect vs. plot).
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 usage context, including when it works ('mid-run and post-run') and the two-call protocol. It explicitly states input alternatives ('job_id OR csv_path') and precedence, but does not mention when to avoid this tool or name alternative tools for similar tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reinvent_register_jobA
Register a user-launched REINVENT4 job for status tracking.
Use after running the suggested_cmd yourself. The agent can then poll progress with reinvent_job_status. Optionally attach the process PID with reinvent_attach_pid for live polling.
Args: run_type: 'transfer_learning' or 'staged_learning' workdir: Path to the run's working directory job_id: Optional custom ID (auto-generated if omitted) log_file: Path to log file (default: /reinvent.log) config_path: Path to TOML config (default: /config.toml)
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | No | ||
| workdir | Yes | ||
| log_file | No | ||
| run_type | Yes | ||
| config_path | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden. It discloses that the tool only registers for status tracking (not execution) and provides path defaults. While it doesn't detail side effects or failure behavior, the registration-only nature is transparently conveyed, which is significant for a tool that could otherwise be mistaken as a job runner.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact: a top-line purpose, a short usage directive, and a bullet-like Args list. Every sentence contributes new information—no filler, no redundancy, 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?
The description covers the full workflow: run the command first, register it, then poll or attach PID. It lacks an explicit note about return values or errors, but given the tool's simple registration nature and lack of output schema, the context provided is sufficient for an agent to act 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's Args section adds essential meaning: run_type enum values, workdir purpose, job_id auto-generation, and explicit defaults for log_file and config_path. It compensates well for the missing schema-level descriptions, though it repeats the enum values already in the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Register a user-launched REINVENT4 job for status tracking' — a specific verb, resource, and scope. It also distinguishes from siblings by referencing polling with reinvent_job_status and PID attachment with reinvent_attach_pid, making the tool's unique role evident.
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 explicitly instructs 'Use after running the suggested_cmd yourself' and names the subsequent steps: poll with reinvent_job_status, optionally attach PID with reinvent_attach_pid. This provides clear when-to-use context and names alternatives/related tools, meeting the 5-level bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reinvent_reinforcement_learningA
Run staged reinforcement learning (curriculum learning supported).
If dry_run=True: preview the TOML config without writing or launching. If skip_validation=False (default): validates input SMILES and TOML before proceeding.
Each stage in stages must contain:
scoring: {components: [...], aggregation: "geometric_mean"}
max_score: float
min_steps: int
max_steps: int
Each component in scoring.components:
component_type: str (e.g. "QED", "MolecularWeight", "custom_alerts")
name: str
weight: float (default 1.0)
transform: {type, ...params}
params: dict (component-specific, e.g. smarts list)
is_filter: bool (True for custom_alerts/MatchingSubstructure)
Call reinvent_rl_scoring_design_guide first to collect scoring config interactively.
Set launch=True to have the agent run the job. Set launch=False (default) to get the config + command to run yourself.
| Name | Required | Description | Default |
|---|---|---|---|
| sigma | No | ||
| device | No | ||
| launch | No | ||
| stages | Yes | ||
| dry_run | No | ||
| workdir | No | ||
| generator | No | reinvent | |
| inception | No | ||
| tb_logdir | No | ||
| agent_file | Yes | ||
| batch_size | No | ||
| prior_file | Yes | ||
| smiles_file | No | ||
| learning_rate | No | ||
| output_prefix | No | ||
| sample_strategy | No | ||
| skip_validation | No | ||
| diversity_filter | No | ||
| randomize_smiles | No | ||
| unique_sequences | No | ||
| distance_threshold | 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 key behaviors: dry_run previews config without writing/launching, skip_validation=False validates SMILES/TOML, launch controls whether the agent runs the job, and it details required stage/component structure. It doesn't cover all side effects (e.g., file creation, error handling) but provides substantial transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with a clear purpose, then lists behaviors and config requirements. Every sentence adds value, though the nested bullet lists make it dense. Appropriate for the complexity, with no wasted words.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
This is a complex tool with 21 parameters, no output schema, and no annotations. The description thoroughly covers the stages structure and gives usage context, but it omits explanations for many parameters and doesn't describe return values or failure modes. It's adequate but has clear gaps for fully independent use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must compensate. It thoroughly explains the central 'stages' parameter and clarifies dry_run, skip_validation, and launch, but it leaves many other parameters (e.g., distance_threshold, diversity_filter, inception, sample_strategy) unexplained. This is only partial compensation for a 21-parameter tool.
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 'Run staged reinforcement learning (curriculum learning supported),' which clearly states the action and resource. It distinguishes from siblings by emphasizing 'staged' and 'RL,' separating it from sampling and transfer learning tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage guidance: 'Call reinvent_rl_scoring_design_guide first to collect scoring config interactively,' and clearly explains launch=True vs launch=False behavior, along with dry_run and validation defaults. This tells the agent when and how 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.
reinvent_rl_scoring_design_guideA
Return the scoring-function design guide for an RL run, with AUTHORITATIVE score transform schemas introspected from the live REINVENT registry.
Use this as the source of truth for transforms: valid_transform_types lists every
accepted transform (8 in REINVENT 4.7.x: sigmoid, reverse_sigmoid, double_sigmoid,
step, left_step, right_step, value_mapping, exponential_decay) and
transform_parameter_schemas gives each one's exact required/optional keys and
defaults. Never use a transform type not in this list.
NOTE: This tool does NOT define scoring component names or their parameter schemas — those are injected separately (in the orchestrator via jobs/component_registry.json, which also carries the test_status / rl_compatible / sync_status readiness gate). Take component names and params from there; route missing components to /custom-component.
Steps: (1) identify objectives, (2) map objectives to components (from the component registry), (3) choose transforms (schemas here), (4) set weights, (5) confirm TOML.
Call this before reinvent_reinforcement_learning to collect the scoring config.
| 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 full burden. It discloses that schemas are introspected from the live registry (implying read-only, authoritative data) and explicitly scopes out component definitions, which helps set expectations. However, it doesn't explicitly state read-only behavior or other potential side effects, so a small gap remains.
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: a front-loaded purpose sentence, then key notes, steps, and a call-to-action. Every sentence adds value, and the layout (with NOTE and numbered steps) enhances readability despite the 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?
For a tool with no parameters and no output schema, the description is remarkably complete. It explains what the tool returns (transform types and schemas), what it excludes (components), provides a 5-step usage process, and specifies when to call it relative to the RL workflow.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the baseline is 4 per the rubric. The description mentions that it returns lists like valid_transform_types and transform_parameter_schemas, but since there are no params to explain, this is sufficient.
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 that the tool returns a scoring-function design guide with authoritative transform schemas from the live REINVENT registry. It distinguishes itself from siblings by explicitly noting it does not define component names/params, and by positioning itself as the source of truth for transforms.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit when-to-use guidance: 'Call this before reinvent_reinforcement_learning to collect the scoring config.' It also states alternatives (component registry for components, /custom-component routing) and prohibitions ('Never use a transform type not in this list').
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reinvent_samplingA
Generate molecules from a REINVENT4 prior model.
If dry_run=True: preview the TOML config without running. If dry_run=False: runs synchronously (sampling is fast) and returns results immediately.
For libinvent/linkinvent/mol2mol, smiles_file is required.
Generator guide:
reinvent: de novo generation, no input SMILES needed
libinvent: scaffold decoration, provide scaffold SMILES with [*:0] attachment points
linkinvent: fragment linking, provide two warhead SMILES separated by |
mol2mol: analogue generation, provide reference molecule SMILES
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | ||
| dry_run | No | ||
| workdir | No | ||
| generator | No | reinvent | |
| model_file | Yes | ||
| num_smiles | No | ||
| output_file | No | ||
| smiles_file | No | ||
| temperature | No | ||
| sample_strategy | No | ||
| randomize_smiles | No | ||
| unique_molecules | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the behavioral disclosure burden. It discloses dry-run behavior, synchronous execution, immediate return of results, and smiles_file requirements for specific generators. However, it omits details about return format, side effects (e.g., output files), or error handling, which would be valuable for 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 succinct and well-structured, front-loading the core purpose, then using a compact bullet list for generator modes. Every sentence provides distinct value without unnecessary verbosity.
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 (12 parameters, no annotations, no output schema), the description covers key behavioral and generator-specific requirements but leaves gaps around return value, output handling, and the meaning of several parameters. It is adequate but not complete for an agent to invoke 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%, so the description must compensate. It adds meaning to dry_run, generator, and smiles_file (explaining when each is needed), but leaves many parameters (num_smiles, temperature, sample_strategy, output_file, randomize_smiles, unique_molecules, workdir, device) without any explanation, which is insufficient for a 12-parameter tool.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Generate molecules from a REINVENT4 prior model,' which clearly identifies a specific verb and resource. The generator guide further distinguishes the tool's scope by enumerating four sampling modes, making it distinct from sibling tools like reinforcement learning or transfer learning.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context on when to use the tool, including dry-run vs. synchronous execution, the smiles_file requirement for libinvent/linkinvent/mol2mol, and a generator guide explaining each use case. However, it does not explicitly compare against sibling tools or state when not to use this tool.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reinvent_test_scoring_componentA
Smoke-test a comp_*.py plugin on sample SMILES without running RL.
Loads the plugin (catching import errors), instantiates the tagged component, calls it on a mix of valid + invalid SMILES, and asserts the REINVENT4 plugin contract (returns ComponentResults with np.ndarray of floats, correct length, NaN for invalid inputs).
Use this after manually editing a comp_*.py, or to re-verify with custom SMILES / parameters. For freshly generated files, the smoke test is already auto-run by reinvent_custom_scoring_component.
Args: file_path: Absolute path to the comp_*.py file (must live under .../reinvent_plugins/components/ so relative imports resolve). test_smiles: SMILES to score. Defaults to a built-in mix of valid + invalid + edge cases. params: Per-endpoint parameter values, e.g. {"threshold": 0.5}. class_name: Component class name. Auto-detected when omitted.
Returns: dict with status (pass/fail), errors, warnings, per-SMILES scores, timing_ms_per_mol, and ready_for_rl flag.
| Name | Required | Description | Default |
|---|---|---|---|
| params | No | ||
| file_path | Yes | ||
| class_name | No | ||
| test_smiles | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description fully carries the burden. It discloses key behaviors: catching import errors, instantiating the component, testing valid and invalid SMILES, asserting the REINVENT4 plugin contract (returns ComponentResults with np.ndarray of floats, correct length, NaN for invalid inputs), and returning a structured dict. This is thorough and sets accurate expectations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with a purpose statement, usage context, and an Args/Returns breakdown. It is dense but every sentence contributes relevant information. The front-loaded main purpose makes it easy to scan.
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 (plugin testing with contract assertions) and the lack of annotations or output schema, the description is remarkably complete. It covers the workflow, edge cases (invalid SMILES), return fields, and relationship to the sibling tool that auto-runs smoke tests.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description provides meaningful details for every parameter: file_path includes a path constraint, test_smiles explains default behavior, params gives an example, and class_name notes auto-detection. This adds significant value 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 first sentence clearly states the tool's function: 'Smoke-test a comp_*.py plugin on sample SMILES without running RL.' It uses a specific verb ('smoke-test'), identifies the resource (comp_*.py plugin), and distinguishes it from sibling tools like reinvent_custom_scoring_component and the RL-running tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool ('after manually editing a comp_*.py, or to re-verify with custom SMILES / parameters') and when not to ('For freshly generated files, the smoke test is already auto-run by reinvent_custom_scoring_component'). This provides clear guidance and an exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reinvent_transfer_learningA
Fine-tune a REINVENT4 prior on a focused SMILES dataset (transfer learning).
If dry_run=True: preview the TOML config without writing or launching. If skip_validation=False (default): validates input SMILES and TOML before proceeding. Set launch=True to have the agent run the job (returns job_id for polling). Set launch=False (default) to get the config + command to run yourself.
After completion, the output model can be used as agent_file for RL.
| Name | Required | Description | Default |
|---|---|---|---|
| device | No | ||
| launch | No | ||
| dry_run | No | ||
| workdir | No | ||
| generator | No | reinvent | |
| tb_logdir | No | ||
| batch_size | No | ||
| num_epochs | No | ||
| smiles_file | Yes | ||
| mol2mol_pairs | No | ||
| skip_validation | No | ||
| input_model_file | Yes | ||
| output_model_file | No | ||
| standardize_smiles | No | ||
| save_every_n_epochs | No | ||
| validation_smiles_file | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description bears the transparency burden. It discloses default validation behavior, dry-run vs. launch outcomes, and that the output model serves as an agent_file for RL. This is solid but does not detail failure modes or 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 efficient, front-loaded with the core purpose, and uses brief conditional statements for key flags. No fluff, though the bullet-like format is a bit packed.
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 16 parameters, no schema descriptions, and no output schema, this description is incomplete. It omits crucial details about many training parameters and presumed defaults, leaving the agent to guess or inspect further.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must explain parameters. It covers dry_run, skip_validation, launch, and output_model_file, but leaves 12+ parameters (e.g., batch_size, num_epochs, device, mol2mol_pairs) unexplained, making confident use difficult.
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: 'Fine-tune a REINVENT4 prior on a focused SMILES dataset (transfer learning).' This clearly names the verb, resource, and scope, distinguishing it from sibling tools like reinforcement learning or sampling.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides clear context on modes: dry_run, skip_validation, and launch, explaining what each does and when to set them. However, it does not explicitly discuss when to prefer this over RL or sampling, so a slight gap exists.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reinvent_validate_inputA
Validate SMILES/CSV input file before passing to REINVENT4.
Checks line counts, detects duplicates, validates each SMILES with RDKit, and applies generator-specific constraints (attachment points, fragments, etc.).
Args: smiles_file: Path to CSV or SMILES file generator: One of 'reinvent', 'libinvent', 'linkinvent', 'mol2mol' clean: If True, write _cleaned.smi with valid, deduplicated SMILES
Returns: { "valid": bool, "total_lines": int, "valid_smiles": int, "invalid_smiles": int, "duplicates": int, "cleaned_file": str (if clean=True), "errors": [{index, smiles, reason}, ...] (first 10) }
| Name | Required | Description | Default |
|---|---|---|---|
| clean | No | ||
| generator | No | reinvent | |
| smiles_file | 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 and does well: it lists specific checks (line counts, duplicates, RDKit validation, generator constraints) and discloses the side effect of writing a cleaned file when clean=True. It also describes the return object, including error details, without leaving major behavioral gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is well-structured with Args and Returns sections, the purpose is front-loaded in the first sentence, and every sentence provides useful information without waste. It is appropriately concise for the complexity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Despite the lack of annotations and output schema, the description provides a thorough overview of validation checks, side effects, and a detailed return object. It is sufficient for an agent to select and invoke the tool. Minor gaps in generator-specific constraints prevent a perfect score.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must compensate. It defines smiles_file as a path, explains clean's behavior, but generator's description only restates the enum values without explaining what each generator does or what constraints apply. This partial compensation earns a 3.
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 ('Validate') and resource ('SMILES/CSV input file') with a contextual purpose ('before passing to REINVENT4'). This distinguishes it from sibling tools like reinvent_validate_toml, which validates config 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?
It provides context for when to use the tool ('before passing to REINVENT4') but does not explicitly list alternatives or exclusion criteria. The focus on SMILES/CSV implicitly differentiates it from the TOML validator, but a direct comparison would strengthen the guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
reinvent_validate_tomlA
Validate a REINVENT4 TOML config before launch.
Attempts validation via 'reinvent --validate' (preferred) or via REINVENT4's Pydantic ReinventConfig model.
Args: toml_path_or_content: Path to config.toml or TOML content as string is_string: If True, treat input as TOML content
Returns: { "valid": bool, "errors": [{"field": str, "message": str}, ...], "warnings": [str, ...], "config_summary": dict (if valid) }
| Name | Required | Description | Default |
|---|---|---|---|
| is_string | No | ||
| toml_path_or_content | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full transparency burden. It discloses the validation method (preferred 'reinvent --validate' vs Pydantic model) and specifies the return structure. It does not cover side effects or failure modes outside the return schema, but for a validation tool this is adequate.
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 appropriately sized: a one-line summary, a sentence on method, then structured Args and Returns sections. Every sentence adds value, and it is 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?
Given the absence of an output schema, the description compensates by detailing the return object's fields (valid, errors, warnings, config_summary). It covers the validation process and parameters, making it sufficiently complete for a 2-parameter tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% description coverage, so the description must explain parameters. It does so via an Args section that clearly maps 'toml_path_or_content' to a path or TOML content string and 'is_string' to a boolean toggling content interpretation, adding meaning beyond the schema's bare titles.
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 validates a REINVENT4 TOML config before launch, specifying the resource (TOML config) and action (validate). It distinguishes itself from sibling tools by focusing on REINVENT4-specific TOML validation, although it doesn't explicitly contrast with reinvent_validate_input.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides clear context by stating 'before launch', indicating when this validation should occur. However, it does not explicitly mention alternatives or when not to use this tool, potentially leaving some ambiguity with sibling validators like reinvent_validate_input.
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.
13 tool updates
v0.1.0- First observed
reinvent_analyze_molecules - First observed
reinvent_attach_pid - First observed
reinvent_custom_scoring_component - First observed
reinvent_job_status - First observed
reinvent_plot_rl_history - First observed
reinvent_register_job - First observed
reinvent_reinforcement_learning - First observed
reinvent_rl_scoring_design_guide - First observed
reinvent_sampling - First observed
reinvent_test_scoring_component - First observed
reinvent_transfer_learning - First observed
reinvent_validate_input - First observed
reinvent_validate_toml
TDQS
Scored across 13 tools
Each tool has a clearly distinct role in the REINVENT4 workflow: sampling, training, RL scoring design, validation, custom component creation/testing, job management, plotting, and analysis. Even related tools like validate_input and validate_toml target different artifacts, and register_job/attach_pid/job_status cover distinct job lifecycle actions.
All tool names follow the consistent 'reinvent_' prefix with snake_case verb_noun (or clear noun phrase) style, e.g., reinvent_sampling, reinvent_validate_input, reinvent_register_job. The pattern is predictable and aids agent navigation.
13 tools is well-scoped for a specialized REINVENT4 server. Each tool addresses a necessary step in the generation-to-analysis pipeline, and none feel redundant or superfluous.
The toolset comprehensively covers the REINVENT4 lifecycle: generation, transfer learning, RL with scoring design, validation, custom components, job tracking, plotting, and analysis. Minor gaps exist—no tool to list all registered jobs or explicitly stop/kill a job—but these are workarounds via job_status and attach_pid.
Maintenance
Related MCP Connectors
AI-powered bioprotocol optimization — generate, search, and manage lab protocols via MCP
- chemistryOAuthcom.covasyn
Deterministic MCP for AI agents: drug discovery, ADMET, docking, LNPs, DoE, retrosynthesis, ICH M7
MCP gateway federating 22 biomedical MCP servers behind one endpoint: gnomAD, ClinVar, HPO, VEP.
MCP-Native LLM Orchestration Agent
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn MCP server that gives LLM agents access to computational protein design tools.16Apache 2.0
- AlicenseNot gradedqualityCmaintenanceMCP server for biological protein design, folding, and affinity prediction using Refua tools, with optional support for ADMET, clinical simulation, preclinical planning, wet-lab automation, and more.MIT
- AlicenseNot gradedqualityCmaintenanceMCP-native scientific skills for reproducible computational biology and AI-driven drug-discovery workflows. It combines deterministic scientific tools with an MCP server to give AI agents real computational capabilities.Apache 2.0
- AlicenseNot gradedqualityCmaintenanceAn MCP server that gives LLMs native access to cheminformatics and molecular ML tools, enabling molecular structure manipulation, descriptor calculation, ML model training, and analysis report generation through natural conversation.32MIT