Skip to main content
Glama

MCP Zotero

Note: This is an unofficial community project and is not affiliated with, endorsed by, or supported by the Zotero team or the Corporation for Digital Scholarship. "Zotero" is a registered trademark of the Corporation for Digital Scholarship.

A Model Context Protocol server for Zotero integration. It gives any LLM full access to your Zotero library: search, organize, add papers by DOI, import PDFs, read full-text content, and inject live citations into Word documents.

Originally based on mcp-zotero by Abhishek Kalia. This project has since been extensively rewritten with a new architecture, 15 tools (up from 5), citation injection, PDF management, and Claude skill support.

How it works

The server is designed to be usable by any LLM without external documentation. On connection, it sends workflow instructions via the MCP instructions field, and each tool description includes cross-references and usage guidance. An LLM that has never seen this server before can discover the full workflow — from adding papers to producing a cited Word document — directly from the tool listing.

For advanced use cases (PDF upload policy, citation style guidance, source transparency), a Claude skill is included for Claude.ai Projects. But the skill is optional: the MCP server is fully self-documenting.

Related MCP server: zoty

Local vs Remote LLMs

Scenario

MCP server

Skill needed?

LLM with filesystem access (Claude Code, LM Studio, etc.)

All 15 tools

No

LLM without filesystem access (Claude.ai Projects, Claude Desktop)

API tools (search, add, metadata)

Yes, for citation injection

LLMs with filesystem access can use all tools directly, including inject_citations which reads and writes .docx files on disk.

LLMs without filesystem access — including Claude Desktop, which connects to MCP but cannot generate files locally — can use the included Claude skill (skills/zotero-skill-mcp-integrations/), which runs citation injection entirely inside a sandbox. MCP tools handle all Zotero API operations; the skill handles document assembly.

Claude Skill Setup (for Claude.ai Projects and Claude Desktop)

  1. Download the skill .zip from the latest GitHub Release

  2. Extract it and upload the folder to your Claude.ai Project as a skill

  3. The skill enables citation injection directly inside the sandbox, without requiring local filesystem access

Setup

  1. Get your Zotero credentials:

    # Create an API key at https://www.zotero.org/settings/keys
    # (enable library read/write + file access)
    # Then retrieve your user ID:
    curl -H "Zotero-API-Key: YOUR_API_KEY" https://api.zotero.org/keys/current
  2. Set environment variables:

    export ZOTERO_API_KEY="your-api-key"
    export ZOTERO_USER_ID="user-id-from-curl"
    export UNPAYWALL_EMAIL="your@email.edu"   # Optional: enables OA PDF lookup via Unpaywall
    export UNSAFE_OPERATIONS="none"           # Optional: "none" | "items" | "all" (see below)

Environment Variables

Variable

Required

Description

ZOTERO_API_KEY

Yes

API key for Zotero Web API v3. Create one at zotero.org/settings/keys with library read/write and file access permissions.

ZOTERO_USER_ID

Yes

Your Zotero numeric user ID. Retrieve it with curl -H "Zotero-API-Key: KEY" https://api.zotero.org/keys/current.

UNPAYWALL_EMAIL

No

Email for Unpaywall API requests (rate-limit policy). Enables OA PDF lookup in add_items_by_doi and find_and_attach_pdfs. If not set, OA PDF features are silently skipped.

UNSAFE_OPERATIONS

No

Controls destructive operations (deletion). See Unsafe Operations below. Default: none (all deletions blocked).

Unsafe Operations

By default, the MCP server does not allow any deletion. This is a safety measure to prevent an LLM from accidentally deleting items or collections from your library.

To enable deletion, set the UNSAFE_OPERATIONS environment variable to one of the following values:

Value

delete_items

delete_collection

Use case

none (default)

Blocked

Blocked

Safe mode — no deletions possible

items

Allowed

Blocked

Allow deleting items but protect collection structure

all

Allowed

Allowed

Full access — items and collections can be deleted

Important notes:

  • If UNSAFE_OPERATIONS is not set, empty, or set to an unrecognized value, it defaults to none.

  • The value is case-insensitive (e.g. ALL, Items, NONE all work).

  • delete_items moves items to the Zotero trash (recoverable from the Zotero desktop client).

  • delete_collection removes the collection (folder) only — items inside it are not deleted and remain in your library.

  • The all value includes both item and collection deletion because managing collections inherently requires item-level access.

Configuration example:

{
  "mcpServers": {
    "zotero": {
      "command": "npx",
      "args": ["-y", "@xevos117/mcp-zotero"],
      "env": {
        "ZOTERO_API_KEY": "YOUR_API_KEY",
        "ZOTERO_USER_ID": "YOUR_USER_ID",
        "UNSAFE_OPERATIONS": "items"
      }
    }
  }
}

Integration with Claude Desktop

Add to your Claude Desktop configuration:

{
  "mcpServers": {
    "zotero": {
      "command": "npx",
      "args": ["-y", "@xevos117/mcp-zotero"],
      "env": {
        "ZOTERO_API_KEY": "YOUR_API_KEY",
        "ZOTERO_USER_ID": "YOUR_USER_ID",
        "UNPAYWALL_EMAIL": "YOUR_EMAIL"
      }
    }
  }
}

Integration with Claude Code

claude mcp add-json "zotero" '{"command":"npx","args":["tsx","src/server.ts"],"env":{"ZOTERO_API_KEY":"...","ZOTERO_USER_ID":"..."}}'

Available Tools

Library browsing

Tool

Description

get_collections

List all collections (folders) with keys, names, and parent relationships

get_collection_items

Get items in a specific collection with keys, titles, authors, dates

search_library

Search by query, or list items sorted by field (date, title, etc.)

get_items_details

Batch metadata retrieval for multiple items — returns all type-specific fields (bookTitle, proceedingsTitle, university, etc.)

get_item_fulltext

Get full-text content of a PDF attachment via Zotero's fulltext index

Adding content

Tool

Description

add_items_by_doi

Add papers by DOI with automatic metadata resolution. Auto-attaches OA PDFs via Unpaywall

add_items

Add items with direct metadata — supports all 37 Zotero item types (books, theses, reports, etc.), batch-capable

create_collection

Create a new collection, optionally nested under a parent

import_pdf_to_zotero

Download a PDF from URL, upload to Zotero storage, auto-index full text

find_and_attach_pdfs

Batch OA PDF lookup and auto-attach via Unpaywall (by item keys or collection)

add_linked_url_attachment

Attach a URL to an existing item or create a standalone link

Deleting content

Tool

Description

delete_items

Delete up to 50 items per call (moves to Zotero trash). Requires UNSAFE_OPERATIONS=items or all

delete_collection

Delete a collection (folder). Items inside are kept. Requires UNSAFE_OPERATIONS=all

Citation & documents

Tool

Description

inject_citations

Inject live Zotero citations into a Word document. Supports APA, IEEE, Vancouver, Harvard, Chicago. Output is saved in the same folder as the input file with a _cited suffix (e.g. paper.docxpaper_cited.docx)

get_user_id

Returns the configured Zotero user ID

Development

npm install
npm run build          # Compile TypeScript
npm test               # Run tests (vitest, 404 tests)
npx tsx src/server.ts  # Run directly without building

Debug with MCP Inspector

npx @modelcontextprotocol/inspector npx tsx src/server.ts

License

MIT - see LICENSE for details.

Available Tools

15 tools
add_itemsA

Add items to Zotero by providing metadata directly. Supports ALL 37 Zotero item types.

WHEN TO USE:

  • For items that do not have a DOI (books, theses, reports, etc.)

  • When you need full control over metadata (e.g., override a title, set a specific itemType, add custom fields) — even if a DOI exists, use add_items when the auto-resolved metadata would be incorrect or incomplete

  • Mixed batch: if some items have DOIs and others don't, call add_items_by_doi for the DOIs and add_items for the rest (two separate calls)

  • Prefer add_items_by_doi when DOIs are available AND you don't need to override metadata (it auto-resolves everything and attaches OA PDFs)

BATCH: Pass multiple items in the 'items' array (single API call).

COMMON FIELDS (available for most types): title, date, abstractNote, url, DOI, publisher, place, pages, volume, language, extra

ITEM TYPE QUICK REFERENCE:

  • journalArticle: publicationTitle, volume, issue, pages, DOI, ISSN

  • book: publisher, ISBN, edition, numPages, series, seriesNumber

  • bookSection: bookTitle, publisher, pages, ISBN, edition

  • conferencePaper: proceedingsTitle, conferenceName, publisher, DOI

  • thesis: thesisType ("PhD thesis"|"Master's thesis"), university

  • report: reportType, reportNumber, institution

  • webpage: websiteTitle, websiteType, accessDate

  • preprint: repository, archiveID, genre ("Preprint")

  • patent: patentNumber, assignee, issuingAuthority, filingDate

  • computerProgram: versionNumber, company, system, programmingLanguage

CREATORS: Array of {firstName, lastName, creatorType} or {name, creatorType} for institutional. Default creatorType is "author". Some types use different primary types (e.g., "director" for film, "inventor" for patent, "artist" for artwork).

Invalid fields or creatorTypes for a given type are rejected with helpful error messages listing the valid options.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNoTags to apply to all items
itemsYesArray of items to add. Each item must have itemType and title. Additional fields depend on the item type.
collection_keyNoZotero collection key to add all items to. Get this from create_collection or get_collections.

TDQS

A4.8/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses batch behavior (single API call), validation behavior (invalid fields/creatorTypes rejected with helpful errors), default creatorType behavior, and the ability to add custom fields. It does not explicitly mention auth requirements, reversibility, or response format, but it covers the most important behavioral traits for correct invocation.

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 long but tightly structured with bold section headers, bullet lists, and a quick reference table. Every section serves a distinct purpose: purpose, when to use, batch behavior, common fields, type-specific fields, creators, and error handling. It is front-loaded with the main action and differentiators, and the length is justified by the complexity of covering 37 item types.

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?

For a high-complexity tool with no output schema, the description is remarkably complete. It covers usage alternatives, parameter semantics, batch behavior, field validations, creator rules, and error reporting. The only minor omission is the exact success response shape, but given the scope of the description and the presence of schema details, the agent has enough context to correctly select and invoke the tool.

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?

Although schema coverage is 100%, the description goes far beyond the schema. It explains that 'items' is an array for batch operations, provides a quick reference of type-specific fields (journalArticle, book, thesis, etc.), and details the creators structure including institutional creators and primary creatorTypes per type. It also tells the user how to obtain collection_key from create_collection or get_collections. This significantly enriches parameter understanding.

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 opens with a specific verb and resource: 'Add items to Zotero by providing metadata directly.' It clearly distinguishes this from the sibling add_items_by_doi tool by explicitly stating when to use each, including a note that add_items supports all 37 Zotero item types. The purpose is unmistakable and well-differentiated.

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?

The 'WHEN TO USE' section provides explicit guidance: use it for items without DOIs, when full metadata control is needed, and it even specifies a mixed-batch strategy calling add_items_by_doi for DOIs and add_items for the rest. It also names the preferred alternative (add_items_by_doi) when DOIs are available and no overrides are needed. This is exemplary usage guidance.

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

add_items_by_doiA

Add items to your Zotero library by resolving DOIs. Works with ANY item type that has a DOI — journal articles, books, datasets, preprints, conference papers, reports, etc. For each DOI, resolves metadata via content negotiation and creates the item in Zotero with the correct type automatically. Returns a list of successfully added items (with item_key and title) and any failures.

WHEN TO USE vs add_items:

  • Use add_items_by_doi when the item HAS a DOI — it auto-resolves all metadata and attaches OA PDFs.

  • Use add_items when the item does NOT have a DOI, or when you need to override specific metadata fields (add_items_by_doi does not allow metadata overrides).

  • Mixed batch: if some items have DOIs and others don't, make two separate calls — add_items_by_doi for the DOIs and add_items for the rest.

WORKFLOW TIPS:

  • To collect metadata for all added items, call get_items_details with the returned item_keys (single batch call).

  • To create a cited Word document, use the returned item_keys as placeholders in a .docx, then call inject_citations. See inject_citations description for the full workflow.

ParametersJSON Schema
NameRequiredDescriptionDefault
doisYesArray of DOI strings (e.g. ["10.1038/s41586-023-06647-8"]). Each DOI will be resolved and added to Zotero.
tagsNoTags to apply to all added items
collection_keyNoZotero collection key to add items to. Get this from create_collection or get_collections.
auto_attach_pdfNoAttach freely available OA PDFs via Unpaywall (default: true). This is lightweight and adds no cost — leave enabled. Only set to false if PDF attachment is causing errors.

TDQS

A4.7/5.0
Behavior4/5

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

No annotations are provided, so the description carries the full burden. It discloses that DOIs are resolved via content negotiation, the correct item type is set automatically, and the return value includes successes (with item_key and title) and failures. It also mentions OA PDF attachment behavior. Missing edge cases like invalid DOI handling, but for the core behavior it is quite transparent.

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 well-structured with clear sections: main purpose, when-to-use comparison, and workflow tips. Every sentence provides actionable information without filler. Though longer than typical, the length is justified by the tool's complexity and differentiation needs.

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?

Despite having no output schema, the description explicitly states the return format (successful items with item_key and title, plus failures). It also provides workflow tips for follow-up actions (get_items_details, inject_citations) and covers mixed-batches. This makes the description self-contained for most usage scenarios.

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 descriptions already cover all 4 parameters (100% coverage), so the baseline is 3. The description adds extra context: explains that DOIs are resolved automatically, clarifies that collection_key comes from create_collection/get_collections (already in schema), and strongly advises keeping auto_attach_pdf enabled unless errors occur. This goes beyond the schema's descriptive text.

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 opens with 'Add items to your Zotero library by resolving DOIs' – a specific verb+resource+method. It explicitly distinguishes from the sibling add_items tool by stating it works with ANY DOI-type item and auto-resolves metadata. This clearly conveys the tool's unique role.

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?

A dedicated 'WHEN TO USE vs add_items' section provides explicit decision criteria: use this when the item HAS a DOI, use add_items when it doesn't or when metadata overrides are needed, and gives mixed-batch guidance. This is exemplary usage guidance with clear alternatives.

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

add_linked_url_attachmentA

Attach a linked URL to an existing Zotero item, or create a standalone linked-URL attachment. Use this to link external PDFs, web pages, or other resources to items already in your library. If parent_item is provided, the attachment is added as a child; otherwise it is standalone.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL of the resource to link
tagsNoTags to apply to the attachment
titleNoDisplay title for the attachment (defaults to the URL)
collectionsNoCollection keys to add the attachment to (only used for standalone attachments, ignored when parent_item is set)
parent_itemNoItem key of the parent item. If provided, the attachment becomes a child of that item.
content_typeNoMIME type of the linked resource (e.g. "application/pdf", "text/html")

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden. It explicitly states the operation is an attachment, implying a mutating action. It doesn't disclose potential side effects like overwriting existing attachments, permission requirements, or error behavior, leaving room for improvement in behavioral detail.

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 three sentences, front-loaded with the primary action and followed by usage context. It contains no redundant information and each sentence contributes meaning.

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?

For a tool with six parameters and no output schema, the description covers the essential behavior and the main conditional path (parent_item). It doesn't address edge cases like invalid URLs or return values, but the comprehensive schema descriptions compensate, making it adequate for most use cases.

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

Parameters3/5

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

The schema already documents all 6 parameters with clear descriptions, achieving 100% coverage. The tool description adds nuance by explaining that parent_item determines child vs standalone and that collections are only used for standalone attachments. This added context justifies a baseline 3 but not higher since the schema does most of the work.

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 function: 'Attach a linked URL to an existing Zotero item, or create a standalone linked-URL attachment.' It specifies a concrete action and resource, distinguishing it from sibling tools like add_items or import_pdf_to_zotero which handle different types of additions.

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 clear context: 'Use this to link external PDFs, web pages, or other resources to items already in your library.' It also explains the parent_item behavior for child vs standalone attachments. However, it doesn't explicitly name alternative tools or state when not to use this tool, stopping short of a 5.

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

create_collectionA

Create a new collection (folder) in your Zotero library. Optionally nest it under a parent collection. Returns the new collection key and name. Use the key with add_items_by_doi to organize imported papers.

ParametersJSON Schema
NameRequiredDescriptionDefault
nameYesName of the new collection
parent_collectionNoZotero collection key of the parent collection. Get this from get_collections.

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the burden of behavioral disclosure. It mentions that it creates a collection, optionally nests it, and returns the key and name. However, it does not discuss permissions, duplicate handling, or failure modes. This is adequate but not rich.

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 three sentences, front-loaded with the core action, and every sentence adds value: the action, the optional nesting, and the return value usage. No fluff or repetition.

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?

For a simple create tool with no output schema, the description covers the essential context: what it does, the return value, and a downstream use case. It lacks explicit instructions on when not to use it, but given the simplicity, it is nearly complete. A score of 4 reflects that it could mention edge cases or requirements but is mostly sufficient.

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

Parameters3/5

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

Schema coverage is 100% with both parameters documented ('name' and 'parent_collection'). The description adds minimal extra meaning beyond the schema, except noting the nesting behavior and the return key's use with add_items_by_doi. Since the schema already provides descriptions, a baseline of 3 is appropriate.

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 action: 'Create a new collection (folder) in your Zotero library.' It distinguishes from sibling tools like delete_collection and get_collections by specifying the create operation and the ability to nest under a parent collection. The return value is also mentioned, making the purpose unambiguous.

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 clear context on when to use this tool: to create collections and organize imported papers. It explicitly mentions using the returned key with add_items_by_doi, which implies a workflow. It does not explicitly list alternatives or exclusions, but the context is strong enough to guide an agent.

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

delete_collectionA

Delete a collection (folder) from your Zotero library. Items inside the collection are NOT deleted — they remain in your library. Requires UNSAFE_OPERATIONS environment variable set to 'all'.

ParametersJSON Schema
NameRequiredDescriptionDefault
collection_keyYesZotero collection key to delete. Get this from get_collections.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It goes beyond the obvious by stating that items are NOT deleted and that UNSAFE_OPERATIONS must be set to 'all', which are critical side effects and prerequisites. It does not mention irreversibility or subcollection behavior, but the key behaviors are well covered.

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 sentences, no fluff, front-loaded with the action, followed by the key caveat and a security requirement. Every sentence contributes meaningful information.

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?

For a single-parameter delete operation with no output schema and no annotations, the description covers purpose, side effects, and a prerequisite. It does not describe the return value or success/failure behavior, but for a simple void-like operation this is acceptable, making it nearly complete.

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

Parameters3/5

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

Schema coverage is 100% and the schema itself explains that collection_key is the Zotero collection key and how to get it (from get_collections). The description adds no additional parameter-specific meaning, so the baseline score of 3 is appropriate.

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 'Delete a collection (folder)' with a specific verb and resource, and adds the critical caveat that items inside are not deleted. This distinguishes it from sibling tools like delete_items and provides precise intent.

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 clear context for when to use the tool (deleting a collection) and the important consequence that items remain in the library. It does not explicitly name alternatives or when-not-to-use, but the caveat implicitly discourages use if item deletion is intended, which is sufficient for a 4.

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

delete_itemsA

Delete one or more items from your Zotero library permanently (moves to trash). Accepts up to 50 item keys per call. Requires UNSAFE_OPERATIONS environment variable set to 'items' or 'all'.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_keysYesArray of Zotero item keys to delete (e.g. ["EUHUT5K3", "F9UQM7N2"]). Max 50 per call.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of disclosing behavioral traits. It explicitly mentions the destructive nature ('permanently'), the trash behavior, the 50-item limit, and the safety-critical environment variable requirement. This is informative, though it could further clarify error handling if the env var is missing.

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 two concise sentences with front-loaded action and no wasted words. It efficiently conveys purpose, limit, and prerequisite.

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?

For a simple one-parameter destructive tool, the description adequately covers purpose, safety requirement, and operational limits. No output schema exists, but return values are not critical for a delete operation. It lacks explicit success/failure behavior but is otherwise complete.

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

Parameters3/5

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

The input schema already describes the item_keys array with max and min limits and an example, so coverage is 100%. The description adds no new semantic meaning beyond repeating the 50-key limit. Thus the baseline score of 3 is appropriate.

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 action ('Delete'), the resource ('items from your Zotero library'), and the effect ('permanently (moves to trash)'). It distinguishes from sibling tools like delete_collection by specifying items, making the purpose unambiguous.

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 clear context for when to use the tool: deleting items with up to 50 keys per call, and the prerequisite of UNSAFE_OPERATIONS env var. It does not explicitly name alternatives (e.g., delete_collection) but the usage context is sufficiently clear.

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

find_and_attach_pdfsA

For each Zotero item, check Unpaywall for open access PDFs and attach them. Items must have a DOI. Uses the same source as Zotero Desktop's 'Find Available PDFs'.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNoOnly report which PDFs are available without downloading/attaching
item_keysNoArray of Zotero item keys to process (mutually exclusive with collection_key)
collection_keyNoProcess all items in this collection (mutually exclusive with item_keys)
skip_if_attachment_existsNoSkip items that already have a PDF attachment

TDQS

A4/5.0
Behavior3/5

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

The description discloses that the tool checks Unpaywall and attaches PDFs, and that items must have a DOI. However, with no annotations and no output schema, it fails to mention side effects (e.g., modifying the library), network behavior, rate limits, or what happens when no PDF is found. The dry_run parameter is documented in the schema but not in the description, leaving some behavioral gaps.

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 three concise sentences that are front-loaded with the core action and immediately provide the key prerequisite and a useful reference to a known feature. Every sentence adds value with no redundancy or filler.

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 the simplicity of the tool (4 well-documented parameters, no output schema, no annotations), the description covers the essential purpose and the DOI constraint. It could be more complete by mentioning the dry_run option or expected return value, but the description is adequate for a straightforward fetch-and-attach operation.

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

Parameters3/5

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

All four parameters are described in the schema (100% coverage), so the description does not need to add parameter details. The description does add a high-level context (DOI requirement) but does not go beyond the schema for parameter meaning, earning a baseline of 3.

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 a specific action ('check Unpaywall for open access PDFs and attach them') with a clear resource (Zotero items). It further specifies a prerequisite (must have a DOI) and distinguishes itself from sibling tools like import_pdf_to_zotero by pointing to the same source as Zotero Desktop's 'Find Available PDFs'.

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 clear context on when to use the tool (for items with DOIs to find open access PDFs) and hints at its place relative to Zotero Desktop's feature, but it does not explicitly mention alternatives or exclusions relative to sibling tools like import_pdf_to_zotero or add_linked_url_attachment.

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

get_collection_itemsA

Get all items in a specific Zotero collection. Returns item keys, titles, authors, and dates. Use the collectionKey from get_collections. Use the returned item keys with get_items_details, get_item_fulltext, or inject_citations.

ParametersJSON Schema
NameRequiredDescriptionDefault
collectionKeyYesThe collection key/ID
excludeAttachmentsNoExclude attachment and note items (default: true)

TDQS

A4.2/5.0
Behavior3/5

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

No annotations are provided, so the description carries the burden. It discloses return fields and implies a read-only operation, but omits behavioral details such as pagination, result size limits, or how attachments are handled beyond the schema default. This is adequate but not thorough.

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 two sentences, front-loaded with the primary purpose, and includes return types and cross-references without extraneous detail. It is concise and well-structured.

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 the tool's simplicity (2 params, no output schema), the description covers the source of the collection key, the return content, and downstream steps. It lacks mention of pagination or nested items, but for typical usage it is sufficiently complete.

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 description coverage is 100% for both parameters. The description adds value by indicating that collectionKey comes from get_collections, providing context beyond the schema's simple 'The collection key/ID'. It also implicitly references the excludeAttachments default by not contradicting it, though it doesn't elaborate.

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 function: 'Get all items in a specific Zotero collection' and enumerates the return fields (item keys, titles, authors, dates). It differentiates from sibling tools like get_items_details and get_collections by focusing on collection-level retrieval.

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 workflow guidance: 'Use the collectionKey from get_collections' and 'Use the returned item keys with get_items_details, get_item_fulltext, or inject_citations.' This clearly indicates appropriate usage and downstream alternatives, though it does not explicitly mention when to prefer other tools like search_library.

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

get_collectionsA

List all collections (folders) in your Zotero library. Returns collection keys, names, and parent relationships. Use collection keys with get_collection_items or as parent_collection in create_collection. Trashed collections are excluded by default.

ParametersJSON Schema
NameRequiredDescriptionDefault
include_trashedNoInclude trashed (deleted) collections. Default false.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the full burden. It discloses the default behavior (trashed collections excluded by default) and describes the return fields (keys, names, parent relationships). It implies a read-only operation via 'List'. However, it does not mention potential rate limits, pagination, or whether the list is flat or nested, which are useful but not critical for this simple tool.

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 three sentences, each adding unique value: the main listing action, the return fields, and the follow-up usage guidance plus default behavior. It is front-loaded and contains no filler or repetition.

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 the tool's simplicity (one optional parameter, no output schema), the description covers the key aspects: what it lists, what it returns, and the trashed exclusion default. It lacks a precise output schema, but the return fields are described. A 4 is appropriate because there is no mention of sorting or a maximum result set, but overall the agent has enough to invoke it correctly.

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

Parameters3/5

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

Schema coverage is 100% for the single parameter include_trashed, with the schema already providing a clear description and default. The tool description adds a note about the default exclusion of trashed collections, but this is redundant with the schema. Thus description adds minimal value beyond the schema, consistent with the baseline 3.

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 starts with 'List all collections (folders) in your Zotero library', which clearly states the verb (list) and resource (collections/folders). It distinguishes from siblings like get_collection_items and create_collection by specifying the return content (keys, names, parent relationships) and mentions how collection keys are used downstream.

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 gives clear context for when to use this tool: to list all collections. It also provides concrete follow-up actions ('Use collection keys with get_collection_items or as parent_collection in create_collection'), which helps the agent understand the typical workflow. It does not explicitly state when not to use it or name alternative listing/search tools, so it falls short of a 5.

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

get_item_fulltextA

Get the full text content of a Zotero item's PDF attachment via Zotero's fulltext index. Zotero desktop automatically indexes PDFs when synced. Use this to read the full content of papers instead of relying on abstracts.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_keyYesThe Zotero item key (parent item or attachment key)
max_charactersNoMaximum characters to return (default: 50000, 0 = no limit)

TDQS

A4/5.0
Behavior3/5

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

No annotations are provided, so the description carries the full burden. It adds useful context that Zotero indexes PDFs automatically when synced, implying fulltext may not be available otherwise. However, it does not disclose behavior when no fulltext exists, the return format (plain text vs. structured), or any error conditions. This is a read-only tool, so the missing details are not critical but still leave gaps.

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 two sentences long, front-loaded with the purpose, and every sentence adds value. The second sentence provides usage guidance without redundancy. It is appropriately sized for the tool's simplicity.

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?

For a simple read tool with no output schema and no annotations, the description covers purpose, usage, and a prerequisite. It does not explain edge cases like multiple attachments or missing fulltext, but the tool is straightforward and the description is sufficient for basic invocation. Slightly more detail on return format would make it stronger.

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

Parameters3/5

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

The schema already provides 100% coverage of both parameters with descriptions (item_key and max_characters). The description adds no parameter-specific meaning beyond what the schema states, so the baseline of 3 is appropriate.

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 function: 'Get the full text content of a Zotero item's PDF attachment via Zotero's fulltext index.' It uses a specific verb ('Get') and resource ('full text content'), and distinguishes itself from likely siblings like get_items_details by emphasizing full-text reading rather than metadata/abstracts.

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 usage context: 'Use this to read the full content of papers instead of relying on abstracts.' It also notes a prerequisite ('Zotero desktop automatically indexes PDFs when synced'), which helps the agent know when the tool is appropriate. It does not explicitly name alternative tools or exclusions, but the guidance is clear enough.

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

get_items_detailsA

Get metadata for multiple Zotero items in a single call. Accepts an array of item keys and returns a map of key → metadata. Use this instead of calling get_item_details multiple times. Returns all type-specific fields (e.g. bookTitle for bookSection, proceedingsTitle for conferencePaper, university for thesis). Set include_abstract to include abstracts (excluded by default to keep responses lightweight).

ParametersJSON Schema
NameRequiredDescriptionDefault
item_keysYesArray of Zotero item keys (e.g. ["EUHUT5K3", "F9UQM7N2"]). Get these from search_library, add_items_by_doi, or get_collection_items.
include_abstractNoInclude abstractNote in the response. Default false to keep responses lightweight.

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description discloses key behavioral traits: it accepts an array of keys, returns a key-to-metadata map, includes all type-specific fields, and defaults include_abstract to false for lightweight responses. This gives the agent a clear model of the tool's behavior without contradicting any annotations.

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 four concise sentences that front-load the core purpose, then cover input, alternative usage, return details, and parameter toggling. Every sentence contributes meaning with no redundancy or filler.

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?

For a tool with 2 params and no output schema, the description covers the essential aspects: what it does, what it accepts, what it returns, and how parameters affect behavior. It even mentions type-specific fields and where to obtain item keys. Slight gap: no mention of error handling or invalid keys, but that's not critical for this use case.

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

Parameters3/5

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

The schema already provides descriptions for both parameters (item_keys and include_abstract), achieving 100% coverage. The tool description adds some context (e.g., example sources for item_keys, rationale for include_abstract default), but it doesn't significantly extend beyond the schema's explanations, so a baseline score of 3 is appropriate.

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 opens with a specific verb+resource: 'Get metadata for multiple Zotero items in a single call.' It clearly distinguishes this from sibling tools like get_item_fulltext (which retrieves fulltext) and search_library (which searches) by focusing on batch metadata retrieval with a map return structure.

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 recommends using this tool when you need metadata for multiple items: 'Use this instead of calling get_item_details multiple times.' It also explains the include_abstract parameter's default behavior to guide when to enable it. However, it doesn't explicitly state when NOT to use it (e.g., for a single item), though that is implied.

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

get_user_idA

Returns the Zotero user ID configured in the server environment. Needed by the standalone inject-citations skill script (inject.js) to generate Zotero field code URIs. Not needed when using the inject_citations MCP tool, which reads the userId internally.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.7/5.0
Behavior4/5

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

No annotations are provided, so the description carries the transparency burden. It discloses that the tool is a read-only getter and clarifies the value source (server environment). It does not mention return format, but for a simple value, this is sufficient. No side effects are implied.

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 concise sentences, front-loaded with the primary function. The second sentence adds valuable context about usage vs. the inject_citations alternative. No redundant or vague wording.

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?

Completely covers the tool's purpose, source of the value, and relationship to sibling tools. Since there is no output schema and no parameters, this is sufficient context for an agent to select and invoke the tool correctly.

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 tool has zero parameters, and the description implicitly confirms no input is required. Baseline for zero-parameter tools is 4, and the description does not need to add parameter details.

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 the function with a specific verb ('Returns') and resource ('Zotero user ID'), and specifies the source ('server environment'). It also distinguishes itself from the sibling inject_citations tool by stating when it is not needed.

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 provides usage context: needed for the standalone inject.js script, but not needed when using the inject_citations MCP tool. This gives clear when-to-use and when-not-to-use guidance with a named alternative.

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

import_pdf_to_zoteroA

Download a PDF from a URL and upload it to Zotero storage as an imported_url attachment. Unlike linked URL attachments, imported files are stored in Zotero's storage and become fulltext-indexed (searchable via get_item_fulltext). Use this when you need the PDF content to be indexed by Zotero.

ParametersJSON Schema
NameRequiredDescriptionDefault
urlYesURL of the PDF to download and import
tagsNoTags to apply to the attachment
titleNoDisplay title for the attachment (default: filename)
filenameNoFilename for the attachment (default: extracted from URL or document.pdf)
collectionsNoCollection keys (only used for standalone attachments, ignored when parent_item is set)
parent_itemNoItem key of the parent item. If provided, the attachment becomes a child of that item.
content_typeNoMIME type of the file (default: "application/pdf")application/pdf

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the full burden. It discloses that the file is stored in Zotero storage and becomes fulltext-indexed, which are key behavioral traits. It lacks detail on failure cases or prerequisites, but the core side effects are transparently stated.

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 three sentences, front-loaded with the main action, and every sentence adds value—no filler or redundant phrasing.

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?

For a tool with 7 parameters and no output schema, the description provides sufficient context for selection and invocation. It clearly explains the use case and key behavior, though it omits return value details and potential error conditions.

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

Parameters3/5

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

Schema description coverage is 100%, so the schema already documents all 7 parameters. The description adds no additional parameter-level meaning beyond what the schema provides, meeting the baseline but not exceeding it.

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 verb ('Download a PDF from a URL and upload it to Zotero storage') and the outcome ('as an imported_url attachment'). It also distinguishes itself from linked URL attachments, making its purpose unmistakable.

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?

The description explicitly says 'Use this when you need the PDF content to be indexed by Zotero' and contrasts with linked URL attachments, which do not get stored or indexed. This gives clear when-to-use and implies the alternative.

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

inject_citationsA

Replace placeholder tags in a .docx file with native Zotero field codes that Zotero for Word can recognize and manage. The tool fetches item metadata from Zotero automatically — you only need to provide the .docx file.

WORKFLOW — how to create a Word document with live Zotero citations:

  1. Collect item keys: use add_items_by_doi (or search_library for existing items)

  2. Generate .docx: create a Word document (e.g. with the "docx" npm package) with placeholders where citations should appear. Each MUST be in its own dedicated TextRun — do NOT mix it with surrounding text.

  3. Call this tool with the .docx file path. It replaces every zcite tag with a Zotero field code and appends a bibliography.

  4. Tell the user to open the file in Word with the Zotero plugin and click Zotero → Refresh.

CITATION STYLES — ask the user which style they want before generating:

  • apa (default): author-year — (Smith, 2023)

  • ieee / vancouver: numbered — [1], [2] WARNING: for numbered styles every MUST include a num="N" attribute with the sequential citation number. Without num, citations render as [?].

ZCITE TAG FORMAT: Supported attributes (any order):

  • keys (required): item key or comma-separated keys — "ABC12345" or "ABC12345,DEF67890"

  • num: citation number for IEEE/Vancouver — "1" or "1,2" (required for numbered styles)

  • locator: page reference — "pp. 12-15"

  • prefix: text before citation — "see "

  • suffix: text after citation — ", emphasis added"

OUTPUT: A new .docx file (original filename with _cited suffix) with Zotero field codes and a ZOTERO_BIBL bibliography at the end.

NOTE: If the inject-citations skill is available, prefer the skill workflow (runs in sandbox, no filesystem dependency). This tool serves as the primary path when the skill is not available.

ParametersJSON Schema
NameRequiredDescriptionDefault
styleNoCitation style for the visible placeholder text. Zotero will reformat on refresh. Default: apaapa
file_pathYesAbsolute path to the .docx file containing <zcite keys="..."/> placeholder tags

TDQS

A5/5.0
Behavior5/5

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

With no annotations provided, the description takes full responsibility for behavioral disclosure. It states the tool fetches metadata automatically, replaces tags, appends a bibliography, outputs a new file with '_cited' suffix, requires Word/Zotero refresh, and warns about num attribute requirements for numbered styles. This is thorough and non-misleading.

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 long but extremely well-structured with clear headers (WORKFLOW, CITATION STYLES, ZCITE TAG FORMAT, OUTPUT, NOTE). Every section serves a distinct purpose, and the core purpose is front-loaded. No filler or redundancy.

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 complexity (two parameters, multi-step workflow, style-specific constraints, and no output schema), the description covers all essential context: prerequisites, step-by-step instructions, tag syntax with examples, output format, and fallback guidance. The agent has everything needed to invoke and execute this tool 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?

Although schema coverage is 100%, the description adds crucial meaning: it explains style-dependent behavior (apa vs numbered styles), the required num attribute, and the exact meaning of file_path in the workflow. It also documents the full zcite tag format with attribute details, far exceeding the schema's brief parameter descriptions.

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 opens with a specific verb+resource statement: 'Replace <zcite> placeholder tags in a .docx file with native Zotero field codes.' This clearly distinguishes the tool from siblings like add_items_by_doi or import_pdf_to_zotero, as it focuses purely on citation injection into a Word document.

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?

The description provides an explicit WORKFLOW section that sequences this tool after item-key collection and .docx generation, plus a final NOTE saying to prefer the skill workflow when available and that this tool is the primary path otherwise. It also instructs to ask the user for citation style before generating, covering when-to-use and alternatives.

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

search_libraryA

Search your Zotero library or list items sorted by a field.

When 'query' is provided, searches by title, author, or any field. When 'query' is omitted, lists items sorted by the chosen field (default: dateAdded, descending) — this replaces the old get_recent tool.

Examples:

  • Search: { "query": "deep learning" }

  • Recent items: { "sort": "dateAdded", "limit": 10 }

  • Recent with search: { "query": "transformers", "sort": "dateAdded", "limit": 5 }

Use the returned item keys with get_items_details, get_item_fulltext, or inject_citations.

ParametersJSON Schema
NameRequiredDescriptionDefault
sortNoField to sort by (default: dateAdded)dateAdded
limitNoMaximum number of items to return (default: 25, max: 100)
queryNoSearch query. If omitted, returns items sorted by the chosen field.
directionNoSort direction (default: desc)desc

TDQS

A4.4/5.0
Behavior4/5

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

With no annotations, the description carries the burden of behavioral disclosure. It clearly explains the conditional behavior based on 'query' presence, default sorting, and that it replaces get_recent. It doesn't explicitly state read-only nature or return format, but the examples and tone imply a safe read operation. This is enough to be useful without being verbose.

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 well-structured with a concise main sentence, a conditional explanation, and multiple examples. Every sentence serves a purpose: introducing purpose, explaining behavior, illustrating usage, and directing next steps. No fluff.

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?

Despite lacking an output schema, the description tells the agent that item keys are returned and how to use them with other tools. It covers both search and list modes adequately. Minor gaps exist (e.g., no explicit statement of result fields, no error handling info), but for this tool's complexity, it is sufficiently complete.

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 coverage is 100%, providing baseline of 3. The description adds value by clarifying that 'query' omission triggers a different mode, giving concrete examples for 'sort' and 'limit', and noting the default direction. This goes beyond the schema's field-level descriptions.

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 function: 'Search your Zotero library or list items sorted by a field.' It distinguishes itself by mentioning it replaces the old get_recent tool, and the examples clarify the dual mode (search vs. list). This is a specific verb + resource with clear differentiation from siblings.

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 explains when to use search (when 'query' is provided) and when to list (when omitted), and points to related tools for follow-up actions. However, it does not explicitly contrast with sibling tools like get_collection_items, so the exclusion criteria are not fully explicit.

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

TDQS

A4.4/5.0
Disambiguation5/5

Each tool targets a distinct resource+action pair, and overlapping tools (e.g., add_items vs add_items_by_doi vs import_pdf_to_zotero) are explicitly differentiated with clear use cases and workflows. No two tools appear to do the same job.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern in snake_case (e.g., get_collections, create_collection, add_items_by_doi, delete_items). Even multi-word names maintain the verb-first convention, making the API predictable.

Tool Count5/5

15 tools is well within the ideal range for a domain-specific library management server. Each tool serves a distinct purpose with no redundancy, and the scope is appropriately focused on Zotero workflows.

Completeness4/5

The tool surface covers library CRUD for collections and items, searching, metadata retrieval, fulltext access, PDF attachment, and citation injection. Minor gaps exist: there are no update/modify operations for existing items or collections, and no tools for managing individual attachments beyond adding them.

Maintenance

ActivityInactive
ResponsivenessSyncing

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    A
    quality
    A
    maintenance
    This server allows users to interact with their Zotero library through the Model Context Protocol, providing tools for searching items, retrieving metadata, and accessing full text using natural language queries.
    3
    160
    MIT
  • A
    license
    A
    quality
    C
    maintenance
    A lightweight MCP server that connects AI agents to a local Zotero library for paper management and metadata retrieval. It enables users to search titles and abstracts, browse collections, and automatically ingest papers via arXiv ID or DOI with PDF attachments.
    8
    15
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    An MCP server that gives any MCP-compatible assistant access to your Zotero reference library, enabling search, citation, bibliography generation, and .docx processing while keeping Zotero as the ground truth for references.
    9
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Connects your Zotero research library with AI assistants (Claude, ChatGPT, etc.) via the Model Context Protocol, enabling paper review, summaries, annotations, and semantic search both locally and through the web API.
    MIT

Latest Blog Posts

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/Xevos117/mcp-zotero'

If you have feedback or need assistance with the MCP directory API, please join our Discord server