@pipeworx/allen-brain
Connect: https://gateway.pipeworx.io/allen-brain/mcp · Install: one-click buttons
No MCP client? Skip the connection: POST https://gateway.pipeworx.io/v1/tools/search_packs {"query":"..."} to find a tool below, GET /v1/tools/<name> for its schema, POST the same URL with arguments for the data — see For AI agents.
Tools: 3
Genes, the brain structure ontology, and in-situ hybridization expression experiments from the Allen Institute’s public Brain Atlas RMA API — where in the brain a gene is expressed, and the canonical region hierarchy that expression is annotated against.
Tools
allen_search_genes(acronym?, name_contains?, entrez_id?, organism?, num_rows?, start_row?)— gene symbol / name / Entrez ID → the Allen internal gene id and organism.allen_structures(acronym?, name_contains?, structure_id?, graph_id?, num_rows?, start_row?)— brain region name or acronym → structure id, parent, and the root-to-leafstructure_id_paththat establishes containment.allen_expression_datasets(gene_acronym, plane_of_section?, product_id?, include_failed?, num_rows?, start_row?)— the ISH experiments (SectionDataSets) for a gene: atlas product, plane of section, section thickness, and the dataset id behind an Allen figure.
Auth
Keyless.
Data sources
- https://api.brain-map.org/api/v2/data/query.json — the RMA query endpoint;
every tool here is one RMA expression against it (
model::Gene,model::Structure,model::SectionDataSet).
Traps
Gene acronyms are case-distinct across species and that is a data fact, not a
formatting one. Gabra1 is the mouse gene, GABRA1 the human one; they are
separate records with different experiments attached (14 vs 94 SectionDataSets
at time of writing). An exact-match query with the wrong casing returns a clean
empty array. Both gene tools retry case-insensitively and set casing_note
saying so, rather than reporting a silent zero.
Over-filtering a SectionDataSet query empties it silently. Adding
products[id$eq1] to a gene with no Mouse-Brain-ISH series returns
total_rows: 0 with success: true — not an error. Product and plane filters
here are optional, and when a filtered query comes back empty the pack re-runs
it unfiltered and reports the unfiltered total, so a zero reads as “your filter
excluded everything” rather than “this gene has no expression data”.
Encode the whole criteria value. RMA criteria contain [, ], $ and
'. encodeURIComponent over the entire expression works; passing brackets
raw works from a browser but is eaten by a shell and by some HTTP clients,
which produces an empty result that looks like an API outage. (That is exactly
how this pack’s first probe failed.)
success: true with msg: [] is the normal shape of “no rows”. A rejected
query is success: false with the error in msg — the pack raises on that,
so the two are never conflated.
Structure graphs are per-species. graph_id 1 is adult mouse, 10 human,
17 developing mouse. A human region is not in the mouse graph; the default is
1, and an empty result says which graph was searched.
Tools
- allen_search_genes — Finds genes in the Allen Brain Atlas by symbol, name or Entrez ID, with the organism each record belongs to.
- allen_structures — Resolves a brain region name or acronym to its Allen structure id, parent, and root-to-leaf containment path.
- allen_expression_datasets — Lists the Allen Brain Atlas in-situ hybridization experiments for a gene, with atlas product and plane of section.
Tools
allen_expression_datasets— Lists the Allen Brain Atlas in-situ hybridization experiments for a gene, with atlas product and plane of section.allen_search_genes— Finds genes in the Allen Brain Atlas by symbol, name or Entrez ID, with the organism each record belongs to.allen_structures— Resolves a brain region name or acronym to its Allen structure id, parent, and root-to-leaf containment path.