FieldCure.Mcp.Rag
2.3.2
See the version list below for details.
{ "servers": { "FieldCure.Mcp.Rag": { "type": "stdio", "command": "dnx", "args": ["FieldCure.Mcp.Rag@2.3.2", "--yes"] } } }
.vscode/mcp.json settings file.
dotnet tool install --global FieldCure.Mcp.Rag --version 2.3.2
dotnet new tool-manifest
dotnet tool install --local FieldCure.Mcp.Rag --version 2.3.2
#tool dotnet:?package=FieldCure.Mcp.Rag&version=2.3.2
nuke :add-package FieldCure.Mcp.Rag --version 2.3.2
FieldCure.Mcp.Rag
Requires Ollama 0.4.0 or later when using Ollama for embedding or contextualization.
MCP RAG server with hybrid BM25 + vector search and AI-powered chunk contextualization — indexes documents from configured source paths, enriches chunks with AI-generated context and keywords, generates embeddings, and performs keyword (FTS5) and semantic (cosine similarity) search with Reciprocal Rank Fusion.
Install
dotnet tool install -g FieldCure.Mcp.Rag
Commands
fieldcure-mcp-rag
├── serve --base-path <path> # Multi-KB MCP search server (stdio)
├── exec --path <kb-path> [--force] [--partial ...] # Headless indexing
├── exec-queue --queue-file <path> [--sweep-all] # Sequential queue orchestrator
└── prune-orphans --base-path <path> # Delete orphan KB folders
- serve — read-only MCP server serving all KBs under the base path. Lazy-loads per KB.
- exec — headless indexing with 2-commit model, binary-split failure isolation, deferred retry.
- exec-queue — sequential orchestrator for queued indexing requests. No GPU contention.
- prune-orphans — deletes GUID-named folders without config.json. Protects backups.
API keys:
serve(stdio) — environment variable (OPENAI_API_KEY,ANTHROPIC_API_KEY, etc.) → MCP Elicitation fallback on the first tool call that needs a key. Session cache, max 2 re-elicits.exec/exec-queue(headless batch) — environment variable only. If unset, the run soft-fails with a clear message.
Quick Start
{
"id": "my-kb-001",
"name": "Project Docs",
"sourcePaths": ["C:\\Users\\me\\Documents\\project-docs"],
"embedding": {
"provider": "openai",
"model": "text-embedding-3-small",
"apiKeyPreset": "OpenAI"
}
}
# Index
fieldcure-mcp-rag exec --path "%LOCALAPPDATA%\FieldCure\Mcp.Rag\my-kb-001"
# Serve
fieldcure-mcp-rag serve --base-path "%LOCALAPPDATA%\FieldCure\Mcp.Rag"
Claude Desktop
{
"mcpServers": {
"rag": {
"command": "fieldcure-mcp-rag",
"args": ["serve", "--base-path", "C:\\Users\\me\\AppData\\Local\\FieldCure\\Mcp.Rag"],
"env": {
"OPENAI_API_KEY": "sk-..."
}
}
}
}
Tools (7)
| Tool | Description |
|---|---|
list_knowledge_bases |
List all KBs with status |
search_documents |
Hybrid BM25 + vector search (auto, bm25, vector) |
get_document_chunk |
Retrieve full chunk content by ID |
start_reindex |
Queue indexing request (scope merge, force/deferred, orchestrator spawn) |
cancel_reindex |
Remove pending queue entry |
get_index_info |
Index metadata + queue state (status/position/deferred/error) |
check_changes |
Dry-run filesystem scan. No API calls |
config.json Reference
| Field | Description |
|---|---|
id |
Knowledge base identifier |
name |
Display name |
sourcePaths |
Folders to index |
contextualizer.provider |
"anthropic", "openai", "ollama", or empty |
contextualizer.model |
Model ID |
contextualizer.apiKeyPreset |
Env var mapping: "OpenAI" → OPENAI_API_KEY |
embedding.* |
Same structure as contextualizer |
embedding.keepAlive |
Ollama: VRAM retention (default "5m") |
embedding.numCtx |
Ollama: context window (default 8192, contextualizer only) |
systemPrompt |
Custom contextualization prompt |
Supported Formats
DOCX, HWPX, XLSX, PPTX, PDF, TXT, MD. Scanned PDFs without a text layer fall back to Tesseract OCR on Windows only — see "Platform support" below.
Platform support
Cross-platform on Windows, Linux, macOS. Text extraction from all supported document formats works everywhere. The optional OCR package (FieldCure.DocumentParsers.Ocr, ships Tesseract native binaries) is referenced conditionally in the server's .csproj via $([MSBuild]::IsOSPlatform('Windows')), so Linux and macOS builds are pure managed code and scanned-PDF pages on those platforms yield empty text.
Requirements
- .NET 8.0 Runtime or later
See Also
Part of the AssistStudio ecosystem.
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 was computed. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
This package has no dependencies.
| Version | Downloads | Last Updated |
|---|---|---|
| 2.5.1 | 98 | 5/25/2026 |
| 2.5.0 | 103 | 5/7/2026 |
| 2.4.4 | 101 | 5/6/2026 |
| 2.4.3 | 100 | 5/6/2026 |
| 2.4.2 | 111 | 4/28/2026 |
| 2.4.1 | 100 | 4/28/2026 |
| 2.4.0 | 87 | 4/28/2026 |
| 2.3.2 | 94 | 4/27/2026 |
| 2.3.1 | 99 | 4/27/2026 |
| 2.3.0 | 99 | 4/27/2026 |
| 2.2.0 | 106 | 4/25/2026 |
| 2.1.1 | 104 | 4/21/2026 |
| 2.1.0 | 98 | 4/20/2026 |
| 2.0.0 | 111 | 4/17/2026 |
| 1.5.0 | 102 | 4/16/2026 |
| 1.4.2 | 107 | 4/15/2026 |
| 1.4.1 | 108 | 4/15/2026 |
| 1.4.0 | 108 | 4/14/2026 |
| 1.3.1 | 116 | 4/8/2026 |
| 1.3.0 | 105 | 4/8/2026 |
v2.3.2: Hotfix for missing Whisper native runtime in v2.3.1 — re-declare Whisper.net.Runtime PackageReference directly in Mcp.Rag because PackAsTool strips runtimes/<rid>/native/ files from indirect dependencies, leaving v2.3.1 unable to load whisper.dll. CPU-only runtime: CUDA/Vulkan packages omitted to keep the tool nupkg under nuget.org's 250 MB limit; Whisper transcription falls back to CPU. Also wrap get_index_info handler in a structured-error catch so failures (e.g. SqliteException on a fresh KB) return valid JSON ({status:"error",error:"..."}) instead of an MCP plain-text wrap that hosts cannot parse.