Skip to main content
Glama

Annota — ИИ-ассистент для аннотирования научных статей

Превратите свою библиотеку PDF-файлов в интеллектуального научного ассистента.

ИИ читает ваши статьи, выделяет ключевые результаты, объясняет формулы и пишет структурированные заметки — и всё это сохраняется в вашем менеджере библиографии.

License: MIT Python 3.10+ MCP Platform

Возможности · Быстрый старт · Примеры использования · Скриншоты · Дорожная карта


Что он умеет?

Вы говорите...

ИИ делает...

"高亮摘要中的发现结果" (Выдели результаты в аннотации)

Читает аннотацию, определяет результаты, выделяет их зеленым цветом

"解释第3页的公式" (Объясни формулы на 3-й странице)

Извлекает формулу, добавляет объяснение в виде аннотации-заметки

"写一份结构化阅读笔记" (Напиши структурированную заметку по прочитанному)

Генерирует заметку с вкладом, методами, результатами, ограничениями — сохраняет в вашу библиотеку

"以 MICRO 审稿人视角审阅" (Прорецензируй как рецензент MICRO)

Создает структурированную рецензию с оценками и практическими рекомендациями

ИИ читает статью → понимает содержание → создает точные аннотации

ИИ генерирует структурированное резюме с ключевыми результатами, методами и выводами


Related MCP server: academic-workflow-mcp

✨ Возможности

9 инструментов MCP

Инструмент

Что он делает

search_zotero_items

Поиск по названию / автору / ключу

list_zotero_items

Просмотр недавних элементов

get_item_metadata

Получение авторов, года, места публикации, DOI

get_pdf_text_bulk

Извлечение полного текста (без координат, быстро)

get_pdf_layout_text

Извлечение текста + точные координаты

list_annotations

Просмотр существующих аннотаций

create_pdf_annotation

Создание выделения / подчеркивания

batch_annotate

Создание нескольких аннотаций за раз

add_child_note

Добавление заметки к любому элементу

3 навыка Claude Code (слэш-команды)

Команда

Функция

/annota-annotate

Умное аннотирование с семантической цветовой кодировкой

/annota-summarize

Структурированные заметки, сохраненные в библиотеку

/annota-review

Имитация рецензирования с системой оценки

Умный дизайн

  • Двухфазный рабочий процесс — Сначала читает полный текст (дешево), затем получает координаты только для целевых предложений (точно). Снижает использование контекста на 63–80%.

  • Автоматический пропуск списка литературы — Обнаруживает раздел "References" и пропускает его. Из 21-страничной статьи извлекается только 13 страниц.

  • Пакетное аннотирование — Создает 10 выделений за 1 вызов API вместо 10.

  • Понятные ошибки — При сбоях возвращаются полезные сообщения, а не просто падение программы.


🚀 Быстрый старт (3 минуты)

Шаг 1: Клонирование и установка

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

Шаг 2: Настройка Claude Code

Добавьте в ~/.claude.json (или через настройки Claude Code > 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"
      }
    }
  }
}

Как найти директорию данных Zotero:

  • Windows: Zotero → Правка → Настройки → Дополнительно → Расположение папки данных (по умолчанию: C:\Users\YourName\Zotero)

  • macOS: Zotero → Настройки → Дополнительно → Расположение папки данных (по умолчанию: ~/Zotero)

  • Linux: по умолчанию ~/Zotero

Шаг 3: Использование

Просто общайтесь с Claude естественным языком:

# 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"

Или используйте слэш-команды:

/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: Перетащите файл из Finder в терминал, чтобы получить полный путь, или нажмите правой кнопкой мыши → "Скопировать как путь".

(Опционально) Глобальная установка навыков

# Make skills available in all projects
cp -r .claude/skills/ ~/.claude/skills/

📖 Примеры использования

Пример 1: Выделение ключевых результатов

Ввод:

把这篇论文摘要中的发现结果用绿色标出来
(Highlight the findings in this paper's abstract in green)
"E:\Zotero\storage\ABCD1234\Song et al. - 2025 - AI washing.pdf"

Результат:

ИИ определяет результаты в аннотации и выделяет их зеленым цветом


Пример 2: Аннотирование гипотез и теорий

Ввод:

标注论文中的假设(H1, H2),并用中文解释每个假设的理论基础
(Annotate the hypotheses (H1, H2) and explain the theoretical basis of each in Chinese)

Результат:

Гипотезы выделены желтым цветом, с заметками-объяснениями теории на китайском языке


Пример 3: Объяснение формул

Ввод:

解释论文中的核心公式,添加中文注释
(Explain the key formulas in this paper, add Chinese annotations)

Результат:

Формула модели DID аннотирована с объяснением переменных на китайском языке


Пример 4: Политические последствия и заметки к выводам

Ввод:

标注结论部分的政策启示,添加中文总结笔记
(Highlight policy implications in the conclusion, add a Chinese summary note)

Результат:

Выводы выделены с добавлением структурированной заметки о политических последствиях


Пример 5: Полные заметки по прочитанной статье

Ввод:

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

Результат:

ИИ генерирует полное резюме: тема, исследовательский вопрос, метод, ключевые результаты и выводы


Пример 6: Детальные заметки по абзацам

Ввод:

逐段阅读这篇论文,为每个重要段落添加中文批注
(Read this paper paragraph by paragraph, add Chinese annotations to each important section)

Результат:

Каждый важный абзац получает аннотацию на китайском языке с объяснением содержания


Пример 7: Рабочий процесс ИИ в действии

Вот как выглядит Claude Code при обработке статьи:

Claude создает список задач, читает PDF и вызывает инструменты MCP для пошагового создания аннотаций


🎨 Цветовая конвенция

Цвет

Код

Использовать для

🟡 Желтый

#ffd400

По умолчанию / общие выделения

🟢 Зеленый

#28CA42

Результаты, находки, данные

🔵 Синий

#2EA8E5

Методы, определения, алгоритмы

🔴 Красный

#ff6666

Ограничения, проблемы, вопросы

🟣 Фиолетовый

#a28ae5

Вклад, новизна


⚡ Как обрабатываются большие PDF-файлы

Для статей длиннее 10 страниц двухфазный рабочий процесс позволяет избежать переполнения контекста:

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

Реальная производительность:

Статья

Страницы

Старый подход

Новый подход

Экономия

Конференция

2 стр.

41 КБ координат

15 КБ текста

63%

Журнальная статья

21 стр.

21 стр. извлечено

13 стр. (ссылки пропущены на 13-й)

38%

Обзорная статья

19 стр.

19 стр. извлечено

10 стр. (ссылки пропущены на 10-й)

47%


📁 Структура проекта

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

⚠️ Известные ограничения и отказ от ответственности

Прямой доступ к базе данных: Annota записывает аннотации напрямую в базу данных SQLite Zotero, что обходит внутренние механизмы целостности Zotero. Это проектное решение для обеспечения полностью автономного, локального рабочего процесса аннотирования без зависимости от внешних сервисов. Пользователи несут ответственность за свою базу данных — пожалуйста, сделайте резервную копию zotero.sqlite перед использованием. Мы планируем перейти на официальный Zotero Web API / Local API в будущих версиях.

Ограничение

Решение

Планируемое исправление

Прямая запись в SQLite (не поддерживается официально)

Делайте резервную копию базы данных перед использованием

Переход на Zotero Local API / Web API

Операции записи требуют закрытого Zotero

Закройте Zotero перед аннотированием

Мост к Local API

Определение ссылок эвристическое

Передайте skip_refs=False при необходимости

Улучшение эвристики

Протестировано в основном на Windows

Должно работать на macOS/Linux — пути определяются автоматически

Приветствуется тестирование сообществом


🗺 Дорожная карта

  • [ ] Zotero Local API / Web API — Переход с прямого SQLite на официальный API для более безопасной записи

  • [ ] Больше навыков — /compare-papers, /extract-tables, /literature-map

  • [ ] Маркетплейс шаблонов промптов — Обмен и повторное использование правил аннотирования

  • [ ] Командные функции — Общие стандарты аннотирования для исследовательских групп

  • [ ] Мульти-бэкенд — Поддержка Adobe Acrobat, Endnote и других PDF-инструментов


🤝 Участие в разработке

Проблемы и PR приветствуются! Если у вас есть идеи для новых навыков или инструментов, пожалуйста, откройте issue.

📄 Лицензия

MIT — Свободно используйте для исследований и коммерческих проектов.


Создано с помощью MCP + Claude Code

Если этот проект помогает вашим исследованиям, подумайте о том, чтобы поставить ⭐

Available Tools

9 tools
add_child_noteA

为 Zotero 文献条目创建子笔记。

支持 HTML 和纯文本。写入后需重启 Zotero 或按 Ctrl+Shift+R 刷新。 注意:写操作需要关闭 Zotero 桌面应用。

Args: parent_item_id: 父文献条目的 itemID(数字字符串) note_content: 笔记内容(HTML 或纯文本,支持 Markdown 风格)

ParametersJSON Schema
NameRequiredDescriptionDefault
parent_item_idYes
note_contentYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses write operation, need to close Zotero, and refresh requirement. No annotations provided, so description bears full burden and does well.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Well-structured with separate sections (description, note, Args). Could be slightly more concise, but every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers purpose, parameters, post-usage steps, and behavioral notes. Output schema is present but description is self-sufficient for a simple 2-param tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Adds meaning beyond schema: describes parent_item_id as numeric string representing item ID, and note_content as HTML/plain text with Markdown support. Schema had 0% coverage, so this is essential.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clearly states creating child notes for Zotero items, a specific verb+resource. Distinguishes from sibling tools like batch_annotate or create_pdf_annotation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Provides explicit post-write refresh requirement and note about needing to close Zotero. Lacks comparison to sibling tools but gives clear context for usage.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

batch_annotateA

一次性创建多条 PDF 标注(减少调用次数)。

每条标注需包含 page_index 和 rects,可选 color/text/comment/type。 写操作需要关闭 Zotero 桌面应用。

Args: item_id: Zotero PDF 附件的 itemID(数字),或 PDF 文件的绝对路径 annotations: 标注列表,每项为: {"page_index": int, "rects": [[x0,y0,x1,y1],...], "color": str, "text": str, "comment": str, "type": str}

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYes
annotationsYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must cover behavioral traits. It discloses that it is a write operation and requires closing Zotero. However, it does not mention idempotency, partial failure handling, rate limits, or the format of the return value (though an output schema exists). This leaves gaps in behavioral understanding.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise, with no unnecessary words. It front-loads the main purpose in the first line, then provides a prerequisite, followed by a structured argument list that is easy to scan. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers purpose, usage prerequisite, and parameter details adequately. However, it lacks information about the output (e.g., what is returned, success/failure per annotation) and any limitations like maximum batch size or error behavior. While an output schema exists, the description should at least hint at the return structure for completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema description coverage, the description adds substantial meaning to both parameters. For 'item_id', it explains it can be a Zotero PDF attachment itemID (number) or an absolute PDF path. For 'annotations', it provides a clear template structure with fields like page_index, rects, color, etc., which is far beyond the bare schema type.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: '一次性创建多条 PDF 标注(减少调用次数)' (create multiple PDF annotations at once to reduce calls). It specifies the verb 'create', the resource 'PDF annotations', and the benefit of batching. This distinguishes it from the sibling tool 'create_pdf_annotation' which presumably creates single annotations.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides a clear prerequisite: '写操作需要关闭 Zotero 桌面应用' (write operation requires closing Zotero desktop app). It implies when to use this tool (when creating multiple annotations to reduce calls) but does not explicitly state when not to use it or suggest alternatives like 'create_pdf_annotation' for single annotations.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

create_pdf_annotationA

在 Zotero PDF 上创建高亮/下划线批注。

坐标使用 get_pdf_layout_text 返回的 rect 值,无需手动转换。 写入后需重启 Zotero 或按 Ctrl+Shift+R 刷新才能看到批注。

注意:写操作需要关闭 Zotero 桌面应用,否则会因数据库锁而失败。

Args: item_id: Zotero PDF 附件的 itemID(数字),或 PDF 文件的绝对路径 page_index: 页码(从 0 开始) rects: 坐标数组,每项为 [x0, y0, x1, y1](来自 get_pdf_layout_text) color: 十六进制颜色,如 "#ffd400"(黄), "#28CA42"(绿), "#2EA8E5"(蓝) comment: 附加在批注上的文字评论(可选) text: 被高亮的原始文本(可选,用于 Zotero 中显示) type: 批注类型: "highlight"(默认) 或 "underline"

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYes
page_indexYes
rectsYes
colorNo#ffd400
commentNo
textNo
typeNohighlight

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations provided, the description fully carries the burden. It discloses important behaviors: the operation modifies the PDF, requires a refresh/restart to become visible, and necessitates closing Zotero during write. This goes well beyond basic functionality.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with a clear purpose first, then usage notes, then parameter list. It is somewhat lengthy due to detailed parameter explanations, but every sentence adds value. A slight trim could improve conciseness.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

The description covers the prerequisite (get_pdf_layout_text), the operation, and post-operation steps (restart/refresh). It also warns about the database lock. However, it does not describe the output or error handling, though an output schema exists.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Despite 0% schema coverage, the description explains each parameter in detail, adding meaning: item_id can be ID or path, rects come from get_pdf_layout_text, color with examples, and type default. This provides crucial guidance missing from the schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it creates highlight/underline annotations on Zotero PDFs. The verb 'create' and resource 'annotation' are specific, and it distinguishes from sibling tools like list_annotations or get_pdf_layout_text.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit context: coordinates should come from get_pdf_layout_text, and it warns about needing to restart or refresh after writing. It also advises closing Zotero to avoid database lock. However, it does not compare with batch_annotate or specify when not to use this tool.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_item_metadataA

获取 Zotero 条目的完整元数据。

返回标题、作者列表、年份、期刊、DOI 等信息。 支持传入文献条目 ID 或 PDF 附件 ID(自动查找父条目)。

Args: item_id: Zotero 条目或 PDF 附件的 itemID(数字),或 PDF 文件路径

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description must cover behavioral traits. It explains that it accepts item IDs or PDF paths and automatically finds parent items, which is useful. However, it does not disclose error handling, authentication needs, or any side effects of the operation.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise with two sentences and an arguments line. It is front-loaded with the main purpose. It could be more structured (e.g., bullet points for args), but the current format is efficient and clear.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given that an output schema exists, the description does not need to explain return values. It covers the input types adequately and mentions key metadata fields. However, it omits information about error scenarios or prerequisites, which would enhance completeness.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The single required parameter item_id has no schema description (0% coverage), but the description adds significant meaning: it specifies that the input can be a numeric itemID or a PDF file path, and that it works for both items and PDF attachments. This compensates well for the lack of schema-level documentation.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it retrieves complete metadata for a Zotero item, listing returned fields (title, authors, year, journal, DOI). It distinguishes from sibling tools like list_zotero_items and search_zotero_items by focusing on a single item's full metadata, but does not explicitly differentiate.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description indicates it supports item IDs or PDF attachment IDs, but does not provide explicit guidance on when to use this tool versus alternatives (e.g., search_zotero_items for multiple items). No exclusion criteria or context for optimal use are given.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pdf_layout_textA

提取 PDF 指定页面的文本及物理坐标。

返回 JSON,每个文本行包含 text 和 rect [x0, y0, x1, y1](Zotero PDF 坐标系)。 可以直接将 rect 传给 create_pdf_annotation 使用。

Args: item_id: Zotero PDF 附件的 itemID(数字),或 PDF 文件的绝对路径 page_number: 页码(从 0 开始)

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYes
page_numberYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses return format (JSON with text and rect), coordinate system, and parameter details. Lacks info on error handling or side effects, but overall transparent.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Description is concise but includes an Args section that partly repeats schema info. However, it adds value (type clarifications) and is well-structured in front-loaded style.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's low complexity (2 params, clear output described), the description covers essential aspects: input, output format, and usage hint. No critical gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, so description adds crucial meaning: item_id can be numeric Zotero itemID or file path, page_number is 0-indexed. This fully compensates for schema's lack of description.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states it extracts text and physical coordinates from a specified PDF page, with a specific verb 'extract' and resource 'PDF page'. It distinguishes itself from siblings like get_pdf_text_bulk and create_pdf_annotation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Mentions that rect can be used with create_pdf_annotation, implying a use case, but does not explicitly state when not to use or compare to alternatives like get_pdf_text_bulk.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

get_pdf_text_bulkA

批量提取多页 PDF 纯文本(无坐标),适合大 PDF 内容理解。

与 get_pdf_layout_text 的区别:不返回坐标,context 占用减少 ~80%。 推荐工作流:

  1. 先用此工具理解全文 → 确定目标页和目标句子

  2. 再用 get_pdf_layout_text 获取目标页的精确坐标

  3. 最后用 create_pdf_annotation 写入标注

Args: item_id: Zotero PDF 附件的 itemID(数字),或 PDF 文件的绝对路径 pages: 要提取的页码列表(0-indexed),不传则提取全文 skip_refs: 是否自动跳过参考文献页(默认 True)

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYes
pagesNo
skip_refsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.7/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description covers key behaviors: extraction is pure text without coordinates, context usage is reduced by ~80%, and skip_refs defaults to true. However, it does not mention error handling for invalid item_ids or page ranges.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is well-structured with purpose first, then differentiation, then workflow, then args. It is concise but the workflow section is slightly verbose. Overall efficient.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the presence of an output schema, the description does not need to detail return values. It covers purpose, parameters, differentiation from siblings, and usage workflow adequately, making it complete for the agent's decision-making.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description fully explains each parameter: item_id as Zotero itemID (number) or file path, pages as 0-indexed list with default of all pages, skip_refs as boolean to skip references with default true. This adds substantial meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool extracts plain text from PDF pages without coordinates, specifically for large PDF content understanding. It distinguishes from the sibling get_pdf_layout_text by noting the absence of coordinates and reduced context usage.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly specifies when to use this tool (bulk text extraction) and provides a recommended workflow: first use this for full text, then get_pdf_layout_text for coordinates on target pages, then create_pdf_annotation. Also mentions the difference from get_pdf_layout_text.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_annotationsA

列出 PDF 附件上已有的所有标注。

用于检查已有标注,避免重复标注。返回每条标注的类型、颜色、文本和评论。

Args: item_id: Zotero PDF 附件的 itemID(数字),或 PDF 文件的绝对路径

ParametersJSON Schema
NameRequiredDescriptionDefault
item_idYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Although no annotations are provided, the description explains what the tool returns (type, color, text, comment) and the acceptable argument format (itemID or file path). It does not mention side effects or permissions, but for a list operation, this level of detail is adequate.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is concise and well-structured, with a clear title line, a usage sentence, a summary of return content, and a precise parameter explanation. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the output schema exists, the description need not detail return values but still does. It covers the tool's purpose, usage, parameter format, and return content, making it complete for an agent to select and invoke correctly.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters5/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description fully compensates by explaining that item_id can be a Zotero PDF attachment itemID (number) or an absolute file path, adding significant meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists all annotations on PDF attachments and provides a use case (checking existing annotations to avoid duplicates). However, it does not differentiate itself from sibling tools like batch_annotate or create_pdf_annotation.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explicitly says it is used to check existing annotations to avoid duplicates, providing clear usage context. It does not mention when not to use or list alternatives, but the implied guidance is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_zotero_itemsA

列出 Zotero 库中的文献条目。

返回每个条目的 itemID、key、标题,以及 PDF 附件 ID(如有)。 用于发现 item_id 以供其他工具使用。

Args: limit: 最多返回条目数(默认 50)

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.7/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description must disclose behavior. It states the operation (list), return fields, and limit parameter. However, it does not mention pagination, ordering, authentication needs, or potential performance implications for large libraries.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise: 4 short sentences in Chinese. It front-loads the main action, lists returns, gives purpose, and explains the parameter. No wasted words.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a simple list tool with one optional parameter and an output schema, the description covers input and basic output. But it omits return format details, sorting, and error handling. Output schema exists but is not shown; description still incomplete on behavior.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema description coverage, the description explains the only parameter 'limit' with default 50 and meaning (max number of items returned). This compensates fully for the schema gap, though no other parameters exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it lists Zotero library entries and specifies returned fields (itemID, key, title, PDF attachment ID). It distinguishes itself from sibling 'search_zotero_items' by implying a full list with limit, not a search filter.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description mentions it is used to discover item_id for other tools, but lacks explicit guidance on when to use it versus alternatives like search_zotero_items. No when-not or exclusion criteria provided.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

search_zotero_itemsA

按标题、作者或 key 搜索 Zotero 条目。

比 list_zotero_items 更高效,可直接定位目标论文。

Args: query: 搜索关键词(标题/作者的部分文字,或 Zotero item key) limit: 最多返回条目数(默认 20)

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It only describes search capability without disclosing any behavioral traits such as authentication needs, rate limits, or behavior on no results. Minimal additional context beyond purpose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two-sentence description plus parameter list is compact and front-loaded. Every sentence provides value without redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Parameters are simple, output schema exists (not detailed but present), and the tool is straightforward. Description covers purpose and key parameter meanings adequately for a search tool.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema has 0% parameter descriptions, but the description explains 'query' as search keyword (partial title/author/Zotero key) and 'limit' as max return count (default 20). This adds meaningful meaning beyond the bare schema.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states the tool searches Zotero items by title, author, or key, and explicitly contrasts with sibling tool 'list_zotero_items' as more efficient for direct targeting. This provides a specific verb+resource and distinguishes from alternatives.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use this tool over 'list_zotero_items' (more efficient for direct targeting). However, lacks explicit when-not-to-use or alternative scenarios beyond the sibling.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections.

  1. 9 tool updatesv1.0.0
    • First observedadd_child_note
    • First observedbatch_annotate
    • First observedcreate_pdf_annotation
    • First observedget_item_metadata
    • First observedget_pdf_layout_text
    • First observedget_pdf_text_bulk
    • First observedlist_annotations
    • First observedlist_zotero_items
    • First observedsearch_zotero_items

TDQS

A4.2/5.0

Scored across 9 tools

Disambiguation5/5

Each tool targets a distinct operation: listing vs searching items, extracting text with or without coordinates, creating single vs batch annotations, adding notes, and listing annotations. Descriptions clearly differentiate them, leaving no ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., 'list_zotero_items', 'create_pdf_annotation'). Even 'batch_annotate' and 'add_child_note' fit the pattern with a verb first. No mixed conventions.

Tool Count5/5

With 9 tools, the server covers the core workflows of Zotero interaction: discovering items, retrieving metadata, extracting PDF text, creating annotations (single/batch), listing annotations, and adding child notes. The count is well-scoped without being too sparse or overwhelming.

Completeness4/5

The tool set covers the main use cases for reading and annotating Zotero items. However, it lacks tools for updating or deleting annotations, modifying item metadata, or managing collections/tags, which are minor gaps that could cause agents to hit dead ends in some workflows.

Maintenance

ActivityInactive
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    C
    maintenance
    Connects Zotero and Obsidian for an AI-assisted academic reading workflow, enabling paper fetching, structured note creation, highlight syncing, and review management.
    10
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables natural language interaction with Zotero libraries, allowing users to search, retrieve, and update papers and metadata via AI assistants like Claude and Gemini.
    1
    GPL 2.0
  • A
    license
    Not graded
    quality
    B
    maintenance
    Enables AI assistants to search, access, and interact with your Zotero research library, including semantic search, metadata retrieval, PDF annotations, and library management.
    MIT