MCP tool reference

The Nullary MCP server exposes 31 tools. Install it first (guide), then your assistant can call any of these.

Common inputs & response

Every search_* tool accepts these optional inputs (plus any tool-specific ones noted below):

ParamTypeDescription
targetstringUniProt accession or gene symbol (fastest with an accession).
compoundstringCompound name, ChEMBL ID, or InChIKey.
indicationstringDisease / indication (where applicable).
outcomestringinactive, terminated, failed_safety, …
limit / offsetintegerPagination. limit 1–100 (default 25).

Each tool returns a stable envelope. Results default to the curated tier (the credible, dose-response / human-curated layer); every finding carries full provenance (source, DOI/PMID/URL, license, confidence).

json
{
  "findings": [ /* finding objects (same shape as REST /findings) */ ],
  "returned_count": 12,
  "has_more": true,
  "query_metadata": { "tool": "search_inactive_compounds", "limit": 25, "offset": 0 },
  "coverage_note": "…"   // present only for thin Phase-1 modalities
}

This envelope is also returned as MCP structured output: every tool declares an outputSchema, and tools/call returns the same object as structuredContent alongside the text block — so structure-aware clients get a typed result without parsing JSON out of a string. All tools are read-only (annotated readOnlyHint).

Small molecule

ToolReturns
search_inactive_compoundsInactive compound–target pairs.
search_failed_selectivitySmall molecules that failed selectivity.
search_admet_failuresSmall-molecule ADMET failures (hepatotox, cardiotox, oral bioavailability, BBB, …).

CRISPR

ToolReturns
search_failed_guidesFailed / ineffective guide RNAs.
search_failed_essentiality_screensNon-dependency / failed essentiality screens.
search_ancestry_specific_failuresAncestry-specific CRISPR failures.

Antibody

ToolReturns
search_developability_failuresDevelopability failures: aggregation, polyreactivity, expression, thermostability.
search_failed_clinical_antibodiesDiscontinued / terminated clinical antibodies.

Peptide

ToolReturns
search_failed_peptide_therapeuticsFailed peptide therapeutics.
search_peptide_stability_issuesPeptide stability / half-life failures.

PROTAC

ToolReturns
search_failed_protacsPROTACs that failed degradation / ternary / permeability.
search_protac_e3_issuesE3-ligase recruitment / ternary-complex failures.

Oligonucleotide

ToolReturns
search_failed_oligonucleotidesASOs / siRNAs that failed engagement or developability.
search_oligo_delivery_failuresOligonucleotide delivery failures.

Vaccine, ADC & bispecific

ToolReturns
search_failed_vaccinesFailed / terminated vaccines (by pathogen or indication).
search_vaccine_immunogenicity_failuresFailed vaccine immunogen designs.
search_failed_adcsADCs that failed at any stage.
search_adc_linker_failuresADC failures attributed to linker chemistry.
search_failed_bispecificsBispecifics that failed at any stage.
search_bispecific_format_failuresBispecific format / chain-pairing failures.

Cross-cutting

ToolReturns
search_admet_failures_all_modalitiesADMET failures across every modality.
search_drug_drug_interaction_failuresDrug–drug interaction failures (PK/PD).
search_mechanism_failuresMechanism-of-action failures.
search_failed_replicationsFindings that failed to replicate.
search_safety_failuresClinical / preclinical safety failures across modalities.

Cross-modality history

These answer “what's been tried” across every modality. Each takes one required argument.

ToolReturns
search_target_historyAll failed approaches against a target. Requires target (UniProt accession is fastest).
search_indication_historyAll failed approaches for an indication. Requires indication.
search_pathogen_historyVaccine / antimicrobial failures for a pathogen. Requires pathogen.

Direct lookups

ToolReturns
get_compoundA molecule's full negative profile across sources. One of inchi_key, chembl_id, or pubchem_cid.
get_finding_provenanceA single finding with full provenance. Requires id (finding UUID).
get_coveragePer-modality and per-source coverage counts. No arguments.

Example: get_compound

json
// tools/call → get_compound
{ "chembl_id": "CHEMBL941" }

// →
{
  "compound": { "pref_name": "IMATINIB", "chembl_id": "CHEMBL941",
                "inchi_key": "KTUFNOKKBVMGRW-UHFFFAOYSA-N", "max_phase": 4 },
  "returned_count": 200,
  "findings": [ /* every negative finding for this molecule, across sources */ ]
}

Prefer raw HTTP? The same data is available without MCP — see the REST API reference.

Nullary MCP server usage on Smithery