# llm-for-zotero: an LLM research agent inside the Zotero reader

> llm-for-zotero is a Zotero 7/8/9 plugin that puts a chat sidebar next to your PDFs and can drive library-wide agent workflows. The design is provider-agnostic, which is its main strength and the main thing to check before you commit.

**yilewang/llm-for-zotero** — An open-source research agent system for your Zotero library.

- Repository: https://github.com/yilewang/llm-for-zotero
- Website: https://yilewang.github.io/llm-for-zotero
- Stars: 3,168 · Forks: 181
- Language: TypeScript
- License: AGPL-3.0
- Published: 2026-09-10 · Updated: 2026-09-10 · Language: en
- Canonical page: https://hysenlabs.com/projects/yilewang-llm-for-zotero

## Who llm-for-zotero is for, and the gap it fills

Zotero stores papers and metadata well. It does not read them. The usual workaround is to export a PDF, paste text into a browser chat, then copy the answer back into a note by hand. That loop loses the page location, so a citation in the answer cannot be checked against the source passage.

llm-for-zotero is a plugin that closes that loop inside the reader. The README describes the scope directly: "brings Large Language Models into the Zotero reader, so you can ask questions, summarize papers, inspect figures, compare sources, and save notes without leaving your library." The target user is a researcher who already keeps a Zotero library and wants the model to work against it rather than against a clipboard.

The plugin also goes past single-paper chat. Agent Mode is described as covering library-wide read, search, tagging, metadata, import, note-editing and organization workflows, and it is labelled beta in the README's own heading. That label matters: the chat sidebar and the agent are different products with different risk profiles, and the documentation treats them that way.

## How the plugin connects Zotero to a model

Two halves are visible in the repository. The Zotero side is a standard add-on built from the zotero-plugin-template, with the add-on ID zotero-llm@github.com.yilewang and a preferences prefix of extensions.zotero.llmforzotero. That prefix is where provider settings live, which is why the configuration screen is the first thing you touch.

The model side is deliberately not a single vendor. The README lists four supported provider protocols: responses_api, openai_chat_compat, anthropic_messages and gemini_native. On top of API access, the plugin offers three non-API backends: WebChat, Codex App Server, and Claude Code. Codex App Server is described as the recommended Codex path for ChatGPT Plus subscribers and runs through the local codex app-server runtime, configured from the Agent tab. Claude Code Mode is described as experimental and, in the README's words, "does not yet support native Zotero API operations." That is a real functional gap, not a caveat.

Agent Mode adds a context layer the README calls cache-aware: stable paper context, prior read evidence and coverage state persist across longer research turns, and old transcript history is compacted when the context window fills. Citation labels stay conservative until page locations are verified. This is the most interesting design decision in the project, because it means the plugin would rather show a weaker citation than a confident wrong one.

## Installing the llm-for-zotero plugin and a first paper chat

Installation is a file-based add-on install, not a package manager. Download the latest .xpi from the Releases page, then in Zotero open Tools -> Add-ons -> gear icon -> Install Add-on From File and select the file. Restart Zotero afterwards.

```bash
# No CLI install step exists. The README's Quick Start is:
# 1. Download the latest .xpi from the Releases page
# 2. Zotero: Tools -> Add-ons -> gear icon -> Install Add-on From File
# 3. Restart Zotero
```

After the restart, open Preferences -> llm-for-zotero, pick a provider, and fill in the base URL, key and model name. The README's step is explicit about the verification: click Test Connection. If that fails, nothing downstream will work, so treat it as the gate.

```bash
# Preferences -> llm-for-zotero
# Provider:            <one of responses_api | openai_chat_compat |
#                       anthropic_messages | gemini_native>
# API Base URL:        <your endpoint>
# secret key:          <your key>
# model name:          <your model>
# -> click Test Connection
```

Then open a PDF in Zotero and click the LLM Assistant icon in the right-hand toolbar. The README notes you can configure several providers and models for different jobs, for example a multimodal model for figures and a text model for summaries, and that the conversation panel exposes reasoning levels plus temperature and max_tokens_output.

If you would rather not use an API key at all, the README points to WebChat or Codex App Server as the starting paths instead. For developers, package.json shows the toolchain: npm run start runs zotero-plugin serve, and npm run build runs the build plus a typecheck. The .env.example expects ZOTERO_PLUGIN_ZOTERO_BIN_PATH and ZOTERO_PLUGIN_PROFILE_PATH to be set, with ZOTERO_PLUGIN_DATA_DIR left empty to use Zotero's default data directory.

## Where llm-for-zotero gets in the way

The clearest limitation is stated by the project itself: Agent Mode is beta. Anything that reads, tags, edits notes or reorganizes a library is acting on data you cannot easily reconstruct if the model makes a bad call. The README does not document rollback for agent actions, so there is no described undo path for a tagging or metadata run that goes wrong. Treat that silence as a constraint, not an oversight you can assume away.

The second limitation is Claude Code Mode. It runs Claude Code as a separate conversation system through a companion local bridge, and the README says it does not yet support native Zotero API operations. If your workflow depends on the model touching library objects, that backend is the wrong one today.

The third is version targeting. The badges pin Zotero 7, 8 and 9. If you are on an older Zotero, this plugin is not for you, and the README gives no fallback path.

Finally, cost and privacy are your problem, not the plugin's. The README has a Privacy and Data Flow section, which tells you the authors considered it worth documenting, but the provider you choose determines where your PDF text goes. A local OpenAI-compatible model keeps it on your machine; a hosted API does not. The plugin does not decide that for you.

## How it differs from Zotero GPT and from a standalone chat app

Zotero GPT is the comparison most people reach for, and the difference is architectural rather than cosmetic. A GPT-style plugin typically treats the model as the centre of the interaction: you select text, you get an answer. llm-for-zotero treats the library as the centre and the model as a backend you swap out. That is why it ships four provider protocols and three non-API backends, and why Agent Mode exists at all.

The standalone chat app comparison is sharper. With a browser chat you get a better model and zero integration. With llm-for-zotero you get a weaker model selection surface but citation navigation that jumps back to the matching Zotero passage, and notes that land in Zotero or in a Markdown folder such as Obsidian or Logseq. The README's File-Based Notes feature is the part that a browser chat cannot replicate without manual work.

There is also MinerU PDF parsing, which the README describes as providing higher-fidelity extraction for tables, equations and figures, with support for local mineru-api servers and a file manager for bulk parsing, cache repair, sync packages, tags and parsing filters. If your PDFs are equation-heavy, that path is the reason to prefer this over a generic text-extraction plugin.

## Maintenance, licensing and what upgrading costs you

The repository is not archived, and the last push was on 2026-09-09. Releases are frequent: v3.9.4 on 2026-08-29, v3.9.5 on 2026-08-30, v3.9.6 on 2026-09-09. That cadence cuts both ways. You get fixes quickly, and you also get a moving surface, which is why the release notes are worth reading before you upgrade rather than after.

The licence is AGPL-3.0-or-later, declared in package.json and shown as AGPL v3 in the README badge. For individual researchers this is unremarkable. For anyone embedding the plugin in a distributed product, the network-copyleft terms are the thing to read, and I am not going to give you legal advice on what they require in your case. The practical point is that this is not a permissive licence, and the choice looks deliberate given the project's positioning as an open research tool.

Upgrade cost is mostly configuration drift. The plugin supports multiple providers and models, so a provider that renames a model or changes a protocol leaves you editing Preferences -> llm-for-zotero rather than the code. The .env.example is developer-facing only; end users never touch it. If you are building from source, npm run build runs the build and a typecheck, and npm test chains typecheck, unit tests and workflow tests, so a broken upgrade should surface locally before it reaches your library.

## Conclusion

Adopt it if you already live in Zotero and want paper chat, citation navigation and optional agent workflows without exporting your library elsewhere. Do not adopt it if you need a stable, non-beta agent that edits your library unattended, or if AGPL-3.0 obligations conflict with how you distribute software. Before installing, verify that your Zotero version matches the 7/8/9 target, that your chosen provider's protocol is one of responses_api, openai_chat_compat, anthropic_messages or gemini_native, and that Test Connection succeeds from Preferences -> llm-for-zotero.

## FAQ

### Is there an AI plugin for Zotero?

Yes. llm-for-zotero is a Zotero plugin that adds an LLM assistant to the PDF reader and supports Zotero 7, 8 and 9. It installs from an .xpi file via Tools -> Add-ons -> Install Add-on From File.

### Can ChatGPT be integrated with Zotero?

The README lists WebChat and Codex App Server as paths for ChatGPT users. Codex App Server is described as the recommended Codex path for ChatGPT Plus subscribers and runs through the local codex app-server runtime, configured from the Agent tab.

### How do I download and install the llm-for-zotero plugin?

Download the latest .xpi from the Releases page, then in Zotero open Tools -> Add-ons -> gear icon -> Install Add-on From File, select the .xpi, and restart Zotero. After that, configure a provider under Preferences -> llm-for-zotero and click Test Connection.

### Does llm-for-zotero work without an API key?

The README says that if you do not want to use a provider API key, you should start with WebChat or Codex App Server instead. Both are listed as supported backends alongside standard API providers and local OpenAI-compatible models.

### What licence does llm-for-zotero use?

The project is licensed AGPL-3.0-or-later, as declared in package.json and shown as AGPL v3 in the README badge. The README does not discuss commercial licensing exceptions.

## Sources

- [License: AGPL-3.0](https://github.com/yilewang/llm-for-zotero/blob/main/LICENSE)
- [Project website](https://yilewang.github.io/llm-for-zotero)
- [README](https://github.com/yilewang/llm-for-zotero/blob/main/README.md)
- [Releases](https://github.com/yilewang/llm-for-zotero/releases)
- [yilewang/llm-for-zotero on GitHub](https://github.com/yilewang/llm-for-zotero)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/yilewang-llm-for-zotero
