google-scholar-mcp is a hosted Model Context Protocol (MCP) server maintained by HasData, providing Claude, Cursor, Windsurf, and other MCP clients with read-only access to Google Scholar. Google Scholar itself has no public API; this service reads public Scholar pages visible to logged-out visitors and converts search results and citation blocks into structured JSON that agents can reason over, so users do not need to embed a browser or scraping library in their stack.
In terms of purpose, it is mainly aimed at scenarios that require programmatic retrieval of academic literature, tracking citation relationships, or obtaining standard citation formats. It provides three tools: Scholar search results, Scholar citation formats, and case opinions. Each successful call consumes 10 credits, and response size does not affect the price, so increasing num is a more economical way to expand a single search.
In terms of main capabilities, the search tool returns one page of Scholar results, including searchInformation (totalResults, queryDisplayed, and the time reported by Scholar), an organicResults array, and pagination. Each result carries position, resultId, title, link, snippet, a publicationInfo object, a resources array, citedBy, versions, relatedPagesLink, and citeHasdataLink. In addition to the original byline, publicationInfo.authors also lists authors for whom Scholar has a profile, each with name, a profile link, and authorId, making it easier to track by author rather than parse the byline. The two ids in citedBy and versions allow the tool to compose with itself: citedBy.citesId can be passed back to the cites parameter to traverse the citation graph, and versions.clusterId can be passed to the cluster parameter to view all indexed copies of the same paper. The citation tool returns citations (in five formats: MLA, APA, Chicago, Harvard, and Vancouverstrings) as well as links (export URLs for BibTeX, EndNote, RefMan, and RefWorks). The case tool returns a court opinion and the cases it cites: asSdt must be set to the case court scope (for example, 4), and search results will then include caseId and caseHasdataLink; the returned content includes caseResults' title, name, courtName, cert, the firstPage and lastPage of the printed opinion, dates separately listing argued and decided dates, shortCitations giving the case reporter citations, caseNumbers giving the docket numbers, and citedCases listing each case cited by the opinion along with its caseId.
In terms of usage, an MCP client and an API key from the HasData dashboard are required (free to create, no credit card needed). This is a remote server, and the simplest approach is to configure the URL and the x-api-key request header, with no container to run. Clients that support OAuth can add the URL as a connector and sign in, without writing the key into a configuration file. For clients that only support stdio, it can be connected through the lightweight launcher in the npm package @hasdata/google-scholar-mcp or the PyPI package hasdata-google-scholar-mcp; this launcher is a thin stdio bridge layer that reads the key from an environment variable and requires no build. The server URL is the same for all clients. The documentation provides configuration format examples for clients such as Claude Desktop, Cursor, Windsurf, and VS Code. The server also exposes 4 resources, each corresponding to a parameter that accepts a value from a fixed list, with URIs in the form hasdata://google_scholar/<parameter>; reading a resource is cheaper than learning the vocabulary through a rejected call, and it does not consume credits, and the list can be obtained without an API key.
In terms of applicable scenarios, these include retrieving papers on a specific topic sorted by citation count, tracking the citations of a paper and their year-over-year growth, obtaining a paper's BibTeX, filtering for review articles only, viewing all indexed versions of a paper and which ones have PDFs, and finding an author's recent work on a topic, among others. A prompt mentioning a paperThis usually requires two calls: one search to obtain its resultId, and one citation lookup; a hint about who cited a paper also requires two calls, because the second call reuses the citedBy.citesId from the first.
Regarding limitations, note: in the citation tool, q is a paper id (the resultId from search results, e.g. A7L9JolPKkoJ) rather than a query term; passing a title or DOI will not return useful results. citesId and clusterId may have the same value but are not interchangeable—one is used for cites to find papers that cite the paper, and the other is used for cluster to find copies of the paper. type appears only on some results; to determine whether a PDF exists, you should read resources[].fileFormat. The BibTeX link is a signed Scholar URL rather than BibTeX itself; the links array gives the address to fetch, and it carries a scisig token that expires, so it should be fetched promptly rather than stored long-term. totalResults is Scholar's rough estimate and should only be treated as an order-of-magnitude reference. Scholar counts citations, not quality, and indexes preprints, dissertations, and citation-only records; asVis: 1 can remove citation-only entries. Deep paging becomes thin; Scholar has limits on result set depth and will start repeating or blocking before the estimate suggests, so you should narrow with asYlo, asYhi, or asSdt rather than continually increasing start. Responses that carry data also include a requestMetadata.id used to support citations. The free tier provides 1,000 credits per month, requires no credit card, and at the base rate is approximately equivalent to 100 Scholar calls, renewing with the billing cycle. Paid plans start at $59 per month and include 200,000 credits (about 20,000 calls), with the unit price decreasing as usage increases. Regarding concurrency, the free tier allows 1 concurrent request, Startup 5, Basic 15, and Growth tiers 50 to 500; in unattended scenarios, you should back off and retry on 429. Requests returning non-200 are not billed, while successful calls are billed even if no results are found. HasData is not affiliated with Google, and Google Scholar is a trademark of its respective owners; the tool uses only public data, and users must ensure compliance with Google's terms andapplicable law. Author names, affiliations, and Scholar profile ids are personal data; the papers themselves remain subject to their respective licenses, and a link does not equal permission to redistribute a PDF.