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
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.
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/mcpRemote (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.
About
Reviews
Write a reviewNo 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_attachmentexport_bibliographyget_fulltextget_itemlist_attachmentslist_collectionslist_creator_fieldslist_groupslist_item_creator_typeslist_item_fieldslist_item_type_fieldslist_item_types
Show 5 more tools
list_noteslist_saved_searcheslist_tagslist_trashsearch_items
Write 13 · Create, change, send or run things.
add_tagsadd_to_collectioncreate_collectioncreate_itemcreate_notecreate_saved_searchrename_tagset_tagsupdate_collectionupdate_itemupdate_noteupdate_publication_status
Show 1 more tools
upload_attachment
Delete 9 · Delete, drop, revoke or wipe things.
delete_collectiondelete_item_permanentlydelete_saved_searchdelete_tagmove_item_to_different_libraryremove_from_collectionremove_tagsrestore_from_trashtrash_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 ItemAdd 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 CollectionFile 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 CollectionCreate a new collection, optionally nested under parent_key. Safe.
create_itemCreate Zotero ItemAdd 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 NoteAdd 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 SearchCreate 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 dataDESTRUCTIVE -- 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 dataDESTRUCTIVE -- 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 dataDESTRUCTIVE, 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 dataDESTRUCTIVE -- 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-onlyDownload 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-onlyGenerate 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-onlyFetch 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-onlyFetch 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-onlyList 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-onlyList all collections in the library (key, name, parent_collection). Read-only.
list_creator_fieldsList Zotero Creator Fieldsread-onlyList 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-onlyList 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-onlyList 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-onlyList 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-onlyList 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-onlyList every Zotero item type (e.g. "book", "journalArticle", "webpage") -- valid values for create_item's item_type argument. Read-only.
list_notesList Item Notesread-onlyList 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-onlyList 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-onlyList 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-onlyList 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 dataDESTRUCTIVE -- 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 CollectionRemove 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 ItemRemove 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 TagRename 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 TrashRemove 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-onlySearch 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 TagsReplace 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 dataMove 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 CollectionRename 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 FieldsEdit 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 NoteEdit a note's content, in place. Safe, key-preserving. version: the note's current version (from list_notes).
update_publication_statusUpdate Zotero Item Publication StatusUpdate 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 AttachmentUpload 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
- Repository
- github.com/herbertkokholm/cite-caddy
- 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.
Cite this page
Cite Caddy MCP server. Agent Mart. https://agentmart.dev/connectors/citecaddy-herbertkokholm-dk-cite-caddy (last updated 2026-10-25)