学术论文搜索服务器

一个基于Semantic Scholar API的FastMCP服务器实现,提供对学术论文数据、作者信息和引用网络的全面访问。

  • by zongmin-yu
  • Python
  • 本地部署
  • 166 星标
  • 更新于
在 GitHub 查看 YUZongmin/semantic-scholar-fastmcp-mcp-server

使用说明

语义学者MCP服务器

语义学者API的FastMCP服务器实现,提供对学术论文数据、作者信息和引用网络的全面访问。

正在寻找Claude Code技能? 结账 语义学者技能 --下一代工具包,将此MCP服务器与现成的Claude Code技能捆绑在一起(/expand-references, /trace-citations, /paper-triage)以及Python工作流引擎。

项目结构

该项目已被重构为模块化结构,以提高可维护性:

semantic-scholar-server/
├── semantic_scholar/            # Main package
│   ├── __init__.py             # Package initialization
│   ├── server.py               # Server setup and main functionality
│   ├── mcp.py                  # Centralized FastMCP instance definition
│   ├── config.py               # Configuration classes
│   ├── utils/                  # Utility modules
│   │   ├── __init__.py
│   │   ├── errors.py           # Error handling
│   │   └── http.py             # HTTP client and rate limiting
│   ├── api/                    # API endpoints
│       ├── __init__.py
│       ├── papers.py           # Paper-related endpoints
│       ├── authors.py          # Author-related endpoints
│       └── recommendations.py  # Recommendation endpoints
├── run.py                      # Entry point script

这种结构:

  • 将关注点划分为逻辑模块
  • 使代码库更易于理解和维护
  • 允许更好的测试和未来的扩展
  • 将相关功能分组在一起
  • 集中FastMCP实例以避免循环导入

特性

  • 论文搜索与发现

    • 具有高级过滤功能的全文搜索
    • 基于标题的论文匹配
    • 论文推荐(单篇和多篇论文)
    • 批量纸张详细信息检索
    • 具有排名策略的高级搜索
  • 引文分析

    • 引文网络探索
    • 参考追踪
    • 引文背景与影响分析
  • 作者信息

    • 作者搜索和个人资料详细信息
    • 出版历史
    • 批量作者详细信息检索
  • 高级功能

    • 具有多种排名策略的复杂搜索
    • 可定制的字段选择
    • 高效的批处理操作
    • 速率限制合规性
    • 支持经过身份验证和未经身份验证的访问
    • 优雅的关机和错误处理
    • 连接池和资源管理

系统要求

  • Python 3.10+
  • API密钥的环境变量(可选)

安装

快速安装(PyPI)

pip install semantic-scholar-fastmcp

或者直接与 uvx:

uvx semantic-scholar-fastmcp

MCP客户端配置

对于支持以下功能的任何MCP客户端 uvx:

{
  "mcpServers": {
    "semantic-scholar": {
      "command": "uvx",
      "args": ["semantic-scholar-fastmcp"],
      "env": {
        "SEMANTIC_SCHOLAR_API_KEY": "your-api-key-here"
      }
    }
  }
}

通过史密瑟里安装

通过以下方式自动安装克劳德桌面语义学者MCP服务器 史密瑟里:

npx -y @smithery/cli install semantic-scholar-fastmcp-mcp-server --client claude

手动安装

  1. 克隆存储库:
git clone https://github.com/YUZongmin/semantic-scholar-fastmcp-mcp-server.git
cd semantic-scholar-fastmcp-mcp-server
  1. 在开发模式下安装:
pip install -e ".[dev]"
  1. 运行服务器:
semantic-scholar-mcp-server

API密钥(可选)

要获得更高的速率限制和更好的性能:

  1. 从获取API密钥 语义学者API
  2. 将其添加到您的FastMCP配置中,如上文所示 env 部分

如果未提供API密钥,则服务器将使用具有较低速率限制的未经身份验证的访问。

配置

贡献

看 CONTRIBUTING.md.

环境变量

  • SEMANTIC_SCHOLAR_API_KEY:您的语义学者API密钥(可选)
    • 从以下位置获取密钥 语义学者API
    • 如果没有提供,服务器将使用未经身份验证的访问

HTTP网桥(内置)

此存储库包括一个小型HTTP网桥(semantic_scholar.bridge)那个 公开了用于常见工作流的最小REST API。

默认侦听端口: 8000.

通过环境变量配置网桥:

  • SEMANTIC_SCHOLAR_ENABLE_HTTP_BRIDGE (默认值: 1)--设置为 0 禁用
  • SEMANTIC_SCHOLAR_HTTP_BRIDGE_HOST (默认值: 0.0.0.0)
  • SEMANTIC_SCHOLAR_HTTP_BRIDGE_PORT (默认值: 8000)

可用端点:

  • GET /v1/paper/search?q=... --论文搜索(参数: fields, offset, limit)
  • GET /v1/paper/{paper_id} --纸张详细信息(参数: fields)
  • POST /v1/paper/batch --批处理纸张详细信息(JSON: { "ids": [ ... ] })
  • GET /v1/author/search?q=... --作者搜索(参数: fields, offset, limit)
  • GET /v1/author/{author_id} --作者详细信息(参数: fields)
  • POST /v1/author/batch --批处理作者详细信息(JSON: { "ids": [ ... ] })
  • GET /v1/recommendations?paper_id=... --论文建议

网桥重用包的HTTP实用程序(semantic_scholar.utils.http) 因此速率限制、API密钥处理和连接池与 MCP工具。

例子:

curl 'http://localhost:8000/v1/paper/search?q=machine+learning&limit=5'

速率限制

服务器会自动调整到适当的速率限制:

使用API密钥:

  • 搜索、批处理和推荐端点:每秒1个请求
  • 其他端点:每秒10个请求

没有API密钥:

  • 所有端点:每5分钟100个请求
  • 请求超时时间更长

注:费率限制可能会发生变化。看 语义学者API 获取最新信息。

语义学者API术语

该项目使用 语义学者学术图谱API,由艾伦人工智能研究所(AI2)提供。 请审阅 API许可协议 使用前。

可用的MCP工具

服务器目前公开了16个MCP工具。

注:所有工具均与官方一致 语义学者API文档。有关详细的现场规范和最新更新,请参阅官方文件。

论文搜索工具

  • paper_relevance_search:使用相关性排名搜索论文

    • 支持全面的查询参数,包括年份范围和引用计数过滤器
    • 返回带有可自定义字段的分页结果
  • paper_bulk_search:具有排序选项的批量纸张搜索

    • 类似于相关性搜索,但针对更大的结果集进行了优化
    • 支持按引用次数、发表日期等排序。
  • paper_title_search:按完全匹配的标题查找论文

    • 当你知道标题时,可以用来查找特定的论文
    • 返回具有可自定义字段的详细纸张信息
  • paper_details:获取特定论文的全面详细信息

    • 接受各种纸张ID格式(S2 ID、DOI、ArXiv等)
    • 返回具有嵌套字段支持的详细纸张元数据
  • paper_batch_details:高效检索多篇论文的详细信息

    • 每次请求最多可接受1000个纸质ID
    • 支持与单张纸详细信息相同的ID格式和字段
  • paper_authors:获取与特定论文相关的作者

    • 返回论文的分页作者结果
    • 支持使用偏移和限制控件自定义作者字段
  • paper_autocomplete:获取部分查询的论文标题建议

    • 返回交互式搜索完成所需的最小纸张元数据
    • 将过长的查询截断为API支持的长度
  • snippet_search:在论文片段和摘录中搜索

    • 从标题、摘要和正文中返回相关的文本匹配
    • 支持论文ID、作者、地点、年份和研究领域的过滤器

引用工具

  • paper_citations:获取引用特定论文的论文

    • 返回引用论文的分页列表
    • 包括引用上下文(如果可用)
    • 支持字段自定义和排序
  • paper_references:获取特定论文引用的论文

    • 返回引用论文的分页列表
    • 包括可用的参考上下文
    • 支持字段自定义和排序

作者工具

  • author_search:按姓名搜索作者

    • 返回带有可自定义字段的分页结果
    • 包括从属关系和出版物数量
  • author_details:获取作者的详细信息

    • 返回完整的作者元数据
    • 包括h指数和引用计数等指标
  • author_papers:获取作者撰写的论文

    • 返回作者出版物的分页列表
    • 支持字段自定义和排序
  • author_batch_details:获取多位作者的详细信息

    • 为多达1000名作者高效检索信息
    • 返回与单作者详细信息相同的字段

推荐工具

  • get_paper_recommendations_single:根据一篇论文获得建议

    • 根据内容和引用模式返回类似的论文
    • 支持推荐论文的字段自定义
  • get_paper_recommendations_multi:根据多篇论文获得建议

    • 接受正面和负面示例论文
    • 返回与正示例相似但与负示例不同的论文

使用示例

基本论文搜索

results = await paper_relevance_search(
    context,
    query="machine learning",
    year="2020-2024",
    min_citation_count=50,
    fields=["title", "abstract", "authors"]
)

论文推荐

# Single paper recommendation
recommendations = await get_paper_recommendations_single(
    context,
    paper_id="649def34f8be52c8b66281af98ae884c09aef38b",
    fields="title,authors,year"
)

# Multi-paper recommendation
recommendations = await get_paper_recommendations_multi(
    context,
    positive_paper_ids=["649def34f8be52c8b66281af98ae884c09aef38b", "ARXIV:2106.15928"],
    negative_paper_ids=["ArXiv:1805.02262"],
    fields="title,abstract,authors"
)

批量操作

# Get details for multiple papers
papers = await paper_batch_details(
    context,
    paper_ids=["649def34f8be52c8b66281af98ae884c09aef38b", "ARXIV:2106.15928"],
    fields="title,authors,year,citations"
)

# Get details for multiple authors
authors = await author_batch_details(
    context,
    author_ids=["1741101", "1780531"],
    fields="name,hIndex,citationCount,paperCount"
)

错误处理

服务器提供标准化的错误响应:

{
    "error": {
        "type": "error_type",  # rate_limit, api_error, validation, timeout
        "message": "Error description",
        "details": {
            # Additional context
            "authenticated": true/false  # Indicates if request was authenticated
        }
    }
}