Skip to main content
Glama
jerpint

paperpal

by jerpint

semantic_search_papers_on_huggingface

Search HuggingFace papers using semantic queries to find relevant academic research based on meaning rather than keywords.

Instructions

Search for papers on HuggingFace using semantic search.

Args:
    query (str): The query term to search for. It will automatically determine if it should use keywords or a natural language query, so format your queries accordingly.
    top_n (int): The number of papers to return. Default is 10, but you can set it to any number.

Returns:
    str: A list of papers with the title, summary, ID, and upvotes.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
queryYes
top_nNo

Implementation Reference

  • The main handler function for the 'semantic_search_papers_on_huggingface' tool. It is registered via the @mcp.tool() decorator, performs the semantic search using a helper function, formats the papers list, and returns it as a string.
    @mcp.tool()
    async def semantic_search_papers_on_huggingface(query: str, top_n: int = 10) -> str:
        """Search for papers on HuggingFace using semantic search.
    
        Args:
            query (str): The query term to search for. It will automatically determine if it should use keywords or a natural language query, so format your queries accordingly.
            top_n (int): The number of papers to return. Default is 10, but you can set it to any number.
    
        Returns:
            str: A list of papers with the title, summary, ID, and upvotes.
        """
        papers: list[HuggingFacePaper] = semantic_search_huggingface_papers(query, top_n)
    
        return stringify_papers(papers)
  • Helper utility to convert a list of paper objects (Arxiv or HuggingFace) into a formatted string output used by the tool.
    def stringify_papers(papers: list[ArxivPaper | HuggingFacePaper]) -> str:
        """Format a list of papers into a string."""
    
        papers_str = "\n---\n".join([str(paper) for paper in papers])
        return f"List of papers:\n---\n{papers_str}\n---\n"
  • Pydantic BaseModel schema defining the structure of HuggingFace paper data, used in the tool's output.
    class HuggingFacePaper(BaseModel):
        title: str
        summary: str
        arxiv_id: str
        upvotes: int
    
        def __str__(self) -> str:
            return f"Title: {self.title}\nSummary: {self.summary}\nID: {self.arxiv_id}\nUpvotes: {self.upvotes}"
  • Core helper function that queries the HuggingFace papers API with the given query, parses the top_n results into HuggingFacePaper models, handles errors.
    def semantic_search_huggingface_papers(query: str, top_n: int) -> list[HuggingFacePaper]:
        """Search for papers on HuggingFace."""
    
        url = f"https://huggingface.co/api/papers/search?q={query}"
    
        try:
            response = httpx.get(url)
            response.raise_for_status()
            papers_json = response.json()
            papers: list[HuggingFacePaper] = [parse_paper(paper) for paper in papers_json[:top_n]]
    
            return papers
    
        except Exception as e:
            return [f"Error fetching papers from HuggingFace. Try again later. {e}"]
  • Utility helper to parse raw JSON dict from HuggingFace API into a HuggingFacePaper model instance.
    def parse_paper(paper: dict) -> HuggingFacePaper:
        """Parse a paper from the HuggingFace API response."""
        return HuggingFacePaper(
            title=paper['paper']["title"],
            summary=paper['paper']["summary"],
            arxiv_id=paper['paper']["id"],
            upvotes=paper['paper']["upvotes"],
        )

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/jerpint/paperpal'

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