Connect Zotero to Claude via a local MCP server and access your reference manager directly.
- Zotero is installed and running
- Node.js is installed (verify with
node --version) - The
ZoteroMCPproject is cloned and available locally
-
Open Zotero
-
Open Preferences via the menu or the shortcut:
Cmd + , -
Navigate to Advanced → Miscellaneous
-
Enable the following option:
✅ Allow other applications on this computer to communicate with Zotero
The local API URL will then be displayed, for example:
http://localhost:23119/api/Tip: Note down the port number — you'll need it in the next step.
Create the file src/config.ts in the project directory and replace the placeholders with your actual URL from Zotero:
// src/config.ts
export const API_CONFIG = {
baseUrl: "http://localhost:23119/api", // Use the port from your Zotero settings
userPrefix: "users/0", // Local user (default: 0)
timeout: 500, // Timeout in milliseconds
};Navigate to the project directory and run the build command:
# Navigate to the project directory
cd /path/to/project/ZoteroMCP
# Install dependencies (only required once)
npm install
# Build the project
npm run buildAlternative: In Visual Studio Code you can run the build directly via the integrated terminal or a
tasks.jsonconfiguration.
After the build, the compiled file will be available at dist/index.js.
For Claude to recognize the MCP server, the Claude Desktop configuration file needs to be updated.
Path to the configuration file:
/Users/YOUR-USERNAME/Library/Application Support/Claude/claude_desktop_config.json
Add the following block to the mcpServers object:
{
"mcpServers": {
"zotero": {
"command": "node",
"args": ["/absolute/path/to/project/ZoteroMCP/dist/index.js"]
}
}
}Important: Always use the absolute path to
dist/index.js— relative paths are not reliably resolved here.
Restart Claude Desktop after saving the change for the MCP server to be picked up.
| Problem | Likely Cause | Solution |
|---|---|---|
| API not reachable | Zotero is not running | Start Zotero and verify the API option is enabled |
| Wrong port | Port has changed | Check the port in Zotero settings and update config.ts |
| MCP not recognized | Incorrect path in JSON | Use the absolute path to dist/index.js |
dist/index.js missing |
Build was not run | Run npm run build again |
ZoteroMCP/
├── src/
│ ├── config.ts # API configuration
│ └── index.ts # MCP server entry point
├── dist/
│ └── index.js # Compiled output (used by Claude)
├── package.json
└── tsconfig.json