arxiv-mcp-server
Публичный размещённый сервер: https://arxiv.caseyjhand.com/mcp
Инструменты
Четыре инструмента для поиска и чтения статей arXiv:
Название инструмента | Описание |
| Поиск статей arXiv по запросу с фильтрами по категории и сортировке. |
| Получение полных метаданных одной или нескольких статей arXiv по ID. |
| Получение полного текста статьи arXiv из её HTML-представления или из PDF, если HTML-представления нет. |
| Вывод таксономии категорий arXiv, опционально отфильтрованной по группе. |
arxiv_search
Поиск статей по свободным текстовым запросам с префиксами полей и булевыми операторами.
Префиксы полей:
ti:(заголовок),au:(автор),abs:(аннотация),cat:(категория),all:(все поля)Булевы операторы:
AND,OR,ANDNOTОпциональный фильтр по категории, сортировка (relevance, submitted, updated) и постраничная навигация
Категория принимает код конечного узла (
cs.CL) или целый архив (astro-ph,cs,math) — архив без указания подкласса охватывает его предметные классы, а также устаревшие плоские статьи, поданные до его разделенияsubmitted_from/submitted_toограничивают дату подачи (включительно, UTCYYYY-MM-DD). Последовательные окна покрывают совпадения без пропусков — статья, поданная ровно на стыке полуночи, попадает в оба окна, поэтому дедуплицируйте по ID — так можно получить результаты за пределами потолка пагинации в 10 000Возвращает запрос в том виде, в котором он реально выполнялся, со всеми включёнными фильтрами — повторный запуск воспроизводит тот же набор результатов
Возвращает до 50 результатов на запрос с полными метаданными, включая аннотацию
arxiv_get_metadata
Получение полных метаданных одной или нескольких статей по известному arXiv ID.
Пакетное получение до 10 статей за один запрос
Принимает как версионированные (
2401.12345v2), так и неверсионированные (2401.12345) IDПоддерживается устаревший формат ID (
hep-th/9901001)Сообщает о ненайденных ID отдельно от найденных статей
arxiv_read_paper
Чтение полного текста статьи arXiv.
Сначала пробует родной HTML arXiv, затем ar5iv, затем текст, извлечённый из PDF — поле
sourceсообщает, какой источник ответилУдаляет HTML-шапку и служебную обвязку и сворачивает MathML в LaTeX, ограниченный знаками доллара (
$…$встроенный,$$…$$блочный), чтобы лимит символов расходовался на содержимое статьиВозвращает сырой HTML — без разбора и извлечения; LLM интерпретирует содержимое напрямую. Текст, извлечённый из PDF, — это обычный текст: проза надёжна, но математика, таблицы и структура заголовков уплощаются
max_charactersпо умолчанию равен 100 000; передайтеnull, чтобы получить всю статью за один вызов. Сырой HTML для статей с большим объёмом математики может составлять 500 КБ–3 МБ+, что больше, чем большинство клиентов принимает в одном результате инструмента — вместо этого листайте с помощьюstart
arxiv_list_categories
Вывод кодов и названий категорий arXiv для ознакомления.
~155 категорий в 8 группах верхнего уровня (cs, math, physics, q-bio, q-fin, stat, eess, econ)
Опциональный фильтр по группе для сужения результатов
Статические данные — всегда выполняется успешно
Related MCP server: arxiv-reader-mcp
Ресурсы
Шаблон URI | Описание |
| Метаданные статьи по arXiv ID. Процентно-кодируйте слэш устаревшего ID — |
| Полная таксономия категорий arXiv. |
Возможности
Построен на @cyanheads/mcp-ts-core:
Декларативные определения инструментов — один файл на инструмент, фреймворк обрабатывает регистрацию и валидацию
Единая обработка ошибок во всех инструментах
Подключаемая аутентификация (
none,jwt,oauth)Структурированное логирование с опциональной трассировкой OpenTelemetry
Запускается локально (stdio/HTTP) из той же кодовой базы
Специфика arXiv:
Только чтение, аутентификация не требуется — API arXiv бесплатен, метаданные имеют лицензию CC0
Очередь запросов с ограничением скорости, обеспечивающая 3-секундную задержку обхода arXiv
Адаптивная пауза при ограничении скорости (5s → 10s → 20s → 30s), учитывает
Retry-AfterПовторные попытки с экспоненциальной задержкой при временных сбоях
Цепочка резервных источников контента: родной HTML arXiv → ar5iv → извлечение текста из PDF (оба HTML-рендера используют LaTeXML, поэтому они склонны отказывать одновременно; PDF — это артефакт, который есть у каждой статьи, и он также покрывает сбой ar5iv, не позволяя одному сбою сорвать чтение)
Полная таксономия категорий arXiv, встроенная как статические данные
Опциональное локальное зеркало метаданных OAI-PMH (SQLite + FTS5) — включается по желанию, устраняет подверженность ограничению скорости для
arxiv_searchиarxiv_get_metadata. См. Опционально: локальное зеркало.
Начало работы
Публичный размещённый экземпляр
Публичный экземпляр доступен по адресу https://arxiv.caseyjhand.com/mcp — установка не требуется. Подключите любой MCP-клиент к нему через Streamable HTTP:
{
"mcpServers": {
"arxiv-mcp-server": {
"type": "streamable-http",
"url": "https://arxiv.caseyjhand.com/mcp"
}
}
}Самостоятельное размещение / Локально
Добавьте в конфигурацию вашего MCP-клиента (например, claude_desktop_config.json):
{
"mcpServers": {
"arxiv-mcp-server": {
"type": "stdio",
"command": "bunx",
"args": ["@cyanheads/arxiv-mcp-server@latest"]
}
}
}Предварительные требования
Bun v1.3.0 или выше.
Установка
Клонируйте репозиторий:
git clone https://github.com/cyanheads/arxiv-mcp-server.gitПерейдите в каталог:
cd arxiv-mcp-serverУстановите зависимости:
bun installКонфигурация
Вся конфигурация опциональна — сервер работает из коробки с разумными значениями по умолчанию.
Переменная | Описание | По умолчанию |
| Базовый URL API arXiv. |
|
| Минимальная задержка между запросами к API arXiv (мс). |
|
| Таймаут для загрузки текста статей — HTML-рендеров и загрузок PDF (мс). |
|
| Таймаут для поисковых запросов и запросов метаданных к API (мс). |
|
| Включить локальное зеркало метаданных OAI-PMH для поиска и метаданных. |
|
| Путь к SQLite для зеркала. |
|
| UTC-выражение cron для ежедневного обновления внутри процесса (только режим HTTP). | не задано |
| Переходить к живому API при промахе локального поиска по ID. |
|
| Направлять запросы с |
|
| Базовый URL конечной точки OAI-PMH arXiv. |
|
| Минимальная задержка между запросами OAI-PMH (мс). |
|
| Бюджет прерывания для одного запланированного обновления в подпроцессе (мс). |
|
| Транспорт: |
|
| Порт для HTTP-сервера. |
|
| Режим аутентификации: |
|
| Уровень логирования (RFC 5424). |
|
Запуск сервера
Локальная разработка
Сборка и запуск:
bun run build bun run start:http # or start:stdioЗапуск проверок и тестов:
bun run devcheck # Lint, format, typecheck, audit bun run test # Vitest
Опционально: локальное зеркало
Для самостоятельных развёртываний за одним исходящим IP-адресом задержка обхода arXiv ~3 секунды на IP-адрес сериализует одновременных пользователей. Опциональное локальное зеркало устраняет подверженность ограничению скорости для arxiv_search и arxiv_get_metadata, обслуживая запросы из хранилища SQLite + FTS5, наполняемого через OAI-PMH. arxiv_read_paper продолжает использовать живой API — полный сбор контента запрещён политикой данных arXiv.
Отключено по умолчанию. Чтобы включить:
# 1. Cold-start harvest (~4.4h sequential, resumable from checkpoint). One-time per installation.
bun run mirror:init
# 2. Enable the mirror.
export ARXIV_MIRROR_ENABLED=true
# 3. Start the server — reads switch to the mirror once the harvest completes.
bun run start:httpЕжедневное инкрементальное обновление (небольшая дельта; длительность зависит от темпа выдачи страниц OAI-PMH arXiv) через:
bun run mirror:refresh # wire to cron / systemd timer / launchd, OR
# set ARXIV_MIRROR_REFRESH_CRON to schedule it in HTTP mode (spawned as a child process)
bun run mirror:verify # schema version + PRAGMA integrity_check / quick_checkОбновления схемы. Зеркало записывает версию схемы и выполняет миграцию на месте при первом открытии более новым сервером — никогда не повторный сбор и не отдельный шаг оператора. Обновление, добавившее comment и journal_ref в полнотекстовый индекс (#37), перестраивает этот индекс из уже сохранённых строк, поэтому поиски co: и jr: работают по зеркалу, собранному до этого обновления. Перестройка выполняется при запуске, до того как хранилище ответит на первый запрос чтения, и в процессе выводит строки прогресса mirror migration v2→v3 (fts rebuild) — на зеркале с полным корпусом первый запуск после обновления, как ожидается, займёт заметно больше времени, чем обычно. Прерванная перестройка повторяется при следующем открытии, а не остаётся наполовину применённой. bun run mirror:verify выводит версию схемы, которую содержит файл, и завершается с ненулевым кодом, если миграция так и не завершилась.
Замечания по поведению. Расхождение ранжирования: FTS5 BM25 отличается от внутреннего ранжирования arXiv, поэтому sortBy=relevance против зеркала возвращает другой top-K, чем живой API. Запросы, отсортированные по submitted по убыванию в пределах ARXIV_MIRROR_RECENT_DAYS_LIVE дней, направляются в живой API, чтобы покрыть промежуток между ночными обновлениями. Устойчивость обновления: после завершения первоначального холодного сбора выполняющееся или завершившееся сбоем ежедневное обновление продолжает обслуживать существующий набор данных из зеркала — arxiv_search и arxiv_get_metadata не переключаются на живой API во время окна обновления (#21). Плановое обновление в HTTP-режиме выполняется в дочернем процессе, поэтому синхронные записи SQLite при сборе никогда не блокируют цикл обработки событий запросов — поиск и метаданные остаются отзывчивыми на протяжении всего процесса (#22). Зеркало хранит только последнюю версию; чтение по отдельным версиям продолжает использовать живой API. Полное описание см. в #12.
Docker
docker build -t arxiv-mcp-server .
docker run -p 3010:3010 arxiv-mcp-serverСтруктура проекта
Каталог | Назначение |
| Определения инструментов ( |
| Определения ресурсов ( |
|
|
| Необязательное OAI-PMH-зеркало — сборщик, хранилище SQLite + FTS5, транслятор запросов, исполнитель. |
| Разбор и валидация переменных окружения с помощью Zod. |
| Скрипты жизненного цикла зеркала ( |
| Модульные и интеграционные тесты. |
| Документ с описанием архитектуры и структура каталогов. |
Руководство по разработке
См. CLAUDE.md с рекомендациями по разработке и архитектурными правилами. Краткая версия:
Обработчики выбрасывают исключения, фреймворк ловит их — никаких
try/catchв логике инструментовИспользуйте
ctx.logдля доменного логированияОграничение частоты запросов управляется
ArxivService— не добавляйте задержки для отдельных инструментовarXiv API возвращает HTTP 200 для всего — проверяйте content-type и тело ответа
Участие в разработке
Приветствуются issue и pull request. Перед отправкой запустите проверки:
bun run devcheck
bun testЛицензия
Apache-2.0 — подробности см. в LICENSE.
This server cannot be deployed
Maintenance
Related MCP Connectors
Find research papers and arXiv preprints, and get an abstract and free full text from a DOI or id.
Search arXiv/Semantic Scholar/OpenAlex + medical evidence (PubMed/Europe PMC) + LaTeX/PDF tools.
Search and download academic papers from arXiv, PubMed, bioRxiv, medRxiv, Google Scholar, Semantic…
Related MCP Servers
- FlicenseBqualityDmaintenanceEnables searching arXiv papers and retrieving paper metadata through MCP tools.2-
- AlicenseAqualityCmaintenanceMCP server for searching and retrieving arXiv papers with full-text PDF extraction.52MIT
- AlicenseNot gradedqualityDmaintenanceEnables searching arXiv, fetching metadata, reading papers as section-aware Markdown, listing recent papers, and downloading PDFs via five MCP tools.22 npm2MIT
- AlicenseNot gradedqualityDmaintenanceEnables searching arXiv and downloading papers via MCP tools, no API key required.Apache 2.0