Zotero MCP Server
Allows adding papers to Zotero by providing an arXiv ID or URL, effectively integrating arXiv paper discovery into the Zotero workflow.
Allows interaction with a Zotero library, providing tools for searching papers, adding papers via arXiv, updating metadata, and retrieving items, as well as resources for recent items and collection items, and prompts for literature review and paper summary.
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 Server Search for papers on transformer models in my library"
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 Model Context Protocol (MCP) server for Zotero, enabling LLM-powered tools like Claude Desktop, Claude Code, and Cursor to interact with your academic library.
Features
Tools
search_papers - Search papers by keyword, title, or author
add_arxiv_paper - Add papers to Zotero by arXiv ID or URL
update_metadata - Update metadata fields of existing items
get_item - Get detailed information about a specific item
get_collection_items - List items in a collection
get_recent_items - Get recently added items
Resources
zotero://recent - Recently added items
zotero://collection/{key} - Items in a specific collection (dynamic)
Prompts
literature_review - Generate structured literature review template from collection papers
paper_summary - Summarize a specific paper with structured analysis
Related MCP server: zotero-mcp
Quick Start
Prerequisites
Python 3.10+
Zotero account with API access
Get your API key at https://www.zotero.org/settings/keys
Installation
git clone https://github.com/awsl5714/zotero-mcp-server.git
cd zotero-mcp-server
pip install -e .Configuration
cp .env.example .env
# Edit .env with your Zotero credentials
export ZOTERO_LIBRARY_ID=your-library-id
export ZOTERO_API_KEY=your-api-key
export ZOTERO_LIBRARY_TYPE=user # or "group"Claude Desktop Integration
Add to your Claude Desktop config (~/Library/Application Support/Claude/claude_desktop_config.json):
{
"mcpServers": {
"zotero": {
"command": "zotero-mcp",
"env": {
"ZOTERO_LIBRARY_ID": "your-library-id",
"ZOTERO_API_KEY": "your-api-key"
}
}
}
}Claude Code Integration
Add to your Claude Code MCP settings:
{
"mcpServers": {
"zotero": {
"command": "zotero-mcp",
"env": {
"ZOTERO_LIBRARY_ID": "your-library-id",
"ZOTERO_API_KEY": "your-api-key"
}
}
}
}Usage Examples
Once connected, you can use natural language in Claude:
"Search my Zotero library for papers about transformer architectures"
"Add this arXiv paper to my library: 2301.00234"
"Write a literature review based on my 'Deep Learning' collection"
"Update the tags for paper KEY123 to include 'NLP' and 'attention'"
Tech Stack
Project Structure
src/zotero_mcp/
├── server.py # MCP server with Tools, Resources, Prompts
├── zotero_client.py # Zotero API wrapper
└── config.py # Environment-based configurationLicense
MIT
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.
Inputs: key (required). Returns: result
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.
Inputs: doi (required), limit, min_citations, check_library. Returns: result
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.
Inputs: key (required). Returns: result
get_itemB
Get a single Zotero item by its key.
Args: key: The Zotero item key.
Returns: JSON with the full item data.
Inputs: key (required). Returns: result
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.
Inputs: doi (required), limit, min_citations, check_library. Returns: result
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.
Inputs: limit. Returns: result
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.
Inputs: collection. Returns: result
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.
Inputs: query, fulltext, itemtype, collection, +3 more. Returns: result
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.
Inputs: query (required), limit, year, open_access, +3 more. Returns: result
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
Loading tool schema changelog…
TDQS
Scored across 10 tools
Each tool targets a distinct functionality: local Zotero operations (get item, children, fulltext, list collections/tags, search) are separate from Semantic Scholar operations (search, related, citations, references). No overlapping purposes.
All tool names follow a consistent verb_noun pattern using snake_case (e.g., get_item, list_collections, search_semantic_scholar). Although verbs vary (get, list, search, find), they accurately describe the action and maintain predictability.
With 10 tools, the server is well-scoped for a Zotero integration that includes both local library retrieval and external paper discovery via Semantic Scholar. Each tool serves a distinct need without bloat or deficiency.
The tool surface covers extensive read operations for Zotero items, collections, tags, and full-text, plus comprehensive Semantic Scholar searches. However, it lacks CRUD operations (create, update, delete items) that are typical for library management, leaving notable gaps.
Maintenance
Related MCP Connectors
Academic literature search, retrieval, and private library management on top of OpenAlex.
Search arXiv/Semantic Scholar/OpenAlex + medical evidence (PubMed/Europe PMC) + LaTeX/PDF tools.
arXiv and OpenAlex/Crossref paper search (an open Google Scholar alternative) as agent tools.
Zotero MCP server for Claude and ChatGPT: search, citations, safe writes, PDF passages and pages.
Related MCP Servers
- FlicenseNot gradedqualityDmaintenanceEnables AI assistants to search and retrieve metadata, abstracts, and notes from a user's Zotero library through tools like search, get item, and list collections.-
- FlicenseNot gradedqualityAmaintenanceEnables AI assistants to search a Zotero library, retrieve item metadata, and access the full text of PDF attachments.-
- FlicenseNot gradedqualityAmaintenanceEnables AI assistants to search a Zotero library, retrieve complete metadata for individual items, and read the full text of attached PDFs, connecting through either the desktop app's local API or the Zotero Web API.-
- FlicenseNot gradedqualityAmaintenanceEnables AI assistants to search a Zotero library, retrieve complete item metadata, and fetch the full text of attached PDFs through the Zotero API.-