Find binders. Validate. Get data back.

predict - validate - data in weeks

From protein sequence,
to validated binders,
to discovery, in weeks.

We screen hundreds of millions of molecules with Om library × library screening technology, then use LULA to score Om Accessible Space. Discovery always includes AS-MS. You get binder and non-binder data back in weeks.

Get started below

Just a protein sequence.

Paste 300–1500 amino acids. LULA scores Om Accessible Space and selects molecules predicted to bind only your protein.

>
Amino acid sequence only·starts with M · 3001500 aaPress Enter to configure the program

Amino acid letters only. Sequences must be 300–1500 amino acids and start with M. Shift+Enter adds a new line.

How we do it

enrichment results, verified

Top-ranked molecules carry the signal.

Across proteome-scale evaluation, LULA-1 recovered 267,324 known binders in the top 1,000 ranked molecules per target versus 4,877.6 expected under random ranking. Family AUROC remains strongest across the same druggable target families.

composition and performance · target-family AUROC

Receptor/GPCR: 959 targetsKinase: 707 targetsOxidoreductase: 424 targetsHydrolase: 351 targetsProtease: 316 targetsEpigenetic/Chromatin: 207 targetsTransporter/Pump: 191 targetsTransferase: 187 targetsLigase/Synthase: 151 targetsIon channel: 147 targetsNucleic-acid enzyme: 137 targetsPhosphatase: 134 targetsOther: 1,528 targets5,439TARGETS

evaluated target-family coverage

Ligase/Synthase

0.829· 151

Oxidoreductase

0.811· 424

Transferase

0.808· 187

Ion channel

0.808· 147

Phosphatase

0.808· 134

Hydrolase

0.805· 351

Kinase

0.800· 707

Transporter/Pump

0.796· 191

Receptor/GPCR

0.793· 959

Protease

0.786· 316

Other

0.750· 1,528

Epigenetic/Chromatin

0.727· 207

Nucleic-acid enzyme

0.716· 137

median AUROC0.660.83low to high

EF@1000

54.8x

Aggregate enrichment in the top 1,000 ranked molecules per target.

Known binders recovered

267K

Recovered in top-ranked candidate sets across the benchmark.

Random baseline

4.9K

Expected known binders under random ranking.

The donut shows evaluated target-family coverage across 5,439 targets; slice size is target share and color tracks AUROC. The benchmark result is measured by known-binder recovery in the top-ranked candidate set.

Om Open Pipeline Challenges

Predict the binder. Om runs the wet lab.

Submit eligible Om molecules for real experimental validation. You keep your Result Data. Om pays the published amount for Qualified Binders selected within each protein’s current payout limit.

Explore challenges
A swarm of molecules moving at speed through Om's open discovery pipeline into wet-lab validation

Current maximum payout

$25,000

$1,000 per Qualified Binder for up to 25 Qualified Binders, in paid-submission acceptance order.

Challenge terms

  • 5,000 Wallet Credits per accepted molecule
  • Submit up to 1,000 SMILES per batch — no participant limit
  • You own your Result Data
  • Om procures and experimentally tests every accepted molecule
  • Payout priority follows paid-submission acceptance order

You keep ownership of every result and control its publication. A Qualified Binder outside the current payout limit is not paid or licensed unless Om later increases that limit.

enter from code

Scan om_50, rank with LULA, submit

The same SMILES-only contract runs through the Python SDK, the public API, and MCP. Use LULA or your own model to choose molecules — provenance is not part of eligibility.

SDK docs

Python

pip install omtx

from omtx import OmClient

client = OmClient()  # reads OMTX_API_KEY

# 1. Scan Om's accessible space for om_50 molecules
space = client.molecules.accessible_space(tier=50, n=96, idempotency_key="scan-1")
candidates = client.molecules.smiles(space)

# 2. (optional) Rank them with LULA before you spend credits
client.lula1.score(protein_sequence=STAT6_SEQ, smiles=candidates,
                   idempotency_key="lula-1")

# 3. Submit your picks — 5,000 credits each, you own the results
client.discovery_challenges.submit(
    challenge_id=CHALLENGE_ID,  # from /discovery/challenges
    smiles=candidates[:10],
    accept_qualified_binder_data_license=True,
    idempotency_key="stat6-submit-1",
)

callable by agents

Add Om MCP to Claude and Codex.

Connect the hosted Om MCP in the Claude or Codex app, then use the CLI if you work in the terminal. Score proteins, start Discovery, and read Wallet Credits from the agent. No Python SDK required.

Claude

Claude app

Claude.ai and Claude Desktop

  1. 1Open Customize → Connectors (claude.ai/settings/connectors).
  2. 2Add a custom connector named Om.
  3. 3Paste https://agents.omtx.ai/mcp, then Add and Connect.
  4. 4Finish Om OAuth in the browser and enable Om in the chat + menu.

Claude Code

OAuth remote MCP

Register the remote HTTP MCP server, then authenticate from /mcp.

Setup

claude mcp add --transport http omtx https://agents.omtx.ai/mcp

Restart Claude Code, run /mcp, complete OAuth in the browser, then ask for om_status.

Codex

Codex app

Developer mode, then an unpublished plugin

  1. 1In ChatGPT, open Settings → Security and login and turn on Developer mode.
  2. 2Open Plugins, choose +, name the plugin Om, and paste https://agents.omtx.ai/mcp.
  3. 3Finish Om OAuth. Permission is email only. There is no OpenID checkbox or path to select.
  4. 4Start a new chat, enable Om from Developer mode, then ask for om_status.

Codex CLI

OAuth remote MCP

Add the hosted Om MCP endpoint, then complete the OAuth login.

Setup

codex mcp add omtx --url https://agents.omtx.ai/mcp
codex mcp login --scopes email omtx

Restart Codex, then ask for om_status or pricing_get to confirm the server is attached.

how we do it

FAQ

Use LULA to predict molecular binders, validate with AS-MS, and get binder and non-binder data back in weeks. Here is how Om runs the wet lab.

We screen hundreds of millions of molecules with Om library × library screening technology, then use LULA models to score Om Accessible Space and select molecules predicted to bind only your protein. Discovery always includes AS-MS validation. You get binder and non-binder data back in weeks. If you want the molecules themselves, order them later through Om MCP.

score → select → order, in one Wallet Credits flow

From a target sequence to a molecule order.

Bring a protein sequence. LULA-2 scores a fixed-price slice of Om Accessible Space and returns ranked, orderable rows. Pick the hits you want to test, spend Wallet Credits, and Om ships the molecules.

Create an API key, fund Wallet Credits, then run the SDK flow.

Real SDK flow

01

Define target + client

from pathlib import Path
from uuid import uuid4

import polars as pl
from omtx import OmClient

JAK2_V617F_SEQUENCE = "YOUR_JAK2_V617F_PROTEIN_SEQUENCE"
client = OmClient(api_key="YOUR_API_KEY")
02

Launch LULA-2 scoring

job = client.lula2.score(
    protein_sequence=JAK2_V617F_SEQUENCE,
    source="om",
    tier=50,
    n=50_000,
    top_k=10_000,
    idempotency_key="jak2-v617f-lula2-r1",
)
03

Collect ranked hits

artifact_paths = []
result_dir = Path("outputs/jak2-v617f-lula2-r1")

for job_id in job["job_ids"]:
    client.jobs.wait(job_id, poll_interval=5, timeout=3600)
    artifact_paths.extend(
        client.jobs.download_all_artifacts(
            job_id,
            output_dir=result_dir / job_id,
            overwrite=True,
        )
    )

score_tables = [
    pl.read_parquet(path)
    for path in artifact_paths
    if path.suffix == ".parquet"
]

score_rows = pl.concat(score_tables).sort("score", descending=True)
selected_hits = score_rows.head(100).to_dicts()
04

Order with Wallet Credits

addresses = client.molecules.shipping_addresses()

order = client.molecules.order(
    items=selected_hits,
    shipping_address_id=addresses["default_shipping_address_id"],
    idempotency_key=f"jak2-v617f-round-1-{uuid4()}",
)

print(order["order_number"])

50K

Om molecules

100

selected hits

Om

orderable rows

1 order

Wallet Credits

  1. 01

    Define the target

    JAK2 V617F

    Bring the protein sequence for a real target like JAK2 V617F.

  2. 02

    Score Om space

    50K molecules

    Run LULA-2 against an Om Accessible Space tier and get ranked molecules back.

  3. 03

    Select molecules

    top 100

    Pick the highest-confidence rows you want moved onto the bench.

  4. 04

    Order with credits

    Wallet Credits

    Spend Wallet Credits on the selected hits. Om ships you molecules. That's it.

bring your hits, order molecules

Use LULA scores, generated molecules, docking, Boltz, or internal ML. Pick the molecules you want to test; Om turns selected orderable hits into a Wallet Credits-funded order.

LULAgenerated moleculesdockingBoltzinternal ML

early molecule partner

OnePot.ai

Latest Articles

View more
Find a STAT6 binder. Om runs the wet lab—and pays.
diligence

Find a STAT6 binder. Om runs the wet lab—and pays.

The STAT6 Open Pipeline Challenge lets you submit om_50 molecules for AS-MS validation, own every Result Data record, and earn $1,000 for each payout-selected Qualified Binder, initially up to 25.

August 17, 2026 · 4 min read

Read More
LULA-1 is now open-weight on Hugging Face
data

LULA-1 is now open-weight on Hugging Face

LULA-1 scores protein-ligand pairs from sequence and SMILES, with local weights for non-commercial research and hosted scoring for commercial workflows.

July 31, 2026 · 6 min read

Read More
Vibe Discovery Is Coming
api

Vibe Discovery Is Coming

Om MCP brings Diligence, Data Access, Artifacts, Jobs, and Hub workflows into Codex, Claude Code, and OAuth-capable MCP harnesses.

April 8, 2026 · 12 min read

Read More

While you're vibin'...

Watch the discovery playlist.

Om discovery playlist thumbnail

A little birdy said to ask Om MCP to make a vibe video for your discovery efforts. Want to ask for your favorite vibe video style?

> 
View MCP vibe prompt