lore-mcp
Server Configuration
Describes the environment variables required to run the server.
| Name | Required | Description | Default |
|---|---|---|---|
| DB_HOST | No | PostgreSQL host (required if DB_BACKEND=postgres) | |
| DB_NAME | No | PostgreSQL database name (required if DB_BACKEND=postgres) | |
| DB_PORT | No | PostgreSQL port (required if DB_BACKEND=postgres) | |
| DB_USER | No | PostgreSQL user (required if DB_BACKEND=postgres) | |
| DB_BACKEND | No | Database backend: sqlite or postgres. Default: sqlite | sqlite |
| LORE_RRF_K | No | RRF constant for hybrid search. Default: 10 | 10 |
| DB_PASSWORD | No | PostgreSQL password (required if DB_BACKEND=postgres) | |
| LORE_EMBEDDING_MODEL | No | Model for embeddings. Default: all-MiniLM-L6-v2 | all-MiniLM-L6-v2 |
| LORE_SEMANTIC_SEARCH | No | Master switch to enable semantic search (true/false). Default: false | false |
Instructions
Guidance the server publishes about itself, which clients place ahead of the tool catalog so the model reads it before choosing anything.
This server publishes no instructions, or was last inspected before Glama recorded them.
Capabilities
Features and capabilities supported by this server
Protocol revision2025-11-25
| Capability | Details |
|---|---|
| tools | {
"listChanged": true
} |
| logging | {} |
| prompts | {
"listChanged": false
} |
| resources | {
"subscribe": false,
"listChanged": false
} |
| extensions | {
"io.modelcontextprotocol/ui": {}
} |
| experimental | {} |
Tools
Functions exposed to the LLM to take actions
| Name | Description |
|---|---|
| kb_addC | Add a knowledge base entry |
| kb_searchB | Search knowledge base. Lexical FTS5 (or LIKE fallback) by default; set semantic=true / hybrid=true / search_mode=hybrid to use vector embeddings + RRF fusion (requires LORE_SEMANTIC_SEARCH=true). |
| kb_getB | Get full KB entry by ID |
| kb_get_batchB | Fetch full content for multiple KB entries by ID. Use after kb_search to retrieve content without N+1 round trips. |
| kb_listC | List KB entries |
| kb_updateB | Update existing KB entry content, title, topic, tags, verified state, and trust_score |
| kb_deleteC | Delete existing KB entry from database |
| investigation_addC | Add an investigation entry (open or append to an ops investigation) |
| investigation_listD | List investigations |
| investigation_getB | Get a single investigation entry by ID |
| investigation_log_experimentC | Log a structured experiment within an investigation (hypothesis, methodology, results, conclusion) |
| investigation_list_experimentsA | List logged investigation experiments |
| investigation_delete_noteA | Hard-delete an investigation note by note_id (Issue #21). Requires confirm=True; in LORE_ENV=production also requires confirm_production=True. |
| investigation_delete_experimentA | Hard-delete an investigation experiment by experiment_id (Issue #21). Requires confirm=True; in LORE_ENV=production also requires confirm_production=True. |
| journal_appendC | Append journal entry |
| journal_listC | List journal entries |
| journal_getC | Get journal entry |
| journal_searchC | Full-text search across journal entry content (Issue #15) |
| journal_deleteA | Hard-delete a journal entry by entry_id (Issue #21). Requires confirm=True; in LORE_ENV=production also requires confirm_production=True. |
| snapshot_configD | Snapshot current config |
| kb_ingest_docC | Ingest single markdown file into KB with change detection |
| kb_ingest_dirC | Batch ingest directory of markdown files |
| kb_sync_statusC | Check sync state between source docs and KB |
| kb_backfill_embeddingsA | Embed any KB entries that are missing or stale (model/content changed). Idempotent: skips entries whose stored content_hash still matches. Requires LORE_SEMANTIC_SEARCH=true. |
| kb_embedding_statusA | Report embedding coverage: total entries, embedded count, missing count, current model, and per-model breakdown. |
| mcp_index_scanB | Scan all MCP servers and index their tools. By default, scans only configured servers (66% token savings). |
| mcp_index_searchC | Search for MCP tools by description/capability |
| mcp_index_get_serverC | Get all tools for a specific MCP server |
| mcp_index_get_toolC | Get detailed information about a specific tool |
| mcp_index_rebuildB | Force rebuild of entire MCP index (same as mcp_index_scan) |
| search_localC | Search local files by content (lexical mode) |
| search_corporaC | Search across corpus manifests (JSONL files) |
| search_transcriptsC | Search transcript segments from Whisper outputs |
| multi_searchA | Search across all configured sources simultaneously (KB, local files, transcripts, corpora) with a single query. Returns combined results from all available sources. For searching within a specific source only, use kb_search, search_local, search_transcripts, or search_corpora instead. |
| deduplicate_resultsC | Remove duplicate search results based on text similarity |
| cluster_resultsA | Groups search results by source_type (file extension, corpus, transcript). The cluster count is determined by the data, not by a parameter — Issue #22 removed the previously-misleading num_clusters/n_clusters knobs. |
| log_retrieval_feedbackA | Score or annotate a prior kb_search result by its query_id (retrieval telemetry, issue #5). Supply user_feedback_score, required_requery, notes, or any combination; an omitted field is left unchanged (cannot be reset to null). No effect unless LORE_HARD_NEGATIVE_MINING=true on a PostgreSQL backend. |
| get_retrieval_telemetryA | Read retrieval telemetry rows (issue #5). Selector precedence: query_id > session_id > topic > recent. Returns newest-first. |
| get_telemetry_statsA | Aggregate retrieval telemetry stats (issue #5): totals, feedback coverage, requery count, average score, oldest/newest timestamps. Optionally scoped by session_id and/or topic. |
| refresh_hard_negativesA | Scan retrieval_telemetry for low-scored and requery signals, then upsert hard negative pairs into knowledge.hard_negative_pairs. Use since= for incremental refresh. dry_run=true returns counts without writing. Requires LORE_HARD_NEGATIVE_MINING=true. |
| get_hard_negativesA | Read hard negative (query, document) pairs from knowledge.hard_negative_pairs. Filter by signal_type (explicit/behavioral/all), doc_id, or query_text_like. Returns pairs sorted by occurrence_count DESC. |
| backfill_query_embeddingsA | Backfill query_embedding column in retrieval_telemetry for rows that predate Phase 4a. Processes rows in batches. Set build_index=true to also create the HNSW index after backfill. |
Prompts
Interactive templates invoked by user choice
| Name | Description |
|---|---|
No prompts | |
Resources
Contextual data attached and managed by the client
| Name | Description |
|---|---|
No resources | |
TDQS
Scored across 42 tools
Most tools are cleanly separated by domain prefixes and detailed descriptions, but mcp_index_scan and mcp_index_rebuild are effectively the same operation, and the many search-related tools (kb_search, search_local, search_corpora, search_transcripts, multi_search) require careful reading to avoid mis-selection.
The naming is largely consistent: snake_case verb_noun patterns with domain prefixes like kb_, investigation_, journal_, and mcp_index_. Minor inconsistencies exist, such as mcp_index_scan/mcp_index_rebuild being duplicate operations and backfill_query_embeddings not following the kb_backfill_embeddings prefix style, but the overall pattern is predictable.
42 tools is far too many for a single MCP server, even one spanning knowledge bases, investigations, journals, search, telemetry, and MCP indexing. The surface would be more usable split into smaller focused servers or consolidated into fewer higher-level tools.
The knowledge base has full CRUD plus ingestion and embedding workflows; investigations, journals, search, telemetry, and MCP indexing all cover their core lifecycles. Minor gaps like no explicit investigation or journal update operation are likely intentional given the append-oriented design, but they are still notable omissions.