import importlib __all__ = ['ArxivTool'] class ArxivTool(): dependencies = ["arxiv==2.1.3"] inputSchema = { "name": "ArxivTool", "description": "Searches arXiv for academic papers based on a query.", "parameters": { "type": "object", "properties": { "query": { "type": "string", "description": "Search query for papers on arXiv.", "examples":[ "superconductors gem5", "machine learning in healthcare", "quantum computing algorithms" ] }, "max_results": { "type": "integer", "description": "Maximum number of papers to retrieve. Default is 5.", "default": 5 } }, "required": ["query"], } } def run(self, **kwargs): query = kwargs.get("query") max_results = kwargs.get("max_results", 5) if not query: return { "status": "error", "message": "Missing required parameter: 'query'", "output": None } try: arxiv = importlib.import_module("arxiv") client = arxiv.Client() search = arxiv.Search( query=query, max_results=max_results, ) papers = [] for result in client.results(search): papers.append({ "title": result.title, "authors": [author.name for author in result.authors], "published": result.published.isoformat(), "summary": result.summary.strip(), "pdf_url": result.pdf_url, }) return { "status": "success", "message": f"Found {len(papers)} paper(s) on arXiv", "output": papers, } except Exception as e: return { "status": "error", "message": f"arXiv search failed: {str(e)}", "output": None, }