antiSMASH MCP Server
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@antiSMASH MCP ServerRun antiSMASH on NC_003888.3 and check the job status"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
antiSMASH MCP 服务器
⚠️ 非官方项目声明:这是一个社区开发的非官方 MCP 服务器,与 antiSMASH 官方团队无关。antiSMASH 是 antiSMASH 团队 的产品,本项目仅通过其公开 Web API 进行交互。
antiSMASH MCP 服务器 是一个基于 Model Context Protocol (MCP) 的服务器,用于与 antiSMASH 数据库进行交互,实现次级代谢产物生物合成基因簇的自动化分析。
English Documentation | 中文文档
目录
Related MCP server: Bio-MCP FastQC Server
概述
antiSMASH(antibiotics & Secondary Metabolites Analysis Shell)是一个广泛使用的生物信息学工具,用于在基因组序列中识别次级代谢产物生物合成基因簇(BGCs)。antiSMASH 支持细菌、真菌和植物基因组分析,提供详细的基因簇类型、功能注释和比较分析结果。
本项目实现了一个 MCP 服务器,使 AI 助手(如 Claude)能够直接与 antiSMASH 数据库交互,实现以下功能:
📤 提交分析任务:上传序列文件或使用 NCBI 登录号提交分析
📊 查询任务状态:检查任务是否在运行、排队或已完成
📋 获取分析结果:解析检测到的生物合成基因簇和区域信息
📥 下载结果文件:下载完整的分析结果 ZIP 压缩包
🖥️ 服务器状态查询:检查 antiSMASH 服务器运行状态
功能特性
支持的 antiSMASH 服务器
服务器类型 | 描述 | URL |
| 细菌版本(默认) | |
| 真菌版本 | |
| 植物版本 |
检测严格度
严格度 | 描述 |
| 严格模式:检测包含所有必需部分的完整基因簇 |
| 宽松模式(默认):检测缺少一个或多个功能部分的部分基因簇 |
| 松散模式:使用更宽松的标准,可能包含更多假阳性结果 |
额外功能
功能名称 | 描述 |
| KnownClusterBlast - 与 MIBiG 数据库中已知基因簇进行比对 |
| ClusterBlast - 与数据库中的基因簇进行比对 |
| SubClusterBlast - 与已知亚簇进行比对 |
| MIBiG 基因簇比较 |
| ActiveSiteFinder - 活性位点分析 |
| RREFinder - 检测 RRE(RiPP 识别元件)结构域 |
| 基于 Pfam 的 GO 术语注释 |
| TIGRFam 分析 |
| TFBS 分析 - 转录因子结合位点分析 |
| NCBI 基因组上下文链接 |
安装
前置条件
Python 3.10 或更高版本
pip 包管理器
从源码安装
# 克隆仓库
git clone https://github.com/ZengZichao/antiSMASH-MCP.git
cd antiSMASH-MCP
# 安装包(推荐使用虚拟环境)
pip install -e .依赖项
以下依赖项会在安装时自动安装:
mcp>=1.0.0- Model Context Protocol SDKhttpx>=0.25.0- 异步 HTTP 客户端pydantic>=2.0.0- 数据验证
配置
环境变量
环境变量 | 默认值 | 描述 |
|
| 日志级别(DEBUG/INFO/WARNING/ERROR) |
|
| 默认 antiSMASH 服务器类型 |
配置示例
# 设置日志级别为 DEBUG
export ANTISMASH_MCP_LOG_LEVEL=DEBUG
# 使用真菌版本的 antiSMASH
export ANTISMASH_MCP_SERVER=fungi使用方法
直接运行
# 使用默认配置运行
python -m antismash_mcp.server
# 或者使用安装的命令行工具
antismash-mcp在 MCP 客户端中配置
Claude Desktop 配置
在 Claude Desktop 的配置文件中添加以下内容:
macOS/Linux: ~/.config/claude/claude_desktop_config.json
Windows: %APPDATA%\Claude\claude_desktop_config.json
{
"mcpServers": {
"antismash": {
"command": "python",
"args": ["-m", "antismash_mcp.server"],
"env": {
"ANTISMASH_MCP_LOG_LEVEL": "INFO"
}
}
}
}如果使用了虚拟环境,请指定完整路径:
{
"mcpServers": {
"antismash": {
"command": "/path/to/venv/bin/python",
"args": ["-m", "antismash_mcp.server"]
}
}
}Cursor / VS Code 配置
在 MCP 配置文件中添加:
{
"servers": {
"antismash": {
"command": "python",
"args": ["-m", "antismash_mcp.server"]
}
}
}可用工具
本 MCP 服务器提供以下 10 个工具:
1. submit_sequence
提交序列文件到 antiSMASH 进行分析。
参数:
参数名 | 类型 | 必填 | 默认值 | 描述 |
| string | 否* | - | 序列文件路径(GenBank/EMBL/FASTA 格式) |
| string | 否 | "" | 电子邮件地址(可选,用于通知) |
| string | 否 |
| 检测严格度(strict/relaxed/loose) |
| array | 否 | 见说明 | 额外功能列表 |
| string | 否 | - | GFF3 注释文件路径 |
| string | 否 | - | antiSMASH 注释旁加载 JSON 文件路径 |
| string | 否 |
| 服务器类型(bacteria/fungi/plant) |
*
sequence_file和ncbi_accession至少需要提供一个。
示例返回:
{
"job_id": "ABC12345",
"message": "Job submitted successfully. Job ID: ABC12345",
"results_url": "https://antismash.secondarymetabolites.org/ABC12345",
"server_type": "bacteria"
}2. submit_ncbi
使用 NCBI 登录号提交分析任务。
参数:
参数名 | 类型 | 必填 | 默认值 | 描述 |
| string | 是 | - | NCBI 登录号(如 NC_003888.3) |
| string | 否 | "" | 电子邮件地址 |
| string | 否 |
| 检测严格度 |
| array | 否 | - | 额外功能列表 |
| string | 否 |
| 服务器类型 |
3. check_job_status
检查任务状态。
参数:
参数名 | 类型 | 必填 | 默认值 | 描述 |
| string | 是 | - | antiSMASH 任务 ID |
| string | 否 |
| 服务器类型 |
返回状态值:
状态 | 描述 |
| 任务已排队,等待处理 |
| 任务正在运行 |
| 任务已完成,结果可用 |
| 任务遇到错误 |
| 任务状态未知/等待中 |
4. wait_for_job
等待任务完成(阻塞操作)。
参数:
参数名 | 类型 | 必填 | 默认值 | 描述 |
| string | 是 | - | antiSMASH 任务 ID |
| integer | 否 | 30 | 状态检查间隔(秒) |
| integer | 否 | 3600 | 最大等待时间(秒) |
| string | 否 |
| 服务器类型 |
5. get_job_results
获取已完成任务的分析结果摘要。
参数:
参数名 | 类型 | 必填 | 默认值 | 描述 |
| string | 是 | - | antiSMASH 任务 ID |
| string | 否 |
| 服务器类型 |
返回内容:
检测到的区域/基因簇列表
每个区域的类型、起始和终止位置
统计摘要信息
6. get_job_details
获取任务的详细信息(包括运行中和已完成的任务)。
参数:
参数名 | 类型 | 必填 | 默认值 | 描述 |
| string | 是 | - | antiSMASH 任务 ID |
| string | 否 |
| 服务器类型 |
7. download_results
下载结果压缩包(ZIP 文件)到本地路径。
参数:
参数名 | 类型 | 必填 | 默认值 | 描述 |
| string | 是 | - | antiSMASH 任务 ID |
| string | 是 | - | 保存路径(文件或目录) |
| string | 否 |
| 服务器类型 |
8. get_server_status
获取 antiSMASH 服务器状态。
参数:
参数名 | 类型 | 必填 | 默认值 | 描述 |
| string | 否 |
| 服务器类型 |
返回内容:
服务器状态(working/maintenance)
当前运行中的任务数
排队中的任务数
已处理的总任务数
9. list_extra_features
列出所有可用的额外功能及其描述。
参数: 无
10. get_example_url
获取 antiSMASH 示例输出页面的 URL。
参数:
参数名 | 类型 | 必填 | 默认值 | 描述 |
| string | 否 |
| 服务器类型 |
MCP客户端配置
完整配置示例
{
"mcpServers": {
"antismash-bacteria": {
"command": "python",
"args": ["-m", "antismash_mcp.server"],
"env": {
"ANTISMASH_MCP_SERVER": "bacteria",
"ANTISMASH_MCP_LOG_LEVEL": "INFO"
}
},
"antismash-fungi": {
"command": "python",
"args": ["-m", "antismash_mcp.server"],
"env": {
"ANTISMASH_MCP_SERVER": "fungi"
}
}
}
}使用场景示例
以下是在 AI 助手中使用本 MCP 服务器的典型对话示例:
场景 1:提交并分析基因组序列
用户:帮我提交 NC_003888.3 到 antiSMASH 进行分析
AI:好的,我正在使用 submit_ncbi 工具提交 NCBI 登录号 NC_003888.3 到 antiSMASH...
[调用 submit_ncbi 工具]
任务已提交!任务 ID: ABC12345
你可以在以下网址查看结果: https://antismash.secondarymetabolites.org/ABC12345
用户:检查一下任务状态
AI:[调用 check_job_status 工具]
任务目前正在运行中...场景 2:获取分析结果
用户:任务完成了吗?帮我看看结果
AI:[调用 check_job_status 工具]
任务已完成!让我获取分析结果...
[调用 get_job_results 工具]
antiSMASH 分析结果:
- 检测到 12 个生物合成区域
- 基因簇类型:NRPS, PKS Type I, Terpene, Siderophore 等
- 详见结果页面: https://antismash.secondarymetabolites.org/ABC12345场景 3:下载结果
用户:把结果下载到 /home/user/results 目录
AI:[调用 download_results 工具]
结果已成功下载到 /home/user/results/ABC12345.zip
文件大小: 15.3 MB项目结构
antiSMASH-MCP/
├── src/
│ └── antismash_mcp/
│ ├── __init__.py # 包初始化
│ ├── config.py # 配置模块
│ ├── antismash_client.py # antiSMASH API 客户端
│ └── server.py # MCP 服务器实现
├── tests/
│ ├── __init__.py # 测试包初始化
│ └── test_server.py # 测试文件
├── .gitignore # Git 忽略配置
├── pyproject.toml # 项目配置
├── LICENSE # 许可证
├── README.md # 中文说明(本文件)
└── README_EN.md # 英文说明开发指南
开发环境搭建
# 克隆仓库
git clone https://github.com/ZengZichao/antiSMASH-MCP.git
cd antiSMASH-MCP
# 创建虚拟环境
python -m venv .venv
source .venv/bin/activate # Linux/macOS
# 或 .venv\Scripts\activate # Windows
# 安装开发依赖
pip install -e ".[dev]"代码风格
本项目使用以下工具保持代码质量:
ruff - 代码格式化和 linting
mypy - 类型检查
pytest - 单元测试
# 运行 linting
ruff check src/
# 运行类型检查
mypy src/
# 运行测试
pytest运行测试
# 运行所有测试
pytest
# 运行特定测试文件
pytest tests/test_server.py
# 显示详细输出
pytest -v添加新工具
要添加新的 MCP 工具,需要:
在
server.py的handle_list_tools函数中添加工具定义在
handle_call_tool函数中添加处理逻辑在
antismash_client.py中实现 API 交互逻辑编写对应的测试
常见问题
1. 提交任务时遇到 403 错误
问题:提交序列文件时返回 403 Forbidden 错误。
解决方案:
antiSMASH 服务器有并发任务限制(建议最多 5 个并发任务)
等待之前的任务完成后再提交新任务
使用 NCBI 登录号方式提交(
submit_ncbi工具)检查 antiSMASH 服务器状态(使用
get_server_status工具)
2. 任务运行时间过长
问题:antiSMASH 分析可能需要 10 分钟到数小时不等。
解决方案:
使用
wait_for_job工具时设置合理的max_wait参数提供电子邮箱地址,antiSMASH 会在任务完成时发送通知
定期使用
check_job_status工具检查状态
3. 无法获取详细结果
问题:get_job_results 返回的结果信息不完整。
解决方案:
确保任务已完成(状态为
done)使用
get_job_details获取更详细的信息直接访问结果页面 URL 获取完整 HTML 报告
使用
download_results下载完整的 ZIP 压缩包
4. 连接超时
问题:连接 antiSMASH 服务器超时。
解决方案:
检查网络连接
antiSMASH 服务器可能因高负载而响应缓慢
在配置中增加超时时间
5. Windows 路径问题
问题:在 Windows 上使用反斜杠路径导致错误。
解决方案:
使用正斜杠
/作为路径分隔符或使用原始字符串(raw string)指定路径
许可证
本项目使用 MIT 许可证。
致谢
antiSMASH 团队提供的优秀生物信息学工具
Model Context Protocol 提供的协议规范
引用
如果您在研究中使用了基于本工具的 antiSMASH 分析结果,请引用 antiSMASH:
Blin, K., Shaw, S., Augustijn, H.E. et al. antiSMASH 7.0: new and improved predictions for detection, regulation, chemical structures and visualisation. Nucleic Acids Res. 51, W46–W50 (2023).
Available Tools
10 toolscheck_job_statusB
Check the status of a submitted antiSMASH job. Returns the current status (queued/running/done/error/pending) and a URL to the results page.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | The antiSMASH job ID to check. | |
| server_type | No | Type of antiSMASH server the job was submitted to. | bacteria |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden, and it does disclose the return contract (status values plus a results URL) and implicitly that this is a non-destructive read. It omits whether polling is rate-limited, whether it is safe to call repeatedly, and how it differs behaviorally from the blocking wait_for_job, so the disclosure is only partial.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with the action front-loaded and the return value second — no filler. Slightly more could be trimmed, but it earns its place and is well ordered.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-parameter read tool with no output schema, the description supplies the necessary return-value detail (statuses and results URL). It nonetheless leaves the sibling-routing question unresolved, which matters here because wait_for_job and get_job_details overlap semantically.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so job_id and the server_type enum are fully documented in the schema itself, establishing the baseline of 3. The description adds no further parameter meaning (e.g., why server_type must match the original submission endpoint), which is acceptable given the schema already does the work.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Check the status of a submitted antiSMASH job') and even enumerates the possible status values, so the purpose is unambiguous. However, it never differentiates itself from close siblings like wait_for_job, get_job_details, or get_job_results, leaving the agent to infer the boundary.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is only implied by the phrase 'submitted job' — the agent can infer this is a polling call for a job it already created. There is no explicit when-to-use guidance and no mention of the obvious alternatives (wait_for_job for blocking, get_job_results for finished output), which is a real gap given the crowded sibling set.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
download_resultsA
Download the antiSMASH results archive (ZIP file) for a completed job and save it to a local path. The ZIP file contains all analysis results including GenBank files, HTML reports, and JSON data.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | The antiSMASH job ID. | |
| output_path | Yes | Path to save the ZIP file. If a directory is provided, the file will be named {job_id}.zip. | |
| server_type | No | Type of antiSMASH server the job was submitted to. | bacteria |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description carries the full burden. It helpfully discloses the archive contents (GenBank files, HTML reports, JSON data) and the completed-job prerequisite, but says nothing about authentication, overwrite behavior, size/rate limits, or failure modes for an invalid job_id.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the action and scope; the second sentence earns its place by telling the agent what the downloaded artifact actually contains.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema, the description correctly explains the return artifact (a ZIP of analysis results), and the required params are schema-covered. Minor gaps remain around preconditions and error handling, but an agent has enough to call it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all three parameters are already documented. The description reinforces that output_path is a local save location and what the payload contains, but adds no syntax or format detail beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Names a specific verb (Download), resource (antiSMASH results archive ZIP), and scope (completed job), and the phrase 'save it to a local path' distinguishes it from siblings like get_job_results that presumably return data inline. It stops short of explicitly naming which sibling to use instead, but the action is unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies a precondition ('for a completed job') and hints that check_job_status/wait_for_job should precede it, but never states when to prefer this over get_job_results or get_job_details, nor what to do if the job is still running.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_example_urlA
Get the URL for the example antiSMASH output, which can be used to explore the format and content of antiSMASH results without submitting a job.
| Name | Required | Description | Default |
|---|---|---|---|
| server_type | No | Type of antiSMASH server. | bacteria |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It usefully discloses that calling it does not submit a job, but says nothing about permission requirements, whether the returned URL is static or expires, or whether the resource is hosted externally.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
One sentence, front-loaded with the action and resource, with the purpose clause earning its place by justifying why the tool exists. No filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-required-parameter read tool with full schema coverage and no output schema, the description covers what the tool returns (a URL) and why to use it. Minor gaps around URL lifetime/access are not critical for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single parameter (server_type) has a documented enum and default, so the schema fully specifies the input. The description adds no meaning about server_type or how the choice affects the returned sample, matching the baseline of 3.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the URL for the example antiSMASH output') and adds scope that separates it from the job-oriented siblings: it exists to explore format/content 'without submitting a job.' An agent can tell immediately this is a static sample-fetch, not a computation request.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear use case ('explore the format and content of antiSMASH results without submitting a job'), which implicitly routes the agent away from submit_sequence/submit_ncbi. It does not explicitly name an alternative tool or state when-not to use it, so it stops short of full routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_job_detailsA
Get detailed information about an antiSMASH job, including detected regions, cluster types, download links, and summary statistics. Works for both running and completed jobs.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | The antiSMASH job ID. | |
| server_type | No | Type of antiSMASH server the job was submitted to. | bacteria |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It does disclose one real trait — that the call is valid for in-progress as well as finished jobs, unlike a status-only or results-only endpoint. It says nothing about permissions, behavior on an unknown job_id, or whether the payload is truncated for large jobs, leaving meaningful gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, no boilerplate, and the payload contents are front-loaded before the lifecycle caveat. Every clause carries information an agent can act on.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, and the description compensates by naming the return contents (regions, cluster types, download links, statistics) and covering the running/completed distinction. It is close to complete for a two-parameter read tool, with only error and permission behavior left unstated.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, with job_id documented and server_type carrying a three-value enum plus a default, so the schema already does the heavy lifting. The description adds no format, validation, or lookup guidance beyond that, so the baseline of 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get detailed information about an antiSMASH job') and enumerates the content surfaced: detected regions, cluster types, download links, summary statistics. The added 'Works for both running and completed jobs' meaningfully separates it from the status/lifecycle siblings, though it never names check_job_status or get_job_results to make the boundary explicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Works for both running and completed jobs' implies when the tool is applicable across the job lifecycle, which is useful context. However, no sibling is named and there is no when-not guidance, so an agent must infer on its own how this differs from check_job_status, get_job_results, or download_results.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_job_resultsB
Get the results of a completed antiSMASH job. Returns a summary of detected biosynthetic gene clusters, regions, and cluster types. The job should be completed before calling this tool.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | The antiSMASH job ID. | |
| server_type | No | Type of antiSMASH server the job was submitted to. | bacteria |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral burden. It discloses the return content and the completion precondition, which is genuinely helpful, but says nothing about what happens if the job is not finished, whether the call is safe to repeat, or any size/rate constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no filler; purpose leads, return content follows, precondition closes. It is appropriately sized for a two-parameter read tool, with only minor overlap between the first and second sentences.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With no output schema and no annotations, the description partially compensates by summarizing the return payload and the precondition. However, it omits the not-yet-complete/error case and the relationship to download_results, leaving real gaps for a results-retrieval tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%: job_id and the server_type enum (bacteria/fungi/plant) are already fully documented in the schema. The description adds no format, default, or matching guidance beyond that, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the results of a completed antiSMASH job') and even enumerates what comes back (gene clusters, regions, cluster types). It is clear and concrete, but it never distinguishes itself from siblings like get_job_details or download_results, so an agent must guess which of the three returns what.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives one precondition: 'The job should be completed before calling this tool.' That is useful implied workflow guidance, but it does not name the sibling that verifies completion (check_job_status / wait_for_job) or explain when to prefer this over download_results for raw output.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_server_statusA
Get the current status of the antiSMASH server, including the number of running jobs, queued jobs, and total jobs processed. Useful to check if the server is available before submitting new jobs.
| Name | Required | Description | Default |
|---|---|---|---|
| server_type | No | Type of antiSMASH server to check. | bacteria |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure. It does disclose the return payload (running/queued/processed job counts) and implies a read-only operation via 'Get,' but says nothing about permissions, rate limits, latency, or whether the call fails when the server is down. Useful but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences: the first front-loads what the tool returns, the second front-loads when to reach for it. No filler, no repetition of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple, parameterless-in-practice status read with no annotations and no output schema, the description covers the essentials by naming the returned job counts and the motivating use case. It stops short of describing failure/down behavior, but nothing blocks correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100% and the single server_type parameter is fully documented in the schema with an enum and default, so the description does not need to compensate. It adds no extra semantics beyond what the schema already provides, making the baseline 3 correct.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Get the current status of the antiSMASH server') and enumerates the returned metrics (running, queued, total jobs), which makes the tool's scope concrete. It does not explicitly name or contrast with any sibling like check_job_status or get_job_details, so it stops short of full differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives a clear usage context: 'Useful to check if the server is available before submitting new jobs,' which tells the agent the pre-flight scenario that selects this tool. It provides no explicit exclusions or alternative-selection rules, so it lands at clear-context-without-exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_extra_featuresA
List all available extra features for antiSMASH analysis with their descriptions. These features can be specified when submitting a job.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden. 'List' and the absence of parameters imply a harmless read-only operation with no side effects, and it discloses that feature descriptions are returned. It does not state the response shape, stability of the list, or whether the feature names are exact strings to pass to submit tools.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short sentences, front-loaded with the action and resource, with the second sentence adding genuine usage context rather than filler. No redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter, read-only listing tool this is nearly sufficient, but with no output schema the description should say more about what comes back — e.g., whether it returns feature identifiers that match the values accepted by submit_sequence/submit_ncbi. That link is the whole reason an agent would call this before submitting.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool takes zero parameters, so there is nothing to document and the baseline is 4. The description correctly does not invent or describe any inputs.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb+resource: listing available extra features for antiSMASH analysis, including that descriptions are returned. It is clearly distinct from the job-management siblings (submit_sequence, check_job_status, etc.), though it never names a sibling to differentiate itself explicitly.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'These features can be specified when submitting a job' implies this is a discovery/discovery-before-submit tool, which is a useful hint. However, there is no explicit when-to-use statement, no ordering guidance, and no named alternative, so usage remains inferred.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_ncbiA
Submit an NCBI accession number to antiSMASH for secondary metabolite biosynthetic gene cluster analysis. antiSMASH will retrieve the sequence from NCBI automatically. Returns a job ID that can be used to check status and retrieve results.
| Name | Required | Description | Default |
|---|---|---|---|
| No | Optional email address for notifications. | ||
| strictness | No | Detection strictness level. | relaxed |
| server_type | No | Type of antiSMASH server to use. | bacteria |
| extra_features | No | Extra features to enable (see submit_sequence). | |
| ncbi_accession | Yes | NCBI accession number of the desired sequence (e.g., NC_003888.3, GCF_000005845.2). |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full behavioral burden. It usefully discloses that antiSMASH fetches the sequence automatically and that the call is asynchronous (returns a job ID for later status/results), but it omits submission-side traits such as rate limits, external dependency handling, or whether email notification changes behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: purpose, automatic retrieval behavior, and async return contract. It is front-loaded and has no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 5-parameter async submission tool with no output schema and no annotations, the description is largely complete: it explains the automatic sequence retrieval and the job-ID return that links to the check/retrieve siblings. It would be stronger if it named the polling/workflow siblings or noted external-service caveats.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so all five parameters are already documented in the schema, including enums and defaults. The description adds no syntax, format, or constraint guidance beyond 'NCBI accession number,' so baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb (submit), resource (NCBI accession number), target service (antiSMASH), and domain (secondary metabolite BGC analysis). It is clear what the tool does, though it never explicitly contrasts itself with the sibling submit_sequence, which is the obvious alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Usage is implied by the framing: use this when you have an NCBI accession rather than a raw sequence, and the last sentence gestures at the downstream workflow (check status, retrieve results). However, it gives no explicit when-to-use rule, no exclusion, and never names the alternative submit_sequence.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
submit_sequenceB
Submit a nucleotide sequence file to antiSMASH for secondary metabolite biosynthetic gene cluster analysis. The sequence file should be in GenBank, EMBL, or FASTA format. Returns a job ID that can be used to check status and retrieve results.
| Name | Required | Description | Default |
|---|---|---|---|
| No | Optional email address for notifications. | ||
| gff3_file | No | Optional path to a GFF3 feature annotation file. | |
| strictness | No | Detection strictness level. 'strict': Detects well-defined clusters containing all required parts. 'relaxed': Detects partial clusters missing one or more functional parts. 'loose': Loose criteria, may include more false positives. | relaxed |
| server_type | No | Type of antiSMASH server to use. | bacteria |
| sequence_file | No | Path to the sequence file (GenBank/EMBL/FASTA format). Required if ncbi_accession is not provided. | |
| sideload_file | No | Optional path to an antiSMASH annotations sideload JSON file. | |
| extra_features | No | Extra features to enable. Options: knownclusterblast, clusterblast, subclusterblast, mibig, active_site_finder, rrefinder, pfam2go, tigrfam, tfbs, ncbi_context. If not provided, defaults to knownclusterblast, clusterblast, subclusterblast, mibig. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations present, the description carries the full disclosure burden. It does add real value by explaining the async contract ('Returns a job ID that can be used to check status and retrieve results'), which tells the agent this is a long-running job requiring polling via check_job_status/wait_for_job. However, it says nothing about execution time, antiSMASH version, network/rate-limit behavior, or what happens on failure.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences, front-loaded with the action and resource, then the input constraint, then the return contract. No filler or restatement of the name/title.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
No output schema exists, but the description compensates by stating that a job ID is returned, which is the key thing an agent needs to chain into check_job_status. Missing only secondary operational detail (expected runtime, failure modes) for a job-submission tool with a fully covered schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so every parameter (email, gff3_file, strictness, server_type, sequence_file, sideload_file, extra_features) is already documented in the schema, including enum semantics. The description's file-format mention duplicates the sequence_file schema text and adds no new parameter-level meaning, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource ('Submit a nucleotide sequence file to antiSMASH') and names the analysis domain (secondary metabolite biosynthetic gene clusters). It is clearly distinguishable from list_extra_features, check_job_status, or download_results, but it never names submit_ncbi, the closest sibling, so the file-vs-accession distinction is left implicit.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No explicit when-to-use or when-not guidance. Given a sibling submit_ncbi exists, the agent gets no statement like 'use this when you have a local file; use submit_ncbi when you have an accession.' The format note (GenBank/EMBL/FASTA) is a constraint, not routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
wait_for_jobA
Wait for an antiSMASH job to complete by polling its status. This is a blocking operation that checks the job status at regular intervals until the job is done or an error occurs. Use with caution as antiSMASH analysis can take 10+ minutes.
| Name | Required | Description | Default |
|---|---|---|---|
| job_id | Yes | The antiSMASH job ID to wait for. | |
| max_wait | No | Maximum seconds to wait before giving up. | |
| server_type | No | Type of antiSMASH server the job was submitted to. | bacteria |
| poll_interval | No | Seconds between status checks. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the full burden and does well: it discloses that the call is blocking, polls at regular intervals, terminates on completion or error, and can run 10+ minutes. It omits what happens on hitting max_wait (timeout behavior) and permissions, which keeps it short of a 5.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: purpose first, blocking/mechanism second, cost warning third. No filler or repetition of schema details.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
There is no output schema, so the description should say what the tool returns on success (final job status only, or results), and it does not. The behavioral narrative is adequate for a single blocking call, but the return contract is left undefined.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already documents job_id, max_wait, server_type, and poll_interval with defaults and an enum. The description only adds the vague notion of 'regular intervals' for polling, which the schema covers better, so the baseline 3 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Wait for an antiSMASH job to complete by polling its status'), which is clear and actionable. However, it does not distinguish itself from the sibling check_job_status, which by name performs an analogous status check, so the agent must infer the blocking vs. non-blocking difference.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use with caution as antiSMASH analysis can take 10+ minutes' gives implicit guidance about when the blocking cost is justified, but no alternative (e.g., check_job_status for non-blocking polling) is named. Usage is implied rather than explicitly routed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
10 tool updates
v0.1.0- First observed
check_job_status - First observed
download_results - First observed
get_example_url - First observed
get_job_details - First observed
get_job_results - First observed
get_server_status - First observed
list_extra_features - First observed
submit_ncbi - First observed
submit_sequence - First observed
wait_for_job
TDQS
Scored across 10 tools
Most tools have clearly distinct purposes (submission vs. status vs. download). However, get_job_results and get_job_details overlap noticeably, and check_job_status vs. wait_for_job require reading descriptions to distinguish polling from blocking behavior.
Strong, predictable verb_noun snake_case pattern (submit_*, get_*, check_*, download_*, list_*, wait_*). Minor deviation: submit_ncbi does not mirror submit_sequence (e.g., submit_ncbi_accession), creating slight asymmetry.
10 tools is well-scoped for a job-based analysis server, covering submission, monitoring, retrieval, and server info without redundancy or bloat.
Core lifecycle is covered: two submission paths, status checks, blocking wait, results, details, download, server health, and an example URL. Missing a cancel/delete job or list-jobs operation, but these are minor gaps agents can work around.
Maintenance
Related MCP Connectors
Run protein folding, docking, design and sequence analysis tools, and read their results.
Connect AI clients to biomedical data and tools.
Protein analysis: ESM-2/ESMC embeddings, mutation scoring, landscape scans, ESMFold structure.
Hosted DNA/RNA/protein tools: primers, oligos, PCR, cloning, CRISPR, alignment, batch & pipelines.
Related MCP Servers
AlicenseNot gradedqualityDmaintenanceEnables AI assistants to perform NCBI BLAST sequence similarity searches through natural language, supporting nucleotide and protein searches, custom database creation, and multiple output formats.10MIT
Bio-MCP FastQC Serverofficial
AlicenseNot gradedqualityDmaintenanceEnables AI assistants to perform quality control analysis on high-throughput sequencing data using FastQC and MultiQC. It supports single-file and batch processing of FASTQ/FASTA files and generates comprehensive, interactive summary reports.MIT- AlicenseAqualityDmaintenanceEnables AI assistants to execute computational chemistry and drug discovery workflows using Schrödinger Suites 2026, including protein preparation, docking, ADMET, QM/MM calculations, and job management.281MIT
- AlicenseNot gradedqualityDmaintenanceSupports querying and downloading MGnify genome data and performing KEGG functional annotation and module completeness analysis for microbial genomes.1MIT