基因命名解析服务

提供HGNC基因命名数据的访问、解析和验证工具,包括MCP服务器集成AI助手功能。

  • by armish
  • R
  • 本地部署
  • 1 星标
  • 更新于
在 GitHub 查看 armish/hgnc.mcp

使用说明

hgnc.mcp

HGNC(HUGO基因命名委员会)基因命名资源的MCP(模型上下文协议)服务器。

概述

这个R包提供了访问HGNC基因命名数据的工具,包括搜索、解析和验证基因符号的功能。它还包括一个MCP(模型上下文协议)服务器,该服务器将这些工具暴露给LLM副驾驶和其他MCP兼容客户端。

安装

从GitHub安装

# Install the latest version from GitHub
remotes::install_github("armish/hgnc.mcp")

从源代码安装

如果您已在本地克隆了存储库:

# First, generate documentation (required before installation)
source("generate-docs.R")

# Then install the package
devtools::install(".")

或者,您可以手动生成文档:

roxygen2::roxygenise()
devtools::install(".")

数据管理

该软件包使用智能缓存来管理HGNC完整数据集:

  • 首次使用:从官方HGNC源下载数据并在本地缓存
  • 后续用途:从缓存加载以实现快速访问
  • 更新:自动检查缓存是否过时(默认值:30天),并在需要时刷新

数据函数

# Load HGNC data (downloads and caches on first use)
hgnc <- load_hgnc_data()

# Check cache status
get_hgnc_cache_info()

# Force refresh the cache
hgnc <- load_hgnc_data(force = TRUE)

# Or explicitly download
download_hgnc_data(force = TRUE)

# Clear cache
clear_hgnc_cache()

# Check if cache is fresh (default: 30 days)
is_hgnc_cache_fresh()
is_hgnc_cache_fresh(max_age_days = 7)

缓存位置

缓存存储在平台适当的位置:

  • Linux: ~/.cache/hgnc.mcp/
  • macOS: ~/Library/Caches/hgnc.mcp/
  • 视窗: %LOCALAPPDATA%/hgnc.mcp/Cache/

数据源

HGNC数据来源于: https://storage.googleapis.com/public-download-files/hgnc/tsv/tsv/hgnc_complete_set.txt

特性

  • 具有自动更新功能的智能本地缓存
  • 跨平台缓存目录管理
  • 可配置缓存新鲜度(默认值:30天)
  • 缓存元数据跟踪(下载时间、文件大小、源URL)
  • 带速率限制和缓存的HGNC REST API客户端
  • 基因符号搜索、解析和验证工具
  • 基因列表的批量操作
  • 基因组和家族查询
  • 更改更新符号的跟踪
  • MCP服务器,用于与LLM副驾驶和AI工具集成

MCP服务器

该软件包包括一个模型上下文协议(MCP)服务器,该服务器向AI助手、副驾驶和其他MCP兼容客户端公开HGNC命名服务。服务器提供三种类型的MCP原语:

  • 工具:用于搜索、规范化和验证等操作的API端点
  • 资源:用于上下文注入的只读数据(基因卡、组信息、数据集元数据)
  • 提示词:指导人工智能助手完成多步骤命名任务的工作流模板

这允许LLM直接访问HGNC服务进行基因名称解析、验证、合规性检查等。

启动MCP服务器

使用R:

# Load the package
library(hgnc.mcp)

# Check dependencies
check_mcp_dependencies()

# Start with stdio transport (recommended for desktop clients like Claude Desktop)
start_hgnc_mcp_server(transport = "stdio")

# Or start HTTP server on default port 8080 (for web-based or remote clients)
start_hgnc_mcp_server(transport = "http")

# Customize HTTP server configuration
start_hgnc_mcp_server(
  transport = "http",
  port = 9090,
  host = "0.0.0.0",
  swagger = TRUE
)

使用独立脚本:

# Start with stdio transport (for desktop clients)
Rscript inst/scripts/run_server.R --stdio

# Start HTTP server (default behavior)
Rscript inst/scripts/run_server.R

# Custom port for HTTP mode
Rscript inst/scripts/run_server.R --port 9090

# Update cache before starting
Rscript inst/scripts/run_server.R --update-cache

# Disable Swagger UI (HTTP mode only)
Rscript inst/scripts/run_server.R --no-swagger

# Get help
Rscript inst/scripts/run_server.R --help

MCP客户端配置

克劳德桌面(推荐)

Claude Desktop支持stdio传输,以实现高效的本地通信。配置文件位置:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • 窗户: %APPDATA%\Claude\claude_desktop_config.json
  • Linux: ~/.config/Claude/claude_desktop_config.json

使用本地R安装:

{
  "mcpServers": {
    "hgnc": {
      "command": "Rscript",
      "args": ["-e", "hgnc.mcp::start_hgnc_mcp_server(transport='stdio')"],
      "env": {
        "HGNC_CACHE_DIR": "${HOME}/.cache/hgnc"
      }
    }
  }
}

使用Docker:

{
  "mcpServers": {
    "hgnc": {
      "command": "docker",
      "args": ["run", "--rm", "-i", "-v", "hgnc-cache:/home/hgnc/.cache/hgnc", "ghcr.io/armish/hgnc.mcp:latest", "--stdio"]
    }
  }
}

其他MCP客户端:对于基于HTTP的客户端,使用以下命令启动服务器 transport='http' 并连接到 http://localhost:8080/mcp.

可用的MCP工具

MCP服务器公开了以下工具:

  1. 信息 -获取HGNC REST API元数据和功能
  2. 找到 -通过查询符号、别名和名称来搜索基因
  3. 获取 -按字段值(HGNC ID、符号等)获取完整的基因记录
  4. resolve_符号 -将基因符号解析为当前批准的HGNC符号
  5. normalize_list -批量标准化基因符号列表(快速,使用本地缓存)
  6. 外部参照 -提取交叉引用(Entrez、Ensembl、UniProt、OMIM等)
  7. group_members -获取特定基因组或家族中的所有基因
  8. 搜索组 -按关键字搜索基因组
  9. 变化 -跟踪特定日期以来的命名变化
  10. validate_panel -根据HGNC政策验证基因板,并提出更换建议

可用MCP资源

资源为上下文注入提供只读数据:

  1. get_gene_card -格式化基因信息卡(JSON/markdown/text)
  2. get_group_card -成员的基因组信息
  3. get_changes_summary -自某一日期以来,术语发生了变化
  4. 快照 -数据集元数据(静态资源)

可用MCP提示

备注:MCP Prompts目前正在整合中。一旦出现以下情况,提示功能将自动启用 plumber2mcp 包NAMESPACE已更新为导出 pr_mcp_prompt()提示功能已实现并准备就绪。

提示是指导AI助手完成多步骤HGNC任务的工作流模板:

  1. 使基因列表正常化 -指导将基因符号标准化为经批准的HGNC命名法。有助于批量符号解析、处理别名/以前的符号,以及可选地获取交叉引用。

  2. 检查命名是否符合要求 -根据HGNC命名政策验证基因面板。识别未经批准的符号、撤回的基因和重复项,然后提供替换建议和理由。

  3. 自那以后发生了什么变化 -生成自特定日期以来HGNC命名变化的人类可读摘要。可用于治理、合规性跟踪和监视列表监控。

  4. 从群体中构建基因集 -通过关键字搜索发现HGNC基因组,并从成员中构建可重用的基因集定义。以多种格式(列表、表格、JSON)提供输出,并带有元数据以实现可重复性。

API文档

当服务器在启用Swagger(默认)的情况下运行时,您可以访问以下位置访问交互式API文档:

http://localhost:8080/__docs__/

这提供了有关每个端点、请求/响应格式的详细信息,并允许您直接从浏览器测试API。

部署

HGNC MCP服务器可以根据您的需要以多种方式部署。

Docker部署

部署服务器最简单的方法是使用Docker。预构建的图像是 公开可用 在GitHub容器注册表上,支持多种架构。

可用图像

  • 注册表: ghcr.io/armish/hgnc.mcp
  • 平台: linux/amd64, linux/arm64
  • 标签:
    • latest -主分支最新稳定版本
    • main -主分支机构的最新承诺
    • v* -特定版本标签(例如。, v1.0.0)
    • pr-* -拉取请求构建以进行测试

每次通过GitHub Actions推送到主分支时,图像都会自动构建并发布。

Docker快速入门

# Pull the pre-built image (supports both amd64 and arm64)
docker pull ghcr.io/armish/hgnc.mcp:latest

# For Claude Desktop (stdio mode)
docker run --rm -i \
  -v hgnc-cache:/home/hgnc/.cache/hgnc \
  ghcr.io/armish/hgnc.mcp:latest --stdio

# For HTTP server mode
docker run -d \
  --name hgnc-mcp-server \
  -p 8080:8080 \
  -v hgnc-cache:/home/hgnc/.cache/hgnc \
  ghcr.io/armish/hgnc.mcp:latest

# Access the server (HTTP mode only)
open http://localhost:8080/__docs__/

从源代码构建

# Clone the repository
git clone https://github.com/armish/hgnc.mcp.git
cd hgnc.mcp

# Build the Docker image
docker build -t hgnc-mcp:latest .

# Run in stdio mode (for Claude Desktop)
docker run --rm -i \
  -v hgnc-cache:/home/hgnc/.cache/hgnc \
  hgnc-mcp:latest --stdio

# Or run in HTTP mode
docker run -d \
  --name hgnc-mcp-server \
  -p 8080:8080 \
  -v hgnc-cache:/home/hgnc/.cache/hgnc \
  hgnc-mcp:latest

Docker Compose

要获得更完整的持久存储设置:

# Start the server and supporting services
docker compose up -d

# View logs
docker compose logs -f

# Test the server
docker compose --profile test up hgnc-test-client

# Stop the server
docker compose down

备注:这使用了现代 docker compose 命令(Docker Compose V2)。如果您有传统的独立版本,请使用 docker-compose (用连字符)代替。

看 示例/docker/README.md 用于高级Docker部署选项,包括:

  • 使用Nginx反向代理进行生产部署
  • 热重载开发设置
  • 资源限制和健康检查
  • TLS/HTTPS配置

生产部署

对于生产环境,我们建议:

  1. 使用Docker -提供的Dockerfile使用多阶段构建,并以非root用户身份运行
  2. 设置反向代理 -使用Nginx或类似工具进行TLS、速率限制和负载平衡
  3. 持久缓存 -为HGNC数据缓存装载卷
  4. 健康监测 -容器包括健康检查;与您的监控系统集成
  5. 资源限制 -设置适当的CPU和内存限制(建议:2个CPU,4GB RAM)

示例生产docker组合配置:

services:
  hgnc-mcp-server:
    image: ghcr.io/armish/hgnc.mcp:latest
    ports:
      - "127.0.0.1:8080:8080"  # Only expose to localhost
    volumes:
      - hgnc-cache:/home/hgnc/.cache/hgnc
    restart: unless-stopped
    deploy:
      resources:
        limits:
          cpus: '2'
          memory: 4G
        reservations:
          cpus: '0.5'
          memory: 1G
    healthcheck:
      test: ["CMD", "Rscript", "-e", "tryCatch(httr::GET('http://localhost:8080/__docs__/'), error = function(e) quit(status=1))"]
      interval: 30s
      timeout: 10s
      retries: 3

云部署

Docker镜像可以部署到任何支持容器的云平台:

AWS ECS/Fargate

# Tag for AWS ECR
docker tag hgnc-mcp:latest <account-id>.dkr.ecr.<region>.amazonaws.com/hgnc-mcp:latest

# Push to ECR
docker push <account-id>.dkr.ecr.<region>.amazonaws.com/hgnc-mcp:latest

# Deploy using ECS task definition

谷歌云运行

# Tag for Google Container Registry
docker tag hgnc-mcp:latest gcr.io/<project-id>/hgnc-mcp:latest

# Push to GCR
docker push gcr.io/<project-id>/hgnc-mcp:latest

# Deploy to Cloud Run
gcloud run deploy hgnc-mcp \
  --image gcr.io/<project-id>/hgnc-mcp:latest \
  --port 8080 \
  --memory 4Gi \
  --cpu 2

Azure容器实例

# Create resource group
az group create --name hgnc-mcp-rg --location eastus

# Deploy container
az container create \
  --resource-group hgnc-mcp-rg \
  --name hgnc-mcp-server \
  --image ghcr.io/armish/hgnc.mcp:latest \
  --ports 8080 \
  --cpu 2 \
  --memory 4

Kubernetes

对于Kubernetes部署,请参阅中的示例清单 examples/kubernetes/ (即将推出)。

地方发展

对于没有Docker的本地开发:

# Clone the repository
git clone https://github.com/armish/hgnc.mcp.git
cd hgnc.mcp

# Install dependencies
R -e "install.packages('remotes'); remotes::install_deps()"

# Install the package
R CMD INSTALL .

# Start the server
Rscript inst/scripts/run_server.R --port 8080

CI/CD集成

该存储库包括GitHub Actions工作流,用于:

  • R CMD检查 -跨多个平台的包验证
  • 测试覆盖率 -具有覆盖率报告的自动化测试
  • Docker构建 -多平台Docker镜像构建(amd64、arm64)

看 .github/workflows/ 用于工作流配置。

要在fork中使用这些工作流,请执行以下操作:

  1. 在存储库设置中启用GitHub操作
  2. 添加任何所需的秘密(例如。, CODECOV_TOKEN)
  3. 按下以触发工作流

配置选项

服务器可以通过命令行参数或环境变量进行配置:

选项 环境变量 默认值 描述
--port MCP_SERVER_PORT 8080 服务器端口
--host MCP_SERVER_HOST 0.0.0.0 服务器主机
--no-swagger - false 禁用Swagger UI
--check-cache - false 启动前检查缓存
--update-cache - false 强制缓存更新
- HGNC_CACHE_DIR 平台默认 缓存目录

环境变量示例:

export HGNC_CACHE_DIR=/data/hgnc
export MCP_SERVER_PORT=9090
Rscript inst/scripts/run_server.R

安全考虑

部署HGNC MCP服务器时:

  1. 网络接入:默认情况下,服务器绑定到 0.0.0.0 (所有接口)。对于生产,绑定到 127.0.0.1 并使用反向代理
  2. 速率限制:服务器包括HGNC API调用的内部速率限制,但考虑通过反向代理添加外部速率限制
  3. 认证:MCP服务器不包括身份验证。如果需要,使用带有身份验证的反向代理
  4. 传输层安全:在生产环境中始终使用TLS/HTTPS。在反向代理级别进行配置
  5. 资源限制:设置适当的CPU和内存限制,以防止资源耗尽
  6. 更新:定期更新Docker镜像以获取安全补丁和HGNC数据更新

监控

监控以下生产部署:

  • 健康终点: GET /__docs__/ -如果服务器正常,则返回200
  • 集装箱健康状况:已配置Docker/Kubernetes健康检查
  • 资源使用:监控CPU和内存使用情况
  • 缓存新鲜度:检查 get_hgnc_cache_info() 缓存年龄
  • 错误率:监视服务器日志中的错误

健康检查脚本示例:

#!/bin/bash
# health_check.sh
if curl -f -s http://localhost:8080/__docs__/ > /dev/null; then
  echo "Server is healthy"
  exit 0
else
  echo "Server is unhealthy"
  exit 1
fi

故障排除

常见部署问题:

端口已在使用中:

# Find what's using the port
lsof -i :8080
# Use a different port
docker run -p 9090:8080 hgnc-mcp:latest

内存不足:

# Increase Docker memory limit
docker update --memory="4g" hgnc-mcp-server

缓存未持久化:

# Verify volume exists
docker volume inspect hgnc-cache
# Check mount point
docker inspect hgnc-mcp-server | grep Mounts -A 10

有关更多部署示例和故障排除,请参阅:

用法示例

基本基因查找

library(hgnc.mcp)

# Search for genes
results <- hgnc_find("BRCA")

# Fetch a specific gene
gene <- hgnc_fetch("symbol", "BRCA1")

# Resolve a symbol (handles aliases and previous symbols)
resolution <- hgnc_resolve_symbol("BRCA1", mode = "lenient")

批量操作

# Normalize a list of gene symbols
symbols <- c("BRCA1", "tp53", "EGFR", "OLD_SYMBOL", "invalid")
result <- hgnc_normalize_list(symbols)

# View results
print(result$results)
print(result$summary)
print(result$warnings)

验证

# Validate a gene panel
panel <- c("BRCA1", "BRCA2", "TP53", "ATM", "CHEK2")
validation <- hgnc_validate_panel(panel)

# Check for issues
print(validation$summary)
print(validation$report)

更改跟踪

# Find genes modified in the last 30 days
recent_changes <- hgnc_changes(since = Sys.Date() - 30)
print(recent_changes$summary)

# Track symbol changes since a specific date
symbol_changes <- hgnc_changes(
  since = "2024-01-01",
  change_type = "symbol"
)

基因组

# Search for gene groups
kinases <- hgnc_search_groups("kinase")

# Get members of a specific group
members <- hgnc_group_members("Protein kinases")

真实世界用例

临床基因组学:面板验证

确保临床基因图谱使用当前HGNC批准的命名法:

# Load a clinical panel from a CSV file
clinical_panel <- read.csv("hereditary_cancer_panel.csv")$gene_symbol

# Validate against HGNC standards
validation <- hgnc_validate_panel(clinical_panel, policy = "HGNC")

# Review any issues
if (validation$summary$status != "PASS") {
  cat("Issues found:\n")
  print(validation$report)

  # Get replacement suggestions
  if (!is.null(validation$suggestions)) {
    cat("\nSuggested updates:\n")
    print(validation$suggestions[, c("input_symbol", "suggested_symbol", "reason")])
  }
}

# Generate normalized panel for clinical use
normalized <- hgnc_normalize_list(
  clinical_panel,
  return_fields = c("symbol", "name", "hgnc_id", "omim_id", "location")
)

# Export for lab reporting system
write.csv(normalized$results, "validated_panel.csv", row.names = FALSE)

研究:交叉研究数据整合

跨多个数据集协调基因符号:

# Combine gene lists from different studies
study1_genes <- read.csv("rnaseq_study1.csv")$gene
study2_genes <- read.csv("microarray_study2.csv")$gene
study3_genes <- read.csv("proteomics_study3.csv")$gene

all_genes <- unique(c(study1_genes, study2_genes, study3_genes))

# Normalize to current HGNC symbols
normalized <- hgnc_normalize_list(
  all_genes,
  return_fields = c("symbol", "name", "hgnc_id", "entrez_id", "ensembl_gene_id"),
  dedupe = TRUE
)

# Map back to original datasets with unified nomenclature
# This eliminates false negatives from symbol inconsistencies

药物开发:靶点验证

建立和维护药物开发的靶基因列表:

# Build a kinase inhibitor target panel
kinase_groups <- hgnc_search_groups("kinase")
all_kinases <- hgnc_group_members("Protein kinases")

# Filter for specific kinase families of interest
tyrosine_kinases <- hgnc_search_groups("tyrosine kinase")
target_kinases <- hgnc_group_members("Receptor tyrosine kinases")

# Get comprehensive cross-references for target validation
targets_with_xrefs <- hgnc_normalize_list(
  target_kinases$symbol,
  return_fields = c("symbol", "name", "hgnc_id", "entrez_id",
                   "ensembl_gene_id", "uniprot_id", "omim_id")
)

# Track any nomenclature changes quarterly
quarterly_changes <- hgnc_changes(since = Sys.Date() - 90, change_type = "all")
target_updates <- quarterly_changes$changes[
  quarterly_changes$changes$symbol %in% target_kinases$symbol,
]

监管合规:审计追踪

保持法规提交的术语合规性:

# Document panel version with HGNC provenance
create_compliance_report <- function(panel_genes, panel_name) {
  # Normalize genes
  normalized <- hgnc_normalize_list(
    panel_genes,
    return_fields = c("symbol", "name", "hgnc_id", "status", "location")
  )

  # Validate
  validation <- hgnc_validate_panel(panel_genes)

  # Get cache info for provenance
  cache_info <- get_hgnc_cache_info()

  # Create report
  report <- list(
    panel_name = panel_name,
    report_date = Sys.Date(),
    hgnc_version = cache_info$download_date,
    hgnc_source = cache_info$source_url,
    total_genes = length(panel_genes),
    valid_genes = sum(normalized$results$status == "Approved"),
    validation_status = validation$summary$status,
    normalized_genes = normalized$results,
    validation_report = validation$report,
    warnings = normalized$warnings
  )

  # Save for audit trail
  saveRDS(report, paste0(panel_name, "_", Sys.Date(), "_compliance.rds"))

  return(report)
}

# Use for regulatory submission
panel <- c("BRCA1", "BRCA2", "TP53", "PTEN", "ATM")
compliance <- create_compliance_report(panel, "BRCA_Panel_v2")

文献挖掘:基因参考文献的标准化

从出版物中提取并标准化基因符号:

# Parse gene symbols from abstract/full text (hypothetical)
extracted_genes <- c("p53", "BRCA-1", "EGF receptor", "HER2", "ERBB2")

# Resolve to standard HGNC symbols
resolved <- lapply(extracted_genes, function(g) {
  result <- hgnc_resolve_symbol(g, mode = "lenient")
  if (!is.null(result$approved_symbol)) {
    data.frame(
      original = g,
      approved = result$approved_symbol,
      confidence = result$confidence
    )
  }
})

# Combine results
gene_mapping <- do.call(rbind, resolved)
print(gene_mapping)

# Result:
#     original approved confidence
# 1        p53     TP53      alias
# 2     BRCA-1    BRCA1   approved
# 3  ERBB2     ERBB2   approved

人工智能辅助分析:与Claude一起使用MCP

在MCP服务器运行的情况下,Claude可以帮助完成基因命名任务:

# Start the MCP server
Rscript -e "library(hgnc.mcp); start_hgnc_mcp_server()"

然后在Claude Desktop(配置了MCP)中:

你“我有一份来自旧微阵列研究的基因列表:BRCA1、p53、EGFR、HER-2、NBS1。您能否将这些标准化为当前的HGNC符号,并检查是否有任何符号已更新?"

克劳德: 使用normalize_list和validate_panel MCP工具分析基因,并提供包含当前符号、任何更改和建议的详细报告。

文档

包装插图中提供了全面的文档:

在R中查看小插图:

# List all vignettes
vignette(package = "hgnc.mcp")

# View a specific vignette
vignette("getting-started", package = "hgnc.mcp")

贡献

欢迎投稿!请随时提交问题、功能请求或拉取请求。

许可证

MIT许可证-有关详细信息,请参阅许可证文件。

作者

布伦特·阿曼·阿克索伊(arman@aksoy.org)