Manual Assistant Troubleshooting Backend¶
Reference implementation for a RAG-based backend to search and answer questions from household manuals.
What it is¶
A FastAPI-based backend that integrates with ChromaDB to perform hybrid (vector + metadata filtered) search across OCR'd manuals and provides an interface for LLM-based troubleshooting. As of June 2026, it supports native Model Context Protocol (MCP) for direct tool-calling by Claude 4.8 and GPT-5.5.
What problem it solves¶
It centralizes the "brain" for the AI-Powered Warranty & Manual Assistant, allowing users to ask natural language questions like "How do I clean the filter on my Bosch dishwasher?" and get answers directly from the scanned PDF. It solves the "lost physical manual" problem and provides immediate, context-aware troubleshooting advice.
Where it fits in the stack¶
Orchestration Layer — acts as the logic bridge between document storage and user interfaces.
- Upstream: Paperless-ngx (source of PDFs), scripts/process_manuals.py (ingestion to ChromaDB).
- This Layer: API for searching and LLM orchestration.
- Downstream: Streamlit or Open WebUI (frontend for family use), and MCP-compatible agents.
Typical use cases¶
- Troubleshooting appliance error codes (e.g., "What does E15 mean on a Bosch?").
- Finding maintenance schedules in manuals.
- Verifying warranty terms for specific products.
- Summarizing setup instructions for new devices.
- Generating maintenance checklists from manual text.
Strengths¶
- Metadata Filtering: Quickly narrows search to the correct manufacturer/model.
- Async Execution: Built on FastAPI for high performance.
- Decoupled: Can be used by multiple frontends (web, mobile, voice).
- Agentic: Exposes manual search as a tool to Claude 4.8 via MCP.
- Robustness: Uses semantic search to handle OCR noise from scanned documents.
Limitations¶
- Requires pre-indexed manuals in ChromaDB.
- Accuracy depends heavily on OCR quality from Paperless-ngx.
- Limited by the quality of the original PDF documentation.
- Higher computational cost compared to basic keyword search.
When to use it¶
- When you want to build a custom chat interface for your homelab that goes beyond simple keyword search in Paperless-ngx.
- For complex troubleshooting where understanding context (e.g., "filter location") is required.
- When integrating manual lookup into a broader Home Admin agent.
When not to use it¶
- If you only have a few manuals; simple full-text search in Paperless-ngx might be sufficient.
- When low-latency is critical and you don't need semantic understanding.
- For extremely large corpora where a more enterprise-grade RAG solution (e.g., Pinecone, Weaviate) might be needed.
Getting started¶
To set up the manual assistant troubleshooting backend:
- Index Manuals: Run
python3 scripts/process_manuals.pyto ingest your PDFs into ChromaDB. - Configure API: Set your
CHROMA_DB_PATHandAPI_KEYin.env. - Launch Backend: Run the FastAPI server using
uvicorn:uvicorn app.main:app --host 0.0.0.0 --port 8000
CLI examples¶
[!NOTE] The backend is typically accessed via API, but you can test it using
curlor the FastMCP CLI.
# Test the search endpoint via curl
curl -X GET "http://localhost:8000/search?query=clean+filter&manufacturer=Bosch"
# Inspect the status of the ChromaDB collection
python3 scripts/process_manuals.py --status
# Re-index a specific manual
python3 scripts/process_manuals.py --file "/path/to/manual.pdf"
# Start the MCP server for the manual assistant
mcp-server-manuals --db-path ./chroma_db
API examples¶
Example of using FastAPI and ChromaDB to search for a specific appliance model:
from fastapi import FastAPI
import chromadb
app = FastAPI()
chroma_client = chromadb.PersistentClient(path="./chroma_db")
collection = chroma_client.get_collection(name="manuals")
@app.get("/search")
async def search_manual(query: str, manufacturer: str, model: str):
results = collection.query(
query_texts=[query],
n_results=3,
where={"$and": [{"manufacturer": manufacturer}, {"model": model}]}
)
return results
MCP Tool Call¶
Example tool definition for Claude 4.8:
{
"name": "lookup_manual",
"description": "Search the household manual database for troubleshooting information.",
"parameters": {
"type": "object",
"properties": {
"query": { "type": "string", "description": "The troubleshooting question." },
"manufacturer": { "type": "string" },
"model": { "type": "string" }
}
}
}
Related tools / concepts¶
- ChromaDB
- scripts/process_manuals.py
- Paperless-ngx
- Ollama
- FastAPI
- n8n
- Open WebUI
- Manual Troubleshooting Research
- Model Context Protocol (MCP)
Sources / references¶
- FastAPI Documentation
- ChromaDB Documentation
- RAG Best Practices (June 2026 Update)
- Model Context Protocol Specification
Contribution Metadata¶
- Last reviewed: 2026-06-28
- Confidence: high