sensasp-mcp 1.0.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- sensasp_mcp-1.0.0/PKG-INFO +109 -0
- sensasp_mcp-1.0.0/README.md +86 -0
- sensasp_mcp-1.0.0/pyproject.toml +44 -0
- sensasp_mcp-1.0.0/senescence_db_pipeline/README.md +68 -0
- sensasp_mcp-1.0.0/sensasp_mcp/__init__.py +2 -0
- sensasp_mcp-1.0.0/sensasp_mcp/data/genes.json +1 -0
- sensasp_mcp-1.0.0/sensasp_mcp/data/genes_full.json +1 -0
- sensasp_mcp-1.0.0/sensasp_mcp/data/metrics.json +47 -0
- sensasp_mcp-1.0.0/sensasp_mcp/data/sources.json +26 -0
- sensasp_mcp-1.0.0/sensasp_mcp/server.py +227 -0
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
Metadata-Version: 2.5
|
|
2
|
+
Name: sensasp-mcp
|
|
3
|
+
Version: 1.0.0
|
|
4
|
+
Summary: SenSASP MCP Server — unified senescence / SASP gene database for Claude and MCP clients
|
|
5
|
+
Project-URL: Homepage, https://xuan13hao.github.io/sensasp
|
|
6
|
+
Project-URL: Repository, https://github.com/xuan13hao/sensasp
|
|
7
|
+
Project-URL: Paper, https://doi.org/10.64898/2026.08.26.747427
|
|
8
|
+
Author: Yu Huang, Jiang Bian
|
|
9
|
+
Author-email: Xuan Hao <xuanhao@iu.edu>
|
|
10
|
+
License: CC-BY-4.0
|
|
11
|
+
Keywords: Claude,MCP,SASP,bioinformatics,gene-database,senescence
|
|
12
|
+
Classifier: Development Status :: 4 - Beta
|
|
13
|
+
Classifier: Intended Audience :: Science/Research
|
|
14
|
+
Classifier: License :: Free for non-commercial use
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
|
|
20
|
+
Requires-Python: >=3.10
|
|
21
|
+
Requires-Dist: mcp<2,>=1.0
|
|
22
|
+
Description-Content-Type: text/markdown
|
|
23
|
+
|
|
24
|
+
# SenSASP: A Unified, Multi-Layer Database of Senescence and SASP Genes
|
|
25
|
+
|
|
26
|
+
A fully scripted, one-command-reproducible pipeline that unifies four senescence /
|
|
27
|
+
SASP gene resources onto a single canonical identifier and enriches every gene
|
|
28
|
+
with cross-species conservation, tissue/cell-type expression, and protein–protein
|
|
29
|
+
interaction annotation.
|
|
30
|
+
|
|
31
|
+
## Quick start
|
|
32
|
+
|
|
33
|
+
```bash
|
|
34
|
+
./main.sh # install deps, run the data pipeline, regenerate all figures
|
|
35
|
+
./main.sh --no-figs # data pipeline only (skip the notebook)
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Everything is fetched from public APIs at run time — no manual downloads, no
|
|
39
|
+
credentials. Total runtime is a few minutes (the Human Protein Atlas step makes
|
|
40
|
+
one request per gene and dominates the wall time).
|
|
41
|
+
|
|
42
|
+
## What it does
|
|
43
|
+
|
|
44
|
+
| Step | Module | Output |
|
|
45
|
+
|---|---|---|
|
|
46
|
+
| 1 | `step1_acquire.py` | Download CellAge, GenAge, SenMayo, Reactome → `data/raw/seed_lists_raw.json` |
|
|
47
|
+
| 2 | `step2_harmonize.py` | Map symbols→Ensembl/UniProt/Entrez via MyGene.info → `data/processed/id_map.{json,csv}` |
|
|
48
|
+
| 3 | `step3_unify.py` | Collapse to unique genes on Ensembl ID, record provenance (RQ1) → `data/processed/unified_core.json`, `results/source_overlap.csv` |
|
|
49
|
+
| 4 | `step4_conservation.py` | Mouse + zebrafish orthologs via Ensembl BioMart → `data/processed/conservation.json` |
|
|
50
|
+
| 5 | `step5_expression.py` | GTEx v8 (54 tissues) + Human Protein Atlas → `data/processed/expression.json` |
|
|
51
|
+
| 6 | `step6_interactions.py` | STRING v12 high-confidence network (score≥700) → `data/processed/interaction.json`, `string_network.json` |
|
|
52
|
+
| 7 | `step7_assemble.py` | Merge all layers → `results/senescence_sasp_database.{json,csv}` |
|
|
53
|
+
| 8 | `step8_metrics.py` | Outcome metrics (RQ1/RQ2) → `results/build_metrics.json`, `summary_report.md` |
|
|
54
|
+
|
|
55
|
+
Figures are generated separately from the pipeline outputs by
|
|
56
|
+
`notebooks/figures.ipynb`.
|
|
57
|
+
|
|
58
|
+
## Running individual steps
|
|
59
|
+
|
|
60
|
+
```bash
|
|
61
|
+
PYTHONPATH=. python run_pipeline.py # all steps
|
|
62
|
+
PYTHONPATH=. python run_pipeline.py 4 5 6 # only these (reuse earlier outputs)
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
## Layout
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
senescence_db_pipeline/
|
|
69
|
+
├── main.sh # one-click reproduction
|
|
70
|
+
├── run_pipeline.py # step runner
|
|
71
|
+
├── requirements.txt
|
|
72
|
+
├── pipeline/ # step1..step8 modules + config.py
|
|
73
|
+
├── notebooks/figures.ipynb # all figure-generation code
|
|
74
|
+
├── data/raw, data/processed
|
|
75
|
+
├── results/ # database + metrics + report
|
|
76
|
+
├── figures/ # generated PNGs
|
|
77
|
+
└── paper/paper.md # manuscript (Intro/Methods/Data/Results/Discussion)
|
|
78
|
+
```
|
|
79
|
+
|
|
80
|
+
## Data sources
|
|
81
|
+
|
|
82
|
+
CellAge & GenAge (HAGR), SenMayo (MSigDB `SAUL_SEN_MAYO` / M45803, Saul et al.
|
|
83
|
+
2022), Reactome Cellular Senescence (R-HSA-2559583); annotation via MyGene.info,
|
|
84
|
+
Ensembl BioMart, GTEx v8, Human Protein Atlas, and STRING v12.
|
|
85
|
+
|
|
86
|
+
## Web database (GitHub Pages)
|
|
87
|
+
|
|
88
|
+
The interactive database is served from `docs/` via GitHub Pages:
|
|
89
|
+
|
|
90
|
+
```
|
|
91
|
+
https://xuan13hao.github.io/sensasp
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
To enable: **Settings → Pages → Source: Deploy from branch → Branch: `main` → Folder: `/docs`**
|
|
95
|
+
|
|
96
|
+
To regenerate site data after re-running the pipeline:
|
|
97
|
+
|
|
98
|
+
```bash
|
|
99
|
+
python3 generate_site_data.py
|
|
100
|
+
```
|
|
101
|
+
|
|
102
|
+
This rebuilds `docs/data/genes.json`, `genes_full.json`, `metrics.json`, and `sources.json`.
|
|
103
|
+
|
|
104
|
+
## Key results
|
|
105
|
+
|
|
106
|
+
1,460 summed source entries → **1,250 unique genes** (210 redundant collapsed,
|
|
107
|
+
14.4%); 173 genes confirmed by ≥2 sources, 2 (IL6, JUN) by all four. Net-new
|
|
108
|
+
annotation reaches 95.8% (conservation), 97.8% (expression), 92.9%
|
|
109
|
+
(interactions), with 89.3% complete across all three layers.
|
|
@@ -0,0 +1,86 @@
|
|
|
1
|
+
# SenSASP: A Unified, Multi-Layer Database of Senescence and SASP Genes
|
|
2
|
+
|
|
3
|
+
A fully scripted, one-command-reproducible pipeline that unifies four senescence /
|
|
4
|
+
SASP gene resources onto a single canonical identifier and enriches every gene
|
|
5
|
+
with cross-species conservation, tissue/cell-type expression, and protein–protein
|
|
6
|
+
interaction annotation.
|
|
7
|
+
|
|
8
|
+
## Quick start
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
./main.sh # install deps, run the data pipeline, regenerate all figures
|
|
12
|
+
./main.sh --no-figs # data pipeline only (skip the notebook)
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Everything is fetched from public APIs at run time — no manual downloads, no
|
|
16
|
+
credentials. Total runtime is a few minutes (the Human Protein Atlas step makes
|
|
17
|
+
one request per gene and dominates the wall time).
|
|
18
|
+
|
|
19
|
+
## What it does
|
|
20
|
+
|
|
21
|
+
| Step | Module | Output |
|
|
22
|
+
|---|---|---|
|
|
23
|
+
| 1 | `step1_acquire.py` | Download CellAge, GenAge, SenMayo, Reactome → `data/raw/seed_lists_raw.json` |
|
|
24
|
+
| 2 | `step2_harmonize.py` | Map symbols→Ensembl/UniProt/Entrez via MyGene.info → `data/processed/id_map.{json,csv}` |
|
|
25
|
+
| 3 | `step3_unify.py` | Collapse to unique genes on Ensembl ID, record provenance (RQ1) → `data/processed/unified_core.json`, `results/source_overlap.csv` |
|
|
26
|
+
| 4 | `step4_conservation.py` | Mouse + zebrafish orthologs via Ensembl BioMart → `data/processed/conservation.json` |
|
|
27
|
+
| 5 | `step5_expression.py` | GTEx v8 (54 tissues) + Human Protein Atlas → `data/processed/expression.json` |
|
|
28
|
+
| 6 | `step6_interactions.py` | STRING v12 high-confidence network (score≥700) → `data/processed/interaction.json`, `string_network.json` |
|
|
29
|
+
| 7 | `step7_assemble.py` | Merge all layers → `results/senescence_sasp_database.{json,csv}` |
|
|
30
|
+
| 8 | `step8_metrics.py` | Outcome metrics (RQ1/RQ2) → `results/build_metrics.json`, `summary_report.md` |
|
|
31
|
+
|
|
32
|
+
Figures are generated separately from the pipeline outputs by
|
|
33
|
+
`notebooks/figures.ipynb`.
|
|
34
|
+
|
|
35
|
+
## Running individual steps
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
PYTHONPATH=. python run_pipeline.py # all steps
|
|
39
|
+
PYTHONPATH=. python run_pipeline.py 4 5 6 # only these (reuse earlier outputs)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Layout
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
senescence_db_pipeline/
|
|
46
|
+
├── main.sh # one-click reproduction
|
|
47
|
+
├── run_pipeline.py # step runner
|
|
48
|
+
├── requirements.txt
|
|
49
|
+
├── pipeline/ # step1..step8 modules + config.py
|
|
50
|
+
├── notebooks/figures.ipynb # all figure-generation code
|
|
51
|
+
├── data/raw, data/processed
|
|
52
|
+
├── results/ # database + metrics + report
|
|
53
|
+
├── figures/ # generated PNGs
|
|
54
|
+
└── paper/paper.md # manuscript (Intro/Methods/Data/Results/Discussion)
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Data sources
|
|
58
|
+
|
|
59
|
+
CellAge & GenAge (HAGR), SenMayo (MSigDB `SAUL_SEN_MAYO` / M45803, Saul et al.
|
|
60
|
+
2022), Reactome Cellular Senescence (R-HSA-2559583); annotation via MyGene.info,
|
|
61
|
+
Ensembl BioMart, GTEx v8, Human Protein Atlas, and STRING v12.
|
|
62
|
+
|
|
63
|
+
## Web database (GitHub Pages)
|
|
64
|
+
|
|
65
|
+
The interactive database is served from `docs/` via GitHub Pages:
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
https://xuan13hao.github.io/sensasp
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
To enable: **Settings → Pages → Source: Deploy from branch → Branch: `main` → Folder: `/docs`**
|
|
72
|
+
|
|
73
|
+
To regenerate site data after re-running the pipeline:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
python3 generate_site_data.py
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
This rebuilds `docs/data/genes.json`, `genes_full.json`, `metrics.json`, and `sources.json`.
|
|
80
|
+
|
|
81
|
+
## Key results
|
|
82
|
+
|
|
83
|
+
1,460 summed source entries → **1,250 unique genes** (210 redundant collapsed,
|
|
84
|
+
14.4%); 173 genes confirmed by ≥2 sources, 2 (IL6, JUN) by all four. Net-new
|
|
85
|
+
annotation reaches 95.8% (conservation), 97.8% (expression), 92.9%
|
|
86
|
+
(interactions), with 89.3% complete across all three layers.
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
[build-system]
|
|
2
|
+
requires = ["hatchling"]
|
|
3
|
+
build-backend = "hatchling.build"
|
|
4
|
+
|
|
5
|
+
[project]
|
|
6
|
+
name = "sensasp-mcp"
|
|
7
|
+
version = "1.0.0"
|
|
8
|
+
description = "SenSASP MCP Server — unified senescence / SASP gene database for Claude and MCP clients"
|
|
9
|
+
readme = "README.md"
|
|
10
|
+
license = { text = "CC-BY-4.0" }
|
|
11
|
+
authors = [
|
|
12
|
+
{ name = "Xuan Hao", email = "xuanhao@iu.edu" },
|
|
13
|
+
{ name = "Yu Huang" },
|
|
14
|
+
{ name = "Jiang Bian" },
|
|
15
|
+
]
|
|
16
|
+
keywords = ["senescence", "SASP", "bioinformatics", "MCP", "Claude", "gene-database"]
|
|
17
|
+
classifiers = [
|
|
18
|
+
"Development Status :: 4 - Beta",
|
|
19
|
+
"Intended Audience :: Science/Research",
|
|
20
|
+
"Topic :: Scientific/Engineering :: Bio-Informatics",
|
|
21
|
+
"License :: Free for non-commercial use",
|
|
22
|
+
"Programming Language :: Python :: 3",
|
|
23
|
+
"Programming Language :: Python :: 3.10",
|
|
24
|
+
"Programming Language :: Python :: 3.11",
|
|
25
|
+
"Programming Language :: Python :: 3.12",
|
|
26
|
+
]
|
|
27
|
+
requires-python = ">=3.10"
|
|
28
|
+
dependencies = [
|
|
29
|
+
"mcp>=1.0,<2",
|
|
30
|
+
]
|
|
31
|
+
|
|
32
|
+
[project.urls]
|
|
33
|
+
Homepage = "https://xuan13hao.github.io/sensasp"
|
|
34
|
+
Repository = "https://github.com/xuan13hao/sensasp"
|
|
35
|
+
Paper = "https://doi.org/10.64898/2026.08.26.747427"
|
|
36
|
+
|
|
37
|
+
[project.scripts]
|
|
38
|
+
sensasp-mcp = "sensasp_mcp.server:main"
|
|
39
|
+
|
|
40
|
+
[tool.hatch.build.targets.wheel]
|
|
41
|
+
packages = ["sensasp_mcp"]
|
|
42
|
+
|
|
43
|
+
[tool.hatch.build.targets.sdist]
|
|
44
|
+
include = ["sensasp_mcp/", "README.md", "pyproject.toml"]
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# Unified Cellular Senescence / SASP Gene Database — Pipeline
|
|
2
|
+
|
|
3
|
+
A fully scripted, one-command-reproducible pipeline that unifies four senescence /
|
|
4
|
+
SASP gene resources onto a single canonical identifier and enriches every gene
|
|
5
|
+
with cross-species conservation, tissue/cell-type expression, and protein–protein
|
|
6
|
+
interaction annotation.
|
|
7
|
+
|
|
8
|
+
## Quick start
|
|
9
|
+
|
|
10
|
+
```bash
|
|
11
|
+
./main.sh # install deps, run the data pipeline, regenerate all figures
|
|
12
|
+
./main.sh --no-figs # data pipeline only (skip the notebook)
|
|
13
|
+
```
|
|
14
|
+
|
|
15
|
+
Everything is fetched from public APIs at run time — no manual downloads, no
|
|
16
|
+
credentials. Total runtime is a few minutes (the Human Protein Atlas step makes
|
|
17
|
+
one request per gene and dominates the wall time).
|
|
18
|
+
|
|
19
|
+
## What it does
|
|
20
|
+
|
|
21
|
+
| Step | Module | Output |
|
|
22
|
+
|---|---|---|
|
|
23
|
+
| 1 | `step1_acquire.py` | Download CellAge, GenAge, SenMayo, Reactome → `data/raw/seed_lists_raw.json` |
|
|
24
|
+
| 2 | `step2_harmonize.py` | Map symbols→Ensembl/UniProt/Entrez via MyGene.info → `data/processed/id_map.{json,csv}` |
|
|
25
|
+
| 3 | `step3_unify.py` | Collapse to unique genes on Ensembl ID, record provenance (RQ1) → `data/processed/unified_core.json`, `results/source_overlap.csv` |
|
|
26
|
+
| 4 | `step4_conservation.py` | Mouse + zebrafish orthologs via Ensembl BioMart → `data/processed/conservation.json` |
|
|
27
|
+
| 5 | `step5_expression.py` | GTEx v8 (54 tissues) + Human Protein Atlas → `data/processed/expression.json` |
|
|
28
|
+
| 6 | `step6_interactions.py` | STRING v12 high-confidence network (score≥700) → `data/processed/interaction.json`, `string_network.json` |
|
|
29
|
+
| 7 | `step7_assemble.py` | Merge all layers → `results/senescence_sasp_database.{json,csv}` |
|
|
30
|
+
| 8 | `step8_metrics.py` | Outcome metrics (RQ1/RQ2) → `results/build_metrics.json`, `summary_report.md` |
|
|
31
|
+
|
|
32
|
+
Figures are generated separately from the pipeline outputs by
|
|
33
|
+
`notebooks/figures.ipynb`.
|
|
34
|
+
|
|
35
|
+
## Running individual steps
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
PYTHONPATH=. python run_pipeline.py # all steps
|
|
39
|
+
PYTHONPATH=. python run_pipeline.py 4 5 6 # only these (reuse earlier outputs)
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Layout
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
senescence_db_pipeline/
|
|
46
|
+
├── main.sh # one-click reproduction
|
|
47
|
+
├── run_pipeline.py # step runner
|
|
48
|
+
├── requirements.txt
|
|
49
|
+
├── pipeline/ # step1..step8 modules + config.py
|
|
50
|
+
├── notebooks/figures.ipynb # all figure-generation code
|
|
51
|
+
├── data/raw, data/processed
|
|
52
|
+
├── results/ # database + metrics + report
|
|
53
|
+
├── figures/ # generated PNGs
|
|
54
|
+
└── paper/paper.md # manuscript (Intro/Methods/Data/Results/Discussion)
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
## Data sources
|
|
58
|
+
|
|
59
|
+
CellAge & GenAge (HAGR), SenMayo (MSigDB `SAUL_SEN_MAYO` / M45803, Saul et al.
|
|
60
|
+
2022), Reactome Cellular Senescence (R-HSA-2559583); annotation via MyGene.info,
|
|
61
|
+
Ensembl BioMart, GTEx v8, Human Protein Atlas, and STRING v12.
|
|
62
|
+
|
|
63
|
+
## Key results
|
|
64
|
+
|
|
65
|
+
1,460 summed source entries → **1,250 unique genes** (210 redundant collapsed,
|
|
66
|
+
14.4%); 173 genes confirmed by ≥2 sources, 2 (IL6, JUN) by all four. Net-new
|
|
67
|
+
annotation reaches 95.8% (conservation), 97.8% (expression), 92.9%
|
|
68
|
+
(interactions), with 89.3% complete across all three layers.
|