学术论文搜索服务

提供对Semantic Scholar学术图谱API的访问,支持搜索学术论文、作者信息、引用分析和PDF下载等功能。

  • by fegizii
  • Python
  • 本地部署
  • 3 星标
  • 更新于
在 GitHub 查看 fegizii/semanticscholarmcp

使用说明

语义学者MCP服务器

一种模型上下文协议(MCP)服务器,提供对语义学者学术图API的访问。此服务器允许您搜索学术论文、作者,并获取有关引用和参考文献的详细信息。

特性

  • 论文搜索:使用各种过滤器搜索学术论文
  • 纸张详细信息:获取特定论文的详细信息
  • 批量纸张检索:同时获取多篇论文的信息
  • 作者搜索:按姓名查找作者
  • 作者详细信息:获取详细的作者信息和他们的论文
  • 引文分析:获取引用特定论文的论文
  • 参考分析:获取特定论文引用的论文
  • 引文内容:了解一篇论文引用另一篇论文的背景
  • 文本片段:在学术论文中搜索文本片段
  • PDF下载:下载具有正确文件名和元数据的开放获取PDF
  • PDF可用性:下载前检查PDF是否可用
  • 智能命名:PDF文件以纸张标题和年份作为文件名保存
  • 元数据支持:在PDF文件属性中嵌入标题、作者和年份

安装

  1. 克隆此存储库:
git clone <repository-url>
cd SemanticScholarMCP
  1. 安装依赖项:
pip install -r requirements.txt
  1. (可选但推荐)设置语义学者API密钥:
export SEMANTIC_SCHOLAR_API_KEY="your-api-key-here"

备注:API密钥是可选的。服务器可以在没有它的情况下工作,但您将共享公共速率限制(所有未经身份验证的用户每秒1000个请求)。

  1. (可选)安装PDF元数据支持:
pip install -e ".[metadata]"

发展

设置开发环境

# Install with development dependencies
pip install -e ".[test,dev]"

运行测试

# Run all tests
make test

# Run only unit tests (fast, no API calls)
make test-unit

# Run integration tests (requires API key)
export SEMANTIC_SCHOLAR_API_KEY="your-api-key"
make test-integration

# Run performance tests
make test-performance

代码质量

# Run linting
make lint

# Format code
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(如果可用),使用论文标题作为文件名并设置元数据。

参数:

  • paper_id (必填):下载PDF的纸张ID
  • download_path:保存PDF的目录(默认:~/Downloads/semantic_scholar_passes)

特征:

  • 使用论文标题作为文件名(例如,“医疗保健中的机器学习(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由于大量使用而被节流。

即时解决方案:

  1. 获取免费的API密钥 (推荐):

    • 访问https://www.semanticscholar.org/product/api
    • 注册一个免费帐户
    • 获取API密钥
    • 将其添加到您的Claude Desktop配置中:
    "env": {
      "SEMANTIC_SCHOLAR_API_KEY": "your-actual-api-key-here"
    }
    
    • 重新启动克劳德桌面
  2. 等待并重试:可能暂时超过共享公共费率限制

  3. 使用较小的结果限制:减少 limit 查询中的参数

  4. 间隔请求:避免快速连续地提出许多请求

配置问题

  • 确保配置中的Python路径指向正确的虚拟环境
  • 验证服务器脚本路径是否正确
  • 检查虚拟环境中是否安装了所有依赖项

测试连接

您可以通过让Claude搜索一篇限制较小的论文来测试服务器是否正常工作:

search_papers("machine learning", limit=1)

错误处理

所有工具都包括全面的错误处理,如果请求失败或API返回错误,将返回描述性错误消息。

许可证

此项目根据MIT许可证获得许可-有关详细信息,请参阅许可证文件。

贡献

欢迎投稿!请随时提交拉取请求。