annota
Integrates with Zotero reference manager to search, browse, and annotate PDFs directly in the user's library, enabling AI-powered paper annotation, structured note creation, and database access for research workflows.
Annota — AI-Powered Paper Annotation Assistant
Turn your PDF library into an intelligent research assistant.
AI reads your papers, highlights key findings, explains formulas, and writes structured notes — all saved back to your reference manager.
Features · Quick Start · Usage Examples · Screenshots · Roadmap
What Can It Do?
You say... | AI does... |
"高亮摘要中的发现结果" (Highlight findings in the abstract) | Reads the abstract, identifies findings, highlights them in green |
"解释第3页的公式" (Explain the formulas on page 3) | Extracts the formula, adds an explanation as a note annotation |
"写一份结构化阅读笔记" (Write a structured reading note) | Generates a note with contributions, methods, results, limitations — saved to your library |
"以 MICRO 审稿人视角审阅" (Review as a MICRO reviewer) | Produces a structured review with scores and actionable feedback |
AI reads the paper → understands content → creates precise annotations
AI generates a structured reading summary with key findings, methods, and conclusions
Related MCP server: zotero-mcp
✨ Features
9 MCP Tools
Tool | What it does |
| Search by title / author / key |
| Browse recent items |
| Get authors, year, venue, DOI |
| Extract full text (no coords, fast) |
| Extract text + precise coordinates |
| View existing annotations |
| Create highlight / underline |
| Create multiple annotations at once |
| Add a note to any item |
3 Claude Code Skills (Slash Commands)
Command | Function |
| Smart annotation with semantic color coding |
| Structured reading notes saved to your library |
| Simulated peer review with scoring rubric |
Smart Design
Two-phase workflow — Reads full text first (cheap), then only gets coordinates for target sentences (precise). Reduces context usage by 63–80%.
Auto-skip references — Detects "References" section and skips it. A 21-page paper extracts only 13 pages.
Batch annotations — Creates 10 highlights in 1 API call instead of 10.
Friendly errors — Write failures return helpful messages instead of crashing.
🚀 Quick Start (3 Minutes)
Step 1: Clone & Install
git clone https://github.com/dengls24/annota.git
cd annota
python -m venv .venv
# Windows:
.venv\Scripts\activate
# macOS / Linux:
# source .venv/bin/activate
pip install pymupdf mcpStep 2: Configure Claude Code
Add to ~/.claude.json (or via Claude Code Settings > MCP Servers):
Windows:
{
"mcpServers": {
"annota": {
"command": "C:/path/to/annota/.venv/Scripts/python.exe",
"args": ["C:/path/to/annota/annota/server.py"],
"env": {
"ZOTERO_DATA_DIR": "C:/Users/YourName/Zotero"
}
}
}
}macOS / Linux:
{
"mcpServers": {
"annota": {
"command": "/path/to/annota/.venv/bin/python",
"args": ["/path/to/annota/annota/server.py"],
"env": {
"ZOTERO_DATA_DIR": "/Users/YourName/Zotero"
}
}
}
}Finding your Zotero data directory:
Windows: Zotero → Edit → Settings → Advanced → Data Directory Location (default:
C:\Users\YourName\Zotero)macOS: Zotero → Settings → Advanced → Data Directory Location (default:
~/Zotero)Linux: default
~/Zotero
Step 3: Use It
Just talk to Claude naturally:
# One command to read a full paper:
/annota-read "path/to/paper.pdf"
# Or natural language:
# Highlight the findings in this paper's abstract in green
"/Users/yourname/Zotero/storage/ABCD1234/paper.pdf"Or use slash commands:
/annota-read "path/to/paper.pdf"
/annota-annotate "path/to/paper.pdf"
/annota-summarize "path/to/paper.pdf"
/annota-review "path/to/paper.pdf" ISCAmacOS path tip: Drag a file from Finder into the terminal to get its full path, or right-click → "Copy as Pathname".
(Optional) Install Skills Globally
# Make skills available in all projects
cp -r .claude/skills/ ~/.claude/skills/📖 Usage Examples
Example 1: Highlight Key Findings
Input:
把这篇论文摘要中的发现结果用绿色标出来
(Highlight the findings in this paper's abstract in green)
"E:\Zotero\storage\ABCD1234\Song et al. - 2025 - AI washing.pdf"Result:
AI identifies findings in the abstract and highlights them in green
Example 2: Annotate Hypotheses & Theories
Input:
标注论文中的假设(H1, H2),并用中文解释每个假设的理论基础
(Annotate the hypotheses (H1, H2) and explain the theoretical basis of each in Chinese)Result:
Hypotheses highlighted in yellow, with Chinese explanation notes for the underlying theory
Example 3: Explain Formulas
Input:
解释论文中的核心公式,添加中文注释
(Explain the key formulas in this paper, add Chinese annotations)Result:
DID model formula annotated with variable explanations in Chinese
Example 4: Policy Implications & Conclusion Notes
Input:
标注结论部分的政策启示,添加中文总结笔记
(Highlight policy implications in the conclusion, add a Chinese summary note)Result:
Conclusion highlighted with a structured policy implications note
Example 5: Full Paper Reading Notes
Input:
/annota-summarize "path/to/paper.pdf"Result:
AI generates a complete reading summary: topic, research question, method, key findings, and implications
Example 6: Detailed Paragraph-by-Paragraph Notes
Input:
逐段阅读这篇论文,为每个重要段落添加中文批注
(Read this paper paragraph by paragraph, add Chinese annotations to each important section)Result:
Each important paragraph gets a Chinese annotation explaining the content
Example 7: The AI Workflow in Action
Here's what Claude Code looks like when processing a paper:
Claude creates a task list, reads the PDF, and calls MCP tools to create annotations step by step
🎨 Color Convention
Color | Code | Use for |
🟡 Yellow |
| Default / general highlights |
🟢 Green |
| Results, findings, data |
🔵 Blue |
| Methods, definitions, algorithms |
🔴 Red |
| Limitations, issues, problems |
🟣 Purple |
| Contributions, novelty |
⚡ How It Handles Large PDFs
For papers >10 pages, a two-phase workflow avoids context overflow:
Phase 1 — Understand (lightweight)
get_pdf_text_bulk(pdf, skip_refs=True)
→ Full text without coordinates
→ AI identifies which sentences to annotate
Phase 2 — Annotate (precise)
get_pdf_layout_text(pdf, target_page_only)
→ Coordinates for 1–2 target pages
batch_annotate(pdf, all_annotations)
→ Write everything in one callReal-world performance:
Paper | Pages | Old approach | New approach | Savings |
Conference paper | 2 pages | 41 KB coords | 15 KB text | 63% |
Journal article | 21 pages | 21 pages extracted | 13 pages (refs skipped at p.13) | 38% |
Survey paper | 19 pages | 19 pages extracted | 10 pages (refs skipped at p.10) | 47% |
📁 Project Structure
annota/
├── annota/ # MCP Server (Python)
│ ├── server.py # 9 tool registrations
│ ├── zotero_db.py # SQLite read/write layer
│ ├── pdf_tools.py # PyMuPDF text extraction
│ └── config.py # Constants & configuration
├── .claude/skills/ # Claude Code Skills
│ ├── annota-annotate/SKILL.md # /annota-annotate
│ ├── annota-summarize/SKILL.md # /annota-summarize
│ └── annota-review/SKILL.md # /annota-review
├── docs/ # Design documents
│ ├── annota-guide.md # Usage guide (CN)
│ ├── large-pdf-design.md # Large PDF handling design
│ ├── dev-notes.md # Pitfalls & solutions
│ └── commercial-plan.md # Commercialization plan
├── assets/ # Screenshots
└── README.md⚠️ Known Limitations & Disclaimer
Database Direct Access: Annota writes annotations directly to the Zotero SQLite database, which bypasses Zotero's internal consistency mechanisms. This is a design choice to enable fully offline, local-first annotation workflows without depending on external services. Users are responsible for their own database — please back up your
zotero.sqlitebefore use. We plan to migrate to the official Zotero Web API / Local API in future versions.
Limitation | Workaround | Planned Fix |
Direct SQLite write (not officially supported) | Back up your database before use | Migrate to Zotero Local API / Web API |
Write ops need Zotero closed | Close Zotero before annotating | Local API bridge |
References detection is heuristic | Pass | Improve heuristics |
Tested primarily on Windows | Should work on macOS/Linux — paths auto-detected | Community testing welcome |
🗺 Roadmap
Zotero Local API / Web API — Migrate from direct SQLite to official API for safer writes
More skills —
/compare-papers,/extract-tables,/literature-mapPrompt template marketplace — Share and reuse annotation rules
Team features — Shared annotation standards for lab groups
Multi-backend — Support Adobe Acrobat, Endnote, and other PDF tools
🤝 Contributing
Issues and PRs are welcome! If you have ideas for new skills or tools, please open an issue.
📄 License
MIT — Use it freely for research and commercial projects.
Built with MCP + Claude Code
If this project helps your research, consider giving it a ⭐
Maintenance
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Related MCP Servers
- AlicenseAqualityAmaintenanceConnects your Zotero research library with Claude and other AI assistants via the Model Context Protocol, allowing you to search your library, access content, discuss papers, get summaries, and analyze citations.Last updated624,462MIT
- AlicenseAqualityCmaintenanceRead-only MCP server that lets Claude or any MCP client search and retrieve metadata, notes, full text, citations, and BibTeX from your local Zotero library via its built-in API.Last updated11MIT
- Alicense-qualityBmaintenanceMCP server that grants AI tools read-only access to a Zotero library via search, citekey lookup, and on-demand fulltext retrieval, with low token usage and support for Claude Code, Claude Desktop, and Codex.Last updatedMIT
- Alicense-qualityBmaintenanceEnables natural language interaction with Zotero libraries, allowing users to search, retrieve, and update papers and metadata via AI assistants like Claude and Gemini.Last updated1GPL 2.0
Related MCP Connectors
Connect Claude to Fathom meeting recordings, transcripts, and summaries
Persistent context for Claude. Your AI always knows your projects and next actions across sessions.
Search arXiv/Semantic Scholar/OpenAlex + medical evidence (PubMed/Europe PMC) + LaTeX/PDF tools.
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
MCP directory API
We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/dengls24/annota'
If you have feedback or need assistance with the MCP directory API, please join our Discord server