Skip to main content
Glama
gyger

Zotero MCP Connector

by gyger
README.md
# Zotero MCP Connector

> [!IMPORTANT]  
> This project is retired. I am no longer convinced MCP is the interface one wants, better have direct CLI access.
> If you like MCPs, there are a few options, but I did not test them.
> - [zotero-mcp](https://github.com/54yyyu/zotero-mcp)
> - [zotero-mcp-server](https://github.com/swairshah/zotero-mcp-server)
> - [mcp-zotero](https://github.com/kaliaboi/mcp-zotero)

A Model Control Protocol (MCP) connector for integrating your local Zotero with Claude.  
This enables direct read access to your local Zotero library through Claude's Desktop interface.
It depends on the ability to access a local web-api in Zotero 7.

This was inspired by a repository using Node.js and the web api: [mcp-zotero](https://github.com/kaliaboi/mcp-zotero).  
This builds on the shoulders of the fantastic [pyzotero](https://github.com/urschrei/pyzotero) library.

## Installation

### Run from local code (Recommended)
Information about Claude Desktop interacting with MCPs can be found [here](https://modelcontextprotocol.io/quickstart/user).

1. Use `uv`. Installation instructions can be found [here](https://docs.astral.sh/uv/getting-started/installation/).

2. Checkout the git project to local space and activate the virtual environment inside:
```bash
git clone https://github.com/gyger/mcp-pyzotero.git
cd mcp-pyzotero
uv sync
```

3. Enable the local API in Zotero 7:
   ![Zotero Local API Settings](assets/LocalAPISettings.png)

4. Add the server to your local Claude installation:
```bash
uv run mcp install zotero.py
```

### Run encapsulated with uvx (Should work)
Edit the configuration for your Claude Desktop softare in the file.

    - macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
    - Windows: %APPDATA%\Claude\claude_desktop_config.json

and add the Zotero entry
```json
{
    "mcpServers": {
        "Zotero": {
            "command": "uvx",
            "args": ["--from", "git+https://github.com/gyger/mcp-pyzotero.git", 
                     "--with", "mcp[cli]",
                     "--with", "pyzotero",
                     "mcp", "run", "zotero.py"
                    ],
        }
    }
}
```

## Configuration

The connector is configured to work with local Zotero installations and currently only `user` libraries are supported. 
By default it uses the userid `0`, but you can also set the environment variable `ZOTERO_USER_ID` if needed:

```bash
uv run mcp install zotero.py -v ZOTERO_USER_ID=0
```

## Available Functions

### Available tools
- `get_zotero_summary()`: Lists properties about your library including collections, recent items or tags.
- `get_collection_items(collection_key)`: Get all items in a specific collection
- `get_items_metadata(item_key)`: Get detailed information about specific paper(s), including abstract.
- `search_library(query, mode)`: Search your Zotero library, with two possible modes: everything or titleCreatorYear.

This functionality should be extended in the future.

## Requirements

- Python 3.10+
  - pyzotero
  - mcp[cli]
- Local Zotero installation

## Contributing

Contributions are welcome! Please visit the [GitHub repository](https://github.com/gyger/mcp-pyzotero) to:
- Report issues
- Submit pull requests
- Suggest improvements

## License

MIT

TDQS

B3/5.0

Scored across 4 tools

Disambiguation4/5

The tools have mostly distinct purposes: get_collection_items retrieves items from a collection, get_items_metadata fetches details for specific items, get_zotero_information provides library overview, and search_library searches across the library. However, get_collection_items and search_library could be slightly confused as both retrieve items, but their scopes (collection-specific vs. library-wide) help differentiate them.

Naming Consistency4/5

The naming follows a consistent verb_noun pattern (get_collection_items, get_items_metadata, get_zotero_information, search_library) with all tools using snake_case. The only minor deviation is that get_zotero_information uses 'information' instead of a more specific noun like 'overview', but it still fits the pattern well.

Tool Count3/5

With 4 tools, the count is on the low side for a library management system like Zotero, which typically involves CRUD operations. While it covers basic retrieval and search, it feels thin for the domain, lacking tools for creating, updating, or deleting items or collections, which are common in such systems.

Completeness2/5

The tool set is severely incomplete for a Zotero connector, focusing only on read operations (get and search). There are significant gaps: no tools for creating, updating, or deleting items, collections, or tags, and no support for managing attachments or notes. This will cause agent failures when full library management is needed.

Maintenance

ActivityInactive
ResponsivenessNo issues