{"id":16513,"date":"2026-09-09T16:05:48","date_gmt":"2026-09-09T14:05:48","guid":{"rendered":"https:\/\/citationstyler.com\/?p=16513"},"modified":"2026-09-09T16:05:50","modified_gmt":"2026-09-09T14:05:50","slug":"zotseek-semantic-search-for-zotero","status":"publish","type":"post","link":"https:\/\/citationstyler.com\/en\/wissen\/zotseek-semantische-suche-fur-zotero\/","title":{"rendered":"ZotSeek: Semantische Suche f\u00fcr eure Zotero-Bibliothek \u2013 vollst\u00e4ndig lokal"},"content":{"rendered":"<p class=\"wp-block-paragraph\">Zoteros Suche ist gut in dem, was sie tut: Sie findet die Zeichenfolge, die ihr eingetippt habt. Eine Idee findet sie nicht. Wer nach \u201eArbeitsteilung zwischen Mensch und Maschine&#8220; sucht, bekommt die Arbeit nicht angezeigt, die dasselbe Konzept als \u201eAI&#8217;s dual capacities for automating and informating work&#8220; beschreibt.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This is exactly where ZotSeek comes in: the plugin searches the library by meaning rather than by spelling \u2013 and it does so without sending a single byte to an external source.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">What is ZotSeek?<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><a href=\"https:\/\/github.com\/introfini\/ZotSeek\" target=\"_blank\" rel=\"noopener\">ZotSeek<\/a> is a free, open-source plugin for Zotero that adds semantic search functionality. Instead of matching words, it converts each paper into a numerical representation of its meaning \u2013 known as an \u2018embedding\u2019 \u2013 and compares your query with these values.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The key factor is where this happens. The AI model is included in the plugin (around 130 MB) and runs on your own CPU within Zotero. No account, no API key, no credit, no cloud service. Once installed, ZotSeek will still work even if you unplug your computer from the internet.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">ZotSeek is licensed under the MIT licence and has garnered just under 200 stars on GitHub since its first release at the end of December 2025.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How the search for meaning works<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Das Prinzip ist einfacher, als es klingt. Das Modell liest einen Text und gibt 768 Zahlen aus \u2013 eine Koordinate in einem Raum, in dem inhaltlich \u00e4hnliche Texte nahe beieinander liegen. Eine Anfrage zu \u201ewie Mensch und KI sich die Arbeit aufteilen&#8220; und eine Arbeit \u00fcber \u201eautomating and informating work&#8220; landen dicht beieinander, obwohl sie kaum ein Wort teilen.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">During the indexing, these figures are calculated once per session and stored in a small database alongside your Zotero data. When you carry out a search, they are calculated for the query and the nearest neighbours are identified \u2013 even with large libraries, this takes well under a tenth of a second.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">In practice, the simplest form is rarely the best. ZotSeek uses the following by default: <strong>hybrid search<\/strong>: Semantic search and Zotero\u2019s own keyword search run in parallel, and the two lists of results are merged. You get the conceptual results, but you don\u2019t lose the exact match if you do happen to remember the author\u2019s name. Both the purely semantic and the purely keyword-based results are just one click away.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"512\" src=\"https:\/\/citationstyler.com\/wp-content\/uploads\/2026\/09\/zotseek-search-dialog-1024x512.png\" alt=\"\" class=\"wp-image-16514\" srcset=\"https:\/\/citationstyler.com\/wp-content\/uploads\/2026\/09\/zotseek-search-dialog-1024x512.png 1024w, https:\/\/citationstyler.com\/wp-content\/uploads\/2026\/09\/zotseek-search-dialog-300x150.png 300w, https:\/\/citationstyler.com\/wp-content\/uploads\/2026\/09\/zotseek-search-dialog-768x384.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">The ZotSeek search dialogue, which answers a question in everyday language. None of the top results contain the words entered.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Three ways to search<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>The search dialogue box.<\/strong> Formuliert eine Frage in normaler Sprache: \u201emethodische Kritik an Selbstauskunftsskalen&#8220;, \u201eStudien, in denen die Intervention gescheitert ist&#8220;. Bis zu vier Anfragen lassen sich mit UND\/ODER verkn\u00fcpfen \u2013 so findet ihr die Schnittmenge zweier Literaturstr\u00e4nge statt ihrer Vereinigung.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>Find similar documents.<\/strong> Simply right-click on any entry. ZotSeek compares its stored embedding with everything else in your library. This is the quickest way to realise that two works from different collections have been putting forward the same argument for years.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><strong>From the PDF.<\/strong> Highlight a passage whilst reading, right-click, and you\u2019ll see which documents in your library cover this concept. The document currently open is automatically excluded.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"617\" src=\"https:\/\/citationstyler.com\/wp-content\/uploads\/2026\/09\/zotseek-context-menu-1024x617.png\" alt=\"\" class=\"wp-image-16515\" srcset=\"https:\/\/citationstyler.com\/wp-content\/uploads\/2026\/09\/zotseek-context-menu-1024x617.png 1024w, https:\/\/citationstyler.com\/wp-content\/uploads\/2026\/09\/zotseek-context-menu-300x181.png 300w, https:\/\/citationstyler.com\/wp-content\/uploads\/2026\/09\/zotseek-context-menu-768x463.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Right-click on any item in the library. ZotSeek adds its own entries at the end of the Zotero context menu.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Results that highlight the issue \u2013 not just the work<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Ein Treffer, der sagt \u201edieses 40-seitige PDF ist relevant&#8220;, ist nur die halbe Antwort. Im Modus <strong>Full Document<\/strong> ZotSeek keeps track of the source of each piece of text, so that every result includes its source reference.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Each result shows which section matched \u2013 Abstract, Methods or Results \u2013 so that you can distinguish a passing reference in the introduction from a specific finding. When you hover over a match, a preview of the exact passage appears with the search terms highlighted; clicking on it opens the PDF on the correct page and at the correct paragraph.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A completed set of results can be saved as a new Zotero collection at the touch of a button, or you can select individual results and add them to an existing collection.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"512\" src=\"https:\/\/citationstyler.com\/wp-content\/uploads\/2026\/09\/zotseek-matched-passage-1024x512.png\" alt=\"zotseek matched passage\" class=\"wp-image-16516\" srcset=\"https:\/\/citationstyler.com\/wp-content\/uploads\/2026\/09\/zotseek-matched-passage-1024x512.png 1024w, https:\/\/citationstyler.com\/wp-content\/uploads\/2026\/09\/zotseek-matched-passage-300x150.png 300w, https:\/\/citationstyler.com\/wp-content\/uploads\/2026\/09\/zotseek-matched-passage-768x384.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">If you hover your mouse over a result, the passage that actually matches your search query will be displayed \u2013 with the search terms highlighted \u2013 along with the page, paragraph and section from which it is taken.<\/figcaption><\/figure>\n\n\n\n<h2 class=\"wp-block-heading\">Multilingual libraries: changing the model<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Multilingual libraries: changing the model The default model is optimised for English. For German-language or mixed-language libraries, this is the most important setting of all \u2013 which is why you can change the model in the settings. There are four options to choose from:<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>Model<\/th><th>Dimensions<\/th><th>Multilingual<\/th><th>Size<\/th><th>Suitable for<\/th><\/tr><\/thead><tbody><tr><td>nomic-embed-text-v1.5 (default, included)<\/td><td>768<\/td><td>No<\/td><td>~130 MB<\/td><td>Libraries with English-language collections or predominantly English-language collections<\/td><\/tr><tr><td>paraphrase-multilingual-MiniLM-L12-v2<\/td><td>384<\/td><td>Yes<\/td><td>~135 MB<\/td><td>Mixed libraries on less powerful hardware<\/td><\/tr><tr><td>multilingual-e5-base<\/td><td>768<\/td><td>Yes<\/td><td>~110 MB<\/td><td>The obvious first choice for a German library<\/td><\/tr><tr><td>BGE-M3<\/td><td>1024<\/td><td>Yes<\/td><td>~570 MB<\/td><td>The highest standard of multilingual quality, for large, diverse <br>Collections<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"890\" src=\"https:\/\/citationstyler.com\/wp-content\/uploads\/2026\/09\/zotseek-settings-and-models-1024x890.png\" alt=\"\" class=\"wp-image-16517\" srcset=\"https:\/\/citationstyler.com\/wp-content\/uploads\/2026\/09\/zotseek-settings-and-models-1024x890.png 1024w, https:\/\/citationstyler.com\/wp-content\/uploads\/2026\/09\/zotseek-settings-and-models-300x261.png 300w, https:\/\/citationstyler.com\/wp-content\/uploads\/2026\/09\/zotseek-settings-and-models-768x668.png 768w, https:\/\/citationstyler.com\/wp-content\/uploads\/2026\/09\/zotseek-settings-and-models.png 1840w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">The ZotSeek settings window: index statistics, model selection and the number of elements covered by each downloaded model.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">The three optional models are loaded once by Hugging Face and then work offline in exactly the same way as the one supplied. The switch is non-destructive: each model retains its own index, so switching back is possible immediately and does not require re-indexing. The settings show how many of your entries are searchable under the active model, and offer to re-index the rest in the background.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Indexing \u2013 and what happens if it goes wrong<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">You decide what is indexed: just the title and abstract (quick) or the full text of the document (slower, but with the paragraph-level hits described above). New entries can be indexed automatically if desired. Group libraries can be included via the index scope. Entries with the tag <code>zotseek-exclude<\/code> get skipped.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">A column in the list of entries shows the status of each item: fully indexed, partially indexed, out of date, excluded or not indexed at all. Longer runs can be paused or cancelled; they save progress regularly and resume automatically if Zotero is closed whilst the process is in progress.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"520\" src=\"https:\/\/citationstyler.com\/wp-content\/uploads\/2026\/09\/zotseek-index-column-1024x520.png\" alt=\"\" class=\"wp-image-16518\" srcset=\"https:\/\/citationstyler.com\/wp-content\/uploads\/2026\/09\/zotseek-index-column-1024x520.png 1024w, https:\/\/citationstyler.com\/wp-content\/uploads\/2026\/09\/zotseek-index-column-300x152.png 300w, https:\/\/citationstyler.com\/wp-content\/uploads\/2026\/09\/zotseek-index-column-768x390.png 768w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">The \u2018ZotSeek\u2019 column in the list of articles. A tick indicates that the article has been indexed and is searchable; the circular arrow indicates that the article has changed since it was last indexed.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><span style=\"text-decoration: underline;\">There are two limitations you should be aware of:<\/span> The plugin is unusually large at around 130 MB because it includes the AI model, and indexing currently runs exclusively on the CPU \u2013 GPU acceleration is already built into the code, but is awaiting Zotero to switch to a Firefox ESR version with WebGPU support. For large libraries in full-document mode, this means that the initial indexing is best left to run overnight rather than in the background.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">The library as a tool for AI agents<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Since version 1.19, ZotSeek has included a <strong>MCP server<\/strong> Once enabled in the settings, any MCP-compatible client \u2013 Claude Code, Codex, Claude Desktop and others \u2013 can search the library directly:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>claude mcp add --transport http --scope user zotseek http:\/\/localhost:23119\/zotseek\/mcp<\/code><\/pre>\n\n\n\n<p class=\"wp-block-paragraph\">That is all there is to install. The server runs within Zotero, which is already open, and provides three read-only tools (<code>search<\/code>, <code>find_similar<\/code>, <code>index_status<\/code>) and listens exclusively on localhost. The results contain links that open the work found on the relevant page \u2013 this means that an assistant\u2019s statements can be verified against the source.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" width=\"1024\" height=\"560\" src=\"https:\/\/citationstyler.com\/wp-content\/uploads\/2026\/09\/zotseek-ai-agent-access-1024x560.png\" alt=\"\" class=\"wp-image-16519\" srcset=\"https:\/\/citationstyler.com\/wp-content\/uploads\/2026\/09\/zotseek-ai-agent-access-1024x560.png 1024w, https:\/\/citationstyler.com\/wp-content\/uploads\/2026\/09\/zotseek-ai-agent-access-300x164.png 300w, https:\/\/citationstyler.com\/wp-content\/uploads\/2026\/09\/zotseek-ai-agent-access-768x420.png 768w, https:\/\/citationstyler.com\/wp-content\/uploads\/2026\/09\/zotseek-ai-agent-access.png 1840w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Enable access for AI agents. The window displays the exact command for establishing a connection with a client.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">We have set out how ZotSeek compares with the external MCP servers in our overview <a href=\"https:\/\/citationstyler.com\/en\/knowledge\/zotero-and-mcp-all-projects-at-a-glance-to-connect-your-library-with-ai\/\">MCP and Zotero: an overview of available tools<\/a> .<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The server is disabled by default; it cannot modify either the library or the index, and cannot be accessed from outside the computer.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Optional: your own GPU<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">The built-in engine runs on the CPU. Anyone with a GPU who is already running LM Studio, Ollama, llama.cpp or vLLM can redirect ZotSeek to that server and index content significantly faster. Each request is checked at runtime against an allow list of loopback addresses; external redirects are rejected rather than followed, and there is no setting that could turn this into a cloud call. The feature is opt-in and disabled by default.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Data protection<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">This is where ZotSeek differs most significantly from AI assistants that rely on hosted models. No account, no telemetry, no usage tracking \u2013 and, in the default configuration, absolutely no network traffic at all, neither during indexing nor during searching. The embeddings are stored in a single file in the Zotero data directory. Uninstalling the plugin removes them.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">How much it costs<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Nothing. ZotSeek is free and open source under the MIT licence. There are no credits, no pricing tiers and no paid add-on features. Download the <code>.xpi<\/code> von der Releases-Seite, installiert sie \u00fcber <em>Werkzeuge \u2192 Plugins \u2192 Plugin aus Datei installieren<\/em>, startet Zotero neu und w\u00e4hlt per Rechtsklick auf eine Sammlung \u201eUpdate Library Index&#8220;. Vorausgesetzt wird Zotero 8 oder neuer.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Summary<\/h2>\n\n\n\n<p class=\"wp-block-paragraph\">Semantic search is nothing new, and there are now several ways to integrate AI with Zotero \u2013 you can find an overview of these in our article <a href=\"https:\/\/citationstyler.com\/en\/knowledge\/ai-plugins-for-zotero\/\">AI plugins for Zotero<\/a>. ZotSeek combines two things that rarely go hand in hand: a search that actually captures the meaning, and the certainty that your own, unpublished reading list never leaves your desk. No API key, no cost per query, no third parties involved.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Anyone who maintains a library that they can no longer keep track of in their head, and who cares about who else is reading it, should set aside an afternoon for indexing.<\/p>\n\n\n\n<h2 class=\"wp-block-heading\">Links<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/github.com\/introfini\/ZotSeek\" target=\"_blank\" rel=\"noopener\">ZotSeek on GitHub<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/introfini\/ZotSeek\/releases\/latest\" target=\"_blank\" rel=\"noopener\">Latest release<\/a><\/li>\n\n\n\n<li><a href=\"https:\/\/github.com\/introfini\/ZotSeek\/blob\/main\/docs\/MCP.md\" target=\"_blank\" rel=\"noopener\">Documentation for the MCP Server<\/a><\/li>\n<\/ul>\n\n\n\n<hr class=\"wp-block-separator has-alpha-channel-opacity\"\/>\n\n\n\n<p class=\"wp-block-paragraph\"><em>ZotSeek is being developed by Jos\u00e9 Fernandes, a PhD student whose research focuses on human-AI collaboration. Two other open-source tools he has developed also import Zotero libraries, though as command-line tools rather than plugins: <a href=\"https:\/\/github.com\/hearthresearch\/citefact\" target=\"_blank\" rel=\"noopener\">citefact<\/a> checks a finished manuscript against the full text of the sources cited \u2013 to ensure that every reference exists, every quotation is verbatim and every statement is supported by the passage to which it refers. <a href=\"https:\/\/pypi.org\/project\/pagebound\/\" target=\"_blank\" rel=\"noopener\">pagebound<\/a> converts each PDF in a library once and temporarily stores the structured output, including the page and bounding box for each paragraph, so that multiple tools and AI agents can read the same documents without having to pay for the conversion process again.<\/em><\/p>","protected":false},"excerpt":{"rendered":"<p>ZotSeek enhances Zotero with semantic search: find papers by meaning rather than by keywords, jump straight to the relevant section of text, and open your library to AI agents via the MCP server. Everything runs locally, without an API key and without a subscription.<\/p>","protected":false},"author":1,"featured_media":16522,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[35],"tags":[],"class_list":["post-16513","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-wissen"],"blocksy_meta":{"styles_descriptor":{"styles":{"desktop":"","tablet":"","mobile":""},"google_fonts":[],"version":8}},"brizy_media":[],"_links":{"self":[{"href":"https:\/\/citationstyler.com\/en\/wp-json\/wp\/v2\/posts\/16513","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/citationstyler.com\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/citationstyler.com\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/citationstyler.com\/en\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/citationstyler.com\/en\/wp-json\/wp\/v2\/comments?post=16513"}],"version-history":[{"count":3,"href":"https:\/\/citationstyler.com\/en\/wp-json\/wp\/v2\/posts\/16513\/revisions"}],"predecessor-version":[{"id":16523,"href":"https:\/\/citationstyler.com\/en\/wp-json\/wp\/v2\/posts\/16513\/revisions\/16523"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/citationstyler.com\/en\/wp-json\/wp\/v2\/media\/16522"}],"wp:attachment":[{"href":"https:\/\/citationstyler.com\/en\/wp-json\/wp\/v2\/media?parent=16513"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/citationstyler.com\/en\/wp-json\/wp\/v2\/categories?post=16513"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/citationstyler.com\/en\/wp-json\/wp\/v2\/tags?post=16513"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}