Save structured fields extracted from papers
zotero_save_extractionSaves structured paper extractions as tagged child notes in Zotero, storing named fields, values, source quotes, and verification verdicts so reviews stay readable and machine-readable.
Instructions
Save a structured extraction (named fields with values, such as sample_size, method, country, outcome) for one or many papers, as a child note on each paper: a readable table plus a machine-readable copy, tagged "zoteus-extraction". Zotero has no custom fields; a note syncs and anyone can read it in Zotero. YOU read the paper (zotero_get_fulltext) and supply the values: this server has no language model. Give each value the verbatim quote it rests on, and its page: when the paper's full text is available (Zotero's index, or the PDF or EPUB itself) the quote is checked against it and the verdict ("verified", "not-found" or "unchecked", with the page it was found on when known) is stored beside the value. A quote that was not found is still saved, and named in the result, so you can correct it. schema names the extraction (e.g. "rct-review"): one note per paper and schema. Saving again for the same paper and schema UPDATES that note in place: fields you send replace fields of the same name, a null value removes a field, fields you do not mention are kept (pass replace_all:true to drop them), and the result lists every replaced and removed value with what it was. Nothing else in the library is touched. Read the extractions back as one table with zotero_extraction_table. Writes go to the running Zotero desktop app (Zotero 10+) for every library it holds, otherwise to the cloud Web API.
Tool call template
Replace each placeholder with a value matching the input schema. Only required parameters are included; add optional parameters as needed.
{
"id": 1,
"jsonrpc": "2.0",
"method": "tools/call",
"params": {
"arguments": {
"schema": "<schema>",
"items": "<items>"
},
"name": "zotero_save_extraction"
}
}Input Schema
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | One entry per paper, at most 50. | |
| schema | Yes | Name of the extraction schema, e.g. "rct-review". Papers saved under the same name form one table. | |
| library_id | No | Numeric id of the library to address, e.g. 5234875 for a group (zotero_groups lists the ids you can reach). Omit to use the configured default library; an id given without library_type is read as a group id. | |
| replace_all | No | Drop fields already saved for a paper that this call does not mention (default false: they are kept). | |
| library_type | No | Which library to address: "user" (a personal library) or "group" (a shared group library). Omit to use the library this server is configured for. "group" on its own is refused: pass library_id with it. | |
| verify_quotes | No | Check each quote against the paper's full text (default true). Off skips reading the text and stores quotes as "unchecked". |
Output Schema
| Name | Required | Description | Default |
|---|---|---|---|
| items | Yes | One entry per paper, in the order given. | |
| saved | Yes | Papers whose note was created or updated. | |
| failed | Yes | Papers that failed. | |
| schema | Yes | The schema saved under. | |
| target | No | Where the write went: "local" (Zotero desktop local API), "desktop" (connector protocol) or "cloud" (Zotero Web API). |