zotero-mcp
Provides related paper recommendations based on library seeds, similar to Connected Papers, via the find_related_papers tool.
Allows AI assistants to search, create, organize, and cite from a Zotero library. Provides tools for reading items, writing items, citation management, analysis (retractions, duplicates, citation graph), knowledge graph, and full-text search.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@zotero-mcpsearch for recent papers on metacognition"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
zotero-mcp
MCP server that lets AI assistants search, create, organize, and cite from a Zotero library. Produces Word documents with live Zotero field codes. Checks for retractions, finds duplicates, maps citation graphs, and builds a knowledge graph with paper recommendations.
Quickstart
Add to your MCP client config (Claude Code, Claude Desktop, etc.):
{
"zotero": {
"command": "uvx",
"args": ["zotero-mcp-plus"],
"env": {
"ZOTERO_API_KEY": "your-api-key",
"ZOTERO_USER_ID": "your-user-id"
}
}
}Get your API key and user ID at zotero.org/settings/keys.
OPENALEX_API_KEY is also required for the analysis tools (check_retractions, get_citation_graph, check_published_versions). To enable those plus the knowledge graph and full-text search tools, add the extras and an OpenAlex key:
{
"zotero": {
"command": "uvx",
"args": ["zotero-mcp-plus[graph,fulltext]"],
"env": {
"ZOTERO_API_KEY": "your-api-key",
"ZOTERO_USER_ID": "your-user-id",
"OPENALEX_API_KEY": "your-openalex-key"
}
}
}Free OpenAlex key at openalex.org/users/me.
Related MCP server: zotero-grounded-mcp
Operating modes
All 39 tools work with just API credentials — Zotero desktop does not need to be running. Two diagnostic tools (check_ssl_health, audit_local_keys) require no credentials at all.
Mode | What it provides | Requirements |
Cloud (primary) | All reads, writes, citations, attachments, analysis, fulltext, entities |
|
Local (optional) | Faster reads via Zotero desktop's local API (no rate limits) | Zotero 7 desktop running with local API enabled |
When Zotero desktop is running, reads automatically use the faster local API. When it is not, reads fall back to the Web API transparently.
Call server_status to check which modes are available.
Tools
Read tools
Tool | Description |
| Check which modes are available |
| Search library items by keyword |
| Fetch item metadata or BibTeX |
| List all collections |
| List items in a collection |
| List child notes on an item |
| List attachments with availability status |
| Find best path to a paper's full text (PMCID, local PDF, or web download). Pass |
Write tools
Tool | Description |
| Create item from DOI, PMID, or URL (with duplicate detection) |
| Create item with manual metadata (with duplicate detection) |
| Attach a note to an item |
| Create a collection |
| Bulk-add tags/collection to items |
| Add item to a collection |
| Patch metadata fields |
| Attach a local or auto-downloaded PDF |
| Move items to trash (reversible) |
| List trash contents — call before |
| Permanently delete all trashed items (global, irreversible) |
| Dry-run plan for converting cloud attachments to linked files |
| Convert cloud attachments to linked files (dry run unless |
| List, remove, or rename tags library-wide ( |
Citation tools
Tool | Description |
| Create new .docx with live Zotero citations |
| Insert citations into existing .docx |
Analysis tools
Tool | Description |
| Check items for retractions, corrections, and errata via CrossRef + OpenAlex |
| Scan library for duplicate items by DOI and title similarity |
| Get citing/referenced works via OpenAlex with in-library flags |
| Check if preprints have been formally published; reports journal and in-library status |
Knowledge graph tools
Requires the graph extra (uvx "zotero-mcp-plus[graph]" or pip install "zotero-mcp-plus[graph]") and OPENALEX_API_KEY env var.
Tool | Description |
| Build or update citation graph and/or fulltext index ( |
| PageRank, clusters, bridge papers, shortest paths, neighborhood, timeline, topic evolution, citation velocity, trending |
| Semantic Scholar recommendations from library seeds (like Connected Papers) |
| Prolific/influential authors, co-author lookup, ego network, author clusters |
| Interactive HTML visualization (citations, authors, or full view) with D3.js |
Full-text search tools
Requires the fulltext extra (uvx "zotero-mcp-plus[fulltext]" or pip install "zotero-mcp-plus[fulltext]").
Tool | Description |
| Search indexed full text with BM25 ranking and highlighted snippets |
Use build_index(type='fulltext') to extract text from library PDFs and build the FTS5 search index.
Entity extraction tools
Two-tool pattern: the MCP server provides abstracts, the calling LLM extracts entities, and stores them back.
Tool | Description |
| Get papers with abstracts not yet entity-extracted |
| Persist typed entities (biomarker, drug, gene, etc.) extracted by the LLM |
| Query entity index: by_name, by_type, paper_entities (by DOI), co_occurrence, shared_entities |
Diagnostic tools
These two tools require no API credentials and can be used to debug setup problems.
Tool | Description |
| Diagnose Python SSL/TLS config — cert paths, CA count, env-var overrides, live HTTPS probes. Returns HEALTHY/DEGRADED/BROKEN verdict with remediation steps. Use when any tool reports |
| Scan local Zotero SQLite for item/collection keys containing characters ( |
MCP Prompts
Pre-built multi-tool workflows that guide the AI through common tasks:
Prompt | Description |
| Check retractions, verify preprint publication status, scan for duplicates |
| Build indexes and explore research landscape (influential papers, clusters, trends) |
| Add a paper, check retractions, attach PDF, find related work |
| Extract biomedical entities from unprocessed abstracts and store them |
Writing with live citations
Both document tools use [@ITEM_KEY] markers in content:
Gastric cancer screening reduces mortality [@ABC123]. Multiple studies
support this finding [@DEF456, @GHI789].write_cited_documentcreates a new .docx from markdowninsert_citationsmodifies an existing .docx (preserves formatting, including tables)Citations are emitted as Vancouver-style superscript numbers
A References section with a live Zotero bibliography field is appended
After opening in Word with the Zotero plugin: click Refresh to populate the bibliography and switch citation styles.
Reclaiming Zotero cloud storage quota
attach_pdf writes linked files by default, so it no longer consumes quota.
Attachments created before that change are still imported (cloud-stored) and
still count against it. zotero-migrate-attachments converts imported_file
attachments in place by default: each file is copied or downloaded to local
disk, hash-verified, replaced with a linked_file attachment on the same parent
item, and the original is trashed.
Always start with the dry run — it is the default, and writes nothing:
zotero-migrate-attachmentsRead the plan, then convert a small batch first:
zotero-migrate-attachments --apply --modes imported_file --limit 5Check that those five items look right in Zotero (the PDF should open, and the attachment icon shows a link), then run the rest:
zotero-migrate-attachments --applyTrashing is reversible and the quota is not returned until the trash is
emptied. The migration records its keys in
.zotero-attachment-migration-trash.json under the destination directory
before trashing anything. DELETE /items/trash is global, so review the trash,
then use the separate purge-only invocation:
zotero-migrate-attachments --apply --empty-trashThat loads the keys persisted by the earlier invocation and refuses to run if
the trash holds anything the migration did not put there. If --dest was used
for migration, pass the same --dest here. The command never infers ownership
from whatever happens to be in the trash.
imported_url snapshots are excluded by default because one Zotero snapshot
can contain an HTML file plus companion resources. To opt in, use
--modes imported_url; even then, a snapshot is migrated only when it is
already downloaded locally and its storage directory contains exactly one
regular file. Cloud-only or multi-resource snapshots are skipped rather than
flattened and damaged.
Useful flags: --modes imported_file (the default), --modes imported_url
(explicit validated-snapshot opt-in), --dest DIR (default
<ZOTERO_DATA_DIR>/linked-attachments), --no-trash (create the links now,
trash later), --include-local-only (also convert attachments Zotero holds no
cloud file for — these free no quota), and --limit N.
The same operations are exposed as MCP tools: plan_attachment_migration,
migrate_attachments, inspect_trash.
Back up the linked-attachment directory. Linked files do not sync; after migrating, those bytes exist only on this machine.
Architecture
┌─────────────┐ reads+writes ┌──────────────────┐
│ MCP client │ ──────────────>│ Zotero Web API │
│ │ │ api.zotero.org │
│ │ reads (fast) ├──────────────────┤
│ │ ─ ─ ─ ─ ─ ─ ─>│ Zotero Desktop │
│ │ (optional) │ localhost:23119 │
│ │ resolves ├──────────────────┤
│ │ ──────────────>│ Translation Srv │
│ │ │ PubMed/CrossRef │
│ │ analysis ├──────────────────┤
│ │ ──────────────>│ OpenAlex │
│ │ │ CrossRef updates │
│ │ knowledge ├──────────────────┤
│ │ graph + FTS5 │ SQLite + NetworkX│
│ │ │ (local cache) │
│ │ related ├──────────────────┤
│ │ papers │ Semantic Scholar │
└─────────────┘ └──────────────────┘Setup
1. Create a Zotero Web API key (required)
Go to zotero.org/settings/keys
Create a key with write access to your library
Copy the API key and note your User ID
2. Enable Zotero's local API (optional, for faster reads)
In Zotero Desktop: Settings > Advanced > General > enable Allow other applications on this computer to communicate with Zotero. This is optional — without it, all reads go through the Web API.
3. Install
Option A — uvx (recommended, no clone needed):
Install uv first if you don't have it: astral.sh/uv (one-line install on macOS/Linux). Then use zotero-mcp-plus for the base install or zotero-mcp-plus[graph,fulltext] for the full feature set (see Quickstart above). Your MCP client runs uvx directly — no separate install step.
Option B — local install:
git clone https://github.com/alisoroushmd/zotero-mcp.git
cd zotero-mcp
pip install -e ".[graph,fulltext]"Then configure your MCP client to run python -m zotero_mcp.
Developing against a live install (uvx + local source):
If your MCP client runs the server via uvx --from 'zotero-mcp-plus @ file:///path/to/zotero-mcp' (or any file:// reference to this checkout), be aware that uvx builds a wheel once and caches it. Editing the source afterwards silently does nothing — the running server keeps using the cached wheel until either:
the
versioninpyproject.tomlis bumped (a new version → a new cache entry), orthe cache is invalidated explicitly:
uvx --reinstall --from '…' zotero-mcpfor one run, oruv cache clean zotero-mcp-plusto purge it.
Either way, the MCP client must then be fully restarted (not just reconnected) so it launches a fresh server process. If a fix you just made doesn't seem to take effect, this cache is almost always why. For rapid iteration, prefer Option B (pip install -e) — editable installs pick up source edits on every server start with no cache in the way.
4. Set up OpenAlex API key (required for analysis and knowledge graph tools)
OPENALEX_API_KEY is required for: check_retractions, get_citation_graph, check_published_versions, build_index(type='graph'), query_knowledge_graph, query_authors, and export_knowledge_graph. OpenAlex requires a free API key as of Feb 2026:
Register at openalex.org/users/me
Set
OPENALEX_API_KEYin your MCP client config
5. Install knowledge graph support (optional)
With uvx (add to your MCP client config args):
zotero-mcp-plus[graph]With pip (local install):
pip install "zotero-mcp-plus[graph]"Adds networkx, numpy, and scipy for build_index(type='graph'), query_knowledge_graph, query_authors, and export_knowledge_graph. find_related_papers works without it (uses Semantic Scholar API directly).
Optionally set SEMANTIC_SCHOLAR_API_KEY for improved rate limits.
6. Install full-text search support (optional)
With uvx (add to your MCP client config args):
zotero-mcp-plus[fulltext]With pip (local install):
pip install "zotero-mcp-plus[fulltext]"Adds pypdf for extracting text from PDFs. Used by build_index(type='fulltext') to build a searchable FTS5 index. Without it, search_fulltext and build_index(type='fulltext') return an install prompt.
Environment variables
Variable | Required | Description |
| Yes | Zotero Web API key — get at zotero.org/settings/keys |
| Yes | Zotero user/group ID — same page as the API key |
| For analysis/graph tools | Required for |
| No | Your email address. Sent in User-Agent headers to CrossRef/OpenAlex polite pools and required for Unpaywall PDF lookup in |
| No | Improves rate limits for |
| No | Raises the PubMed/eutils rate limit from 3 to 10 req/s — helps bulk identifier resolution and graph builds. Free at ncbi.nlm.nih.gov/account. |
| No | Override path to Zotero desktop data directory (default: |
| No | Where |
| No |
|
| No | Override path for the knowledge-graph SQLite database (default: OS-native per-user data dir — |
| No | Maximum combined persisted graph records loaded into NetworkX (papers, citations, topics, authors, and paper-author links). Defaults to |
| No | Standard XDG override for the default graph DB location. |
| No | Set to |
Troubleshooting
Problem | Cause | Fix |
| Missing env vars | Set |
| Python SSL misconfiguration | Run |
|
| Unpaywall requires a real email address. Set |
Analysis tools fail without obvious error |
|
|
Knowledge graph materialization is refused | The persisted graph exceeds the default 100,000-record in-memory safety ceiling | Reduce/rebuild the graph, or set |
Reads are slow | Zotero desktop not running; reads go through Web API | Start Zotero and enable local API for faster reads (optional) |
Item not found after creation | Zotero sync lag | Items created via Web API appear locally after Zotero syncs (usually seconds) |
| Item was modified between read and write | Retry the operation; the server uses optimistic locking |
Translation server 503 | translate.zotero.org is intermittent | The server falls back to PubMed and CrossRef automatically |
Orphan server processes accumulate | Parent exits without closing stdin | Normal behavior is auto-handled by the watchdog. Disable with |
Development
pip install -e ".[dev,graph,fulltext]"
python -m pytest tests/ -vLicense
MIT
Available Tools
39 toolsadd_to_collectionAIdempotent
Add an existing Zotero item to a collection. Use this to organize a paper into a folder without moving it from other collections.
| Name | Required | Description | Default |
|---|---|---|---|
| item_key | Yes | ||
| collection_key | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal a non-destructive, idempotent write (readOnly=false, destructiveHint=false, idempotentHint=true), so the bar is lower. The description adds concrete behavioral detail: adding to a collection does not remove the item from other collections. It does not mention error cases or duplicate handling, but that is minor given the annotation coverage. 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two short, purposeful sentences. The action is front-loaded in the first sentence, and the second adds a meaningful use case without redundancy. Every word earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple two-key operation with an output schema present and annotations covering safety and idempotency, the description provides the essential semantic and scenario details. It lacks explicit guidance on key sources or edge cases, but the simplicity of the tool and the annotation coverage make this a minor gap rather than a blocking one.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. It does identify item_key as referring to an existing Zotero item and collection_key as referring to a collection, but it does not explain key format, provenance, or any constraints. This is partial compensation only; the agent still has to infer key details from naming and domain knowledge.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb 'Add' and identifies both operands: an existing Zotero item and a collection. It explicitly contrasts with moving by stating 'without moving it from other collections', which distinguishes it from sibling tools like create_item or batch_organize. An agent can immediately understand what this tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this to organize a paper into a folder' provides a clear, explicit use case, and 'without moving it from other collections' clarifies the boundary of the operation. It does not explicitly name alternative tools or state hard when-not-to-use conditions, but the context is strong enough for an agent to decide when to invoke it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
attach_pdfA
Attach a PDF to a Zotero item. Can auto-download a free PDF via Unpaywall/PMC/bioRxiv, or accept a local file path. Use this when the user wants to add a PDF to a paper that doesn't have one.
| Name | Required | Description | Default |
|---|---|---|---|
| doi | No | ||
| pdf_path | No | ||
| parent_key | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations, the description discloses meaningful side effects: it can auto-download a PDF via Unpaywall/PMC/bioRxiv or accept a local file path. This is useful external-behavior context. It stops short of detailing failure or duplicate behavior, but annotations already signal mutating and non-idempotent behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two sentences with no filler. It front-loads the core action, then explains usage modes, then gives an explicit trigger. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a relatively simple tool with an output schema, the description covers the main input modes and use case well. The only notable omission is guidance on what happens if both doi and pdf_path are supplied, but that is a minor gap given the rest of the definition.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% property description coverage, so the description must help interpret parameters. It maps doi to the auto-download capability and pdf_path to the local-file option, but it never explicitly refers to parent_key or explains the relationship or precedence of doi vs pdf_path. Property names help, but the description only partially compensates for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: 'Attach a PDF to a Zotero item.' It clearly distinguishes this from read-only sibling tools like get_item_attachments by focusing on adding an attachment, and it further clarifies the two input modes (auto-download vs local file path).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives an explicit trigger: 'Use this when the user wants to add a PDF to a paper that doesn't have one.' This is a clear usage context, though it does not explicitly name alternative tools or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
audit_local_keysARead-onlyIdempotent
Audit the local Zotero SQLite database for collection/item keys that contain forbidden characters (0, 1, I, O). Such keys are rejected by the Zotero sync server with 'not a valid collection/item key' and halt sync with 'Made no progress during upload -- stopping'. Use this as a diagnostic when the user reports sync errors, or proactively after any bulk library operation. Reads ~/Zotero/zotero.sqlite read-only (override with the ZOTERO_DATA_DIR env var). Returns a summary with the offending keys, their names, and sync state so they can be rekeyed manually before the next sync.
| Name | Required | Description | Default |
|---|---|---|---|
| include_items | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare read-only and idempotent behavior, and the description reinforces this by stating it 'Reads ~/Zotero/zotero.sqlite read-only.' It also adds valuable context: the exact error messages that occur, the environment variable override, and the nature of the returned summary. This goes well 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but every sentence carries distinct value: problem, symptoms, trigger conditions, file path, override mechanism, and return type. It is longer than a one-liner but that length is justified by the diagnostic context.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers what, when, where, and what is returned, and the output schema exists to handle return-value details. The only notable gap is the undocumented 'include_items' parameter, which prevents the description from being fully complete for invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema coverage is 0% and the description does not explain the meaning of the only parameter, 'include_items.' Although the parameter name hints at whether item keys are included, the description never connects it to the audit scope. For a low-coverage schema, the description should compensate, and it does not.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('Audit'), a specific resource ('local Zotero SQLite database'), and a precise diagnostic purpose (finding keys with forbidden characters). It clearly differentiates this tool from sibling search/get operations by focusing on key validation rather than retrieval or mutation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use the tool: 'when the user reports sync errors' or 'proactively after any bulk library operation.' It does not explicitly name alternatives or exclusion criteria, but the context is clear enough that an agent can decide when this diagnostic is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
batch_organizeA
Add tags and/or move multiple items to a collection in one operation. Use this for bulk organization — e.g. tagging a set of search results or grouping papers into a collection. Handles rate limiting and version conflicts.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| item_keys | Yes | ||
| collection_key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral context by stating that the tool handles rate limiting and version conflicts, information not present in the annotations. It does not explain the conflict-resolution mechanism, but given that readOnlyHint and destructiveHint already cover the mutability profile, this is sufficient extra transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences with the core operation front-loaded. The usage example and the rate-limit/version-conflict note each add value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given a simple three-parameter schema, existing annotations, and an output schema, the description covers the essential purpose, usage context, and key runtime behaviors. Minor gaps remain around version-conflict outcomes and parameter format details, but they do not prevent an agent from selecting and invoking the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description provides the only semantic mapping for the parameters: tags are added, item_keys identify the multiple items, and collection_key is the destination collection. The 'and/or' wording implies optionality, but it does not clarify the accepted string/array/null forms or the exact relationship between the fields.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb/resource combination: adding tags and/or moving multiple items to a collection in one operation. The 'multiple items' and 'one operation' phrasing distinguishes this bulk tool from single-item siblings like add_to_collection and manage_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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
'Use this for bulk organization' is an explicit when-to-use directive, reinforced with concrete examples such as tagging search results and grouping papers into a collection. It does not state when not to use it or explicitly name a single-item alternative, so it misses the top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
build_indexA
Build or update indexes for your Zotero library. Use this after adding new papers to enable graph queries and full-text search. Types: 'graph' (citation network + analytics via OpenAlex — enables query_knowledge_graph, query_authors, export_knowledge_graph), 'fulltext' (PDF text extraction + FTS5 index — enables search_fulltext), 'both' (runs graph then fulltext). Auto-detects full build vs incremental sync. Set full_rebuild=true to force a complete rebuild.
| Name | Required | Description | Default |
|---|---|---|---|
| type | No | graph | |
| limit | No | ||
| full_rebuild | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds behavioral context beyond the annotations by explaining that the tool auto-detects full build vs incremental sync, that 'both' runs graph then fulltext in sequence, and that full_rebuild forces a complete rebuild. It does not overpromise safety, consistent with readOnlyHint=false and destructiveHint=false.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the core purpose, and each sentence carries distinct useful information. The type breakdown and rebuild guidance are structured clearly without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the main decision points: which type to choose, when to use the tool, and how to force a rebuild. The presence of an output schema covers return-value expectations. The only notable completeness gap is the undocumented 'limit' parameter.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must carry parameter meaning. It does a good job explaining 'type' values and 'full_rebuild', but it never explains the 'limit' parameter, which remains undocumented in both schema and description. This is a real gap for an agent deciding how to parameterize the call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the verb 'Build or update' and the resource 'indexes for your Zotero library'. It also enumerates the specific index types and what each enables, making the tool's role unambiguous relative to the sibling tools.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly says when to use it: 'after adding new papers to enable graph queries and full-text search.' It also distinguishes the effects of each type option, but does not explicitly state when not to use it or which sibling might be an alternative, though no direct alternative exists among siblings.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_published_versionsARead-onlyIdempotent
Check if preprints have been formally published in a peer-reviewed journal. Use this when the user has bioRxiv/medRxiv/arXiv papers and wants to know if a final journal version exists. Reports published DOI, journal name, and whether the published version is already in the library. Uses CrossRef and OpenAlex.
| Name | Required | Description | Default |
|---|---|---|---|
| item_keys | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, openWorld, idempotent, and non-destructive behavior. The description adds useful context by naming the external sources (CrossRef and OpenAlex), the reported fields, and the fact that it checks whether the published version is already in the library. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, each earning its place: purpose, usage context, and output/source details. The most important information is front-loaded and there is no unnecessary filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the annotations cover safety and an output schema exists, the description sufficiently covers behavior and inputs for a check-like tool. The main minor gap is the lack of explicit item_keys semantics, but overall the agent has enough context to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. It does not explicitly explain that item_keys refers to the preprint item keys to check, nor does it clarify the accepted formats beyond what the schema already shows. The usage context implies the meaning but the description adds little parameter-level value.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Check') and resource ('preprints') and clearly states the outcome: determining if a final journal version exists and reporting DOI, journal name, and library presence. It is distinct from siblings like check_retractions by focusing on publication status rather than retractions.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It provides an explicit use case: when the user has bioRxiv/medRxiv/arXiv papers and wants to know if a final journal version exists. It does not explicitly name alternatives or exclusions, but the context is clear enough to guide tool selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_retractionsARead-onlyIdempotent
Check whether papers have been retracted or corrected. Uses CrossRef (authoritative) and OpenAlex. Use this when the user asks about paper validity, before citing papers, or as part of a literature audit. Accepts one or more item keys.
| Name | Required | Description | Default |
|---|---|---|---|
| item_keys | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already carry the safety profile (readOnly=true, openWorldHint=true, idempotentHint=true, destructiveHint=false). The description adds behavioral context beyond that: which external services are consulted and their reliability ('Uses CrossRef (authoritative) and OpenAlex'), which informs how much an agent should trust the result. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each carrying distinct value: purpose, data sources, usage triggers, and parameter format. It is front-loaded with the core purpose and contains zero filler or repetition of information already in the schema or annotations.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a single-parameter, read-only check tool with a present output schema and four rich annotations, the description covers purpose, sources, when-to-use, and parameter cardinality. The only gap is the undefined item_keys domain concept, which is minor given the schema and output schema handle the mechanics.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. 'Accepts one or more item keys' clarifies the otherwise ambiguous anyOf string-or-array schema and confirms batch multiplicity. However, it never defines what an item key is or where to obtain one, leaving part of the burden unmet.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: 'Check whether papers have been retracted or corrected.' It goes further by naming the data sources (CrossRef, OpenAlex), and the retraction-checking purpose is unique among the 40+ sibling tools, so an agent can distinguish it without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit trigger conditions: 'when the user asks about paper validity, before citing papers, or as part of a literature audit.' These are concrete, actionable contexts. It lacks when-not-to-use guidance or named alternatives, but the stated triggers are clear enough to route an agent correctly.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
check_ssl_healthARead-onlyIdempotent
Diagnose Python SSL/TLS certificate configuration. Use when any tool reports CERTIFICATE_VERIFY_FAILED, SSL errors, or HTTPS failures (OpenAlex, CrossRef, PubMed, etc). Returns Python/OpenSSL versions, resolved cert bundle paths, CA count, env-var overrides (flagging any pointing at missing paths), certifi version, live probes against canonical endpoints, a verdict (HEALTHY/DEGRADED/BROKEN), and concrete remediation steps. Safe, read-only. Set probe=False for offline config-only diagnostics.
| Name | Required | Description | Default |
|---|---|---|---|
| probe | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (readOnly, idempotent, non-destructive), the description discloses detailed behavior: what it returns, that it performs live probes, that it flags env-var overrides pointing at missing paths, and that it provides a verdict and remediation steps. It appropriately declares itself 'Safe, read-only.' No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the primary purpose and usage trigger, then moves through return contents and the probe toggle. It is somewhat dense and list-heavy, but every clause adds useful information. It is appropriately sized for a diagnostic tool with this much output.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has a rich output schema and full annotation coverage, so the description does not need to define every return field. It supplies the essential operational details: when to use it, what diagnostic categories it covers, what the verdict levels are, and how to switch to offline mode. This is complete enough for an agent to select and invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema coverage, the description compensates by explaining the only parameter, probe, and its offline mode. It does not restate the default (true), but the schema already provides that. The semantic distinction between live probing and offline diagnostics is clearly conveyed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Diagnose') and resource ('Python SSL/TLS certificate configuration'), and clearly distinguishes the tool from siblings by tying it to specific failure modes (CERTIFICATE_VERIFY_FAILED, SSL errors, HTTPS failures). It also enumerates the concrete diagnostic outputs, 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.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the tool: whenever any tool reports CERTIFICATE_VERIFY_FAILED, SSL errors, or HTTPS failures, including named integrations. It also provides conditional usage guidance for the probe parameter ('Set probe=False for offline config-only diagnostics').
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 Zotero, optionally nested under a parent. Use this when the user wants to organize papers into a new group.
| Name | Required | Description | Default |
|---|---|---|---|
| name | Yes | ||
| parent_key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already disclose readOnly=false, idempotent=false, destructive=false. The description adds the folder synonym and optional parent nesting, which is useful, but it does not explain behavior around duplicate names, parent_key validation, or any side effects beyond creation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler. The primary action is front-loaded, and the parent option and intended use case are included directly.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a 2-parameter creation tool with annotations and an output schema, the description covers the key points: what it creates, where, and the optional parent. It could add a short note on parent_key validity or duplicate names, but nothing vital is missing for a standard invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has no parameter descriptions, so the description must compensate. It clarifies that parent_key relates to nesting under a parent and that name identifies the new collection, but it does not specify that parent_key must reference an existing collection key or explain name uniqueness.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the exact operation with a specific verb and resource: 'Create a new collection (folder) in Zotero'. It also clarifies optional nesting under a parent and frames the purpose as 'organize papers into a new group', which distinguishes it from create_item and create_note.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides a usage condition: 'Use this when the user wants to organize papers into a new group.' It gives clear context but does not mention when not to use it or name alternatives like add_to_collection or batch_organize.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_itemA
Add a paper to Zotero from any identifier: DOI, PMID, or URL (PubMed, bioRxiv, arXiv, publisher pages). Resolves metadata automatically and checks for duplicates. Use this when the user wants to save a paper to their library. Optional title is only used for bare URLs that can't be scraped. If you only have structured fields (title/authors/etc.) and no DOI/PMID/URL to resolve, use create_item_manual instead. The result includes dedup_check_failed=true if the duplicate check could not be completed.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| input | Yes | ||
| title | No | ||
| collection_keys | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations only communicate non-read-only, non-idempotent, non-destructive behavior. The description adds meaningful context beyond that: metadata is auto-resolved, duplicates are checked, title is only used as a fallback for bare URLs, and dedup_check_failed=true is surfaced when the duplicate check fails. It stops short of explaining what happens when a duplicate is actually found, but it provides substantial transparency.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is five sentences, each earning its place: core action, identifier types, when to use, title behavior, alternative tool, and dedup failure signal. It is front-loaded with the most important information and contains no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with four parameters and an output schema, the description covers the input identifier semantics, the fallback title behavior, the alternative manual tool, and the dedup-check failure flag. The main gaps are the lack of any explanation for tags and collection_keys, and ambiguous behavior if a duplicate is found. Still, it is largely complete for an agent deciding when and how to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 burden of explaining parameters. It gives solid semantics for input (DOI, PMID, URL) and title (fallback for unscrapable bare URLs), but tags and collection_keys are not explained at all. With four parameters and two covered, this is partial compensation rather than full.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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 a paper to Zotero from any identifier: DOI, PMID, or URL.' It clearly enumerates accepted identifier types, which distinguishes it from manual item creation and other sibling tools without needing to inspect the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use the tool ('Use this when the user wants to save a paper to their library') and when not to, naming the alternative: 'If you only have structured fields... use create_item_manual instead.' This is direct, unambiguous routing guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_item_manualA
Create a Zotero item with manually provided metadata fields. Use this instead of create_item when you have structured metadata already (e.g. from a conversation) rather than a DOI/URL to resolve. Checks for duplicates.
| Name | Required | Description | Default |
|---|---|---|---|
| doi | No | ||
| url | No | ||
| date | No | ||
| tags | No | ||
| extra | No | ||
| issue | No | ||
| pages | No | ||
| title | Yes | ||
| volume | No | ||
| abstract | No | ||
| creators | No | ||
| item_type | Yes | ||
| publisher | No | ||
| collection_keys | No | ||
| publication_title | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses the duplicate-checking behavior, which is not expressed in the annotations. It also clarifies that metadata is manually supplied rather than resolved. This goes beyond the readOnly/openWorld 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences: purpose first, usage condition second, duplicate check third. Every sentence adds distinct value and there is no redundant phrasing.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is sufficient for tool selection: purpose, alternative, and a key behavior are present. However, the tool has 15 parameters and no schema description coverage, so an agent still lacks crucial input-format guidance for non-obvious fields, making the overall definition incomplete for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and there are 15 parameters, so the description carries the burden of explaining parameter meaning. It does not describe any specific parameter or format, leaving complex fields like creators, tags, and collection_keys undocumented in prose.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action and resource ('Create a Zotero item') and clearly differentiates itself from the sibling create_item by emphasizing manually provided metadata instead of resolving a DOI/URL. An agent can immediately understand what this tool does and how it differs.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly tells the agent when to use this tool ('Use this instead of create_item when you have structured metadata already') and names the alternative. It also adds a relevant behavioral condition ('Checks for duplicates') that helps with selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
create_noteA
Create a note attached to a Zotero item. Use this to save reading notes, summaries, or annotations on a paper. Supports HTML or plain text content.
| Name | Required | Description | Default |
|---|---|---|---|
| tags | No | ||
| content | Yes | ||
| parent_key | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already communicate that this is a non-read-only, non-destructive mutation. The description adds useful behavioral detail beyond those annotations: the note is attached to a Zotero item and the content can be HTML or plain text. There is no contradiction with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is two tight sentences with no filler. The primary action is front-loaded, and the usage guidance and content-format detail are provided efficiently. Every sentence adds meaningful information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a three-parameter create tool with an output schema and safety-relevant annotations already present, the description covers the essential relationship to the parent item and the acceptable content format. It does not describe tags or return behavior, but those are either covered by the schema, output schema, or are minor for this call context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. It does add semantic value by explaining that parent_key refers to the Zotero item the note is attached to and that content accepts HTML or plain text. However, it does not address the third parameter, tags, leaving that aspect still underdocumented.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: 'Create a note attached to a Zotero item.' It further clarifies the intended use ('save reading notes, summaries, or annotations') and distinguishes this from other create actions like create_collection or create_item by specifying that the note is attached to an item.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The phrase 'Use this to save reading notes, summaries, or annotations on a paper' gives clear usage context. It does not explicitly name alternatives or exclusion criteria, but the attachment-to-item framing makes it easy to distinguish from read-only siblings like get_notes and from attachment-focused tools like attach_pdf.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
empty_trashADestructive
Permanently delete ALL items in the Zotero trash. THIS IS IRREVERSIBLE. This is a GLOBAL operation — it destroys everything in the trash, not just items you recently trashed. Call inspect_trash first to see what is in there, and always confirm with the user before calling this tool.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
While the annotations already mark destructiveHint=true, the description adds crucial context beyond that: the operation is IRREVERSIBLE and global, affecting everything in the trash. This is exactly the kind of behavioral disclosure an agent needs before invoking a destructive tool.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each earning its place: the core action, the irreversibility warning, the global scope clarification, and the required pre-call confirmation step. No filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter destructive tool with an output schema present, the description supplies all essential context: what is deleted, how broadly, the irreversibility, and the required user-confirmation workflow. An agent has enough to correctly decide when and how to invoke it.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The tool has zero parameters, so the schema fully covers the input surface. With 100% schema coverage and no parameters, the description has no additional parameter-level semantics to provide, and the baseline of 4 applies.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action ('Permanently delete ALL items'), the exact resource ('the Zotero trash'), and emphasizes the global scope ('not just items you recently trashed'). It unambiguously distinguishes this from operations like trash_items or inspect_trash.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs to call inspect_trash first and to always confirm with the user, providing clear preconditions and workflow guidance. It does not explicitly name alternative tools to use instead, but the prerequisites and global-destructive warning make the intended context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_knowledge_graphARead-onlyIdempotent
Export the knowledge graph as an interactive HTML visualization that opens in any browser. Use this when the user wants to see their citation network visually, explore research clusters, or share a graph. Views: 'citations' (paper nodes + citation edges, colored by cluster), 'authors' (author nodes + co-authorship edges), 'full' (both layers, papers capped at 200 by PageRank). Requires build_index(type='graph') to have been run first.
| Name | Required | Description | Default |
|---|---|---|---|
| path | No | ||
| view | No | citations |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only, idempotent, and non-destructive. The description adds valuable behavioral context beyond that: the output is an HTML artifact, the 'full' view caps papers at 200 by PageRank, and build_index(type='graph') must have been run first. This exceeds the annotation baseline, though it does not detail failure behavior if the prerequisite 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core purpose, then moves to usage context, parameter detail, and the prerequisite. Every sentence earns its place; there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description covers the output format, supported views, and a prerequisite, which is substantial. Yet the 'path' parameter remains a gap in the documentation, and because the output schema already exists, return-value explanation is not needed. The missing path semantics keep it from being fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It does richly describe the 'view' parameter, including enum values and their graph semantics, but says nothing about the 'path' parameter, which is left undocumented in both the schema and the description. Partial compensation only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: 'Export the knowledge graph as an interactive HTML visualization that opens in any browser.' It also names the exact use cases and view options, making the tool's role unmistakable even without a title.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Use this when the user wants to see their citation network visually, explore research clusters, or share a graph,' which gives clear context. However, it does not explicitly name sibling alternatives (e.g., get_citation_graph or query_knowledge_graph) or state when not to use them, so it stops short of full exclusion guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
find_duplicatesARead-onlyIdempotent
Scan the Zotero library for duplicate items using DOI match and title similarity (>85%). Use this when the user wants to clean up their library or after bulk imports. Optionally scoped to a single collection.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| collection_key | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, openWorldHint, and destructiveHint false, so the description does not need to restate safety. It adds non-obvious behavioral detail: the exact duplicate-matching strategy (DOI match plus >85% title similarity) and optional collection scoping, which annotations cannot convey.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences: one states the action and method, the next gives use cases and optional scope. No filler or duplication of schema/annotations; every clause earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool has only two optional parameters with defaults in the schema, a full safety profile from annotations, and an output schema. The description supplies the remaining needed context: purpose, matching criteria, typical triggers, and collection scoping. 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.
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. It paraphrases collection_key ('Optionally scoped to a single collection') but never explains limit, including what its value represents or how the string/integer variants are interpreted. With half the parameters undocumented in both schema and description, this is a clear gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb ('Scan'), a concrete resource ('the Zotero library'), and the goal ('duplicate items'), plus the method (DOI match and title similarity >85%). This is clearly distinct from siblings like search_items or get_collection_items, which serve different lookup tasks.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to use it: when the user wants to clean up a library or after bulk imports. It does not name alternatives or when-not-to-use cases, but the use-case context is clear enough to route an agent.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_citation_graphARead-onlyIdempotent
Get papers that cite or are cited by a Zotero item, via OpenAlex. Use this when the user wants to explore a paper's citation network, find related work, or trace the influence of a paper. Each result is flagged with in_library (true/false). Direction: 'cited_by', 'references', or 'both'.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| item_key | Yes | ||
| direction | No | both |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal read-only, idempotent, open-world behavior. The description adds useful context beyond annotations: it queries OpenAlex and flags each result with in_library. It does not cover rate limits or pagination, but the safety profile is already carried by annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three compact sentences with no waste: the first states the core operation and source, the second gives usage triggers, and the third notes the result flag and direction choices. Well front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With an output schema and read-only annotations present, the description sufficiently orients the agent with purpose, usage, output flag, and direction values. The only minor gap is not addressing how this relates to similar sibling tools like find_related_papers.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. It explains the direction enum values and indicates item_key identifies a Zotero item, but it does not clarify limit semantics or item_key formatting. Partial compensation only.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get papers that cite or are cited by a Zotero item' via OpenAlex. It clearly conveys the citation-network scope and direction options, though it does not explicitly distinguish itself from the sibling find_related_papers.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Provides explicit usage context: 'Use this when the user wants to explore a paper's citation network, find related work, or trace the influence of a paper.' It does not mention when not to use it or name alternative tools, but the usage context is clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_collection_itemsARead-onlyIdempotent
List all items in a specific Zotero collection by its key. Use this when the user wants to see what's in a particular folder/collection.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| offset | No | ||
| collection_key | Yes | ||
| response_format | No | json |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already signal read-only, idempotent, and non-destructive behavior, so the description carries a lighter burden. However, it adds no detail about pagination behavior, default limits, or how 'all items' relates to the limit/offset parameters. There is no contradiction with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two compact sentences with no filler. The core verb and resource are front-loaded, and the usage context appears in the second sentence. Efficient and easy to parse.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The output schema and annotations cover the return shape and safety profile, but the description omits important invocation details such as pagination semantics, response_format options, and how this tool differs from search_items for filtered collection queries. It is adequate for the common folder-contents request but incomplete for nuanced parameter use.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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, but it only clarifies collection_key ('by its key'). limit, offset, and response_format are left entirely to schema names and defaults; the response_format enum values are not explained, and the phrase 'all items' can mislead given the default limit of 100.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States the exact action ('List all items') and the specific resource ('a specific Zotero collection by its key'), plus user-facing context ('folder/collection'). This clearly distinguishes it from sibling tools like get_collections, which lists collections rather than items, and get_item, which targets a single item.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly provides a usage trigger: 'Use this when the user wants to see what's in a particular folder/collection.' It does not mention when not to use it or point to alternatives like search_items for filtered searches, so it stops short of a full 5.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_collectionsARead-onlyIdempotent
List all collections (folders) in the Zotero library with their keys, names, parent relationships, and item counts. Use this when the user asks about their library organization or wants to browse/find a collection.
| Name | Required | Description | Default |
|---|---|---|---|
| response_format | No | json |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover readOnly, idempotent, non-destructive, and open-world behavior. The description adds that it lists all collections with scoping information, but it does not disclose pagination, sorting, or output size limits. No contradiction with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler. The main function is front-loaded, and the usage guidance follows immediately. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple optional parameter, the rich annotations, and the presence of an output schema, the description is nearly complete. A small gap is not mentioning response_format or explicitly contrasting with get_collection_items, but the core use case and return contents are well covered.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description does not mention the response_format parameter at all. While the enum values 'json' and 'markdown' are self-explanatory, the description does not compensate for the absent parameter documentation as required for low-coverage schemas.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('List') and specific resource ('collections (folders) in the Zotero library'), and enumerates the exact returned fields: keys, names, parent relationships, and item counts. This clearly distinguishes it from sibling tools like get_collection_items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use it: when the user asks about their library organization or wants to browse/find a collection. It provides clear context but does not explicitly mention when not to use it or name alternative sibling tools.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_itemARead-onlyIdempotent
Get detailed metadata for a single Zotero item by its key. Use this when you need full bibliographic details (title, authors, DOI, abstract, dates) for a specific item. Set format='bibtex' for BibTeX export.
| Name | Required | Description | Default |
|---|---|---|---|
| format | No | json | |
| item_key | Yes | ||
| response_format | No | json |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint, idempotentHint, and destructiveHint=false, so the safety profile is covered. The description adds useful context about returning detailed metadata and supporting BibTeX export, but it does not disclose potential open-world response behavior or errors beyond what annotations already imply.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences with no filler. The core operation is front-loaded, the use case is stated, and the BibTeX instruction is a concise, actionable detail. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, annotations cover safety, and an output schema exists, so the description need not explain return values. The only notable gap is the undocumented 'response_format' parameter, but the schema's clear enum values partially compensate. Overall, the description is sufficient for correct invocation in most cases.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. It clarifies 'item_key' as the identifying key and explains that format='bibtex' switches to BibTeX export, but it completely omits the 'response_format' parameter, which is one of three parameters and controls JSON vs Markdown output.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the action ('Get detailed metadata'), the resource ('a single Zotero item by its key'), and the use case ('full bibliographic details'). It also distinguishes itself from broader search or collection tools by focusing on a single item key, 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.
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 full bibliographic details... for a specific item,' which gives clear usage context. It does not name sibling alternatives or state when not to use it, but the use case is specific enough for an agent to select this tool appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_item_attachmentsARead-onlyIdempotent
List file attachments (PDFs, etc.) on a Zotero item with availability status. Use this to check whether a paper HAS a PDF before fetching it; to actually read the content, use get_pdf_content. Returns {items, count} where each item's availability is one of: stored_remote_available, stored_local_available, linked_local_available, or metadata_only.
| Name | Required | Description | Default |
|---|---|---|---|
| parent_key | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already supply the read-only, idempotent, non-destructive safety profile. The description adds useful behavioral context on top by specifying the return shape and enumerating the availability statuses. It doesn't discuss rate limits or auth, but for this simple read tool that is not a significant omission.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the verb and object, and no filler. The use case, alternative, and return format each earn their place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, has a full output schema, and the annotations cover safety. The description goes beyond what is required by explaining the availability enum and pointing to get_pdf_content. It lacks an explicit definition of parent_key, but the name plus 'on a Zotero item' makes the tool callable.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema only provides parent_key with type string and zero description coverage, so the description must compensate. It clarifies that the key refers to a Zotero item, but it does not specify the key's format or how to obtain it. For a single self-named parameter this is adequate but not rich.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action ('List file attachments'), a specific resource ('a Zotero item'), and a distinctive output dimension ('availability status'). It also explicitly contrasts with get_pdf_content, so an agent can distinguish this tool from its closest sibling without inspecting the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance: 'Use this to check whether a paper HAS a PDF before fetching it.' It also names the alternative for a different task: 'to actually read the content, use get_pdf_content.' This is a clear decision rule.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_notesARead-onlyIdempotent
Get all notes attached to a Zotero item. Use this when the user wants to read their annotations, reading notes, or comments on a paper.
| Name | Required | Description | Default |
|---|---|---|---|
| parent_key | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false, so the safety profile is covered. The description adds semantic context about what qualifies as a note, but does not disclose operational behavior such as pagination, ordering, or scope limits.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences with no filler. The core action is front-loaded in the first sentence, and the usage guidance occupies a natural second sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a low-complexity read-only tool with an output schema and safety annotations, the description covers purpose and usage well. The only notable gap is the undocumented parent_key parameter, so it is nearly complete but not fully self-contained.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, and the description never explains parent_key, its format, or how to obtain it. The phrase 'attached to a Zotero item' weakly implies parent_key identifies that item, but this does not meaningfully compensate for the missing documentation.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb and resource: 'Get all notes attached to a Zotero item.' It clarifies what kinds of notes are included (annotations, reading notes, comments), which distinguishes it from sibling tools like get_item_attachments or get_pdf_content.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly says 'Use this when the user wants to read their annotations, reading notes, or comments on a paper,' giving clear context for when to call it. However, it does not name alternatives or state when not to use it, so it stops short of the highest bar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_pdf_contentARead-onlyIdempotent
Get the full text of a paper in the library. Routes to the best available source: PubMed Central, local PDF, web PDF download, or free open-access PDF. Use this when the user wants to read a paper's content; to only CHECK whether a PDF exists without fetching it, use get_item_attachments first. Set extract_text=true to extract and return the text inline; otherwise returns a file path or PMCID for the caller to read. The response always includes a content_source field (one of: pmc, local_pdf, web_pdf, free_pdf_, extracted_text, not_found) that determines which other fields are present.
| Name | Required | Description | Default |
|---|---|---|---|
| item_key | Yes | ||
| extract_text | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already declare readOnly, openWorld, idempotent, and non-destructive behavior. The description adds valuable context beyond that: the routing to sources, the extract_text behavior, and the content_source response field with its possible values. It does not fully enumerate all response fields, but the output schema covers that.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three dense sentences deliver purpose, routing, usage boundary, parameter behavior, and response contract. There is no filler, and the most decision-relevant information is front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with routing complexity, an output schema, and multiple annotations, the description covers the essential decisions: when to use, how to request inline text, and what primary response discriminator to expect. It could mention how the caller should consume the returned file path or PMCID, but the output schema likely handles that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry parameter meaning. It clearly explains extract_text's effect on output, and item_key is inferable as the paper identifier, but its format and provenance are not explicitly explained. Some improvement would be describing what an item_key is or how to obtain one.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific verb-resource pair ('Get the full text of a paper in the library') and immediately details the routing behavior across sources. It also distinguishes itself from get_item_attachments, making its purpose and scope unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly states when to use this tool ('when the user wants to read a paper's content') and when not to ('to only CHECK whether a PDF exists', use get_item_attachments first). This direct alternative guidance leaves no ambiguity about selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_unextracted_abstractsARead-onlyIdempotent
Get papers that have abstracts but no extracted biomedical entities yet. Use this to find papers needing entity extraction, then extract entities (conditions, drugs, genes, biomarkers, methods, outcomes) from the returned abstracts and save them with store_entities.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only, idempotent, and non-destructive behavior. The description adds meaningful context beyond those annotations: the selection criteria (has abstracts, missing extracted entities), the entity types involved, and the recommended next step. No contradictions with annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two concise sentences deliver the core purpose, usage trigger, and follow-up workflow without filler. The most important information is front-loaded in the first sentence.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The tool is simple, has one optional parameter, and an output schema exists. The description explains what papers are returned and how to proceed. The only minor gap is the undocumented limit parameter, but the default of 50 and the intuitive name mitigate the issue.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The single parameter 'limit' has 0% schema description coverage, and the tool description does not explain its semantics, accepted formats, or behavior. The name is somewhat intuitive, but the schema's anyOf string/integer design is left undocumented, so the description does not compensate for the schema gap.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the specific action and resource: get papers that have abstracts but no extracted biomedical entities yet. It identifies the exact purpose—finding papers that need entity extraction—and distinguishes this from related sibling tools like store_entities and search_entities by narrowing the resource state.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says 'Use this to find papers needing entity extraction' and provides the intended follow-up workflow with store_entities. There are no explicit when-not-to-use instructions or alternative tool mentions, but the usage context is strong enough for an agent to select this tool appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
insert_citationsA
Insert live Zotero citation field codes into an existing Word document. Finds [@ITEM_KEY] markers in the .docx and replaces them with Zotero field codes. Use this to add citations to a document the user already has; to create a NEW .docx from markdown instead, use write_cited_document. Preserves existing formatting, styles, images, and layout.
| Name | Required | Description | Default |
|---|---|---|---|
| output_path | No | ||
| document_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations indicate a mutation (readOnlyHint=false) but not destructiveness; the description adds useful behavioral detail by stating that markers get replaced with field codes and that existing formatting, styles, images, and layout are preserved. It stops short of explaining whether the file is modified in place or whether output_path changes that behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three sentences, front-loaded with the main function, followed by routing guidance and preservation guarantees. There is no filler or repetition of schema information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description is complete enough for an agent to understand what the tool does, when to use it, and what side effects to expect. The only notable gap is the absent explanation of output_path semantics, which matters slightly for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema coverage is 0%, so the description must compensate. It adds clear meaning for document_path by describing the .docx with markers, but it does not explain output_path at all, including what a null default means. This is a partial compensation for the schema's lack of parameter descriptions.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
States a specific verb ('Insert'), resource ('live Zotero citation field codes into an existing Word document'), and mechanism (replaces [@ITEM_KEY] markers with Zotero field codes). It also explicitly distinguishes itself from write_cited_document, so an agent can select it without opening schemas.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Gives explicit when-to-use guidance: 'Use this to add citations to a document the user already has.' It also names the alternative for the contrasting case: 'to create a NEW .docx from markdown instead, use write_cited_document.'
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
inspect_trashARead-onlyIdempotent
List everything currently in the Zotero trash, with item type and title. Use this BEFORE empty_trash so the user can see exactly what would be permanently destroyed — empty_trash is global and irreversible.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnlyHint=true, idempotentHint=true, and destructiveHint=false. The description adds valuable context by connecting the read to the destructive consequence of empty_trash, helping the agent surface the right information before an irreversible operation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two tight sentences with no filler. The primary action is front-loaded, and the critical usage warning is stated in the second sentence without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a zero-parameter read-only tool with an output schema and clear annotations, the description covers everything an agent needs: what the tool lists, the field types returned, and when to call it relative to empty_trash.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 does not need to explain parameters, and it appropriately focuses on behavior and output instead.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb ('List'), a precise resource ('the Zotero trash'), and the returned content ('item type and title'). It is clearly differentiated from destructive siblings like empty_trash and from other read tools in the sibling list.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly instructs when to use this tool: 'BEFORE empty_trash'. It also explains why and highlights the alternative's global, irreversible nature, leaving no ambiguity about the intended workflow.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
manage_tagsADestructive
Manage tags in your Zotero library. Use this when the user asks about tags, wants to list/filter tags, remove a tag from all items, or rename a tag. Actions: 'list' (browse tags, optional prefix filter), 'remove' (DESTRUCTIVE: deletes the tag from every item in the library, not reversible — requires tag), 'rename' (rewrites the tag on every item library-wide — requires tag and new_tag). Confirm with the user before 'remove' or 'rename'.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| action | No | list | |
| prefix | No | ||
| new_tag | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description discloses far more than the annotations provide: it marks 'remove' as DESTRUCTIVE, states deletion is 'not reversible,' and notes that both remove and rename apply 'library-wide.' It also instructs the agent to confirm with the user before these actions, which is essential behavioral guidance.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is front-loaded with the purpose, then packs action-specific details into a compact list. Every sentence contributes critical information, with no filler or redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a tool with four optional parameters, an output schema, and destructive behavior, this description covers the operational essentials: actions, parameter requirements, global scope, irreversibility, and confirmation step. Nothing an agent needs to safely invoke this tool is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Despite 0% schema description coverage, the description maps every parameter to its role: 'list' uses an optional prefix filter, 'remove' requires tag, and 'rename' requires both tag and new_tag. This adds significant meaning beyond the bare schema and resolves the action-dependent requirement ambiguity.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with 'Manage tags in your Zotero library' and immediately enumerates concrete actions: list, filter, remove, and rename. It clearly scopes the tool to tag operations, which distinguishes it from the mostly item/collection-focused sibling tools even without naming a specific alternative.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states 'Use this when the user asks about tags, wants to list/filter tags, remove a tag from all items, or rename a tag,' giving clear invocation criteria. It does not name alternate tools or provide explicit when-not-to-use conditions, so it misses the full top score.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
migrate_attachmentsADestructive
Convert Zotero imported (cloud-stored) attachments into linked files: copy or download each file to local disk, hash-verify it, create a linked_file attachment, then move the original to the trash. Frees cloud storage quota while keeping every file locally. DEFAULTS TO A DRY RUN — pass apply=true to make changes, and only after showing the user plan_attachment_migration output. Never empties the trash; use inspect_trash then empty_trash for that, so the user can review what would be permanently destroyed.
| Name | Required | Description | Default |
|---|---|---|---|
| apply | No | ||
| limit | No | ||
| modes | No | imported_file | |
| dest_dir | No | ||
| trash_originals | No | ||
| include_local_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Beyond the annotations (destructiveHint=true, readOnlyHint=false), the description adds crucial behavioral details: dry-run default, apply=true gate, hash verification, moving originals to trash, and explicitly never emptying trash. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded with the core workflow and purpose, then provides essential safety warnings. Every sentence adds value: the process, the quota benefit, the dry-run requirement, and the trash-handling exclusion.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a destructive, multi-step migration tool, the description covers the main workflow, safety gates, and sibling routing well. However, it omits details on several parameters (limit, modes, dest_dir, include_local_only) that could matter for correct execution, leaving some contextual gaps despite the output schema.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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, but it only clarifies apply=true and indirectly mentions trash_originals. The meanings of limit, modes, dest_dir, and include_local_only remain unexplained, leaving the agent to guess at important behavioral controls.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Convert Zotero imported (cloud-stored) attachments into linked files' with a concrete process (copy/download, hash-verify, create linked_file, trash original). It also names the related sibling plan_attachment_migration and contrasts with inspect_trash/empty_trash, making differentiation clear.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives explicit usage conditions: it defaults to a dry run, requires apply=true only after showing plan_attachment_migration output, and explicitly redirects trash-emptying to inspect_trash then empty_trash. This provides both when-to-use and when-not-to-use guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
plan_attachment_migrationARead-onlyIdempotent
Plan a migration of Zotero imported (cloud-stored) attachments to linked files, which keeps every PDF on local disk but frees Zotero cloud storage quota. READ-ONLY: inventories the library, reports which attachments would be converted, which must be downloaded from the cloud first, and which are skipped and why. Nothing is written, downloaded, or trashed. Run this before migrate_attachments.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| modes | No | imported_file | |
| dest_dir | No | ||
| response_format | No | markdown | |
| include_local_only | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description goes beyond the readOnlyHint/destructiveHint annotations by explicitly stating 'Nothing is written, downloaded, or trashed.' It also discloses what the planning report includes: attachments that would be converted, ones requiring download first, and skip reasons. This is transparent about side effects and operational behavior.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and well structured: purpose is front-loaded, read-only behavior is explicitly highlighted, and the migration sequencing note is placed at the end. Every sentence adds useful information with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The high-level context is strong: it explains the tool is a safe planning step, what it inventories, what it reports, and that it should precede migrate_attachments. The output schema exists, so return-value details are not needed. However, all five optional parameters are completely undocumented, leaving customization to inference, so completeness is only moderate.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0% and the description provides no explanation of limit, modes, dest_dir, response_format, or include_local_only. An agent cannot infer what modes values are valid, what limit controls, or how dest_dir affects planning. This is a complete gap in parameter semantics.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Plan a migration') and identifies the exact resource ('Zotero imported (cloud-stored) attachments to linked files') with a clear goal: free cloud storage while keeping PDFs local. It also distinguishes itself from the follow-up sibling migrate_attachments by explicitly framing itself as the read-only precursor.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description clearly instructs 'Run this before migrate_attachments,' giving an explicit temporal usage context. It doesn't spell out when not to use it or compare it to other alternatives, but the sequencing guidance is strong and actionable.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
query_authorsARead-onlyIdempotent
Query the author co-authorship network in your knowledge graph. Use this when the user asks about who publishes most, who collaborates with whom, or wants to map out an author's network. Query types: 'prolific' (authors by paper count), 'influential' (authors by summed PageRank of their papers), 'coauthors_of' (co-authors of a named author, ranked by shared papers), 'network' (ego network for an author within N hops — requires author_name, optional depth), 'clusters' (author community groupings). Requires build_index(type='graph') to be run first.
| Name | Required | Description | Default |
|---|---|---|---|
| depth | No | ||
| limit | No | ||
| query_type | Yes | ||
| author_name | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare the tool read-only, idempotent, and non-destructive, so the bar is lower. The description adds meaningful behavior beyond those annotations: the dependency on a pre-built graph index, ranking semantics ('summed PageRank', 'ranked by shared papers'), and the meaning of hops/depth for the network query. It does not describe error cases if the index is absent, but the prerequisite is disclosed.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is dense but not bloated. Every sentence earns its place: purpose, usage trigger, query-type definitions, and a prerequisite. The most important behavioral constraint is placed at the end but clearly signposted, and there is no filler or restatement of the tool name.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity — five query modes, an optional depth, an author-name parameter, and a prerequisite — the description covers all essential operational knowledge. An output schema exists, so detailed return-value documentation is unnecessary. The only small gap is the undocumented limit parameter, but defaults and schema metadata mitigate that.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, so the description must carry the parameter documentation. It explains all query_type enum values, clarifies author_name for coauthors_of and network, and defines depth as hops. The limit parameter is never mentioned, and it is not systematically stated which query types ignore author_name, so the coverage is strong but not complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific resource ('author co-authorship network') and a clear verb ('Query'), then enumerates five concrete query types that define exactly what the tool does. The scope is distinct from sibling graph tools such as get_citation_graph or query_knowledge_graph, so an agent can identify it confidently.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly tells the agent when to use the tool: when the user asks about prolific authors, collaborations, or an author's network. It also adds a critical prerequisite ('build_index(type='graph') must be run first'). However, it does not name alternative tools or give when-not-to-use exclusions, 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.
query_knowledge_graphARead-onlyIdempotent
Query the knowledge graph for insights about your library's citation network. Use this when the user asks about influential papers, research clusters, publication trends, or relationships between papers. Query types: 'influential' (PageRank-ranked papers), 'clusters' (research topic groupings), 'bridges' (papers connecting different clusters), 'path' (shortest citation path between two DOIs — requires doi_a and doi_b), 'neighborhood' (papers within N hops of a DOI — requires doi and optional depth), 'stats' (graph summary), 'timeline' (papers per month — optional topic filter, start_year, end_year), 'topic_evolution' (per-subfield paper counts by month — optional start_year, end_year), 'citation_velocity' (month-by-month citation count for a DOI — requires doi), 'trending' (papers with accelerating citation rates — optional limit, years window). Requires build_index(type='graph') to be run first.
| Name | Required | Description | Default |
|---|---|---|---|
| doi | No | ||
| depth | No | ||
| doi_a | No | ||
| doi_b | No | ||
| limit | No | ||
| topic | No | ||
| years | No | ||
| end_year | No | ||
| query_type | Yes | ||
| start_year | No | ||
| response_format | No | json |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnlyHint, idempotentHint, and destructiveHint, so the safety profile is covered. The description adds valuable behavioral context beyond the annotations: the dependency on build_index, the notion of PageRank-ranked papers, shortest citation paths, hop-based neighborhoods, and month-by-month citation velocity. This helps the agent anticipate what each query actually computes and what state it requires.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is long but earns its length because it must document ten distinct query types with varying parameter requirements. The most important guidance (when to use and the prerequisite) is front-loaded, and the query-type inventory is dense with useful information rather than padded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the tool's complexity — 11 parameters, 10 query types, and a prerequisite — the description covers the key usage dimensions: when to use it, what each query type means, which parameters each requires, and what must happen first. The output schema handles return-value documentation. Minor gaps remain for generic parameters like topic and years, but overall the description is sufficient for an agent to invoke the tool correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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 largely does by mapping query types to required and optional parameters: path needs doi_a and doi_b, neighborhood needs doi plus optional depth, citation_velocity needs doi, trending takes limit and years, and timeline takes topic/start_year/end_year. It leaves a few generic parameters like response_format and exact date formats implicit, but the core parameter-to-query-type relationships are explained.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific action and resource ('Query the knowledge graph') and immediately enumerates ten concrete query types that distinguish it from sibling tools like get_citation_graph or find_related_papers. It also states the exact user intents it serves ('influential papers, research clusters, publication trends, or relationships between papers'), making it unambiguous what this tool is for.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives clear start conditions: 'Use this when the user asks about influential papers, research clusters, publication trends, or relationships between papers,' and it states a hard prerequisite ('Requires build_index(type="graph") to be run first'). It does not explicitly mention when not to use it or name alternative sibling tools, so it falls short of a 5 but is clearly above vague.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_entitiesARead-onlyIdempotent
Search the biomedical entity graph. Use this when the user asks about which papers mention a condition/drug/gene, what entities co-occur, or what two papers have in common. Query types: 'by_name' (papers mentioning an entity), 'by_type' (common entities of a type, or list all types if no type given), 'co_occurrence' (entities that co-occur with a given entity), 'shared_entities' (entities shared by two papers — requires doi_a and doi_b), 'paper_entities' (all entities extracted from a paper — requires doi).
| Name | Required | Description | Default |
|---|---|---|---|
| doi | No | ||
| doi_a | No | ||
| doi_b | No | ||
| limit | No | ||
| query_type | Yes | ||
| entity_name | No | ||
| entity_type | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already cover read-only/idempotent/non-destructive behavior. The description adds per-query constraints such as 'requires doi_a and doi_b' and 'requires doi', which are behavioral details beyond the bare schema.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, front-loaded with the primary purpose, and uses a list to present query types efficiently. The inline list is dense but each clause adds needed routing information.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only tool with an output schema, the description provides enough context to choose a query type and identify required DOI inputs. Minor gaps remain around limit and entity field usage, but the main invocation path is fully specified.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema parameter descriptions are absent (0% coverage), and the description compensates by mapping query_type values to their intended fields and required DOI parameters. It does not explain the limit parameter or explicitly bind entity_name/entity_type to their query modes, leaving some semantics to inference.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific object ('biomedical entity graph') and enumerates five concrete query modes with their outcomes. It clearly distinguishes entity-graph search from generic search tools by specifying user intents (papers, co-occurrences, shared entities).
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It gives explicit 'Use this when...' triggers for entity-relationship questions and explains which query type fits which request. It does not name sibling alternatives or state when not to use it, so it omits exclusionary guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_fulltextARead-onlyIdempotent
Search the full text of indexed PDFs in your library. Use this when the user wants to find papers that mention a specific term, method, drug, or concept in their body text (not just titles/abstracts). Returns matching papers with highlighted text snippets. Requires build_index(type='fulltext') to be run first.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish readOnly, idempotent, and non-destructive behavior. The description adds valuable contextual behavior beyond annotations: it requires build_index(type='fulltext') to be run first and returns 'highlighted text snippets.' This is useful operational information not present in the schema or annotations.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three sentences with no filler. The primary action is first, usage guidance follows, and the prerequisite is tucked in at the end. Every sentence adds operational value.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a simple read-only search with an output schema and safety annotations, this description is nearly complete: it explains scope, result format, and required precondition. It is missing only minor clarifications such as limit semantics or behavior when the fulltext index is absent.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. It gives meaning to the query parameter ('specific term, method, drug, or concept'), but the limit parameter is never explained—especially its unusual dual string/integer type. This is a meaningful gap for a tool with only two parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource: 'Search the full text of indexed PDFs in your library.' It clearly distinguishes itself from title/abstract-level searching by saying 'not just titles/abstracts,' which separates it from sibling tools like search_items.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use the tool: 'when the user wants to find papers that mention a specific term, method, drug, or concept in their body text.' It also highlights the exclusion of titles/abstracts and a prerequisite (build_index). However, it does not explicitly name an alternative tool or state when not to use it.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_itemsARead-onlyIdempotent
Search Zotero library items by keyword. Use this when the user asks to find papers, look up references, or search their library. Supports title, author, and tag matching. Filter by item_type (e.g. 'journalArticle', 'book') or tag (exact tag name).
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| limit | No | ||
| query | Yes | ||
| offset | No | ||
| item_type | No | ||
| response_format | No | json |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already establish read-only, idempotent, non-destructive behavior. The description adds useful behavioral context beyond annotations by specifying that matching covers title, author, and tag, and that item_type and exact tags act as filters. There is no contradiction with 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is three short sentences with no filler. It front-loads the core action, follows with concrete usage triggers, and ends with filter semantics. Every sentence contributes.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a read-only search tool with an output schema and clear annotations, the description supplies enough behavioral and parameter context to invoke it correctly. The main gap is not distinguishing this metadata search from search_fulltext, which would improve routing in ambiguous requests.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema has 0% parameter description coverage, so the description carries the burden. It clarifies the meaning of the required query parameter, gives an item_type format example ('journalArticle', 'book'), and explicitly notes tag matching is exact. Pagination and response_format are left to self-explanatory names and the enum, so coverage is strong but not complete.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb and resource ('Search Zotero library items by keyword') and clarifies the matching modes (title, author, tag). It does not explicitly name sibling tools like search_fulltext, so differentiation from them relies on the 'title/author/tag' qualifier, which prevents a 5.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description explicitly states when to use it: 'when the user asks to find papers, look up references, or search their library.' It gives clear context but does not provide when-not-to-use guidance or mention alternatives such as search_fulltext, so it stops short of full exclusivity guidance.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
server_statusARead-onlyIdempotent
Check which Zotero MCP operating modes are available and get fix instructions for any that are misconfigured. Use this first when tools return 'unavailable' errors or when starting a new session to verify connectivity.
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already declare readOnly, idempotent, and non-destructive, and the description adds that output includes fix instructions for misconfigured modes. It also frames the tool as a connectivity check, which is useful behavioral context beyond the flags.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Two sentences, front-loaded with the core action and followed by actionable usage guidance. No filler or repetition of schema/annotation fields.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With a parameterless schema, an output schema present, and annotations covering safety, the description covers why, when, and what to expect. An agent can invoke it correctly with no further information.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
There are zero parameters, so the description has no semantic burden beyond the baseline. No parameter documentation is needed.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description uses a specific verb ('Check') against a concrete resource ('Zotero MCP operating modes') and states it also returns fix instructions for misconfigured modes. This sets it apart from the collection/item/search siblings by focusing on server-level diagnostics.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
Explicitly tells the agent to call this tool first when tools return 'unavailable' errors or when starting a new session to verify connectivity. It lacks an explicit 'when not to use' or named alternatives, but the trigger conditions are strong enough for routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
store_entitiesA
Store extracted biomedical entities for papers. Call this after extracting entities from abstracts (via get_unextracted_abstracts or any paper reading). Entity types: condition, biomarker, drug, method, gene, organism, outcome, dataset. Input: list of {doi, entities: [{name, type}]}.
| Name | Required | Description | Default |
|---|---|---|---|
| results | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description confirms a mutating write ('Store') and the annotations show readOnlyHint=false, so there is no contradiction. It also adds useful context about accepted entity types and the extraction workflow. However, it doesn't disclose storage semantics such as whether re-storing the same DOI merges, replaces, or duplicates entities; this gap is notable given the idempotentHint=false annotation.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Four short sentences, each with a distinct job: purpose, trigger, type vocabulary, and input shape. The most important information is front-loaded, and there is no filler or repetition.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
With one parameter, an existing output schema, and low overall complexity, the description is largely complete for selecting and invoking the tool. It provides the trigger, data shape, and allowed entity types; the main residual gap is the lack of merge/replace/duplicate semantics, but that is not required to make a correct first call.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides 0% description coverage and only says 'results' can be a string or an array of empty items. The description fills this gap by specifying the expected payload shape—'list of {doi, entities: [{name, type}]}'—and enumerating valid entity types. It is slightly under-specified because it doesn't mention the allowed string form or exact doi format, but it gives enough to construct a valid call.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description opens with a specific action and object: 'Store extracted biomedical entities for papers.' This clearly distinguishes it from siblings like search_entities (retrieval) and get_unextracted_abstracts (extraction), letting an agent tell what the tool is for without opening the schema.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly states when to call: 'Call this after extracting entities from abstracts (via get_unextracted_abstracts or any paper reading).' This gives a clear workflow condition and names a prior step. It doesn't list exclusions, but there is no obvious alternative tool for persisting entities, so the guidance is sufficient.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
trash_itemsADestructive
Move Zotero items to trash (reversible). Use this when the user wants to delete papers. Accepts one or more item keys. Items can be restored from trash in Zotero. Confirm with user before trashing.
| Name | Required | Description | Default |
|---|---|---|---|
| item_keys | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The annotations already mark this as destructive, but the description adds essential nuance: the action is reversible and items can be restored from Zotero trash. It also instructs the agent to confirm with the user, which is important behavioral guidance beyond what annotations express. No contradiction with annotations exists.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loads the primary purpose and reversibility, followed by usage context, parameter guidance, and confirmation guidance. Every sentence adds meaningful information without redundancy or filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a one-parameter tool with an output schema and useful annotations, the description covers purpose, when to use it, the key behavioral nuance of reversibility, parameter expectations, and user-confirmation expectations. Nothing critical is missing for an agent to invoke it correctly.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Schema description coverage is 0%, but the description compensates by explicitly stating that the tool 'accepts one or more item keys,' directly clarifying the sole parameter's semantics. It does not explain how to source item keys or provide format details, but given the parameter's simplicity this is sufficient.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific action ('Move Zotero items to trash') with a clear resource and a key qualifier ('reversible'). It also frames the tool's use case ('when the user wants to delete papers') and implicitly distinguishes it from permanent deletion via empty_trash.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use the tool: when the user wants to delete papers. It also adds a practical guardrail: confirm with the user before trashing. However, it does not name alternatives or say when not to use it, such as when permanent deletion is needed.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
update_itemADestructive
Update metadata fields on an existing Zotero item. Use this to correct titles, authors, dates, DOIs, or other bibliographic fields. Uses optimistic locking to prevent overwriting concurrent changes.
| Name | Required | Description | Default |
|---|---|---|---|
| fields | Yes | ||
| item_key | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
Annotations already flag this as destructive and non-read-only. The description adds valuable context beyond those hints by disclosing optimistic locking, 'to prevent overwriting concurrent changes,' which tells the agent how concurrent edits are handled. This is meaningful behavioral information not present in 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.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three short sentences with no filler. The main action and target resource are front-loaded, the use case follows, and the locking behavior closes the description. Every sentence earns its place.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simple two-parameter schema, the existing output schema, and annotations that already convey destructive/read-only behavior, the description covers the important operational detail (optimistic locking) and typical usage. It is slightly incomplete on item_key semantics, but overall sufficient for correct invocation.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
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. It gives semantic meaning to the 'fields' parameter by listing title, author, date, DOI, and other bibliographic fields, but it does not explain the 'item_key' parameter or why 'fields' may be a string. Some value added, but the gap remains.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
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: 'Update metadata fields on an existing Zotero item.' It lists concrete field examples (titles, authors, dates, DOIs) and the word 'existing' distinguishes this from creation tools like create_item or create_item_manual.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description gives a clear use case: 'Use this to correct titles, authors, dates, DOIs, or other bibliographic fields.' This tells an agent when to invoke it, though it does not explicitly exclude alternatives such as batch_organize or manage_tags.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
write_cited_documentA
Create a new Word document from markdown text with live Zotero citations. Use [@ITEM_KEY] markers in the content for citations. Use this when writing a new document from scratch (e.g. literature review, manuscript draft). For adding citations to an existing document, use insert_citations instead.
| Name | Required | Description | Default |
|---|---|---|---|
| content | Yes | ||
| output_path | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description adds useful behavioral context beyond the annotations, including the [@ITEM_KEY] citation syntax and the 'live Zotero citations' behavior. However, it does not disclose whether an existing file at output_path is overwritten, what happens if Zotero is unavailable, or any other side effects of writing the file.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact and front-loaded: the core purpose appears first, followed by the citation syntax and usage guidance. Every sentence earns its place with no filler.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
For a two-parameter tool with an output schema, the description covers the essential operational context: input format, citation mechanism, output artifact, and when to choose a sibling tool. Minor gaps such as output_path path expectations and overwrite behavior prevent a 5.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate for both parameters. It does clarify that content is markdown text containing [@ITEM_KEY] citation markers, but it leaves output_path unexplained beyond its name, without format or constraint details.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description names a specific verb and resource: creating a new Word document from markdown text with live Zotero citations. It also distinguishes itself from insert_citations, making the tool's purpose unmistakable.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
It explicitly says when to use this tool: when writing a new document from scratch such as a literature review or manuscript draft. It also names the alternative insert_citations for adding citations to an existing document.
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. Dates show when Glama detected each change.
39 tool updates
v0.10.1- First observed
add_to_collection - First observed
attach_pdf - First observed
audit_local_keys - First observed
batch_organize - First observed
build_index - First observed
check_published_versions - First observed
check_retractions - First observed
check_ssl_health - First observed
create_collection - First observed
create_item - First observed
create_item_manual - First observed
create_note - First observed
empty_trash - First observed
export_knowledge_graph - First observed
find_duplicates - First observed
find_related_papers - First observed
get_citation_graph - First observed
get_collection_items - First observed
get_collections - First observed
get_item - First observed
get_item_attachments - First observed
get_notes - First observed
get_pdf_content - First observed
get_unextracted_abstracts - First observed
insert_citations - First observed
inspect_trash - First observed
manage_tags - First observed
migrate_attachments - First observed
plan_attachment_migration - First observed
query_authors - First observed
query_knowledge_graph - First observed
search_entities - First observed
search_fulltext - First observed
search_items - First observed
server_status - First observed
store_entities - First observed
trash_items - First observed
update_item - First observed
write_cited_document
TDQS
Most tools target a distinct resource+action pair, and potentially confusing clusters are well-differentiated in descriptions (search_items is metadata search, search_fulltext is PDF text, search_entities is the entity graph). A few adjacent pairs — check_retractions vs check_published_versions and get_citation_graph vs find_related_papers vs query_knowledge_graph — occupy overlapping territory and could cause misselection without careful reading.
Nearly all 39 tools follow a consistent verb_noun pattern (get_item, create_collection, trash_items, query_knowledge_graph, export_knowledge_graph), with modifiers like manual and cited_document kept predictable. Two deviations stand out: batch_organize inverts to adverb_verb, and add_to_collection uses a prepositional form rather than a verb_noun structure like add_item_to_collection.
At 39 tools, this is a heavy surface that exceeds the 25+ threshold for comfortable agent navigation. The count is inflated by several niche sub-domains tacked onto core library management — SSL diagnostics, SQLite key auditing, attachment migration planning, and a full biomedical entity extraction pipeline — making the toolset feel bloated even though each individual tool has a defined purpose.
The core item lifecycle is well covered (create, search, get, update, trash, inspect trash, empty trash), and advanced features like citation graphs, full-text search, and retraction checks are solid. Notable gaps remain: notes can be read and created but not updated or deleted, collections cannot be deleted or have items removed from them, duplicates can be found but not merged, and there is no tool to restore trashed items.
Maintenance
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
Remote MCP server for full read/write access to a Zotero library
- ZapierOAuthcom.zapier
Hosted MCP server connecting AI assistants to 9,000+ apps and 40,000+ actions via Zapier.
MCP server that lets AI assistants use all OneSchema features exposed via the public API.
Read-only MCP server exposing a user ORANO library to their own AI agent.
1
Related MCP Servers
- AlicenseBqualityAmaintenanceAn MCP server that lets AI assistants add papers and books to your Zotero library by DOI, arXiv ID, or ISBN, and manage your collections, tags, and items.492MIT
- AlicenseAqualityDmaintenanceAn 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.91MIT
- AlicenseNot gradedqualityDmaintenanceMCP server that connects AI assistants to your Zotero library, enabling full-text PDF extraction and metadata search.MIT
- AlicenseAqualityAmaintenanceAn MCP server that gives AI assistants complete, safe access to your Zotero library for searching, citing, adding papers, and formatting bibliographies, with local-first privacy.302,50229MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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/alisoroushmd/zotero-mcp'
If you have feedback or need assistance with the MCP directory API, please join our Discord server