Novo REST API.
Base URL, authentication, the live tool catalog, async patterns, errors, and rate limits — everything to call the engine from your code. The machine-readable spec is OpenAPI 3.1 at api.novomcp.com/openapi.json.
Your first call.
Base URL is https://api.novomcp.com/v1. Every tool is POST /tools/{name} with a JSON arguments body and a Bearer key.
curl -s https://api.novomcp.com/v1/tools/validate_target \
-H "Authorization: Bearer $NOVOMCP_API_KEY" \
-H "Content-Type: application/json" \
-d '{"arguments": {"target": "EGFR", "disease": "lung cancer"}}'import os, requests
r = requests.post(
"https://api.novomcp.com/v1/tools/validate_target",
headers={"Authorization": f"Bearer {os.environ['NOVOMCP_API_KEY']}"},
json={"arguments": {"target": "EGFR", "disease": "lung cancer"}},
)
r.raise_for_status()
print(r.json()["result"], r.json()["usage"])const res = await fetch("https://api.novomcp.com/v1/tools/validate_target", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.NOVOMCP_API_KEY}`,
"Content-Type": "application/json",
},
body: JSON.stringify({ arguments: { target: "EGFR", disease: "lung cancer" } }),
});
const { result, usage } = await res.json();{
"result": { /* tool-specific payload */ },
"usage": {
"tool": "validate_target",
"credits": 8,
"credits_remaining": 742,
"credit_status": "ok"
}
}One Bearer key.
Create and revoke keys in the dashboard — app.novomcp.com → API Keys.
Keys look like nmcp_… (Novo) or ncmcp_… (Novo Compute). For the REST API, either prefix works — what you can call is set by your plan tier, not the prefix. Send it as Authorization: Bearer … (or X-API-Key). Treat keys as secrets; revocation is immediate.
Compute tools (docking, MD, FEP, QM, NNP, structure prediction — x-compute: true in the spec) require a paid plan; a free-tier key calling one returns 403 paid_plan_required.
69 tools, one call pattern.
Core tools run on any tier; compute tools need a paid plan. Each tool's full input schema lives in the spec.
Novo — core tools
41 tools · all tiersaudit_systemAudit Systemfreebatch_profileBatch Profile Molecules10 crcalculate_propertiesCalculate Properties10 crcheck_complianceCheck Compliance3 crcompare_candidatesCompare Candidates5 crdrill_into_clusterDrill Into Cluster3 crexplore_chemical_spaceExplore Chemical Space3 crfilter_moleculesFilter Molecules5 crgenerate_upload_urlGenerate File Upload URLfreeget_credit_usageGet Credit Usagefreeget_file_statusGet File Statusfreeget_funnel_auditGet Funnel Audit Logfreeget_funnel_contextGet Funnel Contextfreeget_molecule_infoGet Molecule Info1 crget_molecule_profileGet Molecule Profile2 crget_pipeline_auditGet Pipeline Audit Logfreeget_platform_infoGet Platform Infofreelead_optimizationLead Optimization150 crlist_filesList Uploaded Filesfreelist_funnelsList Discovery Funnelsfreeoptimize_moleculeOptimize Molecule25 crpredict_admetPredict ADMET20 crpredict_clinical_outcomesPredict Clinical Outcomes25 crpull_from_sourcePull from Source5 crpush_to_destinationPush to Destination5 crrun_novo_ag'Novo AG' / '/agm' → Autonomous Mode Triggerfreesave_funnel_contextSave Funnel Contextfreesave_funnel_memorySave Funnel Memory (terminal summary)freesave_funnel_stageSave Funnel Stagefreescreen_libraryScreen Library50 crsearch_biorxivSearch bioRxiv3 crsearch_chemblSearch ChEMBL5 crsearch_clinical_trialsSearch Clinical Trials3 crsearch_literatureSearch Literature5 crsearch_patentsSearch Patents5 crsearch_prior_runsSearch Prior Discovery Runsfreesearch_similarSearch Similar Molecules5 crstratify_patientsPatient Stratification & Pharmacogenomics15 crtarget_discoveryOmics-Driven Target Discovery10 crvalidate_targetAdversarial Target Validation8 crvector_searchVector Similarity Search5 crNovo Compute — GPU & quantum
28 tools · paid plancancel_jobCancel Async Jobfreecomputecompute_energyCompute Energy (Neural Potential)5 crcomputedock_moleculesDock Molecules10 crcomputedock_with_strainStrain-Corrected Docking Score15 crcomputefind_transition_stateTransition State Search (NEB)80 crcomputegenerate_dynamicsGenerate Conformational Dynamics25 crcomputeget_3d_propertiesGet 3D Properties15 crcomputeget_job_statusGet Job Statusfreecomputeget_protein_structureGet Protein Structure5 crcomputeget_structure_resultGet Structure Result (Deprecated)freecomputelist_jobsList Pipeline Jobsfreecomputeoptimize_geometry_nnpGeometry Optimization (Neural Potential)10 crcomputeparameterize_metalParameterize Metal Site50 crcomputepredict_bdePredict Bond Dissociation Energy15 crcomputepredict_frontier_orbitalsFrontier Orbital Analysis (OLED/Optoelectronics)20 crcomputepredict_pkaPredict pKa10 crcomputepredict_reaction_thermodynamicsReaction Thermodynamics (ΔG, ΔH, K_eq)60 crcomputepredict_redox_potentialElectrolyte Redox Potential Screening50 crcomputepredict_solubilityPredict Aqueous Solubility10 crcomputepredict_structurePredict Protein Structure100 crcomputerun_conformer_searchConformer Search25 crcomputerun_excited_statesExcited State Calculation (sTDA-xTB)25 crcomputerun_fep_checkRelative Binding Free Energy (FEP)150 crcomputerun_fep_screenFEP Library Screen150 crcomputerun_molecular_dynamicsRun Molecular Dynamics250 crcomputerun_qm_calculationRun QM Calculation20 crcomputerun_qm_hessianVibrational Frequencies & Thermochemistry30 crcomputesearch_materials_projectSearch Materials Project Database5 crcomputeRendered live from api.novomcp.com/openapi.json — each tool carries its full input schema, credit cost (x-credits), and required tier (x-tier) in the spec.
Three async patterns.
Async jobs
MD, dynamics, structure prediction return a job_id; poll get_job_status every 30–60s until status is completed.
Two-phase confirmation
Batch docking and FEP first return a cost estimate + confirmation_token (no credits spent); call again with the token to execute.
File upload
generate_upload_url returns a presigned URL; PUT your file (QM logs, PDBs, trajectories) and reference the returned file_id in later calls.
Usage-based.
Per API key — current limits, subject to change. Every successful call deducts credits and echoes your remaining balance.
| Tier | Req / min | Req / day |
|---|---|---|
| Free | 10 | 10 |
| Core | 60 | 1,000 |
| Team | 300 | 10,000 |
| Enterprise | 1,000 | effectively unlimited |
Over the limit → 429 with retry_after. Depleted credits → 402 with upgrade options. See pricing.
Status codes.
| Code | Meaning |
|---|---|
| 400 | Bad request, tool execution error, or insufficient credits for an estimate |
| 401 | Missing or invalid API key |
| 402 | Trial expired or credits depleted (body has upgrade_url) |
| 403 | Paid plan required (compute tool on a non-paid key) or tier too low |
| 404 | Unknown tool |
| 429 | Rate limit exceeded (retry_after, reset_at) |
Bodies return { detail } — a string or a structured object with error plus actionable fields.
The engine, not the reasoner.
You supply the model. Let it call POST /v1/tools/{name} in its loop, with live schemas from GET /v1/tools or generated from openapi.json.
def call_novomcp(tool, arguments):
r = requests.post(f"https://api.novomcp.com/v1/tools/{tool}",
headers={"Authorization": f"Bearer {KEY}"},
json={"arguments": arguments})
return r.json()
# Use GET /v1/tools to give your model the live tool list + input schemas.Mint a key and make your first call.
Using an AI assistant instead of your own code? Add Novo as an MCP connector — same account, same credits.