Skip to content
Agentmart
Submit a tool

Cite Caddy

Remote MCP server for full read/write access to a Zotero library

Connector by citecaddy.herbertkokholm.dk · Domain verified by the MCP Registry

IndexedMITRemote (HTTP)
Write a review

Chalk Labs

Need help deploying Cite Caddy?

Chalk Labs sets up agents like this inside real teams: connected to your tools, tested on your data, with a human in the loop where it matters.

Book a call

Install

Works with Claude Code, VS Code, Cursor, Windsurf. Read the repository before you give any tool access to your data.

npx agentmarket install connector/citecaddy-herbertkokholm-dk-cite-caddy

Asks which of your tools to add it to (Claude Code, Codex, Cursor, VS Code, Windsurf, Gemini CLI, Claude Desktop) and shows the change first. See https://agentmart.dev/cli.

Remote endpoint

  • https://citecaddy.herbertkokholm.dk/mcp Remote (HTTP)

Get the weekly diff

The weekly diff: one email a week with new agent tools, notable updates and grade changes, plus security alerts for tools you follow. Double opt-in, one-click unsubscribe.

We use your email only for this newsletter. Privacy

About

Remote MCP server for full read/write access to a Zotero library

No reviews yet. Installed it? Reviews come from verified installers only. How reviews work

Permissions

What this server can do and what it asks for, from its tool list and install config. Checked Oct 25, 2026.

Tools
17 read · 13 write · 9 delete
Secrets
None asked for
Install scripts
Nothing to install (hosted)
Runs as
Hosted (remote endpoint)

Tools by what they do 39

Read from the source code; the running server may list different tools.

Read 17 · Look things up without changing anything.

  • download_attachment
  • export_bibliography
  • get_fulltext
  • get_item
  • list_attachments
  • list_collections
  • list_creator_fields
  • list_groups
  • list_item_creator_types
  • list_item_fields
  • list_item_type_fields
  • list_item_types
Show 5 more tools
  • list_notes
  • list_saved_searches
  • list_tags
  • list_trash
  • search_items

Write 13 · Create, change, send or run things.

  • add_tags
  • add_to_collection
  • create_collection
  • create_item
  • create_note
  • create_saved_search
  • rename_tag
  • set_tags
  • update_collection
  • update_item
  • update_note
  • update_publication_status
Show 1 more tools
  • upload_attachment

Delete 9 · Delete, drop, revoke or wipe things.

  • delete_collection
  • delete_item_permanently
  • delete_saved_search
  • delete_tag
  • move_item_to_different_library
  • remove_from_collection
  • remove_tags
  • restore_from_trash
  • trash_item

Network hosts it talks to 1

  • citecaddy.herbertkokholm.dk · found in remote endpoint, install command

Files it touches

  • Any path the agent passes to its tools

Tools (39)

Read from the source code; the running server may differ. Descriptions are the server’s own words; hidden characters are shown as [U+…].

  • add_tagsAdd Tags to Zotero Item

    Add one or more tags to an item, keeping its existing tags. Safe, key-preserving. version: the item's current version (see update_item).

  • add_to_collectionAdd Item to Zotero Collection

    File an item into a collection, in addition to any it's already in. Safe, key-preserving reorganization within the same library -- prefer this over move_item_to_different_library whenever the goal is just organizing, not actually relocating to a different library. version: the item's current version (see update_item).

  • create_collectionCreate Zotero Collection

    Create a new collection, optionally nested under parent_key. Safe.

  • create_itemCreate Zotero Item

    Add a new item to the library. Safe: creates a brand-new key, never touches an existing one. item_type: a Zotero item type, e.g. "journalArticle", "book", "report", "webpage", "conferencePaper". fields: bibliographic fields for that type, e.g. {"title": "...", "date": "2024", "DOI": "10.1/x", "url": "...", "abstractNote": "...", "publicationTitle": "..."}. Which fields are valid depends on item_type; an invalid field raises an error naming the problem. creators: e.g. [{"creatorType": "author", "firstName": "Ada", "lastName": "Lovelace"}]. tags: plain tag strings. collectio…

  • create_noteCreate Item Note

    Add a new note as a child of an existing item (e.g. a research note attached to a journalArticle). Safe: creates a brand-new note item with its own key; never touches the parent item's own fields or version. content: the note's body, as Zotero-flavored HTML (e.g. "<p>Some observation.</p>") -- Zotero derives the note's display title from the first line of this content. tags: plain tag strings.

  • create_saved_searchCreate Zotero Saved Search

    Create a new saved search. Safe: creates a brand-new key, never touches an existing one. conditions: a list of dicts, each with exactly the keys "condition", "operator", "value", e.g. [{"condition": "itemType", "operator": "is", "value": "journalArticle"}]. Which condition/operator combinations are valid is Zotero-defined and fairly extensive; an invalid combination raises an error naming the problem.

  • delete_collectionDelete Zotero Collectioncan change or delete data

    DESTRUCTIVE -- permanently deletes the collection. Matches Zotero's own "Delete Collection" behavior: any sub-collections nested under it are deleted too, cascading -- but items filed in it (or in a deleted sub-collection) are NOT deleted from the library, only unfiled from that collection. There is no confirmation step at this layer; check list_collections for sub-collections first if that matters before calling this. version: the collection's current version (from list_collections) -- the delete is refused if this doesn't match the server's current version. idempotency_key: optional opaque…

  • delete_item_permanentlyDelete Zotero Item Permanentlycan change or delete data

    DESTRUCTIVE -- permanently deletes the item from its library. Cannot be undone through this server. Any Word document citing this item via the Zotero Word plugin's live field code references it by this key; deleting it breaks that citation silently -- the document won't show an error, it'll just show stale or broken text next time someone updates fields. Only call this when that's a known, accepted consequence, not as a routine cleanup step. version: the item's current version (from search_items/get_item) -- the delete is refused if this doesn't match the server's current version, so a concu…

  • delete_saved_searchDelete Zotero Saved Searchcan change or delete data

    DESTRUCTIVE, but low-risk -- permanently deletes this saved search definition. Unlike delete_item_permanently/delete_collection, this doesn't touch any items or their citations -- a saved search is just a stored filter, not a container. idempotency_key: optional opaque string; if a call with this exact key already completed, that same outcome is replayed instead of running against Zotero again -- see delete_item_permanently's docstring for the full explanation.

  • delete_tagDelete Zotero Tagcan change or delete data

    DESTRUCTIVE -- permanently removes this tag from every item in the library that carries it (not one item -- see remove_tags for that). Cannot be undone through this server. Unlike delete_item_permanently/delete_collection, this has no caller-supplied version to check -- Zotero's tag-delete endpoint is gated on the library's own version internally. idempotency_key: optional opaque string; if a call with this exact key and tag already completed, that same outcome is replayed instead of running against Zotero again -- see delete_item_permanently's docstring for the full explanation.

  • download_attachmentDownload Attachmentread-only

    Download an attachment's file content (see list_attachments for keys). Read-only. Returns `content_base64` -- this server runs remotely, so raw bytes travel as a base64 string rather than a local file path; decode it to reconstruct the file.

  • export_bibliographyExport Bibliography or Citationsread-only

    Generate formatted bibliography/citation entries or portable export data for one or more items. Read-only. keys: item keys (see search_items/get_item). Keys not found in the library are simply absent from the result -- not an error. style: a Zotero/CSL style ID (e.g. "apa", "modern-language-association", "chicago-note-bibliography") -- only used when format is "bibliography" or "citation"; ignored otherwise. An unknown style raises an error naming the problem. format: "bibliography" (default) -- HTML reference-list entries, one per found key, in `style`. "citat…

  • get_fulltextGet Attachment Full Textread-only

    Fetch Zotero's extracted full-text content and indexing progress for an attachment (see list_attachments for keys). Only meaningful for attachments Zotero has indexed -- PDFs/text files with extracted text -- not e.g. images; raises an error if there's no indexed full text for this key. Read-only.

  • get_itemGet Zotero Itemread-only

    Fetch one item by key. Read-only. Use this to get an item's current `version` right before a mutating call, if you don't already have a fresh one from search_items. `creators` is a list of {creatorType, firstName, lastName} (or {creatorType, name} for single-field/ institutional creators) entries -- see search_items' docstring.

  • list_attachmentsList Item Attachmentsread-only

    List the file attachments (PDFs, snapshots, etc.) filed under an item -- not its notes. Read-only. Each result's `key` can be passed to download_attachment or get_fulltext.

Show 24 more tools
  • list_collectionsList Zotero Collectionsread-only

    List all collections in the library (key, name, parent_collection). Read-only.

  • list_creator_fieldsList Zotero Creator Fieldsread-only

    List the name-shape fields Zotero recognizes on a `creators` entry (e.g. "firstName", "lastName", "name") -- for building creators entries in create_item/update_item's `creators` argument. Distinct from list_item_creator_types, which lists creatorType *roles* (author, editor, ...) rather than name fields. Read-only.

  • list_groupsList Zotero Groupsread-only

    List the Zotero groups the configured API key's user account belongs to. Read-only. Each result's `id` can be passed as target_library_id (with target_library_type="group") to move_item_to_different_library, if the group you want isn't this server's own configured library.

  • list_item_creator_typesList Creator Types for a Zotero Item Typeread-only

    List the valid `creatorType` values (e.g. "author", "editor") for one item type -- for create_item/update_item's `creators` entries, e.g. {"creatorType": "author", ...}. Read-only.

  • list_item_fieldsList Zotero Item Fieldsread-only

    List every bibliographic field Zotero recognizes across all item types combined -- not which fields are valid for one specific type (see list_item_type_fields for that, which is what create_item actually needs). Read-only.

  • list_item_type_fieldsList Fields for a Zotero Item Typeread-only

    List the bibliographic fields valid for one item type -- only these keys are valid in create_item/update_item's `fields` argument for this item_type; anything else raises a validation error. Read-only.

  • list_item_typesList Zotero Item Typesread-only

    List every Zotero item type (e.g. "book", "journalArticle", "webpage") -- valid values for create_item's item_type argument. Read-only.

  • list_notesList Item Notesread-only

    List the notes filed under an item -- not its file attachments (see list_attachments for those). Read-only. Each result includes full note content and `version` -- pass both to update_note.

  • list_saved_searchesList Zotero Saved Searchesread-only

    List saved searches -- Zotero's own stored search definitions (visible in the desktop app's left-hand pane), not ad-hoc calls to search_items. Read-only. Each result's `key` can be passed to delete_saved_search.

  • list_tagsList Zotero Tagsread-only

    List distinct tags used anywhere in the library -- not one item's tags (see search_items/get_item for those). Read-only. query: substring filter on tag name, or omit to list all tags. limit/start: pagination (default limit 100).

  • list_trashList Zotero Trashread-only

    List items currently in the trash -- soft-deleted (e.g. via the Zotero desktop app's "Move to Trash", or trash_item), but not yet permanently gone. Read-only. Each result's `key`/`version` can be passed to restore_from_trash. limit/start: pagination (default limit 25). `creators` shape matches search_items/get_item.

  • move_item_to_different_libraryMove Zotero Item to Different Librarycan change or delete data

    DESTRUCTIVE -- moves an item to a different Zotero library (e.g. from this user library into a group library, or vice versa). Zotero has no native cross-library move: this recreates the item in the target library under a BRAND-NEW key, then deletes the original. Any Word citation referencing the original key is broken by this, exactly like delete_item_permanently -- silently and permanently. If the goal is just reorganizing within THIS library, use add_to_collection/remove_from_collection instead -- those preserve the key and citations keep working. target_library_id/target_library_type: the…

  • remove_from_collectionRemove Item from Zotero Collection

    Remove an item from one collection; it stays in the library and any other collections it's filed under. Safe, key-preserving. version: the item's current version (see update_item).

  • remove_tagsRemove Tags from Zotero Item

    Remove one or more tags from an item; other tags are kept. Safe, key-preserving. version: the item's current version (see update_item).

  • rename_tagRename Zotero Tag

    Rename a tag across every item in the library that carries it (not just one item -- see add_tags/remove_tags/set_tags for single-item edits). Zotero has no native tag-rename: this adds new_tag and removes old_tag on each affected item individually, merging with each item's existing tags. Not atomic across items -- if it fails partway through (e.g. a concurrent edit on one item), re-run with the same arguments; already-renamed items are skipped since they no longer carry old_tag.

  • restore_from_trashRestore Zotero Item from Trash

    Remove an item from the trash, restoring it to the library. Safe, key-preserving. version: the item's current version (from list_trash).

  • search_itemsSearch Zotero Itemsread-only

    Search the Zotero library. Read-only. query: substring match against title/creator/year (Zotero's quick search), or omit to list items. item_type: filter to one Zotero item type, e.g. "journalArticle", "book", "report", "webpage". tag: filter to items carrying this exact tag. collection_key: filter to items filed in this collection (see list_collections). limit/start: pagination (default limit 25). full_text: also match `query` against the indexed content of attached files and notes, not just title/creator/year (Zotero's qmode="everything"). Slower than the default search.…

  • set_tagsSet Zotero Item Tags

    Replace ALL of an item's tags with exactly this list (not merged -- use add_tags/remove_tags to change tags incrementally instead). Safe, key-preserving. version: the item's current version (see update_item).

  • trash_itemMove Zotero Item to Trashcan change or delete data

    Move an item to the trash (soft delete). Unlike delete_item_permanently, this is reversible via restore_from_trash -- prefer it whenever a delete might need to be undone. Safe, key-preserving: the item's key is unchanged, so a Word citation referencing it keeps resolving unless/until it's later permanently deleted (e.g. via delete_item_permanently, or "Empty Trash" in the Zotero desktop app). version: the item's current version (from search_items/get_item) -- refused if stale, same as update_item.

  • update_collectionRename or Move Zotero Collection

    Rename and/or move (reparent) a collection, in place. Safe: the collection's key is unchanged, so items filed in it and any sub-collections stay put. name: new name; omit to leave the current name unchanged. parent_key: new parent collection's key, to nest this collection under it; pass "" (empty string) to move it to the top level (out of any parent); omit entirely to leave the parent unchanged. At least one of name/parent_key must be given. version: the collection's current version (from list_collections) -- refused if stale, same as update_item.

  • update_itemUpdate Zotero Item Fields

    Edit bibliographic fields (title, date, DOI, url, abstractNote, publicationTitle, creators, etc.) on an existing item, in place. Safe: the item's key is unchanged, so any Word citation referencing it keeps working. `creators` (if included) replaces the whole author/editor list -- e.g. [{"creatorType": "author", "firstName": "Ada", "lastName": "Lovelace"}], not a merge into the existing list. version: the item's current version (from search_items/get_item) -- the edit is refused if this doesn't match the server's current version (someone else changed the item since you read it; re-fetch and re…

  • update_noteUpdate Item Note

    Edit a note's content, in place. Safe, key-preserving. version: the note's current version (from list_notes).

  • update_publication_statusUpdate Zotero Item Publication Status

    Update an item in place to reflect that a preprint has been formally published -- e.g. an arXiv preprint that just received a journal DOI. Same key-preserving patch as update_item (Word citations keep working) -- prefer this or update_item over deleting and recreating the item whenever a preprint's status changes. Unlike update_item, `item_type` may also be passed to change the item's Zotero type (e.g. "preprint" -> "journalArticle") -- update_item forbids that because it changes which fields are valid; this is the one tool where that's the deliberate point of the call. fields: same rules as…

  • upload_attachmentUpload Attachment

    Upload a new file attachment as a child of an existing item (e.g. attach a PDF to a journalArticle item). Safe: creates a brand-new attachment item with its own key; never touches the parent item's own fields or version. filename: name to store the file under, e.g. "paper.pdf" -- also used to guess Zotero's contentType from the extension. content_base64: the file's bytes, base64-encoded. This server runs remotely and has no access to the caller's local filesystem, so content must travel as a string rather than a local path. title: attachment title shown in Zotero; defaults to file…

Signals

Stars
0
Forks
1
Open issues
4
Last commit
Oct 15, 2026 (16 days ago)
Last release
Oct 12, 2026 (19 days ago)

From GitHub (fetched Oct 24, 2026).

Details

Registry name
dk.herbertkokholm.citecaddy/cite-caddy
Version
2.3.11
Auth
Auth not stated
License
MIT
First seen
Oct 24, 2026
Last checked
Oct 25, 2026

Done for you

Rather not set it up yourself?

Chalk Labs scopes, builds and runs agents for your team: the task audit, the eval harness, the integrations and the weekly ops report. Fixed scope, priced before we start.

See how we build AI agents →Read the case studies

Chalk Labs is a two-founder AI and growth studio. We build AI agents, CRMs and MVPs for Web3 and AI companies, and have shipped 50+ product and token launches.

launches shipped
50+
launches shipped
media placements
500+
media placements
founders on every account
2
founders on every account

Press we've placed: Forbes · CoinDesk · Decrypt · Cointelegraph · The Block

Rahil Jain, Co-founder, Chalk Labs. Ex-Goldman Sachs engineer. You talk to the person who builds it.

Get Cite Caddy running in your business

Tell us what you want to automate. A founder replies within one working day with a plan, not a pitch deck.

Goes to the Chalk Labs founders, not the newsletter. Privacy

Need help deploying Cite Caddy?

CallGet help
Cite this page

Cite Caddy MCP server. Agent Mart. https://agentmart.dev/connectors/citecaddy-herbertkokholm-dk-cite-caddy (last updated 2026-10-25)