内容
# Resp MCP
[模型上下文协议(MCP)](https://modelcontextprotocol.io) 服务器,用于学术论文搜索。它为大型语言模型(LLM)和编码代理提供结构化工具,以搜索学术论文,遍历引用图,并跨越 arXiv、Semantic Scholar、OpenReview、OpenAlex、DBLP、Crossref、ACL Anthology 和主要 AI / ML / NLP / CV 会议论文集发现相关工作——所有结果均以干净的、标准化的 JSON 记录返回。
这是 [`resp`](https://github.com/monk1337/resp) 的 MCP 服务器:相同的论文收集功能,以工具形式暴露,供任何 MCP 客户端调用。
## 主要功能
- **每个来源一个工具。** 专门针对 arXiv、Semantic Scholar、OpenReview、OpenAlex、DBLP、Crossref、ACM、Connected Papers 和 ACL Anthology 的工具。
- **会议感知搜索。** 一个 `search_conference` 工具可以路由到 27 个会议(CVPR、ICCV、ECCV、ICML、NeurIPS、AAAI、EMNLP、IJCAI 等)的正确来源——您传递名称和年份,它处理其余部分。
- **引用图。** 通过 id、DOI 或 arXiv id 获取任何论文的引用、参考文献和相关论文。
- **标准化输出。** 每个工具返回相同的论文模式(`title`、`authors`、`year`、`venue`、`abstract`、`doi`、`pdf_url`、`num_citations`、`link`、...),因此结果可以在来源之间干净地合并。
- **无需密钥。** 开箱即用;可选的 Semantic Scholar 密钥可提高速率限制。
- **轻量级。** 纯 Python,仅需 `requests` + `beautifulsoup4` + `mcp`。
## 要求
- Python 3.9 或更新版本
- Claude Code、Claude Desktop、Cursor、Windsurf 或任何其他 MCP 客户端
## 入门指南
安装服务器:
```bash
pip install git+https://github.com/monk1337/resp_mcp
```
这会安装一个 `resp-mcp` 命令。大多数客户端的标准 MCP 配置均可正常工作:
```json
{
"mcpServers": {
"resp": {
"command": "resp-mcp"
}
}
}
```
### Claude Code
通过一条命令添加服务器:
```bash
claude mcp add resp -- resp-mcp
```
或者,不安装,直接作为模块运行:
```bash
claude mcp add resp -- python -m respmcp.server
```
然后验证它是否已连接:
```bash
claude mcp list
```
### Claude Desktop
将以下内容添加到您的 `claude_desktop_config.json`(设置 → 开发者 → 编辑配置):
```json
{
"mcpServers": {
"resp": {
"command": "resp-mcp",
"env": {
"SEMANTIC_SCHOLAR_API_KEY": "",
"RESP_CONTACT_EMAIL": "you@example.com"
}
}
}
}
```
重启应用程序,Resp 工具将出现在工具选择器中。
### Cursor / Windsurf / 其他客户端
使用与[入门指南](#getting-started)中相同的标准配置块——将 `command` 指向 `resp-mcp`(或 `python -m respmcp.server`)。
## 配置
服务器通过环境变量进行配置:
| 变量 | 描述 |
|---|---|
| `SEMANTIC_SCHOLAR_API_KEY` | 可选的 [Semantic Scholar API 密钥](https://www.semanticscholar.org/product/api),用于提高 Semantic Scholar 和引用工具的速率限制。 |
| `RESP_CONTACT_EMAIL` | 发送到 OpenAlex 和 Crossref 的联系邮箱,用于他们的更高吞吐量“礼貌池”。 |
| `RESP_CACHE_DIR` | ACL Anthology 索引的缓存位置。默认为 `~/.cache/resp-mcp`。 |
| `RESP_MCP_TRANSPORT` | `stdio`(默认)或 `http`,用于可流式 HTTP 传输。 |
### HTTP 传输
通过 HTTP 而不是 stdio 运行服务器:
```bash
RESP_MCP_TRANSPORT=http resp-mcp
```
然后将您的 MCP 客户端指向 HTTP 端点:
```json
{
"mcpServers": {
"resp": {
"url": "http://localhost:8000/mcp"
}
}
}
```
## 工具
### 论文搜索
| 工具 | 描述 |
|---|---|
| `search_arxiv` | 按关键词搜索 arXiv。 |
| `search_semantic_scholar` | 搜索 Semantic Scholar,可选年份范围。 |
| `search_openreview` | 搜索 OpenReview 提交(ICLR、NeurIPS tracks 等)。 |
| `search_openalex` | 搜索 OpenAlex,带有年份/主机/开放访问过滤器。 |
| `search_dblp` | 搜索 DBLP,可选会议过滤器。 |
| `search_acl` | 搜索 ACL Anthology。 |
| `search_acm` | 搜索 ACM Digital Library 论文。 |
| `search_connected_papers` | 搜索 Connected Papers 语料库。 |
### 会议论文集
| 工具 | 描述 |
|---|---|
| `search_conference` | 按名称和年份搜索任何已知会议;自动路由到正确的来源。 |
| `list_conferences` | 列出所有支持的会议及其获取方式。 |
| `search_neurips` | 搜索 NeurIPS 会议年份。 |
| `search_ijcai` | 搜索 IJCAI 会议年份。 |
| `search_cvf` | 搜索 CVF 会议年份(CVPR / ICCV / WACV)。 |
| `search_eccv` | 搜索 ECCV 会议论文集。 |
| `search_pmlr` | 搜索 PMLR 卷(例如 `v235` 表示 ICML 2024)。 |
| `search_aaai` | 搜索 AAAI 会议论文集。 |
**支持的会议**(`search_conference`):CVPR、ICCV、WACV、ECCV、ICML、AISTATS、UAI、COLT、ACML、CoLLAs、ACL、EMNLP、EACL、NAACL、CoNLL、COLING、LREC、TACL、Findings、IJCAI、NeurIPS、AAAI、ICPR、KDD、WWW、SIGIR、ICDM。
### 引用图
| 工具 | 描述 |
|---|---|
| `get_citations` | 获取给定论文的引用(按 S2 id、DOI 或 `arXiv:<id>`)。 |
| `get_references` | 获取给定论文的参考文献。 |
| `get_related_papers` | 获取给定标题、查询或论文 id 的相关论文。 |
### 聚合
| 工具 | 描述 |
|---|---|
| `search_all` | 同时搜索多个来源并合并/删除重复结果。 |
## 示例提示
连接后,您可以向代理询问以下问题:
- "在 arXiv 上搜索最近关于混合专家路由的论文。"
- "查找 EMNLP 2023 年关于检索增强生成的论文。"
- "获取引用 `arXiv:1706.03762` 的论文。"
- "查找与 'Attention Is All You Need' 相关的论文。"
- "搜索 CVPR 2024 和 ECCV 2024 年关于高斯 splatting 的论文。"
## 程序化使用
相同的功能以 Python 库的形式提供:
```python
from respmcp import Resp
resp = Resp() # 可选:Resp(semantic_scholar_api_key="...")
papers = resp.arxiv("multi-label text classification", max_results=10)
citing = resp.citations("arXiv:1706.03762", max_results=20)
related = resp.related_papers("attention is all you need")
icml = resp.conference("ICML", "diffusion models", year=2024)
for p in papers:
print(p.year, p.title, p.link)
```
## 开发
```bash
git clone https://github.com/monk1337/resp_mcp
cd resp_mcp
pip install -e ".[dev]"
pytest -q # 需要网络的实时集成测试
```
## 许可证
MIT