Search arXiv papers, download full text, semantic search, citation graphs, and alerts via MCP.
MCP Zotero is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Unofficial Zotero server: search your library, add papers by DOI, import PDFs, cite in Word
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user --env 'ZOTERO_API_KEY=${ZOTERO_API_KEY}' --env 'ZOTERO_USER_ID=${ZOTERO_USER_ID}' --transport stdio mcp-zotero '--' npx -y @xevos117/mcp-zotero
# 2 — ask your agent for something these tools do
# add_items, add_items_by_doi, add_linked_url_attachment and 12 more
It needs ZOTERO_API_KEY, ZOTERO_USER_ID: this reads them from your environment, so export them first.
MCP Zotero costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Collected from a public index. Nobody has claimed this account, so nothing here was written by its author — claim it if it is yours.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. This one runs on your machine: your client starts MCP Zotero as a process under your own user, with your files and your network, so the tool surface below is what it can do to your computer rather than to a server somewhere else. Its scan result is on the Security tab — read the surface before you approve it.
This is a public server: you run it yourself and this marketplace is not in the path. You need Node.js — the current LTS (24) is the safe choice; npx comes with it. Claude Code registers it in one command; --scope user makes it available in every project. Claude Code reads ZOTERO_API_KEY (Zotero Web API key (zotero.org/settings/keys) with library read/write and file access), ZOTERO_USER_ID (Your numeric Zotero user ID (shown on zotero.org/settings/keys); the default library is this user's) from your environment each time it starts the server, so the value stays out of its config: export them in your shell profile (macOS, Linux), or run setx ZOTERO_API_KEY …, setx ZOTERO_USER_ID … and open a new terminal (Windows). The '--' is in quotes so that PowerShell passes it on.
claude mcp add --scope user --env 'ZOTERO_API_KEY=${ZOTERO_API_KEY}' --env 'ZOTERO_USER_ID=${ZOTERO_USER_ID}' --transport stdio mcp-zotero '--' npx -y @xevos117/mcp-zoteroReconnect, or start a new session, and the tools appear in the model’s tool list.
It reaches a system of yours, so it needs your own credential rather than the publisher’s: ZOTERO_API_KEY — Zotero Web API key (zotero.org/settings/keys) with library read/write and file access; ZOTERO_USER_ID — Your numeric Zotero user ID (shown on zotero.org/settings/keys); the default library is this user's. You set them in your own client’s config, on your machine — this marketplace never holds it.
One config entry your client uses to start the process locally. A local server runs with your file system and your network, which is why it is priced without metering.
15 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Read from its source code. A server that builds its tool list when it starts can list more tools than this.
Add items to Zotero by providing metadata directly. Supports ALL 37 Zotero item types. WHEN TO USE: - For items that do not have a DOI (books, theses, reports, etc.) - When you need full control over metadata (e.g., override a title, set a specific itemType, add custom fields) — even if a DOI…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| items | array | yes | Array of items to add. Each item must have itemType and title. Additional fields depend on the item type. |
| collection_key | yes | — | |
| tags | array | no | Tags to apply to all items |
Add items to your Zotero library by resolving DOIs. Works with ANY item type that has a DOI — journal articles, books, datasets, preprints, conference papers, reports, etc. For each DOI, resolves metadata via content negotiation and creates the item in Zotero with the correct type automatically.…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| dois | array | yes | Array of bare DOIs (e.g. ["10.1038/s41586-023-06647-8"], without "https://doi.org/"). Each DOI will be resolved and added to Zotero. |
| collection_key | yes | — | |
| tags | array | no | Tags to apply to all added items |
| auto_attach_pdf | boolean | no | Attach open-access PDFs found via Unpaywall (default: true; needs UNPAYWALL_EMAIL in the server settings, uses the user's Zotero file storage). Leave enabled unless the user does not want PDFs or atta |
Attach a linked URL to an existing Zotero item, or create a standalone linked-URL attachment. Use this to link external PDFs, web pages, or other resources to items already in your library. If parent_item is provided, the attachment is added as a child; otherwise it is standalone. A linked URL…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| url | string | yes | URL of the resource to link |
| title | string | no | Display title for the attachment (defaults to the URL) |
| content_type | string | no | MIME type of the linked resource (e.g. "application/pdf", "text/html") |
| parent_item | yes | — | |
| collections | array | no | Collection keys to add the attachment to (only used for standalone attachments, ignored when parent_item is set) |
| tags | array | no | Tags to apply to the attachment |
Create a new collection (folder) in your Zotero library. Optionally nest it under a parent collection. Returns the new collection key and name. Use the key as collection_key in add_items_by_doi or add_items to organize imported papers.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| name | string | yes | Name of the new collection |
| parent_collection | yes | — |
Delete a collection (folder) from your Zotero library; confirm with the user first. Items inside the collection are NOT deleted — they remain in your library. Disabled unless the server setting UNSAFE_OPERATIONS is 'all'.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_key | yes | — |
Delete one or more items from your Zotero library: they are permanently deleted (not moved to the Zotero trash), so confirm with the user first. Accepts up to 50 item keys per call. Disabled unless the server setting UNSAFE_OPERATIONS is 'items' or 'all'.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| item_keys | array | yes | Array of Zotero item keys to delete (e.g. ["EUHUT5K3", "F9UQM7N2"]). Max 50 per call. |
For each Zotero item, check Unpaywall for open access PDFs and attach them. Items must have a DOI; needs UNPAYWALL_EMAIL in the server settings. Uploads use the user's Zotero file storage; dry_run only reports what is available. Uses the same source as Zotero Desktop's 'Find Available PDFs'.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| item_keys | array | no | Array of Zotero item keys to process (mutually exclusive with collection_key) |
| collection_key | yes | — | |
| skip_if_attachment_exists | boolean | no | Skip items that already have a PDF attachment |
| dry_run | boolean | no | Only report which PDFs are available without downloading/attaching |
Get all items in a specific Zotero collection (only items directly in it, not those in its subcollections). Returns item keys, titles, authors, and dates. Use the collectionKey from get_collections. Use the returned item keys with get_items_details, get_item_fulltext, or inject_citations.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collectionKey | yes | — | |
| excludeAttachments | boolean | no | Exclude attachment and note items (default: true). Set false to list them too. |
List all collections (folders) in your Zotero library. Returns collection keys, names, and parent relationships. Use collection keys with get_collection_items or as parent_collection in create_collection. Trashed collections are excluded by default.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| include_trashed | boolean | no | Include trashed (deleted) collections. Default false. |
Get the text of a Zotero item's stored PDF from Zotero's full-text index. Works for PDFs indexed by Zotero desktop and synced, or imported with import_pdf_to_zotero / find_and_attach_pdfs; not for linked URLs or web pages. Use this to read the full content of papers instead of relying on abstracts.
| Parameter | Type | Required | Notes |
|---|---|---|---|
| item_key | yes | — | |
| max_characters | integer | no | Maximum characters to return: a positive integer, or 0 for no limit (default: 50000); truncated: true in the result when cut |
Get metadata for multiple Zotero items in a single call. Accepts an array of item keys and returns a map of key → metadata. Use this instead of one call per item. Returns all type-specific fields (e.g. bookTitle for bookSection, proceedingsTitle for conferencePaper, university for thesis). Set…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| item_keys | array | yes | Array of Zotero item keys (e.g. ["EUHUT5K3", "F9UQM7N2"]). Get these from search_library, add_items_by_doi, or get_collection_items. |
| include_abstract | boolean | no | Include abstractNote in the response. Default false to keep responses lightweight. |
Returns the Zotero library configured in the server environment: user_id, library_type, library_id and library_path ("users/<id>" or "groups/<id>"). Pass library_path to the zotero-mcp-integrations skill script (inject.js) to generate Zotero field code URIs. Not needed when using the…
No parameter schema on file.
Download a PDF from a URL and upload it to Zotero storage as an imported_url attachment. Unlike linked URL attachments, imported files are stored in Zotero's storage and become fulltext-indexed (searchable via get_item_fulltext). Use this when you need the PDF content to be indexed by Zotero. The…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| url | string | yes | URL of the PDF to download and import |
| filename | string | no | Filename for the attachment (default: extracted from URL or document.pdf) |
| title | string | no | Display title for the attachment (default: filename) |
| content_type | string | no | MIME type recorded on the attachment (default: "application/pdf"). This tool imports PDFs only: the downloaded file must start with %PDF- or the import is rejected, whatever this value says. Full text |
| parent_item | yes | — | |
| collections | array | no | Collection keys (only used for standalone attachments, ignored when parent_item is set) |
| tags | array | no | Tags to apply to the attachment |
Replace <zcite> placeholder tags in a .docx file with native Zotero field codes that Zotero for Word can recognize and manage. The tool fetches item metadata from Zotero automatically — you only need to provide the .docx file. WORKFLOW — how to create a Word document with live Zotero citations:…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| file_path | string | yes | Absolute path to the .docx file containing <zcite keys="..."/> placeholder tags |
| style | string | no | Citation style for the visible placeholder text. Zotero will reformat on refresh. Default: apa |
Search your Zotero library or list items sorted by a field. When 'query' is provided, matches it against titles, creator names and years (not abstracts, tags or full text). When 'query' is omitted, lists items sorted by the chosen field (default: dateAdded, descending). Examples: - Search: {…
| Parameter | Type | Required | Notes |
|---|---|---|---|
| query | string | no | Search query. If omitted, returns items sorted by the chosen field. |
| sort | string | no | Field to sort by (default: dateAdded) |
| direction | string | no | Sort direction (default: desc) |
| limit | integer | no | Maximum number of items to return, 1-100 (default: 25; above 100 returns 100) |
- Every tool, no call limit
- No card, and mcprush charges nothing for it
- Source published under MIT
- Runs on your machine — nothing of it reaches our gateway
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install MCP Zotero or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | minimal | capability blast radius (minimal) — client exposure if the model is manipulated | −0 |
| verification-discount | source | publisher verification (provenance) — cryptographic build provenance ties the artifact to its source | −0 |
| coverage-honesty | source | inspection depth (source) — how much of the target the scan could see | −0 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
No tools were enumerated, so prompt-injection, capability and toxic-flow analysis had no tool surface to inspect. To grade a package’s real runtime tools, scan the running server: --command "npx -y <package>".
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. minimal is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| No per-tool rows for this release — see the note below. | ||
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
The public result for this release does not print the flow graph, so there is nothing to show here. That is not the same as "no paths were found": what the scan did read is above, under coverage.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
Always latest — the install command names no version, so it installs the newest release when it runs; the current release on file is 2.0.4. Pin a release below and the command asks for exactly that one.
No release note was published with this version.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish MCP Zotero can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.