内容
# stringdb-link
[](https://www.python.org/)
[](https://github.com/berntpopp/stringdb-link/actions/workflows/ci.yml)
[](https://github.com/berntpopp/stringdb-link/actions/workflows/conformance.yml)
[](LICENSE)
一个 **基于 STRING 的 MCP 服务器**,STRING 是蛋白质-蛋白质关联网络和功能富集数据库。它提供 STRING v12.0 作为带有类型定义的 MCP 工具,通过 Streamable HTTP 提供服务,同时提供与 FastAPI REST API 相同的接口。
> [!IMPORTANT]
> 本项目仅用于研究目的。不得用于临床决策支持,不得用于诊断、治疗、分诊或患者管理。
## 为什么
STRING 提供公共的 HTTP API,但其设计主要针对浏览器中粘贴的脚本,而非代理。存在四个具体的问题:
- **没有基于基因符号的索引。** 每个有用的调用都需要 STRING 蛋白质 ID(`9606.ENSP00000269305`);获取它是一个单独的解析步骤。
- **多蛋白质查询使用字符串编码。** 标识符通过查询参数中的字面换行符 (`%0d`) 连接 — 容易出错。
- **结果是无类型的行**,列名简短 (`stringId_A`、`escore`、`fscore`),没有验证模式。
- **默认主机是一个动态目标。** STRING 要求集成者固定一个版本化的主机 (`version-12-0.string-db.org`),以便在发布过程中查询保持返回相同的答案 — 并要求调用者每秒等待一次并标识自己。
本服务器解决了这四个问题:它固定 STRING v12.0,解析标识符,使用 Pydantic 验证每个参数,返回类型化的信封,根据结果类别缓存,并限流至 STRING 的礼貌速率。
## 快速开始
托管服务,无需安装:
```bash
claude mcp add --transport http stringdb https://stringdb-link.genefoundry.org/mcp
```
本地开发(Python 3.12+,[uv](https://github.com/astral-sh/uv)):
```bash
uv sync --group dev
make dev # REST + MCP on http://127.0.0.1:8000/mcp
curl -s localhost:8000/health
claude mcp add --transport http stringdb http://127.0.0.1:8000/mcp
```
> [!NOTE]
> MCP 客户端需要 `unified` 传输(`make dev` 运行的内容)。`--transport http` 提供 REST API **不带** `/mcp` 前缀。参见 [deployment.md](docs/deployment.md#transports)。
## 工具
| 工具 | 目的 |
|------|---------|
| `resolve_protein_identifiers` | 将基因符号、同义词或 UniProt 登录号映射到 STRING 蛋白质 ID |
| `search_protein_interactions` | 检索一组蛋白质之间的相互作用网络 |
| `get_interaction_partners` | 列出蛋白质的 STRING 相互作用伙伴 |
| `compute_functional_enrichment` | GO、KEGG、UniProt 关键词、PubMed、Pfam、InterPro 和 SMART 的富集分析 |
| `compute_ppi_enrichment` | 测试蛋白质集是否比随机情况有更多的相互作用 |
| `get_functional_annotations` | 检索附加到每个蛋白质的功能注释 |
| `get_protein_homology_scores` | 输入蛋白质之间的成对蛋白质相似性(比特分数) |
| `get_protein_homology_best_hits` | 输入蛋白质的每个物种的最佳相似性命中 |
| `get_network_link` | 在 STRING 网站上构建可分享的网络链接 |
| `get_network_image` | 将网络渲染为图像(PNG、高分辨率 PNG 或 SVG) |
叶子名称 **无前缀**,按照工具命名标准 v1。在 [`genefoundry-router`](https://github.com/berntpopp/genefoundry-router) 后,服务器安装在 `stringdb` 命名空间下,因此工具以 `stringdb_<tool>` 形式出现 — 例如 `stringdb_get_interaction_partners`。不要自行添加前缀;网关添加命名空间(CI 守护进程强制执行此规则)。
## 数据与出处
数据来自 STRING REST API,固定在 **STRING v12.0** (`https://version-12-0.string-db.org/api`),因此查询在 STRING 发布过程中保持答案不变。没有本地镜像;新鲜度取决于 STRING,减去每个结果类别的缓存 TTL(标识符映射为 24 小时,网络为 12 小时,富集为 6 小时)。
STRING 要求调用者每秒等待一次请求;客户端默认限流至 1 req/s,并使用 `caller_identity` 进行标识。**请勿绕过限流。**
STRING 数据遵循 **[CC BY 4.0](https://creativecommons.org/licenses/by/4.0/)** 许可。在使用 STRING 衍生结果时,请引用 STRING:
> Szklarczyk D, Kirsch R, Koutrouli M, et al. The STRING database in 2023: protein–protein association networks and functional enrichment analyses for any sequenced genome of interest. *Nucleic Acids Res.* 2023;51(D1):D638–D646. doi:10.1093/nar/gkac1000
更多详细信息 — 端点映射、TTL 原理、标识符语义:[data.md](docs/data.md)。
## 文档
- [配置](docs/configuration.md) — 每个环境变量(表格针对实时设置模型进行机器检查)、主机/源请求守护进程、CORS、缓存 TTL 和 MCP 身份合约。
- [部署](docs/deployment.md) — 传输、入口点、Docker、在反向代理后面运行以及 Claude Desktop 连接。
- [架构](docs/architecture.md) — MCP 接口如何从 REST 路由生成、MCP 硬化层以及 REST API 示例。
- [数据与出处](docs/data.md) — STRING 来源、v12.0 固定、缓存、许可和引用。
- [STRING API 参考](docs/rest-api.md) — 上游 API 文档,厂商。
- [SECURITY.md](SECURITY.md) — 漏洞报告和所需的存储库设置。
- [AGENTS.md](AGENTS.md) — 人类和代码代理的存储库约定。
## 贡献
参见 [AGENTS.md](AGENTS.md) 了解工程约定(uv、Ruff、mypy 严格、600 行模块预算、测试布局)。`make ci-local` 是完成定义的门控:格式、 lint、行预算、README 标准、类型检查和测试。提交前必须通过。
## 许可
代码:[MIT](LICENSE) © Bernt Popp。STRING 数据:**CC BY 4.0** © STRING 联盟 — 需要署名,并必须声明您所做的任何更改或添加。