semantic-scholar-mcp
Provides tools to search for academic papers, retrieve paper details, author information, and generate formatted citations using the Semantic Scholar API.
Click on "Deploy Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@semantic-scholar-mcpsearch for recent papers on reinforcement learning"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
Semantic Scholar MCP Server
Note: A lightweight CLI alternative is available at
semantic-scholar-cli. It is designed for LLM tool-use workflows with strict typed inputs, stable JSON envelopes, and small default payloads — usable without an MCP server.
A Model Context Protocol (MCP) server that provides access to Semantic Scholar's academic paper database through their API.
Features
Paper Search: Search for academic papers with filters for year, fields of study, and open access
Paper Details: Get comprehensive information about specific papers including abstracts, authors, and citation counts
Author Information: Retrieve detailed author data including affiliations, h-index, and citation metrics
Citation Export: Generate citations in multiple formats (BibTeX, APA, MLA, Chicago)
Related MCP server: semanticscholar-mcp
Usage
Get API Key
While the Semantic Scholar API can be used without authentication, having an API key provides higher rate limits. To get an API key:
Visit Semantic Scholar API
Request an API key
Add to Claude Code configuration
Run the following command to add the Semantic Scholar MCP server to your project-scope Claude Code configuration:
claude mcp add semantic-scholar-mcp -s project -e SEMANTIC_SCHOLAR_API_KEY="your-api-key-here" -- uv run --with "git+https://github.com/FujishigeTemma/semantic-scholar-mcp" semantic-scholar-mcp serveOr manually add it to your .mcp.json configuration file:
{
"mcpServers": {
"semantic-scholar-mcp": {
"type": "stdio",
"command": "uv",
"args": [
"run",
"--with",
"git+https://github.com/FujishigeTemma/semantic-scholar-mcp",
"semantic-scholar-mcp",
"serve"
],
"env": {
"SEMANTIC_SCHOLAR_API_KEY": "your-api-key-here"
}
}
}
}Available Tools
search_paper - Search for papers
Required:
query(search terms)Optional:
fields,limit,offset,year,fieldsOfStudy,openAccessPdf
get_paper - Get detailed paper information
Required:
paper_id(supports multiple ID types: DOI, ArXiv ID, S2 Paper ID, etc.)Optional:
fields(customize returned data, see: Field Customization)
get_authors - Get author information for a paper
Required:
paper_idOptional:
fields,limit,offset
get_citation - Generate formatted citations
Required:
paper_idOptional:
format(bibtex, apa, mla, chicago)
CLI Examples
Search for papers:
semantic-scholar-mcp tools search_paper "machine learning" --limit 5 --year "2020-2023"Get paper details:
semantic-scholar-mcp tools get_paper "10.1038/nature12373"Get authors for a paper:
semantic-scholar-mcp tools get_authors "649def34f8be52c8b66281af98ae884c09aef38b"Generate BibTeX citation:
semantic-scholar-mcp tools get_citation "649def34f8be52c8b66281af98ae884c09aef38b" --format bibtexField Customization
All tools support a fields parameter to customize the returned data. This allows you to request only the information you need, reducing response size and improving performance.
Paper Fields (for search_paper and get_paper)
Basic fields:
paperId- Unique paper identifiertitle- Paper titleabstract- Paper abstractyear- Publication yearpublicationDate- Full publication date
Author information:
authors- List of authors (returnsauthorIdandnameby default)authors.authorId- Author's unique identifierauthors.name- Author's nameauthors.affiliations- Author's institutional affiliationsauthors.citationCount- Author's total citation countauthors.hIndex- Author's h-index
Citation and reference data:
citationCount- Number of times this paper has been citedreferenceCount- Number of references in this papercitations- List of papers that cite this paperreferences- List of papers referenced by this paper
Publication details:
journal- Journal information (name, volume, pages, etc.)venue- Publication venuepublicationTypes- Types of publication (e.g., JournalArticle, Conference)fieldsOfStudy- Academic fields (e.g., Computer Science, Medicine)s2FieldsOfStudy- Semantic Scholar's field classifications
Additional metadata:
doi- Digital Object IdentifierarxivId- ArXiv identifierurl- Paper URLopenAccessPdf- Open access PDF informationembedding- Paper embedding vectors (for similarity analysis)
Author Fields (for get_authors)
authorId- Unique author identifiername- Author's nameaffiliations- Institutional affiliationscitationCount- Total citation counthIndex- h-index metricpaperCount- Number of papers publishedurl- Author's profile URL
Example Field Usage
Get basic paper information:
semantic-scholar-mcp tools search_paper "machine learning" --fields "paperId,title,year,citationCount"Get detailed paper with author affiliations:
semantic-scholar-mcp tools get_paper "10.1038/nature12373" --fields "title,abstract,authors.name,authors.affiliations,journal,year"Get comprehensive author information:
semantic-scholar-mcp tools get_authors "649def34f8be52c8b66281af98ae884c09aef38b" --fields "authorId,name,affiliations,citationCount,hIndex,paperCount"Development
Setting up the development environment
uv sync
uv run pytest tests/
uv run ruff format .
uv run ruff check . --fix
uv run ty checkProject Structure
semantic-scholar-mcp/
src/
semantic_scholar_mcp/
__init__.py
server.py # Main server implementation
cli.py # CLI interface
tests/ # Test files
pyproject.toml # Project configuration
README.md # This fileAPI Rate Limits
Without API key: 100 requests per 5 minutes
With API key: 1 request per second (higher limits available on request)
Supported Paper ID Types
The API supports various paper identifier formats:
Semantic Scholar ID (e.g., "649def34f8be52c8b66281af98ae884c09aef38b")
DOI (e.g., "10.1038/nature12373")
ArXiv ID (e.g., "arXiv:2106.15928")
MAG ID
ACL ID
PubMed ID
Corpus ID
License
MIT License
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
Acknowledgments
This project uses the Semantic Scholar API to access academic paper data.
Available Tools
4 toolsget_authorsB
Get authors information for a specific paper. Use 'fields' parameter to customize author data returned.
| Name | Required | Description | Default |
|---|---|---|---|
| paper_id | Yes | The following types of IDs are supported: - `<sha>` - a Semantic Scholar ID, e.g. `649def34f8be52c8b66281af98ae884c09aef38b` - `CorpusId:<id>` - a Semantic Scholar numerical ID, e.g. `CorpusId:215416146` - `DOI:<doi>` - a Digital Object Identifier, e.g. `DOI:10.18653/v1/N18-3011` - `ARXIV:<id>` - arXiv.rg, e.g. `ARXIV:2106.15928` - `MAG:<id>` - Microsoft Academic Graph, e.g. `MAG:112218234` - `ACL:<id>` - Association for Computational Linguistics, e.g. `ACL:W12-3903` - `PMID:<id>` - PubMed/Medline, e.g. `PMID:19872477` - `PMCID:<id>` - PubMed Central, e.g. `PMCID:2323736` - `URL:<url>` - URL from one of the sites listed below, e.g. `URL:https://arxiv.org/abs/2106.15928v1` URLs are recognized from the following sites: - semanticscholar.org - arxiv.org - aclweb.org - acm.org - biorxiv.org | |
| fields | No | A comma-separated list of the fields to be returned. The authorId field is always returned. See the resource 'semantic-scholar://fields/author' for available fields. Examples: - `name,affiliations,papers` - `url,papers.year,papers.authors` | authorId,name,affiliations,citationCount,hIndex |
| offset | No | Used for pagination. When returning a list of results, start with the element at this position in the list. | |
| limit | No | The maximum number of results to return. Maximum is 1000. |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden for behavioral disclosure. It only states the purpose and that fields can be customized, but omits information on pagination, rate limits, return structure, or any side effects.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at two sentences, front-loading the purpose and essential customization hint without any superfluous information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the complexity (4 parameters, no output schema, no annotations), the description is insufficient. It fails to describe that the tool returns a list of authors, the default behavior of pagination, or what the response includes.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, providing clear descriptions for all 4 parameters. The description adds minor context about the fields parameter but does not substantially improve understanding beyond the schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool retrieves author information for a specific paper, differentiating it from siblings like get_citation, get_paper, and search_paper. It also mentions the fields parameter for customization.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides no guidance on when to use this tool versus alternatives, nor does it mention any prerequisites or exclusions. The agent is left to infer usage from the name and siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_citationB
Get citation information in various formats.
| Name | Required | Description | Default |
|---|---|---|---|
| paper_id | Yes | The following types of IDs are supported: - `<sha>` - a Semantic Scholar ID, e.g. `649def34f8be52c8b66281af98ae884c09aef38b` - `CorpusId:<id>` - a Semantic Scholar numerical ID, e.g. `CorpusId:215416146` - `DOI:<doi>` - a Digital Object Identifier, e.g. `DOI:10.18653/v1/N18-3011` - `ARXIV:<id>` - arXiv.rg, e.g. `ARXIV:2106.15928` - `MAG:<id>` - Microsoft Academic Graph, e.g. `MAG:112218234` - `ACL:<id>` - Association for Computational Linguistics, e.g. `ACL:W12-3903` - `PMID:<id>` - PubMed/Medline, e.g. `PMID:19872477` - `PMCID:<id>` - PubMed Central, e.g. `PMCID:2323736` - `URL:<url>` - URL from one of the sites listed below, e.g. `URL:https://arxiv.org/abs/2106.15928v1` URLs are recognized from the following sites: - semanticscholar.org - arxiv.org - aclweb.org - acm.org - biorxiv.org | |
| format | No | Citation format: 'bibtex', 'apa', 'mla', or 'chicago' | bibtex |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only states 'Get citation information' with no mention of side effects, permissions, or response characteristics, leaving the agent uninformed about potential constraints.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single, direct sentence with no superfluous words. It is front-loaded and efficiently communicates the tool's purpose.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's simplicity (2 parameters, no output schema), the description is adequate but could be more complete by indicating the return format (e.g., raw text string) or mentioning that citation text is returned.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, and the schema already provides thorough parameter descriptions for paper_id and format. The description adds no additional parameter semantics beyond what the schema offers, meeting the baseline.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Get citation information' and the resource 'in various formats,' but does not explicitly distinguish from sibling tools like get_paper or get_authors, though the name implies a focus on citations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is provided on when to use this tool versus alternatives such as get_paper for full paper details or search_paper for discovery. The description lacks context about appropriate use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_paperB
Get detailed information about a specific paper. Use 'fields' parameter to customize returned data.
| Name | Required | Description | Default |
|---|---|---|---|
| paper_id | Yes | The following types of IDs are supported: - `<sha>` - a Semantic Scholar ID, e.g. `649def34f8be52c8b66281af98ae884c09aef38b` - `CorpusId:<id>` - a Semantic Scholar numerical ID, e.g. `CorpusId:215416146` - `DOI:<doi>` - a Digital Object Identifier, e.g. `DOI:10.18653/v1/N18-3011` - `ARXIV:<id>` - arXiv.rg, e.g. `ARXIV:2106.15928` - `MAG:<id>` - Microsoft Academic Graph, e.g. `MAG:112218234` - `ACL:<id>` - Association for Computational Linguistics, e.g. `ACL:W12-3903` - `PMID:<id>` - PubMed/Medline, e.g. `PMID:19872477` - `PMCID:<id>` - PubMed Central, e.g. `PMCID:2323736` - `URL:<url>` - URL from one of the sites listed below, e.g. `URL:https://arxiv.org/abs/2106.15928v1` URLs are recognized from the following sites: - semanticscholar.org - arxiv.org - aclweb.org - acm.org - biorxiv.org | |
| fields | No | A comma-separated list of the fields to be returned. The paperId field is always returned. See the resource 'semantic-scholar://fields/paper' for available fields. Examples: - `title,url` - `title,embedding.specter_v2` - `title,authors,citations.title,citations.abstract` | paperId,title,abstract,authors,year,citationCount,referenceCount,fieldsOfStudy,publicationTypes,publicationDate,journal,openAccessPdf |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden for transparency. It states the tool 'get[s] detailed information' but does not disclose potential error cases, return format, rate limits, or authentication needs. The input schema is detailed, but behavioral traits are lacking.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description consists of two short, front-loaded sentences with no unnecessary words. Every sentence contributes to understanding the tool's purpose and a key feature.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the absence of an output schema and annotations, the description should elaborate on what 'detailed information' includes (e.g., fields, structure). It lacks sufficient context about return values and error handling, making it incomplete for agents needing to interpret results.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so the schema already explains both parameters. The description adds minor value by mentioning the 'fields' parameter for customization, but it does not provide additional semantics beyond what the schema offers.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool's purpose: 'Get detailed information about a specific paper.' It also mentions a key parameter for customization, distinguishing it from siblings like 'search_paper' (for searching) and 'get_authors' (for authors).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description advises using the 'fields' parameter to customize data, which is helpful. However, it does not provide explicit guidance on when to use this tool versus alternatives like 'search_paper' or when not to use it (e.g., if only a count is needed).
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_paperB
Search for papers using Semantic Scholar. Use 'fields' parameter to customize returned data
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | A plain-text search query string. - No special query syntax is supported - Hyphenated query terms yield no matches (replace it with space to find matches). | |
| fields | No | A comma-separated list of the fields to be returned. The paperId field is always returned. See the resource 'semantic-scholar://fields/paper' for available fields. Examples: - `title,url` - `title,embedding.specter_v2` - `title,authors,citations.title,citations.abstract` | paperId,title,abstract,authors,year,citationCount |
| publicationTypes | No | A comma-separated list of publication types to include. Available types: Review, JournalArticle, CaseReort, ClinicalTrial, Conference, Dataset, Editorial, LettersAndComments, MetaAnalysis, News, Study, Book, BookSection Example: `Review,JournalArticle` will return papers with publication types Review and/or JournalArticle | |
| openAccessPdf | No | Restricts results to only include papers with a public PDF. | |
| minCitationCount | No | Restricts results to only include papers with the minimum number of citations. | |
| publicationDateOrYear | No | Restricts results to the given range of publication dates or years (inclusive). Accepts the format `<startDate>:<endDate>` with each date in `YYYY-MM-DD` format. Each term is optional, allowing for specific dates, fixed ranges, or open-ended ranges. In addition, prefixes are suported as a shorthand, e.g. `2020-06` matches all dates in June 2020. Specific dates are not known for all papers, so some records returned with this filter will have a `null` value for publicationDate. `year`, however, will always be present. For records where a specific publication date is not known, they will be treated as if published on January 1st of their publication year. Examples: - `2019-03-05` on March 3rd, 2019 - `2019-03` during March 2019 - `2019` during 2019 - `2016-03-05:2020-06-06` as early as March 5th, 2016 or as late as June 6th, 2020 - `1981-08-25:` on or after August 25th, 1981 - `:2015-01` before or on January 31st, 2015 - `2015:2020` between January 1st, 2015 and December 31st, 2020 | |
| year | No | Restricts results to the given publication year or range of years (inclusive). Examples: - `2019` in 2019 - `2016-2020` as early as 2016 or as late as 2020 - `2010-` during or after 2010 - `-2015` before or during 2015 | |
| venue | No | Restricts results to papers published in the given venues, formatted as a comma-separated list. Input could also be an ISO4 abbreviation. Examples include: - Nature - New England Journal of Medicine - Radiology - N. Engl. J. Med. Example: `Nature,Radiology` will return papers from venues Nature and/or Radiology. | |
| fieldsOfStudy | No | A Comma-separated list of fields of study to include. Available fields of study: Computer Science,Medicine,Chemistry,Biology,Materials Science,Physics,Geology,Psychology,Art,History,Geography,Sociology,Business,Political Science,Economics,Philosophy,Mathematics,Engineering,Environmental Science,Agricultural and Food Sciences,Education,Law,Linguistics Example: `Physics,Mathematics` will return papers with either Physics or Mathematics in their list of fields-of-study. | |
| offset | No | Starting position in the list of results | |
| limit | No | Maximum number of results to return (max: 100) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must cover behavioral traits. It mentions the API but omits details on rate limits, authentication, error handling, or sorting. The schema covers parameters but not behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Description is a single sentence, very concise and front-loaded. It wastes no words, though it could be slightly more structured to separate purpose from customization hint.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 11 parameters, no output schema, and no annotations, the description provides insufficient context. It does not explain output format, default behavior, or full capabilities. The schema partially compensates, but description lacks completeness for a complex search tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 100%, so baseline is 3. The description adds minimal context (e.g., 'Use fields parameter to customize') beyond what the schema already provides. No parameter enums or additional value added.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Description clearly states it searches papers using Semantic Scholar, specifying the resource and action. It distinguishes from sibling tools (get_authors, get_citation, get_paper) which are for individual retrieval, not search.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Description implies usage for searching papers but does not explicitly state when to prefer this tool over siblings or provide criteria for exclusion. The context is clear but lacks explicit guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.1.0- First observed
get_authors - First observed
get_citation - First observed
get_paper - First observed
search_paper
TDQS
Scored across 4 tools
Each tool targets a distinct aspect of scholarly data: searching papers, retrieving paper details, fetching author info, and obtaining citation formats. No overlap in functionality.
All tool names follow a consistent verb_noun pattern (get_authors, get_citation, get_paper, search_paper) using lowercase snake_case, making them predictable.
Four tools cover the core operations for a semantic scholar client (search, detail, authors, citations) without being excessive or insufficient.
The set covers primary use cases but lacks tools for listing citations or references of a paper, which are common scholarly queries. Still, the essential workflows are supported.
Maintenance
Related MCP Connectors
Academic research MCP server for paper search, citation checks, graphs, and deep research.
Related MCP Servers
- AlicenseNot gradedqualityCmaintenanceAn MCP server that enables academic research by searching Google Scholar, fetching paper content, and converting web pages to clean Markdown.1MIT
- AlicenseBqualityDmaintenanceMCP server that provides Semantic Scholar academic search capabilities, including paper search, detail query, citation analysis, author search, and intelligent recommendations.959 npm7MIT
- FlicenseNot gradedqualityDmaintenanceEnables searching and retrieving academic papers, authors, citations, and references from Semantic Scholar via an HTTP MCP server with caching and rate limiting.-
- AlicenseNot gradedqualityDmaintenanceAn MCP server for academic research combining local document search with Semantic Scholar API integration.MIT