How does engineered C. butyricum cross the blood-brain barrier to directly bind GLP-1 receptors?¶
Notebook ID: nb-SDA-2026-04-15-gap-pubmed-20260411-093924-7330920b · Analysis: SDA-2026-04-15-gap-pubmed-20260411-093924-7330920b · Generated: 2026-04-21T18:43:41
Research question¶
The abstract claims C. butyricum-GLP-1 crosses the BBB and binds to GLP-1 receptors, but this is mechanistically implausible for a bacterial organism. The mechanism by which a gut bacterium could traverse the BBB and the actual source of GLP-1 receptor binding remains unexplained.
Gap type: unexplained_observation Source paper: Engineered Clostridium butyricum-pMTL007-GLP-1 Delays Neurodegeneration in Prnp-SNCA*A53T Transgenic Mice Model by Suppressing Astrocyte Senescence. (2026, Probiotics and antimicrobial proteins, PMID:40627051)
Approach¶
This notebook is generated programmatically from real Forge tool calls and SciDEX debate data. Forge tools used: PubMed Search, MyGene, STRING PPI, Reactome pathways, Enrichr.
Debate Summary¶
Quality score: 0.95 · Rounds: 4
1. Target gene annotations (MyGene)¶
import pandas as pd
ann_rows = [{'gene': 'IDO1', 'name': 'indoleamine 2,3-dioxygenase 1', 'summary': 'This gene encodes indoleamine 2,3-dioxygenase (IDO) - a heme enzyme that catalyzes the first and rate-limiting step in t'}, {'gene': 'PXR', 'name': "CYP3A4 5' regulatory region", 'summary': "This record represents the 5' regulatory region of the cytochrome P450 family 3 subfamily A member 4 gene. This sequence"}, {'gene': 'REG3G', 'name': 'regenerating family member 3 gamma', 'summary': 'This gene encodes a member of the regenerating islet-derived genes (REG)3 protein family. These proteins are secreted, C'}, {'gene': 'ZONULIN', 'name': 'haptoglobin', 'summary': 'This gene encodes a preproprotein, which is processed to yield both alpha and beta chains, which subsequently combine as'}]
pd.DataFrame(ann_rows)
| gene | name | summary | |
|---|---|---|---|
| 0 | IDO1 | indoleamine 2,3-dioxygenase 1 | This gene encodes indoleamine 2,3-dioxygenase ... |
| 1 | PXR | CYP3A4 5' regulatory region | This record represents the 5' regulatory regio... |
| 2 | REG3G | regenerating family member 3 gamma | This gene encodes a member of the regenerating... |
| 3 | ZONULIN | haptoglobin | This gene encodes a preproprotein, which is pr... |
2. GO Biological Process enrichment (Enrichr)¶
go_bp = [{'rank': 1, 'term': 'Cellular Response To Lipid (GO:0071396)', 'p_value': 0.00012939152458165337, 'odds_ratio': 39544.0, 'genes': ['SPP1', 'NLRP3']}, {'rank': 2, 'term': 'Response To Testosterone (GO:0033574)', 'p_value': 0.0004999362185987752, 'odds_ratio': 4998.5, 'genes': ['SPP1']}, {'rank': 3, 'term': 'Positive Regulation Of T-helper 2 Cell Differentiation (GO:0045630)', 'p_value': 0.0004999362185987752, 'odds_ratio': 4998.5, 'genes': ['NLRP3']}, {'rank': 4, 'term': 'Osmosensory Signaling Pathway (GO:0007231)', 'p_value': 0.0004999362185987752, 'odds_ratio': 4998.5, 'genes': ['NLRP3']}, {'rank': 5, 'term': 'Regulation Of Type 2 Immune Response (GO:0002828)', 'p_value': 0.0004999362185987752, 'odds_ratio': 4998.5, 'genes': ['NLRP3']}, {'rank': 6, 'term': 'Negative Regulation Of Acute Inflammatory Response (GO:0002674)', 'p_value': 0.000599909243874975, 'odds_ratio': 3998.6, 'genes': ['NLRP3']}, {'rank': 7, 'term': 'Positive Regulation Of T-helper 2 Cell Cytokine Production (GO:2000553)', 'p_value': 0.0006998773712248138, 'odds_ratio': 3332.0, 'genes': ['NLRP3']}, {'rank': 8, 'term': 'Regulation Of T-helper 2 Cell Differentiation (GO:0045628)', 'p_value': 0.0006998773712248138, 'odds_ratio': 3332.0, 'genes': ['NLRP3']}, {'rank': 9, 'term': 'Response To Vitamin (GO:0033273)', 'p_value': 0.0007998405838081707, 'odds_ratio': 2855.8571428571427, 'genes': ['SPP1']}, {'rank': 10, 'term': 'Response To Vitamin D (GO:0033280)', 'p_value': 0.0007998405838081707, 'odds_ratio': 2855.8571428571427, 'genes': ['SPP1']}]
go_df = pd.DataFrame(go_bp)[['term','p_value','odds_ratio','genes']]
go_df['p_value'] = go_df['p_value'].apply(lambda p: f'{p:.2e}')
go_df['odds_ratio'] = go_df['odds_ratio'].round(1)
go_df['term'] = go_df['term'].str[:60]
go_df['n_hits'] = go_df['genes'].apply(len)
go_df['genes'] = go_df['genes'].apply(lambda g: ', '.join(g))
go_df[['term','n_hits','p_value','odds_ratio','genes']]
| term | n_hits | p_value | odds_ratio | genes | |
|---|---|---|---|---|---|
| 0 | Cellular Response To Lipid (GO:0071396) | 2 | 1.29e-04 | 39544.0 | SPP1, NLRP3 |
| 1 | Response To Testosterone (GO:0033574) | 1 | 5.00e-04 | 4998.5 | SPP1 |
| 2 | Positive Regulation Of T-helper 2 Cell Differe... | 1 | 5.00e-04 | 4998.5 | NLRP3 |
| 3 | Osmosensory Signaling Pathway (GO:0007231) | 1 | 5.00e-04 | 4998.5 | NLRP3 |
| 4 | Regulation Of Type 2 Immune Response (GO:0002828) | 1 | 5.00e-04 | 4998.5 | NLRP3 |
| 5 | Negative Regulation Of Acute Inflammatory Resp... | 1 | 6.00e-04 | 3998.6 | NLRP3 |
| 6 | Positive Regulation Of T-helper 2 Cell Cytokin... | 1 | 7.00e-04 | 3332.0 | NLRP3 |
| 7 | Regulation Of T-helper 2 Cell Differentiation ... | 1 | 7.00e-04 | 3332.0 | NLRP3 |
| 8 | Response To Vitamin (GO:0033273) | 1 | 8.00e-04 | 2855.9 | SPP1 |
| 9 | Response To Vitamin D (GO:0033280) | 1 | 8.00e-04 | 2855.9 | SPP1 |
import matplotlib.pyplot as plt
import numpy as np
go_bp = [{'rank': 1, 'term': 'Cellular Response To Lipid (GO:0071396)', 'p_value': 0.00012939152458165337, 'odds_ratio': 39544.0, 'genes': ['SPP1', 'NLRP3']}, {'rank': 2, 'term': 'Response To Testosterone (GO:0033574)', 'p_value': 0.0004999362185987752, 'odds_ratio': 4998.5, 'genes': ['SPP1']}, {'rank': 3, 'term': 'Positive Regulation Of T-helper 2 Cell Differentiation (GO:0045630)', 'p_value': 0.0004999362185987752, 'odds_ratio': 4998.5, 'genes': ['NLRP3']}, {'rank': 4, 'term': 'Osmosensory Signaling Pathway (GO:0007231)', 'p_value': 0.0004999362185987752, 'odds_ratio': 4998.5, 'genes': ['NLRP3']}, {'rank': 5, 'term': 'Regulation Of Type 2 Immune Response (GO:0002828)', 'p_value': 0.0004999362185987752, 'odds_ratio': 4998.5, 'genes': ['NLRP3']}, {'rank': 6, 'term': 'Negative Regulation Of Acute Inflammatory Response (GO:0002674)', 'p_value': 0.000599909243874975, 'odds_ratio': 3998.6, 'genes': ['NLRP3']}, {'rank': 7, 'term': 'Positive Regulation Of T-helper 2 Cell Cytokine Production (GO:2000553)', 'p_value': 0.0006998773712248138, 'odds_ratio': 3332.0, 'genes': ['NLRP3']}, {'rank': 8, 'term': 'Regulation Of T-helper 2 Cell Differentiation (GO:0045628)', 'p_value': 0.0006998773712248138, 'odds_ratio': 3332.0, 'genes': ['NLRP3']}]
terms = [t['term'][:45] for t in go_bp][::-1]
neglogp = [-np.log10(max(t['p_value'], 1e-300)) for t in go_bp][::-1]
fig, ax = plt.subplots(figsize=(9, 4.5))
ax.barh(terms, neglogp, color='#4fc3f7')
ax.set_xlabel('-log10(p-value)')
ax.set_title('Top GO:BP enrichment (Enrichr)')
ax.grid(axis='x', alpha=0.3)
plt.tight_layout(); plt.show()
/home/ubuntu/.config/matplotlib is not a writable directory
Matplotlib created a temporary cache directory at /tmp/matplotlib-pp758j_e because there was an issue with the default path (/home/ubuntu/.config/matplotlib); it is highly recommended to set the MPLCONFIGDIR environment variable to a writable directory, in particular to speed up the import of Matplotlib and to better support multiprocessing.
3. STRING protein interaction network¶
print('No STRING PPI data available')
No STRING PPI data available
4. Reactome pathway footprint¶
pw_rows = [{'gene': 'IDO1', 'n_pathways': 1, 'top_pathway': 'Tryptophan catabolism'}, {'gene': 'PXR', 'n_pathways': 2, 'top_pathway': 'Nuclear Receptor transcription pathway'}, {'gene': 'REG3G', 'n_pathways': 1, 'top_pathway': 'Antimicrobial peptides'}, {'gene': 'ZONULIN', 'n_pathways': 0, 'top_pathway': '—'}]
pd.DataFrame(pw_rows).sort_values('n_pathways', ascending=False)
| gene | n_pathways | top_pathway | |
|---|---|---|---|
| 1 | PXR | 2 | Nuclear Receptor transcription pathway |
| 0 | IDO1 | 1 | Tryptophan catabolism |
| 2 | REG3G | 1 | Antimicrobial peptides |
| 3 | ZONULIN | 0 | — |
5. Hypothesis ranking (2 hypotheses)¶
hyp_data = [('H2: Indole-3-Propionate (IPA) as the Actual Neuroprotec', 0.703), ('H7: Enteric Nervous System Alpha-Synuclein Propagation ', 0.62)]
titles = [h[0] for h in hyp_data][::-1]
scores = [h[1] for h in hyp_data][::-1]
fig, ax = plt.subplots(figsize=(10, max(8, len(titles)*0.4)))
colors = ['#ef5350' if s >= 0.6 else '#ffa726' if s >= 0.5 else '#66bb6a' for s in scores]
ax.barh(range(len(titles)), scores, color=colors)
ax.set_yticks(range(len(titles))); ax.set_yticklabels(titles, fontsize=7)
ax.set_xlabel('Composite Score'); ax.set_title('How does engineered C. butyricum cross the blood-brain barrier to directly bind GLP-1 receptors?')
ax.grid(axis='x', alpha=0.3)
plt.tight_layout(); plt.show()
labels = ['H2: Indole-3-Propionate (IPA) as the Act', 'H7: Enteric Nervous System Alpha-Synucle']
matrix = np.array([[0.88, 0.8, 0.75, 0.68, 0.0, 0.7, 0.75, 0.82, 0.62], [0.58, 0.75, 0.82, 0.78, 0.0, 0.68, 0.72, 0.7, 0.65]])
dims = ['novelty_score', 'feasibility_score', 'impact_score', 'mechanistic_plausibility_score', 'clinical_relevance_score', 'data_availability_score', 'reproducibility_score', 'druggability_score', 'safety_profile_score']
if matrix.size:
fig, ax = plt.subplots(figsize=(10, 5))
im = ax.imshow(matrix, cmap='RdYlGn', aspect='auto', vmin=0, vmax=1)
ax.set_xticks(range(len(dims)))
ax.set_xticklabels([d.replace('_score','').replace('_',' ').title() for d in dims],
rotation=45, ha='right', fontsize=8)
ax.set_yticks(range(len(labels))); ax.set_yticklabels(labels, fontsize=7)
ax.set_title('Score dimensions — hypotheses')
plt.colorbar(im, ax=ax, shrink=0.8)
plt.tight_layout(); plt.show()
else:
print('No score data available')
6. PubMed literature per hypothesis¶
Hypothesis 1: H2: Indole-3-Propionate (IPA) as the Actual Neuroprotective Effector¶
Target genes: PXR (NR1I2), IDO1 · Composite score: 0.703
H2: Indole-3-Propionate (IPA) as the Actual Neuroprotective Effector Downstream of GLP-1 Signaling¶
Mechanistic Framework¶
The gut-brain axis represents one of the most promising frontiers in understanding neurodegenerative disease pathogenesis, and the intersection between GLP-1-based therapie
print('No PubMed results for hypothesis h-66078909')
No PubMed results for hypothesis h-66078909
Hypothesis 2: H7: Enteric Nervous System Alpha-Synuclein Propagation Blocker via Gut¶
Target genes: IL-22, REG3G, zonulin · Composite score: 0.62
H7: Enteric Nervous System Alpha-Synuclein Propagation Blocker via Gut Barrier Restoration¶
Mechanistic Overview¶
The gut-brain axis represents a critical bidirectional communication system increasingly recognized in neurodegenerative disease pathogenesis. Alpha-synuclein, the misfolding protei
print('No PubMed results for hypothesis h-a5186bb8')
No PubMed results for hypothesis h-a5186bb8
7. Knowledge graph edges (2 total)¶
edge_data = [{'source': 'PXR (NR1I2), IDO1', 'relation': 'promoted: H2: Indole-3-Pr', 'target': 'neurodegeneration', 'strength': 0.68}, {'source': 'IL-22, REG3G, zonulin', 'relation': 'promoted: H7: Enteric Ner', 'target': 'neurodegeneration', 'strength': 0.59}]
if edge_data:
pd.DataFrame(edge_data).head(25)
else:
print('No KG edge data available')
Caveats¶
This notebook uses real Forge tool calls from live APIs:
- Enrichment is against curated gene-set libraries (Enrichr)
- STRING/Reactome/HPA/MyGene reflect curated knowledge
- PubMed literature is search-relevance ranked, not systematic review