Skip to content
Agent Orchestration
Skill

/arxiv

Search and retrieve academic papers from arXiv using their free REST API. No API key needed.

BOOST
From plugin
hermes-ccc
13446 skills
Install
$ npx -y skills add alexai-mcp/hermes-ccc --skill arxiv --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/arxiv

Context preview

The summary Claude sees to decide when to auto-load this skill.

Search and retrieve academic papers from arXiv using their free REST API. No API key needed.

SKILL.md

arxiv.SKILL.md
name: arxiv
description: Search and retrieve academic papers from arXiv using their free REST API. No API key needed.
version: 1.0.0
author: hermes-CCC (ported from Hermes Agent by NousResearch)
license: MIT
metadata:
  hermes:
    tags: [Research, Arxiv, Papers, Academic, API]
    related_skills: [research-paper-writing]

arXiv

Purpose

  • Use this skill to search, inspect, and download academic papers from arXiv.
  • Prefer it for literature review, paper triage, and reproducible paper retrieval.
  • arXiv access is free and does not require an API key.
  • The primary API is Atom XML over HTTP.

Base Endpoint

  • Base URL: `https://export.arxiv.org/api/query`
  • Response format: Atom XML feed
  • Transport: HTTP GET
  • Authentication: none

Core Record Shape

  • `id`: canonical entry URL for the paper
  • `title`: paper title
  • `summary`: abstract text
  • `authors`: ordered author list
  • `published`: original publication timestamp
  • `categories`: arXiv subject tags
  • `pdf_url`: direct PDF URL when present

Useful Categories

  • `cs.AI`
  • `cs.LG`
  • `cs.CL`
  • `stat.ML`
  • `cs.CV`

Search Syntax

  • Search terms are passed in `search_query=...`
  • Field prefixes narrow the query:
  • `ti:` title search
  • `au:` author search
  • `abs:` abstract search
  • `all:` broad metadata search
  • Combine terms with `AND`, `OR`, and `ANDNOT`
  • URL-encode spaces as `+` or `%20`

Common Query Patterns

  • `all:reasoning+AND+cat:cs.AI`
  • `ti:transformer+AND+cat:cs.CL`
  • `au:Goodfellow+AND+cat:cs.LG`
  • `abs:diffusion+AND+cat:cs.CV`
  • `all:reinforcement+learning+AND+cat:stat.ML`

CLI Subcommands

  • `/arxiv search`
  • `/arxiv get`
  • `/arxiv recent`
  • `/arxiv download`

Subcommand Intent

  • `/arxiv search`: run a query and print matching entries
  • `/arxiv get`: fetch one known arXiv identifier and display parsed metadata
  • `/arxiv recent`: list recent submissions in a category or topic
  • `/arxiv download`: save the PDF locally from a known identifier or PDF URL

Search Example With curl

curl -s "https://export.arxiv.org/api/query?search_query=all:large+language+models+AND+cat:cs.CL&start=0&max_results=5&sortBy=relevance&sortOrder=descending"

Recent Example With curl

curl -s "https://export.arxiv.org/api/query?search_query=cat:cs.LG&start=0&max_results=10&sortBy=submittedDate&sortOrder=descending"

PDF Download Example With curl

curl -L "https://arxiv.org/pdf/2401.01234.pdf" -o 2401.01234.pdf

Fetch A Single Entry By Identifier

curl -s "https://export.arxiv.org/api/query?id_list=2401.01234"

Rate Limit Guidance

  • Keep requests at or below `3 req/sec`
  • Sleep between loops when paginating large result sets
  • Cache parsed results locally if you will revisit them
  • Avoid hammering the endpoint with concurrent workers

Python Parsing Pattern

import xml.etree.ElementTree as ET
from urllib.request import urlopen

API_URL = "https://export.arxiv.org/api/query?search_query=all:reasoning+AND+cat:cs.AI&start=0&max_results=3"
NS = {"atom": "http://www.w3.org/2005/Atom"}

with urlopen(API_URL) as response:
    xml_bytes = response.read()

root = ET.fromstring(xml_bytes)

for entry in root.findall("atom:entry", NS):
    paper_id = entry.findtext("atom:id", default="", namespaces=NS)
    title = entry.findtext("atom:title", default="", namespaces=NS).strip()
    summary = entry.findtext("atom:summary", default="", namespaces=NS).strip()
    published = entry.findtext("atom:published", default="", namespaces=NS)
    authors = [
        author.findtext("atom:name", default="", namespaces=NS)
        for author in entry.findall("atom:author", NS)
    ]
    categories = [node.attrib.get("term", "") for node in entry.findall("atom:category", NS)]
    pdf_url = ""
    for link in entry.findall("atom:link", NS):
        if link.attrib.get("title") == "pdf":
            pdf_url = link.attrib.get("href", "")
            break
    print("id:", paper_id)
    print("title:", title)
    print("published:", published)
    print("authors:", ", ".join(authors))
    print("categories:", ", ".join(categories))
    print("pdf_url:", pdf_url)
    print("summary:", summary[:240], "...")
    print("-" * 60)

Minimal Search Helper

import xml.etree.ElementTree as ET
from urllib.parse import quote_plus
from urllib.request import urlopen

def search_arxiv(query: str, max_results: int = 5) -> list[dict]:
    encoded = quote_plus(query)
    url = (
        "https://export.arxiv.org/api/query"
        f"?search_query={encoded}&start=0&max_results={max_results}"
    )
    ns = {"atom": "http://www.w3.org/2005/Atom"}
    with urlopen(url) as response:
        root = ET.fromstring(response.read())
    rows = []
    for entry in root.findall("atom:entry", ns):
        authors = [
            node.findtext("atom:name", default="", namespaces=ns)
            for node in entry.findall("atom:author", ns)
        ]
        categories = [node.attrib.get("term", "") for node in entry.findall("atom:category", ns)]
        rows.append(
            {
                "id": entry.findtext("atom:id", default="", namespaces=ns),
                "title": entry.findtext("atom:title", default="", namespaces=ns).strip(),
                "summary": entry.findtext("atom:summary", default="", namespaces=ns).strip(),
                "authors": authors,
                "published": entry.findtext("atom:published", default="", namespaces=ns),
                "categories": categories,
            }
        )
    return rows

for row in search_arxiv("all:multimodal AND cat:cs.CV", max_results=3):
    print(row["title"])

Example AI And ML Queries

  • `all:chain-of-thought AND cat:cs.AI`
  • `all:instruction tuning AND cat:cs.CL`
  • `all:reward modeling AND cat:cs.LG`
  • `all:vision transformer AND cat:cs.CV`
  • `all:mixture of experts AND cat:stat.ML`
  • `ti:retrieval augmented generation`
  • `abs:alignment AND cat:cs.AI`

Practical Retrieval Workflow

1. Search broadly w

Read more
Ships withhermes-ccc

Hermes Agent, faithfully ported to Claude Code Channel (CCC). hermes-CCC brings the power of Hermes Agent by NousResearch into Claude Code's native skill system — no separate process, no OAuth, no lock-in. Everything runs inside Claude Code.

Get the whole plugin

Other skills on hermes-ccc.