Spec Driven Development
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
作者提供的说明(英文原文)
Immunology/virology papers, trials and grants from six databases. No API key.
这三项永远不会合并成一个分数:意见、测量和人气是不同的东西。
我们还没有为它写通俗的介绍。下面是我们从注册中心读取到的事实。
选择你使用的 AI 应用,然后复制设置。
你需要
你用的是哪个应用?
在上方选择你的应用。我们会记住它,下次按钮会显示“安装到 …”。
适用于网页版、桌面版和手机版 Claude:
https://mcp.abstractinator.me/mcp在终端中运行这条命令
claude mcp add --transport http abstractinator https://mcp.abstractinator.me/mcp粘贴到项目中的 .cursor/mcp.json,或 ~/.cursor/mcp.json
{
"mcpServers": {
"abstractinator": {
"url": "https://mcp.abstractinator.me/mcp"
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
粘贴到项目中的 .vscode/mcp.json
{
"servers": {
"abstractinator": {
"type": "http",
"url": "https://mcp.abstractinator.me/mcp"
}
}
}浏览器会先询问是否打开应用,然后应用会显示设置并请你确认。密钥的值会留空,由你自己填写。
ChatGPT 只能连接互联网上的服务器:
https://mcp.abstractinator.me/mcp菜单名称可能因套餐和版本不同而略有差异。
你的选择通过 Cookie 保存在这台设备上,无需账户。
这些设置是根据作者在注册中心的条目生成的。如果 README 的写法不同,请以 README 为准。
我们还没有读取这个服务器的工具列表;我们会轮流检查各个端点。
我们检查的是任何人都能看到的信息;我们没有阅读代码。不适用的检查项不计入总数。 · 检查于 2026年11月7日
注册名称已通过 GitHub 账户 ckangas2 验证,该账户拥有此仓库
我们还没有从 GitHub 读取这个仓库
我们还没有从 GitHub 读取这个仓库
尚未检查;我们会轮流检查各个端点
尚未检查;我们会轮流检查各个端点
尚未检查;我们会在检查端点时读取工具列表
与注册中心里这个分类中所有活跃的服务器比较。只有当发布者拥有该仓库时,星标数才计入。
它在 1 项适用的基础检查中通过了 1 项。我们没有阅读代码。在添加密钥或令牌之前,请先看看这个服务器要求哪些权限,并使用只具备所需权限的密钥。
注册中心没有列出必需的密钥,不过有些服务器会在首次使用时要求你登录。
它在作者的云端运行。通过互联网连接,无需安装,但你发送的内容会经过作者的服务器。
GitHub 仓库最后更新于–,最新版本(2.0.0)于14天前进入注册中心。
支持 MCP 的应用,例如 Claude Desktop、Claude Code、Cursor 和 VS Code。它通过 URL 连接,所以接受远程 MCP 服务器的应用也可以使用,例如开启开发者模式的 ChatGPT。
同一分类中有:Spec Driven Development, Remote Desktop Commander, Detailing Manager
同一分类中其他作者的服务器,按星标数排序。
如何看卡片:★ GitHub 星标i三大支柱:评价 · 检查 · 使用情况i更新 = 最新版本发布到注册中心的时间i
MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.
Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.
Connect your auto detailing studio's tasks, cars, clients and revenue to Claude or ChatGPT.
按原文从作者的仓库复制。PopNx MCP 没有审查或背书其内容。HTML、图片和脚本已被移除。链接会离开本站。
The Abstractinator
Immunology & virology literature, searched across databases at once.
abstractinator.me · Connect your AI · Self-host it
The Abstractinator turns a literature sweep into one search. It queries Europe PMC, OpenAlex, ClinicalTrials.gov, bioRxiv/medRxiv, NIH RePORTER and NSF Awards in parallel, removes duplicates across sources, and tags every record with its most prominent immune cell type and virus using a weighted title/abstract scoring matrix.
A new search takes about 5–10 seconds; repeat searches within 7 days are instant.
| Searchinator | Queries every source simultaneously; the slowest source sets the pace, not the sum of all of them. |
| Deep search | Optional mode that pulls up to 250 results per source instead of 50 (~4× the coverage, ~15–30 s). |
| Deduplicatinator | Merges records across sources by DOI (including preprint → published DOI links), then by title, preferring the best-curated source. |
| Tagging | Labels each record with the immune cell type, virus and bacterium it is most strongly about, from curated alias lists. |
| Plotinator pools | Switch the plot's pathogen axis between viruses and bacteria (or any pool you add) without re-running the search. |
| Plotinator | Interactive charts of viral–immune trends over time. |
| Readinator | Build a reading list and export it to Zotero or EndNote. |
| Agentinator | An MCP server so AI assistants (Claude and others) can search The Abstractinator directly. |
| Source | Access | Coverage |
|---|---|---|
| Europe PMC | Open | Biomedical literature (incl. PubMed) |
| OpenAlex | Open | Global scholarly graph |
| ClinicalTrials.gov | Open | Human clinical study registrations |
| bioRxiv / medRxiv | Open (local copy) | Preprints, searched from a local Parquet store refreshed daily |
| NIH RePORTER | Open | US federal grants |
| NSF Awards | Open | Fundamental research grants |
| CORE | Your API key | Open-access full-text aggregation |
| USPTO (PatentsView) | Your API key | Patents |
| Scopus / Embase | Your API key, off by default | Abstract retrieval only works from a subscribing institution's network, so it's disabled unless ENABLE_SCOPUS=1 |
Keyed sources are bring-your-own-key: enter keys in Settings (☰). They're held only in your browser session, never logged or written to disk, and never shared with other visitors.
The Abstractinator is available as a remote MCP server, the open standard AI assistants use to connect to tools.
https://mcp.abstractinator.me/mcp
In Claude: Settings → Connectors → *Add custom connector* → paste the URL above, and choose No sign-in for authentication. Then just ask, e.g. *"Search the Abstractinator for oncolytic virus trials in melanoma."* Any MCP client that supports remote (streamable HTTP) servers works too.
The server exposes one tool:
`search_literature(query, max_results=25, abstract_chars=1500, deep=False)` returns total_found, source_counts, and a source-balanced list of records with title, abstract, authors, publication_date, doi, url, source, primary_cell, primary_virus and is_bioinformatics.
The AI connector uses open-access sources only (no keys needed or spent) and is rate-limited to keep the service available for everyone.
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 checks the cache, starts every source as a background job (future), then combines, deduplicates and tags the results. The website calls it asynchronously through Shiny's ExtendedTask, so one visitor's search never freezes the page for anyone else. The REST API calls the same code synchronously..cache/s3_mimic/ (one .rds per search, keyed by term, depth and which keyed sources were used). A search by a person makes the same search instant for an AI, and vice versa.biorxiv_local_db/ (one Parquet file per year) via Arrow, instead of hitting their API on every search.aliases.R); title hits weigh 20, abstract hits 3, and the top scorer becomes primary_cell / primary_virus / primary_bacteria. Aliases are matched as whole words, so "salmonella" doesn't match "salmonellosis".aliases.R, tagging it with tag_with_alias_list() in orchestrate_extraction.R, and adding one entry to PATHOGEN_POOLS in app.R — contributions welcome..cache/s3_mimic/logs/. Feedback submitted through the app is saved to .cache/s3_mimic/feedback/ and, if DATA_WEBHOOK_URL is set, forwarded to Discord.http(s) URLs. 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 packages (install into the system library so Shiny Server can see them):
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)'
Using conda? Shiny Server and the services use the system R at
/usr/bin/R. Install
packages with
/usr/bin/Rscript(orconda deactivatefirst) so they land in the right place.
git clone https://github.com/ckangas2/abstractinator.git
cd abstractinator
Optional .Renviron in the project root:
INTEGRATE_NIH_NSF=1 # include NIH & NSF grants (the app also sets this)
USER_EMAIL=you@example.org # 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
No API keys are needed on the server: the website is strictly bring-your-own-key and never uses keys from .Renviron, and the AI connector uses open-access sources only. (Keys in .Renviron are only read by command-line scripts you run yourself.)
tmux new -s biorxiv
Rscript write_parquet_bioRxiV.R # resumable: finished years are skipped on rerun
Detach with Ctrl+B, D. Searches pick up each year as soon as it's written.
/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)
Shiny Server, serving the app at the root and only on 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 and MCP services (run as the shiny user):
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
Daily preprint updates (after the initial build finishes):
sudo -u shiny mkdir -p logs
sudo cp deploy/abstractinator.cron /etc/cron.d/abstractinator # runs update_biorxiv_db.R at 4:15am
Public access via a Cloudflare Tunnel (no open ports): route abstractinator.me → http://localhost:3838 and mcp.abstractinator.me → http://localhost:8200. The REST API stays private.
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")'
ABSTRACTINATOR_LIVE_TESTS=1 Rscript -e 'testthat::test_dir("tests/testthat")'
Every search, from the website or an AI agent, is logged without personal data. Searches per day, split by channel:
cd /srv/shiny-server/abstractinator
sudo -u shiny /usr/bin/Rscript -e 'source("R/log_utils_local.R"); print(summarize_search_logs())'
GET /search?q= &limit=25&abstract_chars=1500&deep=false
limit: results returned (1–100), picked round-robin across sourcesabstract_chars: truncate abstracts; 0 omits themdeep: true for up to 250 results per sourceX-CORE-Key and X-USPTO-Key enable those sources for the requestGET /health returns {"status":"ok"}.
| Path | What it is |
|---|---|
app.R | The Shiny web app |
orchestrate_extraction.R | The search engine: cache → parallel sources → dedup → hit detection |
*_extraction.R | One extractor per source (EPMC, OpenAlex, CORE, ClinicalTrials.gov, bioRxiv, NIH, NSF, PatentsView, Scopus) |
deduplication.R, aliases.R | Cross-source deduplication; immune cell & virus alias lists |
R/db_utils_local.R, R/log_utils_local.R | Search cache and search logging (website and agent searches) |
R/display_utils.R | HTML sanitizing, export text cleanup and stable result IDs for the app |
tests/ | Offline unit tests and opt-in live search tests (testthat); run on GitHub Actions |
agent/ | REST API (api.R, run_api.R), MCP server (mcp_server.py), systemd units |
deploy/ | Cron schedule |
只显示了开头部分;其余内容请在仓库中阅读