arXiv学术文章检索服务

一个基于MCP协议的服务,用于与arXiv API交互,支持搜索科学文章、获取元数据和PDF链接。

  • by cecinuga
  • Go
  • 本地部署
  • 2 星标
  • 更新于
在 GitHub 查看 cecinuga/arxiv-mcp-server

使用说明

arxiv mcp服务器

用Go编写的MCP(模型上下文协议)服务器,用于与 arXiv.org API它允许任何兼容MCP的客户端(Claude Desktop、启用MCP的IDE、AI代理)直接从arXiv搜索科学文章、检索元数据和获取PDF链接。

感谢arXiv使用其开放访问互操作性。


建筑

┌─────────────────────┐       stdio        ┌─────────────────────────┐
│    MCP Client        │◄──────────────────►│     MCP Server          │
│  (Claude, IDE, ...)  │                    │  cmd/server/main.go     │
└─────────────────────┘                    └──────────┬──────────────┘
                                                      │
                                           ┌──────────▼──────────────┐
                                           │    Tool Handlers         │
                                           │  internal/handler/       │
                                           │                          │
                                           │  - export-metadata       │
                                           │  - export-pdf-url        │
                                           └──────────┬──────────────┘
                                                      │
                                           ┌──────────▼──────────────┐
                                           │    HTTP Client           │
                                           │  internal/http-client/   │
                                           │                          │
                                           │  - Rate limiting (3s)    │
                                           │  - Retry + backoff       │
                                           │  - Query builder         │
                                           └──────────┬──────────────┘
                                                      │
                                           ┌──────────▼──────────────┐
                                           │   arXiv API              │
                                           │   export.arxiv.org/api   │
                                           └──────────────────────────┘

项目结构

arxiv-mcp-server/
├── cmd/
│   ├── server/main.go             # MCP server entry point
│   └── client/main.go             # Test client
├── internal/
│   ├── handler/
│   │   └── export.go              # Tool handler implementations
│   └── http-client/
│       ├── http-client.go         # HTTP client with rate limiting and retry
│       ├── request.go             # Query parameter parsing (reflection-based)
│       └── response.go            # Response handling
├── scripts/
│   └── build.sh                   # Build script
├── go.mod
└── go.sum

核心组件

MCP 服务器 (cmd/server/main.go)--使用初始化服务器 go-sdk/mcp,注册工具,并启动stdio传输。

工具操作员 (internal/handler/export.go)--将工具逻辑实现为闭包工厂。每个处理程序接收HTTP客户端并返回一个与MCP兼容的函数。

HTTP客户端 (internal/http-client/)-配置为遵守arXiv API指南:

  • 速率限制:请求之间间隔3秒
  • 指数退避重试:最多3次尝试,延迟= 2^attempt * 3s
  • 连接池:最多1个空闲连接,超时90秒
  • 超时:每个请求10秒

查询构建器 (internal/http-client/request.go)-基于反射的系统,将Go结构转换为arXiv API的查询字符串,使用 query 和 queryschema 结构标签。


可用工具

export-metadata

搜索arXiv并返回完整的元数据作为Atom提要(标题、作者、摘要、类别、日期、链接)。

export-pdf-url

搜索arXiv并返回匹配文章的直接PDF URL。

输入参数

这两个工具都接受相同的参数模式:

参数 类型 说明
id_list []int 特定物品ID列表
start int 开始分页索引
max_results int 返回的最大结果数
search_query object 搜索筛选器(见下文)

搜索筛选 (search_query):

字段 API标记 说明
Title ti 文章标题
Author au 作者姓名
Abstract abs 摘要内容
Comment co 文章评论
JournalReference jr 期刊参考
SubjectCategory cat 主题类别(例如。 cs.AI, math.CO, physics.optics)
ReportNumber rn 报告编号
All all 在所有字段中搜索

当指定了多个过滤器时,它们会与 AND 操作员。


需求

  • 转到>=1.24.0

构建

# Build the server
./scripts/build.sh server

# Build the test client
./scripts/build.sh client

这产生了 server.exe (或 client.exe)可在项目根目录中执行。

Claude桌面配置

将以下内容添加到您的 claude_desktop_config.json:

{
  "mcpServers": {
    "arxiv": {
      "command": "/absolute/path/to/server.exe"
    }
  }
}

或者,不编译,直接从源代码运行:

{
  "mcpServers": {
    "arxiv": {
      "command": "go",
      "args": ["run", "./cmd/server"],
      "cwd": "/absolute/path/to/arxiv-mcp-server"
    }
  }
}

与其他MCP客户端一起使用

任何支持MCP的兼容客户端 标准 传输可以使用此服务器。服务器按照MCP标准通过stdin/stdout进行通信。

# Start the server (communicates via stdio)
./server.exe

使用示例

下面是LLM或AI代理如何利用此MCP服务器的实际示例。

1.按标题搜索

“在arXiv上搜索文章‘注意力就是你所需要的一切’,并向我展示它的元数据”

客户端调用 export-metadata 与:

{
  "max_results": 1,
  "search_query": { "Title": "Attention is all you need" }
}

2.探索科学范畴

“给我cs.AI类别中最近的10篇文章”

{
  "max_results": 10,
  "search_query": { "SubjectCategory": "cs.AI" }
}

3.搜索特定作者的作品

“查找Yann LeCun在arXiv上的所有文章”

{
  "max_results": 20,
  "search_query": { "Author": "Yann LeCun" }
}

4.获取文章的PDF

“给我BERT论文的PDF链接”

客户端调用 export-pdf-url 与:

{
  "max_results": 1,
  "search_query": { "Title": "BERT Pre-training of Deep Bidirectional Transformers" }
}

5.组合搜索(多过滤器)

“搜索生物信息学领域的机器学习文章”

{
  "max_results": 5,
  "search_query": {
    "SubjectCategory": "q-bio",
    "All": "machine learning"
  }
}

6.分页结果

“显示‘量子计算’的结果10到20”

{
  "start": 10,
  "max_results": 10,
  "search_query": { "All": "quantum computing" }
}

7.人工智能辅助文献综述

“对应用于计算机视觉的变压器进行文献综述,给我看前15篇文章的标题和摘要”

AI代理调用 export-metadata 使用适当的参数,然后为用户合成结果。

8.日志监控

“搜索《物理评论快报》上发表的最新文章”

{
  "max_results": 10,
  "search_query": { "JournalReference": "Physical Review Letters" }
}

TODO——改进和未来功能

  • [🔴] export-bibtex 工具:添加一个以BibTeX格式返回引文的工具,这对LaTeX集成和书目管理工具很有用。

  • [🔴] get-article-by-id 工具:通过arXiv ID检索单个文章的专用工具(例如。 2106.09685),而无需经过搜索。

  • [🔴] search-similar 工具:给定文章ID,根据类别和摘要关键字查找相关文章。

  • [🟠] 在查询中支持OR和ANDNOT运算符:当前搜索筛选器与 AND 只有。添加对更复杂布尔运算符的支持。

  • [🟠] 响应缓存:实现内存(或磁盘)缓存,以避免重复的API请求并减少延迟。

  • [🟡] 结构化日志记录:替换 log.Fatal 使用结构化记录器(例如。 slog)具有可配置的级别,可用于调试和生产监控。

  • [🟡] Dockerfile:添加一个Dockerfile以简化容器化环境中的部署和集成。

  • [🟡] OpenAPI/JSON模式文档:从自动生成工具参数文档 queryschema 结构标签。

  • [🟡] 优雅的停机处理:拦截操作系统信号(SIGINT、SIGTERM)以正确关闭连接并释放资源。

  • [🟢] 外部配置:允许通过环境变量或配置文件配置基本URL、超时、速率限制和重试。

  • [🟢] 单元和集成测试:为处理程序、HTTP客户端和参数解析添加一个测试套件。针对真正的API,使用HTTP模拟进行单元测试和集成测试。


许可证

看 许可证 文件。

学分

该项目使用 arXiv API 和那个 Go MCP SDK.