Prototyp · Vorschau: alle Server aus der offiziellen Registry, alle 30 Minuten synchronisiert. Bewertungen und Benutzerkonten folgen in einem späteren Schritt.
PopNx MCPMCP-Server für alle, die KI nutzen · in einfachen Worten erklärt

Cite Caddy

von herbertkokholmVersion 2.3.13i★ –iLäuft in der Cloud
Name in der Registrydk.herbertkokholm.citecaddy/cite-caddy

Installieren

Überblick

Beschreibung vom Entwickler (englisches Original)

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

Die drei Säulen von PopNx MCP

Diese drei werden nie zu einer Punktzahl zusammengefasst: Meinungen, Messungen und Beliebtheit sind verschiedene Dinge.

Was du damit machen kannst

Für diesen Server haben wir noch keine Zusammenfassung in einfacher Sprache geschrieben. Unten stehen die Fakten, die wir aus der Registry gelesen haben.

  • Verbindung: Läuft in der Cloud
  • Transport: Streamable HTTP
  • Kategorie: Sonstiges

Installation

Wähle die KI-App, die du nutzt, und kopiere die Einstellungen.

Bevor du installierst

  • Basischecks: 3 von 3 bestanden
  • Läuft auf dem Server des Entwicklers: Was du fragst, läuft über dessen Server.
  • Die Registry nennt keinen Schlüssel zum Eintragen.

Du brauchst

Welche App nutzt du?

Wähle oben deine App. Wir merken sie uns, damit der Button beim nächsten Mal „In … installieren“ anzeigt.

Funktioniert in Claude im Web, auf dem Desktop und auf dem Handy:

  1. Öffne Settings → Connectors
  2. Tippe auf Add custom connector
  3. Füge die Adresse unten ein und tippe auf Add
  4. Wenn eine Anmeldung verlangt wird, melde dich beim Dienst des Entwicklers an
SettingsConnectors1+ Add2https://…3
https://citecaddy.herbertkokholm.dk/mcp

Führe das in deinem Terminal aus

claude mcp add --transport http cite-caddy https://citecaddy.herbertkokholm.dk/mcp

In Cursor öffnen

Oder kopier die Einstellungen selbst

In .cursor/mcp.json in deinem Projekt oder in ~/.cursor/mcp.json einfügen

{
  "mcpServers": {
    "cite-caddy": {
      "url": "https://citecaddy.herbertkokholm.dk/mcp"
    }
  }
}

Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.

In VS Code öffnen

Oder kopier die Einstellungen selbst

In .vscode/mcp.json in deinem Projekt einfügen

{
  "servers": {
    "cite-caddy": {
      "type": "http",
      "url": "https://citecaddy.herbertkokholm.dk/mcp"
    }
  }
}

Dein Browser fragt, ob er die App öffnen darf, dann zeigt die App die Einstellungen und bittet dich um Bestätigung. Schlüsselwerte bleiben leer, damit du sie selbst einträgst.

ChatGPT verbindet sich nur mit Servern im Internet:

  1. Öffne ChatGPT im Web → Settings → Connectors (Apps)
  2. Tippe auf Create oder Add (bei manchen Tarifen musst du zuerst Developer mode unter Advanced einschalten)
  3. Füge die Adresse unten ein, gib ihr einen Namen und speichere
  4. Wenn eine Anmeldung verlangt wird, melde dich beim Dienst des Entwicklers an
SettingsConnectors1+ Create2https://…3
https://citecaddy.herbertkokholm.dk/mcp

Menünamen können sich je nach Tarif und mit der Zeit leicht unterscheiden.

Deine Auswahl bleibt in einem Cookie auf diesem Gerät; kein Konto nötig.

Diese Einstellungen werden aus dem Registry-Eintrag des Entwicklers erzeugt. Wenn in der README etwas anderes steht, folge der README.

Was er kann

Der Server verlangt eine Anmeldung, bevor er seine Tools auflistet.

Basischecksi

Wir prüfen Informationen, die jeder sehen kann; den Code haben wir nicht gelesen. Checks, die nicht zutreffen, werden nicht mitgezählt. · Geprüft am 9. Nov. 2026

  • ✓ Bestanden

    Entwickler passt zum Repo

    Der Registry-Name wurde über die Domain citecaddy.herbertkokholm.dk bestätigt (die Registry prüft, wem die Domain gehört)

  • … Noch nicht geprüft

    Wird noch gepflegt

    Dieses Repo haben wir noch nicht von GitHub gelesen

  • … Noch nicht geprüft

    Hat eine Lizenz

    Dieses Repo haben wir noch nicht von GitHub gelesen

  • ✓ Bestanden

    Endpunkt antwortet

    Antwort in 864 ms (HTTP 401)

  • ✓ Bestanden

    Anmeldung mit OAuth

    Gibt OAuth-Anmeldung an, damit deine KI-App dich zum Einloggen weiterleiten kann

  • … Noch nicht geprüft

    Keine versteckten Anweisungen in Tool-Beschreibungen

    Noch nicht geprüft; wir lesen die Tool-Liste, wenn wir den Endpunkt prüfen

Im Vergleich mit anderen in Sonstigesi

  • Mehr Sterne als 0 % der anderen 18643 Server in dieser Kategorie
  • Neuer in der Registry veröffentlicht als 88 % der anderen 18643 Server in dieser Kategorie
  • Basischecks gleich gut wie oder besser als bei 100 % der anderen 18643 Server in dieser Kategorie

Verglichen mit allen aktiven Servern dieser Kategorie in der Registry. Sterne zählen nur, wenn dem Herausgeber das Repo gehört.

Häufige Fragen

Ist Cite Caddy sicher?

Er hat 3 von 3 zutreffenden Basischecks bestanden. Den Code haben wir nicht gelesen. Bevor du einen Schlüssel oder Token hinzufügst, sieh nach, welche Zugriffe der Server verlangt, und nutze einen Schlüssel, der nur die Berechtigungen hat, die du brauchst.

Welche Schlüssel oder Codes braucht er?

Die Registry nennt keinen erforderlichen Schlüssel, manche Server bitten dich aber bei der ersten Nutzung, dich anzumelden.

Läuft er auf meinem Computer oder in der Cloud?

Er läuft in der Cloud des Entwicklers. Du verbindest dich übers Internet, ohne etwas zu installieren, aber was du sendest, läuft über die Server des Entwicklers.

Wird er noch gepflegt?

Das GitHub-Repo wurde zuletzt – geändert, und die neueste Version (2.3.13) kam vor 5 Tagen in die Registry.

Welche Apps können ihn nutzen?

Apps, die MCP unterstützen, etwa Claude Desktop, Claude Code, Cursor und VS Code. Er verbindet sich per URL, also funktionieren auch Apps, die Remote-MCP-Server akzeptieren, zum Beispiel ChatGPT im Entwicklermodus.

Was kann ich stattdessen nutzen?

In derselben Kategorie: Spec Driven Development, Remote Desktop Commander, Cosas Guapas: buscador de regalos

Alternativen

Server derselben Kategorie von anderen Entwicklern, sortiert nach Sternen.

So liest du eine Karte:↓ Downloads pro Wochei★ GitHub-SterneiDrei Säulen: Bewertungen · Checks · NutzungiAktualisiert = neueste Version in der Registry veröffentlichti

Spec Driven Development

MCP Server that facilitates spec-driven development workflows, not just Vibe Coding.

von formulahendryAm Anfang↓ 66/Wo.★ 440Aktualisiert vor 14 Monaten

Läuft auf deinem Computer

Remote Desktop Commander

Remote Desktop Commander: use files, terminal and processes on your own computers from any AI app.

von desktop-commanderWachsend★ 211Aktualisiert vor 3 Tagen

Läuft in der Cloud✓ desktopcommander.app

Cosas Guapas: buscador de regalos

Regalos originales por ocasión, persona y presupuesto, con enlaces a guías completas (España).

von cosasguapas.comAm AnfangAktualisiert heute

Läuft in der Cloud✓ cosasguapas.com

README vom Entwickler

README öffnen

Unverändert aus dem Repo des Entwicklers übernommen. PopNx MCP hat den Inhalt weder geprüft noch empfiehlt es ihn. HTML, Bilder und Skripte wurden entfernt. Links führen von dieser Website weg.

Cite Caddy

A reference-library bridge for AI assistants — a standalone, remote MCP server.

Independent, unofficial project. Not affiliated with, endorsed by, or

sponsored by the Corporation for Digital Scholarship (Zotero) —

see Zotero's trademark policy.

Built on the Zotero Web API; today's backend is Zotero, but the name and

tool surface are meant to support others later.

Cite Caddy gives full read/write access to a Zotero library — search, add, tag, update, delete, and move items; create, rename, and delete collections; upload/download attachments and read their extracted full text; read and write item notes; manage tags, trash, and saved searches library-wide; and look up Zotero's own item-type/field schema. 39 tools total — see Tools below for the full list.

Why this exists

Read-only tools that match findings against a Zotero library (e.g. by DOI/arXiv ID) can safely stop at reporting — they never need to write anything back. This project goes further on purpose: full CRUD against a Zotero library, including delete and move, so that tagging, adding, and cleaning up items can be automated too.

That's a deliberate scope choice, and it comes with a real risk: any write that changes an existing item's *key* (delete, move to another library, "clean library" reset) breaks Word documents that cite it via the Zotero Word plugin's live field codes — see "Key safety" below before touching delete/move.

Key safety (read this before implementing delete/move)

Any Zotero item cited in a Word document via the Zotero Word plugin is referenced by that item's key, embedded in a live field code. Operations that preserve an item's key (create, update fields, add/remove tags, add notes) are safe. Operations that don't (delete, and library-to-library move, which Zotero implements as delete+recreate) will break those citations silently — the Word document won't error, it'll just show stale/broken field text next time someone updates fields or opens Zotero the next time.

Full CRUD was chosen deliberately for this project despite that risk. When implementing delete/move tools:

  • Make the destructive intent obvious in the tool name and docstring (an MCP client's model reads both before calling), not just in this README.
  • Consider requiring the caller to pass back the item's current Zotero version (optimistic concurrency) so a delete/update can't silently clobber a change made concurrently from the Zotero desktop app or another client.
  • A dry-run / confirmation step for delete is worth considering, but is an implementation decision for whoever builds that tool, not decided here.

Idempotency

delete_item_permanently, delete_collection, delete_tag, delete_saved_search, move_item_to_different_library, and update_publication_status all accept an optional idempotency_key. Pass the same opaque string when retrying a call after a lost or ambiguous response (e.g. a network timeout) and the *original* outcome — success or error — is replayed instead of running the operation against Zotero again. Reusing a key for a call with different arguments raises an error instead of silently returning the old result, so it's safe to generate one key per logical request and reuse it freely on retries of that same request.

This matters most for move_item_to_different_library: it recreates the item in the target library, then deletes it from the source. If the create succeeds but the delete then fails, a bare retry would redo the whole thing — since the source item's version hasn't changed — creating a *second* duplicate in the target library. With idempotency_key, the retry replays the cached failure (and its "clean up manually" guidance) instead of touching Zotero again.

The cache is in-memory per server process (per onboarded tenant in HTTP mode), with a 24h TTL — it survives retries within that window, not across a redeploy/restart.

Configuration

stdio mode (local, single-user — no $PORT): the library to connect to comes from env vars.

ZOTERO_LIBRARY_ID      numeric library ID (user or group)

ZOTERO_LIBRARY_TYPE "user" or "group" (default: user) ZOTERO_API_KEY from Zotero -> Settings -> Security -> Applications (needs write permission, not just read)

HTTP mode (remote, multi-tenant — $PORT set): there's no single configured library — each caller brings their own Zotero Library ID/Type/API Key via the /login form (see "Deployment" below). Instead:

MCP_TOKEN_STORE_KEY    Fernet key encrypting onboarded tenants' API keys at

rest; generate once at deploy time with: python -c "from cryptography.fernet import Fernet; print(Fernet.generate_key().decode())" MCP_PUBLIC_URL public HTTPS URL this server is reachable at MCP_DATA_DIR where OAuth clients/tokens/tenants persist (default: ./.data)

Optional in either mode:

MCP_WEBSITE_URL         public site reported as serverInfo.website_url; also used to

build serverInfo.icons[0].src as MCP_WEBSITE_URL + "icons/icon.svg" and the /login page's privacy policy link as MCP_WEBSITE_URL + "privacy.html" (both files must actually be served there). Left unset, all three are simply omitted. MCP_SECURITY_CONTACT security contact (email or URI) served as /.well-known/security.txt (RFC 9116), e.g. for MCPBundles' ownership verification. Left unset, that path 404s.

Deployment

Ships as its own Docker container (docker-compose.yml), meant to sit behind a reverse proxy that terminates TLS and forwards to the container's port on localhost. Remote/hosted by default, not a local stdio server — an MCP client just points at the URL, nothing to install or run locally.

Access is gated by a real OAuth 2.1 authorization server built into the app itself (app/oauth_provider.py), not HTTP Basic Auth in front of it. This is a deliberate design choice: Claude Desktop/claude.ai's "Add custom connector" UI is OAuth-first — it always tries the OAuth discovery + authorization-code dance against a new server, so a plain 401 in front of the server (as Basic Auth would produce) gets read as "this server needs OAuth" and fails once it hits a nonexistent /authorize endpoint. Implementing a real (if minimal) OAuth server is what makes "Add custom connector" work.

Multi-tenant and self-service: /authorize doesn't delegate to a third-party identity provider — it shows a first-party login form asking for a Zotero Library ID, Library Type, and API Key. Submitting the form validates the key directly against the Zotero API; a successful validation both grants access and registers ("onboards") that library as a tenant of this server, all in one step — there's no separate sign-up and no admin approval. Any MCP client can dynamically register itself (RFC 7591), but completing the login form with a working Zotero key is what actually gates access. Each caller's tool calls are then routed to their own Zotero library, not a shared one. See app/oauth_provider.py's module docstring for the full flow. Registered clients, issued tokens, and onboarded tenants' credentials (API keys encrypted at rest with MCP_TOKEN_STORE_KEY) persist to MCP_DATA_DIR (a Docker volume) so redeploys don't log connected clients out or forget onboarded tenants.

.env on the host (not in this repo) holds MCP_TOKEN_STORE_KEY/ MCP_PUBLIC_URL, consumed via docker-compose.yml's env_file:. ZOTERO_LIBRARY_ID/ZOTERO_LIBRARY_TYPE/ZOTERO_API_KEY are not needed for the HTTP deployment — those only apply to stdio mode.

.github/workflows/deploy.yml automates redeploying to an already set-up host: manual trigger only (workflow_dispatch, never on push), runs the test suite first, then syncs the repo over SSH and rebuilds the container. It needs its own GitHub Actions secrets for the deploy SSH key and target host/port/user — see the workflow file for the full list. Use a dedicated deploy key (not whatever key you use for direct/manual access), so it can be revoked independently if it ever leaks.

Monitoring

Four unauthenticated GET endpoints, HTTP mode only (all require $PORT, same as /login):

  • `/healthz` — plain 200 OK, for a load balancer/uptime check.
  • `/status` — JSON snapshot of aggregate, process-level activity:
  {

"version": "2.1.0", "uptime_seconds": 41213, "tenants": 7, "tool_calls": {"search_items": 512, "add_tags": 41}, "tool_errors": {"add_tags": 2} }

tenants is TokenStore.tenant_count() — just the number of onboarded Zotero libraries. tool_calls/tool_errors are per-tool-name counts across *all* tenants combined, recorded by a tools/call middleware (_track_tool_call in app/mcp_server.py). Deliberately no per-tenant or per-library breakdown anywhere in this response — that's what keeps it safe to leave unauthenticated, unlike the 39 tools themselves. Counters live in app/metrics.py, in-memory only: they reset to zero on every restart/redeploy, same as this isn't a metrics/analytics system, just a lightweight "is it up and roughly how busy is it" signal.

  • `/status.html` — same data as /status, rendered as a small page (name + icon, one table of version/uptime/tenants, one table of per-tool call/error counts) for a human checking in a browser rather than a script. Icon only renders when MCP_WEBSITE_URL is set, same as /login's.
  • `/.well-known/security.txt` — RFC 9116 security contact, only when MCP_SECURITY_CONTACT is set (404 otherwise). Expires is computed per request as one year out, so it never goes stale. MCPBundles reads this to verify ownership when publishing the server to its directory.
  • `/.well-known/mcp/server-card.json` — a pre-connection discovery document (server identity, auth requirements, and the full tool list with schemas), generated live from the actual tool registry on every request so it can't drift out of sync. Not a ratified standard: this is a pragmatic approximation of SEP-2127 ("MCP Server Cards — HTTP Server Discovery", superseding the withdrawn SEP-1649), which is still an open, unmerged proposal as of this writing — even its own well-known path has changed between drafts (some revisions use .well-known/ai-catalog.json instead) — it's not a general claim of spec compliance, and may need to change if/when SEP-2127 (or a successor) actually ratifies with a different contract.

Tools

39 tools total, grouped by risk (see "Key safety" above before using any Destructive tool). Tools marked ✓ under Version require the item's/collection's current Zotero version (from `search_

Nur der Anfang wird gezeigt; den Rest findest du im Repo

PopNx fragen