research-mcp
Research MCP
Schreibgeschützter MCP-Server für akademische Forschung. Ermöglicht einem LLM-Agenten, Paper zu suchen, Metadaten zu prüfen, Zitationsgraphen zu verfolgen, BibTeX zu erzeugen und Volltexte von Open-Access-PDFs zu lesen – alles über FastMCP-Tools.
Anforderungen
Python 3.13+
Internetzugang zu den öffentlichen APIs (kein API-Schlüssel erforderlich)
So funktioniert es
API | Rolle |
Semantic Scholar | Primäre Suche, Metadaten, TLDRs, Zitationsgraph. Wird zuerst versucht. |
OpenAlex | Automatischer Fallback, wenn Semantic Scholar ratenbegrenzt ist, plus Auflösung von Open-Access-PDFs. |
arXiv | Dedizierte Preprint-Suche ( |
DBLP | Konferenzband-Übersichten ( |
Crossref | BibTeX-Erzeugung ( |
PyMuPDF | PDF-Text-Extraktion. |
Semantic Scholar ist ohne Schlüssel ratenbegrenzt, daher wird jede Anfrage mit exponentiellem Backoff (unter Beachtung von Retry-After) wiederholt, bevor auf OpenAlex zurückgegriffen wird. Die Ergebnisse teilen dem Agenten immer mit, welche Quelle verwendet wurde. Die arXiv-API erzwingt eine Abstandsregel von ~3 s, die der Server einhält; DBLP setzt Verbindungen bei schnellen aufeinanderfolgenden Anfragen zurück, daher werden Venue-Stream-Seiten ebenfalls mit einer Höflichkeitsverzögerung von 3 s abgerufen.
Caching
Alle fragilen API-Antworten, Suchergebnisse, Konferenzband-Korpora und PDFs werden auf der Festplatte unter ~/.cache/research-mcp/ zwischengespeichert (api/ für JSON-Antworten, pdf/ für heruntergeladene PDFs):
Frische Cache-Treffer werden sofort ausgeliefert – wiederholte Abfragen berühren das Netzwerk nicht.
Venue-Korpora (aus DBLP-Seiten zusammengestellt) werden als Ganzes gecacht, sodass erneute Übersichten über ein Konferenzprogramm sofort verfügbar sind, selbst wenn DBLP eine Seite fallen lässt.
Veralteter Fallback: Wenn eine API nicht verfügbar ist oder ratenbegrenzt, wird die letzte gecachte Antwort trotzdem ausgeliefert, sodass der Agent weiterhin eine Antwort erhält.
Cache-TTLs: 7 Tage für arXiv und BibTeX (stabile Daten), 24 h für Suche/Metadaten und DBLP. Überschreiben Sie den Speicherort mit
RESEARCH_MCP_CACHE_DIR.
Konfiguration
Registrieren Sie den Server in der MCP-Konfiguration Ihres Coding-Agenten. Zum Beispiel in Opencodes opencode.json:
{
"mcp": {
"research-mcp": {
"command": [
"uvx",
"--from",
"git+https://github.com/404Simon/research-mcp",
"research-mcp"
],
"enabled": true,
"type": "local"
}
}
}Umgebungsvariablen (alle optional)
Variable | Zweck |
| Setzen für garantierte 1 RPS und höhere Zuverlässigkeit (sonst Fallback auf OpenAlex). |
| Wo API-Antworten und PDFs zwischengespeichert werden. Standard: |
Tools
search_papers
Durchsucht akademische Paper nach Stichworten mit optionalen Venue- und Jahresfiltern. Liefert strukturierte Ergebnisse mit Titel, Jahr, Venue, Autoren, DOI, Abstract, Zitationsanzahl und – falls verfügbar – einem Open-Access-PDF-Link.
Argument | Typ | Beschreibung |
|
| Suchbegriffe |
|
| Nach Venue filtern, z. B. |
|
| Frühestes Veröffentlichungsjahr |
|
| Spätestes Veröffentlichungsjahr |
|
| Maximale Ergebnisse (Standard 20) |
|
|
|
source="arxiv" durchsucht die arXiv-Preprint-API und ist die empfohlene Methode, um bestimmte aktuelle Paper mit exaktem Namen zu finden, z. B. query='ti:"carbon intensity" AND abs:forecast' (die arXiv-Feldsyntax wird unverändert durchgereicht). Alle Ergebnisse werden zwischengespeichert, sodass wiederholte Suchen sofort erfolgen.
venue_proceedings
Übersicht über die Proceedings eines Venues (was dort tatsächlich veröffentlicht wird). Verwenden Sie dies, um zu prüfen, ob eine Paper-Idee zu einer Konferenz wie ACM e-Energy passt.
Argument | Typ | Beschreibung |
|
| Venue-Name (z. B. |
|
| Nur Paper aus einem Jahr (z. B. |
|
| Themenfilter; Paper werden nach Titel-Stichwort-Überlappung sortiert |
|
| Maximale Ergebnisse (Standard 20) |
Das vollständige Venue-Korpus wird von DBLP abgerufen (paginiert über sein 100-Treffer-Limit hinaus), clientseitig sortiert und als Ganzes zwischengespeichert – erneute Übersichten sind sofort verfügbar.
{"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
Vollständige Metadaten für ein Paper. Akzeptiert eine DOI (z. B. 10.1109/tpwrs.2018.2823641), eine arXiv-ID (z. B. 2408.03506, arXiv:2408.03506 oder eine arxiv.org/abs/...-URL) oder eine OpenAlex-ID.
Argument | Typ | Beschreibung |
|
| DOI, arXiv-ID oder OpenAlex-ID |
Liefert Titel, Autoren, Venue, Jahr, Abstract, TLDR, Zitationsanzahl, DOI und Open-Access-PDF:
get_citation_graph
Verfolgt die Zitationen eines Papers vorwärts oder rückwärts für die Schneeball-Suche.
Argument | Typ | Beschreibung |
|
| DOI, OpenAlex-ID ( |
|
|
|
|
| Maximale Ergebnisse (Standard 20) |
get_bibtex
Erzeugt einen BibTeX-Eintrag für eine DOI. Verwendet die native Transformation von Crossref; fällt auf lokale Erzeugung aus OpenAlex-Metadaten zurück (behandelt arXiv-DOIs, die Crossref nicht kennt).
Argument | Typ | Beschreibung |
|
| 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
Lädt ein Open-Access-PDF herunter und extrahiert dessen Text mit PyMuPDF. Übergeben Sie eine DOI, eine arXiv-ID (z. B. 2408.03506) oder eine direkte PDF-URL. PDFs werden lokal zwischengespeichert (~/.cache/research-mcp/pdf/).
Argument | Typ | Beschreibung |
|
| DOI, arXiv-ID oder |
|
| Zurückgegebenen Text kürzen (Standard 50000) |
|
| PDF lokal zwischenspeichern (Standard |
Liefert den extrahierten Text, die Seitenanzahl, die Quell-URL und den Cache-Pfad. Wenn keine Open-Access-Kopie gefunden wird, erhält der Agent eine klare Meldung, die ihn auffordert, nach einer OA-Kopie zu suchen oder direkt eine PDF-URL zu übergeben.
Dateistruktur
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 extractionKein API-Schlüssel erforderlich. Führen Sie uv sync && uv run research-mcp aus, um den Server über stdio zu starten.
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