Skip to main content
Glama
cyanheads

arxiv-mcp-server

by cyanheads

Version License Docker MCP SDK npm TypeScript

Install in Claude Desktop Install in Cursor Install in VS Code

Framework

Публичный размещённый сервер: https://arxiv.caseyjhand.com/mcp


Инструменты

Четыре инструмента для поиска и чтения статей arXiv:

Название инструмента

Описание

arxiv_search

Поиск статей arXiv по запросу с фильтрами по категории и сортировке.

arxiv_get_metadata

Получение полных метаданных одной или нескольких статей arXiv по ID.

arxiv_read_paper

Получение полного текста статьи arXiv из её HTML-представления или из PDF, если HTML-представления нет.

arxiv_list_categories

Вывод таксономии категорий arXiv, опционально отфильтрованной по группе.

Поиск статей по свободным текстовым запросам с префиксами полей и булевыми операторами.

  • Префиксы полей: ti: (заголовок), au: (автор), abs: (аннотация), cat: (категория), all: (все поля)

  • Булевы операторы: AND, OR, ANDNOT

  • Опциональный фильтр по категории, сортировка (relevance, submitted, updated) и постраничная навигация

  • Категория принимает код конечного узла (cs.CL) или целый архив (astro-ph, cs, math) — архив без указания подкласса охватывает его предметные классы, а также устаревшие плоские статьи, поданные до его разделения

  • submitted_from / submitted_to ограничивают дату подачи (включительно, UTC YYYY-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: Research Server

Ресурсы

Шаблон URI

Описание

arxiv://paper/{paperId}

Метаданные статьи по arXiv ID. Процентно-кодируйте слэш устаревшего ID — arxiv://paper/hep-th%2F9901001.

arxiv://categories

Полная таксономия категорий 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"]
    }
  }
}

Предварительные требования

Установка

  1. Клонируйте репозиторий:

git clone https://github.com/cyanheads/arxiv-mcp-server.git
  1. Перейдите в каталог:

cd arxiv-mcp-server
  1. Установите зависимости:

bun install

Конфигурация

Вся конфигурация опциональна — сервер работает из коробки с разумными значениями по умолчанию.

Переменная

Описание

По умолчанию

ARXIV_API_BASE_URL

Базовый URL API arXiv.

https://export.arxiv.org/api

ARXIV_REQUEST_DELAY_MS

Минимальная задержка между запросами к API arXiv (мс).

3000

ARXIV_CONTENT_TIMEOUT_MS

Таймаут для загрузки текста статей — HTML-рендеров и загрузок PDF (мс).

30000

ARXIV_API_TIMEOUT_MS

Таймаут для поисковых запросов и запросов метаданных к API (мс).

15000

ARXIV_MIRROR_ENABLED

Включить локальное зеркало метаданных OAI-PMH для поиска и метаданных.

false

ARXIV_MIRROR_PATH

Путь к SQLite для зеркала.

./data/arxiv-mirror.db

ARXIV_MIRROR_REFRESH_CRON

UTC-выражение cron для ежедневного обновления внутри процесса (только режим HTTP).

не задано

ARXIV_MIRROR_FALLBACK_LIVE

Переходить к живому API при промахе локального поиска по ID.

true

ARXIV_MIRROR_RECENT_DAYS_LIVE

Направлять запросы с sortBy=submitted по убыванию в пределах этого окна в живой API.

2

ARXIV_MIRROR_OAI_BASE_URL

Базовый URL конечной точки OAI-PMH arXiv.

https://oaipmh.arxiv.org/oai

ARXIV_MIRROR_OAI_REQUEST_DELAY_MS

Минимальная задержка между запросами OAI-PMH (мс).

3000

ARXIV_MIRROR_REFRESH_TIMEOUT_MS

Бюджет прерывания для одного запланированного обновления в подпроцессе (мс).

7200000

MCP_TRANSPORT_TYPE

Транспорт: stdio или http.

stdio

MCP_HTTP_PORT

Порт для HTTP-сервера.

3010

MCP_AUTH_MODE

Режим аутентификации: none, jwt или oauth.

none

MCP_LOG_LEVEL

Уровень логирования (RFC 5424).

info

Запуск сервера

Локальная разработка

  • Сборка и запуск:

    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

Структура проекта

Каталог

Назначение

src/mcp-server/tools/definitions/

Определения инструментов (*.tool.ts).

src/mcp-server/resources/definitions/

Определения ресурсов (*.resource.ts).

src/services/arxiv/

ArxivService — клиент живого arXiv API (поиск, метаданные, HTML).

src/services/arxiv/mirror/

Необязательное OAI-PMH-зеркало — сборщик, хранилище SQLite + FTS5, транслятор запросов, исполнитель.

src/config/

Разбор и валидация переменных окружения с помощью Zod.

scripts/arxiv-mirror-*.ts

Скрипты жизненного цикла зеркала (init, refresh, verify).

tests/

Модульные и интеграционные тесты.

docs/

Документ с описанием архитектуры и структура каталогов.

Руководство по разработке

См. 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.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

No tool schema history has been recorded yet.

Maintenance

ActivityMaintained
ResponsivenessResponsive

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    B
    quality
    Not graded
    maintenance
    Enables AI assistants to search and retrieve academic papers from arXiv through MCP tools, supporting search by various criteria, detailed paper information, category browsing, and PDF content extraction.
    4
    129
    2
    -
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables searching arXiv, fetching metadata, reading papers as section-aware Markdown, listing recent papers, and downloading PDFs via five MCP tools.
    23
    2
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/cyanheads/arxiv-mcp-server'

If you have feedback or need assistance with the MCP directory API, please join our Discord server