Local Zotero MCP
This server provides read-only access to your local Zotero library, allowing you to:
Search items: Search by title, creator, year, or full text; optionally filter by item type and tag.
Retrieve item details: Get full metadata for an item, with optional formatted citation and bibliography in a chosen CSL style (e.g., APA).
Access item attachments and notes: List notes and attachments attached to an item; get the local filesystem path of an attachment file.
Read/convert documents: Read the text content of PDF or EPUB attachments (with optional header/footer removal); convert PDF/EPUB to TXT or PDF and save locally.
Browse collections: List all collections (optionally only top-level), get collection details, list subcollections, and list items within a collection (optionally only top-level items); get tags applied to collection items.
Manage tags: List all tags in the library (with optional substring filtering); get tags attached to a specific item.
Generate bibliographies: Format a bibliography for one or more items in a specified CSL style and locale.
Handle saved searches: List and execute saved searches, returning matching items.
View lists: List top-level items, trashed items, items in My Publications; list all saved searches; list group libraries; list supported item types.
Provides read-only access to a local Zotero library via the Zotero Local API, enabling search and retrieval of items, collections, tags, saved searches, and generation of bibliographies.
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., "@Local Zotero MCPsearch my library for papers on cognitive psychology published after 2015"
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.
Local Zotero MCP
An MCP server that gives an LLM read-only
access to your local Zotero library via the
desktop app's Local API.
It talks to Zotero over http://127.0.0.1:23119, so nothing leaves your
machine and no API keys are required.
Requirements
Zotero desktop app, running, with Settings > Advanced > "Allow other applications on this computer to communicate with Zotero" enabled.
uv installed.
Related MCP server: Zotero MCP Server
Quickstart
No cloning or installing required - uvx fetches the published package
from PyPI and runs it. Add this to your Claude Desktop config
(claude_desktop_config.json):
{
"mcpServers": {
"zotero": {
"command": "uvx",
"args": ["--from", "local-zotero-mcp", "zotero-mcp"]
}
}
}Restart Claude Desktop and the Zotero tools should be available.
uvx caches the environment after the first run, so subsequent launches are
fast; add --refresh to args if you want to force-pull the latest version.
Tools
Every library-scoped tool takes an optional library argument - "user"
(default) for your personal library, or a group ID to read a group library
synced locally. Use list_groups to find group IDs.
Tool | Description |
| List group libraries available to the local Zotero install |
| Search the library by title/creator/year or full text |
| Get full data for an item, optionally with citation/bibliography |
| List an item's notes and attachments |
| List top-level items in the library |
| List items in the trash |
| List items in "My Publications" |
| List collections |
| Get full data for a single collection |
| List the direct subcollections of a collection |
| List items in a collection |
| List tags used on items in a collection |
| List tags |
| List tags attached to a single item |
| Generate a formatted bibliography for one or more items |
| Get the local file path of an attachment |
| List item types supported by Zotero |
The two tools below have no equivalent in the Zotero Web API - they read the
attachment file resolved by get_attachment_file_path and process it locally
with PyMuPDF. Both accept
remove_headers_footers: when true, lines that repeat near the top/bottom of
most pages (running titles, page numbers, etc.) are detected and stripped
from the returned/saved text. For convert_document this only applies to
output_format="txt" - PDF output preserves the original pages as-is.
Tool | Description |
| Read the text content of a PDF or EPUB attachment |
| Convert a PDF or EPUB attachment to TXT or PDF and save it to a location you specify |
Claude Plugin
This repo also ships as a Claude Code plugin bundling four Agent Skills for Zotero-based research, on top of the same MCP tools listed above:
Skill | Covers |
| Searching and browsing items, collections, tags, groups |
| Full-text PDF/EPUB reading, quoting, and comparison |
| Formatted citations and reading lists |
| Thematic clustering, gap analysis, trajectory tracing, reading-list prioritization |
The plugin's .mcp.json runs the server the same way as the Quickstart above (uvx --from local-zotero-mcp zotero-mcp), so it always tracks the published PyPI package.
Install
Add this repo as a plugin marketplace, then install the plugin:
/plugin marketplace add virtualarchitectures/Local-Zotero-MCP
/plugin install local-zotero-mcp@local-zotero-mcpLocal development
To try it locally instead, clone the repo and run:
claude --plugin-dir /path/to/Local-Zotero-MCPThen invoke a skill directly, e.g. /local-zotero-mcp:searching-zotero-library, or just ask
Claude a research question about your library and let it pick the right skill.
See TESTING.md for a manual test checklist to run against a real Zotero library after changing a skill.
Local development
Clone the repo and install it locally:
uv syncRun it directly from the checkout:
uv run zotero-mcpPoint Claude Desktop at your local checkout instead of GitHub with:
{
"mcpServers": {
"zotero": {
"command": "uv",
"args": ["run", "--directory", "/path/to/Local-Zotero-MCP", "zotero-mcp"]
}
}
}Run the tests:
uv run pytestTests mock the Zotero HTTP responses, so a running Zotero instance isn't required. To smoke-test against your own Zotero library:
uv run mcp dev zotero_mcp/server.pyAcknowledgements
The skills in this repository have been adapted from urschrei/zotero_search_skill. This version has been adapted to remove the dependencies on Pyzotero and the Semantic Scholar integration, interfacing directly with a local Zotero instance via MCP instead.
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 Servers
- AlicenseBqualityFmaintenanceIntegrates local Zotero libraries with Claude's Desktop interface, allowing users to access and manage their library collections via a local API.456MIT
- AlicenseBqualityDmaintenanceIntegrates with Zotero's local API to search your reference library, retrieve bibliographic details, and extract full text from PDF attachments.41MIT
- AlicenseAqualityDmaintenanceIntegrates with Zotero's local API to search, retrieve, read PDFs, and add items by DOI from your Zotero library.53MIT
- AlicenseCqualityDmaintenanceEnables interaction with Zotero libraries for searching, managing collections, items, tags, and attachments, plus optional semantic search across PDFs via local embeddings.382MIT
Related MCP Connectors
Federated search of books and papers, BibTeX/RIS citations, open-access retrieval and reading.
Remote MCP server for full read/write access to a Zotero library
Multi-engine scholarly research server for search, traversal, full text, and reading lists.
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/virtualarchitectures/Local-Zotero-MCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server