使用说明
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.