Skip to main content
Glama

RAG Vault

License: MIT TypeScript MCP Registry

Your documents. Your machine. Your control.

RAG Vault lets your AI coding assistant search your private documents, things like API specs, research papers, and internal docs. Everything runs locally and your data stays on your machine unless you choose to pull in content from a remote URL.

One command to run, minimal setup, privacy by default.

Why RAG Vault?

Pain Point

RAG Vault Solution

"I don't want my docs on someone else's server"

Everything stays local by default. No background cloud calls for indexing or search.

"Semantic search misses exact code terms"

Hybrid search with RRF fusion, optional cross-encoder reranking

"Setup requires Docker, Python, databases..."

One npx command plus a small MCP config block.

"Cloud APIs charge per query"

Free forever. No subscriptions.

Related MCP server: nodespace-mcp

Security

RAG Vault comes with security built in:

  • API Authentication: Optional API key via RAG_API_KEY

  • Rate Limiting: You can throttle requests

  • CORS Control: Restrict allowed origins

  • Security Headers: Helmet.js protection

See SECURITY.md for complete documentation.

First-Time Setup Checklist

Before adding MCP config:

  1. Install Node.js 20 or newer.

  2. Pick a documents directory and set BASE_DIR to that path.

  3. Make sure your AI tool process can read BASE_DIR.

  4. Restart your AI tool after editing config.

Get Started Quickly

For Cursor

Add to ~/.cursor/mcp.json:

{
  "mcpServers": {
    "local-rag": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "github:RobThePCGuy/rag-vault"],
      "env": {
        "BASE_DIR": "/path/to/your/documents"
      }
    }
  }
}

Replace /path/to/your/documents with your real absolute path.

For Claude Code

Add to .mcp.json in your project directory:

{
  "mcpServers": {
    "local-rag": {
      "type": "stdio",
      "command": "npx",
      "args": ["-y", "github:RobThePCGuy/rag-vault"],
      "env": {
        "BASE_DIR": "./documents",
        "DB_PATH": "./documents/.rag-db",
        "CACHE_DIR": "./.cache",
        "RAG_EMBEDDING_DEVICE": "cpu",
        "RAG_HYBRID_WEIGHT": "0.6",
        "RAG_GROUPING": "related"
      }
    }
  }
}

Or add inline via CLI:

claude mcp add local-rag --scope user --env BASE_DIR=/path/to/your/documents -- npx -y github:RobThePCGuy/rag-vault

For Codex

Add to ~/.codex/config.toml:

[mcp_servers.local-rag]
command = "npx"
args = ["-y", "github:RobThePCGuy/rag-vault"]

[mcp_servers.local-rag.env]
BASE_DIR = "/path/to/your/documents"

Install Skills (Optional)

If you want your AI to write better queries and make more sense of results, install the RAG Vault skills:

# Claude Code (project-level - recommended for team projects)
npx github:RobThePCGuy/rag-vault skills install --claude-code

# Claude Code (user-level - available in all projects)
npx github:RobThePCGuy/rag-vault skills install --claude-code --global

# Codex (user-level)
npx github:RobThePCGuy/rag-vault skills install --codex

# Custom location
npx github:RobThePCGuy/rag-vault skills install --path /your/custom/path

Skills teach Claude best practices for:

  • Query formulation and expansion strategies

  • Score interpretation. In boost mode, under 0.3 is a good match and over 0.5 is worth skipping. RRF mode scores by rank instead.

  • When to use ingest_file vs ingest_data

  • HTML ingestion and URL handling

Restart your AI tool, and start talking:

You: "Ingest api-spec.pdf"
AI:  Successfully ingested api-spec.pdf (47 chunks)

You: "How does authentication work?"
AI:  Based on section 3.2, authentication uses OAuth 2.0 with JWT tokens...

That's it. No Docker. No Python. No server infrastructure to manage.

Web Interface

RAG Vault has a web UI so you can manage your documents without touching the command line.

Launch the Web UI

npx github:RobThePCGuy/rag-vault web

Open http://localhost:3000 in your browser.

By default the web server binds to 127.0.0.1 (loopback), so it is reachable only from this machine. To use it from another device on your network, set RAG_BIND_HOST=0.0.0.0 — and set RAG_API_KEY as well, since the API is otherwise unauthenticated.

What You Can Do

  • Upload documents: Drag and drop PDF, DOCX, Markdown, TXT, JSON, JSONL, and NDJSON files

  • Search instantly: Type queries and see results with relevance scores

  • Preview content: Click any result to see the full chunk in context

  • Manage files: View all indexed documents and delete what you don't need

  • Switch databases: Create and switch between multiple knowledge bases

  • Monitor status: See document counts, memory usage, and search mode

  • Export/Import settings: Back up and restore your vault configuration

  • Theme preferences: Switch between light, dark, or system theme

  • Folder browser: Navigate directories to select documents

REST API

The web server has a REST API you can hit directly. Set RAG_API_KEY to require authentication:

# With authentication (when RAG_API_KEY is set)
curl -X POST "http://localhost:3000/api/v1/search" \
  -H "Authorization: Bearer your-api-key" \
  -H "Content-Type: application/json" \
  -d '{"query": "authentication", "limit": 5}'

# Search documents (no auth needed if RAG_API_KEY isn't set)
curl -X POST "http://localhost:3000/api/v1/search" \
  -H "Content-Type: application/json" \
  -d '{"query": "authentication", "limit": 5}'

# List all files
curl "http://localhost:3000/api/v1/files"

# Upload a document
curl -X POST "http://localhost:3000/api/v1/files/upload" \
  -F "file=@spec.pdf"

# Delete a file
curl -X DELETE "http://localhost:3000/api/v1/files" \
  -H "Content-Type: application/json" \
  -d '{"filePath": "/path/to/spec.pdf"}'

# Get system status
curl "http://localhost:3000/api/v1/status"

# Health check (for load balancers)
curl "http://localhost:3000/api/v1/health"

Reader API Endpoints

These endpoints let you read documents and find connections across them:

# Get all chunks for a document (ordered by index)
curl "http://localhost:3000/api/v1/documents/chunks?filePath=/path/to/doc.pdf"

# Find related chunks for cross-document discovery
curl "http://localhost:3000/api/v1/chunks/related?filePath=/path/to/doc.pdf&chunkIndex=0&limit=5"

# Batch request for multiple chunks (efficient for UIs)
curl -X POST "http://localhost:3000/api/v1/chunks/batch-related" \
  -H "Content-Type: application/json" \
  -d '{"chunks": [{"filePath": "/path/to/doc.pdf", "chunkIndex": 0}], "limit": 3}'

Remote Mode

RAG Vault can also run as an HTTP server so remote MCP clients like Claude.ai, Claude Desktop, or anything that supports Streamable HTTP or SSE can connect to it.

# Start remote server (default port 3001)
npx github:RobThePCGuy/rag-vault --remote

# Custom port
npx github:RobThePCGuy/rag-vault --remote --port 8080

Stdio mode is unchanged. Just leave off --remote and everything works as before with Cursor, Claude Code, and Codex.

Connecting from Claude Desktop

Add to your Claude Desktop config:

{
  "mcpServers": {
    "rag-vault-remote": {
      "type": "url",
      "url": "http://localhost:3001/mcp"
    }
  }
}

Or via Claude Code CLI:

claude mcp add --transport http rag-vault http://localhost:3001/mcp

Connecting from Claude.ai

For Claude.ai (Pro/Max/Team/Enterprise), add as a custom connector with URL https://your-host:3001/mcp. For local development, expose your server with a tunnel:

cloudflared tunnel --url http://localhost:3001

The remote server also binds to 127.0.0.1 (loopback) by default. To accept connections from other machines directly, set RAG_BIND_HOST=0.0.0.0. Set RAG_API_KEY for authentication whenever you expose the server beyond loopback (including via a tunnel). The server supports both Streamable HTTP (/mcp) and legacy SSE (/sse) transports, plus a health check at /health.

Real-World Examples

Search Your Codebase Documentation

You: "Ingest all the markdown files in /docs"
AI:  Ingested 23 files (847 chunks total)

You: "What's the retry policy for failed API calls?"
AI:  According to error-handling.md, failed requests retry 3 times
     with exponential backoff: 1s, 2s, 4s...

Index Web Documentation

You: "Fetch https://docs.example.com/api and ingest the HTML"
AI:  Ingested "docs.example.com/api" (156 chunks)

You: "What rate limits apply to the /users endpoint?"
AI:  The API limits /users to 100 requests per minute per API key...

Build a Personal Knowledge Base

You: "Ingest my research papers folder"
AI:  Ingested 12 PDFs (2,341 chunks)

You: "What do recent studies say about transformer attention mechanisms?"
AI:  Based on attention-mechanisms-2024.pdf, the key finding is...

Search Exact Technical Terms

RAG Vault's hybrid search catches both meaning and exact matches:

You: "Search for ERR_CONNECTION_REFUSED"
AI:  Found 3 results mentioning ERR_CONNECTION_REFUSED:
     1. troubleshooting.md - "When you see ERR_CONNECTION_REFUSED..."
     2. network-errors.pdf - "Common causes include..."

Pure semantic search would miss this. RAG Vault finds it.

How It Works

Document → Parse → Chunk by meaning → Embed locally → Store in LanceDB
                         ↓
Query → Embed → Vector search + BM25 → Fusion → Optional reranking → Results

Smart chunking: Splits by meaning, not character count. Keeps code blocks intact.

Hybrid search: Two fusion modes that combine vector similarity with BM25 keyword matching:

  • Boost mode (default): BM25 boosts vector search distances multiplicatively. Simple and predictable.

  • RRF mode (opt-in via RAG_SEARCH_MODE=rrf): Reciprocal Rank Fusion treats vector and BM25 as independent voters. This can surface documents that vector search alone would miss.

Cross-encoder reranking (opt-in): After the first pass, a cross-encoder model (Xenova/ms-marco-MiniLM-L-6-v2, ~23MB) scores each (query, passage) pair together for tighter relevance ranking. Turn it on with RAG_RERANKER_ENABLED=true.

Query expansion (opt-in): Generates reformulated queries to improve recall when searches are paraphrased or conceptual. Two backends: local template-based expansion (default, fully offline) or LLM-based HyDE through an external API. Turn it on with RAG_HYDE_ENABLED=true.

Quality filtering: Groups results by relevance gaps instead of arbitrary top-K cutoffs.

Local by default: Embeddings via Transformers.js. Storage via LanceDB. Network is only needed for initial model download or if you explicitly ingest remote URLs.

MCP tools included: query_documents, ingest_file, ingest_data, delete_file, list_files, status, feedback_pin, feedback_dismiss, and feedback_stats.

Supported Formats

Format

Extension

Notes

PDF

.pdf

Full text extraction, header/footer filtering

Word

.docx

Tables, lists, formatting preserved

Markdown

.md

Code blocks kept intact

Text

.txt

Plain text

JSON

.json

Converted to searchable key-value text

JSONL / NDJSON

.jsonl, .ndjson

Parsed line-by-line for logs and structured records

HTML

via ingest_data

Auto-cleaned with Readability

Configuration

Environment Variables

Variable

Default

What it does

BASE_DIR

Current directory

Only files under this path can be accessed

DB_PATH

./lancedb/

Where vectors are stored

CACHE_DIR

./models/

Model cache directory

MODEL_NAME

Xenova/all-MiniLM-L6-v2

HuggingFace embedding model

MAX_FILE_SIZE

104857600 (100 MB)

Biggest file you can ingest

RAG_EMBEDDING_DEVICE

auto

Device for running embeddings: auto, cpu, cuda, dml, webgpu, wasm, gpu, webnn

WEB_PORT

3000

Port for web interface

UPLOAD_DIR

./uploads/

Temporary directory for web UI file uploads

Windows users: RAG_EMBEDDING_DEVICE=auto tries GPU providers (DirectML), which can fail if ONNX Runtime GPU binaries aren't available. If you see embedding initialization errors, set RAG_EMBEDDING_DEVICE=cpu in your MCP config for reliable operation. See the GPU acceleration FAQ for details.

One-command override (no .env edit):

# MCP mode
npx github:RobThePCGuy/rag-vault --embedding-device cpu

# Web mode
npx github:RobThePCGuy/rag-vault web --embedding-device dml

# Explicitly force auto detection
npx github:RobThePCGuy/rag-vault --gpu-auto

Search Tuning

Variable

Default

What it does

RAG_SEARCH_MODE

boost

Fusion mode: boost (multiplicative keyword boost) or rrf (Reciprocal Rank Fusion)

RAG_HYBRID_WEIGHT

0.6

Balance between vector and BM25. 0 = vector-only, 1.0 = BM25-only

RAG_RRF_K

60

RRF smoothing constant (only applies in rrf mode). Industry standard is 60.

RAG_GROUPING

unset

Quality filter: similar = top group only, related = top 2 groups

RAG_MAX_DISTANCE

unset

Drops results below this relevance threshold (use with boost mode; rrf scores are rank-based)

RAG_GROUPING_STD_MULTIPLIER

1.5

How many standard deviations between groups counts as a relevance gap

RAG_HYBRID_CANDIDATE_MULTIPLIER

2

How many extra vector candidates to grab before keyword reranking

RAG_FTS_MAX_FAILURES

3

Full-text search failures before FTS is temporarily disabled

RAG_FTS_COOLDOWN_MS

300000 (5 min)

How long to wait before retrying FTS after hitting the failure limit

Cross-Encoder Reranking (opt-in)

Variable

Default

What it does

RAG_RERANKER_ENABLED

false

Turn on cross-encoder reranking for better results

RAG_RERANKER_MODEL

Xenova/ms-marco-MiniLM-L-6-v2

HuggingFace cross-encoder model (~23MB ONNX, downloads on first use)

RAG_RERANKER_CANDIDATE_MULTIPLIER

2

Fetch this many extra candidates for the reranker to score

RAG_RERANKER_DEVICE

auto

Device for the reranker (same options as RAG_EMBEDDING_DEVICE)

RERANKER_INIT_TIMEOUT_MS

600000 (10 min)

Timeout for model download and initialization

Query Expansion / HyDE (opt-in)

Variable

Default

What it does

RAG_HYDE_ENABLED

false

Turn on query expansion for better recall

RAG_HYDE_BACKEND

rule-based

rule-based for local template expansion, api for LLM-based HyDE

RAG_HYDE_EXPANSIONS

2

Number of expanded queries to generate

RAG_HYDE_API_KEY

unset

API key for LLM backend (required when RAG_HYDE_BACKEND=api)

RAG_HYDE_API_BASE_URL

https://api.anthropic.com

API endpoint for LLM backend

RAG_HYDE_API_MODEL

claude-haiku-4-5-20251001

Model for LLM-based expansion

Privacy note: The api backend sends query text to an external LLM endpoint, which breaks the "zero cloud" guarantee. The default rule-based backend is fully local.

Security (optional)

Variable

Default

What it does

RAG_API_KEY

unset

API key for authentication

RAG_BIND_HOST

127.0.0.1

Interface the web/remote servers bind to. Loopback only by default; set to 0.0.0.0 to expose on the network (do this only with RAG_API_KEY set). RAG_HOST is an alias.

CORS_ORIGINS

localhost

Allowed origins (comma-separated, or *)

RATE_LIMIT_WINDOW_MS

60000

Rate limit time window (ms)

RATE_LIMIT_MAX_REQUESTS

100

Max requests per window

Advanced

Variable

Default

What it does

ALLOWED_SCAN_ROOTS

Home directory

Directories allowed for database scanning

JSON_BODY_LIMIT

5mb

Max request body size

REQUEST_TIMEOUT_MS

30000

API request timeout

REQUEST_LOGGING

false

Turn on request audit logging

Copy .env.example for a complete configuration template.

For code-heavy content, try:

"env": {
  "RAG_HYBRID_WEIGHT": "0.8",
  "RAG_GROUPING": "similar"
}

Frequently Asked Questions

For local files, yes. Indexing and search run on your machine after the embedding model downloads (~90MB). RAG Vault only hits the network if you choose remote URL ingestion or need to download a model.

Yes, after the first run. The model caches locally.

RAG Vault picks a device automatically by default (RAG_EMBEDDING_DEVICE=auto). When GPU providers are set up correctly, this can speed up embedding generation.

Important: On Windows, auto tries DirectML (dml), which requires ONNX Runtime GPU binaries. If those binaries aren't installed or your GPU setup is incomplete, the server won't start at all. It doesn't fall back to CPU gracefully. The same goes for Linux without CUDA binaries.

Recommendation: If you hit embedding initialization errors, set RAG_EMBEDDING_DEVICE=cpu in your MCP config. CPU mode is reliable on all platforms and fast enough for most workloads (the default model is only ~90MB).

"env": {
  "RAG_EMBEDDING_DEVICE": "cpu"
}

Supported device values: auto, cpu, cuda, dml, gpu, wasm, webgpu, webnn, webnn-npu, webnn-gpu, webnn-cpu. The alias directml is also accepted and maps to dml.

Yes. Set MODEL_NAME to any compatible HuggingFace model. You'll need to delete DB_PATH and re-ingest because different models produce incompatible vectors.

Recommended upgrade: For better quality and multilingual support, use EmbeddingGemma:

"MODEL_NAME": "onnx-community/embeddinggemma-300m-ONNX"

It's a solid pick if you need multilingual support or higher-quality retrieval.

Other specialized models:

  • Scientific: sentence-transformers/allenai-specter

  • Code: jinaai/jina-embeddings-v2-base-code

Copy the DB_PATH directory (default: ./lancedb/).

Troubleshooting

Problem

Solution

No results found

Documents need to be ingested first. Run "List all ingested files" to check.

Model download failed

Check your internet connection. The model is ~90MB from HuggingFace.

Embedding initialization fails

Set RAG_EMBEDDING_DEVICE=cpu in your MCP config. The auto default can fail on Windows without GPU binaries.

Protobuf parsing failed

Corrupted model cache. Delete CACHE_DIR (default: ./models/) and restart. RAG Vault also auto-retries with an isolated recovery cache.

File too large

Default limit is 100MB. Set MAX_FILE_SIZE higher or split the file.

Path outside BASE_DIR

All file paths must be under BASE_DIR. Use absolute paths.

MCP tools not showing

Check your config syntax and restart your AI tool completely (Cmd+Q on Mac).

mcp-publisher login github fails with slow_down

Use token login instead: mcp-publisher login github --token "$(gh auth token)" (or pass a PAT).

401 Unauthorized

API key required. Set RAG_API_KEY or use the correct header format.

429 Too Many Requests

Rate limited. Wait for the reset or increase RATE_LIMIT_MAX_REQUESTS.

CORS errors

Add your origin to CORS_ORIGINS environment variable.

Development

git clone https://github.com/RobThePCGuy/rag-vault.git
cd rag-vault
pnpm install
pnpm --prefix web-ui install

# Install local git hooks (recommended, even for solo dev)
pnpm hooks:install

# Fast local quality gate (backend + web-ui type/lint/format, deps, unused, build, unit tests)
pnpm check:all

# Unit tests only (no model download required)
pnpm test:unit

# Integration/E2E tests (requires model download/network)
pnpm test:integration

# Build
pnpm build

# Run MCP server locally (stdio)
pnpm dev

# Run MCP server locally (remote HTTP + SSE)
pnpm dev:remote

# Run web server locally
pnpm web:dev

# Release to npm (local, guarded)
pnpm release          # patch
pnpm release:minor
pnpm release:major
pnpm release:dry

Test Tiers

  • pnpm test:unit: deterministic tests for local/CI quality checks. Doesn't include model-download integration paths.

  • pnpm test:integration: full integration and E2E workflows, including embedding model initialization.

Use RUN_EMBEDDING_INTEGRATION=1 to explicitly opt into network/model-dependent suites.

Release Strategy

  • Releases are local and scripted via scripts/release-npm.sh.

  • Supported bumps: patch, minor, major.

  • The script runs dependency installs, pnpm check:all, and pnpm ui:build before touching version files.

  • package.json and server.json versions only get updated after checks pass, and they're auto-restored if any later step fails.

  • pnpm release:dry runs the full gate plus npm dry-run publish and always restores version files.

Project Structure

src/
├── bin/             # CLI subcommands (skills install)
├── chunker/         # Semantic text splitting
├── embedder/        # Transformers.js wrapper
├── errors/          # Error handling utilities
├── explainability/  # Keyword-based result explanations
├── flywheel/        # Feedback loop (pin/dismiss reranking)
├── hyde/            # Query expansion + HyDE (LLM-based)
├── parser/          # PDF, DOCX, HTML parsing
├── query/           # Advanced query syntax parser
├── reranker/        # Cross-encoder reranking (Transformers.js)
├── server/          # MCP tool handlers + remote transport
├── utils/           # Config, file helpers, process handlers
├── vectordb/        # LanceDB + hybrid search (boost + RRF)
└── web/             # Express server + REST API

web-ui/              # React frontend (Vite + Tailwind)

Documentation

License

MIT: free for personal and commercial use.

Acknowledgments

Built with Model Context Protocol, LanceDB, and Transformers.js.

Started as a fork of mcp-local-rag by Shinsuke Kagawa. Now it's its own thing. Huge credit to upstream contributors for the foundation, I've been iterating hard from there. Local-first dev tools, all the way.

Available Tools

9 tools
delete_fileA

Remove a document from your knowledge base. Use filePath for files you added with ingest_file, or source for content you added with ingest_data. You need to provide one or the other.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceNo
filePathNo

TDQS

A4.2/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

With no annotations, the description must disclose behavioral traits. It indicates removal from the knowledge base, implying destructive action, but does not mention irreversibility, error handling (e.g., nonexistent file), or what happens if both parameters are provided. The note about providing one or the other adds some context, but more detail would improve transparency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is extremely concise with two short sentences, front-loading the core action. Every word is purposeful, and there is no redundant or extraneous information. It efficiently conveys all necessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (2 optional params, no output schema, no annotations), the description covers the primary usage scenario well. It explains how to specify the document to delete. However, it omits details like success/error responses, permission requirements, or side effects, which would enhance completeness for an agent.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Since the schema has zero parameter descriptions, the description compensates by explaining the origin of each parameter (filePath for ingest_file, source for ingest_data) and their mutual exclusivity. This adds meaningful context beyond the parameter names, though it could specify valid formats or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the verb 'Remove' and the resource 'document from your knowledge base'. It distinguishes itself from sibling tools like ingest_file and ingest_data (which add content) and list_files (which lists them), leaving no ambiguity about its function.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides explicit guidance on which parameter to use based on how the content was added (filePath for ingest_file, source for ingest_data) and states that exactly one is needed. While it does not compare against alternatives, deletion is unique among siblings, so this is sufficient.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

feedback_dismissB

Mark a search result as irrelevant for a query. Dismissed results get pushed down in future searches. Use this when a result wasn't helpful.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceQueryYesThe query that returned this result
targetFilePathYesFile path of the result to dismiss
targetChunkIndexYesChunk index of the result to dismiss
targetFingerprintNoOptional fingerprint for resilient matching

TDQS

B3.3/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description carries the full burden. It discloses the effect (pushed down) but fails to mention important behavioral details such as whether the action is reversible, if it persists across sessions, or if it affects other users.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is exceptionally concise with two sentences that front-load the action and effect, followed by a usage instruction. Every word adds value with no redundancy.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the simple nature of the tool and the well-described schema, the description provides adequate functional context. However, it lacks mention of return value, error conditions, or undo capability, making it minimally complete.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The input schema already covers all 4 parameters with descriptions (100% coverage). The tool description adds no additional parameter-specific information, so the baseline score of 3 is appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the action (dismiss) and the object (search result for a query), and explains the effect (pushed down). It distinguishes from sibling tools like feedback_pin by implying this is for irrelevant results, though not explicitly contrasting.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description includes a usage guideline: 'Use this when a result wasn't helpful.' However, it does not mention when not to use or compare with alternatives like feedback_pin, leaving room for interpretation.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

feedback_pinA

Mark a search result as relevant for a query. Pinned results get boosted in future searches. Use this when a result was helpful.

ParametersJSON Schema
NameRequiredDescriptionDefault
sourceQueryYesThe query that returned this result
targetFilePathYesFile path of the result to pin
targetChunkIndexYesChunk index of the result to pin
targetFingerprintNoOptional fingerprint for resilient matching

TDQS

A3.5/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, but the description adds behavioral context by mentioning that pinned results get boosted. It does not disclose reversibility, limits, or idempotency.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Two concise sentences, front-loaded with the main action and purpose, with no unnecessary information.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness3/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the complexity (4 parameters, no output schema, no annotations), the description is adequate but incomplete, missing error conditions or idempotency details.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 100% with all parameters described. The description does not add additional meaning beyond the schema, earning a baseline score of 3.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states it marks a search result as relevant and explains the boosting effect. However, it does not explicitly differentiate from sibling tools like feedback_dismiss.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

It provides a clear when-to-use ('Use this when a result was helpful'), but lacks guidance on when not to use it or alternatives like feedback_dismiss.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

feedback_statsA

See your feedback stats: total events, how many results you've pinned, and how many you've dismissed.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/5.0
Behavior2/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations are provided, so the description bears full burden. It states 'see your feedback stats,' implying a read-only operation, but does not explicitly confirm safety, disclose any side effects, authentication needs, or limitations. The lack of additional behavioral context leaves the agent with minimal guidance beyond the purpose.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence with no wasted words. Every part contributes meaning, making it highly concise.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool's simplicity (no parameters, no output schema), the description adequately covers what the tool does and the specific metrics it returns. However, it could be more complete by specifying scope (e.g., timeframe, user-specific) or return format, but it is largely sufficient.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has zero parameters and schema coverage is 100%. Per rubric, '0 params = baseline 4.' The description adds no parameter information, which is acceptable since none exist.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool provides feedback stats including total events, pinned results, and dismissed results. The verb 'see' and the specific metrics make the purpose unambiguous, and it distinguishes itself from sibling action tools like feedback_pin and feedback_dismiss.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies usage when feedback stats are needed, providing clear context. However, it does not explicitly state when not to use it or mention alternatives like query_documents, so it falls short of a 5.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ingest_dataA

Add text content directly instead of from a file. Good for: fetched web pages (format: html), copied text (format: text), or markdown strings (format: markdown). The source identifier lets you update the content later by re-ingesting with the same source. You can add custom metadata too. For files on disk, use ingest_file instead.

ParametersJSON Schema
NameRequiredDescriptionDefault
contentYes
metadataYes

TDQS

A4.4/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided, so description carries full burden. It discloses that re-ingesting with same source updates content, and notes custom metadata. Lacks mention of whether it appends or overwrites, and no info on return value or error handling.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Three concise sentences, front-loaded with core purpose. Every sentence adds value: purpose, use cases, update behavior, alternative tool.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Completeness is high given no output schema or annotations. Covers input, update semantics, and sibling differentiation. Minor gap: no mention of return type or success indication.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but description provides context for parameters: explains purpose of source (update later) and format options (text, html, markdown). Does not detail content parameter beyond 'text content directly' or custom metadata structure.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Clear verb-resource pair: 'Add text content directly.' Distinguishes from sibling tool ingest_file by explicitly saying 'instead of from a file' and listing use cases.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines5/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

Explicitly states when to use (for fetched web pages, copied text, markdown strings) and when not to use (use ingest_file for files on disk). Also mentions re-ingesting capability.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

ingest_fileA

Add a document (PDF, DOCX, TXT, MD, JSON, JSONL) to your knowledge base so you can search it. Use the full file path. If you ingest the same file again, it replaces the old version. You can tag it with metadata like author, domain, or tags.

ParametersJSON Schema
NameRequiredDescriptionDefault
filePathYes
metadataNo

TDQS

A3.6/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Without annotations, the description carries the burden. It discloses that re-ingesting the same file replaces the old version and mentions metadata tagging. It does not cover synchronous/asynchronous behavior, permission requirements, or side effects on existing data.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is three sentences, front-loads the action, and provides key details without unnecessary words. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

For a 2-parameter tool with no output schema, the description covers operation, file types, duplicate behavior, and metadata. It lacks return value or error information, but is adequate for basic use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters3/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

Schema coverage is 0%, but the description adds meaning: filePath should be a full path, and metadata allows tagging with keys like author, domain. However, it could be more specific, e.g., accepted metadata key names or constraints.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose4/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states that the tool adds a document to a knowledge base for searching, and lists supported file types. It implicitly differentiates from siblings like query_documents by mentioning search capability, but does not explicitly contrast with other tools like ingest_data.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description explains when to use the tool (to add a document) and notes behavior on re-ingestion. However, it does not provide guidance on when not to use it or suggest alternatives among siblings.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

list_filesA

Show all documents in your knowledge base, with file paths and how many chunks each one has.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.1/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

No annotations provided. Description discloses output (file paths, chunk counts) but omits potential issues like pagination or large KB performance. Adequate for simple list tool.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Single sentence, no filler, directly communicates purpose and output. Efficient and front-loaded.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

With zero parameters and no output schema, the description fully covers what the tool does and returns. No missing context for a list-all operation.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

No parameters exist; schema coverage is 100% (vacuous). Description adds no param info as none needed. Baseline for 0 params is 4.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

Description clearly states 'Show all documents in your knowledge base' with specific details on returned info (file paths, chunk counts). Distinct from siblings like query_documents and ingest_file.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines3/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

No explicit when-to-use or alternatives. Purpose is self-explanatory but lacks guidance on when not to use or comparison to query_documents.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

query_documentsA

Search your documents using both meaning and exact keyword matching. You can also use advanced syntax:

  • "exact phrase" → Match phrase exactly

  • field:value → Filter by custom metadata (e.g., domain:legal, author:john)

  • term1 AND term2 → Both terms required (default)

  • term1 OR term2 → Either term matches

  • -term → Exclude results containing term Results include a score (0 = best match, higher = less relevant). Set explain=true to see why each result matched.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNo
queryYes
explainNo

TDQS

A4.3/5.0
Behavior4/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

Discloses query semantics, scoring (0=best match), and explain behavior. Since no annotations exist, the description carries full burden and does so adequately.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness4/5

Is the description appropriately sized, front-loaded, and free of redundancy?

Effective front-loading: first sentence states purpose, then syntax details. Slightly verbose but remains clear. Every sentence adds value.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness4/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Covers query syntax, scoring, and explain. Missing output schema but explains result score. Adequate for a search tool with 3 parameters.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

With 0% schema coverage, the description compensates by explaining the query parameter's syntax in detail and the explain parameter. limit is self-explanatory, but not detailed.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly states the tool's purpose: 'Search your documents using both meaning and exact keyword matching.' This distinguishes it from sibling tools like ingest_file, delete_file, etc.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description provides detailed usage guidelines including advanced query syntax and parameter effects. No explicit when-to-use vs alternatives, but the search purpose is clear.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

statusA

Check how many documents and chunks you have, the database size, and current settings.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.3/5.0
Behavior3/5

Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?

The description states what information the tool retrieves (counts, size, settings) but does not disclose behavioral traits like whether it is read-only or requires authentication. Since no annotations are provided, the description should cover these aspects more thoroughly.

Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.

Conciseness5/5

Is the description appropriately sized, front-loaded, and free of redundancy?

The description is a single, front-loaded sentence that directly states the tool's purpose without any unnecessary words. Every element earns its place.

Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.

Completeness5/5

Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?

Given the tool has no parameters, no output schema, and low complexity, the description provides sufficient information for an agent to understand what the tool returns. It is complete for its intended use.

Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.

Parameters4/5

Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?

The tool has no parameters, and the input schema covers 100% of the (empty) set. The description does not need to add parameter details, making a baseline score of 4 appropriate.

Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.

Purpose5/5

Does the description clearly state what the tool does and how it differs from similar tools?

The description clearly specifies what the tool does: check counts of documents and chunks, database size, and current settings. This distinguishes it from sibling tools that perform data operations like querying documents or ingesting files.

Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.

Usage Guidelines4/5

Does the description explain when to use this tool, when not to, or what alternatives exist?

The description implies the tool is for checking system status rather than manipulating data, but it does not explicitly state when to use it or when to avoid it. The context from sibling tools helps, but explicit guidance would improve clarity.

Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.

Tool Schema Changelog

Recent tool additions, removals, and schema changes observed during successful MCP inspections. Dates show when Glama detected each change.

  1. 9 tool updatesv1.9.2
    • First observeddelete_file
    • First observedfeedback_dismiss
    • First observedfeedback_pin
    • First observedfeedback_stats
    • First observedingest_data
    • First observedingest_file
    • First observedlist_files
    • First observedquery_documents
    • First observedstatus

TDQS

A4/5.0
Disambiguation5/5

Each tool has a distinct purpose: querying, ingesting (file vs. data), deleting, listing, status, and feedback actions. No overlap or ambiguity.

Naming Consistency5/5

All tool names follow a consistent verb_noun pattern (e.g., query_documents, ingest_file, delete_file) using lowercase and underscores, making them predictable.

Tool Count5/5

9 tools cover document ingestion, deletion, query, listing, status, and feedback—well-scoped for a RAG server without being too many or too few.

Completeness4/5

Core CRUD and search are present, with feedback for iterative improvement. Slightly missing direct document content retrieval, but re-ingestion allows updates. Minor gap.

Maintenance

ActivityActive
ResponsivenessNo issues

Resources

Unclaimed servers have limited discoverability.

Looking for Admin?

If you are the server author, to access and configure the admin panel.

Related MCP Connectors

Related MCP Servers

  • A
    license
    Not graded
    quality
    C
    maintenance
    Creates and searches private, local RAG libraries from documentation to ground AI assistants in authoritative sources, reducing hallucinations by providing current, accurate context from your own docs instead of relying on outdated training data.
    21
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    Enables AI coding assistants to search and retrieve information from a locally ingested knowledge base using hybrid search, grounded in user-curated documentation.
    17
    MIT

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/RobThePCGuy/rag-vault'

If you have feedback or need assistance with the MCP directory API, please join our Discord server