Shared knowledge base MCP server for the Doomsun team. Backed by Qdrant vector database with local embeddings (nomic-embed-text-v1.5 via HuggingFace Transformers + ONNX Runtime).
Heliograph runs as a local MCP server process — embeddings are computed on your machine, vectors are stored in our shared Qdrant Cloud instance.
- Node.js 20+
- npm
cd heliograph
npm installnpm run build
npm linkThis builds the server and creates a global heliograph command on your PATH.
The model (~130MB) is downloaded automatically on first use, but you can cache it ahead of time:
./bin/download-model.shSet your Qdrant API key in your shell profile (~/.zshrc or ~/.bashrc):
# Qdrant Cloud (Heliograph)
export QDRANT_API_KEY=<your-qdrant-api-key>Then reload your shell: source ~/.zshrc
Add the following to .mcp.json in any repo where you want Heliograph available (it's already configured in nova):
{
"mcpServers": {
"heliograph": {
"command": "heliograph",
"env": {
"QDRANT_URL": "https://your-cluster.cloud.qdrant.io:6333"
}
}
}
}QDRANT_API_KEY is read from your shell environment automatically.
In Claude Code, run /mcp to confirm Heliograph is connected, then try:
Search the knowledge base for "portfolio engine"
| Tool | Description |
|---|---|
store_document |
Store a document (chunks and embeds for semantic search) |
search |
Semantic search across all documents |
list_documents |
List all documents with metadata |
read_document |
Read full document content by ID |
update_document |
Update content or metadata (re-embeds if content changes) |
delete_document |
Delete a document and all its chunks |
list_tags |
List all tags with counts |
tag_document |
Add tags to a document |
untag_document |
Remove tags from a document |
All configuration is via environment variables:
| Variable | Default | Description |
|---|---|---|
QDRANT_URL |
http://localhost:6333 |
Qdrant server URL |
QDRANT_API_KEY |
(none) | Qdrant API key (required for cloud) |
COLLECTION_NAME |
knowledge |
Qdrant collection name |
MODEL_NAME |
nomic-ai/nomic-embed-text-v1.5 |
HuggingFace embedding model |
CHUNK_MAX_CHARS |
1600 |
Max characters per chunk |
CHUNK_OVERLAP |
200 |
Overlap between chunks |
# Watch mode (auto-rebuild on changes)
npm run watch
# Run tests
npm testBuilt with shadow-cljs (ClojureScript).