PDF Search

Integrates with
Zed, OpenAI, PDF

PDF Search for Zed

A document search extension for Zed that lets you semantically search through a PDF document and use the results in Zed's AI Assistant.

Prerequisites

This extension currently requires:

  1. An OpenAI API key (to generate embeddings)
  2. uv installed on your system

Note: While the current setup requires an OpenAI API key for generating embeddings, we plan to implement a self-contained alternative in future versions. Community feedback will help prioritize these improvements.

Quick Start

  1. Clone the repository
git clone https://github.com/freespirit/pdfsearch-zed.git
  1. Set up the Python environment for the MCP server:
cd pdfsearch-zed/pdf_rag
uv venv
uv sync
  1. Install Dev Extension in Zed

  2. Build the search db

cd /path/to/pdfsearch-zed/pdf_rag

echo "OPENAI_API_KEY=sk-..." > src/pdf_rag/.env

## This may take a couple of minutes, depending on the documents' size
## You can provide multiple files and directories as arguments.
##  - files would be chunked.
##  - a directory would be considered as if its files contains chunks.
##    E.g. they won't be further split.
uv run src/pdf_rag/rag.py build "file1.pdf" "dir1" "file2.md" ...
  1. Configure Zed
"context_servers": {
    "pdfsearch-context-server": {
        "settings": {
            "extension_path": "/path/to/pdfsearch-zed"
        }
    }
}

Usage

  1. Open Zed's AI Assistant panel
  2. Type /pdfsearch followed by your search query
  3. The extension will search the PDF and add relevant sections to the AI Assistant's context

Future Improvements

  • Self-contained vector store
  • Self-contained embeddings
  • Automated index building on first run
  • Configurable result size
  • Support for multiple PDFs
  • Optional: Additional file formats beyond PDF

Project Structure

  • pdf_rag/: Python-based MCP server implementation
  • src/: Zed extension code
  • extension.toml and Cargo.toml: Zed extension configuration files

Known Limitations

  • Manual index building is required before first use
  • Requires external services (OpenAI)