Zotero MCP

Zotero MCP

An AI-powered research assistant that integrates with Zotero to read academic papers, create intelligent annotations, and generate structured notes. It enables users to highlight findings, explain formulas, and write comprehensive summaries directly within their Zotero library through natural language commands.

Category
访问服务器

README

<div align="center">

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.

License: MIT Python 3.10+ MCP

Features · Quick Start · Usage Examples · Screenshots · Roadmap

</div>


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

<div align="center">

AI reads the paper → understands content → creates precise annotations

<img src="assets/note-7.png" width="700" alt="Full paper reading summary note">

AI generates a structured reading summary with key findings, methods, and conclusions

</div>


✨ Features

9 MCP Tools

Tool What it does
search_zotero_items Search by title / author / key
list_zotero_items Browse recent items
get_item_metadata Get authors, year, venue, DOI
get_pdf_text_bulk Extract full text (no coords, fast)
get_pdf_layout_text Extract text + precise coordinates
list_annotations View existing annotations
create_pdf_annotation Create highlight / underline
batch_annotate Create multiple annotations at once
add_child_note Add a note to any item

3 Claude Code Skills (Slash Commands)

Command Function
/annota-annotate Smart annotation with semantic color coding
/annota-summarize Structured reading notes saved to your library
/annota-review 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
# Linux/Mac:
# source .venv/bin/activate

pip install pymupdf mcp

Step 2: Configure Claude Code

Add to ~/.claude.json (or via Claude Code Settings > MCP Servers):

{
  "mcpServers": {
    "annota": {
      "command": "YOUR_PATH/annota/.venv/Scripts/python.exe",
      "args": ["YOUR_PATH/annota/annota/server.py"],
      "env": {
        "ZOTERO_DATA_DIR": "YOUR_ZOTERO_DATA_DIR"
      }
    }
  }
}

Finding your Zotero data directory: Zotero → Edit → Settings → Advanced → Files and Folders → Data Directory Location

Step 3: Use It

Just talk to Claude naturally:

# Chinese: 把这篇论文摘要中的发现结果用绿色标出来
# English: Highlight the findings in this paper's abstract in green
"E:\papers\my-paper.pdf"

Or use slash commands:

/annota-annotate "path/to/paper.pdf" highlight experimental results
/annota-summarize "path/to/paper.pdf"
/annota-review "path/to/paper.pdf" ISCA

(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:

<img src="assets/note-2.png" width="700" alt="Green highlights on abstract findings">

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:

<img src="assets/note-6.png" width="700" alt="Hypothesis annotations with Chinese explanations">

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:

<img src="assets/note-5.png" width="700" alt="Formula explanation annotations">

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:

<img src="assets/note-4.png" width="700" alt="Conclusion annotations with policy notes">

Conclusion highlighted with a structured policy implications note


Example 5: Full Paper Reading Notes

Input:

/annota-summarize "path/to/paper.pdf"

Result:

<img src="assets/note-7.png" width="700" alt="Full structured reading note">

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:

<img src="assets/note-3.png" width="700" alt="Detailed paragraph notes">

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:

<img src="assets/note-8.png" width="700" alt="Claude Code workflow">

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 #ffd400 Default / general highlights
🟢 Green #28CA42 Results, findings, data
🔵 Blue #2EA8E5 Methods, definitions, algorithms
🔴 Red #ff6666 Limitations, issues, problems
🟣 Purple #a28ae5 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 call

Real-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.sqlite before 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 skip_refs=False if needed Improve heuristics
Tested on Windows only Should work on Linux/Mac Cross-platform testing

🗺 Roadmap

  • [ ] Zotero Local API / Web API — Migrate from direct SQLite to official API for safer writes
  • [ ] More skills/compare-papers, /extract-tables, /literature-map
  • [ ] Prompt 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.


<div align="center">

Built with MCP + Claude Code

If this project helps your research, consider giving it a ⭐

</div>

推荐服务器

Baidu Map

Baidu Map

百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。

官方
精选
JavaScript
Playwright MCP Server

Playwright MCP Server

一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。

官方
精选
TypeScript
Magic Component Platform (MCP)

Magic Component Platform (MCP)

一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。

官方
精选
本地
TypeScript
Audiense Insights MCP Server

Audiense Insights MCP Server

通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。

官方
精选
本地
TypeScript
VeyraX

VeyraX

一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。

官方
精选
本地
graphlit-mcp-server

graphlit-mcp-server

模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。

官方
精选
TypeScript
Kagi MCP Server

Kagi MCP Server

一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。

官方
精选
Python
e2b-mcp-server

e2b-mcp-server

使用 MCP 通过 e2b 运行代码。

官方
精选
Neon MCP Server

Neon MCP Server

用于与 Neon 管理 API 和数据库交互的 MCP 服务器

官方
精选
Exa MCP Server

Exa MCP Server

模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。

官方
精选