Skip to main content
Glama

Import items by identifier or URL

zotero_import

Resolve a DOI, ISBN, PMID, arXiv ID, or web URL into Zotero-ready citations, and optionally save them directly to your Zotero library.

Instructions

Resolve bibliographic metadata to Zotero item-data and optionally save it to your library. action: "by_identifier" resolves a DOI, ISBN, PMID, arXiv id, or ADS bibcode (set identifier); action: "by_url" scrapes a web page (set url) and may return multiple choices to pick from. Set save_to_library:true (and optionally collection_key) to persist the resolved items — saved into the running Zotero desktop app when available, otherwise via the cloud Web API (requires ZOTERO_API_KEY); otherwise the resolved metadata is returned without saving. When a Zotero translation-server is reachable (ZOTEUS_TRANSLATION_SERVER_URL, default http://127.0.0.1:1969) it is the primary path; if none is running, DOI and arXiv ids fall back to built-in resolution (OpenAlex/Crossref and the arXiv API respectively) — the result then carries a source field ("scholar" or "arxiv"). ISBN/PMID/bibcode and web URLs require a translation-server.

Input Schema

TableJSON Schema
NameRequiredDescriptionDefault
urlNoWeb page URL to scrape (needs a translation-server).
actionYes
attach_urlNoFile URL (e.g. an arXiv PDF) to download and attach as a stored attachment to the (single) imported item. Works on every save path: the desktop app when one is reachable, otherwise the cloud Web API.
identifierNoDOI (10.…), arXiv id (YYMM.NNNNN), ISBN, PMID, or ADS bibcode.
library_idNo
attach_titleNoTitle for the attached file, e.g. "Full Text PDF".
library_typeNo
collection_keyNoCollection to add saved items to: an 8-char collection key or a Zotero treeViewID like "C20".
save_to_libraryNoPersist the resolved items — into the running Zotero desktop app when available, otherwise the cloud Web API (needs a cloud key).

Schema Changelog

Changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. Changed1 schema field changedv1.6.0
    • changedInput schema / properties / attach_url / description
      Previous value: -"File URL (e.g. an arXiv PDF) to download and attach as a stored attachment to the (single) imported item when saving to the desktop app."New value: +"File URL (e.g. an arXiv PDF) to download and attach as a stored attachment to the (single) imported item. Works on every save path: the desktop app when one is reachable, otherwise the cloud Web API."
  2. Changed6 schema fields changedv1.3.1
    • addedInput schema / properties / attach_title
      Added value: +{
      +  "description": "Title for the attached file, e.g. \"Full Text PDF\".",
      +  "type": "string"
      +}
    • addedInput schema / properties / attach_url
      Added value: +{
      +  "description": "File URL (e.g. an arXiv PDF) to download and attach as a stored attachment to the (single) imported item when saving to the desktop app.",
      +  "format": "uri",
      +  "type": "string"
      +}
    • changedInput schema / properties / collection_key / description
      Previous value: -"Collection to add saved items to."New value: +"Collection to add saved items to: an 8-char collection key or a Zotero treeViewID like \"C20\"."
    • changedInput schema / properties / identifier / description
      Previous value: -"DOI / ISBN / PMID / arXiv id / ADS bibcode."New value: +"DOI (10.…), arXiv id (YYMM.NNNNN), ISBN, PMID, or ADS bibcode."
    • changedInput schema / properties / save_to_library / description
      Previous value: -"Persist the resolved items (needs a cloud key)."New value: +"Persist the resolved items — into the running Zotero desktop app when available, otherwise the cloud Web API (needs a cloud key)."
    • changedInput schema / properties / url / description
      Previous value: -"Web page URL to scrape."New value: +"Web page URL to scrape (needs a translation-server)."
  3. First observedv1.0.4

TDQS

A4.6/5.0
Behavior5/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The annotations only provide `readOnlyHint: false`, `destructiveHint: false`, and `openWorldHint: true`. The description adds essential behavioral context: optional persistence, desktop-vs-cloud path selection, API-key requirement, translation-server dependency, fallback behavior for DOI/arXiv, and the `source` field on results. There is no contradiction with the annotations.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is dense but every clause earns its place: action modes, save behavior, server dependency, fallback logic, and auth requirements are all covered without redundancy. It is front-loaded with the core purpose and then layers conditional details naturally.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 9-parameter tool with no output schema, this description covers the major decision paths: identifier vs URL, save vs no-save, local vs cloud, server vs fallback. It also hints at output shape with `source` and multiple-choice results. Some optional parameters are not elaborated and the full return format is only partially described, leaving minor gaps.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The description enriches key parameters: `action` is fully explained with routing behavior, `identifier` gets the list of accepted formats, and `save_to_library` is clarified with persistence semantics and cloud-key requirements. Schema coverage is 67%, and the description compensates for much of that gap, though `library_id`, `library_type`, and `attach_title` remain less explained.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The first sentence states a specific verb and resource: "Resolve bibliographic metadata to Zotero item-data and optionally save it to your library." It then distinguishes the two modes (`by_identifier` vs `by_url`) clearly. This separates it from sibling tools like `zotero_create_items` or `zotero_search_items` without ambiguity.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description gives excellent when-to-use guidance: when to use `by_identifier` vs `by_url`, when saving happens, when the desktop app vs cloud API is used, and when a translation-server is required versus built-in fallback. It does not explicitly name sibling tools as alternatives, so the exclusions are slightly less direct than ideal.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/oscardvs/zoteus'

If you have feedback or need assistance with the MCP directory API, please join our Discord server