research-mcp
Research MCP
Servidor MCP de solo lectura para investigación académica. Permite que un agente LLM busque artículos, inspeccione metadatos, siga grafos de citas, genere BibTeX y lea textos completos de PDF de acceso abierto, todo mediante herramientas FastMCP.
Requisitos
Python 3.13+
Acceso a Internet para las API públicas (no se requiere clave API)
Cómo funciona
API | Rol |
Semantic Scholar | Búsqueda principal, metadatos, TLDR, grafo de citas. Se intenta primero. |
OpenAlex | Respaldo automático cuando Semantic Scholar está limitado por tasa, además de resolución de PDF de acceso abierto. |
arXiv | Búsqueda dedicada de preprints ( |
DBLP | Encuestas de actas de congresos ( |
Crossref | Generación de BibTeX ( |
PyMuPDF | Extracción de texto de PDF. |
Semantic Scholar está limitado por tasa cuando se usa sin clave, por lo que cada solicitud se reintenta con retroceso exponencial (respetando Retry-After) antes de recurrir a OpenAlex. Los resultados siempre indican al agente qué fuente se usó. La API de arXiv impone una regla de espaciado de ~3 s, que el servidor respeta; DBLP restablece las conexiones en solicitudes rápidas y secuenciales, por lo que las páginas de flujo de sedes se obtienen con un retraso de cortesía de 3 s también.
Caché
Todas las respuestas frágiles de API, resultados de búsqueda, corpus de actas de congresos y PDF se almacenan en caché en disco bajo ~/.cache/research-mcp/ (api/ para respuestas JSON, pdf/ para PDF descargados):
Aciertos de caché frescos se sirven al instante: las consultas repetidas no tocan la red.
Corpus de sedes (ensamblados desde páginas de DBLP) se almacenan en caché como un todo, por lo que re-encuestar un programa de conferencia es instantáneo incluso si DBLP pierde una página.
Respaldo obsoleto: si una API está caída o limitando la tasa, se sirve la última respuesta en caché de todos modos, para que el agente aún obtenga una respuesta.
TTL de caché: 7 días para arXiv y BibTeX (datos estables), 24 h para búsqueda/metadatos y DBLP. Sobrescribe la ubicación con
RESEARCH_MCP_CACHE_DIR.
Configuración
Registra el servidor en la configuración MCP de tu agente de codificación. Por ejemplo, en opencode.json de Opencode:
{
"mcp": {
"research-mcp": {
"command": [
"uvx",
"--from",
"git+https://github.com/404Simon/research-mcp",
"research-mcp"
],
"enabled": true,
"type": "local"
}
}
}Variables de entorno (todas opcionales)
Variable | Propósito |
| Configúrala para garantizar 1 RPS y mayor fiabilidad (de lo contrario, recurre a OpenAlex). |
| Dónde se almacenan en caché las respuestas de API y los PDF. Predeterminado: |
Herramientas
search_papers
Busca artículos académicos por palabra clave con filtros opcionales de sede y año. Devuelve resultados estructurados con título, año, sede, autores, DOI, resumen, recuento de citas y un enlace a PDF de acceso abierto cuando está disponible.
Argumento | Tipo | Descripción |
|
| Términos de búsqueda |
|
| Filtrar por sede, p. ej. |
|
| Año de publicación más temprano |
|
| Año de publicación más reciente |
|
| Máximo de resultados (predeterminado 20) |
|
|
|
source="arxiv" busca en la API de preprints de arXiv y es la forma recomendada de encontrar artículos recientes específicos por nombre exacto, p. ej. query='ti:"carbon intensity" AND abs:forecast' (la sintaxis de campos de arXiv se pasa tal cual). Todos los resultados se almacenan en caché, por lo que las búsquedas repetidas son instantáneas.
venue_proceedings
Encuesta las actas de una sede (lo que realmente se publica allí). Úsalo para comprobar si una idea de artículo encaja en una conferencia como ACM e-Energy.
Argumento | Tipo | Descripción |
|
| Nombre de la sede (p. ej. |
|
| Solo artículos de un año (p. ej. |
|
| Filtro de tema; los artículos se clasifican por solapamiento de palabras clave en el título |
|
| Máximo de resultados (predeterminado 20) |
El corpus completo de la sede se obtiene de DBLP (paginado más allá de su límite de 100 resultados), se clasifica en el lado del cliente y se almacena en caché como un todo: las re-encuestas son instantáneas.
{"results": [
{"title": "Reinforcement Learning Approach for Optimal Distributed Energy Management in a Microgrid",
"year": 2018, "venue": "IEEE Transactions on Power Systems",
"authors": ["Elham Foruzan", "Leen-Kiat Soh", "S. Asgarpoor"],
"doi": "10.1109/tpwrs.2018.2823641",
"abstract": "In this paper, a multiagent-based model is used ...",
"citation_count": 297, "open_access_pdf": null,
"source": "openalex"}],
"note": "(Semantic Scholar unavailable — used OpenAlex instead: RequestFailed)",
"count": 1}paper_details
Metadatos completos de un artículo. Acepta un DOI (p. ej. 10.1109/tpwrs.2018.2823641), un ID de arXiv (p. ej. 2408.03506, arXiv:2408.03506 o una URL arxiv.org/abs/...) o un ID de OpenAlex.
Argumento | Tipo | Descripción |
|
| DOI, ID de arXiv o ID de OpenAlex |
Devuelve título, autores, sede, año, resumen, TLDR, recuento de citas, DOI y PDF de acceso abierto:
get_citation_graph
Sigue las citas de un artículo hacia adelante o hacia atrás para búsqueda en bola de nieve.
Argumento | Tipo | Descripción |
|
| DOI, ID de OpenAlex ( |
|
|
|
|
| Máximo de resultados (predeterminado 20) |
get_bibtex
Genera una entrada BibTeX para un DOI. Usa la transformación nativa de Crossref; recurre a la generación local a partir de metadatos de OpenAlex (maneja DOIs de arXiv que Crossref no conoce).
Argumento | Tipo | Descripción |
|
| DOI |
@article{Foruzan_2018, title={Reinforcement Learning Approach for Optimal Distributed Energy Management in a Microgrid}, volume={33}, ..., author={Foruzan, Elham and Soh, Leen-Kiat and Asgarpoor, Sohrab}, year={2018} }read_paper_full_text
Descarga un PDF de acceso abierto y extrae su texto con PyMuPDF. Pasa un DOI, un ID de arXiv (p. ej. 2408.03506) o una URL directa de PDF. Los PDF se almacenan en caché localmente (~/.cache/research-mcp/pdf/).
Argumento | Tipo | Descripción |
|
| DOI, ID de arXiv o URL de PDF |
|
| Trunca el texto devuelto (predeterminado 50000) |
|
| Almacena el PDF en caché localmente (predeterminado |
Devuelve el texto extraído, el recuento de páginas, la URL de origen y la ruta en caché. Si no se encuentra una copia de acceso abierto, el agente recibe un mensaje claro que le indica buscar una copia OA o pasar una URL de PDF directamente.
Estructura de archivos
src/
main.py # FastMCP server, tool definitions, fallback orchestration
client.py # HTTP client with retry/backoff (429/5xx, Retry-After)
cache.py # Disk cache (~/.cache/research-mcp/) with stale fallback
semanticscholar.py # Semantic Scholar: search, details, citations (optional API key)
openalex.py # OpenAlex: search, details, citation graph, OA-PDF resolution
arxiv.py # arXiv API: search, ID lookups (3 s politeness, 7-day cache)
dblp.py # DBLP: venue proceedings + venue-scoped search (paged corpus cache)
crossref.py # Crossref: BibTeX transform + local fallback generator
pdf.py # PDF download/validation/caching + PyMuPDF text extractionNo se requiere clave API. Ejecuta uv sync && uv run research-mcp para iniciar el servidor sobre stdio.
This server cannot be installed
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Connectors
Academic research MCP server for paper search, citation checks, graphs, and deep research.
Agent-native MCP server over the public saagarpatel.dev corpus. Read-only, stateless.
Read-only MCP over an agentic SLR workspace with per-claim citation verification
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/404Simon/research-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server