Skip to main content
Glama
README.md
# foldseek-mcp

独立的 FastMCP 服务端,用 MCP 工具封装 FoldSeek `easy-search`。

本项目面向 ProteinMCP / Claude / Agent Runtime 使用。MCP 负责参数校验、路径安全、Docker/FoldSeek 调用、结果解析、日志、artifact、`command.json` 和 `manifest.json` 记录。

## MCP Tools

- `foldseek_search_structure`:用 PDB/mmCIF 结构文件搜索官方 FoldSeek 数据库。
- `foldseek_search_sequence`:用 FASTA 文本或 FASTA 文件搜索结构数据库。
- `foldseek_list_databases`:列出已安装数据库、可用官方数据库、模型状态和 Agent 建议。
- `foldseek_download_database`:显式下载官方 FoldSeek 数据库。
- `foldseek_validate_environment`:检查 Docker/FoldSeek、数据库目录、模型目录和运行目录。

## 默认数据库策略

默认官方数据库 alias:

```text
afdb_uniprot50_minimal
```

对应 FoldSeek 官方数据库名:

```text
Alphafold/UniProt50-minimal
```

注意:该官方库约 114GB,不会在普通安装时静默下载。需要显式确认后下载,或由外部流程提前下载好并挂载/配置给 MCP。

不再把自建 fixture 数据库作为默认科学搜索数据库。fixture 只能用于链路 smoke test,不能替代官方数据库。

## 推荐部署方式

大型 FoldSeek 数据库不要打进 MCP Docker 镜像。推荐:

- MCP 镜像只包含运行环境、FoldSeek runtime、MCP 代码。
- 官方数据库放在服务器持久化目录。
- 运行时通过 volume 或环境变量挂载。

示例目录:

```text
/opt/mgi/foldseek-mcp/
/data/foldseek/databases/afdb_uniprot50_minimal/
/data/foldseek/models/
/data/foldseek/runs/
```

如果你先在 Windows 下载到 `E:\download\foldseek`,服务器上可以拷贝成:

```text
/data/foldseek/databases/afdb_uniprot50_minimal/
```

然后设置:

```bash
FOLDSEEK_MCP_DATABASE_ROOT=/data/foldseek/databases
FOLDSEEK_MCP_MODEL_ROOT=/data/foldseek/models
FOLDSEEK_MCP_RUN_ROOT=/data/foldseek/runs
FOLDSEEK_MCP_BACKEND=docker
FOLDSEEK_MCP_DOCKER_IMAGE=openeuler/foldseek:10-941cd33-oe2403sp3
FOLDSEEK_MCP_AUTO_DOWNLOAD=false
```

数据库 prefix 应为:

```text
<DATABASE_ROOT>/afdb_uniprot50_minimal/afdb_uniprot50_minimal
```

## 下载官方数据库

通过 MCP 工具下载时,需要显式确认大体积下载:

```json
{
  "database": "afdb_uniprot50_minimal",
  "confirm_large": true
}
```

也可以直接用 Docker 下载到外部目录:

```powershell
$ROOT = "E:\download\foldseek"
New-Item -ItemType Directory -Force -Path "$ROOT\databases\afdb_uniprot50_minimal\tmp"

docker pull openeuler/foldseek:10-941cd33-oe2403sp3

docker run --rm `
  -v "${ROOT}:/data" `
  openeuler/foldseek:10-941cd33-oe2403sp3 `
  foldseek databases "Alphafold/UniProt50-minimal" `
  /data/databases/afdb_uniprot50_minimal/afdb_uniprot50_minimal `
  /data/databases/afdb_uniprot50_minimal/tmp `
  --threads 8
```

## 安装

```bash
python -m venv .venv
source .venv/bin/activate
pip install -e ".[dev]"
```

或:

```bash
bash quick_setup.sh
```

Windows 默认使用 Docker 后端。如果 Docker Desktop 未启动,MCP 会返回结构化错误 `docker_unavailable`,提示用户启动 Docker。

## 运行

```bash
python -m foldseek_mcp.server
```

## Local-first remote fallback

Search tools use `local-first, remote-fallback`:

1. If the requested database is installed or mounted locally, MCP runs local `foldseek easy-search`.
2. If the local database is missing and `FOLDSEEK_MCP_REMOTE_FALLBACK=true`, MCP calls the official Foldseek Web API.
3. If the remote API also fails, MCP returns a structured error with a local database remediation hint.

Remote fallback configuration:

```bash
FOLDSEEK_MCP_REMOTE_FALLBACK=true
FOLDSEEK_MCP_REMOTE_BASE_URL=https://search.foldseek.com
FOLDSEEK_MCP_REMOTE_TIMEOUT_SECONDS=900
FOLDSEEK_MCP_REMOTE_POLL_INTERVAL_SECONDS=2.0
```

Remote alias mapping:

```text
afdb_uniprot50_minimal -> afdb50
afdb_swissprot -> afdb-swissprot
afdb_proteome -> afdb-proteome
pdb -> pdb100
cath50 -> cath50
```

`search.foldseek.com` is suitable as a free fallback path, but it is a public web server API rather than a production SLA service. For reproducibility, compliance, or private structures, mount local databases and set:

```bash
FOLDSEEK_MCP_REMOTE_FALLBACK=false
```

## Artifacts

每次搜索会创建:

```text
runs/jobs/<job_id>/
  query.pdb 或 query.fasta
  results.tsv
  results.json
  stdout.log
  stderr.log
  command.json
  manifest.json
```

`manifest.json` 记录 query hash、数据库 alias、数据库 path/prefix、FoldSeek 版本、命令参数、时间戳、状态和 artifact 路径。

## 常见错误

- `docker_unavailable`:Windows Docker 后端不可用,启动 Docker Desktop 后重试。
- `docker_image_missing`:本地没有 FoldSeek Docker 镜像,运行 `quick_setup.sh` 或 `docker pull openeuler/foldseek:10-941cd33-oe2403sp3`。
- `auto_download_limit_exceeded`:官方库体积超过自动下载阈值,需要显式 `confirm_large=true`。
- `database_missing`:官方数据库未下载或未挂载到 `FOLDSEEK_MCP_DATABASE_ROOT`。
- `foldseek_nonzero_exit`:FoldSeek 命令执行失败,查看该 job 的 `stderr.log` 和 `command.json`。

TDQS

B3.4/5.0

Scored across 5 tools

Disambiguation5/5

Each tool targets a distinct operation: database download, listing, sequence search, structure search, and environment validation. No functional overlap.

Naming Consistency5/5

All tools follow the consistent pattern 'foldseek_verb_noun' with clear, descriptive names (e.g., foldseek_download_database, foldseek_search_sequence).

Tool Count5/5

Five tools is appropriate for a focused scientific server covering database management, two search modalities, and environment checks.

Completeness4/5

Core workflows are covered, but missing a tool to delete or update databases, which is a minor gap for full lifecycle management.

Maintenance

ActivityMaintained
ResponsivenessSyncing