research-mcp
Research MCP
学術研究のための読み取り専用 MCP サーバー。LLM エージェントが論文検索、メタデータの確認、引用グラフの追跡、BibTeX の生成、オープンアクセス PDF の全文読解を、すべて FastMCP ツール経由で行えるようにします。
要件
Python 3.13+
公開 API へのインターネットアクセス(API キー不要)
仕組み
API | 役割 |
Semantic Scholar | 一次検索、メタデータ、TLDR、引用グラフ。最初に試行します。 |
OpenAlex | Semantic Scholar がレート制限されたときの自動フォールバック、およびオープンアクセス PDF の解決。 |
arXiv | 専用プレプリント検索( |
DBLP | 会議 proceedings 調査( |
Crossref | BibTeX 生成( |
PyMuPDF | PDF テキスト抽出。 |
Semantic Scholar はキーなしで使用するとレート制限されるため、すべてのリクエストは指数バックオフ(Retry-After を尊重)で再試行し、その後 OpenAlex にフォールバックします。結果は常にエージェントにどのソースが使用されたかを伝えます。arXiv API は約 3 秒の間隔ルールを強制しており、サーバーはこれを尊重します。DBLP は高速な連続リクエストで接続をリセットするため、venue ストリームページも 3 秒のポライトネス遅延で取得されます。
キャッシュ
壊れやすい API レスポンス、検索結果、venue proceedings コーパス、PDF はすべて ~/.cache/research-mcp/ のディスクにキャッシュされます(api/ は JSON レスポンス、pdf/ はダウンロードした PDF)。
新鮮なキャッシュヒット は即座に提供されます。繰り返しのクエリはネットワークに触れません。
Venue コーパス(DBLP ページから組み立て)は全体としてキャッシュされるため、カンファレンスプログラムの再調査は DBLP がページを落としても即座に行えます。
古いフォールバック: API がダウンしているかレート制限中の場合、最後のキャッシュレスポンスが提供されるため、エージェントは依然として回答を得られます。
キャッシュ TTL: arXiv と BibTeX は 7 日(安定データ)、検索/メタデータと DBLP は 24 時間。場所は
RESEARCH_MCP_CACHE_DIRで上書きできます。
設定
コーディングエージェントの MCP 設定にサーバーを登録します。たとえば、Opencode の opencode.json では:
{
"mcp": {
"research-mcp": {
"command": [
"uvx",
"--from",
"git+https://github.com/404Simon/research-mcp",
"research-mcp"
],
"enabled": true,
"type": "local"
}
}
}環境変数(すべてオプション)
変数 | 目的 |
| 保証された 1 RPS と高い信頼性のために設定します(それ以外は OpenAlex にフォールバック)。 |
| API レスポンスと PDF がキャッシュされる場所。デフォルト: |
ツール
search_papers
キーワードで学術論文を検索し、オプションで venue と年でフィルタリングします。タイトル、年、venue、著者、DOI、要約、引用数、利用可能な場合はオープンアクセス PDF リンクを含む構造化結果を返します。
引数 | 型 | 説明 |
|
| 検索語 |
|
| venue でフィルタリング、例: |
|
| 最も早い出版年 |
|
| 最も遅い出版年 |
|
| 最大結果数(デフォルト 20) |
|
|
|
source="arxiv" は arXiv プレプリント API を検索し、正確な名前で特定の最近の論文を見つける推奨方法です。例: query='ti:"carbon intensity" AND abs:forecast'(arXiv フィールド構文はそのまま渡されます)。すべての結果はキャッシュされるため、繰り返しの検索は即座に行えます。
venue_proceedings
venue の proceedings(実際にそこで出版されるもの)を調査します。論文のアイデアが ACM e-Energy のようなカンファレンスに合うかどうかを確認するために使用します。
引数 | 型 | 説明 |
|
| venue 名(例: |
|
| 1 年分の論文のみ(例: |
|
| トピックフィルター。論文はタイトルとキーワードの重複でランク付けされます |
|
| 最大結果数(デフォルト 20) |
完全な venue コーパスは DBLP から取得され(100 件の上限を超えてページング)、クライアント側でランク付けされ、全体としてキャッシュされます。再調査は即座に行えます。
{"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
論文の完全なメタデータ。DOI(例: 10.1109/tpwrs.2018.2823641)、arXiv ID(例: 2408.03506、arXiv:2408.03506、または arxiv.org/abs/... URL)、または OpenAlex ID を受け付けます。
引数 | 型 | 説明 |
|
| DOI、arXiv ID、または OpenAlex ID |
タイトル、著者、venue、年、要約、TLDR、引用数、DOI、オープンアクセス PDF を返します:
get_citation_graph
論文の引用を前方または後方にたどってスノーボール検索を行います。
引数 | 型 | 説明 |
|
| DOI、OpenAlex ID( |
|
|
|
|
| 最大結果数(デフォルト 20) |
get_bibtex
DOI の BibTeX エントリを生成します。Crossref のネイティブ変換を使用し、OpenAlex メタデータからのローカル生成にフォールバックします(Crossref が知らない arXiv DOI を処理します)。
引数 | 型 | 説明 |
|
| 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
オープンアクセス PDF をダウンロードし、PyMuPDF でテキストを抽出します。DOI、arXiv ID(例: 2408.03506)、または直接 PDF URL を渡します。PDF はローカルにキャッシュされます(~/.cache/research-mcp/pdf/)。
引数 | 型 | 説明 |
|
| DOI、arXiv ID、または |
|
| 返されるテキストを切り詰める(デフォルト 50000) |
|
| PDF をローカルにキャッシュする(デフォルト |
抽出されたテキスト、ページ数、ソース URL、キャッシュされたパスを返します。オープンアクセス版が見つからない場合、エージェントは OA 版を検索するか、PDF URL を直接渡すように指示する明確なメッセージを受け取ります。
ファイル構造
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 extractionAPI キーは不要です。uv sync && uv run research-mcp を実行して、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