SemanticScholar_MCP
SemanticScholar_MCP
Interfaces deterministas del Model Context Protocol para las tres familias de API de Semantic Scholar:
S2AG — búsqueda en Academic Graph, metadatos, autores, citas y referencias.
Recommendations — el servicio de recomendación de artículos de Semantic Scholar.
Datasets — descubrimiento de versiones, manifiestos de conjuntos de datos y actualizaciones incrementales de conjuntos de datos.
El proyecto proporciona deliberadamente envoltorios finos de API en lugar de un sistema agéntico de investigación bibliográfica.
Diseño
La regla central es:
Una invocación de herramienta MCP representa una operación documentada de Semantic Scholar.
Los servidores realizan tareas a nivel de transporte, como validación, autenticación, limitación de velocidad, reintentos y normalización de respuestas.
No deciden qué literatura es científicamente importante.
Por ejemplo:
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 ScholarLa expansión de búsqueda, la interpretación científica, el resumen, la estrategia de exploración del grafo de citas y la síntesis de investigación siguen siendo responsabilidad del agente consumidor.
Related MCP server: Semantic Scholar MCP Server
Estructura del repositorio
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.mdRequisitos
Python 3.11 o superior
Acceso a Semantic Scholar a través de Internet
Clave de API de Semantic Scholar opcional
La implementación usa la línea v2 actual del SDK oficial de Python para MCP.
Instalación
Cree un entorno virtual:
py -3.14 -m venv .venv
.\.venv\Scripts\Activate.ps1Instale el paquete en modo editable con las dependencias de desarrollo:
python -m pip install --upgrade pip
python -m pip install -e ".[dev]"Alternativamente, con uv:
uv venv --python 3.14
uv pip install -e ".[dev]"Python 3.14 no es necesario; el proyecto es compatible con Python 3.11 y versiones posteriores.
Después de configurar el entorno del paquete Python, ejecute opcionalmente las pruebas:
pytest
ruff check .
ruff format --check .Si ya ha configurado SEMANTIC_SCHOLAR_API_KEY como variable de entorno del sistema (consulte la siguiente sección, Autenticación), también puede probar la integración en vivo:
pytest --run-integrationNota: Si establece la variable de entorno del sistema con su clave de API después de iniciar cualquier ventana de VSCode, debe cerrar todas las ventanas de VSCode para reiniciar VSCode por completo antes de que el entorno del sistema sea capturado por las herramientas ejecutadas a través de las extensiones de VSCode.
Autenticación
Semantic Scholar permite el acceso sin autenticación a muchas operaciones de la API.
Cuando haya una clave de API disponible, expóngala a los procesos MCP mediante:
$env:SEMANTIC_SCHOLAR_API_KEY = "..."No coloque la clave en:
.mcp.json;.codex/config.toml;código fuente;
archivos
.envconfirmados;archivos de prueba.
Los servidores MCP usan la clave automáticamente cuando está presente.
Las operaciones que requieren autenticación deberían devolver un error explícito cuando no hay ninguna clave configurada.
Nota (de nuevo): Si establece la variable de entorno del sistema con su clave de API después de iniciar cualquier ventana de VSCode, debe cerrar todas las ventanas de VSCode para reiniciar VSCode por completo antes de que el entorno del sistema sea capturado por las herramientas ejecutadas a través de las extensiones de VSCode.
Actualizaciones de compilación
Los scripts .\rebuild.ps1 y .\version.ps1 se proporcionan como utilidades para facilitar las actualizaciones de versión al recompilar:
rebuild.ps1
Para recompilar sin incrementar automáticamente el número de patch, especifique explícitamente la opción:
.\rebuild.ps1 -SkipVersionIncrementDe lo contrario, .\rebuild.ps1 incrementa automáticamente el número de patch directamente en pyproject.toml.
version.ps1
Para incrementar <major> | <minor> | <patch> sin recompilar:
.\version.ps1 patch -NoRebuildPara incrementar la versión minor, restableciendo patch a 0, y recompilar:
.\version.ps1 minorPara incrementar la versión major, restableciendo tanto minor como patch a 0, y recompilar:
.\version.ps1 majorConfiguración del cliente MCP
Los tres servidores MCP de Semantic Scholar pueden configurarse:
a nivel de proyecto, de modo que estén disponibles solo dentro de un repositorio concreto; o
a nivel de usuario, de modo que estén disponibles en todos los repositorios.
Los servidores son:
s2ag— Semantic Scholar Academic Graphs2_recommendations— Semantic Scholar Recommendations APIs2_datasets— Semantic Scholar Datasets API
Los ejemplos siguientes asumen que este repositorio está instalado en:
C:\MyRepos\Python\SemanticScholar_MCPAjuste la ruta según sea necesario.
Los ejemplos invocan deliberadamente el intérprete de Python del entorno virtual con python -m ... en lugar de invocar directamente los lanzadores de consola semantic-scholar-*.exe generados. Esto se recomienda durante el desarrollo local en Windows porque ejecutar los lanzadores de consola puede impedir que pip los reemplace durante una reinstalación editable.
Codex
Codex admite tanto archivos config.toml globales de usuario como locales de proyecto.
Configuración de Codex local de proyecto
Cree o edite:
<project>/.codex/config.tomlPor ejemplo:
[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 = trueLa configuración de Codex con ámbito de proyecto se carga solo para proyectos que Codex considera de confianza.
Configuración de Codex global de usuario
Para que los servidores estén disponibles para Codex en todos los proyectos, coloque la misma configuración en:
~/.codex/config.tomlEn Windows normalmente es:
%USERPROFILE%\.codex\config.tomlPor ejemplo:
C:\Users\<username>\.codex\config.tomlLos bloques de servidor MCP en sí son idénticos al ejemplo local de proyecto anterior.
Verificar la configuración de Codex
Desde una terminal:
codex mcp listLos registros individuales también pueden inspeccionarse con:
codex mcp get s2ag
codex mcp get s2_recommendations
codex mcp get s2_datasetsClaude Code
Claude Code distingue entre servidores MCP compartidos de proyecto y servidores MCP con ámbito de usuario.
Configuración de Claude local de proyecto / compartida de proyecto
Cree:
<project>/.mcp.jsoncon:
{
"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"
]
}
}
}Este archivo puede confirmarse en el repositorio consumidor cuando se pretenda compartir la configuración de MCP con otros usuarios de ese repositorio.
Configuración de Claude global de usuario
Para la configuración global de Claude Code, el enfoque preferido es permitir que Claude Code gestione los registros MCP con ámbito de usuario.
Ejecute:
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 almacena actualmente la configuración MCP con ámbito de usuario en:
~/.claude.jsonEn Windows:
%USERPROFILE%\.claude.jsonUsar claude mcp add --scope user es preferible a editar este archivo manualmente porque Claude Code posee estado adicional en .claude.json.
Verifique los registros con:
claude mcp listSi una versión concreta de Claude Code tiene problemas para cargar servidores MCP con ámbito de usuario, la configuración .mcp.json del proyecto es el recurso alternativo más sencillo.
Clave de API de Semantic Scholar
Muchas operaciones de Semantic Scholar pueden funcionar sin autenticación. Las operaciones que requieren una clave de API usan:
SEMANTIC_SCHOLAR_API_KEYNo confirme la clave en un archivo de configuración de MCP.
En Windows, puede persistirse como variable de entorno de usuario:
[Environment]::SetEnvironmentVariable(
"SEMANTIC_SCHOLAR_API_KEY",
"YOUR_API_KEY",
"User"
)Reinicie VS Code, Codex, Claude Code u otros hosts MCP después de establecer la variable para que los procesos MCP recién iniciados la hereden.
Los servidores MCP usan la clave automáticamente cuando está presente y, en caso contrario, permanecen sin autenticación donde Semantic Scholar permite el acceso anónimo.
Local de proyecto vs. global de usuario
Una regla útil es:
Ámbito | Codex | Claude Code | Recomendado cuando |
Proyecto |
|
| El repositorio depende explícitamente de estas herramientas de investigación |
Usuario |
|
| Quiere que Semantic Scholar esté disponible en muchos repositorios no relacionados |
Para un repositorio de investigación cuyos agentes deben realizar explícitamente descubrimiento bibliográfico, la configuración local de proyecto suele ser preferible porque las herramientas de investigación disponibles viajan con el repositorio.
Para el acceso personal general a Semantic Scholar desde proyectos arbitrarios, la configuración global de usuario es más conveniente.
Limitación de velocidad compartida
El límite de velocidad autenticado inicial de Semantic Scholar se aplica a todos los endpoints de la API, no de forma independiente a cada servidor MCP.
Por lo tanto, este repositorio utiliza un limitador interproceso compartido:
S2AG MCP ────────────────┐
│
Recommendations MCP ─────┼── shared limiter ──> Semantic Scholar
│
Datasets MCP ────────────┘La implementación predeterminada debería permitir no más de aproximadamente una solicitud al servicio ascendente por segundo en los tres servidores locales.
Esto es importante cuando varios hosts se ejecutan simultáneamente, por ejemplo:
VS Code / Codex
Claude Code
MCP Inspector
testsEl limitador debería coordinar estos procesos en lugar de mantener un reloj independiente en cada uno.
Comportamiento de reintentos
Los fallos transitorios del servicio ascendente pueden reintentarse mediante un retroceso exponencial acotado.
Los ejemplos incluyen:
HTTP
429;respuestas
5xxtransitorias;fallos de red temporales.
Se respeta Retry-After cuando se proporciona.
Los errores comunes de cliente, como solicitudes no válidas, autenticación rechazada y recursos inexistentes, no se reintentan repetidamente.
Los reintentos están acotados; el MCP nunca reintenta indefinidamente.
S2AG MCP
Ejecute:
semantic-scholar-s2ago:
python -m semantic_scholar_mcp.s2ag.serverLa superficie inicial de la API pretende incluir:
Tool | Propósito |
| Recuperar un artículo conocido |
| Recuperar artículos conocidos por lotes |
| Búsqueda estructurada/masiva de artículos |
| Búsqueda de artículos ordenados por relevancia |
| Recuperar una página de artículos que citan un artículo |
| Recuperar una página de las referencias de un artículo |
| Recuperar un autor |
| Recuperar autores conocidos por lotes |
| Buscar autores |
| Recuperar una página de los artículos de un autor |
La paginación sigue siendo explícita.
Una solicitud de citas no recorre recursivamente el grafo de citas.
Una búsqueda no emite automáticamente búsquedas de seguimiento.
Recommendations MCP
Ejecute:
semantic-scholar-recommendationso:
python -m semantic_scholar_mcp.recommendations.serverLa superficie inicial es deliberadamente pequeña:
Tool | Propósito |
| Solicitar recomendaciones usando un artículo semilla |
| Solicitar recomendaciones usando los IDs de artículos positivos y negativos proporcionados |
El servidor pasa a Semantic Scholar las semillas seleccionadas por el llamante.
No elige sus propias semillas ni aplica una segunda clasificación generada por LLM a los resultados.
Flujo de trabajo conceptual de ejemplo:
positive:
paper A
paper B
paper C
negative:
paper D
│
▼
recommend_from_examples
│
▼
Semantic Scholar recommendation rankingDatasets MCP
Ejecute:
semantic-scholar-datasetso:
python -m semantic_scholar_mcp.datasets.serverLas herramientas iniciales son:
Tool | Propósito |
| Listar las versiones disponibles de conjuntos de datos |
| Inspeccionar una versión concreta |
| Obtener metadatos/información de manifiesto para un conjunto de datos |
| Obtener manifiestos de actualización/eliminación entre versiones |
El MCP de Datasets deliberadamente no descarga automáticamente conjuntos de datos completos de Semantic Scholar.
Algunos conjuntos de datos de Semantic Scholar son muy grandes. Recuperar un manifiesto es una operación MCP apropiada; iniciar la descarga de un corpus de varios gigabytes requiere herramientas explícitas controladas por el usuario.
Una CLI dedicada futura podría proporcionar comandos como:
s2-dataset download ...
s2-dataset update ...
s2-dataset verify ...sin convertir esas operaciones en comportamiento implícito del MCP.
Determinismo
Para este proyecto, determinista significa que la semántica de las herramientas es explícita e inspeccionable.
Una herramienta puede:
validate input
↓
wait for rate limiter
↓
make one documented API request
↓
retry transient transport failures if necessary
↓
normalize response
↓
return structured dataUna herramienta no debe convertirse silenciosamente en:
search
↓
search again with different terms
↓
fetch every page
↓
walk citations
↓
request recommendations
↓
rank with an LLM
↓
summarize papersLa orquestación de nivel superior queda fuera de este repositorio.
Paginación
La paginación está controlada por el llamante.
Cuando Semantic Scholar devuelve un token de continuación, un desplazamiento o un cursor equivalente, el MCP devuelve ese valor.
El llamante puede solicitar explícitamente otra página.
El MCP no obtiene automáticamente todas las páginas disponibles.
Esto protege tanto el determinismo como el uso de la API.
Campos
Cuando Semantic Scholar admite campos de respuesta explícitos, las herramientas deberían solicitar solo los campos que necesita el llamante.
Se puede proporcionar un pequeño conjunto de campos predeterminado para facilitar su uso.
Los campos grandes, como los resúmenes o los contextos de citas, no deberían solicitarse automáticamente a menos que formen parte del valor predeterminado documentado de la herramienta.
Errores
Las condiciones del servicio ascendente deberían traducirse en errores MCP estables y comprensibles.
Ejemplos:
authentication_required
rate_limited
not_found
invalid_request
upstream_error
transport_errorCuando sea útil, el error estructurado puede conservar:
estado HTTP;
capacidad de reintento;
número de intentos;
mensaje de error de Semantic Scholar.
Los secretos nunca deben incluirse.
Desarrollo
Ejecutar pruebas unitarias:
pytestEjecutar linting:
ruff check .Comprobar el formato:
ruff format --check .Aplicar el formato:
ruff format .Las pruebas en vivo de Semantic Scholar se marcan por separado:
pytest --run-integrationLas pruebas unitarias ordinarias deben simular las interacciones HTTP y no deben consumir la cuota de la API de Semantic Scholar.
Filosofía de pruebas
Las pruebas más importantes verifican la fidelidad de la API.
Para cada herramienta de MCP, las pruebas deben confirmar:
input
↓
exact expected HTTP operation
↓
expected response normalizationLas pruebas también deben verificar la ausencia de comportamiento oculto.
Por ejemplo, una única solicitud de cita debe generar una operación de la API de citas, no solicitar automáticamente páginas o referencias posteriores.
Relación con las herramientas de investigación
Este repositorio debe permanecer neutral en cuanto al dominio.
Por ejemplo, puede exponer:
paper A cites paper Bo:
Semantic Scholar recommends paper C from seeds A and Bpero no debe concluir:
paper C is the strongest evidence for a particular neuroscience hypothesisUn repositorio de investigación separado, Research MCP o un investigador humano puede hacer esa interpretación.
Esta separación permite que la capa de Semantic Scholar siga siendo:
determinista;
reutilizable;
fácil de probar;
independiente de cualquier campo científico específico;
utilizable por diferentes hosts y agentes de MCP.
Uso de Semantic Scholar
Este proyecto está destinado a un uso legítimo de investigación y debe cumplir con la licencia y la documentación actuales de la API de Semantic Scholar.
El uso de la API debe:
respetar los límites de tasa activos;
usar operaciones por lotes/masivas cuando corresponda;
solicitar solo los campos necesarios;
utilizar retroceso exponencial acotado;
proteger las credenciales de la API;
evitar el rastreo no restringido de la API;
preferir la API de Datasets cuando se requiera acceso realmente a escala de corpus.
Los productos o visualizaciones públicos que utilicen datos de respuesta de Semantic Scholar pueden tener requisitos adicionales de atribución. Revise la licencia actual de Semantic Scholar antes de añadir una presentación de datos dirigida al público.
Consulte AGENTS.md para conocer las reglas normativas de desarrollo y uso de la API de este repositorio.
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.-