@cyanheads/arxiv-mcp-服务器
搜索arXiv,取出纸质元数据,通过MCP读取全文内容. (原始内容存档于2012-10-12). STIO or Streamable HTTP.
概览
arXiv文件、元数据以及ArXiv API及其审调处-PMH元数据反馈的全文。 按查询、类别和提交日期来搜索文件;通过ID获取结构化元数据;并读取HTML和PDF制成的全纸文本,自动回落。 运行为 stdio 进程,本地可流的 HTTP 服务器,或上面的公共主机端点.
工具
| 工具 | 说明 |
|---|---|
arxiv_search_papers | 使用字段前缀、类别和日期过滤器查询搜索 arXiv 文档 |
arxiv_get_metadata | 用 arXiv ID 获取一个或多个文件的元数据 |
arxiv_read_paper | 通过 HTML、 ar5iv 或 PDF 提取的倒置读取纸张全文 |
arxiv_list_categories | 列出 arXiv 类分类, 可选择按组过滤 |
资源
| 资源 | 说明 |
|---|---|
arxiv://paper/{paperId} | 由 arXiv ID 编写的纸质元数据 |
arxiv://categories | 完全arXiv 分类 |
能力参考
arxiv_search_papers 工具
- 查询支持字段前缀
ti:, (中文(简体) ),au:, (中文(简体) ),abs:, (中文(简体) ),cat:, (中文(简体) ),co:, (中文(简体) ),jr:, (中文(简体) ),all:财务报告和审定财务报表AND编号 :OR编号 :ANDNOT,最多1000个字符;category使用一个代码( e)cs.CL)或整个档案(astro-ph, (中文(简体) ),cs, (中文(简体) ),math(中文(简体) ) - 查询语法遵循 arXiv 的: 空间分隔的名词与
OR(写出)AND以要求每个术语),运算符只是大写,所有三个词都有一个优先级归为右(a AND b OR c实值a AND (b OR c). 引文使用过时参数coauthors (帮助) 多字专题 (简体中文)"graph neural networks" AND cat:cs.LG)并在过滤器前加括号;arXiv 忽略了常见的单词,例如of财务报告和审定财务报表the引用的短语之外 - 排序为
sort_by(单位:千美元)relevance编号 :submitted编号 :updated,无论如何;arXiv自己的submittedDate编号 :lastUpdatedDate改为submitted编号 :updated和sort_order,与submitted_from编号 :submitted_to包括世界协调时YYYY-MM-DD界限;每次呼叫最多50个结果(较大)max_results返回 50时 - arXiv只服务于一个查询的第一个10,000个结果; a
start1万个失败start_beyond_result_limit。使用日期窗口更进一步 - 输出回放有效的查询,总匹配计数,以及页面偏移;空页带回取回的指引而不是出错. 总共为一层(当地镜子计为5万)
totalFoundIsLowerBound: true
arxiv_get_metadata 工具
- 最多需要100张身份证 查一下前10张
remaining_ids下一个电话的paper_ids。任何接受的拼写中重复的ID会被查一次,而不同版本的一张纸则分开 - 接受版本( E)
2401.12345v2),未转录,以及2007年之前(hep-th/9901001身份证,可选arXiv:前缀或 arxiv.orgabs编号 :pdf编号 :html網址 - 返回已找到的纸外加打入的
not_found[](单位:千美元)not_in_arxiv编号 :version_not_in_mirror编号 :version_not_served编号 :live_lookup_failed编号 :invalid_id其余部分;version_not_servedarXiv 的 API 对 HTTP 500 的回答及其detail命名最新版本。 与当地的镜子,live_lookup_failed标记一个识别符 镜像缺少其活视镜失败; 镜像服务的文件仍然回来 - 失败者
invalid_id当没有很好的身份证,no_match当每一个身份缺失,version_unavailable当一个版本只能在活的 API 上达到时,并且version_not_served当每个ID是一个版本 arXiv 将不会服务
arxiv_read_paper 工具
- Tries arXiv HTML,然后是 ar5iv,然后是 PDF 文本提取
source回答的实地报告。 PDF 文本是简单的, 因此数学、 表格和标题均匀 - ar5iv保留每张纸的一出出处,所以ar5iv的正文可能是另一种修改,而不是
paper_id并携带revision_unconfirmed: true,除非已读取的无版本和arXiv的API将v1报告为论文的唯一版本;pdf_url准确的就是paper_id订正 max_characters默认为 100,000(通过)null整页)start。第一页载有outline页:1paper_id接受相同的 ID 拼写为arxiv_get_metadata- 失败者
invalid_id, (中文(简体) ),no_match(arXiv没有这种文件,或没有这种版本),content_unavailable(无渲染、无PDF),pdf_extraction_failed(PDF没有文本层或不解析),version_unavailable(arXiv是无法接触到的,当地镜像持有被钉住的ID的另一个版本),或version_not_served(被取代的2007年前版本arXiv将不服务;命名最新版本和本版本的PDF)
arxiv_list_categories 工具
- ~155个类别,分布在8个最高级别的团体(
cs, (中文(简体) ),econ, (中文(简体) ),eess, (中文(简体) ),math, (中文(简体) ),physics, (中文(简体) ),q-bio, (中文(简体) ),q-fin, (中文(简体) ),stat(中文(简体) ) - 可选
group过滤到缩小结果 - 静态数据——总是成功的
arxiv://paper/{paperId} 资源
paperId接受相同的 ID 拼写为arxiv_get_metadata; %-encode 一个遗留的ID的斜线(arxiv://paper/hep-th%2F9901001(中文(简体) )- 失败者
empty_id, (中文(简体) ),invalid_id, (中文(简体) ),no_match, (中文(简体) ),version_unavailable,或version_not_served
arxiv://categories 资源
- 回返
{ categories: [...] },一个平面阵列,其中code编号 :name编号 :group每个条目 - 无参数;24h可缓存
特征
建造在 @cyanheads/mcp-ts-core: stdio和可流式的 HTTP 传输器,可插接式(none 编号 : jwt 编号 : oauth),可互换存储(in-memory, (中文(简体) ), filesystem, (中文(简体) ), Supabase, (中文(简体) ), Cloudflare KV/R2/D1),结构化记录,可选择的OpenTeleometry tracking.
arXiv 特异性:
- 只读, 不需要认证
- 请求队列执行 arXiv 的 三秒爬行延迟; 速率限制响应在冷却后迅速失败
- 纸张文本从 arXiv HTML 返回到 ar5iv 到 PDF 提取
- 作为静态数据嵌入的完整arXiv分类
- 可选的本地审调处-PMH元数据镜像(SQLite + FTS5)可以去除搜索和元数据的限速曝光. 见 可选: 本地镜像
方便代理输出 :
arxiv_read_paper名称source· ;arxiv_search_papers响应有效的查询arxiv_get_metadata返回已输入的已找到的文档not_found[]每个错失的原因- 类型
source财务报告和审定财务报表not_found[].reasonenums 允许调用数据分支
开始
公共托管实例
可在 https://arxiv.caseyjhand.com/mcp 无需安装。 通过可流式HTTP将 MCP 客户端指向它 :
{
"mcpServers": {
"arxiv-mcp-server": {
"type": "streamable-http",
"url": "https://arxiv.caseyjhand.com/mcp"
}
}
}
自有/当地
在您的 MCP 客户端配置文件中添加以下内容 .
{
"mcpServers": {
"arxiv-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/arxiv-mcp-server@latest"]
}
}
}
或者用 npx( 不需要 Bun) :
{
"mcpServers": {
"arxiv-mcp-server": {
"type": "stdio",
"command": "npx",
"args": ["-y", "@cyanheads/arxiv-mcp-server@latest"]
}
}
}
或与道克相会:
{
"mcpServers": {
"arxiv-mcp-server": {
"type": "stdio",
"command": "docker",
"args": ["run", "-i", "--rm", "-e", "MCP_TRANSPORT_TYPE=stdio", "ghcr.io/cyanheads/arxiv-mcp-server:latest"]
}
}
}
对于可流式HTTP,设置传输并启动服务器:
MCP_TRANSPORT_TYPE=http MCP_HTTP_PORT=3010 bun run start:http
# Server listens at http://localhost:3010/mcp
先决条件
- Bun v 1.4.4 (单位:千美元) 或更高(或Node.js v24+).
安装
- 清除仓库 :
git clone https://github.com/cyanheads/arxiv-mcp-server.git
- 导航到目录 :
cd arxiv-mcp-server
- 安装依赖性 :
bun install
配置
所有配置都是可选的——服务器在框外工作,有合理的默认值.
| 变量 | 说明 | 默认 |
|---|---|---|
ARXIV_API_BASE_URL | arXiv API 基础 URL. | https://export.arxiv.org/api |
ARXIV_REQUEST_DELAY_MS | ArXiv API请求之间的最小延迟 (ms). | 3000 |
ARXIV_CONTENT_TIMEOUT_MS | 取纸体的超时——HTML使和PDF下载(ms). | 30000 |
ARXIV_API_TIMEOUT_MS | API搜索/元数据请求的超时(ms). 随着镜像的启用, 也是最长的未转换 arxiv_read_paper 等待它的元数据查找, 包括队列, 等待镜像持有纸质答案 . | 15000 |
ARXIV_READ_TIMEOUT_MS | 其中一项的时间预算 arxiv_read_paper 调用 – 其元数据查询,每个内容请求和重试,以及 PDF 文本提取 (ms). 保存在您的 MCP 客户端的请求超时( 默认为 60 s) 下 . | 50000 |
ARXIV_MIRROR_ENABLED | 启用本地审调处- PMH 元数据镜像 . | false |
ARXIV_MIRROR_PATH | SQLite 路径用于镜像 . | ./data/arxiv-mirror.db |
ARXIV_MIRROR_REFRESH_CRON | UTC cron 表达式用于进程内每日刷新(仅HTTP模式). | 未设定 |
ARXIV_MIRROR_FALLBACK_LIVE | 接通现场API 接听本地的身份证检查小姐. | true |
ARXIV_MIRROR_RECENT_DAYS_LIVE | 正值发送 sort_by=submitted将查询输入实时API; 0 禁用 . | 2 |
ARXIV_MIRROR_OAI_BASE_URL | arXiv 审调处-PMH端点基础URL. | https://oaipmh.arxiv.org/oai |
ARXIV_MIRROR_OAI_REQUEST_DELAY_MS | 审调处-公共卫生部之间请求之间的最小延迟(ms). | 3000 |
ARXIV_MIRROR_REFRESH_TIMEOUT_MS | 一个预定更新的时间预算(毫秒). | 7200000 |
MCP_TRANSPORT_TYPE | 运输: stdio 或者说 http。 。 。 . | stdio |
MCP_HTTP_PORT | HTTP 服务器端口 . | 3010 |
MCP_SESSION_MODE | auto, (中文(简体) ), stateful,或 stateless。 。 。 . | stateless |
MCP_AUTH_MODE | Auth 模式 : none, (中文(简体) ), jwt,或 oauth。 。 。 . | none |
MCP_LOG_LEVEL | 日志级别(RFC 5424). | info |
OTEL_ENABLED | 启用 OpenTelemet 仪器 (日文、度量、完成日志). | false |
见 .env.example 用于完整可选覆盖列表.
运行服务器
地方发展
-
构建和运行 :
# One-time build bun run rebuild # Run the built server bun run start:http # or bun run start:stdio -
运行检查和测试 :
bun run devcheck # Lint, format, typecheck, security audit bun run test # Vitest test suite
可选: 本地镜像
对于一个Egress IP背后的自备部署,ARXIV的SQLite + FTS5 镜像可选 SQLite + FTS5 镜像服务 arxiv_search_papers 财务报告和审定财务报表 arxiv_get_metadata 本地,所以并行用户停止在arXiv的3秒爬行延迟后排队; arxiv_read_paper 仍可实时获取纸张文本。 收获一次 bun run mirror:init (~4.4h),然后设定 ARXIV_MIRROR_ENABLED=true。从 npm 安装、 调度更新、 计划升级中运行它, 且镜像搜索与 API 的活式搜索不同 文件/备忘录。 。 。 .
夹克
docker build -t arxiv-mcp-server .
docker run --rm -p 3010:3010 arxiv-mcp-server
Dockerfile 默认为 HTTP 传输、 无国籍会话模式和日志到 /var/log/arxiv-mcp-server。默认情况下安装了 OpenTeleometry 端端依赖性 --build-arg OTEL_ENABLED=false 以略去它们.
项目结构
| 目录 | 目的 |
|---|---|
src/index.ts | createApp() 入站点——注册工具/资源并启动可选的镜像再更新调度器. |
src/config | 服务器特定环境变量与Zod解析并验证. |
src/mcp-server/tools/definitions | 工具定义*.tool.ts) (中文(简体) ). |
src/mcp-server/resources/definitions | 资源定义*.resource.ts) (中文(简体) ). |
src/services/arxiv | ArxivService ——活 arXiv API 客户端(搜索,元数据,HTML),和 PDF 文本从工人线程中提取(pdf-text.ts) (中文(简体) ). |
src/services/arxiv/mirror | 可选审调处-PMH镜像-收割机,SQLite + FTS5商店,查询翻译,跑道. |
skills/arxiv-guide | 代理技能发布给安装服务器的代理,并服务于MCP:引用-到ID分辨率,搜索门,版本和分节读取工作流程. |
scripts/arxiv-mirror-*.ts | 镜像生命周期脚本( E)init, (中文(简体) ), refresh, (中文(简体) ), verify(三); scripts/tsconfig.json 解决他们的 @/ 进口到 src/,或改为 dist/ 在安装. |
tests/ | 单位与整合测试. |
docs/ | 设计文档,本地镜像指南,以及目录结构. |
发展指南
见 CLAUDE.md 发展准则和建筑规则。 简本:
- 搬运工投掷,框架渔获量——否
try/catch在工具逻辑中 - 使用
ctx.log请求范围伐木,ctx.state租户范围储存 - arXiv API 返回 HTTP 200 , 包括速率限制, 因此在解析前检查内容类型和正文
- 验证原始 arXiv 响应 = 与域类型正常化 = 返回输出计划; 永远不编织缺失的字段
捐款
问题值得欢迎。 提交前运行检查 :
bun run devcheck
bun run test
许可证
阿帕奇-2.0 — 见 自由主义 详细情况.