SemanticScholar_MCP
SemanticScholar_MCP
面向 Semantic Scholar 三组 API 家族的确定性 Model Context Protocol 接口:
S2AG — Academic Graph 搜索、元数据、作者、引文和参考文献。
Recommendations — Semantic Scholar 的论文推荐服务。
Datasets — 发布版本发现、数据集清单和增量数据集更新。
该项目有意提供轻量 API 包装器,而非一个智能体式文献研究系统。
设计
核心规则是:
一次 MCP 工具调用代表一个已记录的 Semantic Scholar 操作。
这些服务器执行传输层面的工作,如验证、身份认证、速率限制、重试和响应规范化。
它们不决定哪些文献在科学上重要。
例如:
Agent
│
├── "Search for paired-pulse TMS papers"
│ │
│ ▼
│ S2AG MCP
│ │
│ ▼
│ Semantic Scholar
│
├── "Recommend papers from these three seed papers"
│ │
│ ▼
│ Recommendations MCP
│ │
│ ▼
│ Semantic Scholar
│
└── "Describe the latest S2ORC dataset release"
│
▼
Datasets MCP
│
▼
Semantic Scholar搜索扩展、科学解读、摘要生成、引文图探索策略以及研究综合仍然由消费方智能体负责。
Related MCP server: Semantic Scholar MCP Server
仓库结构
SemanticScholar_MCP/
├── src/
│ └── semantic_scholar_mcp/
│ ├── common/
│ │ ├── client.py
│ │ ├── errors.py
│ │ ├── models.py
│ │ ├── rate_limit.py
│ │ └── __init__.py
│ ├── datasets/
│ │ ├── server.py
│ │ └── __init__.py
│ ├── recommendations/
│ │ ├── server.py
│ │ └── __init__.py
│ ├── s2ag/
│ │ ├── server.py
│ │ └── __init__.py
│ └── __init__.py
├── tests/
├── AGENTS.md
├── CLAUDE.md
├── pyproject.toml
└── README.md要求
Python 3.11 或更高版本
可访问 Semantic Scholar 的网络连接
可选的 Semantic Scholar API 密钥
实现使用官方 Python MCP SDK 的当前 v2 系列。
安装
创建虚拟环境:
py -3.14 -m venv .venv
.\.venv\Scripts\Activate.ps1以可编辑模式安装包含开发依赖的包:
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"或者使用 uv:
uv venv --python 3.14
uv pip install -e ".[dev]"不要求 Python 3.14;项目支持 Python 3.11 及更高版本。
配置好 Python 包环境后,可以选择运行测试:
pytest
ruff check .
ruff format --check .如果你已经将 SEMANTIC_SCHOLAR_API_KEY 配置为系统环境变量(参见下一节 身份认证),你还可以测试实时集成:
pytest --run-integration注意:如果你在启动任意 VSCode 窗口之后才将系统环境变量设置为你的 API 密钥,你需要关闭所有 VSCode 窗口以完全重启 VSCode,之后通过 VSCode 扩展运行的工具才能捕获到该系统环境变量!
身份认证
Semantic Scholar 支持对许多 API 操作进行无需认证的访问。
当有可用的 API 密钥时,请通过以下方式将其暴露给 MCP 进程:
$env:SEMANTIC_SCHOLAR_API_KEY = "..."不要将密钥放在:
.mcp.json;.codex/config.toml;源代码;
已提交的
.env文件;测试夹具。
当密钥存在时,MCP 服务器会自动使用它。
当未配置密钥时,需要身份认证的操作应返回明确的错误。
再次提醒:如果你在启动任意 VSCode 窗口之后才将系统环境变量设置为你的 API 密钥,你需要关闭所有 VSCode 窗口以完全重启 VSCode,之后通过 VSCode 扩展运行的工具才能捕获到该系统环境变量!
构建更新
提供了脚本 .\rebuild.ps1 和 .\version.ps1 作为实用工具,以便在重新构建时方便地进行版本更新:
rebuild.ps1
若要在不自动递增 patch 版本号的情况下重新构建,请显式指定该开关:
.\rebuild.ps1 -SkipVersionIncrement否则,.\rebuild.ps1 会直接自动递增 pyproject.toml 中的补丁版本号。
version.ps1
要在不重新构建的情况下递增 <major> | <minor> | <patch>:
.\version.ps1 patch -NoRebuild要递增 minor 版本、将 patch 重置为 0,并重新构建:
.\version.ps1 minor要递增 major 版本、将 minor 和 patch 都重置为 0,并重新构建:
.\version.ps1 majorMCP 客户端配置
三个 Semantic Scholar MCP 服务器可以通过以下任一方式配置:
项目本地,这样它们只在特定仓库内可用;或
用户全局,这样它们可在多个仓库中使用。
这些服务器是:
s2ag— Semantic Scholar Academic Graphs2_recommendations— Semantic Scholar Recommendations APIs2_datasets— Semantic Scholar Datasets API
下面的示例假定此仓库安装于:
C:\MyRepos\Python\SemanticScholar_MCP请根据需要调整路径。
示例特意使用 python -m ... 调用虚拟环境的 Python 解释器,而不是直接调用生成的 semantic-scholar-*.exe 控制台启动器。在 Windows 上进行本地开发时建议这样做,因为运行控制台启动器可能会阻止 pip 在可编辑模式重装期间替换它们。
Codex
Codex 同时支持用户全局和项目本地的 config.toml 文件。
项目本地 Codex 配置
创建或编辑:
<project>/.codex/config.toml例如:
[mcp_servers.s2ag]
command = 'C:\MyRepos\Python\SemanticScholar_MCP\.venv\Scripts\python.exe'
args = ["-m", "semantic_scholar_mcp.s2ag.server"]
startup_timeout_sec = 15
tool_timeout_sec = 120
enabled = true
[mcp_servers.s2_recommendations]
command = 'C:\MyRepos\Python\SemanticScholar_MCP\.venv\Scripts\python.exe'
args = ["-m", "semantic_scholar_mcp.recommendations.server"]
startup_timeout_sec = 15
tool_timeout_sec = 120
enabled = true
[mcp_servers.s2_datasets]
command = 'C:\MyRepos\Python\SemanticScholar_MCP\.venv\Scripts\python.exe'
args = ["-m", "semantic_scholar_mcp.datasets.server"]
startup_timeout_sec = 15
tool_timeout_sec = 120
enabled = true项目范围的 Codex 配置仅对 Codex 视为可信的项目加载。
用户全局 Codex 配置
要使这些服务器在多个项目中可供 Codex 使用,请将相同的配置放入:
~/.codex/config.toml在 Windows 上通常是:
%USERPROFILE%\.codex\config.toml例如:
C:\Users\<username>\.codex\config.tomlMCP 服务器块本身与上面的项目本地示例相同。
验证 Codex 配置
在终端中:
codex mcp list也可以使用以下命令检查单个注册项:
codex mcp get s2ag
codex mcp get s2_recommendations
codex mcp get s2_datasetsClaude Code
Claude Code 区分项目共享和用户范围的 MCP 服务器。
项目本地 / 项目共享 Claude 配置
创建:
<project>/.mcp.json内容为:
{
"mcpServers": {
"s2ag": {
"command": "C:\\MyRepos\\Python\\SemanticScholar_MCP\\.venv\\Scripts\\python.exe",
"args": [
"-m",
"semantic_scholar_mcp.s2ag.server"
]
},
"s2_recommendations": {
"command": "C:\\MyRepos\\Python\\SemanticScholar_MCP\\.venv\\Scripts\\python.exe",
"args": [
"-m",
"semantic_scholar_mcp.recommendations.server"
]
},
"s2_datasets": {
"command": "C:\\MyRepos\\Python\\SemanticScholar_MCP\\.venv\\Scripts\\python.exe",
"args": [
"-m",
"semantic_scholar_mcp.datasets.server"
]
}
}
}当 MCP 配置打算与该仓库的其他用户共享时,可以将此文件提交到消费方仓库中。
用户全局 Claude 配置
对于全局 Claude Code 配置,首选方法是让 Claude Code 管理用户范围的 MCP 注册。
运行:
claude mcp add --scope user s2ag -- "C:\MyRepos\Python\SemanticScholar_MCP\.venv\Scripts\python.exe" -m semantic_scholar_mcp.s2ag.server
claude mcp add --scope user s2_recommendations -- "C:\MyRepos\Python\SemanticScholar_MCP\.venv\Scripts\python.exe" -m semantic_scholar_mcp.recommendations.server
claude mcp add --scope user s2_datasets -- "C:\MyRepos\Python\SemanticScholar_MCP\.venv\Scripts\python.exe" -m semantic_scholar_mcp.datasets.serverClaude Code 目前将用户范围的 MCP 配置存储在:
~/.claude.json在 Windows 上:
%USERPROFILE%\.claude.json使用 claude mcp add --scope user 比手动编辑此文件更可取,因为 Claude Code 在 .claude.json 中还拥有其他状态。
使用以下命令验证注册:
claude mcp list如果某个特定版本的 Claude Code 在加载用户范围的 MCP 服务器时出现问题,项目中的 .mcp.json 配置是最简单的后备方案。
Semantic Scholar API 密钥
许多 Semantic Scholar 操作无需身份认证即可工作。需要 API 密钥的操作使用:
SEMANTIC_SCHOLAR_API_KEY不要将密钥提交到 MCP 配置文件中。
在 Windows 上,它可以作为用户环境变量持久化:
[Environment]::SetEnvironmentVariable(
"SEMANTIC_SCHOLAR_API_KEY",
"YOUR_API_KEY",
"User"
)设置该变量后,请重启 VS Code、Codex、Claude Code 或其他 MCP 主机,以便新启动的 MCP 进程能够继承它。
当密钥存在时,MCP 服务器会自动使用它;否则,在 Semantic Scholar 允许匿名访问的地方,它们保持未认证状态。
项目本地与用户全局
一个有用的规则是:
Scope | Codex | Claude Code | Recommended when |
Project |
|
| The repository explicitly depends on these research tools |
User |
|
| You want Semantic Scholar available in many unrelated repositories |
对于明确期望其智能体执行文献发现的科研仓库,项目本地配置通常更可取,因为可用的研究工具会随仓库一起分发。
对于从任意项目中普遍地个人访问 Semantic Scholar,用户全局配置更方便。
共享速率限制
Semantic Scholar 的初始认证速率限制适用于所有 API 端点,而不是独立地应用于每个 MCP 服务器。
因此,本仓库使用一个共享的进程间限制器:
S2AG MCP ────────────────┐
│
Recommendations MCP ─────┼── shared limiter ──> Semantic Scholar
│
Datasets MCP ────────────┘默认实现应允许三个本地服务器合计每秒最多发起大约一个上游请求。
当多个主机同时运行时,这一点很重要,例如:
VS Code / Codex
Claude Code
MCP Inspector
tests该限制器应协调这些进程,而不是在每个进程中各自维护独立的时钟。
重试行为
对于暂时性的上游故障,可以使用有界指数退避进行重试。
示例包括:
HTTP
429;暂时的
5xx响应;临时的网络故障。
如果提供了 Retry-After,则会遵守该值。
普通的客户端错误(如无效请求、身份认证被拒绝和资源缺失)不会被反复重试。
重试是有界的;MCP 绝不会无限期重试。
S2AG MCP
运行:
semantic-scholar-s2ag或:
python -m semantic_scholar_mcp.s2ag.server初始的 API 接口设计计划包括:
Tool | Purpose |
| Retrieve one known paper |
| Batch-retrieve known papers |
| Structured/bulk paper search |
| Relevance-ranked paper search |
| Retrieve one page of papers citing a paper |
| Retrieve one page of a paper's references |
| Retrieve one author |
| Batch-retrieve known authors |
| Search authors |
| Retrieve one page of an author's papers |
分页保持显式控制。
引用请求不会递归遍历引文图。
搜索不会自动发出后续搜索。
Recommendations MCP
运行:
semantic-scholar-recommendations或:
python -m semantic_scholar_mcp.recommendations.server初始功能面有意保持精简:
Tool | Purpose |
| Request recommendations using one seed paper |
| Request recommendations using supplied positive and negative paper IDs |
服务器会将调用者选择的种子传递给 Semantic Scholar。
它不会自行选择种子,也不会对结果应用第二层 LLM 生成的排序。
示例概念工作流:
positive:
paper A
paper B
paper C
negative:
paper D
│
▼
recommend_from_examples
│
▼
Semantic Scholar recommendation rankingDatasets MCP
运行:
semantic-scholar-datasets或:
python -m semantic_scholar_mcp.datasets.server初始工具包括:
Tool | Purpose |
| List available dataset releases |
| Inspect a particular release |
| Obtain metadata/manifest information for a dataset |
| Obtain update/delete manifests between releases |
Datasets MCP 特意不会自动下载完整的 Semantic Scholar 数据集。
某些 Semantic Scholar 数据集非常大。获取清单是合适的 MCP 操作;启动数 GB 的语料库下载则需要由用户显式控制的工具。
未来专用的 CLI 可能会提供如下命令:
s2-dataset download ...
s2-dataset update ...
s2-dataset verify ...而不会让这些操作成为隐式的 MCP 行为。
确定性
对于本项目,确定性意味着工具语义是显式且可检查的。
工具可以:
validate input
↓
wait for rate limiter
↓
make one documented API request
↓
retry transient transport failures if necessary
↓
normalize response
↓
return structured data工具绝不能悄然变成:
search
↓
search again with different terms
↓
fetch every page
↓
walk citations
↓
request recommendations
↓
rank with an LLM
↓
summarize papers更高级别的编排不属于本仓库的范围。
分页
分页由调用者控制。
当 Semantic Scholar 返回继续令牌、偏移量或等效游标时,MCP 会返回该值。
调用者可以显式请求下一页。
MCP 不会自动获取所有可用页面。
这既保护了确定性,也保护了 API 使用量。
字段
在 Semantic Scholar 支持显式响应字段的地方,工具应只请求调用者需要的字段。
为了易用性,可以提供一小组默认字段。
不应自动请求摘要或引文上下文等大型字段,除非它们是文档中工具默认值的一部分。
错误
上游状况应转换为稳定、可理解的 MCP 错误。
示例:
authentication_required
rate_limited
not_found
invalid_request
upstream_error
transport_error在有用的情况下,结构化错误可以保留:
HTTP 状态;
可重试性;
尝试次数;
Semantic Scholar 错误消息。
绝不得包含机密信息。
开发
运行单元测试:
pytest运行 lint 检查:
ruff check .检查格式:
ruff format --check .应用格式:
ruff format .Semantic Scholar 实时测试单独标记:
pytest --run-integration普通单元测试应模拟 HTTP 交互,且不得消耗 Semantic Scholar API 配额。
测试理念
最重要的测试验证 API 保真度。
对于每个 MCP 工具,测试都应确认:
input
↓
exact expected HTTP operation
↓
expected response normalization测试还应验证不存在隐藏行为。
例如,单个引文请求应只产生一次引文 API 操作——而不是自动请求后续页面或参考文献。
与研究工具的关系
本仓库应保持领域中立。
例如,它可以提供:
paper A cites paper B或者:
Semantic Scholar recommends paper C from seeds A and B但不应得出以下结论:
paper C is the strongest evidence for a particular neuroscience hypothesis这种解读可以由独立的研究仓库、Research MCP 或人类研究人员来完成。
这种分离使 Semantic Scholar 层能够保持:
确定性;
可复用性;
易于测试;
独立于任何特定科学领域;
可被不同的 MCP 主机和代理使用。
Semantic Scholar 使用
本项目旨在用于合法研究,必须遵守当前 Semantic Scholar API 许可证和文档。
API 使用应:
遵守现行速率限制;
在适当时使用批处理/批量操作;
仅请求所需字段;
使用有界指数退避;
保护 API 凭据;
避免不受限制的 API 爬取;
当确实需要语料库级访问时,优先使用 Datasets API。
使用 Semantic Scholar 响应数据的公开产品或展示可能还有额外的署名要求。在添加面向公众的数据展示之前,请查阅当前的 Semantic Scholar 许可证。
参见 AGENTS.md 了解本仓库的规范性开发和 API 使用规则。
Available Tools
10 toolsget_authorC
Get one Semantic Scholar author by author ID.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | ||
| author_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 says 'Get one author' and does not mention what happens on missing IDs, what fields are returned, rate limits, or any side effects. The behavior is minimally implied but not detailed.
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, terse sentence with no wasted words. It is appropriately concise for the scope, though it sacrifices detail for brevity. The structure is clean and front-loaded with the key action.
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 two parameters, no annotations, and an output schema (not shown), the description is too sparse. It fails to explain the fields parameter, usage context, or any behavioral nuances, leaving an agent with incomplete information to call 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?
Schema description coverage is 0%, so the description must compensate. It clarifies that author_id is used to identify the author, but completely omits any explanation of the 'fields' parameter—its purpose, allowed values, or format. With two parameters, this is a significant 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 clearly states the verb 'Get', the resource 'Semantic Scholar author', and the identifier 'author ID'. It distinguishes this from siblings like get_authors (plural) and search_authors (search-based), so an agent can easily tell it apart.
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 gives no explicit guidance on when to use this tool versus alternatives like search_authors or get_authors. There is no mention of conditions such as 'when you have a known author ID' or exclusions, leaving usage to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_author_papersC
Get one page of papers associated with a Semantic Scholar author.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| fields | No | ||
| offset | No | ||
| author_id | Yes | ||
| publication_date_or_year | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It usefully reveals pagination behavior ('one page'), but it leaves the meaning of 'associated' ambiguous (authored, co-authored, or cited?) and says nothing about ordering, rate limits, authentication, or failure 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?
A single 10-word sentence that front-loads the verb and resource. It is efficiently sized for a straightforward tool, though its brevity comes at the cost of the semantic gaps noted in other dimensions.
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 5 parameters at 0% schema coverage, overlapping siblings, and no annotations, the description is too thin to fully support correct invocation. An output schema exists, which spares it from documenting return values, but parameter semantics and tool-selection context remain unaddressed.
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% with 5 parameters, yet the description explains none of them. While names like author_id, limit, and offset are somewhat self-explanatory, the meaning and format of fields and publication_date_or_year are completely unexplained, and the description adds no value beyond the bare 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 states a specific verb and resource ('Get one page of papers associated with a Semantic Scholar author') that clearly distinguishes it from author-lookup siblings like get_author and search_authors. However, it does not explicitly differentiate from paper-lookup siblings like get_papers or search_papers, which could also be selected for fetching 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?
No guidance is given on when to use this tool versus alternatives such as get_papers, search_papers, or search_papers_relevance. With a sibling list full of overlapping paper-fetching tools, the absence of any selection criteria or exclusions leaves the agent to guess.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_authorsB
Batch-get up to 1000 Semantic Scholar author IDs.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | ||
| author_ids | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral disclosure burden. It does disclose two useful traits: the operation is batched and capped at 1000 IDs. However, it says nothing about handling of missing or invalid IDs, result ordering, rate limits, or authentication, leaving significant behavior unspecified.
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?
A single front-loaded sentence with no filler; the batch limit is placed prominently and every word contributes. It is concise without being empty.
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?
Insufficient for a tool with no annotations and no per-parameter documentation. The output schema may cover return shape, but the agent still lacks when-to-use guidance, understanding of the fields parameter, and failure behavior expectations.
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%, so the description must compensate. It does not: 'author IDs' only restates the author_ids property, and the optional fields parameter is completely unexplained even though it likely controls which author attributes are returned.
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 supplies a specific verb ('Batch-get'), a resource (Semantic Scholar authors), and a batch-size limit (1000), so the core operation is clear. It does not explicitly differentiate from the sibling get_author or search_authors, and 'author IDs' is slightly ambiguous as to whether IDs are the input or the returned objects.
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?
There is no guidance about when to use this tool versus get_author (single author) or search_authors (find authors by query). 'Batch' hints at multiple IDs, but no explicit conditions, preconditions, or alternatives are stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_citationsC
Get one page of papers that cite the requested paper.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| fields | No | ||
| offset | No | ||
| paper_id | Yes | ||
| publication_date_or_year | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It mentions pagination ('one page') but does not disclose behavior such as default limit, offset semantics, field filtering, or whether results are sorted. For a read tool, this is a moderate gap.
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 is front-loaded with the core action. It earns its place but could add a bit more context without becoming bloated.
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 5 parameters, 0% schema coverage, no annotations, and an output schema present, the description is too thin. It does not explain pagination parameters, field selection, or the output structure, making it incomplete for correct invocation.
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%, so the description must compensate, but it only explains paper_id implicitly. The limit, offset, fields, and publication_date_or_year parameters are not described at all, leaving the agent to guess their semantics.
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 ('Get') and resource ('papers that cite the requested paper'), which clearly identifies the tool's function. It does not explicitly distinguish it from siblings like get_references, but the resource is specific enough that an agent can infer the difference.
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_references or search_papers. The description implies a use case (fetching citing papers) but does not state exclusions or conditions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_paperB
Get one paper by Semantic Scholar ID or supported external identifier.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | ||
| paper_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden for behavioral disclosure. It only says 'get' and gives no information about read-only behavior, external identifier resolution, authentication/rate limits, or failure modes.
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 efficient sentence with no filler, and the key scoping information—one paper, by identifier—is front-loaded. Every word contributes to the agent's understanding.
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?
Since an output schema exists, the return shape does not need to be explained, and the description is adequate for a simple lookup. Still, the fields parameter is left unexplained and there is no guidance on which sibling tools to use for search or batch retrieval, leaving gaps in the full calling context.
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 adds useful meaning to paper_id by explaining that it accepts either a Semantic Scholar ID or a supported external identifier, which the schema alone does not convey. However, the optional fields parameter is not mentioned at all, and with 0% schema description coverage the description should compensate more fully.
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 a direct fetch of a single paper, keyed by Semantic Scholar ID or supported external identifier. The singular 'one paper' and identifier-based lookup distinguish it from search_papers, but it never explicitly names sibling tools such as get_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 the tool should be used when an identifier is already known, but it gives no explicit guidance about when not to use it or when to prefer search_papers/get_papers. This is usable guidance but left mostly to inference.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_papersA
Batch-get up to 500 caller-supplied paper identifiers.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | No | ||
| paper_ids | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the behavioral disclosure burden. It adds a useful constraint ('up to 500') and makes the retrieval semantics inferable from 'batch-get', but it does not mention handling of invalid IDs, over-limit requests, error behavior, or the effect of the optional fields parameter.
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 that conveys the verb, object, and key constraint with no filler. Every word earns its place and the structure makes the main behavior immediately clear.
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 output schema covers returned values, and paper_ids is clearly described enough for a straightforward batch fetch. However, the optional fields parameter is entirely unexplained and there is no explicit guidance distinguishing this tool from get_paper, so an agent may under-specify the request or choose the wrong sibling.
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%, so the description must compensate. It clarifies that paper_ids are caller-supplied paper identifiers and that the batch is capped at 500, but it says nothing about the fields parameter—its meaning, allowed values, or effect—leaving one of two parameters effectively undocumented.
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 names a specific verb ('batch-get'), resource ('papers'), and defining constraints ('up to 500 caller-supplied paper identifiers'). This clearly distinguishes it from the search_* siblings, which do not take caller-supplied paper_ids, and from get_paper, which is the singular variant.
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 phrase 'caller-supplied paper identifiers' signals that this tool is for known IDs rather than search queries, and 'batch' positions it for fetching multiple papers at once. It does not explicitly name get_paper for single lookups or state when not to use this tool, 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.
get_referencesC
Get one page of references cited by the requested paper.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| fields | No | ||
| offset | No | ||
| paper_id | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 mentions 'one page' which hints at pagination, but does not explain default page size, how offset/limit interact, whether results are sorted, or what happens if the paper has no references. It also does not disclose any rate limits, authentication needs, or side effects (though this is likely a read operation).
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 with no wasted words. It front-loads the core action and resource. However, it is so brief that it misses important parameter and usage details, so it is concise but under-specified.
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 has 4 parameters, 0% schema coverage, no annotations, and an output schema exists, the description is incomplete. It does not explain pagination parameters, field selection, or how the output is structured. The output schema may help, but the description should at least clarify the meaning of limit, offset, and fields to allow correct invocation.
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%, so the description must compensate for the four parameters. It only clarifies that paper_id identifies the paper whose references are returned. It does not explain limit, offset, or fields. The term 'one page' implies limit/offset but does not define their semantics or defaults. The fields parameter is completely unexplained, leaving the agent to guess what field names are valid.
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 ('Get') and resource ('references cited by the requested paper'), and the phrase 'one page' signals pagination. It is clear enough to distinguish from siblings like get_citations, which likely returns citing papers rather than cited references. However, it does not explicitly differentiate from get_paper or get_papers, which could also return reference lists.
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 gives no guidance on when to use this tool versus alternatives like get_citations or search_papers. It does not mention pagination behavior, how to request more pages, or any context about typical use cases. The only implied usage is that it returns references for a paper, but no exclusions or alternatives are provided.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_authorsC
Search authors by name using one offset-paginated request.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes | ||
| fields | No | ||
| offset | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
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 reveals that this is 'one offset-paginated request' and says nothing about matching semantics, ordering, rate limits, or read-only safety. This is minimal added context beyond the name.
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. Every word contributes to the core action, making it structurally clean and appropriately sized for such a simple tool.
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 annotations, four parameters, and a sibling set that includes get_authors and get_author, this description is insufficiently complete. An agent still needs to understand pagination behavior, fields semantics, and how this tool differs from the retrieval siblings. The output schema covers return values, but the calling context remains vague.
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%, so the description needed to explain query, limit, offset, and fields. It only hints that the query is a name and gives no details about field projections, pagination bounds, or how the parameters interact. The description fails to compensate for the schema 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 clearly states the verb 'search', the resource 'authors', and the filter 'by name', and it mentions offset pagination. It is distinguishable from siblings such as get_authors, though it does not explicitly contrast them.
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 about when to use search_authors versus get_authors or get_author. There are no conditions, exclusions, or alternative recommendations, leaving the agent to infer the appropriate context.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_papersC
Run one token-paginated /paper/search/bulk request.
This endpoint returns up to 1000 papers per upstream call and does not
accept a limit argument. Pass the returned token explicitly for the
next page.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| year | No | ||
| query | Yes | ||
| token | No | ||
| venue | No | ||
| fields | No | ||
| fields_of_study | No | ||
| open_access_pdf | No | ||
| publication_types | No | ||
| min_citation_count | No | ||
| publication_date_or_year | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure. It does disclose the key pagination behavior: returns up to 1000 papers per call, no limit argument, and requires the token for the next page. However, it does not mention other behaviors like filtering semantics, output format, or any potential side effects. The disclosure is useful but incomplete.
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 sentences with no redundancy. It front-loads the core action and states the pagination constraint efficiently. Every sentence earns its place.
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 11 parameters and zero schema descriptions, the description is severely under-specified. An agent cannot correctly construct a query without understanding parameters like fields_of_study, publication_types, min_citation_count, and publication_date_or_year. The output schema exists, but the input semantics are nearly absent, making this inadequate 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 0%, so the description must compensate. It explains the token parameter via pagination, but the other 10 parameters (query, sort, year, venue, fields, etc.) are left entirely to schema titles, which provide no semantic meaning. The description adds value only for the token, failing to clarify the rest.
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: running a bulk paper search request with pagination. It mentions the specific endpoint and the pagination behavior. However, it does not differentiate from the sibling search_papers_relevance, which likely orders by relevance, leaving ambiguity about when to choose one over the other.
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 explicit guidance on when to use this tool versus alternatives like search_papers_relevance or get_papers. It only implies bulk retrieval via the word 'bulk', but does not state conditions for selection or exclusion.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_papers_relevanceB
Run one relevance-ranked /paper/search request.
Relevance search is limited by Semantic Scholar to 100 results per call and 1000 relevance-ranked results total.
| Name | Required | Description | Default |
|---|---|---|---|
| year | No | ||
| limit | No | ||
| query | Yes | ||
| venue | No | ||
| fields | No | ||
| offset | No | ||
| fields_of_study | No | ||
| open_access_pdf | No | ||
| publication_types | No | ||
| min_citation_count | No | ||
| publication_date_or_year | No |
Output Schema
| Name | Required | Description |
|---|---|---|
No output parameters | ||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description must carry behavioral disclosure. It does disclose important limits (100 per call, 1000 total), which is useful. However, it omits other behavioral traits such as authentication requirements, side effects, or that it's a read operation, leaving gaps.
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?
Two sentences with no fluff, purpose front-loaded, and the limit context stated efficiently. Excellent structure for the information provided.
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 has 11 parameters with no schema descriptions and no output schema details in the description. The only contextual info is the result limits. Given the complexity, this is incomplete for correct usage; an agent would struggle with valid values for fields like publication_types or fields_of_study.
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%, so the description must compensate for parameter meaning. It provides no information about any of the 11 parameters, leaving agents to guess from names alone. This is a significant 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 clearly states the tool runs a relevance-ranked /paper/search request, specifying the verb and resource. It distinguishes from siblings through the 'relevance-ranked' qualifier, though it does not explicitly name the alternative search tool.
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 given on when to use this tool versus alternatives like search_papers. The description only mentions limits, not the selection criteria based on relevance needs.
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.
10 tool updates
v0.2.3- First observed
get_author - First observed
get_author_papers - First observed
get_authors - First observed
get_citations - First observed
get_paper - First observed
get_papers - First observed
get_references - First observed
search_authors - First observed
search_papers - First observed
search_papers_relevance
TDQS
Scored across 10 tools
Tools are mostly distinct: get_authors/get_author differ by batch vs single ID, and search_papers vs search_papers_relevance are differentiated by bulk vs relevance-ranked semantics. The only slight confusion is the two search variants, but descriptions clarify their differing endpoints.
Naming follows a consistent verb_noun pattern with get_ for retrieval and search_ for querying. search_papers_relevance is a minor deviation from the simple object naming, but it remains readable and predictable.
10 tools is well-scoped for a scholarly search and retrieval API, covering authors, papers, citations, references, and author-paper relationships without unnecessary redundancy.
The surface covers the core academic search workflows: author lookup, single/batch paper retrieval, external ID support, bulk and relevance search, citations, references, and author-associated papers. For a read-only domain, no major gaps are apparent.
Maintenance
Related MCP Connectors
Pay-per-use tool marketplace for AI agents. Search, price-check, and call APIs via MCP.
Real-time Amazon, WIPO & PACER data for AI agents — 19 tools via the MCP protocol.
- geoOAuthco.thinair
Geocoding, routing, isochrones, traffic, weather, and place search for AI agents. 19 MCP tools.
Related MCP Servers
- AlicenseNot gradedqualityBmaintenanceEnables AI agents to query the Semantic Scholar Academic Graph for scholarly paper data, supporting tools for search, retrieval, and analysis.10 npmMIT
- FlicenseNot gradedqualityAmaintenanceEnables MCP clients to search and retrieve academic papers, explore citation networks, inspect author profiles and publications, and generate paper recommendations through the Semantic Scholar API, including batch operations and customizable fields.-
- FlicenseNot gradedqualityAmaintenanceEnables AI assistants to search academic papers and retrieve metadata, abstracts, and available full-text content from Semantic Scholar and Crossref through MCP tools.-
- 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.-