A

Annota

dengls24
๐Ÿง  Knowledge & Memory๐ŸŸข Verified Active
0 Views
0 Installs

๐Ÿ ๐Ÿ  - AI-powered paper annotation MCP server. Reads papers, highlights key findings with semantic color coding, explains formulas, and writes structured reading notes โ€” all saved back to Zotero. Features two-phase workflow for large PDFs (63โ€“80% context savings) and batch annotations.

Quick Install

One-Click IDE Configuration
claude_desktop_config.json
{
  "mcpServers": {
    "dengls24-annota": {
      "command": "npx",
      "args": [
        "-y",
        "dengls24-annota"
      ]
    }
  }
}
Or

Using an AI coding agent (Claude Code, Cursor, etc.)? Copy a ready-made prompt that tells it to fetch the setup instructions and install this server for you.

Documentation Overview

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 Platform

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

Full paper reading summary note

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


โœจ Features

9 MCP Tools

ToolWhat it does
search_zotero_itemsSearch by title / author / key
list_zotero_itemsBrowse recent items
get_item_metadataGet authors, year, venue, DOI
get_pdf_text_bulkExtract full text (no coords, fast)
get_pdf_layout_textExtract text + precise coordinates
list_annotationsView existing annotations
create_pdf_annotationCreate highlight / underline
batch_annotateCreate multiple annotations at once
add_child_noteAdd a note to any item

3 Claude Code Skills (Slash Commands)

CommandFunction
/annota-annotateSmart annotation with semantic color coding
/annota-summarizeStructured reading notes saved to your library
/annota-reviewSimulated 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 mcp

Step 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" ISCA

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

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:

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:

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:

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:

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:

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:

Claude Code workflow

Claude creates a task list, reads the PDF, and calls MCP tools to create annotations step by step


๐ŸŽจ Color Convention

ColorCodeUse for
๐ŸŸก Yellow#ffd400Default / general highlights
๐ŸŸข Green#28CA42Results, findings, data
๐Ÿ”ต Blue#2EA8E5Methods, definitions, algorithms
๐Ÿ”ด Red#ff6666Limitations, issues, problems
๐ŸŸฃ Purple#a28ae5Contributions, 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:

PaperPagesOld approachNew approachSavings
Conference paper2 pages41 KB coords15 KB text63%
Journal article21 pages21 pages extracted13 pages (refs skipped at p.13)38%
Survey paper19 pages19 pages extracted10 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.

LimitationWorkaroundPlanned Fix
Direct SQLite write (not officially supported)Back up your database before useMigrate to Zotero Local API / Web API
Write ops need Zotero closedClose Zotero before annotatingLocal API bridge
References detection is heuristicPass skip_refs=False if neededImprove heuristics
Tested primarily on WindowsShould work on macOS/Linux โ€” paths auto-detectedCommunity 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-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.


Built with MCP + Claude Code

If this project helps your research, consider giving it a โญ

Related MCP Servers

S
Server Memory
Verified

๐Ÿ“‡ ๐Ÿ  - Knowledge graph-based persistent memory system for maintaining context

๐Ÿง  Knowledge & Memory2 views
M
Mcp Summarizer

๐Ÿ“• โ˜๏ธ - AI Summarization MCP Server, Support for multiple content types: Plain text, Web pages, PDF documents, EPUB books, HTML content

๐Ÿง  Knowledge & Memory0 views
C
Claude Engram

๐Ÿ ๐Ÿ  - Persistent memory and session intelligence for Claude Code. Auto-tracks mistakes, decisions, and context via hooks. Mines session history for patterns and cross-session search. Loop detection, pre-edit warnings, context compaction survival. Runs locally with Ollama.

๐Ÿง  Knowledge & Memory0 views
A
A2cr

๐Ÿ โ˜๏ธ ๐Ÿ  ๐ŸŽ ๐ŸชŸ ๐Ÿง - MCP server for AI-agent handoffs. Saves client-encrypted WorkBaton checkpoints and WorkStash notes so Codex, Claude Code, Roo Code, and other MCP clients can resume work without passing full chat history.

๐Ÿง  Knowledge & Memory0 views

Engagement

Views
0
Installs
0
Upvotes
0

Views and upvotes are unique per visitor network (hashed IP). Installs count copy actions.

Status

Health: Active

Recent health check succeeded.

Last checked: 7/28/2026, 9:26:52 PM

Unclaimed listing (imported or pending owner verification). Claim it โ†’
โ˜… Spotlight Slot

Feature Your MCP Server

Get maximum visibility for your server across our directory, search results, and detail pages.

Spotlight Your Server

Own this project?

This directory is pre-filled from public sources. Claim via GitHub README, site badge, or DNS TXT to get the verified badge and attach your website.

Claim this listing

Promote this listing

Optional paid placement. Free listings stay free forever.

Share & Embed

Add our SVG badge (dark/light directory styles) or embeddable widget to your site.