Skip to content

Changelog

The canonical changelog lives at CHANGELOG.md in the repository root, following Keep a Changelog format and Semantic Versioning.

Changelog

All notable changes to NovoMCP are recorded here. The format is Keep a Changelog and this project follows Semantic Versioning.

Unreleased

0.1.0 first public release

The open computational chemistry engine for drug discovery and materials science.

What's in the box

The engine - 69 MCP tools spanning cheminformatics, ADMET prediction, molecular docking, molecular dynamics, protein structure prediction, quantum-mechanical calculations, autonomous discovery funnel, literature/patent search, regulatory compliance, and file intelligence - Full REST API (POST /v1/tools/{name}) with a curated OpenAPI at /v1/openapi.json - MCP JSON-RPC endpoint at /mcp/ with the 2024-11-05 protocol - 247 registered HTTP routes across MCP, REST, OAuth, admin, WebSocket, and health surfaces - Boots turnkey: pip install -r requirements.txt && python3 main_https.py. Zero env vars required.

In-process tool execution - calculate_properties, search_similar, and the basic path of get_molecule_profile run against RDKit locally with no downstream service. Real values for aspirin: MW 180.16, LogP 1.31, TPSA 63.6, QED 0.55, Lipinski pass. - All other tools return structured service unavailable errors when their downstream compute is unwired. No crashes.

Pluggable spine (auth, credit metering, audit) - LocalAuthGate (default): every request resolves to a local user with unlimited access, no keys required - NoopMeter (default): zero credit accounting, always success - FileAuditSink (default): every tool call lands as a JSON-line in ~/.novo/audit.jsonl with tool name, funnel_id, success, credits, execution time, surface, and truncated error - custom implementations swap in via NOVO_AUTH=custom / NOVO_METER=custom / NOVO_AUDIT=custom and a spine_custom module

Pluggable LLM (OpenAI, Anthropic, Ollama, Azure OpenAI) - Auto-detects a provider from present credentials (OPENAI_API_KEY, ANTHROPIC_API_KEY, AZURE_OPENAI_API_KEY, or a running Ollama at http://localhost:11434) - Override with NOVO_LLM=openai|anthropic|ollama|azure|disabled - Optional: intent recognition, orchestration planning, project enrichment, semantic tool search, autonomous campaign decisions. None required to run tool calls.

Deployment - docker compose up brings up the engine and any subset of compute services you uncomment (chem-props, addie-models, autodock-gpu, gromacs-md, openfold3, novomcp-qm, novomcp-nnp, novomcp-neb, novomcp-properties, faves-compliance) - Per-service deployment guides at docs/deploying-services/ covering pre-reqs, deploy commands, env wiring, verification, and cost estimates for CPU vs GPU vs multi-GPU tiers - Cloud reference deploys at docs/deploying-to-cloud/ for AWS, GCP, and Azure with three tiers each: single VM (docker compose), managed Kubernetes (EKS/GKE/AKS), and serverless spine + on-demand GPU (Fargate/Cloud Run/Container Apps)

Surfaces - Next.js dashboard (frontend-nextjs/) as an OSS subset (hosted-product-only pages like billing/keys/team excluded) - Express/TypeScript MCP gateway (novomcp-apps/) - Backend-configurable via NOVOMCP_ENGINE_URL env var, localhost defaults

Licensing

  • Top-level tree (surfaces, wrappers, connectors, protocol docs): Apache-2.0 (LICENSE)
  • Orchestration core (novomcp/mcp/): Business Source License 1.1 with a change date of 2029-07-12 to Apache-2.0 (LICENSE.core)
  • Pre-trained model weights in companion repositories (e.g., novoexpert1-tdc-benchmark): MIT

What is not in this repo

By design, the following live separately: - The FAVES operational compliance service (curated ruleset + certified deployment; the reference implementation ships here) - Curated enrichment datasets at 122M-molecule scale - Novo AG autonomous discovery-funnel heuristics - Trained clinical outcomes model weights

None of these are required for the engine to run.

Verified startup output

INFO  Loaded 17 service configurations
INFO  Starting NovoMCP Orchestration Service
INFO  HTTP client initialized
INFO  Spine assembled: auth=LocalAuthGate meter=NoopMeter audit=FileAuditSink
INFO  NovoMCP initialized with 69 tools
INFO  NovoMCP OAuth initialized
INFO  MCP root handler initialized
INFO  Application startup complete.
INFO  Uvicorn running on http://0.0.0.0:8018

Then curl http://localhost:8018/health returns {"status":"healthy","service":"novomcp","redis":"disabled","services_available":31} and curl -X POST http://localhost:8018/mcp/tools/calculate_properties -H 'Authorization: Bearer x' -d '{"arguments":{"smiles":"CCO"}}' returns real RDKit values.