SAMtools 的模型控制协议实现,为处理 SAM/BAM/CRAM 文件提供了标准化接口。
特征
- 查看和转换 SAM/BAM/CRAM 文件
- 对比准文件进行排序
- 索引 BAM/CRAM 文件
- 生成统计数据
- 合并多个 BAM 文件
- 计算读取深度
- 索引 FASTA 文件
- 还有更多...
核心能力
- 文件格式支持:处理 SAM(文本)、BAM(二进制)和 CRAM(压缩)对齐文件
- 格式转换:在 SAM、BAM 和 CRAM 格式之间无缝转换
- 区域特定分析:提取并分析特定基因组区域
- 基于标志的过滤:根据 SAM 标志过滤读取
- 性能优化:排序和合并的多线程操作
- 统计分析:生成全面的比对统计数据
工具概述
工具 | 描述 | 主要特点 |
---|
view | 查看和转换对齐文件 | - 格式转换(SAM/BAM/CRAM)- 区域过滤- 基于标志的过滤- 标题操作 |
sort | 对比准文件进行排序 | - 基于坐标的排序 - 基于名称的排序 - 每个线程的内存控制 - 多线程支持 |
index | 索引 BAM/CRAM 文件 | - BAI 指数生成 - CSI 指数支持 - CRAM 指数创建 |
merge | 合并多个 BAM/CRAM 文件 | - 多文件合并 - 线程启用处理 - 标题协调 |
depth | 计算读取深度 | - 每个基础深度计算 - 特定区域分析 - 多文件支持 |
flagstat | 生成比对统计数据 | - 综合标志统计 - 质量检查 - 双端指标 |
idxstats | BAM/CRAM 索引统计 | - 参考序列统计 - 映射/未映射计数 - 长度信息 |
faidx | 索引 FASTA 文件 | - FASTA 索引 - 区域提取 - 序列检索 |
安装
使用 Docker(推荐)
使用 SAMtools MCP 最简单的方法是通过 Docker:
# Pull the Docker image
docker pull nadhir/samtools-mcp:latest
# Run the container
docker run -it --rm nadhir/samtools-mcp:latest
# To process BAM files, mount a volume:
docker run -it --rm -v /path/to/your/bam/files:/data nadhir/samtools-mcp:latest
本地安装
- 克隆存储库:
git clone https://github.com/your-username/samtools_mcp.git
cd samtools_mcp
- 安装依赖项:
pip install uv
uv pip install -r requirements.txt
配置
MCP 服务器配置
要配置 MCP 服务器以使用 Docker 镜像,请将以下内容添加到您的 MCP 配置文件中:
{
"servers": {
"samtools": {
"type": "docker",
"image": "nadhir/samtools-mcp:latest",
"volumes": [
{
"source": "/path/to/your/data",
"target": "/data"
}
]
}
}
}
本地 MCP 配置
要配置 MCP 使用uv
运行,请将以下内容添加到您的~/.cursor/mcp.json
:
{
"samtools_mcp": {
"command": "uv",
"args": ["run", "--with", "fastmcp", "fastmcp", "run", "/path/to/samtools_mcp.py"]
}
}
将/path/to/samtools_mcp.py
替换为samtools_mcp.py
文件的实际路径。
用法
基本命令
- 查看BAM文件:
from samtools_mcp import SamtoolsMCP
mcp = SamtoolsMCP()
result = mcp.view(input_file="/data/example.bam")
- 对 BAM 文件进行排序:
result = mcp.sort(input_file="/data/example.bam", output_file="/data/sorted.bam")
- 索引BAM文件:
result = mcp.index(input_file="/data/sorted.bam")
高级用法
- 查看带有标志的特定区域:
result = mcp.view(
input_file="/data/example.bam",
region="chr1:1000-2000",
flags_required="0x2",
output_format="SAM"
)
- 按阅读名称排序:
result = mcp.sort(
input_file="/data/example.bam",
output_file="/data/namesorted.bam",
sort_by_name=True
)
- 使用多个输入文件计算深度:
result = mcp.depth(
input_files=["/data/sample1.bam", "/data/sample2.bam"],
region="chr1:1-1000000"
)
贡献
欢迎贡献代码!欢迎提交 Pull 请求。
执照
该项目根据 MIT 许可证获得许可 - 有关详细信息,请参阅 LICENSE 文件。