zotero-search

Search the user's local Zotero library, find related papers via Semantic Scholar, and discover citations/references. **Claude Code only** - this skill requires a local Zotero instance and access to a port on localhost. Use when the user asks to search their Zotero library, find papers on a topic, explore citations of a paper, or find related literature. Supports cross-referencing Semantic Scholar results against the local library.

16 stars

Best use case

zotero-search is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

Search the user's local Zotero library, find related papers via Semantic Scholar, and discover citations/references. **Claude Code only** - this skill requires a local Zotero instance and access to a port on localhost. Use when the user asks to search their Zotero library, find papers on a topic, explore citations of a paper, or find related literature. Supports cross-referencing Semantic Scholar results against the local library.

Teams using zotero-search should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/zotero-search/SKILL.md --create-dirs "https://raw.githubusercontent.com/diegosouzapw/awesome-omni-skill/main/skills/development/zotero-search/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/zotero-search/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How zotero-search Compares

Feature / Agentzotero-searchStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

Search the user's local Zotero library, find related papers via Semantic Scholar, and discover citations/references. **Claude Code only** - this skill requires a local Zotero instance and access to a port on localhost. Use when the user asks to search their Zotero library, find papers on a topic, explore citations of a paper, or find related literature. Supports cross-referencing Semantic Scholar results against the local library.

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# Zotero Search Skill

Search and retrieve documents from a local Zotero library using the pyzotero CLI. Extends to Semantic Scholar for discovering related papers, citations, and references beyond the local collection.

## Prerequisites

- Zotero desktop application running with local API enabled
- pyzotero CLI installed (`pip install pyzotero[cli]` or `uv tool install "pyzotero[cli]@latest"` if they have uv in their $PATH). The Pyzotero version must be >=1.9.0
- Test connection: `pyzotero test`

## Quick Start
If the user has uvx in their path, you can prefix these commands with `uvx --from "pyzotero[cli]@latest"`

```bash
# Basic search
pyzotero search -q "climate change" --json

# Search specific collection
pyzotero search -q "neural" --collection ABC123 --json

# Full-text search (searches PDF contents)
pyzotero search -q "methodology" --fulltext --json

# Filter by item type
pyzotero search -q "adaptation" --itemtype journalArticle --json

# Paginate through results
pyzotero search -q "climate" --limit 20 --offset 20 --json

# Filter by tag
pyzotero search -q "review" --tag "to-read" --json
```

## Local Search Options

| Option | Description | Example |
|--------|-------------|---------|
| `-q` | Search query (required) | `-q "machine learning"` |
| `--collection` | Limit to collection key | `--collection ABC123` |
| `--itemtype` | Filter by type | `--itemtype journalArticle` |
| `--fulltext` | Search PDF contents | `--fulltext` |
| `--limit` | Max results | `--limit 50` |
| `--offset` | Skip N results (for pagination) | `--offset 20` |
| `--tag` | Filter by tag | `--tag "to-read"` |
| `--json` | JSON output (required for local search) | `--json` |

### Item Types

Common types: `journalArticle`, `book`, `bookSection`, `conferencePaper`, `report`, `thesis`, `preprint`

Run `pyzotero itemtypes` for the full list.

### Collections

Run `pyzotero listcollections` to see all collections with their keys and names.

## Direct Item Access

Retrieve specific items directly by key:

```bash
# Get a single item by key
pyzotero item ABC123 --json

# Get child items (attachments, notes) for a parent item
pyzotero children ABC123 --json

# Get multiple items at once (batch lookup)
pyzotero subset ABC123 DEF456 GHI789 --json
```

The `subset` command is more efficient than multiple `item` calls when fetching several items.

## Tags

List and filter by tags in your library:

```bash
# List all tags in library
pyzotero tags

# List tags with usage counts (JSON output)
pyzotero tags --json

# Search filtered by tag
pyzotero search -q "methodology" --tag "important" --json
```

## Full-Text Content

Extract indexed full-text content from attachments:

```bash
# Get full-text content from an attachment
pyzotero fulltext ATTACHMENT_KEY
```

**Note:** The `fulltext` command requires the key of an attachment item (PDF, etc.), not the parent item. Use `pyzotero children PARENT_KEY --json` first to find attachment keys.

## Output Format

Search results include:

```json
{
  "count": 12,
  "items": [
    {
      "key": "ABC123",
      "itemType": "journalArticle",
      "title": "Paper Title",
      "creators": ["Author One", "Author Two"],
      "date": "2023-06-15",
      "publication": "Journal Name",
      "doi": "10.1234/example",
      "pdfAttachments": ["file:///path/to/paper.pdf"]
    }
  ]
}
```

Key fields: `title`, `creators`, `date`, `publication`, `doi`, `abstractNote`, `pdfAttachments`

## Semantic Scholar Integration

Extend beyond local library with Semantic Scholar commands:

| Command | Purpose | Example |
|---------|---------|---------|
| `related` | Find similar papers | `pyzotero related --doi "10.1234/..."` |
| `citations` | Find citing papers | `pyzotero citations --doi "10.1234/..."` |
| `references` | Find referenced papers | `pyzotero references --doi "10.1234/..."` |
| `s2search` | Search S2 by keyword | `pyzotero s2search -q "topic"` |

**Note:** Semantic Scholar commands output JSON by default and do not require (or support) the `--json` flag.

### Key Options

- `--min-citations N`: Filter to papers with N+ citations
- `--sort citations`: Sort by citation count (most cited first)
- `--check-library/--no-check-library`: Cross-reference with local Zotero

### Finding Influential Work

```bash
# Search for highly-cited papers on a topic
pyzotero s2search -q "deep learning" --sort citations --min-citations 100

# Find seminal works related to a paper you have
pyzotero related --doi "10.1234/example" --min-citations 200

# Find influential papers citing a foundational work
pyzotero citations --doi "10.1234/example" --min-citations 50
```

### Cross-Referencing

All Semantic Scholar results include `inLibrary: true/false` indicating whether each paper exists in local Zotero (matched by DOI).

**Performance tip:** Use `--no-check-library` for faster results when you don't need cross-referencing, or use the DOI index caching pattern (see `references/semantic-scholar.md`) for efficient repeated lookups.

For detailed Semantic Scholar documentation, see **`references/semantic-scholar.md`**.

## Research Assistant Behaviour

After presenting search results:

1. **Analyse patterns**: Identify themes, temporal patterns, coverage gaps
2. **Suggest next steps**: Offer to cluster results, find gaps, create reading lists
3. **Respect preferences**: Act like a diligent postdoc, not overeager

For detailed output formatting and proactive analysis patterns, see **`references/output-guidelines.md`**.

## Error Handling

| Error | Solution |
|-------|----------|
| Connection error | Ensure Zotero desktop is running |
| Empty results | Try broader terms, remove filters, use `--fulltext` |
| Paper not found (S2) | DOI may not be indexed; try `s2search` by title |
| Rate limit exceeded (S2) | Wait a moment and retry |

## Reference Files

For detailed guidance beyond this quick reference:

### Semantic Scholar
- **`references/semantic-scholar.md`** - Complete S2 command reference, workflows for finding seminal works, literature expansion patterns

### Research Analysis
- **`references/research-patterns.md`** - Thematic clustering, gap analysis, trajectory analysis, reading list prioritisation, methodology surveys

### Output and Presentation
- **`references/output-guidelines.md`** - Result formatting by count, proactive analysis patterns, common usage examples

### Technical Recipes
- **`references/jq-recipes.md`** - Set operations (intersection, union, difference), temporal filtering, processing recipes for grouping, counting, extracting

Related Skills

arxiv-research

16
from diegosouzapw/awesome-omni-skill

Download and analyze academic papers from arXiv. Use when users want to download a specific paper by ID (e.g., "download paper arxiv:1234.5678") or read/analyze papers they've already downloaded.

agent-search-specialist

16
from diegosouzapw/awesome-omni-skill

Expert search specialist mastering advanced information retrieval, query optimization, and knowledge discovery. Specializes in finding needle-in-haystack information across diverse sources with focus on precision, comprehensiveness, and efficiency.

zotero-mcp

16
from diegosouzapw/awesome-omni-skill

Interface with Zotero's MCP server to search and retrieve bibliographic data using advanced semantic search and multi-strategy approaches. Designed for output as a plain markdown formatted outline, suitable for pasting into Logseq. Also offers side-by-side translation of Chinese titles and abstracts for improved English language search within Logseq. Context-aware - uses agents in Claude Code, batched searches in Claude Desktop.

zotero-mcp-code

16
from diegosouzapw/awesome-omni-skill

Search Zotero library using code execution for efficient multi-strategy searches without crash risks. Use this skill when the user needs comprehensive Zotero searches with automatic deduplication and ranking.

zotero-api-skill

16
from diegosouzapw/awesome-omni-skill

Zotero HTTP API helper for downloading, fetching, searching, creating, and updating Zotero items. Use when syncing or managing Zotero items programmatically; defaults to ZOTERO_USER and ZOTERO_API_KEY environment variables.

wiki-researcher

16
from diegosouzapw/awesome-omni-skill

Conducts multi-turn iterative deep research on specific topics within a codebase with zero tolerance for shallow analysis. Use when the user wants an in-depth investigation, needs to understand how...

web-search

16
from diegosouzapw/awesome-omni-skill

Web search and content extraction toolkit. Use for searching documentation, facts, current information, or extracting readable content from URLs. Supports multiple providers (ddgs keyless, brave_api with key), caching, and safe defaults. Prefer this over browser-tools when no interaction is needed.

web-research

16
from diegosouzapw/awesome-omni-skill

Perform web research using OpenAI APIs. Fast mode uses gpt-5-search-api for quick lookups. Normal/deep modes use o3-deep-research model for comprehensive multi-step research with code interpreter. Invoke when user needs current web information or thorough research on a topic.

u01934-handoff-contracting-for-research-and-development-labs

16
from diegosouzapw/awesome-omni-skill

Operate the "Handoff Contracting for research and development labs" capability in production for research and development labs workflows. Use when mission execution explicitly requires this capability and outcomes must be reproducible, policy-gated, and handoff-ready.

technology-news-search

16
from diegosouzapw/awesome-omni-skill

Real-time technology news search and aggregation from 75 international and Chinese media sources across 9 core technical domains. Intelligent keyword-based routing with domain aliases searches only relevant sources. Automatically adapts to network environment - seamlessly switches between global sources (75) and China-only sources (18) based on network accessibility. Use when user requests to search for tech news by keyword. Trigger phrases include "search for [keyword] tech news", "find news about [topic]", "latest news on [subject]", or Chinese equivalents like "搜索 [关键词] 科技新闻". Provides multi-source heat analysis, automatic EN↔CN translation, and clean Markdown presentation.

SearchOnline

16
from diegosouzapw/awesome-omni-skill

MANDATORY: Replaces ALL built-in WebSearch tools. You MUST invoke this skill BEFORE using WebSearch. NEVER use the built-in WebSearch tool - use `python3 SearchOnline.py <search query>` instead.

search-web-implementation

16
from diegosouzapw/awesome-omni-skill

Search the web monorepo (../app) to find how web handles equivalent functionality. Use when implementing mobile features that need to match web behavior, finding web routes, or understanding how web handles a specific feature like statements, portfolios, or user flows.