Skip to main content
Glama
rohithmahesh3

mcp-semantic-search

MCP Semantic Search

A Model Context Protocol (MCP) server that indexes codebases using semantic embeddings for natural language search.

Python Version License

Features

  • 🔍 Semantic Code Search – Find code using natural language queries instead of exact text matching

  • ⚡ Fast Indexing – Efficient chunking and batch embedding with background processing

  • 🧠 Smart Chunking – Language-aware code splitting:

    • Python: Function/class boundary detection

    • Others: Line-based with configurable overlap

  • 🌐 Multi-language Support – Python, JavaScript, TypeScript, JSX, TSX, Markdown, YAML, JSON, HTML, CSS, Bash, SQL, and more

  • 👀 Live Watch – Automatically re-index on file changes with debouncing

  • 🔄 Incremental Updates – Reindex only changed files without full rebuild

  • 🗑️ Deletion Handling – Automatically removes chunks for deleted files

  • 📊 Status Tracking – Real-time indexing progress and queue monitoring

Related MCP server: Acemcp

Quick Start

Prerequisites

  • Python 3.12 or higher

  • Qdrant vector database (running locally or remotely)

  • Google Gemini API key

Installation

# Using uvx (recommended - no installation needed)
uvx mcp-semantic-search

# Or install with pip
pip install mcp-semantic-search

Configuration

Set environment variables:

export GEMINI_API_KEY="your_gemini_api_key"
export QDRANT_URL="http://localhost:6333"

Optional environment variables:

# Embedding model (default: text-embedding-004)
export GEMINI_EMBEDDING_MODEL="text-embedding-004"

# Chunk configuration (defaults: 50/10/5)
export CHUNK_MAX_LINES=50        # Max lines per chunk
export CHUNK_OVERLAP_LINES=10    # Overlap between chunks
export CHUNK_MIN_LINES=5         # Min lines for valid chunk

Or create a .env file:

GEMINI_API_KEY=your_gemini_api_key
QDRANT_URL=http://localhost:6333

Running Qdrant

# Using Docker
docker run -p 6333:6333 qdrant/qdrant

# Or using docker-compose
echo '
services:
  qdrant:
    image: qdrant/qdrant
    ports:
      - "6333:6333"
' | docker-compose -f - up

Usage with Claude Code

Edit your Claude Code MCP configuration file (~/.claude.json or ~/.config/claude/config.json):

{
  "mcpServers": {
    "semantic-search": {
      "type": "stdio",
      "command": "uvx",
      "args": ["mcp-semantic-search"],
      "env": {
        "GEMINI_API_KEY": "your_gemini_api_key_here",
        "QDRANT_URL": "http://localhost:6333"
      }
    }
  }
}

For a local installation (after pip install mcp-semantic-search):

{
  "mcpServers": {
    "semantic-search": {
      "type": "stdio",
      "command": "mcp-semantic-search",
      "env": {
        "GEMINI_API_KEY": "your_gemini_api_key_here",
        "QDRANT_URL": "http://localhost:6333"
      }
    }
  }
}

With optional chunk configuration:

{
  "mcpServers": {
    "semantic-search": {
      "type": "stdio",
      "command": "uvx",
      "args": ["mcp-semantic-search"],
      "env": {
        "GEMINI_API_KEY": "your_gemini_api_key_here",
        "QDRANT_URL": "http://localhost:6333",
        "CHUNK_MAX_LINES": "50",
        "CHUNK_OVERLAP_LINES": "10",
        "CHUNK_MIN_LINES": "5"
      }
    }
  }
}

Method 2: Using CLI

claude mcp add semantic-search \
  -e GEMINI_API_KEY="$GEMINI_API_KEY" \
  -e QDRANT_URL="$QDRANT_URL" \
  -- uvx mcp-semantic-search

Available Tools

Tool

Description

Returns

index_codebase(root_dir, force_reindex, max_files)

Index the codebase

{"status": "success", "files_queued": N}

search_code(query, limit, score_threshold)

Semantic search across all files

{"query": "...", "count": N, "results": [...]}

search_file(query, file_path, limit)

Search within a specific file

{"query": "...", "file": "...", "results": [...]}

get_status()

Check indexing status

{"collection": {...}, "queue": {...}}

start_live_watch(root_dir, debounce_seconds)

Start file watching

{"status": "success", "running": true}

stop_live_watch()

Stop file watching

{"status": "stopped", "running": false}

clear_index()

Reset the entire index

{"status": "success", "message": "..."}

Example Workflow

# Index your codebase (auto-starts on first use)
index_codebase(root_dir="/path/to/project")
# Returns: {"status": "success", "files_queued": 1234}

# Search for code using natural language
search_code("how does authentication work")
# Returns:
# {
#   "query": "...",
#   "count": 5,
#   "results": [
#     {
#       "file": "src/auth/middleware.py",
#       "lines": "10-25",
#       "score": 0.876,
#       "content": "..."
#     },
#     ...
#   ]
# }

# Check indexing status
get_status()
# Returns:
# {
#   "collection": {"total_chunks": 12345, "files_indexed": 1234},
#   "queue": {"running": true, "queued": 0, "pending": 0}
# }

# Enable live watching (auto-index on file changes)
start_live_watch(root_dir="/path/to/project")

Configuration

Chunking Configuration

Control how code is split into searchable chunks:

# Smaller chunks = more precise results, more storage
export CHUNK_MAX_LINES=30

# Larger chunks = more context per result
export CHUNK_MAX_LINES=100

# Adjust overlap for context continuity
export CHUNK_OVERLAP_LINES=15

Variable

Default

Description

CHUNK_MAX_LINES

50

Maximum lines per chunk

CHUNK_OVERLAP_LINES

10

Overlap between chunks

CHUNK_MIN_LINES

5

Minimum lines for valid chunk

Search Configuration

# Adjust search parameters
search_code(
    query="your query",
    limit=20,                 # More results (default: 10)
    score_threshold=0.3       # Lower threshold = more results (default: 0.5)
)

Development

Setup

# Clone the repository
git clone https://github.com/yourusername/mcp-semantic-search.git
cd mcp-semantic-search

# Install in development mode
pip install -e .

Testing

# Test with a small subset
python -c "
from mcp_semantic_search import GeminiEmbedder, QdrantCodeStore, index_repository

embedder = GeminiEmbedder()
store = QdrantCodeStore()

# Test with just 5 files
stats = index_repository(
    root_dir='.',
    embedder=embedder,
    store=store,
    max_files=5
)
print(stats)
"

# Test semantic search
python -c "
from mcp_semantic_search import GeminiEmbedder, QdrantCodeStore

embedder = GeminiEmbedder()
store = QdrantCodeStore()

query_embedding = embedder.embed_query('authentication')
results = store.search(query_embedding, limit=5)

for r in results:
    print(f'{r[\"file_path\"]}:{r[\"start_line\"]} ({r[\"score\"]:.2f})')
    print(r['content'][:200])
    print('---')
"

Technical Details

  • Embedding Model: Google text-embedding-004 (768 dimensions)

  • Vector Database: Qdrant with cosine similarity

  • Chunking Strategy:

    • Python: AST-based function/class boundary detection

    • Others: Line-based with configurable chunk size and overlap

  • File Watching: Watchdog with 3-second debouncing

  • Deduplication: SHA256 hash-based, unchanged files are skipped

  • Background Processing: FIFO queue for incremental reindexing

Supported Languages

Extension

Language

.py

Python

.js

JavaScript

.ts

TypeScript

.jsx

JSX

.tsx

TSX

.md

Markdown

.yaml, .yml

YAML

.json

JSON

.html

HTML

.css

CSS

.sh

Bash

.sql

SQL

.txt

Text

License

MIT License - see LICENSE for details.

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

Acknowledgments

Available Tools

8 tools
clear_indexA

Clear the entire index.

Use this to start fresh or recover from errors.

Returns: Dict with confirmation status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.5/5.0
Behavior4/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It clearly states the destructive scope ('entire index') and what will be returned ('Dict with confirmation status'), which is meaningful context. It does not mention reversibility or permissions, but for a clear operation, this level of transparency is adequate.

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 minimal and front-loaded: two short sentences and a return line. Every sentence earns its place with no redundancy or fluff.

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?

For a zero-parameter, output-schema-bearing tool, the description is complete: it explains what it does, when to use it, and the return shape. No important information is missing for selecting and invoking this tool.

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 the schema coverage is 100% (empty object). The description appropriately avoids parameter discussion, and the baseline for no-parameter tools 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?

The description clearly states the action ('Clear the entire index') with a specific verb and resource, distinguishing it from sibling tools like index_codebase (which builds) and search_code (which queries). It also adds purpose context ('start fresh or recover from errors'), making the tool's intent unambiguous.

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 explicitly tells when to use the tool ('start fresh or recover from errors'), providing clear usage context. However, it does not mention when not to use it or name any alternatives, 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.

get_live_watch_statusB

Get the status of the live file watcher.

Returns: Dict with current state.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/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 only mentions it returns a dict with current state, but does not disclose whether the watcher must be running, if it is read-only, or any side effects. This is a minimal disclosure for a status operation.

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?

The description is very concise and front-loaded with the action. The 'Returns: Dict with current state' line is slightly redundant given the output schema, but it does not significantly bloat the description.

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?

For a simple zero-parameter tool, the description is adequate but minimal. It lacks context about its relationship to start_live_watch and stop_live_watch, and does not clarify when the status would be relevant. The output schema covers return details, but the description could better position the tool among siblings.

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 the schema is empty with 100% coverage. According to the rubric, zero params warrant a baseline score of 4, and no additional parameter explanation is needed.

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 'Get the status of the live file watcher,' which specifies the verb and resource. It is specific enough to differentiate from generic tools like get_status, though it does not explicitly contrast with siblings.

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

Usage Guidelines2/5

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

The description provides no guidance on when to use this tool versus alternatives such as get_status or start_live_watch. It only restates the function without any contextual advice, leaving the agent to infer usage.

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

get_statusA

Get the current index status and queue progress.

Returns: Dict with collection info, statistics, and real-time queue status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden. It discloses the return type ('Dict with collection info, statistics, and real-time queue status') but does not mention side effects, authorization requirements, or whether the operation is read-only. For a status getter, this is minimal but not misleading.

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 only two lines: the purpose sentence and a brief note about the return value. Every sentence earns its place with no wasted words or repetition of structured schema details.

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?

The tool is simple (no parameters) and has an output schema, which documents return values. The description provides a clear high-level summary and distinguishes from the live-watch sibling. It does not mention error conditions or prerequisites, but these are not critical for a no-argument status endpoint.

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?

There are zero parameters, so the rubric baseline is 4. The description adds no parameter-specific meaning, but none is needed since the schema has an empty properties object and schema coverage is 100%. The return-focused description does not detract from parameter clarity.

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: 'Get the current index status and queue progress.' This is a specific verb (get) with a specific resource (index status and queue progress), and it differentiates from sibling tools like get_live_watch_status by focusing on the index rather than live watch activity.

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 implies the tool is used to check indexing status and queue progress, but it does not provide explicit guidance on when to use this tool versus alternatives like get_live_watch_status or index_codebase. No exclusions or alternative contexts are mentioned.

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

index_codebaseA

Index the codebase for semantic search.

This operation adds files to the indexing queue immediately (no debounce). Use get_status() to track progress.

ParametersJSON Schema
NameRequiredDescriptionDefault
root_dirNoRoot directory of the codebase. Defaults to MCP config or current directory.
max_filesNoMaximum number of files to index (for testing). None for all.
force_reindexNoIf True, clear existing index and reindex all files.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It discloses the immediate queue insertion and lack of debounce, but does not mention the behavior of force_reindex (clearing existing index) or whether the operation is asynchronous, non-blocking, or what happens on failure. It adds some context but leaves significant gaps for a mutation-like 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?

The description is concise and front-loaded: the first sentence states the purpose, and the second provides a key behavioral detail and a pointer to a related tool. Every sentence earns its place with no redundancy or filler.

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?

The tool has an output schema and fully described parameters, so the description doesn't need to explain return values. It covers the core action and progress tracking. However, it doesn't address the force_reindex side effect or explicitly distinguish from start_live_watch, though these are partially covered by the schema and sibling context.

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%, so the baseline is 3. The description does not add any parameter-level meaning beyond what the schema already provides; it mentions the indexing queue but doesn't explain root_dir defaults, max_files testing intent, or force_reindex semantics. The schema descriptions already cover these fields.

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 verb and resource: 'Index the codebase for semantic search.' It unambiguously distinguishes this from siblings like clear_index, search_code, and start_live_watch, which perform different operations on the codebase.

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 gives clear context on the tool's behavior: it adds files to the indexing queue immediately (no debounce) and directs the user to get_status() for progress. It does not explicitly state when not to use it or compare against alternatives, but the context is sufficient for an agent to understand the use case.

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

search_codeB

Search the codebase using natural language.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results to return.
queryYesNatural language search query (e.g., "how does authentication work").
score_thresholdNoMinimum similarity score (0-1). Lower = more results.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It only repeats what the name implies and adds 'natural language,' failing to mention whether the operation is read-only, requires an indexed codebase, how results are ranked, or any side effects. The schema does add scoring information, but the description itself offers no behavioral 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 a single, front-loaded sentence with no filler or redundancy. It is concise while still conveying the core purpose, making it easy for an agent to parse quickly.

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?

The tool is a search operation with a full input schema (100% coverage) and an output schema, so the description doesn't need to explain parameters or return values. However, it lacks critical contextual details such as whether indexing is required, how this search differs from search_file, or any limitations. This makes it minimally viable but not fully complete for selecting among context-related siblings.

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 description coverage is 100%, and the schema already provides detailed descriptions for all three parameters, including an example for 'query' and clarification for 'score_threshold'. The description adds no parameter-level information, but since the schema is exhaustive, a 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 uses a specific verb ('search') and resource ('the codebase') and specifies the mode ('using natural language'). This distinguishes it from sibling tools like search_file, which likely searches by file name/path. However, it doesn't explicitly name or contrast with alternatives.

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

Usage Guidelines2/5

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

The description gives no explicit guidance on when to use this tool versus alternatives like search_file or index_codebase. The only context is 'natural language,' which implies this is for semantic search, but there is no mention of prerequisites (e.g., indexing) or situations where another tool would be preferable.

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

search_fileB

Search within a specific file.

ParametersJSON Schema
NameRequiredDescriptionDefault
limitNoMaximum number of results.
queryYesNatural language search query.
file_pathYesPath to the file to search within.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

B3.1/5.0
Behavior2/5

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

With no annotations provided, the description carries the full burden of behavioral disclosure. It only states the basic action and gives no information about read-only nature, return format, limitations, or edge cases. This is a significant gap for a search operation that an agent must invoke correctly.

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

Conciseness3/5

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

The description is a single short sentence without unnecessary words, but it is under-specified. While concise, it lacks sufficient detail to be appropriately informative, so it does not earn a higher score on the conciseness dimension.

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?

The tool is simple and the output schema exists, so return values are covered. However, the description does not convey when to use this over search_code, and the minimal wording leaves the agent to infer key context. It is minimally viable but has clear gaps.

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 description coverage is 100%, so the schema fully explains the three parameters (query, file_path, limit). The description adds no new parameter information, which aligns with the baseline of 3 when the schema does the heavy lifting.

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 'Search within a specific file' clearly identifies the action (search) and the resource scope (a specific file), distinguishing it from sibling search_code which likely searches across a codebase. However, it does not explicitly name alternatives, so it falls short of a 5.

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 phrase 'within a specific file' implies a use case (searching a single file), but there is no explicit guidance on when to use this tool versus search_code, nor any exclusions or alternative references. This is implied usage rather than clear contextual guidance.

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

start_live_watchA

Start live file watching for automatic reindexing.

When enabled, the server will automatically detect file changes and add them to the indexing queue with debouncing.

ParametersJSON Schema
NameRequiredDescriptionDefault
root_dirNoRoot directory to watch. Defaults to MCP config or current directory.
debounce_secondsNoSeconds to wait after last change before adding to queue.

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4/5.0
Behavior3/5

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

With no annotations, the description carries the full burden of behavioral disclosure. It does explain the core behavior: automatic change detection, queueing, and debouncing. But it omits important context such as the watch being persistent until stopped, resource implications, or prerequisites beyond what the schema covers.

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 two sentences long, front-loaded with the tool's purpose, and each sentence adds value. There is no wasted wording or repetition of schema fields.

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 fully documented schema, the presence of an output schema, and a clear description of the tool's purpose and behavior, this is reasonably complete for a moderately complex tool. The main gap is not mentioning that watching persists until explicitly stopped, but the sibling stop_live_watch helps fill that gap.

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 description coverage is 100%, so the baseline is 3. The description does not add meaning beyond the schema; it merely echoes the debouncing concept without explaining how root_dir or debounce_seconds behave in practice.

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 opens with 'Start live file watching for automatic reindexing,' a specific verb+resource construction that clearly distinguishes it from siblings like stop_live_watch, get_live_watch_status, and index_codebase. It states exactly what the tool does without ambiguity.

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 phrase 'for automatic reindexing' and the behavioral clause 'When enabled, the server will automatically detect file changes' provide a clear use case—continuous file watching as opposed to one-time manual indexing. However, it does not explicitly name alternatives or state when not to use it.

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

stop_live_watchA

Stop the live file watcher.

Returns: Dict with status.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

Output Schema

ParametersJSON Schema
NameRequiredDescription

No output parameters

TDQS

A4.2/5.0
Behavior3/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 states the action and return type but does not disclose behavior when no watcher is running, whether it is idempotent, or any potential side effects beyond stopping. For a simple stop operation, this is acceptable but leaves some ambiguity.

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 two short sentences, front-loaded with the core action in the first sentence. It is concise and free of unnecessary detail.

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 no-parameter stop action with an output schema, the description is sufficiently complete. It explains the return type and the action. However, it could add a note about behavior when no watcher exists, which is a minor gap in an otherwise simple tool.

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, so the description has no parameter burden. The mention of the return dict adds some context, and the schema is empty, so the description does not need to explain fields. Baseline 4 is 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 states the action ('Stop') and the resource ('the live file watcher'). It is immediately distinguishable from sibling tools like start_live_watch (opposite action) and get_live_watch_status (status query).

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: call this to stop the watcher started by start_live_watch. It does not explicitly mention when not to use it or name alternatives, but the context from siblings and the straightforward action make the intended use clear.

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. 8 tool updatesv0.1.2
    • First observedclear_index
    • First observedget_live_watch_status
    • First observedget_status
    • First observedindex_codebase
    • First observedsearch_code
    • First observedsearch_file
    • First observedstart_live_watch
    • First observedstop_live_watch

TDQS

A3.7/5.0
Disambiguation4/5

search_code and search_file are distinct (codebase vs specific file), but their names are similar and could be confused without careful reading. get_status and get_live_watch_status also target different subsystems but share a naming pattern. Other tools have clearly unique roles.

Naming Consistency4/5

Tools follow a verb_noun pattern with consistent snake_case (search_code, clear_index, start_live_watch). Verbs vary (search, get, clear, start, stop, index) but the pattern is predictable. Minor deviation: index_codebase uses verb+noun while others use search_/get_ prefixes, but it remains consistent in style.

Tool Count5/5

8 tools is well within the ideal range and each covers a necessary function for a semantic search server: indexing, searching, status, and lifecycle management. No redundant tools are present.

Completeness4/5

The server covers the core lifecycle: index (manual and watch), search (codebase and file), status (index and watcher), and clear. Missing is the ability to remove a specific file from the index or selectively reindex, but agents can clear and reindex as a workaround.

Maintenance

ActivityInactive
ResponsivenessSyncing

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
    A
    quality
    D
    maintenance
    Enables semantic code search across codebases with automatic incremental indexing. Searches return relevant code snippets with file paths and line numbers based on natural language queries.
    1
    806
    Apache 2.0
  • A
    license
    A
    quality
    F
    maintenance
    Provides code repository indexing and semantic search capabilities, allowing natural language queries to find relevant code snippets with automatic incremental indexing and multi-language support.
    1
    19
    360
    ISC
  • A
    license
    A
    quality
    F
    maintenance
    Provides intelligent semantic code search using local AI embeddings, enabling natural language queries to find relevant code by meaning rather than exact keywords. Indexes codebases in the background with smart project detection and privacy-first local processing.
    6
    39
    199
    MIT
  • A
    license
    Not graded
    quality
    F
    maintenance
    Enables semantic code search for AI assistants by indexing codebases with embeddings and Tree-sitter, returning relevant snippets via natural language queries.
    15
    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/rohithmahesh3/mcp-semantic-search'

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