Cybergenic
Cancer gene co-occurrence and exclusivity in tumour cohorts, with confound controls and exact tests.
Should I use this
Quality & Safety
Based on automated analysis of tool definitions and protocol compliance.
Context Cost
This is the approximate number of tokens consumed each time the server's tools are loaded into a model's context. Higher counts reduce the attention available for other tasks.
Install
One-Click Install
Add this to your `claude_desktop_config.json` file:
{
"mcpServers": {
"mcp": {
"url": "https://cybergenic.im/mcp?via=mcpregistry"
}
}
}Remote endpoints
https://cybergenic.im/mcp?via=mcpregistrystreamable-httpWhat it can do
Tool inventory
Tools (9)
π’lookup_gene_pair(gene_a, gene_b, cancer, max_cohorts)
Measured co-alteration statistics for two genes in every tumour cohort where Cybergenic's discovery scan tested the pair: tumours with both genes altered against the number expected, odds ratio, p-value and Benjamini-Hochberg q over that cohort's whole family of tested pairs, the confound control applied (molecular subtype, lineage or histology strata, with mutation burden conditioned on), and whether the pair passes the scan's own discovery gates. A direction is stated only where it is significant and consistent, and cohorts are also counted by independent patient source (the two MSK cohorts overlap). Also returns Cybergenic's published findings on the pair with their verdicts and permalinks. Use it to answer whether two genes' driver mutations co-occur or are mutually exclusive in patient tumours. Associations in tumour sequencing, not causal or clinical evidence.
Input Schema
{
"type": "object",
"properties": {
"gene_a": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"pattern": "^[A-Za-z0-9][A-Za-z0-9-]*$",
"description": "HGNC gene symbol, for example KRAS, STK11 or CDKN2A (case-insensitive)."
},
"gene_b": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"pattern": "^[A-Za-z0-9][A-Za-z0-9-]*$",
"description": "HGNC gene symbol, for example KRAS, STK11 or CDKN2A (case-insensitive)."
},
"cancer": {
"type": "string",
"minLength": 2,
"maxLength": 80,
"description": "Optional cancer filter: a name or part of one ('breast', 'colorectal cancer', 'lung') or an abbreviation (NSCLC, LUAD, CRC, PDAC, GBM, UCEC, HCC)."
},
"max_cohorts": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 12,
"description": "Cohorts returned in full detail, strongest first (default 12); every other tested cohort still comes back as a one-line row."
}
},
"required": [
"gene_a",
"gene_b"
],
"additionalProperties": false
}π’gene_partners(gene, cancer, direction, max_q, passing_only, ...)
The genes whose driver mutations co-occur with, or are mutually exclusive with, a given gene in patient tumours, strongest first by Benjamini-Hochberg q, from every pair Cybergenic's discovery scan tested: one row per partner and independent patient source, with the tumours, observed and expected co-alteration and the odds ratio. By default only pairs the scan's own gates keep (significant, a real effect size, a consistent direction, enough tumours); set passing_only to false to include significant pairs that fail a gate. Filter by cancer, direction and q threshold. Use it to survey a gene's co-alteration landscape before looking up a specific pair. Associations in tumour sequencing, not causal or clinical evidence.
Input Schema
{
"type": "object",
"properties": {
"gene": {
"type": "string",
"minLength": 1,
"maxLength": 20,
"pattern": "^[A-Za-z0-9][A-Za-z0-9-]*$",
"description": "HGNC gene symbol, for example KRAS, STK11 or CDKN2A (case-insensitive)."
},
"cancer": {
"type": "string",
"minLength": 2,
"maxLength": 80,
"description": "Optional cancer filter: a name or part of one ('breast', 'colorectal cancer', 'lung') or an abbreviation (NSCLC, LUAD, CRC, PDAC, GBM, UCEC, HCC)."
},
"direction": {
"type": "string",
"enum": [
"either",
"co-occurrence",
"mutual-exclusivity"
],
"default": "either",
"description": "Keep only co-occurring or only mutually exclusive partners. Default: either."
},
"max_q": {
"type": "number",
"exclusiveMinimum": 0,
"maximum": 0.25,
"default": 0.05,
"description": "Largest Benjamini-Hochberg q to include, up to 0.25. Default 0.05."
},
"passing_only": {
"type": "boolean",
"default": true,
"description": "Keep only pairs that pass all of the scan's gates (default). False also lists significant pairs that fail one."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 50,
"default": 20,
"description": "Most partners to return. Default 20."
}
},
"required": [
"gene"
],
"additionalProperties": false
}π’search_findings(query, verdict, kind, sort, limit, ...)
Search Cybergenic's published findings: gene-pair co-occurrence and mutual exclusivity, survival associations, CRISPR gene dependencies and single-gene leads, each with the verdict the engine measured (strengthened, weakened, inconclusive, artifact risk or novel lead) and the reason for it. The query works like the site's search: exact gene symbols, cancer names or abbreviations (NSCLC, CRC, PDAC, TNBC), or both, and every term must match. Returns permalinks to cite and ids for get_finding.
Input Schema
{
"type": "object",
"properties": {
"query": {
"type": "string",
"maxLength": 200,
"description": "Genes, cancers or both, for example 'KRAS pancreatic', 'TP53 breast' or 'NSCLC'. Omit to list everything."
},
"verdict": {
"type": "string",
"enum": [
"novel-lead",
"strengthened",
"weakened",
"artifact-risk",
"inconclusive"
],
"description": "Keep only findings with this verdict."
},
"kind": {
"type": "string",
"enum": [
"cooccurrence",
"exclusivity",
"prognostic",
"association",
"dependency",
"repurposing",
"tractability"
],
"description": "Keep only one kind of finding."
},
"sort": {
"type": "string",
"enum": [
"recent",
"signal",
"novelty",
"papers"
],
"default": "signal",
"description": "recent: newest first; signal: strongest corrected q first; novelty: least studied first; papers: most studied first."
},
"limit": {
"type": "integer",
"minimum": 1,
"maximum": 25,
"default": 10,
"description": "Results per page. Default 10."
},
"page": {
"type": "integer",
"minimum": 1,
"maximum": 500,
"default": 1
}
},
"additionalProperties": false
}π’get_finding(id)
The full record of one Cybergenic finding, by id or permalink: what was measured and in which cohort, the statistics (the 2x2 table, odds ratio, p and q), the verdict and why, the confound checks, how many papers mention the genes together, CRISPR dependency and survival facts when measured, the prediction locked for it in the hash-chained registry, the same question in other cohorts, and a citation. The hypothesis text is a model-written annotation, not evidence.
Input Schema
{
"type": "object",
"properties": {
"id": {
"type": "string",
"minLength": 36,
"maxLength": 200,
"description": "A finding id (UUID) or its permalink, https://cybergenic.im/findings/<id>."
}
},
"required": [
"id"
],
"additionalProperties": false
}π’get_track_record
Cybergenic's live track record: how many predictions it has locked in its hash-chained registry before re-testing them, how many replicated in an independent cohort against matched controls (including the less-studied-pair subset), and how many findings currently pass every check as both strong and overlooked. Read it before describing how reliable the engine is; it states its own limits, including whether the replication comes from well-known biology.
Input Schema
{
"type": "object",
"properties": {},
"additionalProperties": false
}π’fisher_exact_test(a, b, c, d, alternative, ...)
Fisher's exact test for a 2x2 table [[a, b], [c, d]]: two-sided and both one-sided p-values (computed in log space, so a tiny p keeps its real exponent), the sample odds ratio, and the conditional maximum-likelihood odds ratio with its exact confidence interval (what R's fisher.test reports). For two genes: a = tumours with both altered, b = gene A only, c = gene B only, d = neither. Up to 100,000 observations. The same implementation as cybergenic.im/tools/fisher-exact-test.
Input Schema
{
"type": "object",
"properties": {
"a": {
"type": "integer",
"minimum": 0,
"maximum": 100000000,
"description": "Row 1, column 1 (for two genes: both altered)."
},
"b": {
"type": "integer",
"minimum": 0,
"maximum": 100000000,
"description": "Row 1, column 2 (gene A only)."
},
"c": {
"type": "integer",
"minimum": 0,
"maximum": 100000000,
"description": "Row 2, column 1 (gene B only)."
},
"d": {
"type": "integer",
"minimum": 0,
"maximum": 100000000,
"description": "Row 2, column 2 (neither)."
},
"alternative": {
"type": "string",
"enum": [
"two-sided",
"greater",
"less"
],
"default": "two-sided",
"description": "Which p-value is the headline and which interval is reported. greater: odds ratio above 1."
},
"confidence_level": {
"type": "number",
"minimum": 0.5,
"maximum": 0.9999,
"default": 0.95,
"description": "Confidence level for intervals, between 0.5 and 0.9999. Default 0.95."
}
},
"required": [
"a",
"b",
"c",
"d"
],
"additionalProperties": false
}π’chi_square_test(table)
Pearson chi-square test of independence for an r x c table of counts (2x2 up to 10x10), with Yates' correction for 2x2 tables and the G-test: statistic, degrees of freedom, p-value, expected counts, adjusted residuals, CramΓ©r's V, whether Cochran's rule for the approximation holds, and Fisher's exact test when the table is 2x2. Empty rows and columns are dropped and reported.
Input Schema
{
"type": "object",
"properties": {
"table": {
"type": "array",
"minItems": 2,
"maxItems": 10,
"items": {
"type": "array",
"minItems": 2,
"maxItems": 10,
"items": {
"type": "integer",
"minimum": 0
}
},
"description": "Rows of whole-number counts, for example [[20, 15], [30, 35]]."
}
},
"required": [
"table"
],
"additionalProperties": false
}π’odds_ratio_relative_risk(a, b, c, d, confidence_level)
Effect sizes for a 2x2 table [[a, b], [c, d]] whose rows are two groups and whose columns are outcome yes and no: the odds ratio (Woolf interval, and the conditional exact interval), the relative risk (Katz interval), the risk difference (Newcombe interval) and the number needed to treat, at the chosen confidence level, plus Fisher's exact p. A zero cell applies the Haldane-Anscombe correction to the Woolf and Katz estimates, and the result says so.
Input Schema
{
"type": "object",
"properties": {
"a": {
"type": "integer",
"minimum": 0,
"maximum": 100000000,
"description": "Group 1 with the outcome."
},
"b": {
"type": "integer",
"minimum": 0,
"maximum": 100000000,
"description": "Group 1 without the outcome."
},
"c": {
"type": "integer",
"minimum": 0,
"maximum": 100000000,
"description": "Group 2 with the outcome."
},
"d": {
"type": "integer",
"minimum": 0,
"maximum": 100000000,
"description": "Group 2 without the outcome."
},
"confidence_level": {
"type": "number",
"minimum": 0.5,
"maximum": 0.9999,
"default": 0.95,
"description": "Confidence level for intervals, between 0.5 and 0.9999. Default 0.95."
}
},
"required": [
"a",
"b",
"c",
"d"
],
"additionalProperties": false
}π’fdr_correction(p_values, labels, alpha, family_size)
Multiple-testing correction for a list of p-values: Benjamini-Hochberg q-values and Benjamini-Yekutieli, Holm, Hochberg and Bonferroni adjusted p-values, the number of discoveries at alpha for each method, and the Benjamini-Hochberg cutoff rank. Pass family_size when more tests were run than the p-values supplied (for example only the top hits were kept). Up to 10,000 p-values per call; the same implementation as cybergenic.im/tools/fdr-correction, verified against R p.adjust and statsmodels.
Input Schema
{
"type": "object",
"properties": {
"p_values": {
"type": "array",
"minItems": 1,
"maxItems": 10000,
"items": {
"type": "number",
"minimum": 0,
"maximum": 1
},
"description": "The raw p-values, one per test."
},
"labels": {
"type": "array",
"maxItems": 10000,
"items": {
"type": "string",
"maxLength": 80
},
"description": "Optional names for the tests, in the same order as p_values."
},
"alpha": {
"type": "number",
"exclusiveMinimum": 0,
"exclusiveMaximum": 1,
"default": 0.05,
"description": "Significance level for counting discoveries. Default 0.05."
},
"family_size": {
"type": "integer",
"minimum": 1,
"maximum": 1000000000,
"description": "Total number of tests run, when larger than the number of p-values supplied."
}
},
"required": [
"p_values"
],
"additionalProperties": false
}Community
Evidence