Semantic Scholar MCP Server
Semantic Scholar MCP Server
A comprehensive 14-tool MCP server for Semantic Scholar academic research workflows. Direct access to 200M+ papers from Semantic Scholar within Claude Desktop.
Installation
Option 1: One-Line Install (Recommended)
# No cloning needed — runs directly from PyPI
uvx s2-mcp-serverOption 2: Claude Code
claude mcp add semantic-scholar -- uvx s2-mcp-serverOption 3: Claude Desktop (Windows)
Add to %APPDATA%\Claude\claude_desktop_config.json:
{
"mcpServers": {
"semantic-scholar": {
"command": "uvx",
"args": ["s2-mcp-server"],
"env": {
"SEMANTIC_SCHOLAR_API_KEY": "your-key-here"
}
}
}
}Option 4: Claude Desktop (macOS)
Add to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"semantic-scholar": {
"command": "uvx",
"args": ["s2-mcp-server"],
"env": {
"SEMANTIC_SCHOLAR_API_KEY": "your-key-here"
}
}
}
}Option 5: pip / From Source
pip install s2-mcp-server
# or
git clone https://github.com/smaniches/semantic-scholar-mcp.git
cd semantic-scholar-mcp && pip install -e .Note: Get a free API key at semanticscholar.org/product/api. Without a key, you get rate-limited public access (1 req/sec).
Related MCP server: Semantic Scholar MCP Server
Configuration
API Key Options
You can provide your API key in two ways:
Environment Variable (recommended for persistent use):
export SEMANTIC_SCHOLAR_API_KEY="your-api-key-here"Per-Request Parameter (overrides env var):
{ "api_key": "your-api-key-here" }Caution: per-request
api_keyvalues are part of the tool-call arguments and may be visible in MCP transcripts, client logs, and the LLM's tool-call history depending on the client. For production use, prefer theSEMANTIC_SCHOLAR_API_KEYenvironment variable. Removal of the per-request parameter is tracked for v1.3.0.
Get a free API key at: https://www.semanticscholar.org/product/api
Claude Desktop Setup
Add to your Claude Desktop config file:
Windows: %APPDATA%\Claude\claude_desktop_config.json
macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
Linux: ~/.config/Claude/claude_desktop_config.json
{
"mcpServers": {
"semantic-scholar": {
"command": "python",
"args": ["-m", "semantic_scholar_mcp"],
"env": {
"SEMANTIC_SCHOLAR_API_KEY": "your-api-key-here"
}
}
}
}Then restart Claude Desktop.
Supported ID Formats
The server accepts the following paper identifier formats:
Format | Pattern | Example |
Semantic Scholar ID | 40-character hex |
|
DOI |
|
|
ArXiv |
|
|
PubMed |
|
|
Corpus ID |
|
|
ACL |
|
|
URL |
|
|
Tools Reference
1. semantic_scholar_search_papers
Search for academic papers with advanced filters.
Parameters:
Parameter | Type | Required | Description |
| string | Yes | Search query (supports AND, OR, NOT operators and "phrase search") |
| string | No | Year filter: |
| string[] | No | Filter by fields: |
| string[] | No | Filter by type: |
| boolean | No | Only return open access papers (default: false) |
| integer | No | Minimum citation count |
| integer | No | Max results 1-100 (default: 10) |
| integer | No | Pagination offset (default: 0) |
| string | No |
|
| string | No | Override environment API key |
Example:
Search for "transformer attention mechanism" papers from 2023 with at least 100 citationsJSON Example:
{
"query": "transformer attention mechanism",
"year": "2023",
"min_citation_count": 100,
"fields_of_study": ["Computer Science"],
"limit": 20
}2. semantic_scholar_get_paper
Get detailed information about a specific paper.
Parameters:
Parameter | Type | Required | Description |
| string | Yes | Paper ID in any supported format |
| boolean | No | Include citing papers (default: false) |
| boolean | No | Include referenced papers (default: false) |
| integer | No | Max citations to return 1-100 (default: 10) |
| integer | No | Max references to return 1-100 (default: 10) |
| string | No |
|
| string | No | Override environment API key |
Example:
Get details for DOI:10.1038/s41586-021-03819-2 including its top 20 citationsJSON Example:
{
"paper_id": "DOI:10.1038/s41586-021-03819-2",
"include_citations": true,
"citations_limit": 20
}3. semantic_scholar_search_authors
Search for academic authors by name.
Parameters:
Parameter | Type | Required | Description |
| string | Yes | Author name to search |
| integer | No | Max results 1-100 (default: 10) |
| integer | No | Pagination offset (default: 0) |
| string | No |
|
| string | No | Override environment API key |
Example:
Find author "Yoshua Bengio"JSON Example:
{
"query": "Yoshua Bengio",
"limit": 5
}4. semantic_scholar_get_author
Get author profile with publications.
Parameters:
Parameter | Type | Required | Description |
| string | Yes | Semantic Scholar author ID |
| boolean | No | Include publications (default: true) |
| integer | No | Max papers to return 1-100 (default: 20) |
| string | No |
|
| string | No | Override environment API key |
Example:
Get author profile for author ID 1741101 with their top 50 publicationsJSON Example:
{
"author_id": "1741101",
"include_papers": true,
"papers_limit": 50
}5. semantic_scholar_recommendations
Get AI-powered paper recommendations based on a seed paper.
Parameters:
Parameter | Type | Required | Description |
| string | Yes | Seed paper ID in any supported format |
| integer | No | Max recommendations 1-100 (default: 10) |
| string | No |
|
| string | No | Override environment API key |
Example:
Get recommendations based on paper 649def34f8be52c8b66281af98ae884c09aef38bJSON Example:
{
"paper_id": "ARXIV:1706.03762",
"limit": 15
}6. semantic_scholar_bulk_papers
Retrieve multiple papers in a single request (max 500).
Parameters:
Parameter | Type | Required | Description |
| string[] | Yes | List of paper IDs (max 500) |
| string | No |
|
| string | No | Override environment API key |
Example:
Retrieve these papers: DOI:10.1038/nature12373, ARXIV:2106.15928, PMID:32908142JSON Example:
{
"paper_ids": [
"DOI:10.1038/nature12373",
"ARXIV:2106.15928",
"PMID:32908142"
]
}7. semantic_scholar_bulk_search
Search papers with sorting and cursor-based pagination for large result sets.
Unlike search_papers, supports a sort order and returns a token for
paging through all results.
Parameters:
Parameter | Type | Required | Description |
| string | Yes | Search query |
| string | No | Sort order, e.g. |
| string | No | Continuation token from a previous bulk_search response |
| string | No | Year filter: |
| string[] | No | Filter by fields: |
| string[] | No | Filter by type: |
| integer | No | Minimum citation count |
| integer | No | Max results per page 1-1000 (default: 100) |
| string | No |
|
| string | No | Override environment API key |
JSON Example:
{
"query": "graph neural networks",
"sort": "citationCount:desc",
"year": "2020-2024",
"limit": 100
}Returns: total result count, the page of papers, and a token for the
next page (when more results exist).
8. semantic_scholar_export_citation
Export a citation for a paper in BibTeX format.
Parameters:
Parameter | Type | Required | Description |
| string | Yes | Paper ID in any supported format |
| string | No | Citation format (currently only |
| string | No | Override environment API key |
JSON Example:
{
"paper_id": "DOI:10.1038/s41586-021-03819-2",
"format": "bibtex"
}Returns: the BibTeX string for the requested paper.
9. semantic_scholar_match_paper
Find the single best paper matching a title string. Returns a numeric
matchScore alongside the matched paper.
Parameters:
Parameter | Type | Required | Description |
| string | Yes | Paper title to match (1-500 chars) |
| string | No |
|
| string | No | Override environment API key |
JSON Example:
{
"query": "Attention Is All You Need"
}Returns: the best-matching paper plus its matchScore, or "No matching
paper found." if no match.
10. semantic_scholar_paper_authors
Get full author profiles for a paper's authors (richer than the abbreviated
author list returned by get_paper).
Parameters:
Parameter | Type | Required | Description |
| string | Yes | Paper ID in any supported format |
| integer | No | Max authors to return 1-1000 (default: 100) |
| string | No |
|
| string | No | Override environment API key |
JSON Example:
{
"paper_id": "ARXIV:1706.03762",
"limit": 25
}Returns: the list of full author records for the paper.
11. semantic_scholar_author_batch
Retrieve multiple authors in a single request (max 1000).
Parameters:
Parameter | Type | Required | Description |
| string[] | Yes | List of author IDs (1-1000) |
| string | No |
|
| string | No | Override environment API key |
JSON Example:
{
"author_ids": ["1741101", "40348417", "144749327"]
}Returns: counts of requested / retrieved, the retrieved author
records, and a not_found list of IDs the API did not return.
12. semantic_scholar_multi_recommend
Get recommendations using multiple positive (and optional negative) example papers.
Parameters:
Parameter | Type | Required | Description |
| string[] | Yes | Papers to find similar results for (1-100) |
| string[] | No | Papers to dissimilate from (0-100) |
| integer | No | Max recommendations 1-500 (default: 10) |
| string | No |
|
| string | No | Override environment API key |
JSON Example:
{
"positive_paper_ids": ["ARXIV:1706.03762", "ARXIV:1810.04805"],
"negative_paper_ids": ["DOI:10.1038/nature14539"],
"limit": 20
}Returns: the recommended papers plus an echo of the positive/negative seeds used.
13. semantic_scholar_snippet_search
Search within paper full text and return text snippets with surrounding context. Heavily rate-limited without an API key.
Parameters:
Parameter | Type | Required | Description |
| string | Yes | Search query for paper text (1-500 chars) |
| string[] | No | Limit search to specific papers (max 100) |
| string | No | Year filter: |
| string[] | No | Filter by fields: |
| integer | No | Minimum citation count |
| integer | No | Max results 1-100 (default: 10) |
| string | No |
|
| string | No | Override environment API key |
JSON Example:
{
"query": "scaling laws for language models",
"year": "2022-2024",
"limit": 20
}Returns: matching snippets, each with the source paper title, section, and a short text excerpt.
14. semantic_scholar_status
Check server health and API connectivity status.
Parameters: None
Example:
Check Semantic Scholar API statusResponse:
{
"server": "semantic-scholar-mcp",
"version": "1.2.2",
"api_key_configured": true,
"timestamp": "2026-04-06T12:00:00.000000+00:00",
"api_reachable": true
}Rate Limits
Tier | Requests/Second | How to Get |
No API Key | 1 req/sec | Default |
Free API Key | 1 req/sec | |
Academic Partner | 10-100 req/sec | Apply via S2 |
The server automatically handles rate limiting with:
Request serialization to enforce minimum intervals
Exponential backoff retry for 429 (rate limit) and 503 (service unavailable) errors
Maximum 3 retries with jitter
Architecture
+-----------------+ +----------------------+ +-----------------+
| Claude Desktop |---->| semantic-scholar-mcp |---->| Semantic Scholar|
| (MCP Client) |<----| (This Server) |<----+ API |
+-----------------+ +----------------------+ +-----------------+
| | |
| stdio (JSON-RPC) | Your API Key | HTTPS
| Local process | Local machine | 200M+ papersWhere your API key goes. The MCP server runs locally on your machine and
does not store your API key on disk. When the server makes authenticated
requests, the key is sent only to api.semanticscholar.org over HTTPS as
the x-api-key header that the Semantic Scholar API requires. No telemetry
is sent to any third party. See the per-request api_key caution above for
how transcript exposure can occur when the parameter is used per-request
instead of via the environment variable.
Development
# Clone
git clone https://github.com/smaniches/semantic-scholar-mcp.git
cd semantic-scholar-mcp
# Install dev dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Run tests with coverage
pytest --cov=src/semantic_scholar_mcp --cov-report=term-missing
# Type checking
mypy src/Security
API keys are never persisted to disk by the server. Prefer the
SEMANTIC_SCHOLAR_API_KEY environment variable over the per-request api_key
tool parameter (see SECURITY.md for details on the
transcript-exposure risk). All API communication uses HTTPS to
api.semanticscholar.org. See SECURITY.md for
vulnerability reporting and the v1.2.x known-limitations list.
License
MIT License - see LICENSE file.
Author
Santiago Maniches
Founder & CEO, TOPOLOGICA LLC
ORCID: 0009-0005-6480-1987
LinkedIn: santiago-maniches
Website: topologica.ai
Contributing
Contributions welcome! Please read our Contributing Guidelines.
Support
Issues: GitHub Issues
Discussions: GitHub Discussions
Contact: santiago@topologica.ai
Available Tools
14 toolssemantic_scholar_author_batchARead-onlyIdempotent
Retrieve multiple authors in a single request (max 1000).
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and openWorldHint, so the safety profile is covered. The description adds the 1000-item limit, which is useful, but it does not disclose response format, error behavior, or partial-failure semantics. It provides modest value beyond annotations.
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, concise sentence that front-loads the verb and includes the key constraint. No wasted words or redundant 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?
For a batch retrieval tool with no output schema, the description is minimal but adequate for basic understanding. It does not explain return value structure or error handling, but the max-1000 limit and read-only nature are clear. Given the simplicity of the operation, this is acceptable but not rich enough for a higher score.
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 0%, meaning the description does not explicitly document the parameters. The schema itself contains detailed descriptions for author_ids and response_format, but the description merely implies the list of IDs with 'multiple authors' and 'max 1000'. It does not compensate for the low coverage and adds no real semantic value beyond what the schema already provides.
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 action ('Retrieve multiple authors') and adds the key constraint 'single request (max 1000)', which distinguishes it from the sibling tool semantic_scholar_get_author. The verb and resource are specific and unambiguous.
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 usage context is only implied by the name and description—it is a batch variant of get_author, but no explicit guidance is given about when to prefer it over repeated single calls or when not to use it. No alternatives are mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_scholar_bulk_papersARead-onlyIdempotent
Retrieve multiple papers in a single request (max 500).
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint and idempotentHint, so the safety profile is covered. The description adds the max 500 limitation but does not disclose potential partial failures, missing IDs, rate limits, or response format. This is acceptable but not rich.
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 sentence that immediately communicates the core purpose and constraint. There is no wasted wording, and it is well-structured.
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?
The tool is relatively simple, and annotations cover safety, but the description is sparse. With no output schema, the agent lacks information about return values, error behavior, or what happens if any paper ID is invalid. The max 500 is helpful, but more context could be provided.
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?
The description does not describe any parameter semantics; it only mentions 'multiple papers' which vaguely relates to the paper_ids list. The context signal indicates schema description coverage of 0%, so the description must compensate, but it does not. The schema's internal definitions are not enough per the provided context.
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 function: 'Retrieve multiple papers in a single request (max 500).' The verb 'Retrieve' with resource 'multiple papers' is specific, and the max limit distinguishes it from singular fetch (semantic_scholar_get_paper) and search (semantic_scholar_search_papers).
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 implies usage for fetching multiple papers at once, especially with the 'single request' phrase, but it does not explicitly name alternatives or state when not to use it. It offers only implicit guidance regarding batch retrieval, not clear exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_scholar_bulk_searchARead-onlyIdempotent
Search papers with sorting and cursor-based pagination for large result sets.
Unlike regular search, supports sorting (e.g., by citation count), boolean
query syntax, and returns a continuation token for paging through all
results. The observed endpoint ignores ``limit`` and may return up to 1000
papers per page; the full page is returned so no row is skipped.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds genuinely useful behavior beyond that: the observed endpoint ignores `limit`, may return up to 1000 papers per page, and returns the full untruncated page so the continuation token skips nothing. No auth or rate-limit info, but this is strong operational disclosure.
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?
Three tight sentences with the core capability front-loaded and the pagination caveat last. Slight redundancy with the schema on boolean syntax and the ignored `limit` keeps it from being maximally efficient.
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?
No output schema exists, so the description carries the return-shape burden and does so partially by explaining the continuation token and full-page return. Combined with the rich nested schema and annotations, an agent has enough to invoke it correctly; exact paper fields returned remain unspecified.
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?
The schema's nested properties are documented, but the single top-level `params` wrapper is not. The description clarifies the sort capability, boolean query syntax, and the continuation-token semantics of pagination, and flags the `limit` caveat. Some of this (boolean syntax, limit-ignored) duplicates the nested schema descriptions, limiting the added value.
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?
States a specific verb and resource ("Search papers") plus its distinguishing scope: sorting and cursor-based pagination for large result sets. It contrasts with "regular search" functionality but never names the sibling tool it is contrasted against, so differentiation relies on inference.
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?
Gives a clear routing condition: use this when you need sorting, boolean query syntax, or paging through a large result set, as opposed to regular search. No explicit when-not-to-use or named alternative is given, but the context is unambiguous.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_scholar_export_citationARead-onlyIdempotent
Export a citation for a paper in BibTeX format.
Use once you have a paper ID (from semantic_scholar_search_papers or
semantic_scholar_match_paper), e.g. paper_id='DOI:10.18653/v1/N18-3011'.
Returns the BibTeX entry as plain text - there is no response_format
option. Raises an error for an unknown ID, a paper without citation data,
or any format other than 'bibtex'.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnlyHint, idempotentHint, openWorldHint), the description discloses that the output is plain text with no response_format option, and lists specific error triggers: unknown ID, paper without citation data, or non-bibtex format. This is valuable behavioral context not covered by annotations.
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 three concise, front-loaded sentences: purpose, usage, behavior. Each sentence earns its place with no redundant wording.
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?
For a simple citation-export tool with one required parameter, the description covers workflow (use after search/match), input requirements, output format, and error scenarios. With annotations covering safety and idempotency, no further context is needed.
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?
The schema already provides detailed descriptions for all parameters, including accepted paper_id formats and the format restriction. The description adds a concrete example ID and reinforces the error on non-bibtex, but doesn't substantially expand parameter 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 opens with a specific verb and resource: 'Export a citation for a paper in BibTeX format.' This clearly distinguishes it from sibling tools like search/get paper. It also states the output format and prerequisite.
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 explicitly instructs to use it after obtaining a paper ID from semantic_scholar_search_papers or semantic_scholar_match_paper, giving clear upstream context. However, it does not mention exclusions or alternative downstream tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_scholar_get_authorBRead-onlyIdempotent
Get author profile with optional publications list.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and openWorldHint. The description adds that publications are optional, which is useful, but it doesn't detail related behaviors such as default limits or response structure. No contradiction with annotations.
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, front-loaded sentence with no filler. It states the core action and a key option efficiently, earning its place without unnecessary detail.
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?
There is no output schema, and the description omits important context such as the required author_id, how to control the optional publications (include_papers, papers_limit), and the default response format. For a tool with multiple parameters and no output schema, this is insufficiently complete.
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 0% at the top level, and the description never mentions any parameters. While the nested schema has some parameter descriptions, the tool description itself does not compensate for the low coverage, leaving the agent to infer parameter meaning solely from 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 uses a specific verb 'Get' with a clear resource 'author profile' and notes an optional publications list. This distinguishes it from sibling search tools, though it doesn't explicitly name alternatives. The purpose is clear and unambiguous.
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 like semantic_scholar_search_authors or semantic_scholar_get_paper. It doesn't mention that an author_id is required or that this is for retrieving a specific existing author rather than searching.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_scholar_get_paperARead-onlyIdempotent
Get paper details. Accepts: S2 ID, DOI:xxx, ARXIV:xxx, PMID:xxx, CorpusId:xxx
Returns title, abstract, authors, venue, year, citation counts, TLDR,
and open-access PDF link for one paper, e.g. paper_id='ARXIV:1706.03762'.
Set include_citations / include_references to also list citing and
referenced papers (fetched in parallel, 1-100 per page each). Paginate
the two directions independently with citations_offset/references_offset;
JSON output exposes citations_page.next and references_page.next.
Results are cached
in memory for 5 minutes; an unknown ID raises a not-found error. Client-side
requests use a 1.0-second unkeyed interval and a conservative 1.1-second
authenticated default; explicitly higher S2-assigned quotas can be configured.
429/502/503 responses retry automatically with backoff. Returns
Markdown by default, response_format='json' for raw JSON. To fetch many
papers at once use semantic_scholar_bulk_papers.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations cover safety (readOnly/idempotent/openWorld), but the description adds substantial operational context the annotations cannot: a 5-minute in-memory cache, a not-found error on unknown IDs, client-side request intervals (1.0s unkeyed / 1.1s authenticated), automatic retry with backoff on 429/502/503, and Markdown-by-default output. This is exactly the kind of behavior an agent needs to set retry expectations and pacing.
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?
Front-loaded with purpose and accepted IDs, then returns, then flags/pagination, then cache/rate-limit behavior. Dense but well ordered; the rate-limit and backoff detail is somewhat peripheral to selecting or calling the tool but does earn its place for an agent that must pace requests.
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?
No output schema exists, so the description carries the return-value burden and does so: it lists title, abstract, authors, venue, year, citation counts, TLDR, and OA PDF link, plus the shape of paginated citation/reference output (citations_page.next). Error, caching, and format behavior are all covered, leaving nothing an agent needs to invoke it correctly.
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?
With schema description coverage reported at 0%, the description compensates well by naming the accepted ID prefixes (DOI/ARXIV/PMID/CorpusId), the 1-100 per-page bounds on citation/reference listings, the independent offsets for each direction, and response_format='json'. It omits only the deprecated api_key parameter and its env-var override behavior, which the schema itself documents.
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?
States a specific verb+resource ('Get paper details') and immediately enumerates the accepted identifier forms, so the agent knows exactly what this fetches. It also explicitly routes multi-paper retrieval to semantic_scholar_bulk_papers, distinguishing it from the sibling it most closely overlaps with.
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?
Gives a clear condition for choosing the sibling: 'To fetch many papers at once use semantic_scholar_bulk_papers,' and explains the optional include_citations/include_references toggles. It stops short of stating when to prefer this over search_papers or match_paper, so it's strong but not fully exclusionary.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_scholar_match_paperARead-onlyIdempotent
Find the single best paper matching a title string. Returns match score.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already indicate readOnlyHint, openWorldHint, and idempotentHint, covering safety and side-effect expectations. The description adds behavioral context by stating it returns a match score, which is not in the annotations. This is helpful for the agent to know what output to expect. It does not discuss edge cases like no match or ambiguous matches, but the strong annotation coverage reduces the need for further disclosure.
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 two short sentences, front-loaded with the primary intent and return value. Every word is purposeful, with no redundancy or filler. It is an excellent example of concise, structured description.
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 simplicity of the tool (one required parameter, no output schema, strong annotations), the description covers the essential purpose and return type. It does not explicitly state how to handle edge cases like no match or ambiguous titles, but these are likely predictable for a title-matching tool. The presence of response_format and api_key parameters is handled by the schema, so the description need not repeat them.
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?
The tool description provides no parameter information, and schema_description_coverage is 0%. Although the input schema includes rich descriptions (e.g., query is 'Paper title to match'), the rubric requires the description to compensate for low coverage. Since it does not mention any parameters or how to fill them, the description adds no value beyond what the schema already offers. This is a clear gap.
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 uses a specific verb and resource ('Find the single best paper matching a title string') and clearly distinguishes itself from sibling tools: it returns a single best match rather than a list (unlike search_papers) and operates on a title string rather than an ID (unlike get_paper). This is concise and unambiguous.
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 implies when to use this tool: when you have a title string and want the single best matching paper. It does not explicitly name alternatives, but the phrase 'single best paper' contrasts with search tools that return lists, providing clear context. No exclusions are mentioned, but given the straightforward use case, this is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_scholar_multi_recommendARead-onlyIdempotent
Get recommendations using multiple positive and negative example papers.
Use instead of semantic_scholar_recommendations when steering with more
than one example: results resemble positive_paper_ids and are pushed away
from negative_paper_ids. Example:
positive_paper_ids=['ARXIV:1706.03762', 'DOI:10.18653/v1/N19-1423'],
negative_paper_ids=['ARXIV:1409.0473']. Accepts 1-100 positive and up to
100 negative IDs in any supported paper-ID format; malformed IDs raise an
error before any request is made. Returns up to `limit` (1-500, default
10) papers, Markdown by default or response_format='json' for raw JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already mark the tool as readOnly, openWorld, and idempotent. The description adds valuable behavioral context: results are steered toward positives and away from negatives, malformed IDs raise an error before making requests, and the response format can be markdown or JSON. It stops short of discussing auth or rate limits, but the additional context is substantive.
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 tightly written in four sentences, immediately stating the purpose, followed by usage guidance, an example, parameter ranges, and output format. There is no fluff—every sentence contributes essential 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 of a multi-seed recommendation tool, the description covers the central behavior, parameter constraints, error handling, and return format. It omits the deprecated api_key parameter, but the schema explains it. The tool has no output schema, so the description effectively fills the gap by stating what is returned (papers, markdown or JSON).
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?
The input schema already provides descriptions for all fields, so the baseline is 3. The description enhances parameter understanding by showing an example with specific ID formats, reaffirming the 1-100 positive and 1-100 negative limits, and noting the limit/default/response_format options. This adds practical value beyond the schema's static descriptions.
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 opens with a specific verb and resource: 'Get recommendations using multiple positive and negative example papers.' It immediately distinguishes itself from sibling tool semantic_scholar_recommendations by stating it is for 'more than one example,' making the purpose unmistakable.
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?
Explicitly directs when to use this tool: 'Use instead of semantic_scholar_recommendations when steering with more than one example.' It also provides a concrete example and clarifies input limits, giving clear guidance on when and how to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_scholar_paper_authorsARead-onlyIdempotent
Get full author profiles for a paper's authors.
Unlike the abbreviated author list embedded in semantic_scholar_get_paper
results, this returns each author's complete profile - affiliations,
h-index, paper and citation counts - plus author IDs usable with
semantic_scholar_get_author. Example: paper_id='DOI:10.18653/v1/N18-3011'.
Authors are returned in listed order (limit 1-1000, default 100). Returns
Markdown by default, response_format='json' for raw JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds valuable behavioral context beyond those annotations: author ordering, limit bounds, default values, and Markdown-vs-JSON output options. No contradiction with annotations.
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 compact—three sentences—and front-loaded with the core purpose. Every sentence earns its place by adding either differentiation, parameter detail, or output behavior, with no filler.
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?
For a read-only tool with one required parameter and no output schema, the description adequately covers return contents, output format, author ordering, limit behavior, and ID formats. Minor omissions like error handling or rate limits are acceptable given the tool's simplicity.
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?
Although context reports low schema description coverage, the description adds meaningful parameter context: a concrete paper_id format example, the 1-1000 limit with default 100, and response_format options. The schema also provides detailed per-parameter descriptions, so the two complement each other well.
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 verb and resource: 'Get full author profiles for a paper's authors.' It also explicitly distinguishes itself from the abbreviated author list in semantic_scholar_get_paper and connects to semantic_scholar_get_author via returned author IDs.
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?
It provides a clear contrast with semantic_scholar_get_paper, implying when to use this tool over that one, and includes a concrete example paper_id. However, it does not explicitly enumerate exclusion cases or alternative tools for related scenarios, so it stops short of full when/when-not guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_scholar_recommendationsARead-onlyIdempotent
Get paper recommendations based on a seed paper.
Provide one paper you already know (e.g. paper_id='ARXIV:1706.03762') and
receive up to `limit` similar papers. from_pool picks the candidate pool:
'recent' (default, recently published papers from all fields) or 'all-cs'
(computer-science papers of any age). When steering with several positive
or negative examples, use semantic_scholar_multi_recommend instead. An
unknown seed ID raises a not-found error. Client-side requests use a
1.0-second unkeyed interval and a conservative 1.1-second authenticated
default; explicitly higher S2-assigned quotas can be configured. 429/502/503
responses retry automatically with backoff. Returns Markdown by default,
response_format='json' for raw JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Given the readOnlyHint and idempotentHint annotations, the description still adds significant new context: error handling (unknown seed raises not-found), rate limiting details (1.0-second unkeyed interval, 1.1-second authenticated default, configurable quotas), automatic retries on 429/502/503 with backoff, and return format defaults. This is exactly the kind of operational context annotations cannot convey.
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 front-loaded with the core purpose, then branches into options, alternatives, error behavior, and operational details. Every sentence adds concrete value; no fluff.
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?
For a tool with no output schema, the description covers all critical aspects: what it returns (up to limit similar papers in Markdown or JSON), how to control scope (from_pool), when to use an alternative, error conditions, and rate-limit/retry behavior. Nothing essential for correct invocation is missing.
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 coverage is low (0% per context signals, though the schema itself does include some descriptions), so the description must carry the burden. It explains the purpose of paper_id, from_pool, response_format, and mentions limit. It doesn't fully describe the api_key parameter or the exact format for paper_id, but provides enough functional meaning.
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?
States a specific verb+resource ('Get paper recommendations based on a seed paper') and clarifies scope immediately. It also distinguishes itself from the sibling semantic_scholar_multi_recommend by explaining that multi_recommend should be used for steering with several examples.
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?
Explicitly tells the agent when to use this tool (one seed paper) vs the alternative (semantic_scholar_multi_recommend for multiple positive/negative examples). It also explains the effect of from_pool options, leaving little to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_scholar_search_authorsARead-onlyIdempotent
Search for academic authors by name.
Example: query='Yoshua Bengio'. Several distinct researchers can share a
name, so confirm identity with semantic_scholar_get_author (affiliations,
h-index, publications) before attributing work; to list the authors of a
specific paper use semantic_scholar_paper_authors instead. Page with
offset/limit (max 100 per call, default 10). Returns Markdown by default,
response_format='json' for raw JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent behavior, so the description adds value by disclosing Markdown default output, response_format='json' option, and pagination limits (max 100, default 10). It also warns about name ambiguity, offering extra operational context beyond the annotations.
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 compact and well-structured: it opens with the core purpose, then supplies an example, caveats, alternatives, and paging/output details. Every sentence carries load, with no fluff.
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?
The description covers primary usage, pagination, output formats, and points to relevant sibling tools. It does not detail the response structure, but given the schema and annotations, it is sufficient for selecting and invoking the tool correctly.
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?
The schema already contains descriptive text for each parameter, so the description's example and mention of offset/limit and response_format add only modest value. The concrete query example and clarification of default response format help, but the schema does most of the heavy lifting.
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 states 'Search for academic authors by name' with a concrete example ('Yoshua Bengio'). It distinguishes from sibling tools by explicitly naming semantic_scholar_paper_authors for a different use case (listing authors of a specific paper).
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 clearly says when to use this tool (search by name) and when to use alternatives: semantic_scholar_get_author for confirming identity and semantic_scholar_paper_authors for listing paper authors. It also provides pagination guidance and response format selection, fully covering usage context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_scholar_search_papersARead-onlyIdempotent
Search for academic papers.
Relevance-ranked plain-text search over 200M+ papers, with year,
field-of-study, publication-type, open-access, and citation-count filters.
The query is sent unchanged; boolean and quoted-phrase syntax is
documented only for semantic_scholar_bulk_search. Page with
offset/limit (max 100 per call). For sorted or very large result sets
use semantic_scholar_bulk_search; to search inside paper full text use
semantic_scholar_snippet_search; to resolve one known title use
semantic_scholar_match_paper. Returns Markdown by default,
response_format='json' for raw JSON.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint and openWorldHint, so the safety profile is covered. The description adds real behavioral context beyond that: relevance ranking, the 200M+ corpus, per-call page cap of 100, unchanged query forwarding, and default Markdown vs output. Minor gaps remain (no rate-limit or auth notes), so a 4 rather than a 5.
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?
Front-loaded with the core action, then filters, then query-syntax caveat, then routing to siblings, then output format. Dense but every sentence carries decision-relevant information; no filler.
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?
No output schema exists, and the description covers the return contract ('Returns Markdown by default, response_format=json for raw JSON'). Combined with annotations carrying the safety profile and the description covering pagination and routing, an agent has everything needed to call this correctly.
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?
Reported schema description coverage is 0% at the top level, yet the description enumerates the filter surface (year, field-of-study, publication-type, open-access, citation-count) and explains offset/limit paging and response_format. It does not mention the deprecated api_key parameter, but it compensates well for the coverage gap on the parameters that matter for search behavior.
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?
States a specific verb+resource ('Search for academic papers') and immediately qualifies the mechanism ('relevance-ranked plain-text search over 200M+ papers'). It also names the sibling it is not (bulk_search, snippet_search, match_paper), so an agent can distinguish it from alternatives without opening a schema.
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?
Explicitly routes the agent: bulk_search for sorted or very large result sets, snippet_search for full text, match_paper for a known title. It also states the query is forwarded unchanged and that boolean/phrase syntax belongs to bulk_search, which is a precise when-to-use-not constraint.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_scholar_snippet_searchARead-onlyIdempotent
Search within paper full text. Returns text snippets with context.
Note: This endpoint is heavily rate-limited without an API key.
| Name | Required | Description | Default |
|---|---|---|---|
| params | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, openWorldHint, and idempotentHint. The description adds useful behavioral context beyond annotations with the explicit rate-limit warning ('heavily rate-limited without an API key') and clarifies the return format ('text snippets with context'). This is meaningful additional transparency.
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 compact: two purposeful sentences plus a note. It front-loads the core action and return type, then a key caveat. Every word earns its place; there is no redundancy or padding.
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?
With 8 parameters and no output schema, the description is under-specified. It does not explain result formatting, pagination, how to scope searches (e.g., by paper IDs or fields), or any usage examples. The rate-limit note is helpful but leaves too many operational gaps for a tool of this complexity.
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 reported as 0% at the top level, yet the description provides no parameter-level guidance. It only indirectly relates to the api_key parameter via the rate-limit note. The description fails to compensate for the lack of schema parameter descriptions, leaving filters like year, field_of_study, and paper_ids unexplained.
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 states a specific verb ('Search') with a clear resource ('paper full text') and return type ('text snippets with context'). The title 'Search Paper Full Text' aligns, and it distinguishes from siblings like semantic_scholar_search_papers by focusing on full-text snippet retrieval rather than metadata 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?
It provides clear context that this tool is for searching within full text and returns snippets, implying when to use it over sibling metadata search tools. However, it does not explicitly name alternatives or state when not to use it, so it lacks the exclusionary guidance seen in higher-scoring examples.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
semantic_scholar_statusARead-onlyIdempotent
Check server health, API connectivity, and key status.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover the safety profile with readOnlyHint, openWorldHint, and idempotentHint, which lower the burden. The description adds value by specifying the exact components checked (server health, API connectivity, key status), providing more detail than a generic 'check status.' It does not disclose return format or potential error conditions, but the annotations handle the critical safety aspects.
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 that immediately conveys the tool's purpose without any unnecessary words or repetition. It is front-loaded and every word contributes meaning.
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 (no parameters, no output schema), the description covers the core functionality well by listing three specific status areas. However, it does not describe the response structure, which could be useful for an agent deciding how to interpret the result. Still, for a low-complexity tool with strong annotations, this is adequate.
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?
The tool has zero parameters, so the input schema is trivially complete. With no parameters to describe, the baseline for this dimension is 4, and the description does not need to add parameter-specific information.
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 uses a specific verb and resource: 'Check server health, API connectivity, and key status.' This clearly distinguishes it from the sibling tools, which are all focused on searching or retrieving papers/authors. There is no ambiguity about the tool's role as a status/health check.
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 does not explicitly state when to use this tool versus alternatives, but the sibling context makes it obvious that this is the only status-related tool. The usage is implied rather than directly stated, and there is no guidance on prerequisites or scenarios where this should be called (e.g., before other API calls).
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.
2 tool updates
v1.2.18- Changed
semantic_scholar_bulk_search2 fields changed- changed
Input schema / $defs / BulkSearchInput / properties / limit / descriptionPrevious value: -"Max results per page (1-1000)"New value: +"Requested page size (1-1000), forwarded to the API. The observed bulk endpoint ignores it and returns up to 1000 papers per page; the whole page is returned (never truncated) so the continuation token skips nothing" - changed
Input schema / $defs / BulkSearchInput / properties / query / descriptionPrevious value: -"Search query"New value: +"Search query. The bulk endpoint documents boolean syntax: + (AND), | (OR), - (NOT), \"quoted phrase\", * (prefix), ( ) grouping, ~N (edit distance / phrase slop), e.g. '\"graph neural network\" + drug'"
- Changed
semantic_scholar_search_papers1 field changed- changed
Input schema / $defs / PaperSearchInput / properties / query / descriptionPrevious value: -"Search query, e.g. 'protein language models'. Supports AND, OR, NOT operators and quoted phrases: '\"graph neural network\" AND drug'"New value: +"Plain-text search query, e.g. 'protein language models'. Semantic Scholar documents no special query syntax for this endpoint; the query is forwarded unchanged. For boolean/phrase syntax use semantic_scholar_bulk_search"
1 tool update
v1.2.17- Changed
semantic_scholar_get_paper2 fields changed- added
Input schema / $defs / PaperDetailsInput / properties / citations_offsetAdded value: +{ + "default": 0, + "description": "Pagination offset for citing papers (default 0)", + "minimum": 0, + "title": "Citations Offset", + "type": "integer" +} - added
Input schema / $defs / PaperDetailsInput / properties / references_offsetAdded value: +{ + "default": 0, + "description": "Pagination offset for referenced papers (default 0)", + "minimum": 0, + "title": "References Offset", + "type": "integer" +}
14 tool updates
v1.2.13- Changed
semantic_scholar_author_batch1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "title": "Result", - "type": "string" - } - }, - "required": [ - "result" - ], - "title": "get_author_batchOutput", - "type": "object" -}New value: +null
- Changed
semantic_scholar_bulk_papers1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "title": "Result", - "type": "string" - } - }, - "required": [ - "result" - ], - "title": "get_bulk_papersOutput", - "type": "object" -}New value: +null
- Changed
semantic_scholar_bulk_search1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "title": "Result", - "type": "string" - } - }, - "required": [ - "result" - ], - "title": "bulk_searchOutput", - "type": "object" -}New value: +null
- Changed
semantic_scholar_export_citation1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "title": "Result", - "type": "string" - } - }, - "required": [ - "result" - ], - "title": "export_citationOutput", - "type": "object" -}New value: +null
- Changed
semantic_scholar_get_author1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "title": "Result", - "type": "string" - } - }, - "required": [ - "result" - ], - "title": "get_author_detailsOutput", - "type": "object" -}New value: +null
- Changed
semantic_scholar_get_paper1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "title": "Result", - "type": "string" - } - }, - "required": [ - "result" - ], - "title": "get_paper_detailsOutput", - "type": "object" -}New value: +null
- Changed
semantic_scholar_match_paper1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "title": "Result", - "type": "string" - } - }, - "required": [ - "result" - ], - "title": "match_paperOutput", - "type": "object" -}New value: +null
- Changed
semantic_scholar_multi_recommend1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "title": "Result", - "type": "string" - } - }, - "required": [ - "result" - ], - "title": "multi_recommendOutput", - "type": "object" -}New value: +null
- Changed
semantic_scholar_paper_authors1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "title": "Result", - "type": "string" - } - }, - "required": [ - "result" - ], - "title": "get_paper_authorsOutput", - "type": "object" -}New value: +null
- Changed
semantic_scholar_recommendations1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "title": "Result", - "type": "string" - } - }, - "required": [ - "result" - ], - "title": "get_recommendationsOutput", - "type": "object" -}New value: +null
- Changed
semantic_scholar_search_authors1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "title": "Result", - "type": "string" - } - }, - "required": [ - "result" - ], - "title": "search_authorsOutput", - "type": "object" -}New value: +null
- Changed
semantic_scholar_search_papers1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "title": "Result", - "type": "string" - } - }, - "required": [ - "result" - ], - "title": "search_papersOutput", - "type": "object" -}New value: +null
- Changed
semantic_scholar_snippet_search1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "title": "Result", - "type": "string" - } - }, - "required": [ - "result" - ], - "title": "snippet_searchOutput", - "type": "object" -}New value: +null
- Changed
semantic_scholar_status1 field changed- changed
Output schema / (root)Previous value: -{ - "properties": { - "result": { - "title": "Result", - "type": "string" - } - }, - "required": [ - "result" - ], - "title": "server_statusOutput", - "type": "object" -}New value: +null
7 tool updates
v1.2.12- Changed
semantic_scholar_export_citation2 fields changed- changed
Input schema / $defs / CitationExportInput / properties / format / descriptionPrevious value: -"Citation format (currently only 'bibtex' supported)"New value: +"Citation format (currently only 'bibtex' supported; anything else errors)" - changed
Input schema / $defs / CitationExportInput / properties / paper_id / descriptionPrevious value: -"Paper ID: S2 ID, DOI:xxx, ARXIV:xxx, PMID:xxx, CorpusId:xxx"New value: +"Paper ID: a 40-character S2 hex ID ('649def34f8be52c8b66281af98ae884c09aef38b'), 'DOI:10.18653/v1/N18-3011', 'ARXIV:1706.03762', 'PMID:19872477', 'CorpusId:215416146', 'ACL:W12-3903', or 'URL:https://...'"
- Changed
semantic_scholar_get_paper5 fields changed- changed
Input schema / $defs / PaperDetailsInput / properties / citations_limit / descriptionPrevious value: -"Max citations to return"New value: +"Max citing papers returned when include_citations=true (1-100, default 10)" - changed
Input schema / $defs / PaperDetailsInput / properties / include_citations / descriptionPrevious value: -"Include citing papers"New value: +"Also list papers that cite this one (default false)" - changed
Input schema / $defs / PaperDetailsInput / properties / include_references / descriptionPrevious value: -"Include referenced papers"New value: +"Also list papers this one cites (default false)" - changed
Input schema / $defs / PaperDetailsInput / properties / paper_id / descriptionPrevious value: -"Paper ID: S2 ID, DOI:xxx, ARXIV:xxx, PMID:xxx, CorpusId:xxx"New value: +"Paper ID: a 40-character S2 hex ID ('649def34f8be52c8b66281af98ae884c09aef38b'), 'DOI:10.18653/v1/N18-3011', 'ARXIV:1706.03762', 'PMID:19872477', 'CorpusId:215416146', 'ACL:W12-3903', or 'URL:https://...'" - changed
Input schema / $defs / PaperDetailsInput / properties / references_limit / descriptionPrevious value: -"Max references to return"New value: +"Max referenced papers returned when include_references=true (1-100, default 10)"
- Changed
semantic_scholar_multi_recommend3 fields changed- changed
Input schema / $defs / MultiRecommendInput / properties / limit / descriptionPrevious value: -"Max recommendations"New value: +"Max recommendations (1-500, default 10)" - changed
Input schema / $defs / MultiRecommendInput / properties / negative_paper_ids / descriptionPrevious value: -"Papers to steer recommendations away from"New value: +"Up to 100 papers to steer away from: results similar to these are down-ranked (same ID formats as positive_paper_ids; default none)" - changed
Input schema / $defs / MultiRecommendInput / properties / positive_paper_ids / descriptionPrevious value: -"Papers to find similar results for"New value: +"1-100 example papers the recommendations should resemble; each ID may be a 40-character S2 hex ID ('649def34f8be52c8b66281af98ae884c09aef38b'), 'DOI:10.18653/v1/N18-3011', 'ARXIV:1706.03762', 'PMID:19872477', 'CorpusId:215416146', 'ACL:W12-3903', or 'URL:https://...'"
- Changed
semantic_scholar_paper_authors2 fields changed- changed
Input schema / $defs / PaperAuthorsInput / properties / limit / descriptionPrevious value: -"Max authors to return"New value: +"Max authors to return, in listed author order (1-1000, default 100)" - changed
Input schema / $defs / PaperAuthorsInput / properties / paper_id / descriptionPrevious value: -"Paper ID: S2 ID, DOI:xxx, ARXIV:xxx, PMID:xxx, CorpusId:xxx"New value: +"Paper ID: a 40-character S2 hex ID ('649def34f8be52c8b66281af98ae884c09aef38b'), 'DOI:10.18653/v1/N18-3011', 'ARXIV:1706.03762', 'PMID:19872477', 'CorpusId:215416146', 'ACL:W12-3903', or 'URL:https://...'"
- Changed
semantic_scholar_recommendations3 fields changed- changed
Input schema / $defs / PaperRecommendationsInput / properties / from_pool / descriptionPrevious value: -"Paper pool: 'recent' (default) or 'all-cs'"New value: +"Candidate pool: 'recent' (default; recently published papers from all fields) or 'all-cs' (computer-science papers of any age)" - changed
Input schema / $defs / PaperRecommendationsInput / properties / limit / descriptionPrevious value: -"Max recommendations"New value: +"Max recommendations (1-100, default 10)" - changed
Input schema / $defs / PaperRecommendationsInput / properties / paper_id / descriptionPrevious value: -"Seed paper ID for recommendations"New value: +"Seed paper the recommendations should resemble: a 40-character S2 hex ID ('649def34f8be52c8b66281af98ae884c09aef38b'), 'DOI:10.18653/v1/N18-3011', 'ARXIV:1706.03762', 'PMID:19872477', 'CorpusId:215416146', 'ACL:W12-3903', or 'URL:https://...'"
- Changed
semantic_scholar_search_authors3 fields changed- changed
Input schema / $defs / AuthorSearchInput / properties / limit / descriptionPrevious value: -"Max results"New value: +"Max results per page (1-100, default 10)" - changed
Input schema / $defs / AuthorSearchInput / properties / offset / descriptionPrevious value: -"Pagination offset"New value: +"Pagination offset: pass the previous offset + limit to fetch the next page (default 0)" - changed
Input schema / $defs / AuthorSearchInput / properties / query / descriptionPrevious value: -"Author name to search"New value: +"Author name to search, e.g. 'Yoshua Bengio'; partial names also match"
- Changed
semantic_scholar_search_papers3 fields changed- changed
Input schema / $defs / PaperSearchInput / properties / limit / descriptionPrevious value: -"Max results (1-100)"New value: +"Max results per page (1-100, default 10); use semantic_scholar_bulk_search for result sets beyond 1000" - changed
Input schema / $defs / PaperSearchInput / properties / offset / descriptionPrevious value: -"Pagination offset"New value: +"Pagination offset: pass the previous offset + limit to fetch the next page (default 0)" - changed
Input schema / $defs / PaperSearchInput / properties / query / descriptionPrevious value: -"Search query"New value: +"Search query, e.g. 'protein language models'. Supports AND, OR, NOT operators and quoted phrases: '\"graph neural network\" AND drug'"
1 tool update
v1.2.11- Changed
semantic_scholar_multi_recommend1 field changed- changed
Input schema / $defs / MultiRecommendInput / properties / negative_paper_ids / descriptionPrevious value: -"Papers to dissimilar from"New value: +"Papers to steer recommendations away from"
13 tool updates
v1.2.6- Changed
semantic_scholar_author_batch2 fields changed- added
Input schema / $defs / AuthorBatchInput / properties / api_key / deprecatedAdded value: +true - changed
Input schema / $defs / AuthorBatchInput / properties / api_key / descriptionPrevious value: -"API key (overrides SEMANTIC_SCHOLAR_API_KEY env var)"New value: +"API key (overrides SEMANTIC_SCHOLAR_API_KEY env var). Deprecated: prefer the environment variable. Removal planned for v2.0.0."
- Changed
semantic_scholar_bulk_papers2 fields changed- added
Input schema / $defs / BulkPaperInput / properties / api_key / deprecatedAdded value: +true - changed
Input schema / $defs / BulkPaperInput / properties / api_key / descriptionPrevious value: -"API key (overrides SEMANTIC_SCHOLAR_API_KEY env var)"New value: +"API key (overrides SEMANTIC_SCHOLAR_API_KEY env var). Deprecated: prefer the environment variable. Removal planned for v2.0.0."
- Changed
semantic_scholar_bulk_search2 fields changed- added
Input schema / $defs / BulkSearchInput / properties / api_key / deprecatedAdded value: +true - changed
Input schema / $defs / BulkSearchInput / properties / api_key / descriptionPrevious value: -"API key (overrides SEMANTIC_SCHOLAR_API_KEY env var)"New value: +"API key (overrides SEMANTIC_SCHOLAR_API_KEY env var). Deprecated: prefer the environment variable. Removal planned for v2.0.0."
- Changed
semantic_scholar_export_citation2 fields changed- added
Input schema / $defs / CitationExportInput / properties / api_key / deprecatedAdded value: +true - changed
Input schema / $defs / CitationExportInput / properties / api_key / descriptionPrevious value: -"API key (overrides SEMANTIC_SCHOLAR_API_KEY env var)"New value: +"API key (overrides SEMANTIC_SCHOLAR_API_KEY env var). Deprecated: prefer the environment variable. Removal planned for v2.0.0."
- Changed
semantic_scholar_get_author2 fields changed- added
Input schema / $defs / AuthorDetailsInput / properties / api_key / deprecatedAdded value: +true - changed
Input schema / $defs / AuthorDetailsInput / properties / api_key / descriptionPrevious value: -"API key (overrides SEMANTIC_SCHOLAR_API_KEY env var)"New value: +"API key (overrides SEMANTIC_SCHOLAR_API_KEY env var). Deprecated: prefer the environment variable. Removal planned for v2.0.0."
- Changed
semantic_scholar_get_paper2 fields changed- added
Input schema / $defs / PaperDetailsInput / properties / api_key / deprecatedAdded value: +true - changed
Input schema / $defs / PaperDetailsInput / properties / api_key / descriptionPrevious value: -"API key (overrides SEMANTIC_SCHOLAR_API_KEY env var)"New value: +"API key (overrides SEMANTIC_SCHOLAR_API_KEY env var). Deprecated: prefer the environment variable. Removal planned for v2.0.0."
- Changed
semantic_scholar_match_paper2 fields changed- added
Input schema / $defs / PaperMatchInput / properties / api_key / deprecatedAdded value: +true - changed
Input schema / $defs / PaperMatchInput / properties / api_key / descriptionPrevious value: -"API key (overrides SEMANTIC_SCHOLAR_API_KEY env var)"New value: +"API key (overrides SEMANTIC_SCHOLAR_API_KEY env var). Deprecated: prefer the environment variable. Removal planned for v2.0.0."
- Changed
semantic_scholar_multi_recommend2 fields changed- added
Input schema / $defs / MultiRecommendInput / properties / api_key / deprecatedAdded value: +true - changed
Input schema / $defs / MultiRecommendInput / properties / api_key / descriptionPrevious value: -"API key (overrides SEMANTIC_SCHOLAR_API_KEY env var)"New value: +"API key (overrides SEMANTIC_SCHOLAR_API_KEY env var). Deprecated: prefer the environment variable. Removal planned for v2.0.0."
- Changed
semantic_scholar_paper_authors2 fields changed- added
Input schema / $defs / PaperAuthorsInput / properties / api_key / deprecatedAdded value: +true - changed
Input schema / $defs / PaperAuthorsInput / properties / api_key / descriptionPrevious value: -"API key (overrides SEMANTIC_SCHOLAR_API_KEY env var)"New value: +"API key (overrides SEMANTIC_SCHOLAR_API_KEY env var). Deprecated: prefer the environment variable. Removal planned for v2.0.0."
- Changed
semantic_scholar_recommendations2 fields changed- added
Input schema / $defs / PaperRecommendationsInput / properties / api_key / deprecatedAdded value: +true - changed
Input schema / $defs / PaperRecommendationsInput / properties / api_key / descriptionPrevious value: -"API key (overrides SEMANTIC_SCHOLAR_API_KEY env var)"New value: +"API key (overrides SEMANTIC_SCHOLAR_API_KEY env var). Deprecated: prefer the environment variable. Removal planned for v2.0.0."
- Changed
semantic_scholar_search_authors2 fields changed- added
Input schema / $defs / AuthorSearchInput / properties / api_key / deprecatedAdded value: +true - changed
Input schema / $defs / AuthorSearchInput / properties / api_key / descriptionPrevious value: -"API key (overrides SEMANTIC_SCHOLAR_API_KEY env var)"New value: +"API key (overrides SEMANTIC_SCHOLAR_API_KEY env var). Deprecated: prefer the environment variable. Removal planned for v2.0.0."
- Changed
semantic_scholar_search_papers2 fields changed- added
Input schema / $defs / PaperSearchInput / properties / api_key / deprecatedAdded value: +true - changed
Input schema / $defs / PaperSearchInput / properties / api_key / descriptionPrevious value: -"API key (overrides SEMANTIC_SCHOLAR_API_KEY env var)"New value: +"API key (overrides SEMANTIC_SCHOLAR_API_KEY env var). Deprecated: prefer the environment variable. Removal planned for v2.0.0."
- Changed
semantic_scholar_snippet_search2 fields changed- added
Input schema / $defs / SnippetSearchInput / properties / api_key / deprecatedAdded value: +true - changed
Input schema / $defs / SnippetSearchInput / properties / api_key / descriptionPrevious value: -"API key (overrides SEMANTIC_SCHOLAR_API_KEY env var)"New value: +"API key (overrides SEMANTIC_SCHOLAR_API_KEY env var). Deprecated: prefer the environment variable. Removal planned for v2.0.0."
TDQS
Scored across 14 tools
Each tool targets a distinct resource and action, and the descriptions explicitly disambiguate the closest pairs: search_papers vs bulk_search (relevance vs sorted/large), recommendations vs multi_recommend (one vs many seeds), and search_authors vs get_author vs paper_authors. Cross-references like 'use X instead of Y' make misselection unlikely.
All names use the semantic_scholar_ prefix and snake_case, which is highly predictable. There are minor deviations from a strict verb_noun pattern (status, recommendations, paper_authors, author_batch), but the naming remains readable and consistent overall.
14 tools is well-scoped for a research API client, covering search, retrieval, authors, recommendations, and citation export without redundancy. Each tool earns its place with a clear, non-overlapping capability.
The surface covers core read-only workflows: search (regular, bulk, snippet, title match), paper retrieval (single and bulk), author lookup (search, get, paper authors, batch), recommendations (single and multi), and BibTeX export. Minor gaps exist, such as no dedicated venue/dataset tools or full-text retrieval beyond snippets, but agents can work around these.
Maintenance
Related MCP Connectors
Search 340M+ academic papers — citation graphs, semantic similarity, and AI literature reviews.
Academic paper search, scientific literature, citation analysis, arXiv & semantic related-work.
Research paper search with real citations and reference formatting for AI assistants
Search and download academic papers from arXiv, PubMed, bioRxiv, medRxiv, Google Scholar, Semantic…
Related MCP Servers
- AlicenseNot gradedqualityDmaintenanceEnables searching and retrieving academic paper metadata from Semantic Scholar, including paper details, citations, and author information.20MIT
- FlicenseNot gradedqualityAmaintenanceEnables access to academic paper data, author profiles, and citation networks through the Semantic Scholar API, supporting paper search, batch retrieval, citation/reference tracking, author lookup, and recommendations.-
- FlicenseNot gradedqualityAmaintenanceEnables searching for academic papers, authors, and citation networks through the Semantic Scholar API. Supports full-text and title search, batch lookups, citation and reference tracking, author profiles, and paper recommendations.-
- FlicenseNot gradedqualityAmaintenanceEnables users to search and retrieve academic paper data, author profiles, citation networks, and paper recommendations via the Semantic Scholar API.-