Skip to main content
Glama
404Simon

research-mcp

by 404Simon

Research MCP

用于学术研究的只读 MCP 服务器。让 LLM 代理能够搜索论文、查看元数据、追踪引用图谱、生成 BibTeX,并通过 FastMCP 工具读取开放获取 PDF 的全文。

环境要求

  • Python 3.13+

  • uv

  • 可访问公共 API 的互联网连接(无需 API 密钥)

工作原理

API

作用

Semantic Scholar

主要搜索、元数据、TLDR、引用图谱。优先尝试。

OpenAlex

当 Semantic Scholar 被限流时自动回退,同时用于开放获取 PDF 解析。

arXiv

专用预印本搜索(source="arxiv")、arXiv ID 查询和直接 PDF 下载。最适合按确切名称查找特定的近期论文。

DBLP

会议论文集调查(venue_proceedings)和按会议范围搜索。是“该会议接受什么论文”的权威来源。

Crossref

BibTeX 生成(transform/application/x-bibtex)。

PyMuPDF

PDF 文本提取。

Semantic Scholar 在无密钥使用时会被限流,因此每个请求都会以指数退避方式重试(遵循 Retry-After),然后才回退到 OpenAlex。结果始终会告知代理使用了哪个数据源。arXiv API 强制约 3 秒的间隔规则,服务器会遵守;DBLP 在快速连续请求时会重置连接,因此会议流页面也以 3 秒的礼貌延迟获取。

缓存

所有易失效的 API 响应、搜索结果、会议论文集语料库和 PDF 都缓存在 ~/.cache/research-mcp/ 下的磁盘中(api/ 用于 JSON 响应,pdf/ 用于下载的 PDF):

  • 新鲜的缓存命中会即时返回——重复查询不会访问网络。

  • 会议语料库(从 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"
    }
  }
}

环境变量(均为可选)

变量

用途

SEMANTIC_SCHOLAR_API_KEY

设置后可保证 1 RPS 和更高的可靠性(否则回退到 OpenAlex)。

RESEARCH_MCP_CACHE_DIR

API 响应和 PDF 的缓存位置。默认:~/.cache/research-mcp/

工具

search_papers

按关键词搜索学术论文,可选用会议和年份筛选。返回结构化结果,包含标题、年份、会议、作者、DOI、摘要、引用次数,以及可用的开放获取 PDF 链接。

参数

类型

描述

query

string(必填)

搜索词

venue

string(可选)

按会议筛选,例如 e-EnergyVLDB

year_start

int(可选)

最早出版年份

year_end

int(可选)

最晚出版年份

limit

int(可选)

最大结果数(默认 20)

source

string(可选)

auto(默认)、semanticscholaropenalexarxiv

source="arxiv" 搜索 arXiv 预印本 API,是按确切名称查找特定近期论文的推荐方式,例如 query='ti:"carbon intensity" AND abs:forecast'(arXiv 字段语法原样传递)。所有结果都会缓存,因此重复搜索即时完成。

venue_proceedings

调查某会议的实际论文集(实际发表的内容)。用于检查论文想法是否适合 ACM e-Energy 等会议。

参数

类型

描述

venue

string(必填)

会议名称(例如 e-Energy)或 DBLP 流键(例如 conf/eenergy

year

int(可选)

仅查看某一年的论文(例如 2024

query

string(可选)

主题筛选;论文按标题关键词重叠度排序

limit

int(可选)

最大结果数(默认 20)

完整会议语料库从 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.03506arXiv:2408.03506arxiv.org/abs/... URL)或 OpenAlex ID。

参数

类型

描述

doi_or_id

string(必填)

DOI、arXiv ID 或 OpenAlex ID

返回标题、作者、会议、年份、摘要、TLDR、引用次数、DOI 和开放获取 PDF:

get_citation_graph

向前或向后追踪论文的引用,进行滚雪球式搜索。

参数

类型

描述

paper_id

string(必填)

DOI、OpenAlex ID(W...)或 Semantic Scholar 论文 ID

direction

string(可选)

citing(默认,引用此论文的论文)或 referenced(其参考文献)

limit

int(可选)

最大结果数(默认 20)

get_bibtex

为 DOI 生成 BibTeX 条目。使用 Crossref 的原生转换;回退到从 OpenAlex 元数据本地生成(处理 Crossref 不认识的 arXiv DOI)。

参数

类型

描述

doi

string(必填)

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_or_pdf_url

string(必填)

DOI、arXiv ID 或 https://... PDF URL

max_chars

int(可选)

截断返回文本(默认 50000)

cache

bool(可选)

在本地缓存 PDF(默认 true

返回提取的文本、页数、来源 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 extraction

无需 API 密钥。运行 uv sync && uv run research-mcp 通过 stdio 启动服务器。

-
license - not tested
-
quality - not tested
C
maintenance

Maintenance

Maintainers
Response time
Release cycle
Releases (12mo)
Commit activity

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

View all MCP Connectors

Latest Blog Posts

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