Skip to main content
Glama
h-lu
by h-lu

search_biorxiv

Search biology preprints on bioRxiv by category to find recent research before peer review. Use categories like neuroscience or genetics to discover new findings.

Instructions

Search biology preprints on bioRxiv.

USE THIS TOOL WHEN: - Searching for cutting-edge biology research (preprints) - You need the latest findings before peer review - Searching by CATEGORY, not keyword (see below) DOMAIN: Molecular Biology, Cell Biology, Genetics, Neuroscience, Bioinformatics, Evolutionary Biology, Microbiology, etc. NOTE: bioRxiv search uses CATEGORY names, not keywords. Categories: 'neuroscience', 'cell_biology', 'genetics', 'genomics', 'bioinformatics', 'cancer_biology', 'immunology', etc. WORKFLOW: 1. search_biorxiv(category) -> get DOI 2. download_biorxiv(doi) or read_biorxiv_paper(doi) Args: query: Category name (e.g., 'neuroscience', 'cell_biology'). max_results: Number of results (default: 10). Returns: List of recent preprints in that category. Example: search_biorxiv("neuroscience", max_results=5)

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryYes
max_resultsNo

Implementation Reference

  • The MCP tool handler for search_biorxiv. Decorated with @mcp.tool() for registration. Defines input schema (query: str, max_results: int=10) and delegates to _search('biorxiv', ...) using the BioRxivSearcher instance.
    @mcp.tool() async def search_biorxiv(query: str, max_results: int = 10) -> List[Dict]: """Search biology preprints on bioRxiv. USE THIS TOOL WHEN: - Searching for cutting-edge biology research (preprints) - You need the latest findings before peer review - Searching by CATEGORY, not keyword (see below) DOMAIN: Molecular Biology, Cell Biology, Genetics, Neuroscience, Bioinformatics, Evolutionary Biology, Microbiology, etc. NOTE: bioRxiv search uses CATEGORY names, not keywords. Categories: 'neuroscience', 'cell_biology', 'genetics', 'genomics', 'bioinformatics', 'cancer_biology', 'immunology', etc. WORKFLOW: 1. search_biorxiv(category) -> get DOI 2. download_biorxiv(doi) or read_biorxiv_paper(doi) Args: query: Category name (e.g., 'neuroscience', 'cell_biology'). max_results: Number of results (default: 10). Returns: List of recent preprints in that category. Example: search_biorxiv("neuroscience", max_results=5) """ return await _search('biorxiv', query, max_results)
  • Core implementation of the search logic in BioRxivSearcher.search(). Queries bioRxiv API with category filter, paginates results, parses into Paper objects with rate limiting and retries.
    def search(self, query: str, max_results: int = 10, days: int = 30) -> List[Paper]: """搜索 bioRxiv 论文 Args: query: 分类名称(如 "cell biology", "neuroscience") max_results: 最大返回数量 days: 搜索最近 N 天的论文 Returns: List[Paper]: 论文列表 """ end_date = datetime.now().strftime('%Y-%m-%d') start_date = (datetime.now() - timedelta(days=days)).strftime('%Y-%m-%d') # 格式化分类 category = query.lower().replace(' ', '_') papers = [] cursor = 0 while len(papers) < max_results: url = f"{self.BASE_URL}/{start_date}/{end_date}/{cursor}" if category: url += f"?category={category}" response = self._make_request(url) if not response: break try: data = response.json() collection = data.get('collection', []) except Exception as e: logger.error(f"Failed to parse response: {e}") break if not collection: break for item in collection: if len(papers) >= max_results: break paper = self._parse_item(item) if paper: papers.append(paper) if len(collection) < 100: break # 没有更多结果 cursor += 100 logger.info(f"Found {len(papers)} papers for query: {query}") return papers[:max_results]
  • Global SEARCHERS dictionary instantiates singleton BioRxivSearcher() instance mapped to 'biorxiv' key, used by _search to dispatch calls.
    SEARCHERS = { 'arxiv': ArxivSearcher(), 'pubmed': PubMedSearcher(), 'biorxiv': BioRxivSearcher(), 'medrxiv': MedRxivSearcher(), 'google_scholar': GoogleScholarSearcher(), 'iacr': IACRSearcher(), 'semantic': SemanticSearcher(), 'crossref': CrossRefSearcher(), 'repec': RePECSearcher(), }
  • Generic _search helper function called by search_biorxiv handler. Retrieves BioRxivSearcher by name, invokes its search method, converts Papers to dicts.
    async def _search( searcher_name: str, query: str, max_results: int = 10, **kwargs ) -> List[Dict]: """通用搜索函数""" searcher = SEARCHERS.get(searcher_name) if not searcher: logger.error(f"Unknown searcher: {searcher_name}") return [] try: papers = searcher.search(query, max_results=max_results, **kwargs) return [paper.to_dict() for paper in papers] except Exception as e: logger.error(f"Search failed for {searcher_name}: {e}") return []

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/h-lu/paper-search-mcp'

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