内容
# mcp-pubmed-evidence
用于可靠的PubMed文献检索、BibTeX导出和生物医学研究代理的证据表生成的MCP服务器。
该项目将PubMed暴露为结构化的MCP工具,以便AI助手可以检索具有源URL、PMID/DOI元数据、文章类型和引用就绪输出的生物医学文献,而不是依赖模型内存。
## 状态
早期开发。第一个版本专注于PubMed元数据检索和引用出处。
## 功能
- 使用可选的年份和出版类型过滤器搜索PubMed
- 按查询、条件、干预、状态和结果限制搜索ClinicalTrials.gov
- 报告结果限制元数据,包括请求的限制、有效的限制、返回的计数和截断标志
- 在响应级别总结源出处,以便代理可以查看哪些数据库贡献了结果
- 验证生物医学研究查询并拒绝明显的个人医疗建议请求
- 通过PMID获取PubMed文章的规范化元数据
- 将PubMed记录导出为BibTeX条目
- 为代理工作流程构建紧凑的证据表
- 返回结构化的PubMed字段,如PMID、标题、作者、期刊、年份、DOI、摘要、文章类型和PubMed URL
- 返回结构化的试验字段,如NCT ID、条件、干预、阶段、状态、注册人数、结果、地点、赞助商和链接的出版物引用
## 为什么使用MCP进行生物医学证据
生物医学研究代理需要可靠地访问当前的、源支持的证据。普通的聊天机器人可以根据模型内存进行回答,但可能会错过最近的论文、模糊研究类型或提供弱引用。此MCP服务器为代理提供了一个受控的工具层,用于PubMed检索、ClinicalTrials.gov试验注册检索、结构化元数据、引用导出和证据表生成。
目标不是做出医疗决定。目标是帮助代理检索和组织具有出处、稳定模式和清晰的源URL的生物医学文献。
## 安全范围
此服务器旨在支持生物医学研究、文献发现、引用管理和证据组织。不用于诊断、治疗建议或医疗建议。
工具拒绝明显的个人医疗建议提示,例如要求诊断用户、开处方或决定用户是否应该采取或停止治疗。研究导向的术语如`诊断`、`治疗`和`治疗`在用于文献或试验检索时仍然有效。
## 安装
```powershell
git clone https://github.com/Tianyu-Qu/mcp-pubmed-evidence.git
cd mcp-pubmed-evidence
python -m venv .venv
.\.venv\Scripts\Activate.ps1
pip install -e .[dev]
```
对于macOS/Linux,使用以下命令激活虚拟环境:
```bash
source .venv/bin/activate
```
## MCP 配置
此服务器使用MCP_stdio传输,可以被任何MCP兼容的客户端使用。
通用_stdio配置:
```json
{
"command": "python",
"args": ["-m", "mcp_pubmed_evidence.server"],
"env": {
"PYTHONPATH": "/path/to/mcp-pubmed-evidence/src"
}
}
```
Claude Desktop示例:
```json
{
"mcpServers": {
"pubmed-evidence": {
"command": "python",
"args": ["-m", "mcp_pubmed_evidence.server"],
"env": {
"PYTHONPATH": "/path/to/mcp-pubmed-evidence/src"
}
}
}
}
```
将`/path/to/mcp-pubmed-evidence/src`替换为本地`src`目录的绝对路径。在Windows上,它可能类似于`C:\\path\\to\\mcp-pubmed-evidence\\src`。
如果您将项目安装到与MCP客户端使用的同一个Python环境中,则可以省略`PYTHONPATH`。
如果您的网络需要代理,请在`env`中添加`HTTP_PROXY`和`HTTPS_PROXY`:
```json
"HTTP_PROXY": "http://127.0.0.1:7890",
"HTTPS_PROXY": "http://127.0.0.1:7890"
```
## 本地演示
您可以在没有MCP客户端的情况下测试PubMed检索:
```powershell
python examples/search_pubmed.py "Alzheimer disease machine learning" --max-results 3
```
使用年份过滤器:
```powershell
python examples/search_pubmed.py "Alzheimer disease machine learning" --max-results 5 --year-from 2022 --year-to 2026
```
在没有MCP客户端的情况下搜索ClinicalTrials.gov:
```powershell
python examples/search_trials.py --condition "Alzheimer disease" --intervention "GLP-1" --max-results 5
```
在没有MCP客户端的情况下构建统一的PubMed + ClinicalTrials.gov证据表:
```powershell
python examples/build_biomedical_evidence_table.py --query "Alzheimer disease machine learning" --condition "Alzheimer disease" --max-pubmed-results 2 --max-trial-results 2
```
以JSON格式打印相同的行:
```powershell
python examples/build_biomedical_evidence_table.py --query "Alzheimer disease machine learning" --condition "Alzheimer disease" --max-pubmed-results 2 --max-trial-results 2 --json
```
示例输出可在`examples/sample_search_output.json`、`examples/sample_trial_output.json`和`examples/sample_biomedical_evidence_table.json`中找到。
您还可以通过列出其工具来本地验证MCP_stdio服务器:
```powershell
python examples/mcp_list_tools.py
```
预期工具:
```text
search_pubmed
get_pubmed_article
get_abstract
export_bibtex
build_evidence_table
search_trials
get_trial_summary
map_trial_to_publications
build_biomedical_evidence_table
```
## 演示
使用Cursor作为MCP客户端验证。Cursor连接到`pubmed-evidence`服务器并调用`search_pubmed`工具,查询`Alzheimer disease machine learning`,`max_results=3`。

其他结果截图:


## 工具
### `search_pubmed`
搜索PubMed并返回规范化的文章元数据。
搜索响应包括具有`source_name`、`source_url`、`query_summary`、`requested_max_results`、`effective_max_results`、`max_allowed_results`、`returned_count`、`total_available`(如果可用)和`truncated`的`metadata`。
输入:
- `query`:PubMed搜索查询
- `max_results`:返回的最大文章数,最高50篇
- `year_from`:可选的出版年份下限
- `year_to`:可选的出版年份上限
- `article_types`:可选的出版类型过滤器,例如`Review`或`Randomized Controlled Trial`
### `get_pubmed_article`
通过PMID获取一篇PubMed文章。
### `export_bibtex`
通过PMID获取PubMed文章并导出BibTeX条目。
### `build_evidence_table`
通过PMID获取PubMed文章并返回紧凑的证据表行。
### `search_trials`
搜索ClinicalTrials.gov并返回紧凑的试验记录。
搜索响应包括具有源出处、查询摘要、结果限制和截断信息的`metadata`。
输入:
- `query`:可选的一般试验查询
- `condition`:可选的条件或疾病过滤器
- `intervention`:可选的干预、药物或设备过滤器
- `status`:可选的招募状态过滤器
- `max_results`:返回的最大试验数,最高50个
### `get_trial_summary`
通过NCT ID获取一个ClinicalTrials.gov试验并返回详细的元数据,包括臂、结果、资格、地点、赞助商、合作伙伴、参考和结果参考。
### `map_trial_to_publications`
将一个ClinicalTrials.gov NCT ID映射到链接的PubMed出版物(如果PMID在ClinicalTrials.gov参考中可用)。
### `build_biomedical_evidence_table`
从PubMed文章和ClinicalTrials.gov试验记录中构建一个统一的生物医学证据表。
输入:
- `query`:可选的PubMed查询和可选的试验查询
- `condition`:ClinicalTrials.gov的可选条件或疾病过滤器
- `intervention`:ClinicalTrials.gov的可选干预、药物或设备过滤器
- `max_pubmed_results`:要包含的最大PubMed记录数
- `max_trial_results`:要包含的最大ClinicalTrials.gov记录数
返回`metadata`和集成的证据`rows`。行包括源类型、源ID、标题、日期/年份、研究类型、状态、阶段、条件、干预、结果、DOI、URL和出处。
元数据包括查询摘要、使用的源、源计数、请求的/有效的PubMed和ClinicalTrials.gov结果限制、最大允许限制、返回的行数和请求的限制是否被截断。
## 开发
运行测试:
```powershell
pytest
```
运行linting:
```powershell
ruff check .
```
## 限制
- PubMed和ClinicalTrials.gov的元数据可能不完整;DOI、摘要、作者、期刊、出版日期、结果、地点或链接的PMID可能会缺失。
- 证据表在第一个版本中是面向元数据的,不会提取PICO元素或评估研究质量。
- 结果限制被限制以保持MCP响应可控;当请求超过配置的限制或源报告的记录多于返回的记录时,工具会报告截断元数据。
- 查询验证是一个轻量级的安全防护措施,而不是一个完整的医疗意图分类器。
- 服务器不提供诊断、治疗建议或医疗建议。
- 根据用户的环境,网络访问PubMed可能需要代理。
- 工具输出在用于手稿、临床文档或系统性审查之前应由人工审查。
## 版本说明
在[CHANGELOG.md](CHANGELOG.md)中查看v0.1.0版本说明。
## v0.3.0 开发
下一个里程碑,`v0.3.0 Evidence Table 2.0`,引入了一个统一的生物医学证据行模式,用于组合PubMed文章和ClinicalTrials.gov试验记录。`build_biomedical_evidence_table` MCP工具现在返回具有源出处的集成证据行。
## v0.4.0 开发
`v0.4.0 Evidence Quality & Safety`里程碑为面向代理的生物医学工具添加了防护措施。当前改进添加了明确的结果限制、截断、查询摘要、源出处元数据和轻量级生物医学查询验证,以便MCP客户端可以了解证据的来源、响应是否被限制以及请求是否超出研究支持范围。
## 路线图
- 扩展ClinicalTrials.gov结果字段和示例
- 添加OpenAlex/Crossref DOI解析
- 添加更丰富的证据表提取
- 添加示例MCP客户端配置
- 添加本地PDF库支持