Skip to main content
Glama

zotbridge

An MCP (Model Context Protocol) server that connects a Zotero reference library to Claude Desktop, ChatGPT and any other MCP-compatible client.

Once connected, an assistant can search your library, read the full text of your PDFs, pull out the highlights you made in the Zotero reader, and hand back correctly formatted APA 7th references with live DOI links. With writing enabled it can also add items from a DOI, attach notes and manage tags.

zotbridge talks to Zotero two ways and picks whichever is available: the local HTTP API served by the Zotero desktop application, and the Zotero web API.


Contents


Related MCP server: zotero-mcp

Why another Zotero MCP server

Larger Zotero MCP projects exist and do more. zotbridge takes the opposite position on purpose: a small, readable tool surface that an agent can hold in context at once, with citation output shaped for academic writing rather than for generic retrieval.

Three design choices follow from that.

A small surface. Twenty tools, each doing one thing. Agents choose badly among forty near-synonymous tools, and every tool description consumes context before any work begins.

Citations as a first-class output. zotero_export_citations returns APA 7th entries with hyperlinked DOIs, alphabetised, plus BibTeX and CSL-JSON. Every metadata response already carries a ready-made reference and in-text citation, so an assistant citing your library quotes the library rather than reconstructing a reference from memory.

Writes that are hard to trigger by accident. Write tools refuse to run unless ZOTBRIDGE_ALLOW_WRITES=true, they require a separately granted local key, and every one of them accepts dry_run=true. Edits send the item's current version back with the request, so a concurrent change in the desktop application fails the write instead of overwriting it.

Requirements

  • Python 3.10 or later

  • Zotero 7 or later for local access, or a Zotero web API key

  • PyMuPDF for PDF text extraction (installed by the pdf extra)

Installation

git clone https://github.com/Einstein628/zotbridge.git
cd zotbridge
python -m venv .venv

# Windows PowerShell
.venv\Scripts\Activate.ps1
# macOS or Linux
source .venv/bin/activate

pip install -e ".[pdf]"

Verify the installation:

zotbridge --version
zotbridge --check

--check resolves the transport, contacts the library and prints what it found. Run it whenever something stops working; it is the fastest way to tell a configuration problem from a client problem.

Connecting Zotero

  1. Open Zotero 7.

  2. Go to Edit -> Settings -> Advanced.

  3. Tick Allow other applications on this computer to communicate with Zotero.

  4. Leave Zotero running.

zotbridge then reads the library at http://localhost:23119/api with no API key, no rate limit and no dependence on your library being synced to zotero.org.

Web access, as a fallback

  1. Sign in at https://www.zotero.org/settings/keys and create a new key.

  2. Grant it read access, and write access only if you intend to use the write tools.

  3. Note the numeric userID shown on the same page.

  4. Put both in your .env:

ZOTERO_API_KEY=your_key_here
ZOTERO_LIBRARY_ID=1234567
ZOTERO_LIBRARY_TYPE=user

With ZOTBRIDGE_TRANSPORT=auto (the default), zotbridge tries the desktop application first and falls back to the web API when it is closed.

Connecting a client

Claude Desktop

Edit the MCP configuration file:

  • Windows: %APPDATA%\Claude\claude_desktop_config.json

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json

  • Linux: ~/.config/Claude/claude_desktop_config.json

{
  "mcpServers": {
    "zotbridge": {
      "command": "C:\\path\\to\\zotbridge\\.venv\\Scripts\\zotbridge.exe",
      "env": {
        "ZOTBRIDGE_TRANSPORT": "auto",
        "ZOTBRIDGE_ALLOW_WRITES": "false"
      }
    }
  }
}

On macOS or Linux the command is /path/to/zotbridge/.venv/bin/zotbridge. Restart Claude Desktop; zotbridge appears in the tools menu.

ChatGPT

ChatGPT connects to MCP servers over HTTP rather than stdio, so the server needs a reachable URL. Run it with the streamable HTTP transport:

python -c "from zotbridge.server import create_server; \
create_server().run(transport='streamable-http', host='127.0.0.1', port=8765)"

Then expose http://127.0.0.1:8765/mcp through a tunnel and register that URL as a connector in ChatGPT's settings. Because this opens your library to anything that reaches the URL, keep ZOTBRIDGE_ALLOW_WRITES=false for remote use and take the tunnel down when you have finished.

Other MCP clients

Any client that can launch a stdio MCP server will work. The command is zotbridge (or python -m zotbridge); pass configuration through the environment. docs/client-setup.md covers Claude Code, Cursor and the streamable-HTTP setup in more detail, including its security implications.

Tool reference

Search and discovery

Tool

Purpose

zotero_search

Free-text search over metadata, or over full text with search_mode="everything"

zotero_advanced_search

Field-specific search with a publication-year range

zotero_list_collections

Collections with keys and item counts

zotero_list_tags

Tags in the library, optionally filtered

zotero_get_recent

Most recently added items

zotero_status

Transport in use, write permission, reachability

Retrieval

Tool

Purpose

zotero_get_item

Full metadata, plus a ready-made APA 7th reference

zotero_get_children

Notes and attachments belonging to an item

zotero_get_collection_items

Contents of one collection

zotero_get_fulltext

Text of the item's best attachment, with optional page selection

Citations

Tool

Purpose

zotero_export_citations

APA 7th, in-text, BibTeX or CSL-JSON for named items

zotero_export_collection_bibliography

The same for an entire collection

Annotations

Tool

Purpose

zotero_get_annotations

Highlights and comments on an item, grouped by page, filterable by colour

zotero_search_annotations

Search annotation text across the library

Writing

Tool

Purpose

zotero_authorize_local

Request a local write key from the desktop application

zotero_add_by_doi

Look a DOI up on Crossref and save the item

zotero_add_item

Create an item from metadata you supply

zotero_create_note

Attach a child note to an item

zotero_update_item

Edit fields, with version checking

zotero_manage_tags

Add or remove tags

docs/tools.md documents every parameter.

Worked examples

Ask the assistant:

Search my library for cassava haploid induction work published since 2015, then give me the APA 7th references for the three most relevant.

Read the PDF of item ABCD1234 and list the primer design decisions the authors justify explicitly.

Pull my yellow highlights from EFGH5678 and group them by theme.

Export the whole DMP gene family collection as BibTeX for my LaTeX manuscript.

Configuration

Every setting is an environment variable; .env.example lists them all.

Variable

Default

Meaning

ZOTBRIDGE_TRANSPORT

auto

auto, local or web

ZOTBRIDGE_LOCAL_BASE_URL

http://localhost:23119/api

Desktop API base

ZOTERO_API_KEY

Web API key

ZOTERO_LIBRARY_ID

Numeric user or group ID

ZOTERO_LIBRARY_TYPE

user

user or group

ZOTBRIDGE_LOCAL_API_KEY

Local write key from zotero_authorize_local

ZOTBRIDGE_ALLOW_WRITES

false

Master switch for every write tool

ZOTBRIDGE_TIMEOUT

30

Network timeout in seconds

ZOTBRIDGE_MAX_FULLTEXT_CHARS

50000

Cap on returned PDF text

ZOTBRIDGE_LOG_LEVEL

INFO

Log verbosity, written to stderr

Writing to the library

Writing is off by default, and turning it on takes three deliberate steps.

  1. Set ZOTBRIDGE_ALLOW_WRITES=true.

  2. Call zotero_authorize_local and approve the dialogue Zotero raises. Copy the key into ZOTBRIDGE_LOCAL_API_KEY. (Local write support arrived in Zotero 10. On earlier desktop versions, configure the web API with a write-enabled key and set ZOTBRIDGE_TRANSPORT=web instead.)

  3. Restart the client so it picks up the new environment.

Then exercise anything new with dry_run=true first. A dry run prints the exact payload and changes nothing.

Back up zotero.sqlite before letting an agent write to a library you care about.

Development

pip install -e ".[dev]"
pytest
ruff check src tests

The test suite mocks the HTTP layer with respx, so it needs neither a running Zotero nor network access.

src/zotbridge/
├── config.py        environment-driven settings
├── client.py        transport resolution, requests, error typing
├── formatting.py    Markdown, APA 7th, BibTeX, CSL-JSON
├── pdf.py           PDF text extraction
├── server.py        MCPServer construction
└── tools/           one module per tool family

Troubleshooting

"Neither transport is available." Zotero is closed or the local API is switched off, and no web credentials are set. Open Zotero, tick the setting under Settings -> Advanced, and rerun zotbridge --check.

Zotero answers 403. The "Allow other applications" setting is off, or a write was attempted without a local key.

The client shows no tools. The command path in the client configuration is wrong. Use the absolute path to the zotbridge executable inside your virtual environment, and remember that JSON requires doubled backslashes on Windows.

PDF text comes back empty. The attachment is a scan with no text layer. zotbridge does not perform OCR; run the PDF through OCR in Zotero or another tool first.

Highlights are missing. Only annotations made in the Zotero PDF reader are stored as Zotero items. Highlights made in an external viewer live inside the PDF file and are not exposed by the API.

docs/troubleshooting.md goes further.

Licence

MIT. See LICENSE.

zotbridge is an independent project and is not affiliated with or endorsed by the Corporation for Digital Scholarship, which develops Zotero.

Available Tools

20 tools
zotero_add_by_doiAdd an item to Zotero from a DOIA

Look a DOI up on Crossref and save the resulting item to Zotero.

Args: doi: The DOI, with or without the https://doi.org/ prefix. collection_key: Optional collection to file the new item in. tags: Optional comma-separated tags to apply. dry_run: Fetch and show the metadata without writing anything.

Returns: A confirmation carrying the new item key and an APA 7th rendering of what was saved.

ParametersJSON Schema
NameRequiredDescriptionDefault
doiYes
tagsNo
dry_runNo
collection_keyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

The description adds meaningful behavioral context beyond the annotations: it explains the Crossref lookup, the dry_run option that 'fetch and show the metadata without writing anything,' and the confirmation return with the new item key and APA rendering. This is helpful for an agent deciding whether a write will occur.

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 compact and well-structured: a one-sentence summary followed by a clear Args section and Returns section. Every sentence adds information, with the most important action stated first and parameter details neatly organized.

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 tool with four straightforward parameters and no nested objects, the description covers the purpose, parameter semantics, dry-run behavior, and return format. Nothing necessary for correct invocation is missing, and the output schema is also available for additional detail.

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?

The input schema provides only parameter titles with 0% description coverage, but the description fully compensates by explaining every parameter: doi with or without the https://doi.org/ prefix, optional collection_key, tags as comma-separated, and dry_run as a fetch-only mode. This gives the agent all details needed to construct valid arguments.

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 uses a specific verb and resource: 'Look a DOI up on Crossref and save the resulting item to Zotero.' It clearly distinguishes this tool from the sibling zotero_add_item by identifying the DOI-lookup mechanism as the defining feature.

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 clearly implies the usage context: use when you have a DOI and want to add the corresponding item to Zotero. It does not explicitly name alternatives or exclusions, such as using zotero_add_item for manual entry, but the DOI-focused action provides clear context.

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

zotero_add_itemCreate a Zotero item from supplied metadataA

Create an item from a metadata object you supply directly.

Use this for sources without a DOI, such as a thesis, a technical report or a dataset.

Args: item_json: A JSON object with at least "itemType" and "title". Creators take the Zotero shape: [{"creatorType": "author", "firstName": "J.", "lastName": "Odipio"}] collection_key: Optional collection to file the item in. dry_run: Show the payload without writing.

Returns: The new item key and its APA 7th rendering.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNo
item_jsonYes
collection_keyNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior4/5

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

Annotations provide only basic flags (readOnlyHint=false, idempotentHint=false, destructiveHint=false), so the description carries the burden. It adds useful behavioral context: dry_run behavior ('Show the payload without writing'), the Zotero creator shape, and the return value ('new item key and its APA 7th rendering'). It stops short of discussing duplicate handling or side effects, but it discloses the key behavioral traits for a creation 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 compact and well-structured with clear Args and Returns sections. Every sentence earns its place: purpose, usage condition, parameter explanations with a concrete creator example, and return value. No redundant or filler text.

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 tool with 3 parameters (1 required) and an output schema, the description covers all the essential information: when to use it, how to structure item_json, what collection_key and dry_run do, and what is returned. The 0% schema coverage is completely mitigated by the description's depth.

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?

The schema has 0% description coverage—parameters are only named, not explained. The description fully compensates: item_json is described with required keys and an example creator shape, collection_key is defined as 'Optional collection to file the item in,' and dry_run is explained as 'Show the payload without writing.' This is far beyond what the schema provides.

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: 'Create an item from a metadata object you supply directly.' This clearly states what the tool does and distinguishes it from zotero_add_by_doi by specifying it is for sources without a DOI. The scope is unambiguous.

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 for sources without a DOI, such as a thesis, a technical report or a dataset.' This gives a direct when-to-use rule and implicitly routes DOI-bearing sources to the sibling zotero_add_by_doi. It is concise and actionable.

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

zotero_authorize_localRequest a local write key from ZoteroA

Ask the Zotero desktop application for a local API key.

Zotero raises a confirmation dialogue on the desktop. Approve it, then copy the returned key into ZOTBRIDGE_LOCAL_API_KEY and restart the MCP client. Read access does not need this; writes over the local transport do.

Returns: The granted key and the next step, or an explanation of why the request failed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.9/5.0
Behavior5/5

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

The description discloses the interactive behavior: Zotero shows a confirmation dialog, the user must approve it, and the returned key must be stored in an environment variable. It also covers failure behavior. This goes well beyond the basic readOnlyHint/idempotentHint/destructiveHint 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 compact and well-structured: it states the action first, then the user steps, the access distinction, and the return value. Every sentence contributes useful information without repetition or filler.

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 no-parameter authorization tool, this description is complete. It explains the prerequisite user interaction, the environment variable to set, the restart requirement, the read/write distinction, and the possible return outcome, so an agent can guide the user through the full flow.

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, so the baseline is 4. The description adds meaningful context about the returned key and the post-approval workflow, even though there are no input parameters to document.

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: 'Ask the Zotero desktop application for a local API key.' It clearly identifies the tool as the authorization step for local write access, which distinguishes it from the many sibling data-read and data-write tools.

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?

It explicitly states when this tool is needed: 'writes over the local transport do,' and when it is not: 'Read access does not need this.' It also gives follow-up steps (copy the key and restart the MCP client), so an agent knows exactly how to use the result.

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

zotero_create_noteAttach a note to a Zotero itemA

Attach a child note to an existing item.

Args: item_key: Key of the parent item. content: Note text. Plain text is converted to simple HTML paragraphs; if the text already contains HTML tags it is sent unchanged. tags: Optional comma-separated tags for the note. dry_run: Show the payload without writing.

Returns: The new note's key, or the payload if dry_run is set.

ParametersJSON Schema
NameRequiredDescriptionDefault
tagsNo
contentYes
dry_runNo
item_keyYes

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?

The annotations already indicate readOnlyHint=false (write) and destructiveHint=false, but the description adds valuable behavioral context: plain text is converted to simple HTML paragraphs, and pre-existing HTML is passed unchanged. It also clarifies the dry_run behavior (shows payload without writing). This goes beyond the structured annotations and helps the agent predict side effects.

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 compact and well-structured. The opening sentence states the core purpose, followed by a concise args list that maps directly to the parameters. Returns are specified in one line. Every sentence adds information; there is no fluff or repetition. The front-loading ensures an agent quickly understands the tool's function.

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 all four parameters, the conversion behavior, and the return value (new note key or dry_run payload). The output schema exists, so the return structure is already documented. Minor omissions include prerequisites like authorization or whether the parent item must exist, but these are likely implied by the tool context. Overall, it is sufficiently complete for a note-creation 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?

Schema description coverage is 0%, so the description is the only source of parameter meaning. It clearly explains each parameter: item_key (parent item), content (with HTML conversion rules), tags (optional comma-separated), and dry_run (payload preview). This adds significant semantic value that the schema lacks, making the tool callable without external lookup.

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 states a specific action ('Attach a child note to an existing item') with a clear resource and target. This distinguishes it from siblings like zotero_add_item (adds an item) and zotero_update_item (modifies an existing item). The verb 'attach' plus the object 'note' and parent 'item' leaves no ambiguity.

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 does not explicitly state when to use this tool versus alternatives. It implies usage by its purpose, but there is no mention of when not to use it, or what conditions favor zotero_add_item or zotero_update_item. The sibling context is not referenced, so an agent must infer usage from the tool's name and purpose.

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

zotero_export_citationsExport citations for selected itemsA
Read-only

Render one or more items as formatted citations.

Args: item_keys: One item key, or several separated by commas. style: "apa" for an alphabetised APA 7th reference list with hyperlinked DOIs, "apa-intext" for parenthetical citations, "bibtex" for a .bib fragment, or "csl-json" for CSL-JSON.

Returns: The formatted citations, ready to paste into a manuscript or a reference manager.

ParametersJSON Schema
NameRequiredDescriptionDefault
styleNoapa
item_keysYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.2/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, covering the safety profile. The description adds useful behavioral context by specifying the exact citation formats produced, including APA 7th with hyperlinked DOIs, in-text parentheticals, BibTeX, and CSL-JSON.

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 compact, front-loaded with the core purpose, and organized clearly into Args and Returns. Every sentence contributes necessary information, with no filler or repetition.

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 two-parameter read-only tool with an output schema, this description is complete: it explains both parameters, gives valid style values, states the return purpose, and is consistent with the read-only annotations. No important calling-time information is missing.

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 description coverage is 0%, but the description fully compensates: item_keys is defined as one key or comma-separated keys, and style is defined with every supported value and its meaning. An agent can construct valid calls without needing additional external knowledge.

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 lead sentence 'Render one or more items as formatted citations' names a concrete action and resource, and the style list makes the purpose tangible. It does not explicitly differentiate from the sibling zotero_export_collection_bibliography, but the item_keys focus implies item-level rather than collection-level export.

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 clearly implies the tool is for producing ready-to-paste citations from specific item keys, and it enumerates style choices. However, it does not explicitly state when to prefer this over zotero_export_collection_bibliography or give any when-not-to-use guidance, leaving the alternative selection to inference.

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

zotero_export_collection_bibliographyExport a whole collection as a bibliographyA
Read-only

Render every item in a collection as a bibliography.

Args: collection_key: Eight-character collection key. style: "apa", "apa-intext", "bibtex" or "csl-json". limit: Maximum number of items to include (1-500).

Returns: The formatted bibliography.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
styleNoapa
collection_keyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A3.8/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description does not contradict them. It adds useful constraints like the limit range and the return value, but it does not disclose any additional behavioral caveats such as pagination behavior or style-specific output differences.

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 compact and well structured: a leading sentence, a short Args block, and a Returns line. Every sentence adds information, and the most important scoping phrase appears first.

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 simple read-only export with an output schema and safe annotations, this description is complete enough to invoke correctly. Defaults are available in the schema, and the description supplies the remaining invocation-critical details.

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 description coverage is 0%, so the description carries the full burden for parameter meaning. It provides the collection key format, the exact allowed style values, and the 1-500 limit bound, all of which go beyond the bare input 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 opening line 'Render every item in a collection as a bibliography' names a specific action and resource with clear scope. It does not explicitly contrast with the sibling tool zotero_export_citations, so it stops short of full sibling differentiation.

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

Usage Guidelines2/5

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

The description gives no guidance about when to use this tool instead of alternatives such as zotero_export_citations, and it lists no exclusions or prerequisites. The intended use must be inferred from the name and title rather than from explicit usage direction.

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

zotero_get_annotationsGet highlights and comments on an itemA
Read-only

Retrieve the annotations stored on an item's PDF attachments.

Highlights, underlines, sticky notes and image annotations are all returned, grouped by page, with any comment you attached to them.

Args: item_key: Key of the parent item or of an attachment. annotation_type: Restrict to "highlight", "underline", "note" or "image". colour: Restrict to one highlight colour, given as a hex value such as "#ffd400". Useful when colour encodes a coding scheme.

Returns: A Markdown report of the annotations, ordered by page.

ParametersJSON Schema
NameRequiredDescriptionDefault
colourNo
item_keyYes
annotation_typeNo

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?

Annotations already cover read-only and non-destructive behavior, and the description adds useful behavioral context: the returned annotation types, grouping by page, inclusion of comments, and ordering by page in a Markdown report. It does not contradict the 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 concise and front-loaded with the core purpose, then cleanly organized into Args and Returns sections. Every sentence contributes meaningful information, including the colour usage note.

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 read-only tool with one required parameter, the description covers all parameter semantics, the return format, and ordering. The presence of an output schema further reduces the need to detail return values.

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?

The input schema gives almost no parameter descriptions, but the Args section fully compensates: item_key clarifies parent item vs. attachment, annotation_type enumerates valid values, and colour explains hex format plus the coding-scheme use case.

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 states a specific action and resource: 'Retrieve the annotations stored on an item's PDF attachments.' It also distinguishes itself from siblings such as zotero_search_annotations by scoping retrieval to annotations on a specific item's PDFs.

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 clearly implies when to use the tool, but it never explicitly names alternatives or gives exclusion criteria. An agent must infer the difference between this and sibling tools like zotero_search_annotations.

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

zotero_get_childrenList an item's notes and attachmentsA
Read-only

List the notes and attachments belonging to an item.

Args: item_key: Eight-character Zotero item key of the parent item.

Returns: A Markdown list of child items with their own keys, which zotero_get_annotations and zotero_get_fulltext accept.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_keyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already mark the call as read-only and non-destructive. The description adds the return format ('Markdown list'), the nature of results ('child items with their own keys'), and their compatibility with sibling tools, giving behavior beyond the annotation flags without contradiction.

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 brief and divided into clear Args and Returns sections; every sentence contributes meaningful information and no content is repeated. The key resource and action are front-loaded in the first line.

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?

With a single parameter, read-only annotations, an output schema, and a description that covers input format, result nature, and downstream usage, the tool is fully specified for correct invocation. Nothing material is missing for an agent to use it effectively.

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 the schema provides only the parameter name and type, the description explains that item_key must be an eight-character Zotero item key of the parent item. This fully compensates for the 0% schema description coverage and leaves no ambiguity about how to fill the single required argument.

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 states a specific verb and resource: 'List the notes and attachments belonging to an item.' This clearly distinguishes it from siblings like zotero_get_item (item details), zotero_get_collection_items (collection contents), and zotero_get_annotations (annotation list).

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?

It provides clear downstream context by noting the returned child keys are accepted by zotero_get_annotations and zotero_get_fulltext, implying this tool is the precursor for those calls. It stops short of explicitly stating when not to use it, but the intended workflow is clear.

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

zotero_get_collection_itemsList the items in a collectionA
Read-only

List the items held in one collection.

Args: collection_key: Eight-character collection key from zotero_list_collections. limit: Maximum number of items to return (1-200).

Returns: A Markdown list of items with their keys.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
collection_keyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior3/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, covering safety. The description adds the limit range (1-200) and the Markdown return format, which is useful context. But it does not describe pagination, ordering, or any side effects beyond what annotations imply. 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 compact and well-structured with clear Args and Returns sections. It front-loads the purpose and avoids redundant fluff. Every sentence contributes to understanding the tool.

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 simple read-only nature and annotations covering safety, the description is largely complete. It explains the return format and parameter semantics. Since an output schema exists (though not shown), the description need not elaborate further. Minor gaps like pagination details are acceptable for a listing 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?

Schema coverage is 0%, so the description fully compensates by explaining both parameters: collection_key is an eight-character key sourced from zotero_list_collections, and limit has a 1-200 range with a default. This adds essential meaning beyond the bare schema definitions.

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?

States a specific action ('List the items held in one collection') and clearly distinguishes from siblings like zotero_list_collections (which lists collections) and zotero_get_item (single item). The return format 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 Guidelines3/5

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

Implies usage by requiring a collection_key from zotero_list_collections, which is a helpful prerequisite hint. However, it does not explicitly compare with alternatives like zotero_search or zotero_get_children, nor does it state when not to use this tool. The guidance is present but not fully developed.

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

zotero_get_fulltextExtract the full text of an item's PDFA
Read-only

Extract readable text from the best attachment of an item.

The attachment is downloaded through the Zotero API and parsed locally, so the text is the document's own, not a summary.

Args: item_key: Key of the parent item, or of the attachment itself. pages: Optional 1-based page selection such as "1-8" or "2,5,9-11". Omit to read the whole document. max_chars: Override the configured character cap for this call.

Returns: The extracted text, preceded by a short provenance header.

ParametersJSON Schema
NameRequiredDescriptionDefault
pagesNo
item_keyYes
max_charsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.8/5.0
Behavior5/5

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

Annotations already mark this as read-only and non-destructive. The description adds valuable behavior: the attachment is downloaded through the Zotero API and parsed locally, and the return value includes a provenance header. This goes beyond the annotations and helps the agent anticipate network dependency and output characteristics.

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 and compact, with the core purpose front-loaded, a short behavioral note, and clearly separated Args and Returns sections. Every sentence earns its place; there is 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?

The description is complete for a read-only extraction tool: it covers all three parameters, the return format, and key behavioral context. The output schema exists, so the return-value structure does not need to be spelled out, and the safety profile is already covered by annotations.

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 description coverage is 0%, so the description must fully explain parameters. It does: item_key can be the parent item or the attachment itself; pages includes concrete format examples and default behavior; max_chars is explained as overriding the configured character cap. This adds substantial meaning beyond the raw 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 opens with a specific verb and resource: 'Extract readable text from the best attachment of an item.' It clearly distinguishes itself from siblings that retrieve metadata, children, or annotations, and clarifies that the output is the document's own text, not a summary.

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 context is clear: an agent should use this tool when it needs the full readable text of an item's PDF attachment. It does not explicitly name alternatives or exclusion criteria, but the purpose is unambiguous enough to guide selection among the sibling tools.

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

zotero_get_itemGet one Zotero itemA
Read-only

Fetch the full metadata of a single item by its Zotero key.

Args: item_key: Eight-character Zotero item key, as returned by the search tools. include_abstract: Include the abstract in the output.

Returns: Markdown metadata for the item, followed by a ready-made APA 7th reference and in-text citation.

ParametersJSON Schema
NameRequiredDescriptionDefault
item_keyYes
include_abstractNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, covering safety. The description adds behavioral detail about the return format (Markdown metadata plus APA citation) and the include_abstract option, which is beyond annotations. It doesn't contradict annotations and provides useful context.

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 compact, well-structured with clear 'Args' and 'Returns' sections, and front-loaded with the purpose. No redundant sentences or filler. Every line earns its place.

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?

The tool is simple (fetch one item), and the description covers the key, the abstract flag, and the return format. An output schema exists, so detailed return structure is not needed. Nothing an agent needs to call it correctly is missing.

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 the description carries the full burden. It explains item_key as an eight-character key returned by search tools, and include_abstract as controlling abstract inclusion. Both parameters are meaningfully described, exceeding the schema's minimal definitions.

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 states a clear verb ('Fetch') and resource ('full metadata of a single item by its Zotero key'), distinguishing it from sibling tools like search, get_children, and get_fulltext. The title is consistent, and there is no ambiguity about what the tool does.

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 implies usage context: you need an item key from search tools, and it fetches full metadata. It doesn't explicitly mention alternatives or exclusions, but the context is clear enough for an agent to know when to select this tool. It falls short of a 5 because it doesn't contrast with zotero_get_children or zotero_get_collection_items.

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

zotero_get_recentList recently added Zotero itemsA
Read-only

List the most recently added items in the library.

Args: limit: Number of items to return (1-50).

Returns: A Markdown list of items, newest first.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

The description adds behavioral context by specifying the return format (Markdown list) and ordering (newest first). The annotations already declare readOnlyHint=true and destructiveHint=false, so the description doesn't need to repeat that. It adds useful details beyond the 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 concise, with a clear structure: a one-sentence overview, an Args section, and a Returns section. No unnecessary words or redundancy. It is front-loaded and easy to scan.

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 simple read-only list tool with one optional parameter and an output schema, the description covers all essential aspects: what it does, the parameter constraint, and the return format. It is complete for the tool's complexity, and the presence of an output schema means the return value details are handled elsewhere.

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 schema provides the limit parameter with a default but no description. The tool description adds the valid range (1-50), which is not present in the schema. This is valuable context for selecting a value, though it doesn't mention the default (which is in 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 the action ('List') and the resource ('most recently added items in the library'). It is specific and distinguishable from sibling tools like zotero_search or zotero_get_item, even though it doesn't explicitly name alternatives. The purpose is unambiguous.

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

Usage Guidelines2/5

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

There is no guidance on when to use this tool versus alternatives like zotero_search or zotero_get_collection_items. The description only states what it does, leaving the agent to infer the appropriate context. No exclusions or alternative routing are provided.

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

zotero_list_collectionsList Zotero collectionsA
Read-only

List the collections in the library with their keys and item counts.

Args: limit: Maximum number of collections to return.

Returns: A Markdown list of collections, showing nesting where a collection has a parent.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.1/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, so the safety profile is covered. The description adds useful behavioral context: output is a Markdown list, includes keys and item counts, and shows nesting for collections with parents. This goes beyond the annotations without contradicting them.

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 compact and well-structured, with a one-sentence summary followed by Args and Returns sections. Every sentence earns its place, and the core purpose is front-loaded.

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 simple read-only list operation with one optional parameter and an output schema, the description is complete. It covers the return format, key fields, nesting behavior, and limit semantics, so an agent has what it needs to 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?

Schema coverage is 0%, so the description must compensate for the undocumented schema. It explains the single parameter limit as 'Maximum number of collections to return,' adding meaning beyond the schema's type and default. This is adequate compensation for one simple optional parameter.

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?

States a specific verb and resource: 'List the collections in the library with their keys and item counts.' This clearly distinguishes the tool from siblings like zotero_get_collection_items (items within a collection) and zotero_list_tags (tags), even without naming them.

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

Usage Guidelines2/5

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

No guidance is given about when to use this tool versus alternatives, and no exclusions or prerequisites are mentioned. The description only states what the tool does, leaving usage selection entirely to inference.

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

zotero_list_tagsList Zotero tagsA
Read-only

List tags used in the library, optionally filtered by substring.

Args: contains: Only return tags containing this substring. limit: Maximum number of tags to return.

Returns: A comma-separated list of tag names.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
containsNo

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already mark this as read-only and non-destructive, and the description adds useful behavioral context by stating the return format: 'A comma-separated list of tag names.' It also clarifies the filtering behavior. This goes beyond the annotations but does not discuss ordering or further edge cases.

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 succinct and well-structured: a one-line summary followed by an Args section and a Returns section. Every sentence earns its place, with no redundant filler.

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 simple two-parameter read-only tool with an output schema, the description covers all necessary invocation details: what it lists, how to filter, how to limit results, and what format the return takes. No critical information is missing.

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 description coverage is 0%, so the description carries the full burden of explaining parameters. It fully defines both 'contains' and 'limit' with clear, actionable semantics, including the default meaning of limit and the substring behavior of contains.

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 states a specific verb plus resource: 'List tags used in the library'. It also notes the optional substring filter, making the operation unambiguous and distinguishable from mutation or search tools such as zotero_manage_tags or zotero_search.

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 clearly implies a read-only listing use case and explains the optional filter. It does not explicitly name alternatives like zotero_manage_tags or when not to use this tool, so it falls just 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.

zotero_manage_tagsAdd or remove tags on a Zotero itemA

Add or remove tags on an item without touching its other fields.

Args: item_key: Key of the item. add: Comma-separated tags to add. remove: Comma-separated tags to remove. dry_run: Show the resulting tag set without writing.

Returns: The item's tag list after the change.

ParametersJSON Schema
NameRequiredDescriptionDefault
addNo
removeNo
dry_runNo
item_keyYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

The description discloses meaningful behavior beyond the annotations: dry_run shows the resulting tag set without writing, and the operation intentionally does not modify other fields. It also states that the return value is the item's tag list after the change. The basic safety profile is already covered by annotations, and the description adds actionable behavioral context.

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 compact and well-organized with an Args section and Returns section. It front-loads the core purpose and includes no filler, making it easy for an agent to scan quickly.

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 straightforward tag-mutation tool with four parameters, the description covers the operation, parameter formats, dry-run behavior, and return value. It does not mention prerequisites such as whether the item must exist or how duplicate tags are handled, but the simplicity of the tool and presence of an output schema make this a minor gap.

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 description coverage is 0%, so the description must compensate, and it does. Each parameter is explained: item_key is the item key, add and remove are comma-separated tag lists, and dry_run is described as showing the result without writing. This gives the agent the format and effect of every parameter.

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 uses a specific verb phrase 'Add or remove tags on an item' and adds the crucial scoping phrase 'without touching its other fields', which clearly distinguishes it from broader tools like zotero_update_item. It identifies both the action and the resource precisely.

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 phrase 'without touching its other fields' implicitly tells the agent to use this tool when only tag changes are needed, as opposed to full item updates. It provides useful contextual guidance but does not explicitly name sibling alternatives or state when not to use the tool.

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

zotero_search_annotationsSearch across annotations in the libraryA
Read-only

Search the text of highlights and comments across the whole library.

Args: query: Substring to look for in highlighted text and comments. limit: Maximum number of matching annotations to return (1-100).

Returns: A Markdown list of matches, each naming the annotation key and the attachment it belongs to.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.6/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false, and the description adds meaningful behavioral detail: it searches highlights and comments, uses substring matching, and returns a Markdown list with annotation keys and attachments. This goes beyond raw annotations without over-explaining.

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 compact and well-structured with clear Args and Returns sections. Every sentence adds necessary information, and the main purpose is front-loaded.

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 simple read-only search tool, the description fully covers scope, parameters, return format, and matching behavior. The presence of an output schema and the read-only annotations further reduce the need for additional detail.

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?

The input schema provides no descriptions (0% coverage), but the description fully explains both parameters: query is the substring to find, and limit caps the result count at 1-100. This completely compensates for the schema gap.

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 states a specific action ('Search the text of highlights and comments') and a clear resource scope ('across the whole library'), distinguishing it from sibling tools like zotero_search or zotero_get_annotations. It is precise about what content is searched and where.

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 clearly establishes when to use this tool: for substring-based searching of annotation text globally across the library. It does not explicitly name alternatives or exclusions, but the 'whole library' scope provides enough context to differentiate it from item-scoped annotation retrieval.

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

zotero_statusReport zotbridge connection statusA
Read-only

Report which transport is in use and whether writes are permitted.

Call this first when something is not working; the answer names the setting to change.

Returns: A short Markdown status report.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.5/5.0
Behavior4/5

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

Annotations already declare readOnlyHint=true and destructiveHint=false. The description adds value by explaining that it returns a status report and that the answer names the setting to change, which is behavioral context beyond the annotations. There is no contradiction.

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 brief, front-loads the key purpose, and includes a clear return section. No wasted words.

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 no parameters, an output schema for the status report, and annotations covering safety, the description is complete. It tells the agent when to use it and what to expect, with no gaps.

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 no parameters, and the schema coverage is 100% (empty properties). The description does not need to explain parameters, and a baseline of 4 is appropriate since there is nothing to add.

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 reports transport in use and write permission status, which is specific and distinguishes it from sibling tools that perform data operations like zotero_search or zotero_add_item. It also indicates the tool is diagnostic, not mutating.

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 to call this first when something is not working, providing clear usage context. It does not name alternatives, but given its unique diagnostic role among siblings, this is sufficient.

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

zotero_update_itemEdit fields on a Zotero itemA
Destructive

Change one or more metadata fields on an existing item.

The item's current version is read first and supplied as If-Unmodified-Since-Version, so a concurrent edit in the Zotero desktop application causes the write to fail rather than silently overwrite.

Args: item_key: Key of the item to edit. fields_json: A JSON object of field names to new values, for example {"volume": "12", "pages": "45-58"}. dry_run: Show the change without writing.

Returns: A before-and-after summary of the fields that changed.

ParametersJSON Schema
NameRequiredDescriptionDefault
dry_runNo
item_keyYes
fields_jsonYes

Output Schema

ParametersJSON Schema
NameRequiredDescription
resultYes

TDQS

A4.3/5.0
Behavior5/5

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

Beyond the destructiveHint annotation, the description reveals a meaningful concurrency safeguard: it reads the current version and sends If-Unmodified-Since-Version so a concurrent edit fails rather than overwriting. It also exposes dry_run as a no-write preview, giving an agent the full behavioral picture.

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 compact and well structured: a one-line purpose, a short concurrency note, then Args and Returns. Every sentence serves a distinct purpose and there is no redundant 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 three-parameter mutation tool, the description provides all the necessary invocation details, including the return summary and the concurrency behavior. It could additionally list which metadata fields are valid or how conflicts are surfaced, but that is not strictly required to call the 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?

With schema description coverage at 0%, the Args block compensates fully: item_key is defined as the key of the item to edit, fields_json gets a concrete JSON example ('{"volume": "12", "pages": "45-58"}'), and dry_run is explained as showing the change without writing. Every parameter receives meaning beyond its title.

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 starts with 'Change one or more metadata fields on an existing item,' which is a clear verb+resource statement that distinguishes editing from adding or searching. It does not explicitly name a sibling alternative, so it falls just short of the strongest differentiation.

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 makes clear this tool is for modifying existing item metadata via fields_json, and the 'existing item' wording implies not for creation. However, it offers no explicit when-to-use guidance, exclusions, or pointers to sibling tools like zotero_add_item or zotero_manage_tags.

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. 20 tool updatesv0.1.0
    • First observedzotero_add_by_doi
    • First observedzotero_add_item
    • First observedzotero_advanced_search
    • First observedzotero_authorize_local
    • First observedzotero_create_note
    • First observedzotero_export_citations
    • First observedzotero_export_collection_bibliography
    • First observedzotero_get_annotations
    • First observedzotero_get_children
    • First observedzotero_get_collection_items
    • First observedzotero_get_fulltext
    • First observedzotero_get_item
    • First observedzotero_get_recent
    • First observedzotero_list_collections
    • First observedzotero_list_tags
    • First observedzotero_manage_tags
    • First observedzotero_search
    • First observedzotero_search_annotations
    • First observedzotero_status
    • First observedzotero_update_item

TDQS

A4.2/5.0

Scored across 20 tools

Disambiguation5/5

Each tool targets a distinct operation: search vs. field-based search, item retrieval vs. annotation retrieval vs. annotation search, citation export for items vs. collections, etc. Even the two add tools are clearly separated (manual JSON vs. DOI lookup). No two tools appear to serve the same purpose.

Naming Consistency5/5

All tools follow a consistent 'zotero_verb_noun' pattern with snake_case throughout. Verbs like get, add, list, create, update, search, export, and manage are used predictably, and there are no mixed conventions or arbitrary abbreviations.

Tool Count4/5

With 20 tools, the surface is comprehensive but not bloated; it covers searching, retrieval, editing, annotation, citation export, collection/tag management, and authentication. The count is on the higher end of reasonable for a full-featured Zotero client, but each tool addresses a distinct need.

Completeness3/5

The toolset covers most core workflows (add, get, update, search, read fulltext, annotations, citations), but notable gaps exist: there is no delete item, create/delete collection, move item between collections, or attachment upload. These missing operations could leave agents unable to complete lifecycle management tasks.

Maintenance

ActivityMaintained
ResponsivenessNo issues

Related MCP Connectors

Related MCP Servers

  • F
    license
    Not graded
    quality
    C
    maintenance
    MCP server for interacting with a Zotero library via the local API. Enables searching, retrieving, creating, updating, and deleting Zotero items, managing collections and tags, and generating citations.
    -
  • A
    license
    Not graded
    quality
    C
    maintenance
    MCP server that connects to a local Zotero library, enabling search, citation generation with CSL styles, and automatic bibliography updates in Markdown documents.
    103 npm
    1
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    Enables Zotero 10 library management via MCP, allowing search, metadata retrieval, annotation and collection management, and optional write operations (notes, tags, metadata, items) through a local Streamable HTTP endpoint.
    MIT
  • A
    license
    Not graded
    quality
    C
    maintenance
    Enables interaction with a locally running Zotero Desktop library via MCP, including search, collections, tags, BibTeX export, citations, attachment full-text lookup, and explicitly confirmed write operations.
    MIT