search_iacr
Search for cryptography research papers on the IACR ePrint Archive to find open-access publications on encryption, blockchain, zero-knowledge proofs, and security protocols.
Instructions
Search cryptography papers on IACR ePrint Archive.
USE THIS TOOL WHEN:
- Searching for cryptography or security research
- You need papers on encryption, blockchain, zero-knowledge proofs
- Looking for security protocols, hash functions, signatures
DOMAIN: Cryptography ONLY - encryption, signatures, protocols,
blockchain, secure computation, zero-knowledge, hash functions.
All papers are FREE and open access with PDF download.
WORKFLOW:
1. search_iacr(query) -> get paper_id (e.g., '2024/123')
2. download_iacr(paper_id) or read_iacr_paper(paper_id)
Args:
query: Crypto terms (e.g., 'zero knowledge', 'homomorphic encryption').
max_results: Number of results (default: 10).
fetch_details: Get full metadata per paper (default: True).
Returns:
List of paper dicts with: paper_id, title, authors, abstract,
published_date, pdf_url.
Example:
search_iacr("post-quantum cryptography", max_results=5)
Input Schema
TableJSON Schema
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| max_results | No | ||
| fetch_details | No |
Implementation Reference
- paper_find_mcp/server.py:469-508 (handler)Primary MCP tool handler for 'search_iacr'. Delegates to IACRSearcher instance via SEARCHERS['iacr'].search() method.@mcp.tool() async def search_iacr( query: str, max_results: int = 10, fetch_details: bool = True ) -> List[Dict]: """Search cryptography papers on IACR ePrint Archive. USE THIS TOOL WHEN: - Searching for cryptography or security research - You need papers on encryption, blockchain, zero-knowledge proofs - Looking for security protocols, hash functions, signatures DOMAIN: Cryptography ONLY - encryption, signatures, protocols, blockchain, secure computation, zero-knowledge, hash functions. All papers are FREE and open access with PDF download. WORKFLOW: 1. search_iacr(query) -> get paper_id (e.g., '2024/123') 2. download_iacr(paper_id) or read_iacr_paper(paper_id) Args: query: Crypto terms (e.g., 'zero knowledge', 'homomorphic encryption'). max_results: Number of results (default: 10). fetch_details: Get full metadata per paper (default: True). Returns: List of paper dicts with: paper_id, title, authors, abstract, published_date, pdf_url. Example: search_iacr("post-quantum cryptography", max_results=5) """ searcher = SEARCHERS['iacr'] try: papers = searcher.search(query, max_results, fetch_details) return [paper.to_dict() for paper in papers] if papers else [] except Exception as e: logger.error(f"IACR search failed: {e}") return []
- paper_find_mcp/server.py:75-85 (registration)Global SEARCHERS dictionary instantiation including 'iacr': IACRSearcher() used by the handler.SEARCHERS = { 'arxiv': ArxivSearcher(), 'pubmed': PubMedSearcher(), 'biorxiv': BioRxivSearcher(), 'medrxiv': MedRxivSearcher(), 'google_scholar': GoogleScholarSearcher(), 'iacr': IACRSearcher(), 'semantic': SemanticSearcher(), 'crossref': CrossRefSearcher(), 'repec': RePECSearcher(), }
- paper_find_mcp/server.py:32-32 (helper)Import of IACRSearcher class.from .academic_platforms.iacr import IACRSearcher
- Core search logic in IACRSearcher.search(): performs HTTP search on eprint.iacr.org, parses HTML results with BeautifulSoup, optionally fetches details per paper.def search( self, query: str, max_results: int = 10, fetch_details: bool = True ) -> List[Paper]: """ Search IACR ePrint Archive Args: query: Search query string max_results: Maximum number of results to return fetch_details: Whether to fetch detailed information for each paper (slower but more complete) Returns: List[Paper]: List of paper objects """ papers = [] try: # Construct search parameters params = {"q": query} # Make request response = self.session.get(self.IACR_SEARCH_URL, params=params) if response.status_code != 200: logger.error(f"IACR search failed with status {response.status_code}") return papers # Parse results soup = BeautifulSoup(response.text, "html.parser") # Find all paper entries - they are divs with class "mb-4" results = soup.find_all("div", class_="mb-4") if not results: logger.info("No results found for the query") return papers # Process each result for i, item in enumerate(results): if len(papers) >= max_results: break logger.info(f"Processing paper {i+1}/{min(len(results), max_results)}") paper = self._parse_paper(item, fetch_details=fetch_details) if paper: papers.append(paper) except Exception as e: logger.error(f"IACR search error: {e}") return papers[:max_results]
- paper_find_mcp/server.py:470-472 (schema)Function signature defines input schema (query:str, max_results:int=10, fetch_details:bool=True) and output List[Dict] for MCP tool schema inference.async def search_iacr( query: str, max_results: int = 10, fetch_details: bool = True ) -> List[Dict]: