MCP server for adding papers and books to Zotero by DOI, arXiv ID, or ISBN
Setup
Choose your client, copy the config, then fill in any required environment variables.
claude mcp add zotero-library --env ZOTERO_LIBRARY_ID='<ZOTERO_LIBRARY_ID>' --env ZOTERO_API_KEY='<ZOTERO_API_KEY>' --env ZOTERO_WEBDAV_URL='<ZOTERO_WEBDAV_URL>' --env ZOTERO_WEBDAV_USER='<ZOTERO_WEBDAV_USER>' --env ZOTERO_WEBDAV_PASSWORD='<ZOTERO_WEBDAV_PASSWORD>' -- uvx zotero-library-mcp~/.codex/config.toml
[mcp_servers.zotero-library]
command = "uvx"
args = ["zotero-library-mcp"]
env = { ZOTERO_LIBRARY_ID = "<ZOTERO_LIBRARY_ID>", ZOTERO_API_KEY = "<ZOTERO_API_KEY>", ZOTERO_WEBDAV_URL = "<ZOTERO_WEBDAV_URL>", ZOTERO_WEBDAV_USER = "<ZOTERO_WEBDAV_USER>", ZOTERO_WEBDAV_PASSWORD = "<ZOTERO_WEBDAV_PASSWORD>" }
# codex mcp add zotero-library --env ZOTERO_LIBRARY_ID='<ZOTERO_LIBRARY_ID>' --env ZOTERO_API_KEY='<ZOTERO_API_KEY>' --env ZOTERO_WEBDAV_URL='<ZOTERO_WEBDAV_URL>' --env ZOTERO_WEBDAV_USER='<ZOTERO_WEBDAV_USER>' --env ZOTERO_WEBDAV_PASSWORD='<ZOTERO_WEBDAV_PASSWORD>' -- uvx zotero-library-mcp~/.cursor/mcp.json
{
"mcpServers": {
"zotero-library": {
"command": "uvx",
"args": [
"zotero-library-mcp"
],
"env": {
"ZOTERO_LIBRARY_ID": "<ZOTERO_LIBRARY_ID>",
"ZOTERO_API_KEY": "<ZOTERO_API_KEY>",
"ZOTERO_WEBDAV_URL": "<ZOTERO_WEBDAV_URL>",
"ZOTERO_WEBDAV_USER": "<ZOTERO_WEBDAV_USER>",
"ZOTERO_WEBDAV_PASSWORD": "<ZOTERO_WEBDAV_PASSWORD>"
}
}
}
}.vscode/mcp.json
{
"servers": {
"zotero-library": {
"type": "stdio",
"command": "uvx",
"args": [
"zotero-library-mcp"
],
"env": {
"ZOTERO_LIBRARY_ID": "<ZOTERO_LIBRARY_ID>",
"ZOTERO_API_KEY": "<ZOTERO_API_KEY>",
"ZOTERO_WEBDAV_URL": "<ZOTERO_WEBDAV_URL>",
"ZOTERO_WEBDAV_USER": "<ZOTERO_WEBDAV_USER>",
"ZOTERO_WEBDAV_PASSWORD": "<ZOTERO_WEBDAV_PASSWORD>"
}
}
}
}~/.gemini/settings.json
{
"mcpServers": {
"zotero-library": {
"command": "uvx",
"args": [
"zotero-library-mcp"
],
"env": {
"ZOTERO_LIBRARY_ID": "<ZOTERO_LIBRARY_ID>",
"ZOTERO_API_KEY": "<ZOTERO_API_KEY>",
"ZOTERO_WEBDAV_URL": "<ZOTERO_WEBDAV_URL>",
"ZOTERO_WEBDAV_USER": "<ZOTERO_WEBDAV_USER>",
"ZOTERO_WEBDAV_PASSWORD": "<ZOTERO_WEBDAV_PASSWORD>"
}
}
}
}claude_desktop_config.json
{
"mcpServers": {
"zotero-library": {
"command": "uvx",
"args": [
"zotero-library-mcp"
],
"env": {
"ZOTERO_LIBRARY_ID": "<ZOTERO_LIBRARY_ID>",
"ZOTERO_API_KEY": "<ZOTERO_API_KEY>",
"ZOTERO_WEBDAV_URL": "<ZOTERO_WEBDAV_URL>",
"ZOTERO_WEBDAV_USER": "<ZOTERO_WEBDAV_USER>",
"ZOTERO_WEBDAV_PASSWORD": "<ZOTERO_WEBDAV_PASSWORD>"
}
}
}
}.trae/mcp.json
{
"mcpServers": {
"zotero-library": {
"command": "uvx",
"args": [
"zotero-library-mcp"
],
"env": {
"ZOTERO_LIBRARY_ID": "<ZOTERO_LIBRARY_ID>",
"ZOTERO_API_KEY": "<ZOTERO_API_KEY>",
"ZOTERO_WEBDAV_URL": "<ZOTERO_WEBDAV_URL>",
"ZOTERO_WEBDAV_USER": "<ZOTERO_WEBDAV_USER>",
"ZOTERO_WEBDAV_PASSWORD": "<ZOTERO_WEBDAV_PASSWORD>"
}
}
}
}Environment variables
ZOTERO_LIBRARY_IDZOTERO_API_KEYZOTERO_WEBDAV_URLZOTERO_WEBDAV_USERZOTERO_WEBDAV_PASSWORD
Replace the placeholders with your own credentials and keep them out of version control.