Skip to main content
Glama
emi-dm

ArxivSearcher MCP Server

by emi-dm

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
NameRequiredDescriptionDefault
author_nameYes
max_resultsNo
categoryNo
start_dateNo
end_dateNo

Implementation Reference

  • 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, }
  • 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."

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/emi-dm/Arxiv-MCP'

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