🚀 语义学者MCP服务器
语义学者MCP服务器是一个模型上下文协议(MCP)服务器,它提供对语义学者学术图谱API的访问。借助该服务器,你可以搜索学术论文、作者,还能获取有关引用和参考文献的详细信息。
🚀 快速开始
此MCP服务器能让你轻松访问语义学者学术图谱API,搜索学术资源并获取详细信息。你可按以下步骤进行安装和配置。
✨ 主要特性
- 论文搜索:使用各种过滤器搜索学术论文。
- 论文详情:获取特定论文的详细信息。
- 批量论文检索:一次性获取多篇论文的信息。
- 作者搜索:按姓名查找作者。
- 作者详情:获取作者的详细信息及其发表的论文。
- 引用分析:获取引用特定论文的其他论文。
- 参考文献分析:获取特定论文引用的其他论文。
- 引用上下文:获取一篇论文引用另一篇论文的上下文。
- 文本片段搜索:在学术论文中搜索文本片段。
- PDF下载:以合适的文件名和元数据下载开放获取的PDF文件。
- PDF可用性检查:在下载前检查PDF文件是否可用。
- 智能命名:以论文标题和年份作为文件名保存PDF文件。
- 元数据支持:在PDF文件属性中嵌入标题、作者和年份信息。
📦 安装指南
- 克隆此仓库:
git clone <repository-url>
cd SemanticScholarMCP
- 安装依赖项:
pip install -r requirements.txt
- (可选但推荐)设置你的语义学者API密钥:
export SEMANTIC_SCHOLAR_API_KEY="your-api-key-here"
注意:API密钥是可选的。即使不设置,服务器也能正常工作,但你将共享公共速率限制(所有未认证用户每秒最多1000个请求)。
- (可选)安装PDF元数据支持:
pip install -e ".[metadata]"
📚 详细文档
开发
设置开发环境
pip install -e ".[test,dev]"
运行测试
make test
make test-unit
export SEMANTIC_SCHOLAR_API_KEY="your-api-key"
make test-integration
make test-performance
代码质量
make lint
make format
配置
将此服务器添加到你的MCP客户端配置中:
{
"mcpServers": {
"SemanticScholarMCP": {
"command": "/Users/your-username/Desktop/SemanticScholarMCP/venv/bin/python",
"args": ["/Users/your-username/Desktop/SemanticScholarMCP/src/semantic_scholar_mcp/server.py"],
"env": {
"SEMANTIC_SCHOLAR_API_KEY": "your-actual-api-key-here"
}
}
}
}
无API密钥的配置(共享公共速率限制):
{
"mcpServers": {
"SemanticScholarMCP": {
"command": "/Users/your-username/Desktop/SemanticScholarMCP/venv/bin/python",
"args": ["/Users/your-username/Desktop/SemanticScholarMCP/src/semantic_scholar_mcp/server.py"]
}
}
}
重要提示:
- 请将
your-username
替换为你实际的用户名。
- API密钥是可选的,但推荐使用以获得更高的速率限制。
- 无API密钥:所有用户共享公共速率限制(每秒1000个请求)。
- 使用免费API密钥:你将拥有更高的专属速率限制。
可用工具
论文工具
search_papers
使用各种过滤器搜索学术论文。
参数:
query
(必需):搜索查询字符串。
limit
:最大结果数(默认:10,最大:100)。
offset
:跳过的结果数(默认:0)。
fields
:要返回的字段列表,以逗号分隔。
publication_types
:按出版类型过滤。
open_access_pdf
:过滤具有开放获取PDF的论文。
min_citation_count
:最小引用次数。
year
:出版年份或年份范围(例如,"2020 - 2023")。
venue
:出版场所。
get_paper
获取特定论文的详细信息。
参数:
paper_id
(必需):论文ID(语义学者ID、DOI、arXiv ID等)。
fields
:要返回的字段列表,以逗号分隔。
get_paper_batch
在单个请求中获取多篇论文的信息。
参数:
paper_ids
(必需):论文ID列表,以逗号分隔。
fields
:要返回的字段列表,以逗号分隔。
作者工具
search_authors
按姓名搜索作者。
参数:
query
(必需):作者姓名或搜索查询。
limit
:最大结果数(默认:10,最大:1000)。
offset
:跳过的结果数(默认:0)。
fields
:要返回的字段列表,以逗号分隔。
get_author
获取特定作者的详细信息。
参数:
author_id
(必需):作者ID。
fields
:要返回的字段列表,以逗号分隔。
引用和参考文献工具
get_paper_citations
获取引用特定论文的其他论文。
参数:
paper_id
(必需):要获取引用的论文ID。
limit
:最大结果数(默认:10,最大:1000)。
offset
:跳过的结果数(默认:0)。
fields
:要返回的字段列表,以逗号分隔。
get_paper_references
获取特定论文引用的其他论文。
参数:
paper_id
(必需):要获取参考文献的论文ID。
limit
:最大结果数(默认:10,最大:1000)。
offset
:跳过的结果数(默认:0)。
fields
:要返回的字段列表,以逗号分隔。
get_citation_context
获取一篇论文引用另一篇论文的上下文。
参数:
paper_id
(必需):被引用论文的ID。
citing_paper_id
(必需):引用论文的ID。
文本搜索工具
search_snippets
在学术论文中搜索文本片段。
参数:
query
(必需):文本片段搜索查询。
limit
:最大结果数(默认:10,最大:100)。
offset
:跳过的结果数(默认:0)。
PDF工具
get_paper_pdf_info
检查论文的PDF可用性。
参数:
paper_id
(必需):要检查PDF可用性的论文ID。
download_paper_pdf
如果论文的PDF可用,则下载该PDF,使用论文标题作为文件名并设置元数据。
参数:
paper_id
(必需):要下载PDF的论文ID。
download_path
:保存PDF的目录(默认:~/Downloads/semantic_scholar_papers)。
特性:
- 使用论文标题作为文件名(例如,"Machine Learning in Healthcare (2023).pdf")。
- 在PDF元数据中设置标题、作者和出版年份。
- 自动处理重复文件名。
- 创建有组织的文件夹结构。
💻 使用示例
搜索机器学习相关论文
search_papers("machine learning", limit=5, year="2023")
获取特定论文的详细信息
get_paper("10.1038/nature14539")
查找引用特定论文的其他论文
get_paper_citations("10.1038/nature14539", limit=10)
搜索作者
search_authors("Geoffrey Hinton")
获取引用上下文
get_citation_context("paper-id-1", "paper-id-2")
检查PDF可用性
get_paper_pdf_info("10.1038/nature14539")
下载论文PDF
download_paper_pdf("10.1038/nature14539")
这将保存PDF文件,文件名类似:
"Deep learning (2015).pdf"
文件中嵌入了包括标题、作者(LeCun, Y., Bengio, Y., Hinton, G.)和年份(2015)的元数据。
API速率限制
语义学者API有以下速率限制:
- 无API密钥:所有未认证用户共享每秒1000个请求的速率限制(在高流量时可能会受到限制)。
- 使用免费API密钥:你将拥有更高的专属速率限制。
为确保性能稳定,建议获取免费API密钥。
🔧 技术细节
故障排除
速率限制错误
如果你看到以下错误:
Error: Rate limit exceeded. Please wait a moment and try again, or get an API key for higher limits.
这意味着你已达到共享公共速率限制,或者由于高流量API受到限制。
即时解决方案:
-
获取免费API密钥(推荐):
- 访问 https://www.semanticscholar.org/product/api 。
- 注册免费账户。
- 获取你的API密钥。
- 将其添加到你的Claude桌面配置中:
"env": {
"SEMANTIC_SCHOLAR_API_KEY": "your-actual-api-key-here"
}
-
等待并重试:共享公共速率限制可能只是暂时超出。
-
使用较小的结果限制:减少查询中的 limit
参数。
-
分散请求:避免连续快速发出多个请求。
配置问题
- 确保配置中的Python路径指向正确的虚拟环境。
- 验证服务器脚本路径是否正确。
- 检查虚拟环境中是否安装了所有依赖项。
测试连接
你可以通过让Claude以较小的限制搜索单篇论文来测试服务器是否正常工作:
search_papers("machine learning", limit=1)
错误处理
所有工具都包含全面的错误处理,如果请求失败或API返回错误,将返回详细的错误消息。
📄 许可证
本项目采用MIT许可证 - 详情请参阅 LICENSE 文件。
🤝 贡献
欢迎贡献代码!请随时提交拉取请求。