zotero-comfort
Provides tools for searching papers, managing collections, retrieving metadata and fulltext, performing semantic search, building reading lists, smart adding papers with duplicate check, exporting bibliographies, and finding related papers in Zotero.
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-comfortbuild a reading list on machine learning in healthcare"
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 Comfort
High-level Zotero MCP integration with smart research workflows.
Overview
Zotero Comfort provides two layers of functionality:
A) Proxy Layer - Direct re-exposure of 54yyyu/zotero-mcp tools with a clean Python API.
B) Smart Workflows - High-level orchestrations for common research tasks.
Related MCP server: cite-rag-mcp
Installation
pip install zotero-comfortOr with Docker:
docker build -t zotero-comfort .
docker run -e ZOTERO_API_KEY=xxx -e ZOTERO_LIBRARY_ID=123 zotero-comfortConfiguration
Set environment variables:
export ZOTERO_API_KEY="your-api-key"
export ZOTERO_LIBRARY_ID="your-library-id"
export ZOTERO_LIBRARY_TYPE="group" # or "user"Usage
As Python Library
from zotero_comfort import ZoteroProxy, ZoteroWorkflows
# Proxy layer - direct tool access
proxy = ZoteroProxy()
papers = proxy.search_papers("FHIR interoperability", limit=20)
metadata = proxy.get_metadata("ABC12345")
# Smart workflows - high-level operations
workflows = ZoteroWorkflows()
reading_list = workflows.build_reading_list("clinical NLP", max_papers=15)
result = workflows.smart_add_paper("10.1234/example.2024")
bibtex = workflows.export_bibliography(collection_name="FHIR")As MCP Server
Add to your Claude configuration:
{
"mcpServers": {
"zotero-comfort": {
"command": "zotero-comfort",
"env": {
"ZOTERO_API_KEY": "your-key",
"ZOTERO_LIBRARY_ID": "your-library-id"
}
}
}
}Available Tools
Proxy Layer (A)
Tool | Description |
| Search papers by keyword |
| Get paper details |
| List all collections |
| Get items in collection |
| Get paper full text |
| AI-powered semantic search |
Smart Workflows (B)
Tool | Description |
| Create curated topic reading list |
| Add paper with duplicate check |
| Export as BibTeX |
| Find semantically similar papers |
Development
# Install dev dependencies
pip install -e ".[dev]"
# Run tests
pytest
# Lint
ruff check src/License
MIT
Available Tools
17 toolsbuild_reading_listC
Build a curated reading list for a research topic
| Name | Required | Description | Default |
|---|---|---|---|
| topic | Yes | Research topic (e.g., 'FHIR interoperability') | |
| min_year | No | Only include papers from this year or later | |
| max_papers | No | Maximum papers to include (default: 20) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It says only 'Build a curated reading list' and leaves unclear whether the tool searches external sources, modifies a Zotero library, creates a saved collection, or simply returns a temporary list. This is a significant transparency gap.
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 a single, front-loaded sentence with no filler or repetition. It is appropriately short, though the brevity contributes to the overall under-specification rather than being a structural problem.
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 absence of annotations and output schema, the description is too thin to be complete. It does not explain the data source, whether the reading list is saved anywhere, what the return value looks like, or how it relates to the many similar search-and-collection sibling tools.
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 100%, so the parameters are already well-documented by the input schema. The description itself does not add nuance about min_year or max_papers beyond what the schema provides, which matches the baseline for full schema coverage.
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 clear verb ('build') and resource ('curated reading list') scoped to a research topic, so an agent can identify the basic function. It does not explicitly differentiate from sibling tools like smart_add_paper or search_multi_source_to_collection, but the verb and object are specific enough to avoid being a tautology.
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 provides no guidance on when to use this tool versus any of its many siblings, such as search_pubmed_to_collection, search_arxiv_to_collection, or smart_add_paper. There are no prerequisites, exclusions, or alternative conditions mentioned.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
export_bibliographyC
Export papers as BibTeX bibliography
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | Export papers with this tag | |
| collection_name | No | Export from this collection |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden of behavioral disclosure. It doesn't state whether the export is read-only, what the response looks like, whether it downloads a file, or what happens when neither parameter is supplied. For an export tool this is a notable gap.
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?
A single sentence with zero filler and the action front-loaded. It is terse but not tautological; it conveys the verb, object, and output format efficiently.
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 (2 optional params, no nested objects, no output schema), but the description doesn't explain the interaction between tag and collection_name or the behavior with no parameters provided. Adequate for basic selection, with clear gaps for invocation correctness.
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 100% — both tag and collection_name have inline descriptions in the schema. The tool description adds no parameter meaning beyond that, so the schema does the heavy lifting; baseline 3 is appropriate.
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 ('Export papers') and names the output format (BibTeX bibliography), which makes the tool's function clear. However, it doesn't explicitly differentiate from sibling tools like build_reading_list or search_personal_library beyond the format mention, so it stops short of full sibling differentiation.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance is given on when to use this tool versus alternatives such as zotero_search, zotero_get_metadata, or build_reading_list. The description implies use for bibliography export but provides no exclusions, prerequisites, or context for selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_library_statusA
Get status of configured libraries (group and personal)
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full behavioral disclosure burden. The verb 'Get' implies a read-only status check and does not suggest mutation, but the description does not explicitly state side-effect-free behavior or clarify what 'status' includes, which is a moderate gap.
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 a single, front-loaded sentence with no filler or redundant wording. Every word earns its place, making it easy for an agent to parse quickly.
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 no-parameter, read-only status tool, the description is mostly complete: it names the resource and scope. However, it does not describe what status information is returned or any prerequisites, which would help but is not critical given the low complexity.
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 parameter semantics are trivially satisfied. The description does not need to explain parameter meaning, 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 action ('Get') and the resource ('status of configured libraries'), and the parenthetical '(group and personal)' adds useful scope. It is clear about what the tool does, though it does not explicitly differentiate itself from sibling tools by naming alternatives.
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?
There is no guidance on when to use this tool versus siblings like set_default_library, search_group_library, or zotero_list_collections. The description only states what the tool does, leaving the agent to infer when it is appropriate.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_arxiv_to_collectionB
Search arXiv and add results to a Zotero collection
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | arXiv search query (e.g., 'machine learning healthcare') | |
| max_results | No | Maximum papers to add (default: 50) | |
| collection_name | Yes | Target Zotero collection name | |
| create_collection | No | Create collection if it doesn't exist (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations available, the description carries the full burden of disclosing behavior, but it only states the basic action. It does not mention side effects like creating a collection if it doesn't exist, any duplicate handling, behavior with max_results, or what happens on partial failure — important for a tool that writes to an external system.
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 a single, front-loaded sentence with no filler or redundancy. It is concise and easy to parse, though it omits behavioral details that would make it more useful.
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 four parameters, no output schema, and no annotations, yet the description only provides a high-level summary. It does not explain return behavior, side effects, default collection creation, or interaction with the Zotero library, so an agent would need to rely on the schema and guess about runtime behavior.
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 100%, so the input schema already documents query, max_results, collection_name, and create_collection with helpful descriptions and defaults. The description adds no extra parameter meaning, but it does not need to since the schema 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 ('Search arXiv') and a clear destination effect ('add results to a Zotero collection'), making the tool's purpose immediately identifiable. It also distinguishes itself from siblings like search_pubmed_to_collection by explicitly naming arXiv as the source.
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 implies the tool should be used when the agent needs to find arXiv papers and place them into a Zotero collection. However, it provides no explicit guidance about when not to use it or which sibling alternative to prefer, such as search_pubmed_to_collection or zotero_search.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_group_libraryA
Search for papers in the group (shared team) library
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results (default: 50) | |
| query | Yes | Search query |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
There are no annotations, so the description must carry the behavioral bur. 'Search for papers' signals a read-only lookup, but it does not clarify what fields are searched, whether full text is included, or what the response shape is. Some transparency, but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
A single, front-loaded sentence with no filler. Every word contributes to the purpose and scope. It is appropriately sized for a simple search operation.
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 tool with two well-documented parameters and no output schema, the description gives the essential scope and action. It could improve by naming the alternative for personal-library search or noting what the result contains, but it is not critically incomplete.
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?
Both parameters (query and limit) are fully documented in the schema, including the default for limit. The description adds no parameter-level detail, but the schema already provides complete coverage, so the baseline of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description states a specific verb ('Search') and identifies the exact resource scope ('group (shared team) library'). This makes the purpose unmistakable and distinguishes it from sibling like search_personal_library by naming the group context.
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 establishes the use case: search within the shared team library, not the personal library. It doesn't explicitly name alternatives or when-not conditions, but the scope is concrete enough for an agent to select it appropriately.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_multi_source_to_collectionC
Search multiple sources (PubMed, arXiv) and combine results in a Zotero collection
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | Search query (applied to all sources) | |
| sources | No | Sources to search (default: ['pubmed', 'arxiv']) | |
| collection_name | Yes | Target Zotero collection name | |
| create_collection | No | Create collection if it doesn't exist (default: true) | |
| max_results_per_source | No | Maximum results from each source (default: 25) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears the full burden of behavioral disclosure, yet it only states the basic action. It does not reveal that the tool writes to the user's Zotero library, that it can add up to max_results_per_source items per source, or how duplicate results across sources are handled. The meaning of 'combine' and any side effects are left unstated.
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 a single well-ordered sentence with no filler: the verb 'Search' is front-loaded, and each phrase carries meaning (sources, outcome, destination). It is as compact as a correct description can be.
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 five parameters, no annotations, and no output schema, the description must carry substantial load but does not. It omits when to prefer this over single-source siblings, the write/side-effect profile on Zotero, and how combined results behave. An agent needs more than this one sentence to invoke the tool safely and 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 100%, so the schema already documents all five parameters and the baseline is 3. The description only echoes what the schema states ('multiple sources' maps to sources, 'Zotero collection' maps to collection_name) without adding deeper detail about formats, constraints, or parameter interactions.
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 ('Search'), names both concrete sources ('PubMed, arXiv'), and specifies the resulting action ('combine results in a Zotero collection'). It is clear and actionable, and the 'multiple sources' phrasing implicitly distinguishes it from single-source siblings like search_pubmed_to_collection, but that differentiation is not made explicit.
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 offers no guidance on when to use this tool versus the closely related single-source siblings search_pubmed_to_collection, search_arxiv_to_collection, or the general zotero_search. An agent must infer the selection criteria entirely from sibling names and the schema, with no stated conditions or exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_personal_libraryB
Search for papers in your personal library
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results (default: 50) | |
| query | Yes | Search query |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the burden of behavioral disclosure, but it only says 'search'. It does not state whether the search covers metadata, full text, or both; what ranking/pagination behavior to expect; or any auth/scope constraints.
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?
A single, front-loaded sentence with no filler. The wording is compact and direct, though it is also quite minimal in the information it conveys.
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-parameter search with a documented schema, this is minimally viable. However, with no output schema and no description of return format or search behavior, an agent is left guessing about what the tool actually returns and how matches are determined.
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 100%, so the schema already documents query and limit. The description adds minor context by clarifying that the query is scoped to the personal library, but adds little beyond the schema.
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 the tool searches papers in the user's personal library, making the verb and resource clear. It is somewhat distinguishable from search_group_library by the word 'personal', but it does not explicitly differentiate from zotero_search or zotero_semantic_search.
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 'in your personal library' implies this is for querying a user's own collection rather than external sources or group libraries. However, it gives no explicit guidance on when to prefer this over the many sibling search tools, nor any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_pubmed_to_collectionB
Search PubMed and add results to a Zotero collection
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | PubMed search query (e.g., 'PROMIS quality of life') | |
| max_results | No | Maximum papers to add (default: 50) | |
| collection_name | Yes | Target Zotero collection name | |
| create_collection | No | Create collection if it doesn't exist (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description states the key side effect ('add results'), which signals a write to Zotero, and no annotations are present. It does not disclose details like collection creation, duplicate handling, or rate limits, but the schema covers creation behavior via create_collection.
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 a single, efficient sentence with no filler and front-loads the main action. It is concise but slightly underspecified for usage 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?
For a moderate-complexity tool with no output schema and no annotations, the description plus full parameter schema is mostly sufficient to call it. It lacks sibling differentiation and behavioral caveats, but the core operation is adequately conveyed.
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?
Input schema covers 100% of parameters with descriptions, so the description needs to add little. The description aligns with query and collection_name, but adds no semantics beyond the schema.
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 ('search') and resource ('PubMed') and specifies the destination ('a Zotero collection'), making the operation clear. It does not explicitly distinguish from sibling tools like search_arxiv_to_collection or search_multi_source_to_collection, so it stops short of full differentiation.
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 implied use case is evident: when a user wants PubMed results added to a Zotero collection. However, the description provides no explicit when-to-use guidance, no exclusions, and no mention of alternative sibling tools for Arxiv or multi-source searches.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
set_default_libraryB
Set the default library for operations
| Name | Required | Description | Default |
|---|---|---|---|
| library | Yes | Library to use as default |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description bears the full burden of disclosing side effects. 'Set' clearly signals mutation, but the description does not say whether the default persists across sessions, affects all later operations, requires authorization, or has a confirmation/return value. This is a meaningful gap for a state-changing 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?
The description is a single front-loaded sentence with no filler or redundancy. It communicates the essential action immediately and 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 one-parameter setter with a fully documented enum, this description is minimally viable: an agent knows what to call and with what value. However, with no annotations or output schema, the lack of persistence/side-effect information and any guidance on how the returned state is reported leaves the context incomplete for confident 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?
The input schema fully documents the single parameter, including the enum values 'group' and 'personal' and a description for 'library'. The tool description adds no parameter detail, but with 100% schema coverage the baseline of 3 is appropriate; nothing extra 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 names a specific action ('Set') and resource ('default library'), making the tool's purpose clear. It is distinct from the search/list sibling tools, though it does not explicitly contrast itself with them. It is slightly generic in not defining which 'operations' are affected, but the core function is 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 implies this tool is used when the user wants to establish a persistent default, contrasting implicitly with siblings like search_personal_library or search_group_library. However, it gives no explicit when-to-use instructions, prerequisites, or alternatives, leaving the agent to infer placement.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
smart_add_paperA
Add paper from DOI with duplicate checking and optional collection/tag assignment. Without collection_name, this is a dedup/metadata probe; with collection_name, the paper is fetched from Crossref and written to Zotero, or (if already in library) attached to the target collection without creating a duplicate record.
| Name | Required | Description | Default |
|---|---|---|---|
| doi | Yes | Paper DOI (e.g., '10.1234/example') | |
| tags | No | Tags to apply to the new item | |
| collection_name | No | Target collection. Created if missing. Required for the tool to actually write. | |
| check_duplicates | No | Check if paper already exists (default: true) |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the burden of behavioral disclosure. It explicitly explains the non-destructive probe mode, the write mode, and the duplicate-handling behavior of attaching to an existing collection instead of creating a duplicate. It does not detail return values or error cases, but the critical behaviors are transparent.
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 primary purpose. The second sentence earns its place by explaining the crucial behavioral distinction between the two modes. There is no filler or redundant repetition of schema details.
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 core decision an agent needs: when the tool will write, when it will not, and how duplicates are handled. Since there is no output schema, a bit more return-value detail for the probe mode would improve completeness, but the key usage context is 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 coverage is 100%, so the schema already documents all parameters. The description adds meaningful conditional semantics for collection_name (probe vs. actual write) and clarifies that tags are applied to newly created items, going beyond simple parameter names.
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 a specific action ('Add paper from DOI') on a specific resource and describes its main behaviors: duplicate checking and optional collection/tag assignment. The conditional dual-mode behavior further distinguishes it from sibling search-and-add tools, so an agent can tell this is the DOI-based add tool.
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 context for when the tool writes versus when it acts as a probe: without collection_name it is a dedup/metadata probe, and with collection_name it fetches from Crossref and writes to Zotero. It does not explicitly name sibling alternatives or state exclusions, but the conditional guidance is strong enough for correct selection.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zotero_get_collection_itemsB
Get all items in a specific collection
| Name | Required | Description | Default |
|---|---|---|---|
| collection_key | Yes | Collection key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full burden. It implies a read-only 'get' operation but does not disclose pagination, whether subcollections are included, what fields are returned, or how empty results are handled.
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 a single sentence with no filler and front-loads the core operation. It earns its place without redundancy, though it could add useful detail without losing conciseness.
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 one-parameter read tool, the description captures the essential operation. However, it omits how collection_key is obtained, what the response looks like, and any limitations such as pagination or item-type handling. With no output schema and no annotations, the agent is left with some uncertainty.
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 100% because collection_key has a description ('Collection key'), so baseline 3 applies. The description itself adds no parameter meaning beyond the schema, and the schema's parameter documentation is terse.
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 clear action ('Get') and resource ('all items in a specific collection'), making the tool's purpose obvious. It is specific enough to distinguish from sibling tools like zotero_list_collections, though it does not explicitly name alternatives.
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?
No guidance is provided on when to use this tool versus zotero_search or zotero_list_collections. There is no mention of prerequisites such as obtaining a collection_key from zotero_list_collections, nor any exclusions or alternative routing.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zotero_get_fulltextC
Get full text content of a paper
| Name | Required | Description | Default |
|---|---|---|---|
| item_key | Yes | Zotero item key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the full behavioral disclosure burden. It only states the outcome and does not mention what happens when no full text is available, whether it extracts from PDFs, or what format the returned content takes.
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 one concise sentence with no filler. The primary action and object are front-loaded, and the brevity is appropriate for a single-parameter tool.
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 no annotations, no output schema, and a single parameter, the description should explain what the returned full text looks like and how missing content is handled. It does neither, leaving an incomplete picture for the agent.
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 100%, and the single parameter already has a basic description ('Zotero item key'). The tool description adds no further meaning beyond the schema, so the baseline score of 3 is appropriate.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description identifies a specific action (Get) and resource (full text content of a paper), making the purpose clear and broadly distinguishable from sibling tools like zotero_get_metadata. It does not explicitly differentiate itself from siblings, but the core object is specific enough.
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?
There is no guidance on when to use this tool versus alternatives such as zotero_get_metadata or zotero_search. The description provides no usage context, prerequisites, or exclusions, leaving the agent to infer when it should be selected.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zotero_get_metadataB
Get detailed metadata for a specific paper
| Name | Required | Description | Default |
|---|---|---|---|
| item_key | Yes | Zotero item key |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only restates the basic effect ('Get detailed metadata') and adds no details about what metadata is included, whether the item must exist, error behavior, or access requirements. The word 'Get' hints at a read-only operation, but little else 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 a single short sentence with no filler or redundancy. It is front-loaded with the action and object, making it easy to parse quickly. Given the tool's simplicity, this level of conciseness is appropriate.
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?
This is a simple one-parameter read tool, and the description names the core purpose. However, there is no output schema, so the description should clarify what 'detailed metadata' means or what fields the agent can expect, and it does not. The gaps are minor but present for a tool with no annotations or 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?
The input schema fully documents the only parameter (item_key as 'Zotero item key'), so schema coverage is 100% and the baseline of 3 applies. The description adds no additional parameter meaning, but that is acceptable because the schema already provides sufficient semantic information.
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 ('Get') and resource ('detailed metadata for a specific paper'), making the tool's function immediately clear. It also distinguishes it from sibling tools like zotero_search, zotero_get_fulltext, and zotero_list_collections by focusing on metadata retrieval for one known 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?
No explicit guidance is given about when to use this tool versus alternatives, nor are any exclusions or sibling comparisons mentioned. The phrasing 'for a specific paper' implies use when an item key is known, but an agent is not told when to prefer this over zotero_search or zotero_get_fulltext.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zotero_list_collectionsA
List all collections in the Zotero library
| Name | Required | Description | Default |
|---|---|---|---|
No parameters | |||
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries the behavioral burden, but it only says 'List all collections', which conveys a read-only listing and an 'all' scope. It does not disclose whether nested collections are included, how results are returned, or that it operates on the current/default library.
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 a single sentence with no repetition, filler, or redundant detail. The key action and resource are 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 zero-parameter, low-complexity tool, the description is mostly complete for selecting and invoking the call. It leaves minor gaps around library scope and return shape, but no parameters or output schema are present to contradict or complicate the basic behavior.
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 input schema has zero parameters, so there is no parameter semantics for the description to add; the rule for zero-parameter tools sets a baseline of 4. No additional parameter guidance is needed here.
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 concrete verb ('List') with a clear resource ('all collections in the Zotero library'), making the operation unambiguous. It also distinguishes itself from sibling tools that operate on items, metadata, or search rather than listing collections.
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?
No guidance is provided about when to use this tool versus alternatives such as zotero_get_collection_items or zotero_search. The description only states what it does, leaving the agent to infer selection context from the name.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zotero_searchB
Search for papers in Zotero library by keyword
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results (default: 50) | |
| query | Yes | Search query (e.g., 'FHIR terminology') |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries the full behavioral disclosure burden. It indicates a read-style search operation but does not clarify whether the search covers metadata only, whether full text is included, what item types are searched, or whether any authentication or local Zotero instance is required. This is a meaningful gap given sibling tools like zotero_get_fulltext.
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 a single, well-structured sentence that immediately conveys the tool's core purpose. No extraneous words or redundant schema details are present.
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-parameter search tool, the description is mostly sufficient, but it omits important scoping details such as whether it searches the default library only versus group libraries, and how it differs from search_personal_library or search_group_library. The absence of an output schema and annotations raises the need for a bit more context than provided.
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 input schema already documents both parameters (query and limit) with 100% coverage, so the description does not need to add much. It reinforces that query is a keyword, but it does not add details about limit behavior or query formatting beyond what the schema provides. Baseline 3 is appropriate.
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 ('Search'), the resource ('Zotero library'), and the method ('by keyword'). It is distinct from semantic search in intent, but it does not explicitly name or differentiate from sibling tools like zotero_semantic_search or search_personal_library.
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 'by keyword' implies this is the right tool for keyword-based lookups rather than semantic search, but the description gives no explicit when-to-use, when-not-to-use, or alternative recommendations. The guidance is implied rather than stated.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zotero_semantic_searchC
AI-powered semantic search for similar papers
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | Maximum results (default: 10) | |
| query | Yes | Natural language search query |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries the full burden of behavioral disclosure. It only says the search is 'AI-powered' and 'semantic' but does not explain how results are ranked, whether it searches the user's Zotero library, or what the response contains.
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 short and front-loaded, but 'AI-powered' is filler that does not add actionable information. It is concise yet under-specified, and it lacks structured details that would help an agent use the tool confidently.
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 with only two parameters and a fully documented schema, so the description does not need extensive detail. However, without an output schema or annotations, the description should at least clarify the search source and result behavior; it does not.
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 100%, with both 'query' and 'limit' already documented in the input schema. The description adds only the notion of semantic similarity, which is marginal beyond what the schema already conveys.
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 ('search') and a resource ('papers'), and adds the qualifier 'semantic' to distinguish it from a plain keyword search like zotero_search. It is not a tautology and communicates the core function, though 'similar papers' is slightly ambiguous about the input source.
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?
There is no guidance on when to prefer this tool over zotero_search, find_related_papers, or search_personal_library. No exclusions or alternative selection criteria are provided, so an agent must infer use cases from the name alone.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
Multiple search tools overlap: zotero_search, search_personal_library, search_group_library, zotero_semantic_search, and find_related_papers have unclear boundaries. Also zotero_semantic_search and find_related_papers both appear to provide similar-paper semantic search.
Most names are snake_case and verb_noun, but prefix usage is inconsistent: zotero_* is mixed with bare search_* and action-style names like build_reading_list, smart_add_paper, and export_bibliography. Some near-duplicate functions have very different naming (zotero_semantic_search vs find_related_papers).
17 tools is slightly above the typical well-scoped range, but the domain (search, collection management, external import, bibliography export, library configuration) justifies most of the surface. The extra weight comes from some redundant search variants rather than truly unnecessary tools.
The server covers searching, metadata, fulltext, collection listing, external imports, and export, but lacks essential library management operations such as updating or deleting items, creating/deleting collections, and tag management. Common Zotero workflows still have noticeble gaps.
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
Federated search of books and papers, BibTeX/RIS citations, open-access retrieval and reading.
Academic literature search, retrieval, and private library management on top of OpenAlex.
MCP server for Altmetric APIs - track research attention across news, policy, social media, and more
Related MCP Servers
- AlicenseNot gradedqualityAmaintenanceMCP server that exposes 45 tools for Zotero reference management, enabling AI agents to read/write items, search, extract PDF text, and manage workspaces via the Zotero CLI.202AGPL 3.0
- FlicenseNot gradedqualityBmaintenanceA local MCP server for evidence-safe academic citation workflows, including verified-reference retrieval, Zotero duplicate detection and import, and Word export via Pandoc with zotero.lua.1
- AlicenseNot gradedqualityAmaintenanceAn MCP server that embeds into Zotero, enabling AI agents to search, manage, enrich metadata, import papers, and automate research workflows through 42 tools including PDF retrieval and annotation synthesis.7MIT
- AlicenseAqualityAmaintenanceProvides full read/write access to Zotero libraries through 36 MCP tools, including search, add, tag, update, delete, and move operations for items, collections, attachments, notes, and saved searches. Enables AI assistants to manage a Zotero library remotely, with support for both local stdio and multi-tenant HTTP OAuth deployments.39MIT
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/BIH-CEI/zotero-comfort'
If you have feedback or need assistance with the MCP directory API, please join our Discord server