Part of ToxMCP Suite β https://github.com/ToxMCP/toxmcp
Public MCP endpoint for the ADMETlab 3.0 API.
Expose molecule washing, SVG rendering, ADMET prediction, and CSV retrieval to any MCP-aware agent (Codex CLI, Gemini CLI, Claude Code, etc.).
ADMETlab 3.0 provides ADMET property calculations, washing, and visualization. Researchers often script against the API or copy/paste results; MCP packaging makes these workflows discoverable and callable by LLM copilots with guardrails and structured schemas.
| Capability | Description |
|---|---|
| π MCP over HTTP | JSON-RPC /mcp endpoint with lifecycle + tool catalog. |
| π§ͺ ADMET Tools | Wash molecules, render SVGs, run ADMET predictions, fetch CSV outputs. |
| π‘οΈ Client-side Guardrails | Rate limit (<=5 rps), batching (<=1000 SMILES per call), retries/backoff, fallback endpoints for ADMET. |
| π Schema-first | Pydantic models + JSON Schema surfaced via tools/list. |
| π Observability Ready | Structured JSON logs with correlation IDs; hooks for metrics/audit. |
# 1) install
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
# 2) configure
cp .env.example .env
# 3) run
uvicorn admetlab_mcp.transport.http:app --host 0.0.0.0 --port 8200 --reload
# 4) verify
curl -s http://localhost:8200/health | jq .
curl -s http://localhost:8200/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | jq .python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
cp .env.example .env
uvicorn admetlab_mcp.transport.http:app --host 0.0.0.0 --port 8200 --reloadMCP HTTP endpoint: http://localhost:8200/mcp
Health: http://localhost:8200/health
Note: ADMET predictions try
/api/admetthen fall back to/api/single/admet. The official site currently reports instability; expect occasional 5xx/404 responses from upstream.
Settings use pydantic-settings with .env support (prefix ADMETLAB_):
| Variable | Default | Description |
|---|---|---|
ADMETLAB_BASE_URL |
https://admetlab3.scbdd.com |
Base URL for all requests. |
ADMETLAB_TIMEOUT_SECONDS |
30 |
HTTP timeout. |
ADMETLAB_RETRY_ATTEMPTS |
3 |
Retry attempts on 5xx/429. |
ADMETLAB_RETRY_BACKOFF |
0.5 |
Initial backoff seconds (exponential). |
ADMETLAB_RPS_LIMIT |
5 |
Client-side requests per second cap. |
ADMETLAB_BATCH_SIZE |
1000 |
SMILES per request before chunking. |
ADMETLAB_FEATURE_DEFAULT |
false |
Default feature flag for ADMET. |
ADMETLAB_UNCERTAIN_DEFAULT |
false |
Default uncertain flag for ADMET. |
ADMETLAB_ADMET_ENDPOINT |
/api/admet |
Primary ADMET endpoint. |
ADMETLAB_ADMET_FALLBACK_ENDPOINTS |
/api/single/admet |
Fallback endpoints. Accepts comma-separated paths or JSON array string. |
ADMETLAB_API_KEY |
empty | Reserved for future auth. |
ADMETLAB_LOG_LEVEL |
INFO |
Log level. |
| Tool | Upstream | Description |
|---|---|---|
wash_molecule |
POST /api/washmol |
Standardize molecules; returns cleaned SMILES list. |
render_molecule_svg |
POST /api/molsvg |
Render molecule SVG; optional figsize [w,h]. |
predict_admet |
POST /api/admet (fallback /api/single/admet) |
ADMET panel with decision codes, probabilities, SVG highlights; returns batch aggregation and taskid from upstream payload. |
fetch_admet_csv |
POST /api/admetCSV |
Fetch CSV results by taskId; response includes headers and content. |
Lifecycle: initialize, initialized, shutdown, exit exposed via /mcp. Tool schemas are discoverable via tools/list.
uvicorn admetlab_mcp.transport.http:app --host 0.0.0.0 --port 8200Sample MCP calls (HTTP):
# initialize
curl -s http://localhost:8200/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{}}'
# list tools
curl -s http://localhost:8200/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/list","params":{}}'
# wash molecule
curl -s http://localhost:8200/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"wash_molecule","arguments":{"SMILES":"CCO"}}}'- Tool results are returned as JSON under
result.contentin MCP JSON-RPC responses. - CSV fetch includes raw text plus headers for client-side saving.
- SVGs are returned inline as strings from
render_molecule_svg.
- Client-side rate limiting honors service guidance (
<=5 rps). - Input validation and batch caps to avoid oversize requests.
- Optional API key header placeholder for future auth.
- Prefer running behind TLS-terminating proxy; restrict exposure to trusted clients.
- Tests:
pytest - Lint/format:
black . && isort . - Known upstream issues: ADMET endpoints may return 404/500 due to service instability (per official notice). The client retries and falls back but cannot guarantee success.
See CONTRIBUTING.md for development setup and pull request guidance.
- Code of Conduct:
CODE_OF_CONDUCT.md - Security policy:
SECURITY.md - Release checklist:
RELEASE_CHECKLIST.md - Changelog:
CHANGELOG.md
MIT. See LICENSE.
ToxMCP was developed in the context of the VHP4Safety project (see: https://github.com/VHP4Safety) and related research/engineering efforts.
Funding: Dutch Research Council (NWO) β NWA.1292.19.272 (NWA programme)
This suite integrates with third-party data sources and services (e.g., EPA CompTox, ADMETlab, AOP resources, OECD QSAR Toolbox, Open Systems Pharmacology). Those upstream resources are owned and governed by their respective providers; users are responsible for meeting any access, API key, rate limit, and license/EULA requirements described in each module.
Djidrovski, I. ToxMCP: Guardrailed, Auditable Agentic Workflows for Computational Toxicology via the Model Context Protocol. bioRxiv (2026). https://doi.org/10.64898/2026.02.06.703989
@article{djidrovski2026toxmcp,
title = {ToxMCP: Guardrailed, Auditable Agentic Workflows for Computational Toxicology via the Model Context Protocol},
author = {Djidrovski, Ivo},
journal = {bioRxiv},
year = {2026},
doi = {10.64898/2026.02.06.703989},
url = {https://doi.org/10.64898/2026.02.06.703989}
}Citation metadata: CITATION.cff
Once the server is running:
# health
curl -s http://localhost:8200/health | jq .
# list MCP tools
curl -s http://localhost:8200/mcp \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/list","params":{}}' | jq .