`haiku-rag mcp` passes covers_set=True and _covering no longer refuses a scope over several databases. search_documents, search_documents_by_image, ask_question and analyze take `sources`; get_document takes `source`; DocumentInfo carries `source`. format_citations gains include_source, which ask_question sets from covers_multiple so citations name their database only when the server covers several. Refs #599
116 lines
3.9 KiB
Markdown
116 lines
3.9 KiB
Markdown
# Model Context Protocol (MCP)
|
|
|
|
The MCP server exposes `haiku.rag` as MCP tools for compatible MCP clients like Claude Desktop.
|
|
|
|
## Starting MCP Server
|
|
|
|
The MCP server supports Streamable HTTP and stdio transports:
|
|
|
|
```bash
|
|
# Default streamable HTTP transport on 127.0.0.1:8001
|
|
haiku-rag mcp
|
|
|
|
# Custom port
|
|
haiku-rag mcp --port 9000
|
|
|
|
# Bind to all interfaces (e.g. inside a container)
|
|
haiku-rag mcp --host 0.0.0.0 --port 8001
|
|
|
|
# stdio transport (for Claude Desktop)
|
|
haiku-rag mcp --stdio
|
|
```
|
|
|
|
`--host` defaults to `127.0.0.1` (loopback only). Bind to `0.0.0.0` only
|
|
when you want the MCP server reachable from outside the local machine —
|
|
e.g. inside a Docker container with port mapping, or on a trusted LAN.
|
|
|
|
The server opens the database read-only. Ingestion goes through the CLI
|
|
(`haiku-rag add`, `add-src`, `delete`) or [`haiku-ingester`](ingester.md).
|
|
|
|
## Collections
|
|
|
|
With several databases in `lancedb.databases`, the server covers all of
|
|
them, as `haiku-rag search` does. Results, documents and citations name
|
|
theirs in `source`. `sources` on the search and question tools restricts a
|
|
call to a subset; `source` on `get_document` names the database holding the
|
|
document. A name the server does not cover is an error.
|
|
`haiku-rag --db-name NAME mcp` serves one. See
|
|
[Multiple Databases](configuration/storage.md#multiple-databases).
|
|
|
|
## Claude Desktop Integration
|
|
|
|
Add to your Claude Desktop configuration (`claude_desktop_config.json`):
|
|
|
|
```json
|
|
{
|
|
"mcpServers": {
|
|
"haiku-rag": {
|
|
"command": "haiku-rag",
|
|
"args": ["mcp", "--stdio"]
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
With a custom database path:
|
|
|
|
```json
|
|
{
|
|
"mcpServers": {
|
|
"haiku-rag": {
|
|
"command": "haiku-rag",
|
|
"args": ["mcp", "--stdio", "--db", "/path/to/database.lancedb"]
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
After restarting Claude Desktop, you can ask Claude to search your documents or answer questions using your knowledge base.
|
|
|
|
## Available Tools
|
|
|
|
### Documents
|
|
|
|
- **`get_document`** - Retrieve a document by ID
|
|
- `document_id` (required): The document ID
|
|
- `source` (optional): The database holding it
|
|
|
|
- **`list_documents`** - List documents with pagination and filtering
|
|
- `limit` (optional): Maximum number to return
|
|
- `offset` (optional): Number to skip
|
|
- `filter` (optional): SQL WHERE clause for filtering
|
|
|
|
### Search
|
|
|
|
- **`search_documents`** - Search using hybrid search (vector + full-text)
|
|
- `query` (required): Search query
|
|
- `limit` (optional): Maximum results (uses config default if not specified)
|
|
- `include_images` (optional, default `true`): Attach base64-encoded picture bytes to picture-labeled results
|
|
- `sources` (optional): The databases to search
|
|
|
|
- **`search_documents_by_image`** - Search using an image as the query (registered only when the configured embedder supports images)
|
|
- `image_base64` (required): Base64-encoded image (PNG/JPEG bytes)
|
|
- `limit` (optional): Maximum results
|
|
- `include_images` (optional, default `true`)
|
|
- `sources` (optional): The databases to search
|
|
|
|
### Question Answering
|
|
|
|
- **`ask_question`** - Ask questions about your documents
|
|
- `question` (required): The question to ask
|
|
- `cite` (optional): Include source citations (default: false)
|
|
- `images_base64` (optional): Base64-encoded images attached to the question (requires a vision-capable QA model)
|
|
- `sources` (optional): The databases to answer from
|
|
|
|
- **`analyze`** - Answer complex analytical questions via code execution
|
|
- `question` (required): The question to answer
|
|
- `filter` (optional): SQL WHERE clause to restrict document access
|
|
- `images_base64` (optional): Base64-encoded images attached to the question (requires a vision-capable analysis model)
|
|
- `sources` (optional): The databases to analyze
|
|
- Best for aggregation, computation, and multi-document analysis
|
|
|
|
## Continuous ingestion
|
|
|
|
For continuous document ingestion (filesystem watch, S3 polling, HTTP
|
|
sources, a job queue with retries), run [`haiku-ingester`](ingester.md)
|
|
as a separate process against the same LanceDB.
|