list_papers
Retrieve available arXiv papers to search, download, or read scientific research through the MCP interface.
Instructions
List all existing papers available as resources
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
No arguments | |||
Implementation Reference
- The main asynchronous handler function that executes the list_papers tool: lists local papers, fetches metadata from arXiv API, formats as JSON.async def handle_list_papers( arguments: Optional[Dict[str, Any]] = None, ) -> List[types.TextContent]: """Handle requests to list all stored papers.""" try: papers = list_papers() client = arxiv.Client() results = client.results(arxiv.Search(id_list=papers)) response_data = { "total_papers": len(papers), "papers": [ { "title": result.title, "summary": result.summary, "authors": [author.name for author in result.authors], "links": [link.href for link in result.links], "pdf_url": result.pdf_url, } for result in results ], } return [ types.TextContent(type="text", text=json.dumps(response_data, indent=2)) ] except Exception as e: return [types.TextContent(type="text", text=f"Error: {str(e)}")]
- Defines the MCP Tool object for list_papers, including name, description, and empty input schema (no parameters required).list_tool = types.Tool( name="list_papers", description="List all existing papers available as resources", inputSchema={ "type": "object", "properties": {}, "required": [], }, )
- src/arxiv_mcp_server/server.py:41-45 (registration)Registers the list_papers tool schema (via 'list_tool') with the MCP server by including it in the response to list_tools().@server.list_tools() async def list_tools() -> List[types.Tool]: """List available arXiv research tools.""" return [search_tool, download_tool, list_tool, read_tool]
- src/arxiv_mcp_server/server.py:56-57 (registration)Maps tool name 'list_papers' to its handler function in the server's call_tool dispatcher.elif name == "list_papers": return await handle_list_papers(arguments)
- Helper function that scans the storage directory for downloaded paper markdown files and returns their IDs.def list_papers() -> list[str]: """List all stored paper IDs.""" return [p.stem for p in Path(settings.STORAGE_PATH).glob("*.md")]