电池寿命mcp
MCP(模型上下文协议)服务器,用于通过vLLM使用Cell2Sentence4Longevity模型进行年龄预测。
概述
该MCP服务器提供了一个接口,用于根据基因表达模式预测生物年龄。它使用 transhumanist-already-exists/C2S-Scale-Gemma-2-27B-age-prediction-fullft 模型托管在vLLM端点上。
服务器通过HTTP请求直接使用vLLM补全API,从而可以轻松地将年龄预测集成到人工智能工作流程中。
特性
- 年龄预测:根据基因表达“细胞句子”预测供体年龄
- 元数据支持:包括其他信息,如性别、组织类型、细胞类型和吸烟状况
- Insilico淘汰赛:测试去除基因对年龄预测的影响
- 多种运输方式:支持stdio、SSE和可流式传输的http
- CLI工具:可直接使用的独立命令行界面
- 结构化输出:返回原始模型响应和解析的年龄预测
- 示例资源:提供示例提示和模型信息
安装
使用 uv 从项目根:
uv sync配置
可以使用环境变量配置服务器:
VLLM_BASE_URL:vLLM端点URL(默认值:http://89.169.110.141:8000)VLLM_MODEL:模型名称(默认值:transhumanist-already-exists/C2S-Scale-Gemma-2-27B-age-prediction-fullft)MCP_HOST:要绑定的主机(默认值:0.0.0.0)MCP_PORT:要绑定的端口(默认值:3002)
用法
运行服务器
标准模式 (适用于Claude Desktop或其他MCP客户端):
uv run cell2sentence4longevity-mcp-stdioHTTP服务器模式:
uv run cell2sentence4longevity-mcp-run --host 0.0.0.0 --port 3002SSE模式:
uv run cell2sentence4longevity-mcp-sse --host 0.0.0.0 --port 3002MCP客户端配置
对于克劳德桌面(stdio):
添加到您的Claude Desktop配置中:
{
"mcpServers": {
"cell2sentence4longevity": {
"command": "uv",
"args": [
"--directory",
"/home/antonkulaga/sources/cell2sentence4longevity-mcp",
"run",
"cell2sentence4longevity-mcp-stdio"
],
"env": {
"VLLM_BASE_URL": "http://89.169.110.141:8000",
"VLLM_MODEL": "transhumanist-already-exists/C2S-Scale-Gemma-2-27B-age-prediction-fullft"
}
}
}
}对于HTTP客户端:
{
"mcpServers": {
"cell2sentence4longevity": {
"url": "http://localhost:3002/mcp",
"transport": "streamable-http"
}
}
}工具
预测_年龄
根据基因表达句子预测年龄。
参数:
gene_sentence(str):按表达水平降序排列的基因名称的空格分隔列表max_tokens(int,可选):要生成的最大令牌数(默认值:20)temperature(浮动,可选):采样温度(默认值:0.0)top_p(浮动,可选):Nucleus采样参数(默认值:1.0)
例子:
predict_age(
gene_sentence="MT-CO1 FTL EEF1A1 HLA-B LST1 S100A4 HLA-C H3-3B ZFP36 AIF1 HLA-DRA FCER1G ITGB2 RPS21 ANXA1 RPL3"
)使用元数据进行预测
使用有关样本的其他元数据预测年龄。
参数:
gene_sentence(str):按表达水平降序排列的基因名称的空格分隔列表sex(str,可选):捐赠者的性别(例如,“男性”、“女性”)smoking_status(int,可选):0=不吸烟者,1=吸烟者tissue(str,可选):组织类型(例如,“血液”、“大脑”)cell_type(str,可选):细胞类型(例如,“CD14低,CD16阳性单核细胞”)max_tokens(int,可选):要生成的最大令牌数(默认值:20)temperature(浮动,可选):采样温度(默认值:0.0)top_p(浮动,可选):Nucleus采样参数(默认值:1.0)
例子:
predict_age_with_metadata(
gene_sentence="MT-CO1 FTL EEF1A1 HLA-B LST1 S100A4 HLA-C H3-3B ZFP36 AIF1",
sex="female",
smoking_status=0,
tissue="blood",
cell_type="CD14-low, CD16-positive monocyte"
)内源性敲除
通过从基因表达句子中删除第一个基因(最高表达)并比较年龄预测来进行insilico敲除实验。
参数:
gene_sentence(str):按表达水平降序排列的基因名称的空格分隔列表sex(str,可选):捐赠者的性别(例如,“男性”、“女性”)smoking_status(int,可选):0=不吸烟者,1=吸烟者tissue(str,可选):组织类型(例如,“血液”、“大脑”)cell_type(str,可选):细胞类型(例如,“CD14低,CD16阳性单核细胞”)max_tokens(int,可选):要生成的最大令牌数(默认值:20)temperature(浮动,可选):采样温度(默认值:0.0)top_p(浮动,可选):Nucleus采样参数(默认值:1.0)
退货:
gene_knocked_out:删除的基因(列表中的第一个)age_prediction:用全基因句子预测年龄age_prediction_with_knockout:去除基因后的预测年龄delta_age:预测年龄的变化(淘汰赛-原始)original_gene_sentence:原始基因表达句knockout_gene_sentence:基因敲除后的表达句子model:用于预测的模型
例子:
insilico_knockout(
gene_sentence="MT-CO1 FTL EEF1A1 HLA-B LST1 S100A4 HLA-C H3-3B ZFP36 AIF1",
sex="female",
tissue="blood"
)CLI工具
除了MCP服务器之外,此软件包还提供了可直接使用的独立CLI工具。
cell2sentence cli
CLI提供了直接从命令行执行insilico敲除实验的命令。
基本淘汰命令
从基因句子中删除第一个基因,并比较年龄预测:
uv run cell2sentence-cli knockout "MT-CO1 FTL EEF1A1 HLA-B LST1 S100A4" \
--sex female \
--tissue blood \
--cell-type "CD14-low, CD16-positive monocyte"输出格式:
- 文本(默认):
Gene knocked out: MT-CO1
Age prediction (original): 46.0
Age prediction (knockout): 46.0
Delta age: 0.0- CSV:
--format csv
gene_knocked_out,age_prediction,age_prediction_with_knockout,delta_age
MT-CO1,46.0,46.0,0.0- JSON:
--format json
{
"gene_knocked_out": "MT-CO1",
"age_prediction": 46.0,
"age_prediction_with_knockout": 46.0,
"delta_age": 0.0,
"original_gene_sentence": "MT-CO1 FTL EEF1A1 HLA-B LST1 S100A4",
"knockout_gene_sentence": "FTL EEF1A1 HLA-B LST1 S100A4",
"model": "transhumanist-already-exists/C2S-Scale-Gemma-2-27B-age-prediction-fullft"
}从有效载荷文件中删除
使用现有的有效载荷JSON文件(如中的示例 data/example/vllm_payload.json):
uv run cell2sentence-cli knockout-from-payload data/example/vllm_payload.json --format csv这会自动从有效载荷中提取基因句子和元数据。
所有CLI选项:
uv run cell2sentence-cli knockout --help
uv run cell2sentence-cli knockout-from-payload --help登录中:
CLI记录到 logs/knockout.json 和 logs/knockout.log 默认情况下。您可以自定义日志目录:
uv run cell2sentence-cli knockout "GENE1 GENE2 GENE3" --log-dir ./my-logs资源
resource://cell2sentence/example-prompt
从返回示例提示 vllm_payload.json 文件,显示如何格式化输入。
resource://cell2sentence/model-info
返回有关模型的信息,包括端点详细信息和功能。
输入格式
该模型需要一个“细胞句子”——一个用空格分隔的衰老相关基因名称列表,按表达水平降序排列。这些基因通常应该来自与衰老相关的数据库,如OpenGenes。
单元格句子示例:
MT-CO1 FTL EEF1A1 HLA-B LST1 S100A4 HLA-C H3-3B ZFP36 AIF1 HLA-DRA FCER1G ITGB2 RPS21 ANXA1 RPL3 HLA-DRB1 HLA-DRB5 TPM3 RPL22单元格句子过滤
该存储库包括用于过滤单元格句子数据集的工具,以仅包含句子以OpenGenes数据库中的基因符号开头的单元格。看 docs/FILTERING.md 详细文档。
快速启动:
# CLI version with logging
uv run python filter.py data/example/cells/example_cells.parquet data/output/filtered_cells.parquet
# Interactive notebook version with statistics
uv run python notebook/filter.py过滤工具:
- 从OpenGenes加载2403个与寿命/衰老相关的基因
- 过滤细胞,只保留OpenGenes中第一个基因所在的细胞
- 使用Polars进行内存高效处理
- 提供详细的统计和分析
输出格式
工具返回 AgePredictionResult 包含:
predicted_age:以年为单位的预测年龄(浮点数,如果解析失败,则为None)raw_response:模型的原始文本响应prompt_used:发送给模型的完整提示model:用于预测的模型名称
测试
运行测试套件:
# Run all tests
uv run pytest
# Run specific test modules
uv run python test/test_knockout.py
uv run python test/test_mcp_performance.py发展
要将此服务器添加到其他项目或对其进行扩展,请执行以下操作:
from cell2sentence4longevity_mcp import Cell2SentenceMCP
# Create custom server
mcp = Cell2SentenceMCP(
name="Custom Age Prediction Server",
vllm_base_url="http://your-vllm-endpoint:8000/",
model="your-model-name"
)
# Run with your preferred transport
mcp.run(transport="stdio")许可证
有关详细信息,请参阅LICENSE文件。
作者
- 安东库拉拉(antonkulaga@gmail.com)
