模型上下文协议(Model Context Protocol,简称MCP) 是一个开放协议,标准化了应用程序如何向由 Anthropic 开发的语言模型提供上下文。这里我们使用 MCP Python SDK 创建了一个MCP服务器,该服务器通过 pybiomart 包与Biomart进行交互。

有一个简短的 演示视频,展示了Biomart MCP服务器在Claude Desktop上的运行情况。
要通过 Smithery 自动安装Biomart MCP到Claude Desktop:
npx -y @smithery/cli install @jzinno/biomart-mcp --client claude
git clone https://github.com/jzinno/biomart-mcp.git
cd biomart-mcp
uv run --with mcp[cli] mcp install --with pybiomart biomart-mcp.py
通过Cursor的代理模式,其他模型也可以利用MCP服务器,例如来自OpenAI或DeepSeek的模型。点击Cursor设置齿轮图标并导航至MCP,可以将其添加到全局配置中,或者通过在项目中添加.cursor/mcp.json文件将其添加到项目范围。
示例 .cursor/mcp.json:
{
"mcpServers": {
"Biomart": {
"command": "uv",
"args": [
"run",
"--with",
"mcp[cli]",
"--with",
"pybiomart",
"mcp",
"run",
"/your/path/to/biomart-mcp.py"
]
}
}
}
# 创建虚拟环境
uv venv
# MacOS/Linux
source .venv/bin/activate
# Windows
.venv\Scripts\activate
uv sync # 或者 uv add mcp[cli] pybiomart
# 在开发模式下运行服务器
mcp dev biomart-mcp.py
Biomart-MCP提供了多个工具来与Biomart数据库交互:
欢迎提交拉取请求!一些关于开发的小提示:
@mcp.tool(),这是为了最大限度地兼容支持MCP的客户端,如 文档 所示。@lru_cache 来缓存计算成本高或调用外部API的函数的结果。df.to_csv(index=False).replace("\r", "")。这种CSV风格的返回比 df.to_string() 更节省token,因为后者大多数token都是空白字符。同时也要注意,从染色体中提取所有基因或类似的大请求也会超出上下文窗口。当然还有很多可以添加的功能,有些可能超出了名称 biomart-mcp 的范围。这里有一些想法:
bs4 进行网页抓取的功能,例如我们得到了NOTCH1的Ensembl基因ID,那么在某些情况下,抓取UniProtKB页面上的“评论和描述文本”部分可能会很有用,可以从 UCSC的页面 获取。