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참고: 시스템 환경 변수를 API 키로 설정한 시점이 어떤 VSCode 창을 시작한 후라면, VSCode Extensions를 통해 실행되는 도구가 시스템 환경을 인식하도록 하려면 모든 VSCode 창을 닫아 VSCode를 완전히 다시 시작해야 합니다!
인증
Semantic Scholar는 많은 API 작업에 대해 인증되지 않은 접근을 지원합니다.
API 키를 사용할 수 있는 경우, 다음을 통해 MCP 프로세스에 노출하십시오:
$env:SEMANTIC_SCHOLAR_API_KEY = "..."키를 다음 위치에 두지 마십시오:
.mcp.json;.codex/config.toml;소스 코드;
커밋된
.env파일;테스트 픽스처.
MCP 서버는 키가 존재하면 자동으로 사용합니다.
인증이 필요한 작업은 키가 구성되지 않은 경우 명시적 오류를 반환해야 합니다.
(다시) 참고: 시스템 환경 변수를 API 키로 설정한 시점이 어떤 VSCode 창을 시작한 후라면, VSCode Extensions를 통해 실행되는 도구가 시스템 환경을 인식하도록 하려면 모든 VSCode 창을 닫아 VSCode를 완전히 다시 시작해야 합니다!
빌드 업데이트
.\rebuild.ps1 및 .\version.ps1 스크립트는 리빌드 시 버전 업데이트를 돕는 유틸리티로 제공됩니다:
rebuild.ps1
patch 번호를 자동 증가시키지 않고 리빌드하려면 스위치를 명시적으로 지정하십시오:
.\rebuild.ps1 -SkipVersionIncrement그렇지 않으면 .\rebuild.ps1이 pyproject.toml의 patch 번호를 직접 자동 증가시킵니다.
version.ps1
리빌드 없이 <major> | <minor> | <patch>를 증가시키려면:
.\version.ps1 patch -NoRebuildminor 버전을 증가시키고 patch를 0으로 초기화한 후 리빌드하려면:
.\version.ps1 minormajor 버전을 증가시키고 minor와 patch를 모두 0으로 초기화한 후 리빌드하려면:
.\version.ps1 majorMCP 클라이언트 구성
세 가지 Semantic Scholar MCP 서버는 다음 중 하나로 구성할 수 있습니다:
프로젝트 로컬(project-local) — 특정 저장소 내에서만 사용 가능
사용자 전역(user-global) — 저장소에 걸쳐 사용 가능
서버는 다음과 같습니다:
s2ag— Semantic Scholar Academic Graphs2_recommendations— Semantic Scholar Recommendations APIs2_datasets— Semantic Scholar Datasets API
아래 예시는 이 저장소가 다음 위치에 설치되어 있다고 가정합니다:
C:\MyRepos\Python\SemanticScholar_MCP필요에 따라 경로를 조정하십시오.
예시는 의도적으로 생성된 semantic-scholar-*.exe 콘솔 런처를 직접 호출하는 대신 가상 환경의 Python 인터프리터를 python -m ...으로 호출합니다. 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.tomlWindows에서는 일반적으로 다음과 같습니다:
%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 서버와 사용자 범위 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.jsonWindows에서:
%USERPROFILE%\.claude.jsonclaude 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가 익명 접근을 허용하는 곳에서는 인증되지 않은 상태로 유지됩니다.
프로젝트 로컬 vs. 사용자 전역
유용한 규칙은 다음과 같습니다:
범위 | Codex | Claude Code | 권장 시점 |
프로젝트 |
|
| 저장소가 이러한 연구 도구에 명시적으로 의존하는 경우 |
사용자 |
|
| Semantic Scholar를 여러 무관한 저장소에서 사용하려는 경우 |
에이전트가 명시적으로 문헌 발견을 수행할 것으로 기대되는 연구 저장소의 경우, 프로젝트 로컬 구성이 일반적으로 더 바람직합니다. 사용 가능한 연구 도구가 저장소와 함께 이동하기 때문입니다.
임의의 프로젝트에서 Semantic Scholar에 일반적으로 개인 접근하려는 경우 사용자 전역 구성이 더 편리합니다.
공유 속도 제한
Semantic Scholar의 초기 인증 속도 제한은 각 MCP 서버에 독립적으로 적용되는 것이 아니라 API 엔드포인트 전반에 걸쳐 적용됩니다.
따라서 이 저장소는 공유 프로세스 간 제한기를 사용합니다:
S2AG MCP ────────────────┐
│
Recommendations MCP ─────┼── shared limiter ──> Semantic Scholar
│
Datasets MCP ────────────┘기본 구현은 세 개의 로컬 서버 전체에서 초당 약 1회를 초과하지 않는 업스트림 요청을 허용해야 합니다.
이것은 여러 호스트가 동시에 실행될 때 중요합니다. 예를 들어:
VS Code / Codex
Claude Code
MCP Inspector
tests제한기는 각 프로세스에서 독립적인 시계를 유지하지 않고 이러한 프로세스들을 조정해야 합니다.
재시도 동작
일시적인 업스트림 실패는 제한된 지수 백오프(bounded exponential backoff)를 사용하여 재시도할 수 있습니다.
예시:
HTTP
429;일시적인
5xx응답;임시 네트워크 오류.
Retry-After가 제공되면 이를 존중합니다.
잘못된 요청, 거부된 인증, 누락된 리소스와 같은 일반적인 클라이언트 오류는 반복적으로 재시도되지 않습니다.
재시도는 제한됩니다. MCP는 무한정 재시도하지 않습니다.
S2AG MCP
다음을 실행합니다:
semantic-scholar-s2ag또는:
python -m semantic_scholar_mcp.s2ag.server초기 API 표면에는 다음이 포함될 예정입니다:
도구 | 용도 |
| 알려진 논문 하나 검색 |
| 알려진 논문들을 일괄 검색 |
| 구조화된/대량 논문 검색 |
| 관련도 순위 기반 논문 검색 |
| 한 논문을 인용하는 논문 한 페이지 검색 |
| 한 논문의 참고문헌 한 페이지 검색 |
| 알려진 저자 하나 검색 |
| 알려진 저자들을 일괄 검색 |
| 저자 검색 |
| 한 저자의 논문 한 페이지 검색 |
페이지네이션은 명시적으로 유지됩니다.
인용 요청은 인용 그래프를 재귀적으로 탐색하지 않습니다.
검색은 후속 검색을 자동으로 실행하지 않습니다.
Recommendations MCP
다음을 실행합니다:
semantic-scholar-recommendations또는:
python -m semantic_scholar_mcp.recommendations.server초기 표면은 의도적으로 작습니다:
도구 | 용도 |
| 시드 논문 하나를 사용하여 추천 요청 |
| 제공된 긍정 및 부정 논문 ID를 사용하여 추천 요청 |
서버는 호출자가 선택한 시드를 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초기 도구는 다음과 같습니다:
도구 | 용도 |
| 사용 가능한 데이터셋 릴리스 나열 |
| 특정 릴리스 조사 |
| 데이터셋의 메타데이터/매니페스트 정보 획득 |
| 릴리스 간 업데이트/삭제 매니페스트 획득 |
Datasets MCP는 의도적으로 전체 Semantic Scholar 데이터셋을 자동으로 다운로드하지 않습니다.
일부 Semantic Scholar 데이터셋은 매우 큽니다. 매니페스트를 검색하는 것은 적절한 MCP 작업이지만, 수 기가바이트 규모의 코퍼스 다운로드를 시작하는 것은 명시적인 사용자 제어 도구가 필요합니다.
향후 전용 CLI는 다음과 같은 명령을 제공할 수 있습니다:
s2-dataset download ...
s2-dataset update ...
s2-dataset verify ...그러한 작업을 암시적 MCP 동작으로 만들지 않고 말입니다.
결정성
이 프로젝트에서 결정적(deterministic)이라는 것은 도구 의미론이 명시적이고 검사 가능함을 의미합니다.
도구는 다음을 수행할 수 있습니다:
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린트 실행:
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 라이선스를 검토하십시오.
이 저장소의 표준 개발 및 API 사용 규칙은 AGENTS.md를 참조하십시오.
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.-