Solitarius MCP
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| PYTHONPATH | No | Must include parent of reinvent_plugins/ for custom components. Optional. | (none) |
| SERVER_HOST | No | Bind host for HTTP transports. Defaults to 0.0.0.0. | 0.0.0.0 |
| SERVER_PORT | No | Bind port for HTTP transports. Defaults to 8080. | 8080 |
| REINVENT_CWD | No | Base for resolving relative paths. Defaults to server directory. | server directory |
| SERVER_TRANSPORT | No | Transport mode: stdio, sse, or streamable-http. Defaults to stdio. | stdio |
Capabilities
Features and capabilities supported by this server
| Capability | Details |
|---|---|
| tools | {
"listChanged": false
} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| 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_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. |
| 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: 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. |
| 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
Each component in scoring.components:
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. |
| 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) } |
| 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) } |
| 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). |
| 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. |
| 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) |
| 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 |
| 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 |
| 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/) |
| 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). |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/pregHosh/Solitarius-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server