Skip to main content
Glama

get_author_papers

Retrieve papers by specific authors from Google Scholar. Access paginated publication lists to build bibliographies and track academic research output.

Instructions

Get papers filtered by author name from Google Scholar search.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
authorYes
page_sizeNo
cursorNo

Output Schema

TableJSON Schema
NameRequiredDescriptionDefault

No arguments

Implementation Reference

  • Core implementation of get_author_papers tool. Contains the ScholarClient method that queries Google Scholar for papers by author, parses results, and returns an AuthorPapersResponse with papers, author info, and pagination cursor.
    def get_author_papers(
        self,
        author_query: str,
        page_size: int,
        start: int,
    ) -> AuthorPapersResponse:
        author_query = author_query.strip()
        if not author_query:
            raise ScholarClientError(
                code="invalid_request",
                message="Author query cannot be empty.",
                retryable=False,
            )
    
        html = self._request(
            SEARCH_URL,
            params={
                "hl": "en",
                "q": author_query,
                "as_sauthors": author_query,
                "start": start,
            },
        )
    
        papers = [
            item
            for item in parse_topic_results(html=html, page_size=page_size + 3)
            if not item.title.lower().startswith("user profiles for")
        ][:page_size]
    
        if not papers:
            raise ScholarClientError(
                code="author_not_found",
                message=f"No papers found for author '{author_query}'.",
                retryable=False,
            )
    
        next_cursor = str(start + page_size) if len(papers) >= page_size else None
    
        return AuthorPapersResponse(
            author_name=author_query,
            author_id=None,
            affiliation=None,
            papers=papers,
            next_cursor=next_cursor,
        )
  • Tool registration and MCP handler for get_author_papers. Decorated with @mcp.tool(), this function validates inputs, calls the ScholarClient, and formats the response using the ok() helper. Defines the tool interface with type hints (author, page_size, cursor).
    @mcp.tool()
    def get_author_papers(
        author: str,
        page_size: int = 10,
        cursor: str | None = None,
    ) -> dict[str, Any]:
        """Get papers filtered by author name from Google Scholar search."""
        author = author.strip()
        if not author:
            return fail("invalid_request", "author cannot be empty", retryable=False)
    
        try:
            start = _parse_cursor(cursor)
            size = _normalize_page_size(page_size)
        except ValueError as exc:
            return fail("invalid_request", str(exc), retryable=False)
    
        try:
            response = client.get_author_papers(author_query=author, page_size=size, start=start)
        except ScholarClientError as exc:
            return fail(exc.code, exc.message, retryable=exc.retryable, details=exc.details)
    
        return ok(
            {
                "author": {
                    "name": response.author_name,
                    "id": response.author_id,
                    "affiliation": response.affiliation,
                },
                "page_size": size,
                "cursor": str(start),
                "next_cursor": response.next_cursor,
                "source": "google_scholar",
                "results": [paper.to_dict() for paper in response.papers],
                "fetched_at": __import__("datetime").datetime.utcnow().isoformat() + "Z",
            }
        )
  • Response schema definition for get_author_papers. Dataclass defining the structure of the author papers response including author metadata, paper list, and pagination cursor.
    @dataclass
    class AuthorPapersResponse:
        author_name: str
        author_id: str | None
        affiliation: str | None
        papers: list[PaperResult]
        next_cursor: str | None
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description carries the full disclosure burden. It successfully identifies Google Scholar as the external data source, but fails to explain pagination behavior (how cursor/page_size interact), rate limiting, or result ordering. It provides minimal viable context but lacks operational details.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The single sentence is front-loaded and efficient, avoiding redundancy. However, given the 0% schema coverage and presence of pagination parameters, the extreme brevity becomes a liability rather than a virtue, as necessary parameter documentation is sacrificed for conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the core retrieval scenario adequately, and the existence of an output schema absolves it from explaining return values. However, with zero schema descriptions and pagination complexity, the failure to explain cursor-based pagination mechanics leaves a significant gap in contextual completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters2/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema description coverage is 0%, requiring the description to compensate. While it implies the 'author' parameter through 'filtered by author name,' it completely omits explanation of the pagination parameters 'cursor' and 'page_size,' leaving critical implementation details undocumented.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly identifies the resource (papers), the filtering mechanism (by author name), and the data source (Google Scholar). It implicitly distinguishes from sibling tool 'search_papers_by_topic' by specifying 'author name' as the filter criterion, though it could be stronger with an explicit comparison.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage context through 'filtered by author name,' suggesting when to use the tool (when seeking papers by a specific author). However, it lacks explicit guidance on when NOT to use it or direct comparison to the sibling 'search_papers_by_topic' for topic-based queries.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Install Server

Other Tools

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/ProPriyam/Scholar-MCP'

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