snowcite
MCP server for systematic literature review. Search arXiv / Semantic Scholar / OpenAlex / Crossref / PubMed, snowball through citations, review papers through chat, keep a notes graph and cross-paper synthesis. Writing the document is left to the model and its skills — snowcite builds no PDF.
No web UI, no browser, no second terminal. Claude reads abstracts in batches, pre-filters autonomously, surfaces borderline cases to you in chat.
How it works
flowchart TD
Start([User: I want a systematic review]) --> Init
subgraph Phase1["Phase 1 — Onboarding"]
Init["init_project<br/>discipline, standard, backend, language"]
Init --> GenFiles["Generate<br/>CLAUDE.md<br/>.claude/settings.json<br/>.claude/agents/*"]
GenFiles --> Criteria["review_criteria<br/>include / exclude / categories"]
end
Criteria --> Search
subgraph Phase2["Phase 2 — Search & review"]
Search["search_papers<br/>auto_save, no abstracts in context"]
Search --> ReviewLoop
subgraph ReviewLoop["Batch review loop"]
direction TB
GetBatch["papers status=unreviewed<br/>limit=20, no abstracts"]
GetBatch --> AutoClassify{"Claude<br/>classifies"}
AutoClassify -->|clear| BulkApprove["review_batch<br/>auto_high"]
AutoClassify -->|borderline| AskUser["Show to user<br/>facts only, no recommendation"]
AskUser --> UserDecide["User: i / e / m"]
UserDecide --> SingleStatus["review_batch<br/>reviewed_by=user"]
BulkApprove --> Summary["review_summary<br/>≤500 words, rolling"]
SingleStatus --> Summary
Summary --> GetBatch
end
ReviewLoop --> Snowball{"Deeper?"}
Snowball -->|yes| Expand["snowball<br/>references + citations"]
Expand --> Search
Snowball -->|no| Outline
end
subgraph Phase3["Phase 3 — Structure"]
Outline["bulk_create_sections<br/>title + scope per section"]
Outline --> OutlineOk{"User<br/>approves?"}
OutlineOk -->|edits| Outline
end
OutlineOk -->|yes| Phase4
subgraph Phase4["Phase 4 — Write by section"]
Draft["update_section<br/>draft"]
Draft --> Critique["get_section_critique_inputs<br/>academic-reviewer subagent"]
Critique --> Record["record_section_critique<br/>stop: no blockers or 2 iterations"]
Record -->|blockers| Revise["revise_section"]
Revise --> Critique
Record -->|stop| NextSec{"More<br/>sections?"}
NextSec -->|yes| Draft
end
NextSec -->|no| Done([Sections drafted — writing skills take over])
classDef user fill:#fef3c7,stroke:#d97706,color:#000
classDef auto fill:#dbeafe,stroke:#2563eb,color:#000
classDef agent fill:#fce7f3,stroke:#db2777,color:#000
classDef output fill:#dcfce7,stroke:#16a34a,color:#000
class AskUser,UserDecide,OutlineOk,FixLang user
class AutoClassify,BulkApprove,Search,Summary,Outline,Draft,Record,Compile auto
class Critique,Humanizer agent
class Done,GenFiles output
Legend — 🟨 user decisions, 🟦 automatic MCP calls, 🟪 subagents (fresh-context review), 🟩 outputs.
Install
claude plugin marketplace add notaskynet/snowcite
claude plugin install snowcite@snowcite-plugins # MCP server + review / synthesis / section skills
claude plugin install academic-writing@snowcite-plugins # optional: Russian style, critic, GOST 7.32
Server only, without skills:
claude mcp add snowcite -- uvx snowcite
# optional keys for higher rate limits:
# -e SNOWCITE_SEMANTIC_SCHOLAR_API_KEY=xxx -e SNOWCITE_OPENALEX_EMAIL=you@example.com
First run
> I want a literature review on X for my bachelor thesis, in Russian, GOST 7.32
Claude calls next_step(), collects the project profile (language, discipline, standard,
optional author / institution / targets) and runs init_project, which scaffolds
.snowcite/ in the current directory. From there next_step() drives the phases: criteria,
search, review, low-confidence confirmation, synthesis, then outline and drafting with
critique. Nothing but .snowcite/ is written to your project.
Projects live in directories
Like .git, a .snowcite/ subdirectory marks a project. Work on multiple
reviews in parallel by cd-ing between them — no global state, no switching
commands. git clone moves a project to a new machine.
my-thesis/
├── .snowcite/
│ ├── papers.db # project DB — metadata, papers, notes, sections, artifacts
│ └── cache/ # scratch space, always gitignored
└── ... # your own files; the document is built with your own toolchain
Skills
| Plugin | Skills |
|---|---|
snowcite |
workflow (start here), search, review, synthesis, sections |
academic-writing |
academic-writing-ru, academic-critic, gost-report, agent academic-reviewer |
The server enforces the gates (summary before the next batch, notes for approved papers, confirmed low-confidence calls); the skills carry the procedure.
Docs
Full documentation: notaskynet.github.io/snowcite. Coverage:
- Installation on macOS / Linux / Windows
- Workflow in depth (review loop, snowball, synthesis, section critique)
- Troubleshooting — safety refusals, source rate limits
- Artifacts — interviews, code and notes as sources
Development
git clone https://github.com/notaskynet/snowcite.git
cd snowcite
uv sync --group dev
uv run pytest
uv run ruff check
uv run ruff format
claude plugin validate . # marketplace + both plugins
CI runs ruff + pytest on every push and PR.
What this isn't
- Not a web UI. Review happens in chat. Architectural choice, see
CLAUDE.md. - Not a Zotero replacement. We import BibTeX / RIS but don't integrate with Zotero's API.
- Not a full-auto thesis generator. Systematic review requires human judgment at criteria-setting, borderline papers, outline structure. snowcite automates the mechanical parts and keeps you in the loop for the rest.
License
MIT — see LICENSE.
Metadata
Release files for snowcite 0.4.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| snowcite-0.4.0.tar.gz | 125.5 kB | Without provenance | Details for snowcite-0.4.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| snowcite-0.4.0-py3-none-any.whl | Python 3 | none | any | Details for snowcite-0.4.0-py3-none-any.whl |
Total release size: 221.9 kB
Release files / snowcite-0.4.0.tar.gz
| Download URL | snowcite-0.4.0.tar.gz |
|---|---|
| Size | 125.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
5c7ee3375d0fd676aa28cbc32c892bdacfcf7d82ed99244d661f0b22106ef03a
|
|
BLAKE2b-256 checksum How to use checksums |
e44966f3c5bda56bc3b686d2eade141c19edffd7b36234f85536245ce7cb8025
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Release files / snowcite-0.4.0-py3-none-any.whl
| Download URL | snowcite-0.4.0-py3-none-any.whl |
|---|---|
| Size | 96.4 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e08b0863be13baec8237d2d8ff5eb480ca978d5e1a4b19c270d356250f3eec04
|
|
BLAKE2b-256 checksum How to use checksums |
d6fabcc3a0a566ef2d2968cec2f0e8a188d5330377203b0d62b4bb9eecef26bf
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Security for snowcite 0.4.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.