zotero-pdf-mcp
Provides access to a Zotero library via the web API, including searching items, retrieving metadata and attachments, extracting text from PDFs, and rendering PDF pages as images.
Click on "Deploy 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., "@zotero-pdf-mcpFind the Vujanovic 2017 paper, pull the text, then render pages 4 and 5 as images."
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.
zotero-pdf-mcp
An MCP server that gives Claude access to a Zotero library over the web API, including the ability to look at the PDFs — rendered pages, not just extracted text, so figures, gels, micrographs and layout are visible.
Existing Zotero MCP servers return extracted text only. This one renders pages to PNG and returns them as image content, which is the difference between an assistant that can read a paper's prose and one that can read its figures.
Design constraints
Web API only. Talks to
api.zotero.organd never to the local Zotero client onlocalhost:23119. If your Zotero is set to download attachments on demand, going through the local client would make it fetch and retain files you have deliberately offloaded to Zotero storage. This server cannot cause that.Nothing written to disk. PDF bytes are held in memory, capped at four documents, and discarded when the process exits.
Read-only. Every request is a GET; there are no write operations of any kind. A read-only API key is sufficient.
The credential never leaves Zotero. File downloads redirect to a storage host; the server re-issues that request without the Zotero headers so your API key is not forwarded to a third party.
Attachments stored in Zotero File Storage can be fetched. Linked files cannot —
their bytes only ever existed on the machine that added them. zotero_item_info
reports which is which.
Related MCP server: mcp-zotero
Tools
Tool | Purpose |
| Search the library; returns item keys, authors, years, titles. |
| Full metadata for one item, plus its attachments and whether each is fetchable. |
| Extract text from an item's PDF. Cheap; use this first. |
| Render pages as images. Max 8 per call. This is the one that shows figures. |
Configuration
Add to ~/Library/Application Support/Claude/claude_desktop_config.json inside
the existing mcpServers object:
"zotero-pdf": {
"command": "/opt/homebrew/bin/uvx",
"args": ["--from", "git+https://github.com/USER/zotero-pdf-mcp", "zotero-pdf-mcp"],
"env": {
"ZOTERO_API_KEY": "your_read_only_key",
"ZOTERO_LIBRARY_ID": "your_numeric_userid",
"ZOTERO_LIBRARY_TYPE": "user"
}
}Use the absolute path to uvx (which uvx) rather than the bare command —
GUI-launched processes often do not inherit your shell's PATH, and that is the
most common reason an MCP server silently fails to start.
For a private repo, use git+ssh://git@github.com/USER/zotero-pdf-mcp so the
fetch authenticates with your SSH key.
Environment
Variable | Meaning |
| Read-only key from https://www.zotero.org/settings/keys/new |
| Your numeric userID, printed at the top of the keys page. Not your username. |
|
|
Never commit the key. It belongs in the config's env block and nowhere else.
Usage
Ask for text before pictures — rendering pages is far more expensive than extracting text:
Find the Vujanovic 2017 paper in my library, pull the text, then show me the figures from pages 4 and 5.
Licence
MIT.
Available Tools
4 toolszotero_item_infoB
Full metadata for one item, plus a list of its attachments and whether each one can actually be fetched over the web API.
| Name | Required | Description | Default |
|---|---|---|---|
| item_key | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, and the description does not disclose side effects, read-only nature, or permission requirements. It only hints at availability checking for attachments.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is a single concise sentence that fully captures the tool's purpose without fluff.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Adequate for a simple tool, but lacks parameter explanation and details about the output schema, which is mentioned as existing but not described. Missing behavioral context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The only parameter 'item_key' is not described in the description or schema. The name is somewhat self-explanatory, but its format or expected values are not clarified.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states it returns full metadata for one item and attachment fetch status, distinguishing it from sibling tools like search or PDF operations.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The use case is implied (when you need item metadata for a specific key), but no explicit alternatives or when-not-to-use guidance is given.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zotero_pdf_pagesA
Render pages of an item's PDF as images so figures, plots, gels and layout are visible - not just extracted text.
item_key: parent item key or attachment key pages: '1-4', '2,5,7', '1-3,8' (1-based). Max 8 pages per call. dpi: 100 for a quick look, 150 default, 200+ for dense figures.
| Name | Required | Description | Default |
|---|---|---|---|
| dpi | No | ||
| pages | No | 1-4 | |
| item_key | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are present, so the description carries the burden. It discloses operational limitations like 'Max 8 pages per call' and is a read-only operation by nature, but does not explicitly state it makes no modifications or what side effects, if any, exist.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is compact, with a clear one-sentence purpose followed by a structured parameter breakdown. Every sentence adds value without redundancy.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given there is no output schema, the description is complete: it explains what the tool does, parameter semantics, and call limits. No essential operational information is missing.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
Although the schema itself has no descriptions, the tool description thoroughly explains each parameter (item_key, pages, dpi) with formats and default values, fully compensating for the 0% schema coverage.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
Clearly states the tool's function: rendering PDF pages as images to make visual content visible, contrasting with text extraction. This distinguishes it from sibling tools like zotero_pdf_text.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use it (when visual elements like figures and layout are needed) and provides concrete parameter advice (page ranges, DPI choices). The explicit contrast with 'not just extracted text' gives clear usage direction.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zotero_pdf_textA
Extract text from an item's PDF. Cheap compared with rendering pages - use this first, then zotero_pdf_pages for the pages whose figures matter.
| Name | Required | Description | Default |
|---|---|---|---|
| pages | No | all | |
| item_key | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, but the description mentions 'Cheap compared with rendering pages' and suggests a workflow. This gives some insight into performance characteristics and intended usage, but it does not disclose side effects, permissions, or rate limits. The read-only nature is implied but not explicit.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, consisting of two short sentences that effectively convey the purpose and usage guidance without unnecessary detail. It is well-structured and front-loaded.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given the simplicity of the tool (two parameters, one required) and the presence of an output schema, the description provides enough context for basic usage. However, the lack of parameter explanations and output format details leaves some gaps. The workflow hint partially compensates, but overall it is not fully complete.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The schema provides no descriptions for the parameters (item_key and pages), and the description does not explain what they mean or their expected formats. With 0% schema description coverage and no additional context, the agent has insufficient information to correctly populate these parameters.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Extract text from an item's PDF' with a specific verb and resource, and it distinguishes itself from the sibling tool zotero_pdf_pages by focusing on text extraction rather than rendering pages.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description provides explicit guidance: 'use this first, then zotero_pdf_pages for the pages whose figures matter.' This tells the agent when to use this tool and when to switch to the alternative, making the usage context clear.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
zotero_searchA
Search the Zotero library. Returns matching items with their keys, which the PDF tools take as input.
| Name | Required | Description | Default |
|---|---|---|---|
| limit | No | ||
| query | Yes |
Output Schema
| Name | Required | Description |
|---|---|---|
| result | Yes |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
No annotations are provided, so the description must carry the burden of disclosing side effects. It describes a search operation, which strongly implies read-only behavior, but it does not explicitly state that no modifications occur, nor does it mention permissions or rate limits. This leaves some ambiguity.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is concise, consisting of two clear sentences with no unnecessary details. It front-loads the main purpose and efficiently conveys the core functionality without verbosity.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
The description gives some context by mentioning that the output keys are used by PDF tools, which helps the agent understand the tool's role. However, it does not detail the output structure, pagination, error handling, or query syntax, leaving some gaps in the complete picture of how to use the tool.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
The description does not explain the 'query' or 'limit' parameters at all. It merely says 'Search the Zotero library' without detailing what the query should contain or how limit affects results. Since the schema provides no descriptions either, the parameter semantics are entirely missing.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states 'Search the Zotero library', which specifies the verb ('search') and the resource ('Zotero library'). It also distinguishes this tool from siblings by noting it returns item keys used by PDF tools, making its purpose unambiguous.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies when to use the tool by stating that the returned keys are input for PDF tools, guiding the agent toward this tool for finding items. However, it does not explicitly contrast with alternatives like zotero_item_info or provide conditions for when not to use it, so it is not fully explicit.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
Tool Schema Changelog
Recent tool additions, removals, and schema changes observed during successful MCP inspections.
4 tool updates
v0.1.0- First observed
zotero_item_info - First observed
zotero_pdf_pages - First observed
zotero_pdf_text - First observed
zotero_search
TDQS
Scored across 4 tools
Each tool has a distinct role: searching the library, fetching metadata, rendering PDF pages, and extracting PDF text. There is no overlap between search, metadata, and the two PDF operations.
All tool names follow a consistent zotero_ prefix with a noun-based suffix, and they are readable. Minor deviation is that the PDF tools use 'pdf' as a middle element rather than a pure verb_noun pattern, but the convention is uniform.
Four tools is a compact set covering the core search-to-PDF workflow. It is slightly small but reasonable for a focused MCP server that only needs to support library search, metadata lookup, and PDF reading.
The server covers the main lifecycle of finding a Zotero item and accessing its PDF, and the descriptions explicitly guide chaining tools. Obvious gaps include no attachment listing beyond item_info, no way to retrieve full-text metadata or navigate collections, and no handling of non-PDF attachments, but these are workable for the stated purpose.
Maintenance
Related MCP Connectors
Zotero MCP server for Claude and ChatGPT: search, citations, safe writes, PDF passages and pages.
Academic literature search, retrieval, and private library management on top of OpenAlex.
Search arXiv/Semantic Scholar/OpenAlex + medical evidence (PubMed/Europe PMC) + LaTeX/PDF tools.
Federated search of books and papers, BibTeX/RIS citations, open-access retrieval and reading.
Related MCP Servers
- AlicenseBqualityDmaintenanceAllows AI to interact with your Zotero library.568 npm164MIT
- AlicenseCqualityDmaintenanceEnables interaction with Zotero libraries for searching, managing collections, items, tags, and attachments, plus optional semantic search across PDFs via local embeddings.382MIT
- FlicenseBqualityDmaintenanceEnables AI assistants to search, cite, and manage research references directly from a Zotero library.99-
- AlicenseAqualityDmaintenanceEnables LLM-powered tools to interact with Zotero academic libraries, including searching papers, adding arXiv papers, updating metadata, and generating literature reviews.101MIT