Skip to main content

Paper Intelligence

Python MCP License uv ChromaDB LlamaIndex

A local MCP server for intelligent paper/PDF management. Convert PDFs to markdown, then search them with hybrid grep + semantic search. Designed for token efficiency: search first, read only what you need.

🚀 Quick Start

1. Install UV (one-time setup)

curl -LsSf https://astral.sh/uv/install.sh | sh

2. Add to Your MCP Client

Claude Code CLI:

claude mcp add paper-intelligence -- uvx paper-intelligence@latest

VS Code:

code --add-mcp '{"name":"paper-intelligence","command":"uvx","args":["paper-intelligence@latest"]}'

That's it! uvx handles everything automatically. Using @latest ensures you always get the newest version.

🔌 MCP Client Integration

Claude Desktop

Add to your Claude Desktop config:

  • macOS: ~/Library/Application Support/Claude/claude_desktop_config.json
  • Windows: %APPDATA%\Claude\claude_desktop_config.json
  • Linux: ~/.config/Claude/claude_desktop_config.json
{
  "mcpServers": {
    "paper-intelligence": {
      "command": "uvx",
      "args": ["paper-intelligence@latest"]
    }
  }
}
Cursor
  1. Go to Settings → MCP → Add new MCP Server
  2. Select command type
  3. Enter: uvx paper-intelligence@latest

Or add to ~/.cursor/mcp.json:

{
  "mcpServers": {
    "paper-intelligence": {
      "command": "uvx",
      "args": ["paper-intelligence@latest"]
    }
  }
}
Windsurf / Other MCP Clients

Any MCP-compatible client can use paper-intelligence:

{
  "mcpServers": {
    "paper-intelligence": {
      "command": "uvx",
      "args": ["paper-intelligence@latest"]
    }
  }
}

✨ Features

  • PDF to Markdown — High-accuracy conversion using Marker
  • Hybrid Search — Combined grep (exact/regex) + semantic RAG search
  • Token Efficient — Search papers instead of reading entire documents
  • GPU Acceleration — MPS (Apple Silicon) and CUDA support
  • Self-Contained — Each paper gets its own directory with all data
  • Header Context — Search results show document structure (e.g., "Methods > Data Collection")

📖 MCP Tools

Search one or more explicitly requested PDFs, processed paper directories, or library directories with grep, rag, or hybrid mode. Direct PDF searches never inspect sibling files or directories.

Parameters:

  • query (string): Text, regex, or semantic query
  • sources (array): PDF paths, paper directories, or an explicitly selected library directory
  • mode (string, optional): "grep", "rag", or "hybrid" (default: hybrid)
  • top_k (integer, optional): Number of results (default: 5)
  • regex (boolean, optional): Treat the grep query as a regex (default: false)

A new or incomplete PDF is converted, indexed, and embedded in the background because this normally takes 1–3 minutes, longer than the roughly 30-second deadline used by many MCP clients. The first call returns promptly:

{
  "success": true,
  "status": "processing",
  "message": "First-use processing ... is continuing in the background.",
  "processing": [{
    "paper_dir": "/path/to/paper",
    "retry_after_seconds": 30,
    "next_step": "Call get_paper_info ..."
  }]
}

Processing continues after that response. Poll get_paper_info using paper_dir; when it reports status: "ready", retry the original search. Already-processed grep searches do not initialize the semantic model. RAG and hybrid searches initialize it when needed. Search no longer performs an unconditional remote-library sync, which previously allowed a local query to block for up to five minutes.

get_paper_info

Check a paper's processing state without loading the embedding model. Pass either the paper directory returned by search or the original PDF path.

Statuses are queued, processing, ready, incomplete, or failed. Failed responses include the background job's error message. A ready response includes artifact presence, metadata, and a lightweight local chunk count when available.

📊 Example Output

Search Result

{
  "source": "attention-is-all-you-need.md",
  "line_number": 142,
  "header_path": "Model Architecture > Attention",
  "content": "An attention function can be described as mapping a query and a set of key-value pairs to an output...",
  "score": 0.89
}

🎯 Typical Workflow

  1. Process a paper:

    Process the PDF at ~/Downloads/transformer-paper.pdf

  2. Search across papers:

    Search for "positional encoding" in my papers

  3. Read specific sections:

    Show me the Methods section from the transformer paper

The agent reads search results (a few hundred tokens) instead of entire papers (tens of thousands of tokens).

🛠️ Installation Options

Install from PyPI
# Install with pip
pip install paper-intelligence

# Or run directly with uvx (no install needed)
uvx paper-intelligence@latest
Install from GitHub
pip install "paper-intelligence @ git+https://github.com/Strand-AI/paper-intelligence.git"
Local Development
git clone https://github.com/Strand-AI/paper-intelligence.git
cd paper-intelligence

# Create virtual environment
python3.11 -m venv .venv
source .venv/bin/activate

# Install in development mode
pip install -e ".[dev]"

# Run the server
python -m paper_intelligence.server

Development MCP config:

{
  "mcpServers": {
    "paper-intelligence": {
      "command": "python",
      "args": ["-m", "paper_intelligence.server"],
      "cwd": "/path/to/paper-intelligence"
    }
  }
}

Run tests:

# Unit tests (fast)
pytest tests/test_markdown_parser.py

# Integration tests (slow, requires ML models)
pytest tests/test_integration.py -v

🔧 Debugging

Use the MCP Inspector to debug the server:

npx @modelcontextprotocol/inspector uvx paper-intelligence@latest

🆘 Troubleshooting

Server not starting?
  • Ensure Python 3.11+ is installed
  • Try uvx paper-intelligence@latest directly to see error messages
  • Check that all dependencies installed correctly
Windows encoding issues?

Add to your MCP config:

"env": {
  "PYTHONIOENCODING": "utf-8"
}
Claude Desktop not detecting changes?

Claude Desktop only reads configuration on startup. Fully restart the app after config changes.

🏗️ Technical Stack

Component Technology
MCP Server Official Python SDK with FastMCP
PDF Conversion marker-pdf
Embeddings LlamaIndex + HuggingFace (BAAI/bge-small-en-v1.5)
Vector Store ChromaDB (persistent, local per-paper)
GPU Support PyTorch with MPS (Apple) or CUDA

🙏 Acknowledgments

📄 License

MIT — see LICENSE for details.

Metadata

Release files for paper-intelligence 0.5.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for paper-intelligence 0.5.1
File Size Uploaded
paper_intelligence-0.5.1.tar.gz 415.5 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for paper-intelligence 0.5.1
File Interpreter ABI Platform
paper_intelligence-0.5.1-py3-none-any.whl Python 3 none any Details

Total release size: 444.5 kB

Release files / paper_intelligence-0.5.1.tar.gz

Download URL paper_intelligence-0.5.1.tar.gz
Size 415.5 kB
Tags Source
SHA-256 checksum
How to use checksums
8b4c3adefad7d1b263892cf24d099dcc899fd33423b5bd24c1e74628c077138c
BLAKE2b-256 checksum
How to use checksums
37e26233c0341427dcb9eea8508a22f1375e3a2b4a1dfadd2360a43a6cfddb4e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 29, 2026.

Transparency log

Release files / paper_intelligence-0.5.1-py3-none-any.whl

Download URL paper_intelligence-0.5.1-py3-none-any.whl
Size 28.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
256c4ae8216e578b24223b21330ef4c4741bb1fb0bd57a941c05f79d1dca0442
BLAKE2b-256 checksum
How to use checksums
6e3af202397d2783bbe547883851a7e3bb859cdcd82c4419f2412855234fe9d8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Aug 29, 2026.

Transparency log

Release history Release notifications | RSS feed

0.5.2

2 release files

This release

0.5.1 This release

2 release files

0.5.0

2 release files

0.4.1

2 release files

0.4.0

1 release file

0.3.0

2 release files

0.2.0

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page