Skip to main content
Glama
adam-hanna

semantic-search-mcp

by adam-hanna

Semantic Search MCP Server

An MCP server that provides semantic code search using local embeddings. Search your codebase with natural language queries like "authentication middleware" or "database connection pooling".

Features

  • Hybrid search: Combines vector similarity (Jina code embeddings) with FTS5 keyword matching using Reciprocal Rank Fusion

  • 165+ languages: Tree-sitter parsing for Python, TypeScript, JavaScript, Go, Rust, Java, C/C++, Ruby, PHP, and more

  • Incremental indexing: File watcher automatically detects additions, modifications, and deletions

  • Respects .gitignore: Honors your project's .gitignore files (including nested ones)

  • Auto-initialization: Model loads and codebase indexes in the background on server startup

  • Zero external APIs: All embeddings generated locally with FastEmbed

Related MCP server: Enterprise Code Search MCP Server

Installation

uv tool install semantic-search-mcp

Or with pip:

pip install semantic-search-mcp

Or run directly without installing:

uvx semantic-search-mcp

Quick Start

Add to Claude Code

Option A: Project-level config (recommended)

After installing with uv tool install or pip install, create .mcp.json in your project root:

{
  "mcpServers": {
    "semantic-search": {
      "command": "semantic-search-mcp"
    }
  }
}

Option B: CLI

claude mcp add semantic-search -- semantic-search-mcp

Option C: Without installing (ephemeral)

If you prefer not to install, use uvx to run in an ephemeral environment:

{
  "mcpServers": {
    "semantic-search": {
      "command": "uvx",
      "args": ["semantic-search-mcp"]
    }
  }
}

Use

The server auto-initializes on startup.

Available Tools

Tool

Description

search_code

Search codebase with natural language

get_status

Get server state, progress, and statistics

pause_watcher

Pause file watching (events discarded)

resume_watcher

Resume file watching

reindex

Start full reindex (runs in background)

cancel_indexing

Cancel running indexing job

clear_index

Wipe all indexed data

exclude_paths

Add paths to ignore (session-only)

include_paths

Remove paths from exclusion list

How It Works

Indexing

On startup, the server:

  1. Scans your codebase for supported file types

  2. Parses code into semantic chunks (functions, classes, methods) using Tree-sitter

  3. Generates embeddings for each chunk using Jina's code embedding model

  4. Stores everything in a local SQLite database with vector search support

File Watching

The server monitors your codebase for changes in real-time:

Event

Action

File created

Parsed, embedded, and added to index

File modified

Re-indexed if content hash changed

File deleted

Removed from index

Changes are debounced (default 1s) to batch rapid modifications.

What Gets Indexed

Included:

  • Files with code extensions: .py, .js, .ts, .tsx, .jsx, .go, .rs, .java, .c, .cpp, .h, .rb, .php, .swift, .kt, .scala, and more

Excluded:

  • Files matching .gitignore patterns (all .gitignore files in your project are respected)

  • Common non-code directories: node_modules, __pycache__, .venv, build, dist, .git, vendor, etc.

  • Binary files and non-code file types

Configuration

Environment variables:

Variable

Default

Description

SEMANTIC_SEARCH_DB_PATH

.semantic-search/index.db

Index database location

SEMANTIC_SEARCH_EMBEDDING_MODEL

jinaai/jina-embeddings-v2-base-code

Embedding model

SEMANTIC_SEARCH_MIN_SCORE

0.3

Minimum relevance threshold (0-1)

SEMANTIC_SEARCH_DEBOUNCE_MS

1000

File watcher debounce in milliseconds

SEMANTIC_SEARCH_BATCH_SIZE

50

Files per batch (reduce if running out of memory)

SEMANTIC_SEARCH_MAX_FILE_SIZE_KB

512

Skip files larger than this (KB)

SEMANTIC_SEARCH_EMBEDDING_BATCH_SIZE

8

Texts per embedding call (reduce if OOM)

SEMANTIC_SEARCH_EMBEDDING_THREADS

4

ONNX runtime threads (higher = faster on multi-core)

SEMANTIC_SEARCH_USE_QUANTIZED

true

Use INT8 quantized model (30-40% faster)

Performance

GPU Acceleration

GPU acceleration is auto-detected and used when available:

Platform

Provider

Installation

NVIDIA

CUDA

pip install semantic-search-mcp[gpu]

Apple Silicon

CoreML

Automatic (M1/M2/M3)

AMD

ROCm

Install ROCm-enabled onnxruntime

Windows

DirectML

Install DirectML-enabled onnxruntime

Alternative Models

For faster indexing (with quality tradeoffs), you can use a lighter model:

Model

Dimensions

Speed

Best For

jinaai/jina-embeddings-v2-base-code

768

Baseline

Code search (default)

BAAI/bge-small-en-v1.5

384

~10x faster

General text

sentence-transformers/all-MiniLM-L6-v2

384

~32x faster

Speed priority

To use an alternative model:

export SEMANTIC_SEARCH_EMBEDDING_MODEL="sentence-transformers/all-MiniLM-L6-v2"

Note: Changing models requires a full reindex (delete .semantic-search/ directory).

UniXcoder (Experimental)

Microsoft UniXcoder is a code-specific model pre-trained on code + AST + comments. It may provide better semantic understanding of code structure, but is substantially slower (~20x slower than Jina).

Model

Dimensions

Speed

Languages

microsoft/unixcoder-base

768

~20x slower

6 (java, ruby, python, php, js, go)

microsoft/unixcoder-base-nine

768

~20x slower

9 (+ c, c++, c#)

Installation (requires additional dependencies):

pip install semantic-search-mcp[unixcoder]

Usage:

export SEMANTIC_SEARCH_EMBEDDING_MODEL="microsoft/unixcoder-base-nine"

When to use UniXcoder:

  • You prioritize search quality over indexing speed

  • Your codebase is small to medium sized

  • You have GPU acceleration (CUDA or Apple Silicon MPS)

When to avoid UniXcoder:

  • Large codebases (10,000+ files) - indexing will take hours

  • You need fast initial indexing

  • Running on CPU without GPU acceleration

Claude Code Integration

Skills and commands are automatically installed when the MCP server first starts:

  • Skills~/.claude/skills/ (AI auto-discovery)

  • Commands~/.claude/commands/ (user-invocable slash commands)

To manually reinstall or update:

semantic-search-mcp-install-skills

Available Slash Commands

Command

Description

/semantic-search-search <query>

Search codebase with natural language

/semantic-search-status

Check server status and index stats

/semantic-search-reindex

Trigger full codebase reindex

/semantic-search-cancel

Cancel running indexing job

/semantic-search-clear

Wipe all indexed data

/semantic-search-pause

Pause file watcher

/semantic-search-resume

Resume file watcher

Requirements

  • Python 3.11+

  • ~700MB disk for embedding model (downloaded on first run, ~150MB with INT8 quantization)

  • ~1GB RAM for embedding model

License

MIT

Available Tools

11 tools
cancel_indexingA

Cancel any running indexing job.

The indexing will stop after the current file completes. Partial results are kept in the index.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4/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 effectively communicates that cancellation is not immediate (waits for current file) and that partial results are preserved, providing important context beyond a simple 'cancel.' However, it does not cover potential nuances like idempotency or behavior when no job is running, so it falls short of a perfect score.

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 appropriately sized at three sentences: the first states the core action, and the next two add essential behavioral details. It is front-loaded, avoids redundant phrasing, and every sentence contributes meaning without clutter.

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 zero-parameter, no-output-schema tool, the description adequately covers the operation and its immediate consequences (delayed stop, partial results kept). It could have mentioned behavior when no indexing job is running, but given the tool's simplicity, this is a minor gap and the description is otherwise complete enough.

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, making parameter explanation unnecessary. Schema coverage is trivially 100%, and with no parameters to describe, the description does not need to add any parameter-related information. A baseline of 4 is appropriate for zero-parameter tools.

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 uses a specific verb 'cancel' and clearly identifies the resource as 'any running indexing job.' It distinguishes from sibling tools like clear_index or pause_watcher by focusing on cancellation of an in-progress job, and the added behavioral details reinforce its specific purpose.

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?

There is no explicit guidance on when to use this tool versus alternatives such as pause_watcher or clear_index. The description implies use when you want to stop indexing, but it does not state exclusions or mention alternative tools, leaving the usage context ambiguous.

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

clear_indexA

Clear all indexed data.

Removes all files and chunks from the index. The index will be empty until reindex is called.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.2/5.0
Behavior4/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 clearly discloses that all files and chunks are removed, and the index becomes empty, with a path to recovery via reindex. This is sufficient for a destructive operation, though it doesn't mention irreversibility explicitly.

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 short sentences, front-loaded with the action, followed by a detailed explanation and a statement of consequences. There is no wasted text, and the structure is clear and efficient.

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 simple parameterless tool, the description covers what it does, the scope (all indexed data), and the recovery mechanism (reindex). It doesn't discuss side effects on other subsystems, but given the tool's narrow purpose, this is complete enough.

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 schema is fully covered (100%). The description adds no parameter-specific detail, but none is needed. Baseline of 4 for zero params 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 tool's purpose: 'Clear all indexed data' and 'Removes all files and chunks from the index.' This is a specific verb+resource combination that distinguishes it from siblings like reindex_file or cancel_indexing, which operate on individual items or pending operations.

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 usage by noting the index will be empty until reindex is called, but it does not explicitly state when to use this tool versus alternatives like exclude_paths or cancel_indexing. There is no direct comparison or exclusion guidance.

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

exclude_pathsA

Add paths to exclude from indexing (session-only).

Patterns use glob syntax. Examples:

  • "node_modules" - exclude any path containing node_modules

  • "*.test.py" - exclude files ending in .test.py

  • "vendor/**" - exclude everything under vendor/

Exclusions reset when the server restarts.

ParametersJSON Schema
NameRequiredDescriptionDefault
patternsYesGlob patterns to exclude, e.g. ['node_modules', '*.test.py']

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 carries the full burden of behavioral disclosure. It discloses the session-only nature and reset-on-restart behavior, which is valuable context. However, it does not state whether patterns are appended to existing exclusions, whether exclusions affect the current index immediately, or any matching limitations.

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, with the first sentence stating the action and scope. The glob examples are compact and the session-only note is a single line, with no redundant or filler content. Every sentence earns its place.

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 single-parameter tool with no output schema, the description is adequate, covering purpose, syntax, and lifecycle. It lacks explicit guidance on interaction with sibling tools like include_paths or how exclusions apply to an ongoing indexing session, but the core usage is well covered and the tool is simple.

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 schema already documents the 'patterns' parameter with 100% coverage, but the description enriches understanding by explaining glob syntax with concrete examples ('node_modules', '*.test.py', 'vendor/**'). This clarifies how patterns are interpreted beyond the schema's generic description, adding meaningful semantic detail.

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 'Add paths to exclude from indexing (session-only)' with a specific verb and resource. The session-only qualifier distinguishes it from persistent configuration, and the sibling tool 'include_paths' makes the opposite purpose, so this tool's role is 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 provides practical usage context with glob syntax examples, clearly implying when to use this tool (to exclude paths from indexing). However, it does not explicitly compare to alternative tools like include_paths or mention when not to use it, preventing a top score.

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

get_statusA

Get comprehensive server status.

Returns server state, watcher status, indexing progress, index statistics, and current exclusion patterns.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A4.5/5.0
Behavior4/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 clearly states that the tool 'Returns' a specific list of status components, implying a read-only operation. This is sufficient transparency for a status getter, though it does not explicitly say 'does not modify server state' or mention potential limitations like staleness.

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, front-loaded with the purpose, and lists the exact return categories without any fluff. Every word contributes meaning, and it is appropriately sized for the tool's simplicity.

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?

The tool is extremely simple (no parameters, no output schema), yet the description comprehensively lists all returned data categories, giving the agent enough to decide when to call it and what to expect. Sibling tools do not overlap, so the context is complete.

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 has 100% coverage (vacuously). The baseline for 0 parameters is 4. No additional description is needed, and the absence of parameter documentation is not a gap.

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 states 'Get comprehensive server status' with a specific verb and resource, and explicitly enumerates the returned data: server state, watcher status, indexing progress, index statistics, and exclusion patterns. This clearly distinguishes it from sibling tools, which are all actions (initialize, reindex, pause_watcher, etc.) rather than status queries.

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 clear context that this tool is for retrieving overall server status, covering multiple aspects. While it does not explicitly mention alternatives or when-not-to-use, the sibling tools are all mutating or search operations, so the usage context is unambiguous. A bit more explicit guidance (e.g., 'Use when you need an overview') would have earned a 5.

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

include_pathsA

Remove paths from the exclusion list.

Reverses the effect of exclude_paths for the specified patterns.

ParametersJSON Schema
NameRequiredDescriptionDefault
patternsYesGlob patterns to remove from exclusion list

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 primary action (removing paths from the exclusion list) and its relationship to exclude_paths, but does not disclose potential side effects, persistence, or error handling for patterns not in the list. It meets the baseline but lacks additional behavioral context.

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 concise sentences, front-loaded with the main action and followed by the relationship to the sibling tool. Every word earns its place with no repetition.

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 simple tool with one parameter and no output schema, the description adequately covers the purpose and relationship to exclude_paths. It is concise and complete enough for its complexity, though it could mention persistence or error behavior.

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 fully describes the 'patterns' parameter as 'Glob patterns to remove from exclusion list', providing 100% coverage. The description's reference to 'specified patterns' adds no new meaning beyond what the schema provides, so 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.

Purpose5/5

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

The description clearly states 'Remove paths from the exclusion list' with a specific verb and resource, and explicitly differentiates itself from the sibling tool exclude_paths by noting it 'Reverses the effect of exclude_paths'. This makes the tool's purpose unambiguous.

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?

The description explicitly names the alternative tool (exclude_paths) and states this tool reverses its effect, providing clear guidance on when to use it. This qualifies as an explicit alternative reference.

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

initializeB

Initialize or re-initialize the semantic code search system.

Loads the embedding model and builds or updates the code index. Use force_reindex=True to rebuild the entire index.

Progress will be reported during indexing.

ParametersJSON Schema
NameRequiredDescriptionDefault
force_reindexNoForce full reindex even if files haven't changed

Output Schema

ParametersJSON Schema
NameRequiredDescription
modelYes
statusYes
total_chunksYes
files_indexedYes

TDQS

B3.3/5.0
Behavior3/5

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

With no annotations, the description must carry the behavioral disclosure burden. It does mention loading the embedding model, building/updating the index, and reporting progress, but it does not disclose side effects such as replacing an existing index, whether it is safe during active searches, or whether it is asynchronous/cancellable.

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 concise sentences with the main purpose first. Each sentence adds useful detail: model loading, index building/updating, the force_reindex parameter, and progress reporting. No filler or 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?

The output schema likely covers return values, so that omission is acceptable. However, the description does not explain how this tool relates to siblings like reindex or cancel_indexing, nor does it indicate whether initialization is a long-running background process or how completion is signaled besides progress. This leaves notable contextual 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?

The schema already fully describes the single parameter (force_reindex). The description restates 'rebuild the entire index' but adds little beyond the schema's own 'Force full reindex even if files haven't changed.' Since schema coverage is 100%, the baseline of 3 applies; no meaningful additional semantics are provided.

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 tool initializes or re-initializes the semantic code search system and loads the embedding model to build/update the code index. While it names the resource and action specifically, it does not explicitly differentiate itself from the sibling 'reindex' tool, which could overlap.

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 lacks guidance on when to use this tool versus alternatives like reindex, reindex_file, or clear_index. It only explains when to set force_reindex=True, which is parameter-level instruction, not usage context or exclusions.

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

pause_watcherA

Pause the file watcher.

Events that occur while paused are discarded. Use resume_watcher to start watching again.

ParametersJSON Schema
NameRequiredDescriptionDefault

No 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 disclosure. It reveals the critical side effect that events occurring while paused are discarded, which is essential behavioral information. It does not, however, mention idempotence or behavior if already paused.

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 tight sentences cover action, consequence, and recovery. There is no wasted verbiage, and the main verb is 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?

For a zero-parameter state-toggle tool, the description is complete: what it does, what happens while paused, and how to undo it. Sibling context and the absence of an output schema further reduce needed detail.

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 there is nothing to explain beyond the schema. The description correctly avoids adding meaningless parameter details.

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 uses the specific verb 'Pause' and names the resource 'file watcher', making the action unmistakable. It also distinguishes this tool from its sibling 'resume_watcher' by clearly presenting the opposite operation.

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 directs the user to 'resume_watcher' to start watching again, providing a direct alternative. It also notes that events are discarded, which implies it should not be used if event preservation is required, though this is not framed as an explicit when-not.

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

reindexA

Start a full reindex of the codebase.

Runs in the background - use get_status to monitor progress. Use cancel_indexing to abort if needed.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoForce reindex even if files haven't changed
clear_firstNoClear all existing index data before reindexing

TDQS

A4.2/5.0
Behavior4/5

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

With no annotations provided, the description carries the burden of behavioral disclosure. It reveals that the operation runs in the background and mentions monitoring and cancellation pathways, adding useful context. It does not elaborate on side effects like whether the index becomes unavailable, but the schema covers the 'clear_first' option.

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, consisting of three short sentences. It front-loads the purpose in the first sentence, then provides actionable follow-up guidance (monitor, cancel). Every sentence earns its place without 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?

The description adequately covers the start action, background execution, monitoring, and cancellation. For a tool with two optional parameters and no output schema, this is sufficient for an agent to select and invoke it correctly. Minor gap: it does not mention potential impact on existing index availability during reindexing, but this is not critical.

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%, with both parameters 'force' and 'clear_first' clearly documented in the input schema. The description adds no additional parameter-specific semantics, but this is not required given the high schema coverage. Baseline of 3 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 'Start a full reindex of the codebase.' This specifies the verb (start), resource (codebase), and scope (full reindex), distinguishing it from the sibling tool 'reindex_file' which implies a partial reindex.

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 directs the agent to use 'get_status' for monitoring and 'cancel_indexing' for aborting, providing clear operational context. However, it does not mention when to use an alternative like 'reindex_file' or when a full reindex is unnecessary, so it lacks explicit exclusions.

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

reindex_fileA

Re-index a specific file for search.

Use when a file has been modified but not yet re-indexed, or when you want to force a refresh of a file's embeddings.

ParametersJSON Schema
NameRequiredDescriptionDefault
forceNoForce reindex even if unchanged
file_pathYesPath to file to reindex

TDQS

A3.9/5.0
Behavior3/5

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

With no annotations provided, the description must carry the full burden of behavioral disclosure. It states the action ('re-index') and mentions 'embeddings,' which hints at the underlying mechanism, but it does not disclose side effects (e.g., impact on the search index while indexing), whether it is idempotent, or any required permissions. This is a moderate level of transparency for a state-changing operation.

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, front-loaded with the core action followed by usage guidance. Every word serves a purpose with no redundancy or filler, achieving an ideal structure for a tool 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 two-parameter tool, the description covers the basic purpose and usage, and the schema handles parameter details. However, there is no output schema and the description does not explain what the tool returns (e.g., success/failure, status) or mention any preconditions like the indexing system being initialized. Given the lack of annotations, this leaves some gaps for an agent deciding how to interpret the result.

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 describes both parameters (file_path: 'Path to file to reindex'; force: 'Force reindex even if unchanged') with 100% coverage. The description adds no additional meaning beyond what the schema provides, so the baseline of 3 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 ('Re-index a specific file for search') with a specific resource ('specific file') and purpose ('for search'). It distinguishes itself from sibling tools like 'reindex' by focusing on a single file, and mentions 'force a refresh of a file's embeddings' for additional specificity.

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 contexts for use: 'when a file has been modified but not yet re-indexed' or 'when you want to force a refresh.' It implies this is for individual files rather than a bulk reindex, but does not explicitly mention when not to use it or name alternative tools, stopping 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.

resume_watcherA

Resume the file watcher after pausing.

Starts watching for file changes again.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.7/5.0
Behavior2/5

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

No annotations are provided, so the description must carry the full burden of behavioral disclosure. It only states the basic action, but fails to mention what happens if the watcher is already running (idempotency), error conditions, or any side effects. The behavior is under-specified for a tool with no annotation support.

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, two short sentences, and directly addresses the tool's purpose. Every word earns its place, with no filler or redundant 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?

For a simple no-parameter tool, the description adequately states the core action. However, given the lack of annotations and output schema, it leaves gaps around state prerequisites (must be paused), error behavior, and the overall impact on the watcher, making it a minimum viable description.

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 input schema is empty, so there are no parameter semantics to explain. Per the rubric, a baseline of 4 is appropriate when there are no parameters, and the description does not need to add anything further.

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 action: 'Resume the file watcher' and 'Starts watching for file changes again.' It is specific to the resume operation and distinguishes itself from the sibling tool 'pause_watcher' by being the direct opposite action.

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 'after pausing' implies this tool is used to restart a watcher that was previously paused, providing some context. However, there is no explicit guidance on when to use it versus alternatives, nor does it state any prerequisites like 'only works when the watcher is paused.'

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

search_codeA

Search the codebase using semantic similarity.

Use natural language descriptions of code you're looking for:

  • "function that handles user authentication"

  • "error handling for HTTP requests"

  • "database connection initialization"

  • "unit tests for the payment service"

Returns ranked code snippets with file locations and relevance scores. Combines vector similarity with keyword search for best results.

Best for: Finding functions/classes by purpose or behavior. Not for: Exact pattern matching or finding all occurrences of a variable. Use Grep for exact patterns; use semantic search to find relevant files first.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYesNatural language search query
languageNoFilter by language: python, javascript, typescript, etc.
min_scoreNoMinimum relevance score threshold (0-1)
chunk_typeNoFilter by type: function, class, method, module
max_resultsNoMaximum results to return (1-50)
file_patternNoGlob pattern to filter files, e.g., '**/*_test.py'

Output Schema

ParametersJSON Schema
NameRequiredDescription
queryYes
statusNoServer status: initializing, ready, or error
matchesYes
total_countYes
search_time_msYes

TDQS

A4.7/5.0
Behavior4/5

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

With no annotations, the description carries the burden. It discloses that the tool 'Combines vector similarity with keyword search' and 'Returns ranked code snippets with file locations and relevance scores.' It does not mention potential side effects or prerequisites like index freshness, but for a search tool this is reasonable behavioral context.

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?

Well-structured with a clear lead sentence, useful examples, return details, and 'Best/Not for' sections. Each sentence earns its place; no fluff despite being longer than average.

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 output schema already defines return structure, the description covers purpose, usage patterns, behavioral nuances, and comparison with alternatives. It is complete for an agent to decide when to invoke it and what to expect.

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?

Schema coverage is 100%, so baseline is 3. The description adds value by providing concrete query examples and explaining the combined vector+keyword behavior, which informs how to set min_score and query parameters beyond the schema's simple descriptions.

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 first sentence, 'Search the codebase using semantic similarity,' clearly states a specific verb (search), resource (codebase), and method (semantic similarity). Examples and 'Best for' section further clarify it finds functions/classes by purpose, distinguishing it from sibling tools which are indexing/lifecycle tools.

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 provides 'Best for' and 'Not for' sections, and names an alternative ('Use Grep for exact patterns') with a workflow suggestion ('use semantic search to find relevant files first'). This is clear when-to-use and when-not-to-use guidance.

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

TDQS

A3.7/5.0
Disambiguation2/5

initialize and reindex both appear to trigger full index builds, making their boundaries unclear and causing potential misselection. Other tools like search_code, pause_watcher, and exclude_paths are well-distinguished, but the core indexing pair introduces significant ambiguity.

Naming Consistency4/5

Most tools follow a consistent verb_noun pattern (e.g., search_code, reindex_file, pause_watcher, get_status). However, initialize and reindex are standalone verbs that break the pattern, creating a minor but noticeable deviation.

Tool Count5/5

11 tools is well within the ideal range for a domain-specific server. Each tool contributes to searching, indexing, or management, and there is no obvious redundancy or bloat.

Completeness3/5

The server covers the core search and indexing lifecycle, including search, full/partial indexing, and clearing. However, it lacks a way to remove a single file from the index, and exclude_paths does not retroactively affect already-indexed content, leaving notable gaps for handling file deletions.

Maintenance

ActivityInactive
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

  • F
    license
    Not graded
    quality
    D
    maintenance
    Provides semantic code search capabilities that run 100% locally using EmbeddingGemma embeddings. Enables finding code by meaning across 15 file extensions and 9+ programming languages without API costs or sending code to the cloud.
    236
  • 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
  • F
    license
    Not graded
    quality
    D
    maintenance
    Enables local semantic code search across repositories using natural language, with AST-aware chunking and hybrid vector/FTS5 retrieval.

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/adam-hanna/semantic-search-mcp'

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