fetch_papers
Retrieve recent arXiv research papers by category, date, or time period and store them locally for efficient access to titles and metadata.
Instructions
Fetch recent papers from arXiv API and store them in the local database.
Returns only fetched paper titles (not abstracts) to save context.
Use query_papers(entry_ids=[...], fields=["abstract"]) to retrieve abstracts for specific papers.
Args:
category: arXiv category (e.g. "cs.AI", "cs.CL", "stat.ML")
date: Fetch papers published on a specific date in YYYY-MM-DD format.
When provided, takes priority over num_days.
num_days: Number of days to look back (default: 3). Ignored when date is set.
max_results: Maximum number of papers to fetch (default: 100)Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| category | Yes | ||
| date | No | ||
| num_days | No | ||
| max_results | No |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| result | Yes |
Implementation Reference
- src/arxiv_mcp_server/server.py:50-77 (handler)The handler function for the `fetch_papers` MCP tool, which retrieves papers from arXiv and saves them to the database.
@mcp.tool() def fetch_papers( category: str, date: Optional[str] = None, num_days: int = 3, max_results: int = 100 ) -> str: """Fetch recent papers from arXiv API and store them in the local database. Returns only fetched paper titles (not abstracts) to save context. Use query_papers(entry_ids=[...], fields=["abstract"]) to retrieve abstracts for specific papers. Args: category: arXiv category (e.g. "cs.AI", "cs.CL", "stat.ML") date: Fetch papers published on a specific date in YYYY-MM-DD format. When provided, takes priority over num_days. num_days: Number of days to look back (default: 3). Ignored when date is set. max_results: Maximum number of papers to fetch (default: 100) """ logger.info( f"Fetching papers: category={category}, date={date}, days={num_days}, max={max_results}" ) papers = download_papers(category, num_days, max_results, date=date) db = _get_db() db.save_papers(papers) result: dict = {"status": "ok", "category": category, "papers_fetched": len(papers)} if date is not None: result["date"] = date else: result["num_days"] = num_days return json.dumps(result, ensure_ascii=False, indent=2)