cBioPortal for MODS, October 2026

Issue: #658 · Builds on: #590 (cohort funnel), #327 (external cohort track) Script: backend/scripts/cohorts/cbioportal_inventory.py Data: the public API, portal v7.1.2, database 3.0.0, gene table hgnc_v7_2025.10.7. The script fetched everything between 08:10 and 08:18 PDT on 2026-10-02 (613 requests). An exploratory pass from 07:49 gave the same counts. Web sources were read the same day.

What this is for. The cohort funnel (#590) used one slice of cBioPortal to answer one question: how many public patients have tumours like hers. This is the whole-site look. It covers what the portal holds, the tools and services around it, what the terms allow, and which pieces serve MODS. It builds nothing except the read-only script behind the numbers.

Summary

  • What cBioPortal is, for us. The largest free, uniform window onto clinical cancer genomics. It offers:

    • 548 public studies behind one REST API with no login;
    • a weekly dump of the whole database;
    • open services around it: Genome Nexus for variant annotation, OncoTree for cancer types, Cancer Hotspots.

    It is a source of evidence about patients and models like her. It is not a drug-response source: its one drug-response dataset is a 2019 copy of GDSC. It is not a knowledge-graph source. Beyond overall survival, only MSK-CHORD’s treatment timelines carry outcomes.

  • For her disease it holds 62 studies with colorectal samples, nearly twice the funnel’s 34. They include MSK-IMPACT 50K, MSK-MET, NCI’s patient-derived models, and several organoid and cell-line collections (§1.2).

  • What the API already showed about her (§5):

    • Variants. Her APC frameshift is a recurrent hotspot, in 1.9–2.9% of colorectal patients in four cohorts. Her TGFBR2, MGA and NTRK2 variants appear at their residues in none of about 9,000 patients. Getting that right needed genomic coordinates, because protein strings mislead across sources.
    • Liver groups. Joining MSK-MET to MSK-CHORD gives an independent check on the Neighbors liver groups: 90% agreement, with “no liver” confirmed for 38 of 40. It also shows that disease like hers, nodal without liver, is three public patients.
    • Models. Six BRAF V600E, MSS colorectal patient-derived models are orderable from NCI, with exome and RNA-seq on the portal.
  • Recommendations, in order (§6):

    1. a shared client with read-only MCP tools;
    2. the MSK-MET cross-check for #614 (2026-10-05: #614 was decided as D-Q4-13, and the approved plan leaves the MSK-MET line out);
    3. per-variant cohort context in the Genomic Browser and the Options Ledger;
    4. Genome Nexus: Pfam domains on the lollipop now, the variant resolver later;
    5. a proxy-model shortlist on #327.

    GENIE is Richard’s call.

  • Not now:

    • a self-hosted portal holding her data;
    • cohort-derived KG edges;
    • TCGA as her expression reference. It failed in June, for reasons that still apply.
  • Found in passing:

    • OncoKB’s terms. They forbid AI/ML training. How MODS uses OncoKB is a licence decision recorded on the project’s tracker (#660).
      • OncoKB approved the project’s account on 2026-05-18 (#680).
    • A false answer without a token. OncoKB’s no-token API says there are no approved treatments for BRAF V600E colon cancer. MODS’s connectors use the tokened API, and any new path must too.

1. What the public portal holds

Every count in this section comes from the script, run on 2026-10-02.

1.1 The whole portal

WhatCount
Public studies548
Samples, summed over studies414,487
Studies on hg19 / hg38476 / 72
Cancer types (OncoTree nodes)897
Molecular profiles2,559
Gene panels69
Distinct clinical attributes4,811

The sample total double-counts. The MSK studies re-use the same MSK-IMPACT patients, and the TCGA builds overlap each other.

What the studies carry:

DataStudies
Mutations542
Copy number351
RNA (sequencing or microarray)156
Protein (RPPA or mass spectrometry)83
Structural variants223
Overall survival316
Progression-free survival77
An MSI call (MSI_TYPE or MSI_STATUS)92
Metastatic site101
Treatment records97
  • Treatment data is concentrated in one study. The 97 studies hold 43,263 treatment rows, and MSK-CHORD alone holds 24,028 of them (56%). Most of the rest, 11,157 rows, are spread over 64 TCGA builds.
  • Drug response is in one dataset. Of 201 “generic assay” profiles across 29 assay types, three are drug response, and all three are the same CCLE 2019 screen (IC50, AUC and a z-score). §1.3 says what it is.
  • importDate is a reload date. All 548 studies show an import date in 2026 (441 of them in January), so it says when the portal last loaded a study, not how old its data is. Reproducibility has to rest on the portal version, the fetch time and the source publication.

1.2 Colorectal cancer across the whole portal

The funnel searched the bowel subtree of OncoTree plus the mixed studies that carry treatment data, 34 studies in all. Counting colorectal samples in every study finds 62 studies and 44,986 colorectal samples. A sample counts when its OncoTree code is one of the seven the funnel uses (COAD, READ, COADREAD, MACR, SRCCR, CMC, CAIS). Three studies have no OncoTree field; for those, the cancer-type text or the study’s own cancer type decides. No other colorectal code is in use: the remaining bowel codes are appendiceal, anal, small-bowel, neuroendocrine or adenoma.

Some of the hits are not tumour data:

  • Blood. The three clonal-haematopoiesis studies hold 6,451 of the colorectal samples, almost all in msk_ch_2023 and msk_ch_2020. Their mutations were called in blood, and the cancer type is the patient’s. Never count them as tumour samples. Without them the total is 38,535.
  • Polyps. crc_hta11_htan_2021 holds 61 precancerous polyps.

The largest pan-cancer and model studies. All but HCMI are outside the funnel’s 34:

StudyColorectal samplesWhat it adds
msk_impact_50k_20265,277MSK-IMPACT 50K (Cancer Cell 2026): allele-specific copy number, cancer cell fractions, mutational signatures, HLA types. No treatment data.
msk_met_20213,548MSK-MET (Cell 2022): per-organ distant-metastasis flags, including distant lymph nodes. §5.2 uses it.
pancan_mimsi_msk_20242,447MSI calls with orthogonal MMR immunohistochemistry
pan_origimed_20201,290Chinese pan-cancer panel cohort
pancan_pdmr_20251,218 (175 models)NCI Patient-Derived Models Repository: PDX, PDX-derived organoids and cultures, with exome and RNA-seq
msk_impact_20171,007The original MSK-IMPACT cohort
pancan_hcmi_2025318 (169 models)Human Cancer Models Initiative organoids, with RNA-seq and methylation. Also in the funnel.
msk_ctdna_vte_2024173ctDNA panel sequencing (MSK-ACCESS)
ccle_broad_2025, ccle_broad_2019, cellline_ccle_broad, ccle_genentech_2014, cellline_nci6096, 84, 56, 55, 7Cell lines; only CCLE 2019 carries drug response
pan_pdo_wcm_202669 (29 models)Weill Cornell patient-derived organoids
pancan_pcawg_202052Whole genomes (PCAWG)

The full per-study table is in the script output.

1.3 What the one drug-response dataset is

CCLE 2019’s three drug-response profiles cover 266 compounds, not the two dozen of the original CCLE drug panel. Every compound links to cancerrxgene.org, and the curve fits cite Vis et al. 2016, the GDSC fitting method. So it is a pre-2019 snapshot of the Sanger GDSC screens, mapped onto CCLE lines. It includes dabrafenib, PLX-4720, trametinib, cetuximab, 5-FU and SN-38. 55 of the portal’s 84 colorectal lines have IC50 rows, and so do 9 of its 10 BRAF V600E colorectal lines (all but COLO201).

For the Q4 proxy work (D16: PRISM first, GDSC2 as replication) it is a convenience copy, not a source. The primary releases are newer, and its licence is ambiguous (§4).

2. Tools on the site

Everything except the chat works without logging in. Sources are the cbioportal-frontend code and docs.cbioportal.org, read 2026-10-02.

ToolThe question it answersUse for MODS
Query page with OQLWhich samples carry these alterations? For example BRAF: MUT = V600E or APC: MUT = TRUNC.Defining a cohort in one line, as a shareable URL
Results ViewOncoPrint, frequency by cancer type, mutual exclusivity, any-against-any plots, the lollipop, co-expression, altered-against-unaltered comparison with survival, pathways, downloadHand exploration of her genes across cohorts
Study ViewA cohort dashboard with click-to-filter charts: clinical attributes, mutated genes, survival, treatment charts, clinical-event counts. A patient “Similarity Map” (embeddings) is behind a feature flag since July 2026.Exploring MSK-CHORD by hand before writing a funnel stage
Patient ViewOne patient: timeline, genomic evolution, mutational signatures and, since June 2026, an mRNA tab that plots the patient’s expression against the study cohortWhat a self-hosted instance would show for her (§6)
Group ComparisonHow groups A and B differ: survival, clinical attributes, alterations, mRNA, protein, methylation and generic assays, drug response includedQuick checks of a hypothesis
Virtual studies and sessionsCustom cohorts with permanent links. Login only stores them.Citable query links for Ledger facts
MutationMapper, OncoPrinterLollipops and OncoPrints from pasted data. MutationMapper sends the pasted variants to Genome Nexus for annotation, so they leave the browser.Not for her data
cBioPortalChat (chat.cbioportal.org, August 2026)Natural-language questions, answered by Claude Sonnet over the database, after a Google sign-in. It stores whole conversations indefinitely, staff may read them, and it asks users not to paste health information.Public-cohort questions only, never anything about her

The site is a good place for Richard to look around. The Study View of MSK-CHORD shows the treatment and timeline data the funnel used. MSK-MET shows the per-organ metastasis flags.

3. Getting data out

PathWhat it isBest forWatch for
REST API (/api)152 operations, OpenAPI 3.1. No login, and the “internal” endpoints that serve treatments, clinical events and survival answer without auth too.Targeted queries: the funnel, this spike, an MCP toolIt calls itself “[Alpha]” and “beta”, and it broke real clients in 2026 (entrezGeneId became required on the mutations GET). Today projection=ID on /studies returns []. There is no published rate limit, and maintainers declined application-level limits on 2026-09-21, so pacing is on us.
Weekly database dump (index)Parquet, one file per table, about 87 GB in all. The latest is dated 2026-09-27. The useful tables are small: mutations 176 MB, timeline events 11 MB, patient and sample clinical data 8 and 12.5 MB.Bulk population work in one pull, e.g. variant recurrence across all 548 studies with no pagingOnly recent dumps are kept, so archive what we use, with its date. A Hugging Face mirror is tagged AGPL, which conflicts with the data licences.
Per-study tarballs and the datahub (datahub.assets.cbioportal.org/{studyId}.tar.gz; GitHub cBioPortal/datahub)Each study in cBioPortal’s staging formatFile-level copies of one studyOverwritten in place, with no version in the name. 38 studies, including crc_msk_2026, have neither, so the dump or the API is the only route to them.
Client librariesNo official Python client. R cBioPortalData is maintained; CRAN cbioportalR likely breaks on whole-study pulls (its fix is unmerged). The documented Python bravado example points a Swagger-2.0 client at the OpenAPI 3.1 spec.—The funnel’s plain-HTTP client is the right call for us.
Self-hosting (docker-compose)The web app (Java, 2–4 GB heap), ClickHouse, a session service and MongoDB. Studies load through validateData.py and metaImport.py.A private instance holding her data (§6)On Windows it must run from WSL2. A one-patient study looks loadable from the docs but is untested. The timeline format draws numeric labs such as CA 19-9 as line charts.
MCP serversAn official hosted server (mcp.cbioportal.org, August 2026) that runs SQL over a ClickHouse clone; a “navigator” that turns questions into portal URLs; and BioMCP (MIT, about 645 stars), which includes cBioPortal variant frequenciesAd-hoc public-cohort questions in Claude sessionsThe official server needs Google sign-in and logs your account email and every query. “Still under construction”; the team’s own benchmark scores it 72% overall and 46% on navigation questions.

Three things follow for MODS:

  • Pin and record. Every pull should store the portal version, the fetch window and the source study, as the funnel does. Nothing in the data says when it changed.
  • The dump beats paging for anything broad. One 176 MB mutation file answers “how often is this variant seen, anywhere” for the whole portal, and it reaches crc_msk_2026, which has no tarball.
  • Nothing of hers goes to the hosted AI services. Their terms log identity and content.

3.1 Maple’s own client and tools (built 2026-10-02, #667)

Recommendation 1 (§6) is built.

  • One client. backend/connectors/cbioportal_client.py is shared by the funnel, the inventory and the tools. It has a process-wide 0.6 s limiter, retries that honour Retry-After, typed errors and an atomic disk cache. Its cache key is #590’s, so old caches replay unchanged.
  • Three read-only MCP tools in mods_server.py, built on connectors/cbioportal_queries.py:
    • mods_cbioportal_studies: find studies, with data types and stated licence;
    • mods_cbioportal_variant_frequency: per-study patient counts for a variant or residue. It matches the exact string and the GRCh37 coordinate, reports panel coverage, and refuses blood studies;
    • mods_cbioportal_cohort_counts: attribute values and treatment-agent patients under an OncoTree filter. Every answer carries the portal version and the fetch window. Tool answers are cached for 7 days, in a cache separate from the scripts’.
  • Proof the switch changed nothing. With the hash seed pinned, both scripts replay their caches offline to byte-identical JSON under the old and new clients. Their JSON is now written with sorted keys, so a replay is byte-identical whatever the seed.

4. Services around the portal, and the terms

4.1 Genome Nexus: variant annotation

MSK’s annotation service, and the one cBioPortal itself uses. One call returns, per variant:

  • VEP consequences and a canonical transcript;
  • SIFT, PolyPhen and AlphaMissense;
  • Cancer Hotspots and Mutation Assessor;
  • ClinVar, SignalDB (MSK germline frequencies) and myvariant.info;
  • OncoKB, only when a token is passed.

The software is MIT; the data carry their sources’ licences.

InstanceBuildServerHotspotsClinVar
www.genomenexus.org (and v1, which the portal uses)GRCh372.2.3, VEP 116v32026-02-08
grch38.genomenexus.orgGRCh381.4.1, lagging on purposev22025-01-06

Live probes with the textbook BRAF V600E:

  • GRCh37 works. The canonical transcript is ENST00000288602.6, c.1799T>A, p.V600E. The response carries the V600 hotspot (897 tumours), Mutation Assessor “high”, and AlphaMissense 0.99.
  • GRCh38 misnames it by default. It picks ENST00000288602.11 and returns p.V640E, with no hotspots. The MSK isoform override restores V600E, but hotspots stay empty. Her Caris VCFs are GRCh38, so her calls should be annotated on GRCh37: lifted over, or queried by transcript HGVS-c.
  • It accepts more than coordinates. BRAF:p.V600E (with a colon) and ENST00000288602:c.1799T>A both resolve. BRAF p.V600E (with a space) fails silently.
  • Failures return HTTP 200. A record can come back successfully_annotated: false with no error text. OncoKB is dropped without notice when no token is passed. The rsID endpoint annotates every ALT allele at the site. A client has to check each record.
  • Some of the payload is not licence-clean. SignalDB carries OncoKB-style terms, academic only with no “patient services”, and myvariant.info passes COSMIC through. Request fields deliberately.

Two uses for MODS fall out of this:

  • The lollipop can get Pfam domains with two unauthenticated calls. These are GET /ensembl/canonical-transcript/hgnc/{gene} and POST /pfam/domain, the calls cBioPortal’s own mutation mapper makes. This is #173 item 7, with no need to adopt the AGPL component.
  • It can canonicalize her variants for cohort joins (§5.1). It can also settle the Phase 8.5 resolver’s misses: an HGVS-p-only missense resolves through GENE:p.X. A novel indel annotates from its coordinates, but it still has no ClinGen CAID.

4.2 OncoTree: the cancer-type vocabulary

  • Versions and licence. CC BY 4.0. The latest stable release is oncotree_2025_10_03, with 897 nodes; the portal’s 897 cancer types are this tree. Each node carries NCIt and UMLS cross-references.

  • The crosswalk to MONDO lives on Mondo’s side, as xrefs:

    OncoTreeMondo
    COADREADMONDO:0005008, colorectal adenocarcinoma
    COADMONDO:0002271, colon adenocarcinoma
    READMONDO:0002169, rectum adenocarcinoma
  • None of them is MODS’s colorectal anchor. The KG anchors colorectal cancer at MONDO:0005575, which carries no OncoTree xref. Which Mondo node a cohort lands on is a vocabulary decision, so it is flagged here, not made (CLAUDE.md hard rule).

  • OncoTree’s own mapping file has no MONDO column and lags the latest release by 52 codes.

4.3 Cancer Hotspots

v3 adds 164 hotspots (Bandlamudi et al., Cancer Cell 2026), mined from the MSK-IMPACT 50K cohort above. Data are ODbL and the software AGPL; there is a public API. Hotspots are single residues and in-frame indels, so a frameshift like her APC variant is out of scope by design; §5.1 is the question for those.

4.4 OncoKB, inside and outside the portal

  • On the public portal, OncoKB cards come through the portal’s own token. Its proxy demands a header in which the caller attests that it is not fetching OncoKB data programmatically, so code must never use it.
  • The no-token public API gives a false answer for her. For BRAF V600E in colon adenocarcinoma it returns “There are no FDA-approved or NCCN-compendium listed treatments specifically for patients with BRAF V600E mutant colon adenocarcinoma.” It says the same for melanoma, so this comes from the stripped data, not from curation. Anything that calls that API directly would pass the sentence on. (The Genome Nexus pipeline just omits OncoKB without a token.)
    • MODS’s connectors call the tokened API and refuse to run without a token (oncokb_annotate_connector.py: DEFAULT_API_BASE, download()). Any new path must keep that property.
  • The terms forbid training on it. The licensing FAQ says OncoKB “cannot be used to train AI/ML models whether for academic or commercial purposes”; benchmarking needs explicit permission. “Use for patient services” needs a licence agreement.
    • maureen_focus_v1 includes OncoKB; how MODS uses it is a licence decision recorded on the project’s tracker (#660).
    • OncoKB approved the project’s account in May 2026 (#680).
    • The stakes are small. OncoKB is 483 of about 8.0 million relations in that composition. 22 of them concern her variants, and CIViC duplicates 9 of BRAF V600E’s 16. (2026-10-05: #744’s re-annotation has since grown the OncoKB source to 7,217 relations.)

4.5 Terms at a glance

WhatTermsFor MODS
Portal data, by defaultODbL, “with no restrictions on the use of the data, as long as you properly give attribution to the original studies”Free for our use; share-alike if a derived database is redistributed
MSK-CHORD, MSK-MET, MSK-50K and 6 other MSK studiesCC BY-NC-ND 4.0, stated in the studyPrivate, non-commercial use is fine. Adapted material may not be shared. Public aggregate counts were Richard’s call, as in #590; he cleared them for publication on 2026-10-06.
crc_msk_2026None stated, so ODbL by defaultAmbiguous for the newest MSK cohort; treat it like the other MSK studies until MSK says otherwise
TCGABroad GDAC licence (datahub README)Open
CCLE 2019 drug responseStudy marked ODbL, but the data are GDSC’sGDSC’s own terms are stricter (internal research only, an internal memory note). Use the primary source.
AACR GENIE (genie.cbioportal.org)Google login and registration; no re-identification, no redistributionRichard’s call
SoftwarecBioPortal backend, frontend and React components AGPL-3.0; Genome Nexus MIT; OncoTree CC BY 4.0; Cancer Hotspots data ODbL, software AGPLRunning it privately is fine. Embedding AGPL code in Maple is a licence decision.
OncoKBAcademic viewing; no training; patient services need a licenceA licence decision recorded on the project’s tracker (#660); the account was approved in May (#680)
Hosted chat and MCPLog account identity and content; staff may read chatsPublic questions only

Citation: the FAQ asks for Cerami et al. 2012, Gao et al. 2013 and de Bruijn et al. 2023, plus the data source.

5. Three things the API can already do for her

These are demonstrations, not analyses. Each one is a pattern that a MODS integration would make routine.

5.1 Her somatic variants in public colorectal cohorts

Five of her somatic variants, counted per patient in four large colorectal cohorts:

Variantcrc_msk_2026 (6,789)TCGA PanCancer (594)DFCI (619)SYSUCC, China (1,015)
APC T1556Nfs*3 (c.4666dupA)195 (2.9%)11 (1.9%)18 (2.9%)23 (2.3%)
BRAF V600E537 (7.9%)48 (8.1%)111 (17.9%)23 (2.3%)
TGFBR2 at D5221 (D522N)000
MGA at I9450000
NTRK2 at V7170000
  • Her APC frameshift is a recurrent hotspot, the most common change at its residue in every cohort. Her BRAF V600E is common, though cohorts differ several-fold. DFCI’s cohort is BRAF- and MSI-rich: by the funnel’s rule only 37 of its 111 V600E patients are MSS.
  • Her TGFBR2, MGA and NTRK2 variants appear at their residues in none of about 9,000 patients. The genes themselves are often mutated (403, 415 and 148 patients in crc_msk_2026). The panels cover them, except MGA on IMPACT341 (202 samples). For the NTRK2 V717M VUS, no recurrence is weak evidence against a hotspot role, not a verdict.
  • Protein strings are not a safe join key. The first pass counted her APC variant as absent, because cBioPortal gives T1556Nfs*3 (a duplication in a run of As) a proteinPosStart of 1554, not 1556. And TGFBR2 is numbered on different isoforms in different studies: residue 522 reads D in the MSK data and R in TCGA’s. The script matches on the exact protein-change string and checks it against the GRCh37 genomic coordinate. For APC and BRAF the two agree exactly in all four cohorts. Any variant-level join in MODS should go through genomic coordinates and one canonical annotation (§4, Genome Nexus).

5.2 Joining studies on MSK-IMPACT IDs: liver and distant nodes

MSK studies share patient IDs, so one study can annotate another. MSK-MET (about 25,000 patients) records, per organ, whether a distant metastasis was diagnosed, taken from pathology reports and billing codes (Nguyen et al. 2022). That includes distant lymph nodes. The funnel had no such field: MSK-CHORD’s lymph-node flag mixes regional and distant nodes, so the funnel could not pick out nodal disease like hers. Group sizes only, because #614 pre-registers the Neighbors question:

BRAF V600E + MSS, MSK-METMSK-METAlso in MSK-CHORD…with encorafenib or anti-EGFR there…with encorafenib
all1411265732
metastatic1371235531
no liver metastasis recorded4946129
distant nodes, no liver8831
nodes, neck or mediastinum only3300
  • Disease like hers is about three public patients. That counts the patients whose specific distant sites are nodes, neck or mediastinum. It is enough for an anecdote and too few for a Neighbors group.
  • “Unspecified” is common. 17 of the 49 patients with no liver flag carry only the unspecified-site flag, so absence of a named site is weak evidence.
  • The join gives #614 a check that could have failed. MSK-CHORD reads liver involvement from radiology reports by NLP; MSK-MET records it separately. On the 3,079 colorectal patients in both, the two agree for 2,770 (90.0%). When they disagree it is mostly MSK-CHORD saying liver where MSK-MET does not (217 against 80), probably because MSK-CHORD’s follow-up runs later. Among BRAF V600E + MSS patients, MSK-MET confirms MSK-CHORD’s “no liver” for 38 of 40. So the funnel’s liver groups hold up against an independent reading.

5.3 Models with her driver profile

CollectionColorectal modelsBRAF V600EV600E and MSSNotes
NCI PDMR (pancan_pdmr_2025)175206, all orderable from NCIPDX, organoids and cultures; exome and RNA-seq on the portal
HCMI organoids (pancan_hcmi_2025)16911not recordedNo MSI field; TMB suggests about half are hypermutated
WCM organoids (pan_pdo_wcm_2026)293not recordedMSI score only
CCLE 2019 cell lines84106 by the literatureCL34, COLO201, COLO205, HT-29, LS411N, MDST8, OUMS23, RKO, SNUC5, SW1417

The portal has no drug response for the PDX or organoid models. Their value is that they can be found, ordered, and matched to her expression profile, which is the Q1 2027 PDX and organoid lane in #327. The MSS cell lines match an internal memory note: HT-29, COLO 205/201 (one donor), SW1417, MDST8 and OUMS-23. RKO and LS411N are MSI-high.

6. Where it fits in MODS

The yardstick is the Q4 plan: Spine B ships the Options Ledger and Neighbors, and Spine A earns a model signal on proxies. Two standing guardrails apply. Other patients never become KG nodes, and cohorts are validation and decision support, never a repurposing signal.

#OptionGoal and surfaceValueCostVerdict
1One cBioPortal client, and read-only MCP tools on it. Lift the funnel’s Client into backend/connectors/, on the pattern of ctgov_client.py (rate limiter, versioned disk cache, typed errors, fixture tests). Expose two or three tools: find studies; a variant or gene across colorectal cohorts, joined on coordinates with panel coverage reported; and clinical and treatment counts under a filter.Enables everything below; research sessionsHigh: every later use shares one tested client, and a session can answer “how often is X in BRAF V600E MSS CRC” in one call1–2 daysDo first
2Give Neighbors v0 the MSK-MET cross-check (#614). Report the liver agreement (90%; “no liver” confirmed 38 of 40) as a check on the funnel’s groups, and record that her nodal phenotype is about three public patients.G1 decision support; the Neighbors spikeHigh and immediate: it answers part of #614’s “liver status” questionHours; a funnel stageDo, as group sizes until #614 is decided. 2026-10-05: decided as D-Q4-13, without the MSK-MET line.
3Variant context in the clinic and the Ledger. From the weekly dump, compute each of her somatic variants’ frequency across all colorectal studies, joined on GRCh37 coordinates. Store it with the dump date. Show it in the Genomic Browser’s Table tab with a link to the matching portal query, and let a Ledger fact cite it.G4 traceability; G1 facts; Genomic Browser (#173)Medium. Today nothing shows population context for her variants.2–3 daysDo after 1
4Genome Nexus in the variant path. (a) Pfam domains on the lollipop (#173 item 7). (b) Canonical HGVS for the Phase 8.5 resolver’s misses, on the GRCh37 instance, with fields chosen to skip SignalDB, COSMIC and OncoKB, and successfully_annotated checked per record.G4; G3, if variant-level edges ever helpMedium: (a) is cheap and visible; (b) closes a known gapAbout 1 day eachDo (a); (b) when Phase 8.5 resumes
5Proxy-model discovery. Use the portal to shortlist models: NCI PDMR’s 6 orderable BRAF V600E MSS colorectal PDX models (exome and RNA-seq), the HCMI and WCM organoids, and the CCLE lines.G2 and G3 proxies; #327’s Q1 2027 laneMedium later; drug response has to come from elsewhere (PDMR’s own data, PRISM, GDSC)A list nowRecord on #327; no build
6AACR GENIE. GENIE 20.0 (more than 289,000 samples) for the recurrence of rare variants such as her NTRK2 V717M; BPC CRC (1,485 patients with curated regimens and progression) for a Neighbors v1.G1; NeighborsMediumRegistration, and redistribution is forbiddenRichard’s call, as in the Q4 plan
7A self-hosted cBioPortal holding her data. Her three Caris specimens, treatment timeline and CA 19-9 series as a private study, beside public cohorts, in the patient view oncologists know.G1, a clinician-familiar viewReal, but the Genomic Browser covers most of itHigh: ClickHouse, MongoDB and WSL2 to run; a GRCh38 VCF→MAF step Maple doesn’t have, against mostly hg19 public studies; AGPLNot now. Revisit if a clinician or collaborator asks for a cBioPortal view.
8Cohort-derived edges in the KG (alteration frequencies, co-occurrence).KGLow nowMedium, plus mapping approvalsNo. “Fidelity before breadth” (#592, #438). Frequency edges would feed the popularity shortcut the model already loses to (#523), and MSK’s ND licences complicate derived data.
9TCGA expression as a reference for her WTS.G3 features——No. The June 2026 attempt failed: ρ = −0.17 against Caris’s own percentiles, from a cross-pipeline batch effect (protein_biomarker_expression_writeup.md §9). cBioPortal serves the same TCGA RSEM matrices, so the same failure applies.
10OncoKB through the portal’s proxy, or the no-token API.———Never. One is attested against, and the other gives a false answer for her (§4.4).

The ranking follows two lessons from this repo. A tested shared client comes before features, because the funnel and this spike both had to rebuild the same plumbing. And population data serves decisions and checks, not the model, until the model beats its baselines (Q4 roadmap §3.2).

Why build tools rather than adopt the official MCP server or BioMCP:

  • The official server needs a Google sign-in and logs every query against the account.
  • Both serve Claude sessions only. Maple’s own backend and agents can’t call them.
  • Neither shares the funnel’s cache, pacing or fetch-window records.

BioMCP is still a reasonable stopgap for ad-hoc public questions in a session.

7. Follow-ups

Filed on 2026-10-02 with Richard’s go-ahead: three as new issues and three as comments on the existing issues they belong to.

Follow-upWhereSurfaces
F1. cBioPortal client and MCP tools (option 1), built (§3.1)#667backend/connectors/, backend/mcp_servers/mods_server.py, tests
F2. MSK-MET cross-check for the Neighbors groups (option 2)Comment on #614Funnel script, doc
F3. Variant context table, Genomic Browser column, Ledger source (option 3)#668A backend service and endpoint, GenomicBrowser.jsx
F4. Pfam domains on the lollipop (option 4a)Comment on #173GenomicBrowser.jsx, a small backend proxy or cache
F5. Genome Nexus in the Phase 8.5 resolver (option 4b)#669, for when Phase 8.5 resumesmods_patient_kg_service.py, kg_normalize/
F6. Model shortlist (option 5)Comment on #327None
Also filed: OncoKB licence terms#660, the licence decision; the account approval: #680None

F3 as built (2026-10-04)

The Genomic Browser’s Table tab now has a CRC cohorts column: patients carrying the variant, out of patients sequenced over the gene, across every public colorectal study on the portal.

  • How it is built. scripts/cohorts/build_variant_context.py writes backend/data/cohorts/cbioportal/variant_context.json (gitignored). GET /api/mods/vcf/cohort-frequency serves it. The rules are in mods_variant_context_service.py, and the pooled count is pooled_variant_frequency in connectors/cbioportal_queries.py. A full build takes about four minutes at the 0.6 s pace.
  • Which calls. Somatic calls from the two colorectal specimens: tiered Pathogenic to VUS, VAF ≥ 0.05, and absent from the separate melanoma specimen. A call that two independent cancers share is inherited, so it is left out. Without that second specimen the build refuses.
  • The join. Her GRCh38 calls are lifted to GRCh37 locally (pyliftover, UCSC chain), so no coordinate of hers is sent anywhere. The portal is asked for gene-level calls only. The exact-match string is the one the portal records at her coordinate (T1556Nfs*3, where Caris writes T1556fs).
  • Which studies. 28 studies are typed colorectal, typed bowel, or sit under colorectal. A bowel-typed study without OncoTree codes is skipped, and so are the msk_ch_* studies. MSK-IMPACT, TCGA and CPTAC IDs count once across studies; any other ID is local to its study.
  • Check against §5.1. Restricted to the four cohorts, the build reproduces §5.1 exactly: APC 195 / 11 / 18 / 23 and BRAF 537 / 48 / 111 / 23. String and coordinate agree in all four (test_live_survey_counts_reproduce, opt-in).
  • A disagreement the column shows rather than hides. Over all 28 studies, crc_msk_2017 and coadread_mskcc anchor the same A-run insertion one base later (5:112175952:-:A). There the string finds 30 patients and the coordinate finds 5. The cell carries a ⚠, and the tooltip gives the per-study counts.
  • Not done: the Options Ledger. A Ledger fact cannot cite this until the Ledger schema lands (#565, #613).

Parallelization analysis (for F1–F6)

  • Surfaces touched:
    • backend API: yes (F3);
    • frontend: yes (F3, F4);
    • worker handler: no;
    • migration: probably not. F3’s table can be a cached file first, and becomes one if it moves into Postgres;
    • MCP tool: yes (F1);
    • DB-stored config: no;
    • docs: yes;
    • tests: yes (F1 fixtures, F3).
  • Parallel split. F1 goes first, because F3 and F5 call its client. F2, F4 and F6 are independent of it and of each other, and can run now. F3’s frontend waits on its API contract.
  • Collision hotspots.
    • backend/mcp_servers/mods_server.py (F1) is shared with every MCP change.
    • frontend/src/components/GenomicBrowser.jsx (F3, F4) is also touched by the open PR #643. Serialize F3 and F4 behind it.
    • No migrations.py, component_registry.py, main.py, Terminal.jsx or ComponentLoader.jsx changes are expected.
  • Verify-how:
    • F1: fixture tests, plus one live call per tool against /api/info recorded in the output.
    • F2: the funnel prints the agreement table on every run.
    • F3: the APC and BRAF counts reproduce §5.1, and string and coordinate matches agree.
    • F4: BRAF shows RBD, C1 and kinase domains at 156–227, 235–280 and 458–712.
    • F5: the resolver’s miss count drops on her 14 eligible variants.

8. Limits

  • Counts are as of 2026-10-02, from portal v7.1.2. Studies are reloaded in place, and the API is beta.
  • MSK-MET’s site flags come from billing codes and pathology reports (Nguyen et al. 2022), which the authors say miss some events. “Unspecified” is common.
  • The MSS rule is the funnel’s. Group sizes inherit its definitions, including its judgement calls.
  • Untested: loading a one-patient study into a self-hosted instance; embedding react-mutation-mapper in Maple; whether the API is throttled at the infrastructure level.
  • Unverified: the MSS status of CL34 and SNUC5; the current DepMap and HCMI terms; whether GENIE BPC CRC is browsable on the GENIE portal as well as on Synapse (de Bruijn et al. 2023 describes BPC data in cBioPortal).
  • The transcript problem is general. Any protein-level comparison across sources can mislead. §5.1 found two cases in five variants.

Reproduce

The numbers above measure the portal on 2026-10-02, and it reloads weekly. To replay this measurement, point the script at its snapshot in the main checkout:

python backend/scripts/cohorts/cbioportal_inventory.py --offline --cache-dir C:/Maple/backend/data/cohorts/cbioportal/snapshots/2026-10-02_658/http_cache
python backend/scripts/cohorts/cbioportal_inventory.py --json backend/data/cohorts/cbioportal/inventory.json
  • The snapshot holds the run’s 613 cached responses and its output, inventory_2026-10-02.json. It is host-only and gitignored, because MSK-CHORD and MSK-MET are CC BY-NC-ND. An offline replay on 2026-10-04 sent no request and reproduced that output exactly.
  • A fresh measurement (the second command) sends about 650 requests, one at a time with a 0.6 s pause, and caches them under backend/data/cohorts/cbioportal/http_cache/ in the checkout it runs in. Copy that cache into a new dated snapshot before the session ends.
  • Each step prints its own fetch window in PDT.

Web sources were read on 2026-10-02 by two research passes. Every claim above carries its source, either inline or in the issue.