Tool availability¶
NovoMCP ships a 69-tool catalog. Which ones are actually usable depends on what you've wired up. The engine only exposes tools whose dependencies are met — no tool clutter, no "unavailable" errors on tools you can't run.
The three states¶
| State | What it means | What you see |
|---|---|---|
| Available | All the tool's dependencies (env vars, files) are present | Tool appears in tools/list, responds to calls |
| Hidden | A dependency is missing (e.g. GPU service URL not set) | Tool absent from tools/list. Set the required env var to unlock. |
| Debug mode | You set NOVOMCP_SHOW_HIDDEN_TOOLS=1 |
Every tool visible regardless of dependencies. Calls to unwired tools return "service unavailable". |
Once you set the env var for a hidden tool's dependency, it appears in tools/list on the next initialize handshake. No restart required for MCP clients if they refresh their tool list.
Out-of-the-box tools (18)¶
Install the engine (pip install -r requirements.txt && python main_https.py), and you get:
- RDKit-backed cheminformatics on user-supplied SMILES —
calculate_properties,get_molecule_info,get_molecule_profile(basic path),batch_profile,screen_library - Public-API integrations (open APIs, no keys required) —
search_chembl,search_clinical_trials,search_biorxiv,search_literature(PubMed;PINECONE_API_KEYadds a curated semantic index on top). Transient network failures possible; these hit external services. - MD pre-flight (RCSB structure classification) —
audit_system - Job tracking —
get_job_status,cancel_job - Run audit trails —
save_funnel_stage,get_funnel_audit,list_funnels. A run's tool calls and its saved stages are kept in the local audit file (~/.novo/audit.jsonl); the dashboard's Activity → Runs shows them as a timeline. - Platform meta —
get_platform_info - Autonomous modes —
run_materials_ag(mgm), which returns the materials screening protocol or a setup guide, andrun_novo_ag(agm). In v1 with no compute stack wired, it returns a setup-guide message pointing to which services unlock the full funnel plus a manual-workflow recipe using the always-available tools. Once you configureNOVOMCP_DB_HOST+ADDIE_MODELS_URL+AUTODOCK_GPU_URL+GROMACS_MD_URL, it runs the full 11-stage funnel.
No API keys, no databases, no compute services. Every one works on a laptop with just Python + internet.
What's NOT in v1 (but ships in the codebase, hidden)¶
search_similar,filter_molecules, and the tree-guided retrieval tools (explore_chemical_space,drill_into_cluster,vector_search,compare_candidates) — need a molecule index. Hidden untilNOVOMCP_MOLECULE_INDEX_URLis set; point it at a self-hosted parquet index of your own.check_compliance— a generic compliance hook. Hidden untilNOVOMCP_COMPLIANCE_URLis set; the engine bundles no ruleset of its own. Point it at NovoMCP's compliance service on the paid API (https://api.novomcp.com/v1/compliancewith an API key) or at your own service.
A note on env-var naming¶
The engine treats molecule indexing and compliance as capabilities, not vendors. Any self-hosted parquet index or your own service works — the engine only ever sees the generic NOVOMCP_* env var. Point it at whichever backend you have.
Unlocking the rest of the catalog¶
Every other tool is already in the codebase — hidden until you wire the service that backs it. Set the env var, and the tool appears in tools/list on the next handshake. Here's the map:
Omics tools¶
Requires: NOVOMCP_DB_HOST pointing at a Postgres with the omics schema loaded.
Unlocks: target_discovery, stratify_patients, validate_target.
Literature search¶
Requires: PINECONE_API_KEY + a curated Pinecone index.
Unlocks: search_literature, search_patents.
Compute services¶
Each service is a Docker image (ghcr.io/novomcp/<service>:latest). Point the engine at wherever it's running:
| Env var | Unlocks |
|---|---|
AUTODOCK_GPU_URL |
dock_molecules, dock_with_strain |
GROMACS_MD_URL |
run_molecular_dynamics, generate_dynamics |
OPENFOLD3_URL |
predict_structure, get_protein_structure, get_structure_result |
NOVOMCP_QM_URL |
8 quantum-mechanical tools (xTB / CREST / MCPB.py) |
NOVOMCP_NNP_URL |
compute_energy, optimize_geometry_nnp (AIMNet2 / MACE / ANI-2x) |
NOVOMCP_PROPERTIES_URL |
predict_pka, predict_solubility, predict_bde |
NOVOMCP_NEB_URL |
find_transition_state |
ADDIE_MODELS_URL |
predict_admet (31 ADMET predictions) |
LEAD_OPTIMIZATION_URL |
lead_optimization |
MOLMIM_OPTIMIZER_URL |
optimize_molecule |
Funnel-persistence tools¶
Requires: FUNNEL_BACKEND_URL pointing at an audit/usage-ledger service.
Unlocks: save_funnel_context, save_funnel_memory, search_prior_runs, get_funnel_context, get_pipeline_audit, get_credit_usage, generate_upload_url, get_file_status, list_files, list_jobs. With a backend set, save_funnel_stage, get_funnel_audit, list_funnels, get_job_status and cancel_job use it too; without one, a local engine keeps runs and jobs locally (see Out-of-the-box tools).
Wire your own backend via the pluggable spine (NOVO_AUDIT=custom).
Compliance hook¶
Requires: NOVOMCP_COMPLIANCE_URL pointing at a compliance service: NovoMCP's, at https://api.novomcp.com/v1/compliance (set NOVOMCP_COMPLIANCE_API_KEY to your API key; each check is billed to its account), or any compatible service.
Unlocks: check_compliance — a generic, unbranded hook that forwards the molecule + context to your configured service.
Data warehouses — Snowflake, Databricks¶
Requires: a Snowflake or Databricks connection saved on the dashboard's Connections page (stored in ~/.novo/connectors.json; set NOVO_CONNECTORS_PATH to move it).
Unlocks: push_to_destination (send results, or a run's audit trail, to a table; the table is created if missing) and pull_from_source (read a compound table, run tools over it, and optionally push the enriched rows back). Restart your MCP client after saving the connection so it picks the tools up. See Optional data services.
Materials Project — user brings API key¶
Requires: MP_API_KEY (free, sign up at materialsproject.org).
Unlocks: search_materials_project.
Debug mode¶
To see the full 69-tool catalog regardless of what's wired:
Tools that would normally be hidden show up in tools/list. Calls to unwired tools return structured "service unavailable" errors. Useful when developing / debugging or when you want to see everything at once.
Why hidden and not visible-with-errors¶
The alternative would be to always show the full 69 tools and return "service unavailable" when unwired ones are called. That's what NovoMCP used to do. It felt like a broken product.
Hidden-until-wired means:
- Users see a working demo, not a lot of gray options. First impressions matter.
- tools/list is the truth. Every tool in it works. LLM clients that pick tools autonomously (Claude, Cursor, Zed) never try something that will fail.
- Progressive disclosure. As users add services, tools appear. The 18-tool starter set grows into the full catalog only when they've earned it by configuring what backs it.
Related¶
- Quickstart — get the 18 default tools running
- Deploying services — wire up compute services to unlock more tools
- Optional data services — data + auxiliary services