Universal knowledge base with Qdrant for Claude Code integration
Project description
Claude KB
Universal knowledge base with Qdrant for Claude Code integration.
Provides semantic search across:
- Claude Code conversation history
- Personal knowledge entities
- Documents and research notes
Installation
Run directly (no install)
uvx claude-kb@latest status
Install as a tool
uv tool install claude-kb
kb status
# Update to latest version
uv tool upgrade claude-kb
Development
git clone https://github.com/tenequm/claude-kb.git
cd claude-kb
uv sync --extra dev
Features
- Hybrid search: Dense (semantic) + sparse (keyword) vectors with RRF fusion
- Claude Code import: Automatically import your conversation history
- LLM-optimized CLI:
kb aicommand provides token-efficient schema for AI agents - FastEmbed/ONNX: Fast local embeddings with bge-base-en-v1.5 (768 dim, ~1s search time)
- Self-hosted: Run locally with Docker Compose
Quick Start
# Start Qdrant
docker compose up -d
# Initialize collections
kb init
# Import your Claude Code conversations
kb import claude-code-chats
# Search!
kb search "qdrant vector databases"
Usage
Search conversations
kb search "your query"
kb search "query" --collection conversations --limit 20
Get specific message
kb get msg_abc123
Check status
kb status
LLM-optimized schema (for AI agents)
kb ai
This outputs a token-efficient format that Claude Code and other LLMs can parse to understand how to use the CLI. See docs/AI_COMMAND_SPEC.md for details.
MCP Server
Claude KB provides an MCP server for integration with Claude Code:
# Add to Claude Code
claude mcp add kb -- uv run kb mcp
# Or run standalone
uv run kb mcp
Understanding Search Results
Score Interpretation
- 0.9+: Very high relevance (exact topic match)
- 0.7-0.9: Good match (related concepts)
- 0.5-0.7: Moderate match (partial relevance)
- <0.5: Filtered out by default
Why results might be empty
- min_score too high (default 0.5) - try lowering to 0.3
- Query too specific - use broader conceptual terms
- Project filter doesn't match - it's a partial, case-sensitive match
- No data imported - run
kb statusto verify
Content visibility
- All content is indexed and searchable (including tool results and thinking blocks)
- By default, output shows placeholders:
[tool result: N chars],[thinking: N chars] - Use
include_tool_results=Trueorinclude_thinking=Trueto see full content
Filter Application Order
Filters are applied in this sequence:
- Semantic search + min_score (server-side in Qdrant)
- Metadata filters (project, role, from_date, to_date) (server-side)
- Recency boost (if enabled)
- Limit applied
This means if min_score filters out results, date filters never see them.
Architecture
- Simplified structure: cli.py, core.py, import_claude.py (No manual embedding code!)
- Qdrant collections: conversations, entities, documents
- Embedding: QdrantClient built-in FastEmbed with BAAI/bge-base-en-v1.5 (768 dim, ONNX-optimized)
- Search time: ~1 second total (0.7s model load + 0.3s search)
- Output format: Structured plaintext (NOT JSON) optimized for LLM parsing
Configuration
Create .env file (see .env.example):
QDRANT_URL=http://localhost:6333
EMBEDDING_MODEL=BAAI/bge-base-en-v1.5 # FastEmbed model (768 dims, ~1s search)
# Alternative models:
# EMBEDDING_MODEL=BAAI/bge-small-en-v1.5 # Faster (384 dims, ~0.5s)
# EMBEDDING_MODEL=BAAI/bge-large-en-v1.5 # Higher quality (1024 dims, ~2s)
Development
# Format + lint
ruff format . && ruff check . --fix
# Test (manual for now)
uv run kb --help
Roadmap
- Streaming search (background mode)
- Entity management (
kb add entity) - Document import (
kb add document) - Relationship traversal (
kb related) - Full hybrid search (sparse vectors)
- Token-aware context window truncation
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file claude_kb-0.6.0.tar.gz.
File metadata
- Download URL: claude_kb-0.6.0.tar.gz
- Upload date:
- Size: 135.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.3 {"installer":{"name":"uv","version":"0.10.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
70d4a25092d3a24ce6caabd332eb35559856e0c183f8c119fc89fd7935afeb2b
|
|
| MD5 |
c77f69dcfb17e63f5c0fa1842e3d7e1b
|
|
| BLAKE2b-256 |
b2ba2b8495b555e5eebb3c88ee5224504dfa319850d6acd69bf5e79743308d39
|
File details
Details for the file claude_kb-0.6.0-py3-none-any.whl.
File metadata
- Download URL: claude_kb-0.6.0-py3-none-any.whl
- Upload date:
- Size: 39.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.10.3 {"installer":{"name":"uv","version":"0.10.3","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ddba4729745d6da27f01d8d7ed080f1de7fc1f100a0aa3743e838713428dce97
|
|
| MD5 |
464a898c1cde57a30d907ed7c7b871cd
|
|
| BLAKE2b-256 |
2da6aa7484ba1ee8636f107fdaebeacb39fa92b52227f9ea3979c0ef247a77b3
|