mcp-zotero
A Model Context Protocol server for Zotero integration that gives any LLM full access to your Zotero library, including search, organization, DOI-based paper addition, PDF import, full-text reading, and citation injection into Word documents.
README
MCP Zotero
Note: This is an unofficial community project and is not affiliated with, endorsed by, or supported by the Zotero team or the Corporation for Digital Scholarship. "Zotero" is a registered trademark of the Corporation for Digital Scholarship.
A Model Context Protocol server for Zotero integration. It gives any LLM full access to your Zotero library: search, organize, add papers by DOI, import PDFs, read full-text content, and inject live citations into Word documents.
Originally based on mcp-zotero by Abhishek Kalia. This project has since been extensively rewritten with a new architecture, 15 tools (up from 5), citation injection, PDF management, and Claude skill support.
How it works
The server is designed to be usable by any LLM without external documentation. On connection, it sends workflow instructions via the MCP instructions field, and each tool description includes cross-references and usage guidance. An LLM that has never seen this server before can discover the full workflow — from adding papers to producing a cited Word document — directly from the tool listing.
For advanced use cases (PDF upload policy, citation style guidance, source transparency), a Claude skill is included for Claude.ai Projects. But the skill is optional: the MCP server is fully self-documenting.
Local vs Remote LLMs
| Scenario | MCP server | Skill needed? |
|---|---|---|
| LLM with filesystem access (Claude Code, LM Studio, etc.) | All 15 tools | No |
| LLM without filesystem access (Claude.ai Projects, Claude Desktop) | API tools (search, add, metadata) | Yes, for citation injection |
LLMs with filesystem access can use all tools directly, including inject_citations which reads and writes .docx files on disk.
LLMs without filesystem access — including Claude Desktop, which connects to MCP but cannot generate files locally — can use the included Claude skill (skills/zotero-skill-mcp-integrations/), which runs citation injection entirely inside a sandbox. MCP tools handle all Zotero API operations; the skill handles document assembly.
Claude Skill Setup (for Claude.ai Projects and Claude Desktop)
- Download the skill
.zipfrom the latest GitHub Release - Extract it and upload the folder to your Claude.ai Project as a skill
- The skill enables citation injection directly inside the sandbox, without requiring local filesystem access
Setup
-
Get your Zotero credentials:
# Create an API key at https://www.zotero.org/settings/keys # (enable library read/write + file access) # Then retrieve your user ID: curl -H "Zotero-API-Key: YOUR_API_KEY" https://api.zotero.org/keys/current -
Set environment variables:
export ZOTERO_API_KEY="your-api-key" export ZOTERO_USER_ID="user-id-from-curl" export UNPAYWALL_EMAIL="your@email.edu" # Optional: enables OA PDF lookup via Unpaywall export UNSAFE_OPERATIONS="none" # Optional: "none" | "items" | "all" (see below)
Environment Variables
| Variable | Required | Description |
|---|---|---|
ZOTERO_API_KEY |
Yes | API key for Zotero Web API v3. Create one at zotero.org/settings/keys with library read/write and file access permissions. |
ZOTERO_USER_ID |
Yes | Your Zotero numeric user ID. Retrieve it with curl -H "Zotero-API-Key: KEY" https://api.zotero.org/keys/current. |
UNPAYWALL_EMAIL |
No | Email for Unpaywall API requests (rate-limit policy). Enables OA PDF lookup in add_items_by_doi and find_and_attach_pdfs. If not set, OA PDF features are silently skipped. |
UNSAFE_OPERATIONS |
No | Controls destructive operations (deletion). See Unsafe Operations below. Default: none (all deletions blocked). |
Unsafe Operations
By default, the MCP server does not allow any deletion. This is a safety measure to prevent an LLM from accidentally deleting items or collections from your library.
To enable deletion, set the UNSAFE_OPERATIONS environment variable to one of the following values:
| Value | delete_items |
delete_collection |
Use case |
|---|---|---|---|
none (default) |
Blocked | Blocked | Safe mode — no deletions possible |
items |
Allowed | Blocked | Allow deleting items but protect collection structure |
all |
Allowed | Allowed | Full access — items and collections can be deleted |
Important notes:
- If
UNSAFE_OPERATIONSis not set, empty, or set to an unrecognized value, it defaults tonone. - The value is case-insensitive (e.g.
ALL,Items,NONEall work). delete_itemsmoves items to the Zotero trash (recoverable from the Zotero desktop client).delete_collectionremoves the collection (folder) only — items inside it are not deleted and remain in your library.- The
allvalue includes both item and collection deletion because managing collections inherently requires item-level access.
Configuration example:
{
"mcpServers": {
"zotero": {
"command": "npx",
"args": ["-y", "@xevos117/mcp-zotero"],
"env": {
"ZOTERO_API_KEY": "YOUR_API_KEY",
"ZOTERO_USER_ID": "YOUR_USER_ID",
"UNSAFE_OPERATIONS": "items"
}
}
}
}
Integration with Claude Desktop
Add to your Claude Desktop configuration:
{
"mcpServers": {
"zotero": {
"command": "npx",
"args": ["-y", "@xevos117/mcp-zotero"],
"env": {
"ZOTERO_API_KEY": "YOUR_API_KEY",
"ZOTERO_USER_ID": "YOUR_USER_ID",
"UNPAYWALL_EMAIL": "YOUR_EMAIL"
}
}
}
}
Integration with Claude Code
claude mcp add-json "zotero" '{"command":"npx","args":["tsx","src/server.ts"],"env":{"ZOTERO_API_KEY":"...","ZOTERO_USER_ID":"..."}}'
Available Tools
Library browsing
| Tool | Description |
|---|---|
get_collections |
List all collections (folders) with keys, names, and parent relationships |
get_collection_items |
Get items in a specific collection with keys, titles, authors, dates |
search_library |
Search by query, or list items sorted by field (date, title, etc.) |
get_items_details |
Batch metadata retrieval for multiple items — returns all type-specific fields (bookTitle, proceedingsTitle, university, etc.) |
get_item_fulltext |
Get full-text content of a PDF attachment via Zotero's fulltext index |
Adding content
| Tool | Description |
|---|---|
add_items_by_doi |
Add papers by DOI with automatic metadata resolution. Auto-attaches OA PDFs via Unpaywall |
add_items |
Add items with direct metadata — supports all 37 Zotero item types (books, theses, reports, etc.), batch-capable |
create_collection |
Create a new collection, optionally nested under a parent |
import_pdf_to_zotero |
Download a PDF from URL, upload to Zotero storage, auto-index full text |
find_and_attach_pdfs |
Batch OA PDF lookup and auto-attach via Unpaywall (by item keys or collection) |
add_linked_url_attachment |
Attach a URL to an existing item or create a standalone link |
Deleting content
| Tool | Description |
|---|---|
delete_items |
Delete up to 50 items per call (moves to Zotero trash). Requires UNSAFE_OPERATIONS=items or all |
delete_collection |
Delete a collection (folder). Items inside are kept. Requires UNSAFE_OPERATIONS=all |
Citation & documents
| Tool | Description |
|---|---|
inject_citations |
Inject live Zotero citations into a Word document. Supports APA, IEEE, Vancouver, Harvard, Chicago. Output is saved in the same folder as the input file with a _cited suffix (e.g. paper.docx → paper_cited.docx) |
get_user_id |
Returns the configured Zotero user ID |
Development
npm install
npm run build # Compile TypeScript
npm test # Run tests (vitest, 404 tests)
npx tsx src/server.ts # Run directly without building
Debug with MCP Inspector
npx @modelcontextprotocol/inspector npx tsx src/server.ts
License
MIT - see LICENSE for details.
推荐服务器
Baidu Map
百度地图核心API现已全面兼容MCP协议,是国内首家兼容MCP协议的地图服务商。
Playwright MCP Server
一个模型上下文协议服务器,它使大型语言模型能够通过结构化的可访问性快照与网页进行交互,而无需视觉模型或屏幕截图。
Magic Component Platform (MCP)
一个由人工智能驱动的工具,可以从自然语言描述生成现代化的用户界面组件,并与流行的集成开发环境(IDE)集成,从而简化用户界面开发流程。
Audiense Insights MCP Server
通过模型上下文协议启用与 Audiense Insights 账户的交互,从而促进营销洞察和受众数据的提取和分析,包括人口统计信息、行为和影响者互动。
VeyraX
一个单一的 MCP 工具,连接你所有喜爱的工具:Gmail、日历以及其他 40 多个工具。
graphlit-mcp-server
模型上下文协议 (MCP) 服务器实现了 MCP 客户端与 Graphlit 服务之间的集成。 除了网络爬取之外,还可以将任何内容(从 Slack 到 Gmail 再到播客订阅源)导入到 Graphlit 项目中,然后从 MCP 客户端检索相关内容。
Kagi MCP Server
一个 MCP 服务器,集成了 Kagi 搜索功能和 Claude AI,使 Claude 能够在回答需要最新信息的问题时执行实时网络搜索。
e2b-mcp-server
使用 MCP 通过 e2b 运行代码。
Neon MCP Server
用于与 Neon 管理 API 和数据库交互的 MCP 服务器
Exa MCP Server
模型上下文协议(MCP)服务器允许像 Claude 这样的 AI 助手使用 Exa AI 搜索 API 进行网络搜索。这种设置允许 AI 模型以安全和受控的方式获取实时的网络信息。