Skip to main content
The four documentation tools (docs_search, docs_ask, docs_get_example, code_generate) retrieve chunks from a ChromaDB vector index before calling OpenAI. By default HashPilot queries the index it hosts at https://chroma.hash-pilot.app, so you do not need any of this page to use the tools: set OPENAI_API_KEY and you are done. Self-host when you want the index on your own infrastructure, need to work offline from the hosted instance, or want to add sources of your own.

What you need

Indexing several thousand pages costs OpenAI embedding tokens. Do it once, then re-run when you want fresher content.

1. Run ChromaDB

Start the ChromaDB server with a persistent volume, pinned to a 1.5.x image:
The server keeps its data in /data inside the container. Check that it answers:
The repository ships two reference setups: docker/chromadb/docker-compose.yml for a local instance, and docker/deploy/ (compose file, Dockerfile.indexer, deploy.sh) for a production host behind Traefik with the indexer running as a container. Put a reverse proxy with authentication in front of any instance that is reachable from the internet, and pass the token to HashPilot with CHROMA_AUTH_TOKEN.
Do not change the embedding model in src/config/rag.ts after indexing. Vectors from different models are not comparable; changing the model requires a full re-index.

2. Configure the MCP server

Point HashPilot at your instance through the env block of your MCP configuration:
Restart your editor and ask for “health_check with verbose on”. The services.chromadb entry shows the URL in use and whether the heartbeat succeeded. Optional tuning variables read by the same config: RAG_TOP_K (results per query, default 5), RAG_MIN_SCORE (similarity threshold, default 0.7), RAG_CHUNK_SIZE and RAG_CHUNK_OVERLAP (tokens, used when indexing).

3. Build the index

Clone the repository, install dependencies and create a .env file (the scripts load it with dotenv):
Then run the indexers. Each one writes into the shared hedera-docs-all collection. If you do not have Firecrawl, skip index-all and run the individual scripts; index-docs-repo gives the same documentation coverage without a crawler. Each script prints its chunk count when it finishes. Check the result with a query through your editor, or run the coverage script:

Keeping it fresh

Re-run the indexers when Hedera releases new documentation. index-network is the cheapest and most time-sensitive (fees and exchange rates); the others change slowly. On a shared host, run them from cron or the deploy.sh helper in docker/deploy/.

Going back to the hosted index

Remove CHROMA_URL and CHROMA_AUTH_TOKEN from your MCP configuration and restart the editor.