Literature Search Arxiv
Google DeepMindOfficialPublished by Google DeepMind
- Skill
- Tool integration
- Science and research
- Apache-2.0
- Low risk
- Has scripts
From the skill’s files
Taken from the skill’s own files (its description, section headings and stated usage). Not an AutoGineer summary, and not written by the author as one.
Search for scientific papers, preprints, and publications on arXiv. Extract metadata, abstracts, and download full-text PDFs or HTML versions of papers. Use when the user asks to find research papers, literature, or specific arXiv IDs. Search arXiv and return a clean JSON array of matching papers.
What it does
- Prerequisites
- Core Rules
- Utility Scripts
- Workflow
When to use it
- Use when the user asks to find research papers, literature, or specific arXiv IDs.
Advantages
The skill’s files do not state this.
Usage examples
The skill’s files do not state this.
Install
Download the skill as a ZIP:
https://mp-staging.autogineer.com/agent-skills/google-deepmind/literature-search-arxiv/downloadUnzip it into the cross-client skills folder of your project:
mkdir -p .agents/skills && unzip literature-search-arxiv.zip -d .agents/skills
Documentation by Google DeepMind
arXiv Search and Retrieval
Prerequisites
uv: Read theuvskill and follow its Setup instructions to ensureuvis installed and on PATH.User Notification: If .licenses/literature_search_arxiv_LICENSE.txt does not already exist in the workspace root directory then (1) prominently notify the user to check the terms at https://info.arxiv.org/help/api/index.html and to always check the license of the papers retrieved by the skill for any restrictions, then (2) create the file recording the notification text and timestamp.
Core Rules
Terms of Use: You MUST respect arXiv's Terms of Use.
Maximum 1 request every 3 seconds.
The provided utility scripts handle rate limiting automatically. Always use these scripts rather than writing your own curl/python requests.
If this skill is used, ensure this is mentioned in the output AND list the URLs of all papers that were used in producing the output.
Utility Scripts
1. Search and Extract Metadata
Search arXiv and return a clean JSON array of matching papers.
uv run scripts/search_arxiv.py --query "au:einstein AND ti:relativity" \
--max_results 5 2>/dev/null > /tmp/arxiv_search_results.jsonImportant: The tool outputs a large JSON result to stdout. Requesting 100+ results will produce a massive JSON that might exceed your context length. Limit
--max_results(e.g., 5-10) or paginate carefully using--start. Always redirect output to a file and parse it separately, otherwise terminal output will be truncated.
Returned Metadata: JSON results include id, title, summary, published,
authors, pdf_url, primary_category, doi, journal_ref, and comment.
Note: the doi field only contains DOI information in case the paper has an
external DOI and if only an arXiv-issued DOI exists, this is DOI is not
returned.
Options:
--query: Search string. See references/query_syntax.md for advanced syntax.--id_list: Comma-separated list of arXiv IDs to fetch directly (e.g.,1706.03762v5).--start: Pagination offset (default 0).--max_results: Number of results to return (default 10).--sort_by:relevance,lastUpdatedDate, orsubmittedDate. (Use--sort_by submittedDate --sort_order descendingfor the most recent papers).--sort_order:ascendingordescending.
2. Download Paper (PDF or HTML)
Download the full text of a paper to your local workspace for reading.
uv run scripts/download_paper.py --id 1706.03762 --format pdf --output attention.pdfOptions:
--id: The arXiv ID (e.g.,1706.03762or1706.03762v5).--format:pdforhtml. Note: HTML is only available for newer papers.--output: Filepath to save the downloaded document.
Important: when downloading papers, make sure you download them to a location where you do not overwrite other files and do not clutter existing directory structure.
3. Download Paper Source (tar.gz)
Download the LaTeX source files of a paper to your local workspace. Note that not all papers have source available.
uv run scripts/download_paper_source.py --id 2010.11645 --output source.tar.gzOptions:
--id: The arXiv ID (e.g.,2010.11645).--output: Filepath to save the downloaded tar.gz file.
Caution: Care should be exercised when untar'ing the downloaded file for security and to avoid cluttering your filesystem, as archives may contain many files or unexpected directory structures.
Safe Extraction Requirements: NEVER extract directly into your working directory! Always extract into a dedicated new directory:
bash mkdir paper_source && tar -xzf source.tar.gz -C paper_source
Reference
Advanced Query Syntax: See references/query_syntax.md for prefixes (au, ti, abs), booleans, and date filtering.
Workflow
Search for papers using
search_arxiv.py. Review the JSON summaries.If full text is needed, use
download_paper.pyto fetch the PDF or HTML.If downloading a PDF, verify the PDF is not empty or corrupted.
Read the downloaded file using standard file reading tools.
Files
- ATTRIBUTION.mdAdded by AutoGineer928 B
- LICENSELicence file added by AutoGineer11.1 KiB
- SKILL.md4.5 KiB
- references/citation.bib366 B
- references/query_syntax.md997 B
- scripts/download_paper.pyScript3.4 KiB
- scripts/download_paper_source.pyScript2.8 KiB
- scripts/search_arxiv.pyScript5.0 KiB
scripts/search_arxiv.py
# Copyright 2026 Google LLC
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
"""Searches the arXiv API and returns results in a clean JSON format.
This script allows querying the arXiv API using either a search query string
or a list of arXiv IDs. It parses the XML response and outputs a JSON object
containing the search results.
"""
# /// script
# requires-python = ">=3.10"
# dependencies = [
# "polite-http",
# ]
# ///
import argparse
import json
import sys
import urllib.parse
import xml.etree.ElementTree as ET
from polite_http import http_client
_BASE_URL = "http://export.arxiv.org/api/query?"
_CLIENT = http_client.HttpClient(_BASE_URL, qps=1.0 / 3.0)
def parse_args() -> argparse.Namespace:
"""Parses command-line arguments for the arXiv search script.
Returns:
argparse.Namespace: An object containing the parsed command-line arguments.
"""
parser = argparse.ArgumentParser(
description="Search arXiv API and return clean JSON"
)
parser.add_argument(
"--query",
type=str,
help="Search query string (e.g., 'au:einstein AND ti:relativity')",
)
parser.add_argument(
"--id_list", type=str, help="Comma-separated list of arXiv IDs"
)
parser.add_argument("--start", type=int, default=0, help="Pagination offset")
parser.add_argument(
"--max_results", type=int, default=10, help="Number of results to return"
)
parser.add_argument(
"--sort_by",
type=str,
choices=["relevance", "lastUpdatedDate", "submittedDate"],
help="Sort by",
)
parser.add_argument(
"--sort_order",
type=str,
choices=["ascending", "descending"],
help="Sort order",
)
return parser.parse_args()
def strip_namespace(tag: str) -> str:
if tag.startswith("{"):
return tag.split("}", 1)[1]
return tag
def search_arxiv(args: argparse.Namespace):
"""Searches the arXiv API and prints results as a JSON string.
Constructs a query to the arXiv API based on the provided arguments,
fetches the XML response, parses it, and prints a JSON object containing
the extracted paper information.
Args:
args: An argparse.Namespace object containing the search parameters (query,
id_list, start, max_results, sort_by, sort_order).
"""
params = {"start": args.start, "max_results": args.max_results}
if args.query:
params["search_query"] = args.query
if args.id_list:
params["id_list"] = args.id_list
if args.sort_by:
params["sortBy"] = args.sort_by
if args.sort_order:
params["sortOrder"] = args.sort_order
# Use quote_plus to ensure spaces become '+' as required by arXiv API
query_string = urllib.parse.urlencode(
params, quote_via=urllib.parse.quote_plus
)
url = _BASE_URL + query_string
results = []
xml_data = _CLIENT.fetch_bytes(url)
root = ET.fromstring(xml_data)
for entry in root.findall("{http://www.w3.org/2005/Atom}entry"):
paper = {}
authors = []
for child in entry:
tag = strip_namespace(child.tag)
if tag == "id":
# Extract just the ID part (e.g., http://arxiv.org/abs/2305.10601v1
# -> 2305.10601v1)
if child.text:
paper["id"] = child.text.split("/abs/")[-1]
elif tag == "title":
paper["title"] = (
child.text.replace("\n", " ").strip() if child.text else ""
)
elif tag == "summary":
paper["summary"] = (
child.text.replace("\n", " ").strip() if child.text else ""
)
elif tag == "published":
paper["published"] = child.text
elif tag == "author":
for name_node in child.findall("{http://www.w3.org/2005/Atom}name"):
authors.append(name_node.text)
elif tag == "link":
if child.get("title") == "pdf":
paper["pdf_url"] = child.get("href")
elif tag == "primary_category":
paper["primary_category"] = child.get("term")
elif tag in {"doi", "journal_ref", "comment"}:
paper[tag] = child.text
paper["authors"] = authors
results.append(paper)
print(
json.dumps(
{
"status": "success",
"results_count": len(results),
"papers": results,
},
indent=2,
)
)
if __name__ == "__main__":
main_args = parse_args()
if not main_args.query and not main_args.id_list:
print(
json.dumps(
{
"status": "error",
"message": "Must provide either --query or --id_list",
},
indent=2,
)
)
sys.exit(1)
search_arxiv(main_args)
Requirements and compatibility
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Kiro, OpenCode, Goose, Amp, Roo Code, JetBrains Junie, Factory Droid, Devin (ex-Windsurf), Mistral Vibe, OpenHands, Letta
“Works with” means the tool reads the open Agent Skills format; a skill written for one tool may use features others lack.
Needs: Needs Python
Security
What our scanner noticed· Low risk
- Scripts that your agent may run
This skill includes scripts that your agent may run. Read them before you use it.
A static scan is not a guarantee. Skills are third-party content: review a skill before you let an agent use it.
Attribution and licence
- Published by
- Google DeepMind
- Publisher
- Google DeepMind (Official)
- Source
- google-deepmind/science-skills · skills/literature_search_arxiv · commit 4de6786
- Licence
- Apache License 2.0 (redistribution allowed)
- LICENSE (added by AutoGineer from LICENSE)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by Google DeepMind.
Download ZIP
The ZIP holds the skill’s files, its licence files and an ATTRIBUTION.md. Download literature-search-arxiv.zip