Zotero MCP Server
Provides programmatic access to a Zotero library, allowing users to search papers, manage notes, and access repository content through the MCP server
Click on "Deploy 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 MCP Serverfind papers about machine learning ethics from the last 2 years"
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 Server
A MCP (Model Context Protocol) server to let your MCP clients (e.g. Anthropic Claude App, Goose, possibly vscode Cline too) interact with your local Zotero repository. This server enables programmatic access to your Zotero library, allowing you to search papers, manage notes, and more.
Note: If you don't want to set up API keys, see the SQLite database server option below.
Setup
Install dependencies:
pip install -e .Create a
.envfile in the root directory with your Zotero credentials:
ZOTERO_API_KEY=your_api_key_here
ZOTERO_USER_ID=your_user_id_hereYou can get your Zotero API key and user ID from Zotero's settings page.
Related MCP server: zotero-mcp
Integration with Anthropic Desktop App
To integrate with the Anthropic Desktop app, add the following configuration to ~/Library/Application Support/Claude/claude_desktop_config.json:
{
"mcpServers": {
"zotero-mcp-server": {
"command": "uv",
"args": [
"--directory",
"/Users/swairshah/work/research/zotero-mcp",
"run",
"python",
"-m",
"zotero_mcp.server"
]
}
}
}If this gives an error like
{"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"claude-ai","version":"0.1.0"}},"jsonrpc":"2.0","id":0}
error: unexpected argument '--directory' foundThen use the following config, make sure to do uv venv; source .venv/bin/activate; uv pip install ".[dev]" to make sure the server can be run with all dependencies.
{
"mcpServers": {
"zotero-mcp-server": {
"command": "bash",
"args": [
"-c",
"cd /Users/shahswai/personal/zotero-mcp-server && source .venv/bin/activate && python -m zotero_mcp.server"
]
}
}
}Alternative: Direct SQLite Database Access
If you prefer to bypass the Zotero API entirely and work directly with the SQLite database, use zotero_mcp/db_server.py. This approach gives you full control over your Zotero data without API limitations. Note that you'll need to close Zotero completely before using this method since SQLite locks the database when Zotero is running.
Claude MCP config for the SQLite version:
{
"mcpServers": {
"zotero-mcp-server": {
"command": "uv",
"args": [
"--directory",
"/Users/swair/work/code/zotero-mcp-server",
"run",
"python",
"-m",
"zotero_mcp.db_server"
]
}
}
}Example Usage

The server allows you to:
Search papers by tags
Get paper details and attached notes
Add notes to papers
Request paper summaries
Available Tools
10 toolsget_childrenA
Get child items (attachments, notes) of a Zotero item.
Args: key: The Zotero item key.
Returns: JSON array of child items.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so the description carries full burden. It states returns a JSON array of child items but does not disclose read-only nature, required authentication, error handling (e.g., invalid key), or rate limits. The description is minimal beyond basic function.
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?
Description is concise with two sentences plus Args/Returns sections. It front-loads the purpose and avoids fluff. The structure is clear and easy to scan. Minor improvement could be merging the first line with Args for even tighter format.
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?
Tool has one parameter and an output schema, and the description adequately covers input and output. For a simple get-child-items tool, this is sufficient. It does not mention error scenarios or prerequisites, but given the low complexity, it is reasonably 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?
The single parameter 'key' is described as 'The Zotero item key,' which adds basic meaning beyond the schema's type-only definition. However, it lacks specifics such as format, source, or any constraints. With 0% schema coverage, the description partially compensates but could be more helpful.
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?
Description clearly states the verb (get) and resource (child items) with parenthetical examples (attachments, notes) and specifies the scope (of a Zotero item). This distinguishes it from sibling tools like get_item or find_related which serve different purposes.
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 when to use (to retrieve child items of a Zotero item) but does not provide explicit guidance on alternatives or when not to use. For example, it does not contrast with get_item or list_collections. This is acceptable for a simple retrieval tool but lacks explicit differentiation.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_citationsA
Find papers that cite a given paper using Semantic Scholar.
Args: doi: DOI of the paper. limit: Maximum results (default 100, max 1000). min_citations: Minimum citation count filter. check_library: If true, annotate results with local Zotero presence.
Returns: JSON with count and papers list.
| Name | Required | Description | Default |
|---|---|---|---|
| doi | Yes | ||
| limit | No | ||
| check_library | No | ||
| min_citations | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations provided, so description carries full burden. Discloses use of Semantic Scholar and return format (JSON with count and papers). But lacks details on rate limits, data freshness, pagination, or error 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?
Description is clear and well-structured with a brief summary followed by parameter list. No unnecessary text. Could be slightly more concise by integrating parameter descriptions, but still efficient.
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 and 0% schema coverage, description covers parameters and return type adequately. But missing behavioral context (rate limits, error handling) and fails to discuss usage alongside sibling tools. Not fully complete for a complex tool.
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 description compensates fully. Lists all parameters (doi, limit, min_citations, check_library) with clear explanation of each, including defaults and max for limit. Adds value beyond raw 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?
Description states 'Find papers that cite a given paper using Semantic Scholar.' The verb 'find' and resource 'citing papers' are specific. Differentiates from siblings like get_references (citations vs references) and search_semantic_scholar (general 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?
Usage is implied: use when you need citations of a paper. No explicit when-not or alternatives mentioned. Lacks guidance on when to use this versus find_related, get_references, or search_semantic_scholar.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_fulltextA
Get full-text content of a Zotero attachment.
Args: key: The key of an attachment item (not a top-level item).
Returns: JSON with content, indexedPages, and totalPages.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
The description implies read-only behavior ('Get') and details the return fields (content, indexedPages, totalPages). With no annotations, this provides adequate behavioral context for a simple retrieval 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 extremely concise with three short lines: purpose, args, returns. Every sentence is necessary and front-loaded with the main action.
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 simplicity (one parameter, no nested objects, output schema exists), the description fully covers what the tool does, what input is needed, and what output to expect.
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 only parameter 'key' has no schema description (0% coverage), but the description compensates fully by stating it must be an attachment key, not a top-level item, adding crucial semantic meaning.
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: 'Get full-text content of a Zotero attachment.' It uses a strong verb and resource, distinguishing it from siblings like 'get_item' (metadata) and 'search' (query-based).
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 the key must be an attachment item, not a top-level item, providing clear when-to-use guidance. It does not name specific alternatives but implies correct usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_itemB
Get a single Zotero item by its key.
Args: key: The Zotero item key.
Returns: JSON with the full item data.
| Name | Required | Description | Default |
|---|---|---|---|
| key | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It states the return format (JSON with full item data) but does not discuss error handling, authentication requirements, or behavior when the key is not found. For a simple retrieval, this is adequate but has gaps.
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, front-loaded, and well-structured with Args and Returns sections. Every sentence serves a clear purpose.
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, a single required parameter, and an output schema, the description covers core functionality. However, it lacks usage context relative to siblings and does not address edge cases, making it incomplete for a fully informed selection.
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 only 'The Zotero item key' for the 'key' parameter, which adds minimal meaning beyond the schema's property name. No format, examples, or constraints are provided.
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 'Get a single Zotero item by its key', specifying the verb and resource. It distinguishes from sibling tools like 'find_related', 'get_children', and 'search', which have different purposes.
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 its siblings. There is no mention of prerequisites, limitations, or alternative tools for similar tasks.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
get_referencesA
Find papers referenced by a given paper using Semantic Scholar.
Args: doi: DOI of the paper. limit: Maximum results (default 100, max 1000). min_citations: Minimum citation count filter. check_library: If true, annotate results with local Zotero presence.
Returns: JSON with count and papers list.
| Name | Required | Description | Default |
|---|---|---|---|
| doi | Yes | ||
| limit | No | ||
| check_library | No | ||
| min_citations | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
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 mentions default values, max limit, and return format (JSON with count and papers), but does not disclose error handling, rate limits, or side effects. This is adequate but not thorough.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is highly concise with a clear structure: one-line purpose, then a bulleted args list, then return statement. Every sentence is informative with no 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 the 4 parameters (1 required), the presence of an output schema (mentioned), and no nested objects, the description covers purpose, parameter details, and return format sufficiently for an agent to use the tool correctly. Minor omissions like error handling or external dependencies do not significantly hinder understanding.
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 adds meaningful context for each parameter: DOI format implied, limit with max, min_citations as filter, check_library with behavior explanation. This compensates well for the missing schema 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?
The description clearly states the action ('Find papers referenced') and the resource ('by a given paper using Semantic Scholar'). It distinctly differentiates from siblings like get_citations (citations) and find_related (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?
The description provides no explicit guidance on when to use this tool versus alternatives such as get_citations or find_related. It does not mention exclusions or preferred use cases.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_collectionsA
List all collections in the local Zotero library.
Args: limit: Maximum number of collections to return (0 for all).
Returns: JSON array of collections with id, name, items count, and parent info.
| 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?
No annotations provided, so description carries burden. It discloses return format (JSON array with fields) and limit behavior, but does not mention performance, auth, or side effects. Adequate but not rich.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
Three clear sentences, front-loaded with purpose. Zero filler. Efficient and to the point.
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?
Simple tool with one param and output schema exists. Description covers core behavior. Sibling tools are distinct. Complete for this complexity level.
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?
Single parameter 'limit' has default 0 in schema but no description. Description adds 'Maximum number of collections to return (0 for all)', providing necessary meaning beyond schema type.
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?
Clearly states 'List all collections in the local Zotero library' with a specific verb and resource. No ambiguity about what the tool does.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
No guidance on when to use this tool vs siblings like get_children or search. No context for when to choose this over alternatives.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
list_tagsA
List all tags in the Zotero library, optionally filtered by collection.
Args: collection: Optional collection key to filter tags.
Returns: JSON array of tag strings.
| Name | Required | Description | Default |
|---|---|---|---|
| collection | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations exist, so the description must fully disclose behavior. It only states the return format (JSON array of tag strings) and does not address read-only nature, limits, or error handling.
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 extremely concise with three short sentences, front-loading the main purpose, and contains no wasteful words.
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 list tool with one optional parameter, the description covers the basics. It lacks details on behavior when no results or errors, but is largely sufficient given the simplicity.
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 description explains the 'collection' parameter as an optional filter, adding meaning beyond the schema's empty title and default. However, with 0% schema coverage, more detail would be beneficial.
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 'List all tags in the Zotero library' with a specific verb and resource, and distinguishes from siblings like search or list_collections by focusing exclusively on tags.
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 mentions optional filtering by collection, providing basic context, but does not give explicit guidance on when to use this tool versus alternatives or any exclusions.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
searchA
Search the local Zotero library.
Args: query: Search query string. fulltext: If true, search full-text content including PDFs. itemtype: Filter by item type. Use || to combine types, e.g. "book || journalArticle". collection: Filter by collection key. tag: Filter by tag. Use comma-separated values for AND search, e.g. "climate,adaptation". limit: Maximum results to return (default 50). offset: Number of results to skip for pagination.
Returns: JSON with count and items list.
| Name | Required | Description | Default |
|---|---|---|---|
| tag | No | ||
| limit | No | ||
| query | No | ||
| offset | No | ||
| fulltext | No | ||
| itemtype | No | ||
| collection | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description carries full burden. It describes search behavior, full-text support, filtering, and pagination. It does not explicitly state read-only or side effects, but these are implicit for a search 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 well-structured with Args and Returns sections, no fluff. Each sentence adds value. It is concise yet comprehensive.
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 7 diverse parameters and no required ones, the description provides complete documentation. It mentions return format (JSON with count and items). The output schema exists but is not shown; the description covers return structure sufficiently.
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 explains all 7 parameters with clear semantics, including defaults and usage examples (e.g., 'use || to combine types'). Adds significant meaning 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 starts with 'Search the local Zotero library', providing a clear verb and resource. It distinguishes from sibling tools like search_semantic_scholar (external search) and other specific 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 details parameters and their usage, but does not explicitly state when to use this tool over alternatives. However, the mention of 'local Zotero library' implies context, and the comprehensive parameter descriptions guide usage.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
search_semantic_scholarA
Search for papers on Semantic Scholar.
Args: query: Search query string. limit: Maximum results (default 20, max 100). year: Year filter, e.g. "2020", "2018-2022", or "2020-". open_access: Only return open access papers. sort: Sort by "citations" or "year" (descending). min_citations: Minimum citation count filter. check_library: If true, annotate results with local Zotero presence.
Returns: JSON with count, total, and papers list.
| Name | Required | Description | Default |
|---|---|---|---|
| sort | No | ||
| year | No | ||
| limit | No | ||
| query | Yes | ||
| open_access | No | ||
| check_library | No | ||
| min_citations | No |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations, the description carries full burden. It discloses that the tool is a read-only search, returns JSON with specified fields, and explains each parameter's effect. However, it does not mention authentication, rate limits, error handling, or whether the API call modifies any state. The behavior is adequately inferred but not explicitly stated.
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. It starts with a clear one-line purpose, then lists parameters in Args with their descriptions, and ends with Returns. Every sentence adds value, with no repetition or unnecessary detail.
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 7-parameter tool with no annotations and an output schema (described in text), the description covers all inputs and the output structure (count, total, papers list). It lacks details on error conditions, pagination (beyond 'max 100'), or API behavior under heavy load, but is sufficient for typical 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?
Despite 0% schema description coverage, the description thoroughly explains all 7 parameters: query, limit, year, open_access, sort, min_citations, and check_library. It provides meaning beyond the schema by clarifying formats (e.g., year filter '2020-2022'), options (sort by citations or year), and the purpose of check_library. This significantly aids correct usage.
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 'Search for papers on Semantic Scholar.' This is a specific verb (Search) and resource (papers on Semantic Scholar). It distinguishes from sibling tools like 'search' (likely local Zotero) and other paper-related tools (find_related, get_citations, etc.), as it explicitly names the external 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?
No guidance is given on when to use this tool versus alternatives. The description does not mention scenarios where this tool is preferred or when to avoid it. Sibling tools like 'search', 'get_citations', etc., are not referenced for comparison.
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.
10 tool updates
v0.1.0- First observed
find_related - First observed
get_children - First observed
get_citations - First observed
get_fulltext - First observed
get_item - First observed
get_references - First observed
list_collections - First observed
list_tags - First observed
search - First observed
search_semantic_scholar
TDQS
Scored across 10 tools
Every tool has a clearly distinct purpose: local Zotero operations (list_collections, list_tags, search, get_item, get_children, get_fulltext) and Semantic Scholar operations (find_related, get_citations, get_references, search_semantic_scholar). Within each group, tools are differentiated by specific actions (e.g., find_related vs. get_citations vs. get_references). There is no ambiguity.
All tool names follow a consistent verb_noun pattern using lowercase and underscores (e.g., list_collections, get_item, search_semantic_scholar). The verbs appropriately reflect the action: 'list' for enumerations, 'get' for retrieving single items, 'search' for queries, and 'find_related' for semantic similarity. No mixing of conventions.
With 10 tools, the surface is well-scoped for a Zotero integration. It covers both local library management (6 tools) and external Semantic Scholar access (4 tools), providing a balanced set without unnecessary overlap or missing core functionality. The count is ideal for an MCP server.
The server provides robust read operations for Zotero items and comprehensive Semantic Scholar functionality. However, it lacks any write operations (create, update, delete) for Zotero library items or collections, which is a notable gap for a library management server. The tool set appears read-only, limiting its utility for full library management.
Maintenance
Related MCP Connectors
Zotero MCP server for Claude and ChatGPT: search, citations, safe writes, PDF passages and pages.
Remote MCP server for full read/write access to a Zotero library
Personal knowledge base MCP server with semantic search, auto-categorization, metadata extraction
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Related MCP Servers
- AlicenseAqualityDmaintenanceRead-only MCP server that lets Claude or any MCP client search and retrieve metadata, notes, full text, citations, and BibTeX from your local Zotero library via its built-in API.11MIT
- 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.311,409 npm40MIT
- AlicenseNot gradedqualityCmaintenanceThis MCP server enables AI assistants like Claude to read and search your local Zotero bibliographic database directly from your machine.8MIT