Skip to main content
Glama
chemagents

tox-antitargets-mcp-server

by chemagents

tox-antitargets-mcp-server

An MCP server that reproduces the results of:

Nikitin, I.; Morgunov, I.; Safronov, V.; Kalyuzhnaya, A.; Fedorov, M. Towards Explainable Computational Toxicology: Linking Antitargets to Rodent Acute Toxicity. Pharmaceutics 2025, 17, 1573. https://doi.org/10.3390/pharmaceutics17121573

Every figure, statistic and conclusion of the paper is turned into a callable tool, computed deterministically from the public ld50-antitargets dataset (12 654 ligands × 44 antitarget docking scores + mouse-intravenous pLD50; 556 776 scores). The dataset is bundled, so the server runs offline on a CPU — no GPU and no docking step. The Vina-GPU docking in the paper was a one-time data-generation step; its output is this dataset.

Tools

Tool

Reproduces

What it returns

dataset_overview

Fig. 1 / §3.1

counts, pLD50 range, KDE plot

physicochemical_properties

Fig. 2 / §3.1.1

RDKit MW/logP/HBA/HBD/RB/TPSA stats + histograms

chemical_space_tsne

Fig. 3

t-SNE of ECFP4 space coloured by pLD50

protein_affinity_profiles

Fig. 4 / §3.2

per-protein docking medians, violin plot, CHRM2 anomaly

antitarget_ld50_association

Fig. 5 / §3.3

antitargets ranked by binder-subset pLD50 (top-5)

apply_medchem_filters

§3.4.2

NIH + Brenk filtering (12 654 → 5 392)

binders_vs_nonbinders

Fig. 6 / §3.4

Mann–Whitney U test (raw or filtered subset)

butina_clustering

§2.6

ECFP4 Butina cluster statistics

spearman_correlations

Fig. 9 / §3.6.1

per-protein Spearman ρ + bar plot

cluster_correlation_heatmap

Fig. 10 / §3.6.2

Spearman per cluster × protein heatmap

logp_confounder_analysis

Fig. 11

logP-as-hidden-variable warning for the aliphatic-acid cluster

inverse_docking_profile

Fig. 8

44-protein interaction profile of a molecule (target fishing)

reproduce_figure8_examples

Fig. 7/8

profiles of anisodamine, butaperazine, soman, 3 cannabinoids

protein_panel

Table S1

the 44 Bowes-panel targets + names + orthology note

reproduce_all

recomputes all headline numbers, compared to the paper

reproduce_claims

all

the paper's 11 conclusions, each restated with reproduced numbers

Each tool returns {"answer": ..., "metadata": ...}. Figures are saved as PNG to a local artifacts dir (TOX_ARTIFACTS_DIR) or, if S3 is configured, uploaded and returned as presigned URLs (same pattern as chemical-mcp-server).

Related MCP server: FLASK-tools

Reproduction fidelity

reproduce_all / reproduce_claims / pytest tests/ assert these against the paper:

Metric

Paper

This server

compounds / proteins / scores

12654 / 44 / 556776

identical

pLD50 range

0.77 – 7.89

0.77 – 7.89

Mann–Whitney median diff (raw)

0.38 (p<0.05)

0.382 (p≈5e-132)

Mann–Whitney median diff (filtered)

0.70 (p<0.05)

0.697 (p<0.05)

Top-5 antitargets

KCNH2, AVPR1A, CACNA1C, KCNQ1, EDNRA

exact order

CHRM2 anomalous median

≈ −4

−4.20 (highest)

Rotatable-bond mean

4.78

4.78

NIH+Brenk kept

5391

5392 (1 molecule; RDKit version)

Spearman ρ range

+0.2 … −0.3

+0.22 … −0.30

Butina clusters

9665 / largest 34 / 8326 singletons

see note

Version-related deviations (the method is faithful; values differ slightly): NIH+Brenk 5392 vs 5391 (one molecule, RDKit catalog version); Spearman median ≈ −0.24 vs the figure's −0.14 (the range matches exactly — the published CSV is post-denoising); Butina 9665 reproduces at Tanimoto distance ≈0.28 while the stated 0.65 yields ≈8260 (cluster counts are fingerprint/version-sensitive; the high-diversity conclusion is robust). Full discussion in docs/ARCHITECTURE.md.

Run locally

git clone https://github.com/chemagents/tox-antitargets-mcp-server
cd tox-antitargets-mcp-server
uv sync
uv run python -m server.tox_server       # serves http://0.0.0.0:7331/mcp
uv run pytest tests                       # 11/11 reproduction checks

No configuration is required; the server works out of the box.

Run with Docker (standalone)

docker compose up -d --build              # host port 7335 -> container 7331

This standalone mode needs no changes to CoScientist. To run it as a service inside the CoScientist docker stack instead, see "Attach to CoScientist" below.

Attach to CoScientist

Full turnkey guide + a verified end-to-end run log: COSCIENTIST_INTEGRATION.md. Tested inside CoScientist (OpenRouter LLM, FEDOT.MAS calling these tools to reproduce Fig. 5).

Does a colleague need to change anything in CoScientist? Only to run this server as part of the CoScientist docker stack. Two modes:

  • Just register a reachable server — the standalone container/process above is enough; no changes to CoScientist's files. Jump to the cli.py command below.

  • Run it inside CoScientist's docker stack — add a service to CoScientist's mcp-servers/docker-compose.yml that builds with Dockerfile.coscientist (the plain Dockerfile is only for the standalone context: .). That entry lives in the CoScientist repo and is done by whoever runs the stack — see COSCIENTIST_INTEGRATION.md step 2 for the exact YAML.

Either way, the agents only use the tools after you register the server in the RAG (Postgres + Qdrant). Register it once:

# from the CoScientist repo root, with the RAG stack running and .env configured
python scripts/rag_tools/cli.py load mcp-servers/tox-antitargets-mcp-server/rag_registration.json
# or directly:
python scripts/rag_tools/cli.py add \
  --url http://localhost:7335/mcp \
  --name tox-antitargets \
  --description "Antitarget-LD50 computational toxicology, inverse docking, hERG/safety panel (Nikitin et al. 2025)"

After registration the ToolRetrieverAgent surfaces these tools for toxicity / LD50 / mechanism-of-action queries, and ExperimentAgent (FEDOT.MAS) calls them by URL. If CoScientist runs in the same Docker network, register the in-network URL instead: http://tox-antitargets-mcp-server:7331/mcp.

See REPRODUCTION_QUESTIONS.md for the exact prompts to ask CoScientist (one per paper assertion, plus a single "reproduce everything" prompt).

LLM-formulated conclusions (OpenRouter, no CoScientist needed)

reproduce_paper.py runs the "numbers → LLM → conclusions" loop on its own, with only an OpenRouter key — useful to see a model state the paper's conclusions from the deterministic numbers:

export OPENROUTER_API_KEY=sk-or-...        # set in your shell, do not commit
uv run python reproduce_paper.py           # writes the 11 conclusions from the numbers
uv run python reproduce_paper.py --dry-run # just print the prompt (no key, no call)

Docs

Optional TOX_* env vars (port, thresholds, S3 figure storage) are listed in .env.example.

Cite

@article{Nikitin2025,
  author  = {Ilia Nikitin and Igor Morgunov and Victor Safronov and Anna Kalyuzhnaya and Maxim Fedorov},
  title   = {Towards Explainable Computational Toxicology: Linking Antitargets to Rodent Acute Toxicity},
  journal = {Pharmaceutics},
  year    = {2025},
  volume  = {17},
  pages   = {1573},
  doi     = {10.3390/pharmaceutics17121573}
}

License / data

MIT (code; see LICENSE). Data and methods belong to Nikitin et al. 2025; dataset from chemagents/ld50-antitargets.

F
license - not found
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Latest Blog Posts

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/chemagents/tox-antitargets-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server