关于 ensembl-mcp-server
ensembl-mcp-server 为研究人员和生物信息学工作流提供访问 Ensembl REST 基因、序列、变异、同源关系及交叉引用数据的能力。它还提供基因与转录本资源,以及结构化的基因档案提示词。
主要功能
- 01列出 Ensembl 各分部的物种
- 02查询基因及转录本详情
- 03获取 DNA、RNA 和蛋白质序列
- 04查询基因组区域内的特征
- 05使用 VEP 预测变异后果
- 06查找同源基因和外部交叉引用
适用场景
- 01根据符号或 ID 汇总基因档案
- 02获取基因和转录本序列
- 03探索基因组区域内重叠的特征
- 04评估变异影响及相关注释
MCP 相关
它将 Ensembl REST 查询封装为 MCP 工具,并提供基因、转录本和物种资源,以及基因档案提示词。支持 STDIO 与 Streamable HTTP,并提供托管端点。
配置
远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。
https://ensembl.caseyjhand.com/mcpclaude mcp add --transport http cyanheads-ensembl https://ensembl.caseyjhand.com/mcp{"mcpServers":{"cyanheads-ensembl":{"type":"http","url":"https://ensembl.caseyjhand.com/mcp"}}}在 Cursor 中打开{"servers":{"cyanheads-ensembl":{"type":"http","url":"https://ensembl.caseyjhand.com/mcp"}}}在 VS Code 中打开{"mcpServers":{"cyanheads-ensembl":{"type":"http","url":"https://ensembl.caseyjhand.com/mcp"}}}{"mcpServers":{"cyanheads-ensembl":{"serverUrl":"https://ensembl.caseyjhand.com/mcp"}}}命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。
工具
7| 参数 | 类型 | 必填 | 说明 |
|---|---|---|---|
| offset | integer | 否 | 按名称排序的匹配结果中的 0 起始位置,表示返回页面的起点。默认为 0。传入上次响应中的 nextOffset 以获取下一页;offset 大于或等于 totalCount 时不返回任何物种。 |
| division | enum | 否 | 筛选指定的 Ensembl 分区。EnsemblVertebrates 包含人类、小鼠、斑马鱼及其他脊椎动物。EnsemblPlants 涵盖作物和模式植物基因组。EnsemblFungi、EnsemblMetazoa、EnsemblProtists 涵盖非脊椎动物模式生物。不指定则返回端点的默认分区(脊椎动物)。EnsemblVertebrates | EnsemblPlants | EnsemblFungi | EnsemblMetazoa | EnsemblProtists |
| max_results | integer | 否 | 从 offset 开始返回的物种数量上限。默认为 50。设为 0 可返回从 offset 到末尾的所有匹配物种,不设上限。totalCount 始终报告达到此上限前的完整匹配数量。 |
| nameContains | string | 否 | 在获取结果后于本地应用的不区分大小写的子字符串筛选器。匹配物种名称、显示名称和通用名称。例如:"sapiens" 匹配 homo_sapiens;"mouse" 匹配 mus_musculus。 |
详细介绍
@cyanheads/ensembl-mcp-server
通过 MCP 查询基因、获取序列、预测变异后果、查找直系同源基因,并从 Ensembl REST 获取跨数据库交叉引用。支持 STDIO 或 Streamable HTTP。
概述
通过 Ensembl REST API 获取脊椎动物和其他模式生物的基因、序列和变异数据。查询基因、获取序列、预测变异后果、查找直系同源基因,并交叉引用外部数据库。
工具
| 工具 | 描述 |
|---|---|
ensembl_list_species | 列出 Ensembl 支持的物种及其显示名称、常用名称、组装版本、分类单元 ID 和分区 |
ensembl_lookup_gene | 按符号(包括同义词和旧符号)及物种,或按稳定 ID,查找基因的 Ensembl ID、基因组位置、生物类型和转录本列表 |
ensembl_get_sequence | 获取基因、转录本、蛋白质或基因组区域的 DNA、cDNA、CDS 或蛋白质序列 |
ensembl_query_region | 查找与染色体区域重叠的基因组特征(基因、转录本、变异、调控元件、外显子) |
ensembl_predict_variant | 使用 Ensembl Variant Effect Predictor (VEP) 预测序列变异的功能后果 |
ensembl_get_homology | 查找跨物种的基因直系同源基因和/或旁系同源基因,并获取序列一致性百分比和分类层级 |
ensembl_get_xrefs | 获取基因的跨数据库引用——HGNC、UniProt、EntrezGene、OMIM、RefSeq、Reactome 等 |
资源
| 资源 | 描述 |
|---|---|
ensembl://gene/{id} | 按稳定 ID(ENSG…)查询基因记录 — 包含位置、生物类型、描述和转录本列表 |
ensembl://transcript/{id} | 按稳定 ID(ENST…)查询转录本记录 — 包含所属基因、位置、生物类型、是否为规范转录本以及长度 |
ensembl://species | 该端点默认分区支持的 Ensembl 物种(默认端点为脊椎动物) |
ensembl://species/{division} | 某个分区支持的物种(EnsemblVertebrates、EnsemblPlants、EnsemblFungi、EnsemblMetazoa、EnsemblProtists) |
物种资源返回内部名称排序靠前的 50 个物种;ensembl_list_species 工具会分页获取其余物种,并按名称筛选。
提示词
| 提示词 | 描述 |
|---|---|
ensembl_gene_dossier | 用于整理完整基因档案的结构化工作流:符号 → ID + 位置 → 序列 → 变异 → 直系同源物 → xrefs |
功能参考
Ensembl 的稳定 ID 端点会将带版本号的 ID(ENSG00000139618.19)视为未找到,因此所有接受 Ensembl 稳定 ID 的工具和资源都会在请求前去掉 ENS… ID 末尾的 .N,并返回当前版本。ensembl_predict_variant 的 HGVS 输入(ENST00000380152.8:c.2T>A)会保留版本号,其他来源的 ID(AT3G52430.1)则会原样转发。
ensembl_list_species 工具
- 可选参数
division(EnsemblVertebrates、EnsemblPlants、EnsemblFungi、EnsemblMetazoa、EnsemblProtists;省略时使用端点默认值 — 脊椎动物,在 GRCh38 上约有 356 个物种)和nameContains,用于匹配名称、显示名称和常用名称中的子字符串 - 返回其他工具所需的内部名称(
homo_sapiens),以及显示名称、常用名称、分类单元 ID、组装版本和分区 - 按内部名称排序,并通过
offset(默认值0)和max_results(默认值50,0表示不设上限)分页;totalCount报告所有匹配项,若还有后续结果,nextOffset指明下一页的起始位置
ensembl_lookup_gene 工具
- 必须且只能指定
symbol(以及species,默认值为homo_sapiens)、id、ids或symbols中的一项(最多提交 1,000 项;处理前 20 个去重并去除首尾空格后的查询);expand_transcripts(默认值false)可添加包含生物类型和规范标记的转录本列表 - 不展开时,
canonicalTranscript会标识规范转录本;查询转录本 ID 时也会返回parentGeneId。展开后的转录本在可用时会包含 maneSelect RefSeq 登录号(BRCA2:ENST00000380152.8、NM_000059.4) - 若某个符号不是当前基因名称,则会回退查询同义词和曾用符号(
HER2→ERBB2),并通过matchedAlias报告;若多个基因共用同一名称(MDR1),则返回ambiguous及候选项,可改用id重试 - 单项查询返回
gene(或ambiguous);batch返回按顺序排列的succeeded项(包含提交的query)、failed项(包含query、reason(not_found、带有candidates的ambiguous,或unavailable)、error和recovery),以及超出处理上限的omitted查询。不会请求或报告被省略的查询为失败;请单独重新提交。错误:not_found、invalid_species、no_input、conflicting_input
ensembl_get_sequence 工具
- 稳定 ID(
ENSG…/ENST…/ENSP…)或区域(species:chr:start-end,或与species搭配的chr:start-end;最多 10,000,000 个碱基);type为genomic(默认值)、cdna、cds或protein——cdna和cds仅接受转录本 ID,protein接受转录本或蛋白质 ID;expand_5prime/expand_3prime用于添加侧翼碱基 - 区域可附加
:1/:-1链后缀(1:1000000-1000020:-1会返回反向互补序列);脊椎动物的线粒体名称为MT(果蝇中为mitochondrion_genome,秀丽隐杆线虫中为MtDNA);若M/chrM无法解析为线粒体,则会因invalid_region被拒绝 - 返回由
offset(默认值0)和max_length(默认值10000,0表示不设上限)指定的窗口;length为完整序列长度,truncated/nextOffset指明续读位置 - 错误:
not_found、type_mismatch(也适用于对蛋白质 ID 请求genomic/cdna/cds,或对非编码转录本请求protein/cds)、invalid_species、missing_species、invalid_region(也适用于包含冒号但不是有效区域的 ID)
ensembl_query_region 工具
region为species:chr:start-end,或与species搭配的chr:start-end(最多 5,000,000 个碱基;不接受倒置的坐标;线粒体命名规则同ensembl_get_sequence);feature默认为["gene"],也接受transcript、variation、regulatory、exon;可选的biotype筛选器区分大小写(protein_coding、lncRNA)。筛选后结果为空时,建议移除筛选条件,不要据此推断该位点位于基因间区max_results限制列表长度(默认值100,0表示不设上限),totalCount返回实际总数;assemblyName指明坐标所属的组装版本,外显子行包含parentId和rank。错误:invalid_region、invalid_species、missing_species
ensembl_predict_variant 工具
variant可为 HGVS(相对于转录本或基因组)、区域+等位基因(chr:start:end:strand/allele),或 dbSNP rsID- 返回最严重的后果、逐转录本影响(HIGH/MODERATE/LOW/MODIFIER),以及具有临床意义的共定位已知变异。错误:
invalid_notation、not_found、invalid_species - 所有输入方式都会请求 HGVS、canonical 和 MANE 注释。后果保留
variantAllele、可选的canonical/maneSelect、HGVS 以及可用的 SIFT/PolyPhen 预测分数对;记录保留alleleString - 共定位的
clinicalSignificance是汇总结果,并非对所提交等位基因的分类。clinicalSignificanceByAllele保留明确的逐等位基因术语,clinicalSignificanceReferenceAllele标明其参考等位基因;缺失的注释不会返回 max_transcript_consequences和max_pubmed_ids_per_variant(各自默认值为10,0表示不设上限;include_all_colocated_pubmed可取消 PubMed 数量上限)限制结果,而transcriptConsequencesTotal和pubmedTotal返回完整计数
ensembl_get_homology 工具
symbol(以及species,默认值为homo_sapiens)和id中必须且只能指定一个;type为orthologues(默认值)、paralogues或all;可选的target_species筛选器max_results限制列表长度(默认值25,0表示不设上限),totalCount返回实际总数。错误:not_found、invalid_species(未知的species或target_species)、no_input、conflicting_input- 每一行都会保留可选的
targetProteinId,可供ensembl_get_sequence使用,且type:"protein"。可选的targetSymbol来自对返回行中不同基因 ID 的查询,按每批最多 1,000 个 ID 分批进行,共享五秒预算,并受调用剩余截止时间限制,且不重试。若名称缺失或查询失败,则保留所有主要同源基因,并附带提示;取消操作仍会中止请求
ensembl_get_xrefs 工具
- 必填
id(ENSG…/ENST…/ENSP…);可选dbname筛选器(例如HGNC、Uniprot_gn、EntrezGene、MIM_GENE、RefSeq_mRNA、用于基因通路的Reactome_gene、用于翻译通路的Reactome、GO) - 默认情况下,
all_levels:false会查询指定对象所在层级。设置all_levels:true可包含基因的转录本和翻译产物引用,无论dbname为何;例如,基因层级的RefSeq_mRNA可能需要此设置或转录本 ID。空列表仍会成功返回totalCount:0。错误:not_found
ensembl://gene/{id} 资源
id是基因稳定 ID(ENSG…);版本后缀可选,且会被移除- 返回位置信息、生物类型、描述和转录本列表。错误:
not_found
ensembl://transcript/{id} 资源
id是转录本稳定 ID(ENST…);版本后缀可选,且会被移除- 返回父基因、位置信息、生物类型、规范标记和长度。错误:
not_found
ensembl://species 资源
- 无参数 — 覆盖端点的默认分部(脊椎动物;默认 GRCh38 端点约有 356 个物种)
- 按内部名称返回前 50 个物种,并提供
totalCount、shown和truncated;如果响应正文被截断,其中的notice会指向ensembl_list_species(offset、max_results),以获取其余结果 - 对于指定分部,请改为读取
ensembl://species/{division}
ensembl://species/{division} 资源
- 必填
division:EnsemblVertebrates、EnsemblPlants、EnsemblFungi、EnsemblMetazoa或EnsemblProtists - 按内部名称返回该分部的前 50 个物种 — 包含内部名称、显示名称、组装版本、分类群 ID 和分部 — 并提供
totalCount、shown和truncated;如果响应正文被截断,其中的notice会指向ensembl_list_species(division、offset、max_results),以获取其余结果
ensembl_gene_dossier 提示词
- 参数:必填
gene_symbol;可选species(默认值为homo_sapiens) - 按顺序执行 7 步工作流:解析基因 → 获取蛋白质序列 → 查找基因座中的变异 → 预测变异后果 → 查找跨物种直系同源基因 → 获取外部数据库 ID → 汇总档案
功能
基于 @cyanheads/mcp-ts-core 构建:支持 stdio 和 Streamable HTTP 传输、可插拔身份验证(none / jwt / oauth)、可替换存储(in-memory、filesystem、Supabase、Cloudflare KV/R2/D1),以及支持可选 OpenTelemetry 跟踪的结构化日志记录。
Ensembl 专属功能:
- 无需密钥的 REST API — 无需 API 密钥;Ensembl REST 完全公开,每小时可处理 55,000 个请求
- 针对 429 响应(遵循
Retry-After)和临时 5xx 错误进行重试 - 上游调用单次尝试超时为 180 秒,每次调用超时为 240 秒,因此 Ensembl 卡住时会失败,而不会一直挂起
- 批量查询使用
POST /lookup/id和POST /lookup/symbol/{species},以避免 N+1 次往返 - 通过
ENSEMBL_BASE_URL支持 GRCh37 旧版;将整个服务指向https://grch37.rest.ensembl.org,即可为较旧的组装版本处理临床工作流 - 所有包含坐标的响应都会附带组装版本名称,确保 Agent 看到的基因组位置始终有组装版本作为上下文
便于 Agent 使用的输出:
ensembl_get_sequence默认返回有界窗口(10,000 个字符),并附带完整长度和用于继续读取的nextOffsetensembl_list_species用于发现物种内部名称;每页返回 50 个,并附带nextOffsetensembl_get_xrefs返回的交叉引用 ID 被说明为蛋白质和文献服务的输入;ensembl_gene_dossier提示词串联了 7 个工具中的 6 个
开始使用
公共托管实例
可使用公共实例 https://ensembl.caseyjhand.com/mcp,无需安装。该实例提供 Streamable HTTP;不同客户端的配置格式各不相同。
对于 Claude Code:
claude mcp add --transport http ensembl-mcp-server https://ensembl.caseyjhand.com/mcp
对于 Cline(cline_mcp_settings.json):
{
"mcpServers": {
"ensembl-mcp-server": {
"type": "streamableHttp",
"url": "https://ensembl.caseyjhand.com/mcp"
}
}
}
对于 Cursor(mcp.json):
{
"mcpServers": {
"ensembl-mcp-server": {
"url": "https://ensembl.caseyjhand.com/mcp"
}
}
}
Claude Desktop 可在 Settings → Connectors 下添加远程服务。
自托管 / 本地运行
将以下内容添加到 MCP 客户端配置文件中。
{
"mcpServers": {
"ensembl-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/ensembl-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
或者使用 npx(无需 Bun):
{
"mcpServers": {
"ensembl-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/ensembl-mcp-server@latest"],
"env": {
"MCP_TRANSPORT_TYPE": "stdio",
"MCP_LOG_LEVEL": "info"
}
}
}
}
或者使用 Docker:
{
"mcpServers": {
"ensembl-mcp-server": {
"type": "stdio",
"command": "docker",
"args": [
"run", "-i", "--rm",
"-e", "MCP_TRANSPORT_TYPE=stdio",
"ghcr.io/cyanheads/ensembl-mcp-server:latest"
]
}
}
}
对于 Streamable HTTP,设置传输方式并启动服务:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
前置条件
- Bun v1.4.0 或更高版本(或 Node.js v24+)。
- 无需 API 密钥 — Ensembl REST 完全公开。
安装
- 克隆仓库:
git clone https://github.com/cyanheads/ensembl-mcp-server.git
- 进入目录:
cd ensembl-mcp-server
- 安装依赖项:
bun install
- 配置环境:
cp .env.example .env
# edit .env if you need to override ENSEMBL_BASE_URL (e.g. for GRCh37)
配置
所有配置均通过 src/config/server-config.ts 中的 Zod schema 在启动时进行验证。
| 变量 | 说明 | 默认值 |
|---|---|---|
ENSEMBL_BASE_URL | Ensembl REST API 基础 URL。可将其覆盖为 GRCh37(https://grch37.rest.ensembl.org)或本地镜像。 | https://rest.ensembl.org |
MCP_TRANSPORT_TYPE | 传输方式:stdio 或 http | stdio |
MCP_HTTP_PORT | HTTP 服务端口 | 3010 |
MCP_HTTP_ENDPOINT_PATH | HTTP 端点路径 | /mcp |
MCP_SESSION_MODE | HTTP 会话模式:auto、stateful 或 stateless | stateless |
MCP_AUTH_MODE | 身份验证方式:none、jwt 或 oauth | none |
MCP_LOG_LEVEL | 日志级别(debug、info、warning、error 等) | info |
LOGS_DIR | 日志文件目录(仅限 Node.js) | <project-root>/logs |
LOG_TOOL_FAILURE_PAYLOADS | 记录每次失败的工具调用参数和结果,按键名进行脱敏,并限制在 LOG_TOOL_FAILURE_PAYLOAD_MAX_BYTES(默认值为 16384)以内。自由格式值中的密钥不会被脱敏。 | false |
OTEL_ENABLED | 启用 OpenTelemetry | false |
完整的可选覆盖项列表请参阅 .env.example。
运行服务
本地开发
-
构建并运行:
# One-time build bun run rebuild # Run the built server bun run start:stdio # or bun run start:http -
运行检查和测试:
bun run devcheck # Lint, format, typecheck, security bun run test # Vitest test suite bun run lint:mcp # Validate MCP definitions against spec
Docker
docker build -t ensembl-mcp-server .
docker run --rm -p 3010:3010 ensembl-mcp-server
Dockerfile 默认使用 HTTP 传输、无状态会话模式,并将日志写入 /var/log/ensembl-mcp-server。默认会安装 OpenTelemetry 对等依赖项;如需省略这些依赖项,请使用 --build-arg OTEL_ENABLED=false 构建。
项目结构
| 目录 | 用途 |
|---|---|
src/index.ts | createApp() 入口点 — 注册工具、资源和提示词,并初始化服务 |
src/config | 使用 Zod 解析和验证服务专属环境变量 |
src/mcp-server/tools | 工具定义(*.tool.ts)— 7 个工具 |
src/mcp-server/resources | 资源定义(*.resource.ts)— 基因、转录本、物种 |
src/mcp-server/prompts | 提示词定义(*.prompt.ts)— 基因档案工作流 |
src/services/ensembl | Ensembl REST API 客户端 — HTTP、速率限制处理、重试、错误规范化 |
tests/ | 与 src/ 结构对应的单元测试和集成测试 |
开发指南
开发指南和架构规则请参阅 CLAUDE.md。简要内容如下:
- 处理程序抛出异常,框架负责捕获 — 工具逻辑中不要使用
try/catch - 使用
ctx.log进行请求范围的日志记录,使用ctx.state进行租户范围的存储 - 在
src/index.ts的createApp()数组中注册新工具和资源 - 封装外部 API 调用:验证原始数据 → 规范化为领域类型 → 返回输出 schema;绝不要编造缺失字段
贡献
欢迎提交问题。提交前请运行检查和测试:
bun run devcheck
bun run test
许可证
Apache-2.0 — 详情请参阅 LICENSE。
评论
一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。