search_by_author
Find academic papers by a specific author on arXiv, with options to filter by category, date range, and limit results.
Instructions
Search papers by a specific author.
:param author_name: Name of the author to search for :param max_results: Maximum number of results :param category: Optional category filter (e.g., 'cs.SE', 'cs.AI') :param start_date: Optional start date filter (YYYY-MM-DD or YYYY) :param end_date: Optional end date filter (YYYY-MM-DD or YYYY)
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| author_name | Yes | ||
| max_results | No | ||
| category | No | ||
| start_date | No | ||
| end_date | No |
Implementation Reference
- arxiv_searcher/arxiv_mcp.py:307-379 (handler)Primary synchronous handler for the 'search_by_author' MCP tool. Constructs arXiv query using 'au:"author"' and optional filters, fetches results, and formats them into a dictionary.def search_by_author( author_name: str, max_results: int = 20, category: str | None = None, start_date: str | None = None, end_date: str | None = None, ) -> dict: """ Search papers by a specific author. :param author_name: Name of the author to search for :param max_results: Maximum number of results :param category: Optional category filter (e.g., 'cs.SE', 'cs.AI') :param start_date: Optional start date filter (YYYY-MM-DD or YYYY) :param end_date: Optional end date filter (YYYY-MM-DD or YYYY) """ query_parts = [f'au:"{author_name}"'] if category: query_parts.append(f"cat:{category}") # Add date range if specified if start_date or end_date: start = "19910814" if start_date: try: dt = datetime.strptime(start_date, "%Y-%m-%d") except ValueError: dt = datetime.strptime(start_date, "%Y") start = dt.strftime("%Y%m%d") end = datetime.now().strftime("%Y%m%d") if end_date: try: dt = datetime.strptime(end_date, "%Y-%m-%d") except ValueError: dt = datetime.strptime(end_date, "%Y") dt = dt.replace(month=12, day=31) end = dt.strftime("%Y%m%d") query_parts.append(f"submittedDate:[{start} TO {end}]") final_query = " AND ".join(query_parts) print(f"[arxiv-search] Author query: {final_query}") search = arxiv.Search( query=final_query, max_results=max_results, sort_by=arxiv.SortCriterion.SubmittedDate, sort_order=arxiv.SortOrder.Descending, ) results = [] for r in search.results(): results.append( { "title": r.title, "authors": [a.name for a in r.authors], "summary": r.summary, "pdf_url": r.pdf_url, "published_date": r.published.strftime("%Y-%m-%d"), "arxiv_id": r.entry_id.split("/")[-1], "categories": r.categories, } ) return { "author": author_name, "query_used": final_query, "total_results": len(results), "results": results, }
- Asynchronous handler for the 'search_by_author' MCP tool in the remote version. Identical logic to the synchronous version but async.async def search_by_author( author_name: str, max_results: int = 20, category: str | None = None, start_date: str | None = None, end_date: str | None = None, ) -> dict: """ Search papers by a specific author. :param author_name: Name of the author to search for :param max_results: Maximum number of results :param category: Optional category filter (e.g., 'cs.SE', 'cs.AI') :param start_date: Optional start date filter (YYYY-MM-DD or YYYY) :param end_date: Optional end date filter (YYYY-MM-DD or YYYY) """ query_parts = [f'au:"{author_name}"'] if category: query_parts.append(f"cat:{category}") # Add date range if specified if start_date or end_date: start = "19910814" if start_date: try: dt = datetime.strptime(start_date, "%Y-%m-%d") except ValueError: dt = datetime.strptime(start_date, "%Y") start = dt.strftime("%Y%m%d") end = datetime.now().strftime("%Y%m%d") if end_date: try: dt = datetime.strptime(end_date, "%Y-%m-%d") except ValueError: dt = datetime.strptime(end_date, "%Y") dt = dt.replace(month=12, day=31) end = dt.strftime("%Y%m%d") query_parts.append(f"submittedDate:[{start} TO {end}]") final_query = " AND ".join(query_parts) print(f"[arxiv-search] Author query: {final_query}") search = arxiv.Search( query=final_query, max_results=max_results, sort_by=arxiv.SortCriterion.SubmittedDate, sort_order=arxiv.SortOrder.Descending, ) results = [] for r in search.results(): results.append( { "title": r.title, "authors": [a.name for a in r.authors], "summary": r.summary, "pdf_url": r.pdf_url, "published_date": r.published.strftime("%Y-%m-%d"), "arxiv_id": r.entry_id.split("/")[-1], "categories": r.categories, } ) return { "author": author_name, "query_used": final_query, "total_results": len(results), "results": results, }
- arxiv_searcher/arxiv_mcp.py:21-24 (helper)Helper prompt generator named 'search_by_author' that creates a natural language prompt string for searching papers by author.def search_by_author(author_name: str) -> str: """Generates a prompt to search for papers by an author.""" return f"Search for the latest papers by '{author_name}' on Arxiv."
- Helper prompt generator named 'search_by_author' that creates a natural language prompt string for searching papers by author.def search_by_author(author_name: str) -> str: """Generates a prompt to search for papers by an author.""" return f"Search for the latest papers by '{author_name}' on Arxiv."