Skip to main content
Glama

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:

  1. REINVENT4: the molecular-generation and optimisation engine (sampling, transfer learning, staged reinforcement learning).

  2. Solitarius MCP (this repository): exposes REINVENT4 operations as validated tools an LLM agent can call through a common interface.

  3. 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

  1. Key Features

  2. Installation

  3. Skills: Lite Mode

  4. Troubleshooting

  5. Citation


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

reinvent_validate_input

Check (and optionally clean) a SMILES/CSV input file for validity and format issues before it reaches a generator.

reinvent_validate_toml

Validate a complete REINVENT TOML config against the ReinventConfig schema before execution.

Scoring-component construction

Tool

What it does

reinvent_rl_scoring_design_guide

Guide that maps an objective onto supported scoring components, targets, and transforms before an RL configuration is built.

reinvent_custom_scoring_component

Generate a comp_*.py scoring plugin from a description (e.g. "penalize reactive groups") when no built-in component fits.

reinvent_test_scoring_component

Test a custom component against example molecules before wiring it into an RL run.

Execution

Tool

What it does

reinvent_sampling

Sample molecules from a prior or trained checkpoint. Returns SMILES + model likelihoods.

reinvent_transfer_learning

Fine-tune a prior on a focused SMILES dataset, with input validation/cleanup available before launch.

reinvent_reinforcement_learning

Goal-directed optimisation through staged RL with a multi-component scoring function.

Job management

Tool

What it does

reinvent_register_job

Create a persistent record for a launched TL or RL job.

reinvent_attach_pid

Attach the running OS process ID to a registered job.

Monitoring and analysis

Tool

What it does

reinvent_job_status

Poll status (running/completed/failed) of any TL or RL job from its process and log heuristics.

reinvent_plot_rl_history

Plot RL score convergence and per-component trends from a stage CSV. Works mid-run and post-run.

reinvent_analyze_molecules

Evaluate SMILES/CSV: validity, physicochemical properties, druglikeness (QED, Lipinski), scaffold diversity, structural alerts, UMAP projection, optional similarity/novelty vs a reference set. Writes analysis_report.json + per_molecule.csv + PNGs.

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"] } }

Prerequisites

git clone https://github.com/MolecularAI/REINVENT4.git --depth 1 REINVENT4

Build 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 -f

Stop / rebuild

docker compose down
docker compose up -d --build   # rebuild after code changes

Register 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@solitarius

If 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/sse

Or 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/sse

Use --transport http (not --transport sse). The server uses MCP's streamable-http transport (mcp ≥ 1.0); the legacy SSE flag will fail even though the URL path is /sse.

Environment variables

Variable

Default

Purpose

REINVENT_CWD

server directory

Base for resolving relative paths

SERVER_TRANSPORT

stdio

stdio, sse, or streamable-http

SERVER_HOST

0.0.0.0

Bind host (HTTP transports)

SERVER_PORT

8080

Bind port (HTTP transports)

PYTHONPATH

(none)

Must include parent of reinvent_plugins/ for custom components


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

  • PYTHONPATH must point to the parent of reinvent_plugins/, not reinvent_plugins/ itself.

  • No __init__.py in reinvent_plugins/ or reinvent_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.py should print Invalid JSON: EOF; that confirms the import succeeded.

  • Docker: docker compose ps should show Up, not Restarting.

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-smi

If 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:

DOI

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 tools
reinvent_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).

ParametersJSON Schema
NameRequiredDescriptionDefault
plotsNo
color_byNo
evaluatorsNoall
output_dirNo
smiles_fileYes
ref_smiles_fileNo

TDQS

A4.6/5.0
Behavior5/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
pidYes
job_idYes

TDQS

A4.4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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).

ParametersJSON Schema
NameRequiredDescriptionDefault
output_dirNo
parametersNo
descriptionYes
test_paramsNo
test_smilesNo
dependenciesNo
use_molcacheNo
component_tagNo__component
scoring_logicYes
component_nameYes
implementation_codeNo
test_after_generateNo

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idYes

TDQS

A4.3/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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/)

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idNo
csv_pathNo
output_dirNo
extra_columnsNo

TDQS

A4.8/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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)

ParametersJSON Schema
NameRequiredDescriptionDefault
job_idNo
workdirYes
log_fileNo
run_typeYes
config_pathNo

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
sigmaNo
deviceNo
launchNo
stagesYes
dry_runNo
workdirNo
generatorNoreinvent
inceptionNo
tb_logdirNo
agent_fileYes
batch_sizeNo
prior_fileYes
smiles_fileNo
learning_rateNo
output_prefixNo
sample_strategyNo
skip_validationNo
diversity_filterNo
randomize_smilesNo
unique_sequencesNo
distance_thresholdNo

TDQS

A4.1/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters4/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNo
dry_runNo
workdirNo
generatorNoreinvent
model_fileYes
num_smilesNo
output_fileNo
smiles_fileNo
temperatureNo
sample_strategyNo
randomize_smilesNo
unique_moleculesNo

TDQS

A4/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness3/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
paramsNo
file_pathYes
class_nameNo
test_smilesNo

TDQS

A5/5.0
Behavior5/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines5/5

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.

ParametersJSON Schema
NameRequiredDescriptionDefault
deviceNo
launchNo
dry_runNo
workdirNo
generatorNoreinvent
tb_logdirNo
batch_sizeNo
num_epochsNo
smiles_fileYes
mol2mol_pairsNo
skip_validationNo
input_model_fileYes
output_model_fileNo
standardize_smilesNo
save_every_n_epochsNo
validation_smiles_fileNo

TDQS

A3.8/5.0
Behavior4/5

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.

Conciseness4/5

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.

Completeness2/5

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.

Parameters2/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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) }

ParametersJSON Schema
NameRequiredDescriptionDefault
cleanNo
generatorNoreinvent
smiles_fileYes

TDQS

A4.2/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness4/5

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.

Parameters3/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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) }

ParametersJSON Schema
NameRequiredDescriptionDefault
is_stringNo
toml_path_or_contentYes

TDQS

A4.6/5.0
Behavior4/5

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.

Conciseness5/5

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.

Completeness5/5

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.

Parameters5/5

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.

Purpose5/5

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.

Usage Guidelines4/5

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.

  1. 13 tool updatesv0.1.0
    • First observedreinvent_analyze_molecules
    • First observedreinvent_attach_pid
    • First observedreinvent_custom_scoring_component
    • First observedreinvent_job_status
    • First observedreinvent_plot_rl_history
    • First observedreinvent_register_job
    • First observedreinvent_reinforcement_learning
    • First observedreinvent_rl_scoring_design_guide
    • First observedreinvent_sampling
    • First observedreinvent_test_scoring_component
    • First observedreinvent_transfer_learning
    • First observedreinvent_validate_input
    • First observedreinvent_validate_toml

TDQS

A4.4/5.0

Scored across 13 tools

Disambiguation5/5

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.

Naming Consistency5/5

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.

Tool Count5/5

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.

Completeness4/5

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

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP 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
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP-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
  • A
    license
    Not graded
    quality
    C
    maintenance
    An 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.
    32
    MIT