mcpField
T
The Abstractinator

The Abstractinator

远程服务
abstractinator.me搜索与检索01 天前更新

关于 The Abstractinator

The Abstractinator 面向研究人员和 AI 助手,跨多个数据库搜索免疫学与病毒学文献、临床试验和资助项目。它并行查询来源、合并重复记录,并为结果标注免疫细胞和病原体类别;远程 MCP 服务可免密钥访问开放来源。

主要功能

  1. 01并行搜索多个研究数据库
  2. 02跨来源合并重复记录
  3. 03标注免疫细胞和病原体
  4. 04交互式趋势图表
  5. 05导出阅读列表到 Zotero 或 EndNote

适用场景

  1. 01检索免疫学主题相关文献
  2. 02查找相关临床试验和资助项目
  3. 03查看病毒与免疫细胞的趋势
  4. 04将选定论文导出到 Zotero 或 EndNote

MCP 相关

远程 MCP 服务提供 `search_literature` 工具,返回来自开放来源且按来源均衡的记录。MCP 访问无需 API 密钥,并设有调用频率限制。

配置

远程服务无需本地安装。选择你使用的客户端,复制配置或使用一键安装。

服务地址https://mcp.abstractinator.me/mcp
一键复制安装命令
Claude CodeTerminal
Cursor.cursor/mcp.json
VS Code.vscode/mcp.json
Claude Desktopclaude_desktop_config.json
Windsurf~/.codeium/windsurf/mcp_config.json

命令在终端中运行;JSON 粘贴到对应客户端的 MCP 配置后重启。需要授权的服务会在首次连接时提示登录。

工具

详细介绍

The Abstractinator 独角鲸

The Abstractinator

一次搜索,同时检索多个数据库中的免疫学与病毒学文献。
abstractinator.me · 连接你的 AI · 自行托管


The Abstractinator 将文献检索整合为一次搜索。它会并行查询 Europe PMC、OpenAlex、 ClinicalTrials.gov、bioRxiv/medRxiv、NIH RePORTER 和 NSF Awards,合并不同来源的 重复记录,并使用加权标题/摘要评分矩阵,为每条记录标注最显著的免疫细胞类型 和病毒。

新搜索大约需要 5–10 秒;7 天内重复搜索可即时完成。

✨ 功能

Searchinator同时查询所有来源;搜索速度取决于最慢的来源,而非所有来源耗时之和。
Deep search可选模式,每个来源最多提取 250 条结果,而不是 50 条(覆盖范围约提升 4 倍,耗时约 15–30 秒)。
Deduplicatinator按 DOI(包括预印本 → 已发表论文的 DOI 链接)合并不同来源的记录,再按标题合并,并优先采用整理质量最佳的来源。
标注根据整理过的别名列表,为每条记录标注其最相关的免疫细胞类型、病毒和细菌。
Plotinator pools无需重新搜索,即可在病毒和细菌(或你添加的任何类别)之间切换图表的病原体轴。
Plotinator展示病毒与免疫趋势随时间变化的交互式图表。
Readinator创建阅读列表,并导出到 Zotero 或 EndNote。
Agentinator一个 MCP 服务,让 AI 助手(Claude 等)可以直接搜索 The Abstractinator。

📚 数据来源

来源访问方式覆盖范围
Europe PMC开放生物医学文献(包括 PubMed)
OpenAlex开放全球学术图谱
ClinicalTrials.gov开放人体临床研究注册信息
bioRxiv / medRxiv开放(本地副本)预印本,从每日更新的本地 Parquet 存储中检索
NIH RePORTER开放美国联邦政府资助项目
NSF Awards开放基础研究资助项目
CORE你的 API 密钥开放获取全文聚合
USPTO (PatentsView)你的 API 密钥专利
Scopus / Embase你的 API 密钥,默认关闭摘要检索仅在订阅机构的网络中可用,因此除非设置 ENABLE_SCOPUS=1,否则会禁用

需要密钥的来源采用自带密钥模式:在 Settings(☰)中输入密钥。密钥仅保存在你的 浏览器会话中,不会被记录或写入磁盘,也不会与其他访客共享。

🤖 与 AI 搭配使用

The Abstractinator 提供远程 MCP 服务。MCP 是 AI 助手用来连接工具的开放标准。

https://mcp.abstractinator.me/mcp

**在 Claude 中:**依次选择 Settings → Connectors → Add custom connector → 粘贴上方的 URL,并选择 No sign-in 进行身份验证。然后直接提问,例如:“在 The Abstractinator 中搜索黑色素瘤的溶瘤 病毒试验。” 任何支持远程(可流式传输的 HTTP)服务的 MCP 客户端也都能使用。

该服务提供一个工具:

search_literature(query, max_results=25, abstract_chars=1500, deep=False) 返回 total_found、source_counts,以及一个均衡呈现各来源的记录列表,包含 title、 abstract、authors、publication_date、doi、url、source、primary_cell、 primary_virus 和 is_bioinformatics。

AI 连接器仅使用开放获取来源(无需密钥,也不会消耗密钥),并设有速率限制,以确保所有人都能使用该服务。

🏗️ 工作原理

Browser ──► Cloudflare ──► abstractinator.me      ──► Shiny Server :3838 (app.R) ─────────┐
                                                                                          ├─► search engine ──► shared cache
AI      ──► Cloudflare ──► mcp.abstractinator.me ──► MCP server :8200 (agent/mcp_server.py)│     (orchestrate_extraction.R)
                                                         └──► REST API :8100 (agent/api.R) ┘
  • 一个搜索引擎,两个入口。 orchestrate_extraction.R 会检查缓存,将每个来源作为后台任务(future)启动,然后合并、去重并标记结果。网站通过 Shiny 的 ExtendedTask 异步调用它,因此一位访客的搜索不会让其他人的页面卡住。REST API 则同步调用相同的代码。
  • 共享缓存。 搜索结果会在 .cache/s3_mimic/ 中缓存 7 天(每次搜索对应一个 .rds 文件,按搜索词、深度和使用了哪些需要密钥的来源作为键)。一个人搜索过的内容,AI 搜索时也会立即返回,反之亦然。
  • 本地预印本。 bioRxiv/medRxiv 的搜索通过 Arrow 从 biorxiv_local_db/ 中读取(每年一个 Parquet 文件),而不是每次搜索都调用它们的 API。
  • 命中检测。 系统会根据免疫细胞、病毒和细菌别名列表(aliases.R)匹配标题和摘要;标题命中权重为 20,摘要命中权重为 3,得分最高的类别会成为 primary_cell / primary_virus / primary_bacteria。别名按完整单词匹配,因此 “salmonella” 不会匹配 “salmonellosis”。
  • 可切换的类别池。 Plotinator 的病原体轴并未硬编码为病毒:通过切换类别池,可以选择要绘制的已标记类别,同一次搜索也可以从不同视角查看。添加类别池(真菌、寄生虫、药物类别、实验室自定义词汇)只需在 aliases.R 中定义别名列表,在 orchestrate_extraction.R 中使用 tag_with_alias_list() 为其添加标记,并在 app.R 的 PATHOGEN_POOLS 中添加一项——欢迎贡献。
  • 日志记录。 网站搜索会向 .cache/s3_mimic/logs/ 写入一条简短的 JSON 记录(搜索词、耗时、结果数量、是否命中缓存,以及是否存在密钥,但绝不记录密钥)。通过应用提交的反馈会保存到 .cache/s3_mimic/feedback/;如果设置了 DATA_WEBHOOK_URL,还会转发到 Discord。
  • 显示安全。 外部数据库中的文本在显示前会进行 HTML 转义,仅允许基本格式标签(斜体、粗体、下标/上标、换行)通过,并且链接仅限普通 http(s) URL。

🖥️ 自托管

要求
  • Linux(已在 Ubuntu 上测试)、R ≥ 4.1、Python ≥ 3.10(用于 MCP 服务)
  • 系统库:
    sudo apt install -y r-base r-base-dev libcurl4-openssl-dev libssl-dev libxml2-dev \
      libsqlite3-dev libfontconfig1-dev libharfbuzz-dev libfribidi-dev libfreetype6-dev \
      libpng-dev libtiff5-dev libjpeg-dev libglpk-dev libgmp3-dev libsodium-dev cmake gfortran
    
  • R 软件包(请安装到系统库,以便 Shiny Server 能够访问):
    sudo /usr/bin/Rscript -e 'install.packages(c("shiny","bslib","shinyjs","shinythemes","shinyWidgets",
      "tidyverse","DT","plotly","htmltools","htmlwidgets","htmlTable","jsonlite","digest","future",
      "promises","parallelly","arrow","httr","httr2","RSQLite","DBI","uuid","lubridate","ggbeeswarm",
      "plumber"), repos = "https://cloud.r-project.org", Ncpus = 8)'
    

使用 conda? Shiny Server 和各项服务使用的是系统 R,路径为 /usr/bin/R。请使用 /usr/bin/Rscript 安装软件包(或先运行 conda deactivate),确保软件包安装到正确位置。

1. 获取代码并进行配置
git clone https://github.com/ckangas2/abstractinator.git
cd abstractinator

可选:在项目根目录中创建 .Renviron:

INTEGRATE_NIH_NSF=1      # include NIH & NSF grants (the app also sets this)
[email protected]  # sent to OpenAlex for its "polite pool"
ENABLE_SCOPUS=0          # set to 1 only on a subscribing institution's network
DATA_WEBHOOK_URL=        # optional Discord webhook for updater notifications

服务器不需要 API 密钥:网站严格采用自带密钥模式,绝不会使用 .Renviron 中的密钥;AI 连接器仅使用开放访问的来源。(.Renviron 中的密钥仅供你自行运行的命令行脚本读取。)

2. 构建预印本存储库(仅需一次,需要数小时)
tmux new -s biorxiv
Rscript write_parquet_bioRxiV.R      # resumable: finished years are skipped on rerun

按 Ctrl+B, D 脱离会话。每年数据写入后,搜索即可立即使用。

3. 在本地运行
/usr/bin/Rscript -e 'shiny::runApp(port = 4000)'   # website
/usr/bin/Rscript agent/run_api.R                   # REST API on 127.0.0.1:8100 (run from repo root)
4. 生产环境设置(abstractinator.me 的运行方式)

Shiny Server 在根路径提供应用,且仅监听 localhost (/etc/shiny-server/shiny-server.conf):

run_as shiny;
server {
  listen 3838 127.0.0.1;
  location / {
    app_dir /srv/shiny-server/abstractinator;
    log_dir /var/log/shiny-server;
    app_idle_timeout 0;
  }
}

API 和 MCP 服务(以 shiny 用户身份运行):

sudo /usr/bin/python3 -m venv /opt/abstractinator-mcp
sudo /opt/abstractinator-mcp/bin/pip install "mcp[cli]"   # MCP Python SDK 2.x
sudo cp agent/abstractinator-api.service agent/abstractinator-mcp.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable --now abstractinator-api abstractinator-mcp

每日更新预印本(初始构建完成后):

sudo -u shiny mkdir -p logs
sudo cp deploy/abstractinator.cron /etc/cron.d/abstractinator   # runs update_biorxiv_db.R at 4:15am

通过 Cloudflare Tunnel 公开访问 (无需开放端口):将 abstractinator.me 路由到 http://localhost:3838,并将 mcp.abstractinator.me 路由到 http://localhost:8200。REST API 保持私有。

更新线上网站
cd /srv/shiny-server/abstractinator
sudo -u shiny git pull
sudo systemctl restart shiny-server            # app.R, www/, search scripts
sudo systemctl restart abstractinator-api      # agent/api.R, search scripts
sudo systemctl restart abstractinator-mcp      # agent/mcp_server.py
运行测试
# Fast offline tests (these also run on GitHub with every push)
Rscript -e 'testthat::test_dir("tests/testthat")'

# Plus live end-to-end searches against the real databases (needs internet, ~1-2 min)
ABSTRACTINATOR_LIVE_TESTS=1 Rscript -e 'testthat::test_dir("tests/testthat")'
使用日志

网站或 AI Agent 发起的每次搜索都会记录,且不包含个人数据。 按渠道划分的每日搜索次数:

cd /srv/shiny-server/abstractinator
sudo -u shiny /usr/bin/Rscript -e 'source("R/log_utils_local.R"); print(summarize_search_logs())'
REST API 参考(仅限本地)

GET /search?q=<term>&limit=25&abstract_chars=1500&deep=false

  • limit:返回的结果数(1–100),从各来源轮流选取
  • abstract_chars:摘要截断长度;0 表示不包含摘要
  • deep:设为 true 时,每个来源最多返回 250 条结果
  • 可选请求头 X-CORE-Key 和 X-USPTO-Key 可在本次请求中启用相应来源
  • 服务端全局限制为每分钟 20 次搜索(超出时返回 HTTP 429)

GET /health 返回 {"status":"ok"}。

🗂️ 仓库布局

路径内容
app.RShiny Web 应用
orchestrate_extraction.R搜索引擎:缓存 → 并行查询来源 → 去重 → 命中检测
*_extraction.R每个来源对应一个提取器(EPMC、OpenAlex、CORE、ClinicalTrials.gov、bioRxiv、NIH、NSF、PatentsView、Scopus)
deduplication.R、aliases.R跨来源去重;免疫细胞和病毒别名列表
R/db_utils_local.R、R/log_utils_local.R搜索缓存和搜索日志(网站和 Agent 搜索)
R/display_utils.RHTML 清理、导出文本清理,以及应用的稳定结果 ID
tests/离线单元测试和可选的实时搜索测试(testthat);在 GitHub Actions 上运行
agent/REST API(api.R、run_api.R)、MCP 服务(mcp_server.py)、systemd 单元
deploy/Cron 计划
write_parquet_bioRxiV.R、update_biorxiv_db.R构建并更新本地预印本存储
www/样式、脚本、图标和吉祥物插画
agent_api.R、cli_engine.R、abstractinator_bridge.py较旧的本地 Agent 接口(知识库功能正在重新开发)

🛣️ 路线图

发展方向是从检索转向整理。当前流程已应用一致的编辑规则——当两条记录指向同一项研究时,确定保留哪个版本、适用哪些词汇标签,以及如何对各来源进行抽样——但尚未判断一项研究是否可靠,或与所提问题的相关程度。以下各项都会增加一项判断。

  • 相关性排序(优先显示最佳匹配,依据命中分数和时效性)
  • 跳过对查询失败的来源进行缓存
  • 将 AI Agent 搜索与网站搜索一并记录
  • 由关系型知识库支持的更智能 Agent 工具(差距分析、“哪些主题研究不足”)

⚖️ 许可证与品牌

代码采用 MIT License 开源:欢迎使用、修改和扩展,但须保留版权声明。

名称和品牌不属于该许可证的范围。“The Abstractinator”、-inator 功能名称(Searchinator、Deduplicatinator、Plotinator、Readinator、Agentinator)以及网站的外观,均用于标识 abstractinator.me 上的官方项目。如果你运行自己的副本或派生项目,请使用自己的名称和品牌,不要将其宣传为官方 Abstractinator。注明“基于 The Abstractinator”并附上链接,我们将不胜感激。

www/ 中的第三方图标归其创作者所有,并依据 Flaticon 许可证使用(详见 CREDITS.md);这些图标不受 MIT License 涵盖。

🙏 致谢

吉祥物和图标来自 Flaticon(海象由 Smashicons 创作,恐龙由 imaginationlol 创作,青蛙王子由 Magnific 创作);线描动画来自 Noun Project。详情见 CREDITS.md。

📜 引用

如果你在研究中使用 The Abstractinator,请引用:

Kangas, C. (2026). The Abstractinator: Automated Boolean Search Tool for Rapid Acquisition, Classification, and Triage of Immuno-Networks And Therapeutic Oncolytic Research (Version 2.0.0) [Computer software]. https://abstractinator.me

@software{TheAbstractinator2026,
  author  = {Kangas, Chase},
  title   = {The Abstractinator: Automated Boolean Search Tool for Rapid Acquisition, Classification, and Triage of Immuno-Networks And Therapeutic Oncolytic Research},
  year    = {2026},
  url     = {https://abstractinator.me},
  version = {2.0.0}
}

重现环境

renv.lock 记录了线上部署所运行的确切软件包版本,这些版本取自该机器的库(R 4.6.1,155 个软件包)。如需安装相同的软件包:

install.packages("renv")
renv::restore(lockfile = "renv.lock", library = .libPaths()[1], prompt = FALSE)

锁文件是记录,而非已激活的 renv 项目:此仓库中没有 .Rprofile 和 renv/ 目录,这两者均已加入 gitignore。线上服务通过 git pull 更新;若以这种方式引入 .Rprofile,Shiny 和 plumber 服务就会切换到一个尚未为服务用户填充的软件包库,导致网站停机。

.github/workflows/tests.yml 会在每次推送时,使用当前软件包版本运行离线测试套件;.github/workflows/deps.yml 每周恢复锁定的版本并运行相同的测试套件,因此无需拖慢每次提交,也能及时发现版本偏差。

评论

支持 Markdown

第一次接触 MCP?

从协议是什么,到在客户端里装上第一个服务,这几条回答覆盖了大多数入门问题。

一个开放协议,规定了 AI 应用如何以统一方式连接外部工具与数据源。客户端负责与模型对话,MCP 服务负责提供工具、资源和提示模板,两者通过标准消息通信,同一个服务可以被不同客户端复用。