内容
# 嗅探 MCP — 代理可调用的犬类基因组学
[](https://pypi.org/project/sniff-mcp/)
[](https://www.npmjs.com/package/sniff-mcp)
[](https://registry.modelcontextprotocol.io)
[](https://doi.org/10.5281/zenodo.20566358)
[](https://creativecommons.org/licenses/by/4.0/)
**犬 DNA 的参考层。** 一个实时的开放 API + [MCP](https://modelcontextprotocol.io) 服务器,基于 **Sniff Atlas** — 188 个犬种的等位基因频率分层(CanFam4),校准 AI 病理性(ESM2,AUC 0.935 vs OMIA),Pangolin 剪接,Zoonomia phyloP 保守性,以及变异 ⇄ 基因 ⇄ 犬种 ⇄ 疾病知识图谱。**每个响应都附带其自身的引用 + 来源。**
> 正在使用犬、犬种或犬类健康构建任何东西?这就是数据层。无需密钥,无需注册 — 将您的代理或应用程序指向它即可。
- 🔌 **MCP 端点:** `https://mcp.sniff.world/mcp/`(可流式 HTTP,15 种工具)— 包括 **`ask`**,一个基于引用的犬类遗传学问答,仅从引用数据中回答或诚实地放弃(无幻觉的犬类健康建议),以及 **`disease_bridge`**(具有 ACMG 风格的致病性等级的遗传病原子 + 犬⇄人类同源物)
- 🌐 **REST API:** `https://api.sniff.world/`([OpenAPI 文档](https://api.sniff.world/docs) · [`llms.txt`](https://api.sniff.world/llms.txt))
- 📚 **数据集:** [10.5281/zenodo.20566358](https://doi.org/10.5281/zenodo.20566358)(CC-BY-4.0)
---
## 将其添加到您的编码代理(复制粘贴)
托管服务器是开放的,无需身份验证。请选择您的工具:
**Claude 代码**
```bash
claude mcp add --transport http sniff https://mcp.sniff.world/mcp/
```
**Cursor / Windsurf / VS Code** — 添加到您的 MCP 配置(`.cursor/mcp.json`、`mcp.json`等):
```json
{
"mcpServers": {
"sniff": { "url": "https://mcp.sniff.world/mcp/" }
}
}
```
**Claude 桌面版** 或任何仅限于 stdio 的客户端(通过本地桥接器使用托管服务器):
```json
{
"mcpServers": {
"sniff": { "command": "npx", "args": ["-y", "sniff-mcp"] }
}
}
```
就是这样。询问您的代理: *"CPT2 5:56189113 在各个品种中的频率是多少?"* 或 *"在 DLA 基因中查找高影响变异。*"
---
## 使用 REST API(适用于 Web 应用程序)
无需 SDK — 它就是普通的 HTTP/JSON。
```bash
curl https://api.sniff.world/v1/variant/5:56189113
```
```jsonc
{
"variant_id": "5:56189113", "ref": "A", "alt": "G",
"global_af": 0.0185, "popmax_af": 0.591, "popmax_breed": "akita",
"consequence": "missense_variant", "impact": "MODERATE",
"gene": "CPT2", "esm2_llr": -6.1, "deleteriousness_tier": "...",
"provenance": { "dataset_doi": "10.5281/zenodo.20566358",
"predicted_disease_relevance": "UNPROVEN", "...": "..." }
}
```
```js
// JavaScript / TypeScript
const r = await fetch("https://api.sniff.world/v1/variant/5:56189113/context?breed=akita");
const ctx = await r.json(); // 频率 + 病理性 + 基因 + 跨品种 + 来源
```
| 端点 | 返回内容 |
|---|---|
| `GET /v1/variant/{pos}` | 单个变异:AF、popmax、后果、基因、ESM2/Pangolin/phyloP |
| `GET /v1/variant/{pos}/context` | **连接查询** — 关于一个变异的所有信息,一次调用 |
| `GET /v1/breed/{breed}` | 品种概况(顶部变异、几何、最近的品种) |
| `GET /v1/breed/{breed}/nearest` | 基因上最近的品种(PCA 距离) |
| `GET /v1/gene/{symbol}` | 基因中的变异,按影响排名 |
| `GET /v1/semantic?q=` | 自然语言搜索(“古代北极雪橇犬”) |
| `GET /v1/search` | 跨所有 9.67M 变异的过滤发现 |
| `GET /v1/metadata` | 版本、DOI、计数、范围横幅 |
位置为 **CanFam4** `chrom:pos`(例如 `5:56189113`)。完整模式:**https://api.sniff.world/openapi.json**。
---
## 自主托管(可选)
```bash
uvx sniff-mcp # 在本地运行 MCP 服务器(需要在磁盘上释放数据)
pip install sniff-mcp # 或安装到您的环境中
```
参见 [`ARCHITECTURE.md`](ARCHITECTURE.md) 和 [`Dockerfile`](Dockerfile)。托管端点是简单路径;自主托管适用于无空气间隙或高容量使用。
---
## 它是什么(和不是)
从 [CanVAS](https://doi.org/10.5281/zenodo.19186944)(14,478 只狗,Beagle 校准,MAF≥1%)加上投影社区队列构建。病理性是 **计算** 的 — 每个预测都标记为 `predicted_disease_relevance: "UNPROVEN"`。这是一个研究和发现资源,**不是临床诊断。** 范围(常见 + 低频变异,MAF≥1%)和 UNPROVEN 警告在每个响应的 `provenance` 块中,因此任何代理引用内容都保持诚实和自我引用。
## 引用
> Gehring, M. (2026). *Sniff Atlas.* Zenodo. https://doi.org/10.5281/zenodo.20566358 (CC-BY-4.0)
```bibtex
@dataset{sniff_atlas_2026,
author = {Gehring, Matt},
title = {Sniff Atlas},
year = {2026},
publisher = {Zenodo},
doi = {10.5281/zenodo.20566358},
url = {https://sniff.world}
}
```
**代码** MIT · **数据** CC-BY-4.0 · world.sniff/sniff-mcp · https://sniff.world