Find the 5-10 recent papers with the highest impact on a research question, topic or project.
Copy the AI prompt to install this server into Claude Code, Cursor, or another agent β or use 1-click editor setup below.
π‘ Paste the JSON block into your client's configuration file under mcpServers, then restart the application.

Research Scan finds and verifies the 5β10 recent papers that matter most for a research question, project, or decision. Starting from a brief or a single question, it retrieves the literature, expands through citation graphs, measures coverage, verifies every DOI against the live record, and emits evidence objects β while the agent driving it plans the queries, screens the candidates and ranks the shortlist. It is an evidence pipeline for a reasoning agent, not an assistant that answers questions.
Documentation: https://researchscan.synectic.org
The work is split in two, deliberately.
The CLI is deterministic and model-free. It retrieves across OpenAlex, Semantic Scholar and arXiv, walks the citation graph, dedups, counts coverage per criterion, shortlists, verifies every DOI against the live record, applies the selection rules and renders the result. It contains no LLM SDK and makes no judgement about a paper.
The agent supplies the cognition. Planning the queries, scoring each candidate 0β3, writing gap
queries when coverage is thin, and reranking the shortlist are all model decisions. The skill
packages the rubrics they are made against, as plain Markdown in skills/research-scan/references/;
whatever agent hosts it executes them.
Files are the interface between the two halves: the filesystem is the protocol boundary between reasoning and execution, not a storage detail. That is what lets Claude Code, Codex, Cursor or a plain Python loop drive the same chain over the same artifacts.
Bracketed steps are the agent's; the rest are CLI stages.
Two things bound the result. A purpose β build, research or orient β decides what a paper
has to do to earn a slot. A profile β quick, standard or deep β decides how much the scan
costs. Both are described under How it works.
Output is a run directory of validated JSON plus a Markdown brief you can hand to a human, in which every paper's DOI, title, year and first author were checked against the live record.
Python β₯ 3.11 and uv.
configure asks for each credential, shows what is already set, writes
~/.config/research-scan/.env with mode 0600 inside a 0700 directory, and finishes by running
doctor.
Keys are read without echo. Re-running is safe: every variable shows its current value masked to the
last four characters, Enter keeps it, typing replaces it. Anything already in the file that
configure does not ask about β comments included β is left exactly as it was. If stdin is not a
terminal it prints the file to write and exits 2 rather than hanging, which is the behaviour you
want in a Dockerfile or a provisioning script.
| Variable | Needed for |
|---|---|
OPENALEX_API_KEY | OpenAlex, the primary source. Required; doctor exits 3 without it. |
OPENALEX_MAILTO | Strongly recommended. Raises OpenAlex to 5 req/s and joins the Crossref polite pool. |
S2_API_KEY | Recommended. Semantic Scholar search and citation-graph expansion work without it, throttled to roughly a third of the rate; doctor warns. |
NCBI_API_KEY | Optional. PubMed only: 10 req/s instead of 3. |
To write the file by hand instead, .env.example in the repo is the template. Process environment
beats ~/.config/research-scan/.env, which beats a repo-local ./.env.
doctor invokes every source live with the cache bypassed, rather than listing what it thinks is
configured.
Exit 0 means go. Exit 3 means a mandatory check failed; see Troubleshooting. The checks and the exit code are identical in all three output modes β only the presentation differs.
β marks a source that is routed but has no retrieval adapter β see the
sources table. The probe still runs and still reports honestly: PubMed's
row says the E-utilities endpoint answered, which is a different claim from being able to
retrieve from it. doctor --json carries the same fact as sources_not_built, alongside a
providers map whose keys and values are unchanged.
With the skill installed, ask for a scan in your agent:
A one-line question works. A brief with context works better, because the planning step maps each section of it onto a specific part of the search plan. The template is
skills/research-scan/examples/brief.example.md β a worked build brief β and
brief.research-example.md is the same template at Purpose: research.
| Brief section | What it feeds |
|---|---|
Purpose: line | Which sub-criteria the plan derives and what why_it_matters must argue. build, research or orient; omit it and the agent infers one. |
| What this is about | The brief_summary and the domain routing. Say the setting, not just the topic. |
| What we need to decide or answer | The sub-criteria every paper is scored against. Name the actual open choices, or the actual questions. |
| What we already believe (the premise) | The contradictory query. A scan that only confirms the premise is not evidence. |
| Exclusions | queries.json.must_not, enforced in code at word boundaries β never as NOT-terms in query text. |
| Known papers or authors | anchors: pinned into the pool, exempt from the filters and the cap, always used as expansion seeds. |
Results land in research/scans/<YYYY-MM-DD>-<slug>/. See Outputs.
Full argument list:
Two front doors to the same pipeline. The skill is where the rubrics live, so it is the one that carries the screening and reranking cognition; the MCP server exposes the same four decision points as tools for any client that speaks MCP.
Any one of these; all three point at the same skills/research-scan/.
The plugin installs the skill and configures the uvx MCP server in one step; the .mcp.json route
below stays the path for non-plugin clients such as Claude Desktop and Cursor.
research-scan mcp speaks MCP on stdin/stdout and nothing else. It reads no token and needs none:
the process is trusted because your client launched it. Nothing extra to install β the server
ships with the package.
| Client | Where that goes |
|---|---|
| Claude Code | .mcp.json in the project root |
| Claude Desktop | claude_desktop_config.json |
| Cursor | .cursor/mcp.json |
Four tools, one per model decision the pipeline needs: scan_start (you supply the query plan),
scan_continue (screening scores, gap queries, or a page of rerank entries), scan_verify and
scan_result. They are not a chat endpoint over the pipeline: each is a decision point where a
judgement is needed, and the client's model supplies exactly the cognition the skill would β same
stage order, same artifacts. The adapter drives the CLI as a subprocess and reads its exit codes.
Run research-scan mcp --help for the other transport.
Each stage is idempotent and re-runnable: change queries.json or pass a flag and re-run from the
stage it affects. The CLI owns candidates.json, shortlist.json, manifest.json and
evidence.*; the agent owns queries.json, screen.json and ranked.json. Neither edits the
other's files.
No reviews yet β be the first to share how this listing worked for you.
Showcase your server listing on GitHub or your project documentation. Embed this dynamic SVG badge to highlight official listing status and live engagement.
[](https://allmcps.com/mcp/research-scan)<a href="https://allmcps.com/mcp/research-scan"><img src="https://allmcps.com/api/badge/research-scan?style=directory" alt="Research Scan on AllMCPs" /></a>