Vectora - Advanced AI Assistant with RAG and MCP capabilities
Project description
Vectora
Vectora is an open-source AI assistant (Apache 2.0) built for developers — local-first, self-hosted, and designed to run as a powerful sub-agent inside any MCP-compatible orchestrator (Claude Code, Claude Desktop, Paperclip, VS Code extensions).
At its core, Vectora solves the knowledge gap problem: LLMs don't know your codebase, your docs, or the latest versions of your stack. Vectora bridges that gap with RAG (Retrieval-Augmented Generation) — ingest your docs once, and every AI interaction becomes contextually aware.
Why Vectora?
- Orchestrator + Specialized Agents: The Orchestrator is the primary LLM agent — it answers directly for simple queries and crafts explicit task instructions for specialists (search, coder). No wasted routing hops.
- RAG-native subgraph: Every document query goes through a full retrieve → score → rerank → inject pipeline. Results flow back to the Orchestrator for synthesis.
- 15 tools across 4 categories: Web search, vector search, file system, artifacts, memory — always available across all agents.
- Cascading embeddings: Web search results are automatically queued for embedding into LanceDB (fire-and-forget), building your knowledge base as you chat.
- Sub-agent architecture: Runs as an MCP server. Claude Code delegates complex tasks to Vectora; Vectora reasons, routes, and responds.
- Persistent memory: Cross-session memory in SQLite. Vectora remembers your preferences, project context, and decisions.
- Zero infra: SQLite + LanceDB. No Docker required for local use.
- Multi-LLM: Google Gemini (free tier), Cohere (free tier), OpenAI, Anthropic, or Ollama (fully local).
Architecture
Orchestrator + Workers
Every message enters through a single entry point and is routed by the Orchestrator to the right specialized agent:
START
└─► orchestrator (responds inline OR delegates with task_query)
├─► [respond] → END
├─► [search] → search → search_tools → process_retrieval ↻ → END
├─► [coder] → coder → coder_tools ↻ → END
└─► [rag_subgraph] → rag_subgraph → orchestrator (synthesis) → END
| Agent | Responsibility | Tools |
|---|---|---|
| orchestrator | Primary LLM agent — responds directly OR delegates with an explicit task description | create_artifact, save_memory, get_memory, delete_memory |
| search | Web research, real-time info, builds knowledge base via cascading embeddings | web_search, fetch_url, vector_search |
| coder | File operations, terminal commands, code generation | file_read, file_edit, file_write, grep, list_dir, terminal |
RAG Subgraph
When the orchestrator routes to rag, a dedicated subgraph runs the full retrieval pipeline before synthesis:
rag_retrieve (vector_search)
└─► rag_decide (score threshold)
├─► rag_inject (score ≥ 0.7 — high confidence, inject directly)
├─► rag_rerank (score 0.4–0.7 — rerank with Cohere before inject)
└─► rag_websearch (score < 0.4 — fall back to web + auto-embed results)
Results are injected as a SystemMessage into context. The Orchestrator then synthesizes the final answer inline, without a separate agent hop.
Artifact Tool
Agents explicitly call create_artifact to persist structured documents (plans, specs, guides, architecture decisions) to ~/.vectora/artifacts/{session_id}/ as Markdown files. The tool returns structured metadata (path, title, type, session_id, timestamp) that the Orchestrator can reference in future turns.
Cascading Embeddings
After any web_search or fetch_url call, process_retrieval automatically queues the results for embedding into LanceDB — fire-and-forget, no blocking. Your vector store grows passively as you use web search.
Prerequisites
Cohere — Required
Vectora uses Cohere for embeddings (embed-multilingual-v3.0) and reranking (rerank-multilingual-v3.0). It offers a generous free tier with first-class LangChain integration.
Get your key: https://dashboard.cohere.com/api-keys
Tavily — Required
Vectora uses Tavily for real-time web search and URL content extraction. It offers a generous free tier optimized for AI agents.
Get your key: https://app.tavily.com/
LLM Provider — Choose One
| Provider | Free Tier | Get Key |
|---|---|---|
| Google Gemini ✅ Recommended | Yes | aistudio.google.com |
| Cohere | Yes | dashboard.cohere.com |
| Ollama (local) | No cost | ollama.ai |
| OpenAI | Paid | platform.openai.com |
| Anthropic | Paid | console.anthropic.com |
Installation
Option 1: UV — Local install (recommended)
Install Vectora globally with uv:
uv tool install vectora-agent
On first run, the setup wizard will ask for your API keys and write them to ~/.vectora/.env.
vectora # starts chat (wizard runs automatically if no keys found)
To connect Vectora as an MCP sub-agent for Claude Code or Claude Desktop, add to your .mcp.json:
{
"mcpServers": {
"Vectora": {
"command": "vectora",
"args": ["mcp-server"]
}
}
}
Option 2: Docker — VPS / remote MCP server
Use this when you want Vectora running on a server and accessible from multiple machines or orchestrators via SSE.
Local (no domain):
cp .env.example .env
# Edit .env with your API keys
docker compose up -d
# SSE endpoint: http://localhost:8000/sse
VPS with Traefik (HTTPS + domain):
cp .env.example .env
# Edit .env with your API keys, VECTORA_DOMAIN and ACME_EMAIL
# Create the shared Traefik network if it doesn't exist yet
docker network create traefik-public
docker compose -f docker-compose.yml -f docker-compose.traefik.yml up -d
# SSE endpoint: https://vectora.yourdomain.com/sse
To connect from Claude Code or any MCP-compatible orchestrator:
{
"mcpServers": {
"Vectora": {
"url": "https://vectora.yourdomain.com/sse"
}
}
}
Option 3: From Source
git clone https://github.com/brunosrz/vectora.git
cd vectora
uv sync
cp .env.example .env
# Edit .env with your API keys
uv run vectora
CLI Reference
vectora [options] Start chat (resume last session for this directory)
vectora mcp-server Start MCP server (stdio)
vectora traces View observability traces
vectora sessions List all saved sessions
vectora config Show current configuration
vectora config --set KEY=VALUE Edit a setting
Options:
--model MODEL Switch LLM model (provider auto-detected). Persists.
--ollama Force Ollama provider (for arbitrary local model names)
--session ID Resume a specific session by 6-digit ID
--new Force a new session
--verbosity N Verbosity level 0–5 (0=silent, 5=debug panel). Persists.
--version Show version
Chat Commands
| Command | Description |
|---|---|
/help |
Show quick help |
/list |
Show all commands |
/tools |
List available tools |
/model |
List or switch models |
/debug [0-5] |
Set verbosity level (tool calls, routing decisions, log panel) |
/new |
Start a new session |
/sessions |
List all sessions |
/session <id> |
Switch to a specific session |
/quit |
Exit |
Input shortcuts: Enter sends, Alt+Enter or Shift+Enter adds a line break.
Tools Reference
15 tools across 5 categories, always available to all agents:
| Category | Tools | Primary Agent |
|---|---|---|
| Web | web_search, fetch_url |
search |
| RAG | vector_search, embedding, ingest_docs |
search / RAG subgraph |
| Files | file_read, file_edit, file_write, grep, list_dir, terminal |
coder |
| Artifacts | create_artifact |
orchestrator |
| Memory | save_memory, get_memory, delete_memory |
orchestrator / coder |
| MCP | call_mcp_tool |
all |
Data & Persistence
All data is stored locally in ~/.vectora/:
~/.vectora/
├── .env # API keys (secrets — never commit)
├── settings.json # Runtime preferences (provider, model, verbosity)
├── data/
│ ├── vectora.db # Sessions, memories, LangGraph checkpoints (SQLite)
│ ├── embedding_queue.db # Async embedding queue (SQLite)
│ ├── traces.db # Internal observability spans (SQLite)
│ └── lancedb/ # Vector store for RAG (LanceDB)
├── artifacts/ # Auto-detected plans, specs, guides
│ └── {session_id}/
│ └── *.md
├── keys/ # Reserved for future key management
└── logs/
├── vectora.jsonl # Structured JSON logs
└── session_*.md # Exported session audit trails
Separation of concerns:
~/.vectora/.env— secrets (API keys). Never versioned.~/.vectora/settings.json— non-secret runtime preferences (active provider, model, verbosity, last session per directory). Managed byvectora config.
Tech Stack
| Layer | Technology |
|---|---|
| Language | Python 3.14+ managed by uv |
| Agent Framework | LangChain + LangGraph |
| Agent Pattern | Orchestrator + Specialized Workers (search / coder) + RAG Subgraph |
| Vector Store | LanceDB — file-based, zero-config |
| Embeddings | Cohere — embed-multilingual-v3.0 + rerank-multilingual-v3.0 |
| Persistence | SQLite via aiosqlite + LangGraph Checkpointer |
| Context Protocol | MCP via FastMCP |
| Terminal UI | Rich + prompt-toolkit |
| Observability | LangSmith (optional) |
Configuration
API keys go in ~/.vectora/.env (created by the setup wizard) or a project-local .env:
# LLM Provider (auto-detected from available keys if not set)
LLM_PROVIDER=google-genai
GOOGLE_API_KEY=your_key_here
# Required: RAG embeddings + reranking
COHERE_API_KEY=your_key_here
# Required: Web search + URL extraction
TAVILY_API_KEY=your_key_here
# Optional: Tracing
LANGSMITH_TRACING=false
LANGSMITH_API_KEY=your_key_here
LANGSMITH_PROJECT=vectora
Runtime preferences (model, verbosity, session history) are managed in ~/.vectora/settings.json via vectora config or the /model and /debug chat commands — no need to touch .env for these.
License
Apache 2.0. See LICENSE.
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 vectora_agent-0.1.0rc2.tar.gz.
File metadata
- Download URL: vectora_agent-0.1.0rc2.tar.gz
- Upload date:
- Size: 365.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
89a5682274dcb6d5d29f0879837274cac15843f657e5f4f29926804df65a3e42
|
|
| MD5 |
90b33bb2065d5fade2bfcadbc0b157a0
|
|
| BLAKE2b-256 |
db3de66b00f612a07f4c4661f80361927dc6f6bb46ee43e70441d15fec8c628b
|
Provenance
The following attestation bundles were made for vectora_agent-0.1.0rc2.tar.gz:
Publisher:
runner.yml on brunosrz/vectora
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vectora_agent-0.1.0rc2.tar.gz -
Subject digest:
89a5682274dcb6d5d29f0879837274cac15843f657e5f4f29926804df65a3e42 - Sigstore transparency entry: 1597066659
- Sigstore integration time:
-
Permalink:
brunosrz/vectora@132ad97bbaf41ddc54b3bcaaf18396dbc3a2e5cc -
Branch / Tag:
refs/tags/v0.1.0rc2 - Owner: https://github.com/brunosrz
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
runner.yml@132ad97bbaf41ddc54b3bcaaf18396dbc3a2e5cc -
Trigger Event:
push
-
Statement type:
File details
Details for the file vectora_agent-0.1.0rc2-py3-none-any.whl.
File metadata
- Download URL: vectora_agent-0.1.0rc2-py3-none-any.whl
- Upload date:
- Size: 173.4 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ea3d986b9ab2517360ee9d4f05dfbf628ccb01ca0e48a12eabf3d0f32042b368
|
|
| MD5 |
1d4847ce6f4e43c244e8e6fb8721a4e5
|
|
| BLAKE2b-256 |
7ade0f52733537db3c40741582c6d32a1911e0ac863aa03119d367c3fd804de9
|
Provenance
The following attestation bundles were made for vectora_agent-0.1.0rc2-py3-none-any.whl:
Publisher:
runner.yml on brunosrz/vectora
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
vectora_agent-0.1.0rc2-py3-none-any.whl -
Subject digest:
ea3d986b9ab2517360ee9d4f05dfbf628ccb01ca0e48a12eabf3d0f32042b368 - Sigstore transparency entry: 1597066738
- Sigstore integration time:
-
Permalink:
brunosrz/vectora@132ad97bbaf41ddc54b3bcaaf18396dbc3a2e5cc -
Branch / Tag:
refs/tags/v0.1.0rc2 - Owner: https://github.com/brunosrz
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
runner.yml@132ad97bbaf41ddc54b3bcaaf18396dbc3a2e5cc -
Trigger Event:
push
-
Statement type: