Fittest MCP

Survival of the fittest, in materials science. Ask a swarm of ML interatomic potentials whether to trust them on your molecule, or send it to DFT.

-users-calls mace_mpa0, aimnet2, orblive models

Users: distinct anonymous clients (salted hash of client name + IP) that received at least one structure verdict from check_structures or explain, excluding internal test clients. People sharing one public IP and client (same office, venue Wi-Fi, or claude.ai connectors that egress from shared IPs) merge into one user; one person on several networks or clients counts several times.

What it does

Model agents (MACE-MPA-0 medium, PBE/PBE+U (MPtrj + sAlex), AIMNet2, wB97M-D3(BJ)/def2-TZVPP, Orb-v3 conservative, PBE/PBE+U (OMat24)) predict forces on your structure. A structure is trust only if every model supports its elements, the forces don't all vanish, their disagreement σF is below the fixed threshold τ (70th percentile of round-0 σF), and the Calibrator's Beta-posterior P(correct) for the served model, learned from DFT labels on Transition1x reactions, is at least 0.5. Otherwise send_to_dft, with the reasons. Each score comes with its 90% interval and the number of DFT labels behind it. Calibrated for gas-phase C/H/N/O chemistry; elsewhere the score is an extrapolation and the response says so.

Tools: check_structures, explain, swarm_status, usage_stats. Limits: 20 structures per call, 2–100 atoms each, molecules only, rate-limited per client.

Connect

Claude Code

claude mcp add --transport http fittest https://fittest-mcp.westus2.cloudapp.azure.com/mcp

Claude Desktop / claude.ai: Settings → Connectors → Add custom connector → https://fittest-mcp.westus2.cloudapp.azure.com/mcp

Cursor (~/.cursor/mcp.json)

{"mcpServers": {"fittest": {"url": "https://fittest-mcp.westus2.cloudapp.azure.com/mcp"}}}

Local demo (stdio, stand-in models: verdicts are meaningless, for trying the tools offline)

claude mcp add fittest-demo -- uvx --from git+https://github.com/Pavel-Tk/fittest fittest-mcp --fake-models

Local with real models: install "fittest[models] @ git+https://github.com/Pavel-Tk/fittest" (CPU torch) into a fresh environment, optionally Orb-v3 in a second environment named by FITTEST_ORB_PYTHON, and point your client at that environment's fittest-mcp; exact commands in README §1.2. This install is documented but not tested end to end; the hosted server is the tested path. A plain uvx install has no models.

Then ask: "Use fittest to check whether I can trust an ML potential on this water molecule: O 0 0 0, H 0.96 0 0, H -0.24 0.93 0."

What is logged

every call to this server is logged (UTC time, tool name, an anonymous client id = salted hash of client name + IP), structure and atom counts, verdict counts, latency and ok/error category. Raw IPs are not stored by the app or written to the access log; since 2026-10-31 19:11 UTC Caddy's error/unmapped-host logs drop them too (before that, some Caddy error and bare-IP entries in the system journal contained client IPs, kept until journal rotation). Structures, coordinates, element lists and names are NOT stored. Aggregate counts are public at /stats. Live counts: /stats.

Source

https://github.com/Pavel-Tk/fittest (MIT)