ZotLink
Planned integration with ACM Digital Library for saving papers to Zotero (requires authentication).
Supports extracting metadata (title, authors, abstract, DOI, subjects, comments) from arXiv papers and saving them to Zotero with PDF attachment when available.
Planned integration with IEEE Xplore for saving papers to Zotero (requires authentication).
Core integration with Zotero for managing references, including listing collections, checking Zotero status, and saving papers with metadata and PDF attachments.
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., "@ZotLinksave the arXiv paper 2401.12345 to my Zotero 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.
ZotLink
MCP Server for Zotero Connector
π Language / θ―θ¨ιζ©: πΊπΈ English | π¨π³ δΈζ
π ZotLink
A lightweight, production-ready MCP server that brings open scholarly sources into Zotero with one command.
β€οΈ Like ZotLink? Give it a star π to support the development!
β¨ Core Features
π Open Preprint Coverage: arXiv, CVF (OpenAccess), bioRxiv, medRxiv, chemRxiv
π§ Rich Metadata Extraction: title, authors, abstract, DOI, subjects, comments
π Smart PDF Attachment: auto-attach when available; validated link fallback
π One-Click Collection Save: list + save (updateSession, treeViewID: C{id})
π§ Adaptive Browser Strategy: Playwright for tough sites; HTTP for the rest
π» Client Compatibility: Works with Claude Desktop and Cherry Studio
π§© Deep MCP Interoperability: Integrates with literature-related MCPs such as arxiv-mcp-server and Zotero MCP
π Unified Logging:
~/.zotlink/zotlink.log
π₯ Demo Video

Click the image above to watch a 1-minute demo video on Bilibili.
π Quick Start
1οΈβ£ Install
pip install zotlink
python -m playwright install chromiumRequires Python 3.10+. Includes full browser support for all preprint servers by default!
2οΈβ£ One-Command Configuration β¨
Use zotlink init to automatically generate MCP configuration:
# Auto-detect Zotero path
zotlink init
# Or specify path manually
zotlink init /Users/yourname/ZoteroThe command outputs ready-to-use configuration JSON, for example:
{
"mcpServers": {
"zotlink": {
"command": "/opt/homebrew/.../zotlink",
"args": [],
"env": {
"ZOTLINK_ZOTERO_ROOT": "/Users/yourname/Zotero"
}
}
}
}3οΈβ£ Add to Claude Configuration
Copy the generated configuration to your Claude Desktop config file:
macOS:
~/Library/Application Support/Claude/claude_desktop_config.jsonLinux:
~/.config/claude/claude_desktop_config.jsonWindows:
~/AppData/Roaming/Claude/claude_desktop_config.json
Restart Claude Desktop and you're ready to go!
π οΈ Development Installation
git clone https://github.com/your-org/ZotLink.git
cd ZotLink
pip install -e .
python -m playwright install chromiumMCP Configuration Details
If you need manual configuration (without using zotlink init), see examples below:
Recommended configuration (simple - just specify Zotero directory):
{
"mcpServers": {
"zotlink": {
"command": "/path/to/zotlink",
"args": [],
"env": {
"ZOTLINK_ZOTERO_ROOT": "/Users/yourname/Zotero"
}
}
}
}Advanced configuration (specify paths separately):
{
"mcpServers": {
"zotlink": {
"command": "/path/to/zotlink",
"args": [],
"env": {
"ZOTLINK_ZOTERO_DB": "/Users/yourname/Zotero/zotero.sqlite",
"ZOTLINK_ZOTERO_DIR": "/Users/yourname/Zotero/storage"
}
}
}
}Minimal config (auto-detect Zotero paths):
{
"mcpServers": {
"zotlink": { "command": "zotlink", "args": [] }
}
}Note: Using env variables follows MCP standard and works with all MCP clients (Claude Desktop, Cherry Studio, etc.).
π§° Available Tools
check_zotero_status: Check if Zotero is running and reachableget_zotero_collections: List collections (tree view) from the local DBsave_paper_to_zotero: Save a paper by URL (arXiv/CVF/rxiv), attach PDF/metadataextract_arxiv_metadata: Extract full arXiv metadata (title/authors/subjects/DOI/comment)Cookie helpers (stubs prepared) for auth-required sources
π Logging
Logs are written to ~/.zotlink/zotlink.log.
π Browser Mode
Browser-driven extraction is included by default! All preprint servers (bioRxiv, medRxiv, chemRxiv) work automatically.
The server switches to browser strategy automatically when needed (falls back to HTTP mode on Windows).
Linux may require additional system dependencies:
sudo apt-get install -y libnss3 libatk1.0-0 libatk-bridge2.0-0 libdrm2 libxkbcommon0 libgbm1 libasound2Advanced: Custom Zotero Paths
Recommended - Single directory:
# macOS/Linux
export ZOTLINK_ZOTERO_ROOT=/Users/yourname/Zotero
# Windows PowerShell
$env:ZOTLINK_ZOTERO_ROOT='C:\Users\YourName\Zotero'Advanced - Separate paths:
# macOS/Linux
export ZOTLINK_ZOTERO_DB=/Users/yourname/Zotero/zotero.sqlite
export ZOTLINK_ZOTERO_DIR=/Users/yourname/Zotero/storage
# Windows PowerShell
$env:ZOTLINK_ZOTERO_DB='C:\Users\YourName\Zotero\zotero.sqlite'
$env:ZOTLINK_ZOTERO_DIR='C:\Users\YourName\Zotero\storage'Local config file ~/.zotlink/config.json:
{
"zotero": {
"database_path": "/Users/yourname/Zotero/zotero.sqlite",
"storage_dir": "/Users/yourname/Zotero/storage"
}
}Configuration precedence: ENV vars > MCP env config > local config file > auto-detection
π§© Supported Sources (Open)
arXiv (preprint)
CVF (OpenAccess) (CVPR/ICCV/WACV)
bioRxiv / medRxiv / chemRxiv (preprint servers)
Auth-required sources (e.g., Nature) are planned via bookmark-based cookie sync.
π§° Troubleshooting
Zotero not detected: ensure Zotero Desktop is running (port 23119)
No PDF attached: some pages only expose links; the server falls back to link attachments
Browser mode errors: verify Playwright is installed and Chromium is available
Install error: ensure Python 3.10+ is installed
π§ͺ Development
pip install -e .
python -m playwright install chromium
zotlink # or: python run_server.pySee docs/DEVELOPMENT.md for code structure, adding new extractors, and release tips.
πΊοΈ Roadmap (ToβDo)
Sources
arXiv
CVF (OpenAccess)
bioRxiv
medRxiv
chemRxiv
Nature (cookies)
Science (cookies)
IEEE Xplore (cookies)
Springer (cookies)
ACM Digital Library (cookies)
OpenReview
PLOS / PMC / Frontiers / MDPI
Stability & Quality
Configurable Zotero DB path (ENV + ~/.zotlink/config.json)
HTTP fallback when browser fails (Windows compatibility)
PDF download retry mechanism (3 retries with exponential backoff)
Windows playwright optimization (current limitation: Python asyncio ProactorEventLoop + MCP event loop nesting)
Post-save title correction when placeholder detected
Enhanced PDF heuristics and alternative URL strategies
Crossref DOI enrichment as fallback
Unified error taxonomy with auto-retry/backoff
Integration & DX
Cookie sync bookmark flow for Nature-family and other publishers
Example templates for Claude Desktop / Cherry Studio
Extended MCP interoperability docs and samples
CI and tests (unit/integration) for extractors
Packaged releases (optional)
π License
MIT (see SPDX identifier in packaging metadata)
π GitHub Star History
Made with β€οΈ for Zotero community
This server cannot be installed
Resources
Unclaimed servers have limited discoverability.
Looking for Admin?
If you are the server author, to access and configure the admin panel.
Latest Blog Posts
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/TonybotNi/ZotLink'
If you have feedback or need assistance with the MCP directory API, please join our Discord server