Skip to main content
Glama

Fast Embedding MCP / SSE — Stable Static Embedding server

Serve RikkaBotan/stable-static-embedding-fast-retrieval-mrl-en-v2 over an OpenAI-compatible HTTP API and an MCP server (stdio).

The model is a ~16M-parameter English static embedding model: 512D native with Matryoshka (MRL) truncation to 256 / 128 / 64 / 32. It is fast (no attention) and tiny.

Install

This project uses uv for environment management. Install uv first if you don't have it (instructions):

# macOS / Linux
curl -LsSf https://astral.sh/uv/install.sh | sh
# Windows (PowerShell)
powershell -ExecutionPolicy ByPass -c "irm https://astral.sh/uv/install.ps1 | iex"

Then clone and sync. uv sync creates a .venv, installs the pinned dependencies from uv.lock, and installs the project itself:

git clone https://github.com/Rikka-Botan/Fast-Embedding-MCP-SSE.git
cd Fast-Embedding-MCP-SSE
uv sync

uv picks a compatible Python (3.10+) automatically — no manual venv or activation needed; prefix commands with uv run. The first server run downloads the model from Hugging Face (~60 MB) and caches it.

Related MCP server: ragi

HTTP API

uv run python -m sse_embedding.api   # serves on http://0.0.0.0:8000
# or, equivalently:  uv run sse-api

Configurable via SSE_API_HOST / SSE_API_PORT.

Endpoints

Method

Path

Purpose

POST

/v1/embeddings

OpenAI-compatible embeddings (supports dimensions)

POST

/similarity

Cosine similarity matrix between two text sets

POST

/search

Rank documents against a query (stateless)

POST

/index/add

Add documents to the in-memory index

POST

/index/query

Query the in-memory index

GET

/index/stats

Index size

POST

/index/clear

Empty the index

GET

/health

Health check

OpenAI-compatible example

Works with the OpenAI SDK by pointing base_url at this server:

from openai import OpenAI
client = OpenAI(base_url="http://localhost:8000/v1", api_key="not-needed")
resp = client.embeddings.create(
    model="RikkaBotan/stable-static-embedding-fast-retrieval-mrl-en-v2",
    input=["hello world", "good morning"],
    dimensions=256,          # MRL truncation: 512/256/128/64/32
)
print(len(resp.data[0].embedding))   # 256

Or raw:

curl -X POST http://localhost:8000/v1/embeddings \
  -H "Content-Type: application/json" \
  -d '{"input": "hello world", "dimensions": 128}'

Search / index example

curl -X POST http://localhost:8000/index/add \
  -H "Content-Type: application/json" \
  -d '{"documents": ["The cat sat on the mat", "Paris is in France"]}'

curl -X POST http://localhost:8000/index/query \
  -H "Content-Type: application/json" \
  -d '{"query": "Where is Paris?", "top_k": 1}'

MCP server (stdio)

uv run python -m sse_embedding.mcp_server
# or, equivalently:  uv run sse-mcp

Tools exposed: embed_text, similarity, search, index_add, index_query, index_stats, index_clear.

Register with Claude Code

Requires the Claude Code CLI. If claude is not a recognized command, you are likely using the Claude Desktop app — use the Claude Desktop config below instead.

Run from the cloned project directory:

claude mcp add sse-embedding -- uv run python -m sse_embedding.mcp_server

To make the registration work from any directory, pass the project path to uv with --directory:

claude mcp add sse-embedding -- uv run --directory /path/to/Fast-Embedding-MCP-SSE python -m sse_embedding.mcp_server

Register with Claude Desktop

Add to claude_desktop_config.json, replacing /path/to/... with the absolute path where you cloned this repository. uv run resolves the project's environment from the given directory.

macOS / Linux:

{
  "mcpServers": {
    "sse-embedding": {
      "command": "uv",
      "args": ["run", "--directory", "/path/to/Fast-Embedding-MCP-SSE", "python", "-m", "sse_embedding.mcp_server"]
    }
  }
}

Windows:

{
  "mcpServers": {
    "sse-embedding": {
      "command": "uv",
      "args": ["run", "--directory", "C:\\path\\to\\Fast-Embedding-MCP-SSE", "python", "-m", "sse_embedding.mcp_server"]
    }
  }
}

If Claude Desktop reports that uv was not found, replace "command": "uv" with the absolute path to the uv executable (which uv on macOS/Linux, (Get-Command uv).Source in PowerShell), or point command directly at the .venv interpreter that uv sync created (/path/to/Fast-Embedding-MCP-SSE/.venv/bin/python, or on Windows C:\\path\\to\\Fast-Embedding-MCP-SSE\\.venv\\Scripts\\python.exe) with "args": ["-m", "sse_embedding.mcp_server"].

Matryoshka dimensions

Valid dim / dimensions values are 512, 256, 128, 64, 32. Smaller dimensions are faster and smaller with graceful quality degradation. Truncation is applied to the full 512D vector and the result is renormalized, so cosine similarity stays valid at any level.

License

Apache-2.0

Available Tools

7 tools
embed_textA

Embed text(s) into vectors.

Args: texts: One or more strings to embed. dim: Matryoshka truncation dimension; one of 512, 256, 128, 64, 32. normalize: L2-normalize the output (recommended for cosine similarity).

Returns a dict with the embeddings (list of float lists) and dimension.

ParametersJSON Schema
NameRequiredDescriptionDefault
dimNo
textsYes
normalizeNo

TDQS

A4.3/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 of disclosing behavior. It explains the truncation dimension with allowed values, normalization behavior, and the return format (dict with embeddings and dimension). It does not mention any side effects or additional context, but for a pure embedding function this 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 a clean docstring: one-sentence summary, argument list, return statement. No filler words or redundant 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?

For a 3-parameter tool with no output schema or annotations, the description covers all parameters and return value. It lacks explicit use-case context but provides enough for correct invocation. It could be improved by stating that it is a pure read-only operation, but that's implied.

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

Parameters5/5

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

Schema description coverage is 0%, so the description must fully compensate. It does: it explains texts as one or more strings, dim with specific allowed values (512, 256, 128, 64, 32), and normalize with L2 normalization and a recommendation. This goes well beyond the schema's bare property definitions.

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 'Embed text(s) into vectors,' which is a specific verb+resource statement. It clearly differentiates from sibling tools like search and similarity by describing the core embedding function.

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 guidance on when to use embed_text versus sibling tools like similarity or search. It does provide parameter-level guidance (normalize recommended for cosine similarity), which implies a usage context but doesn't address tool selection.

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

index_addA

Add documents to the persistent in-memory index for later querying.

Args: documents: Documents to embed and store. ids: Optional ids (auto-generated if omitted). metadatas: Optional metadata dict per document.

Returns the number added and their ids.

ParametersJSON Schema
NameRequiredDescriptionDefault
idsNo
documentsYes
metadatasNo

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. It discloses persistence ('persistent in-memory'), the return value (number and ids), and auto-generated ids, but lacks details on duplicate handling, error behavior, or side effects. Some transparency is present but not exhaustive.

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, front-loaded with the primary purpose, and uses a structured Args list for parameters. Every sentence adds value with no redundancy.

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 moderate complexity and lack of output schema, the description covers purpose, parameter semantics, return values, and persistence. It omits explicit usage alternatives, but that gap is partially addressed by the implied querying context.

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 0%, so the description must compensate. It explains each parameter: documents to embed/store, optional ids, and optional metadatas. This adds meaning beyond the raw type schema, though metadata structure remains somewhat vague.

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 documents to the persistent in-memory index for later querying,' using a specific verb and resource while distinguishing itself from sibling tools like index_query and index_clear. The purpose 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 Guidelines3/5

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

The phrase 'for later querying' implies when to use the tool, but it does not explicitly contrast with alternatives or mention when not to use it. No exclusions or alternative tool references are provided.

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

index_clearA

Remove all documents from the in-memory index.

ParametersJSON Schema
NameRequiredDescriptionDefault

No parameters

TDQS

A3.8/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 clearly states the destructive action (remove all documents) and scopes it to the in-memory index. However, it does not detail irreversibility, impact on ongoing queries, or whether the index structure is preserved.

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, direct sentence that is immediately clear and free of unnecessary content. It earns every word.

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 clear operation, the description sufficiently conveys the core behavior. It does not describe return values or side effects, but with no output schema and no parameters, the description is near-complete for this 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 accepts zero parameters, so the description cannot add parameter-level detail. The schema has 100% coverage for properties, and parameter semantics are not applicable. A baseline of 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 uses the specific verb 'Remove all documents' and names the resource 'the in-memory index', clearly distinguishing it from sibling tools like index_add and index_search. It is unambiguous about the tool's action and scope.

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, nor any context such as prerequisites, side effects for other index operations, or typical scenarios. It simply states what it does.

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

index_queryC

Query the in-memory index for the most similar stored documents.

Args: query: The search query. top_k: Number of results to return.

ParametersJSON Schema
NameRequiredDescriptionDefault
queryYes
top_kNo

TDQS

C2.9/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 transparency. It states the tool queries an in-memory index but does not disclose return format, ranking details, error behavior, or potential side effects. The description does not add meaningful behavioral context beyond what the one-sentence purpose states.

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 one clear sentence followed by a structured parameter list. Every word earns its place, and there is no redundant information or filler. It is appropriately sized for a simple two-parameter tool.

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

Completeness2/5

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

Given the presence of sibling tools like 'search' and 'similarity', the description lacks essential context to differentiate use cases. It also provides no information about return values or expected output format, which is critical since there is no output schema. The tool is simple, but the description does not fully cover the operational context needed for correct usage.

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 provides only titles and types for the two parameters (query: string, top_k: integer), with no descriptions. The description adds minimal clarification ('The search query' and 'Number of results to return'), which is helpful but still basic. It does not explain default behavior, acceptable ranges, or edge cases, so it only partially compensates for the schema's lack of descriptions.

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 identifies the action (query), the resource (in-memory index), and the outcome (most similar stored documents). It distinguishes from generic 'search' by specifying 'most similar', implying a similarity-based search. However, it does not explicitly differentiate itself from the sibling tool 'similarity', which could also involve similarity computations, so it is not fully differentiated.

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 'search' or 'similarity'. There are no explicit use cases, prerequisites, or exclusions mentioned. The context for when to select this tool is only implied by the phrase 'most similar stored documents'.

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

index_statsA

Return the number of documents currently in the index.

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?

With no annotations, the description carries the full burden. It accurately describes a read operation, but it does not explicitly state read-only behavior or mention potential caveats like staleness or performance. The behavior is straightforward enough that a 3 is appropriate.

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, focused sentence. It is concise and front-loaded, containing no redundant or unnecessary information.

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 tool with no output schema, the description fully covers what the tool does and the return value. There is no missing context needed for an agent to invoke it correctly.

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 no parameter-level information to convey. The baseline 4 applies because the description does not need to compensate for any schema gaps.

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 ('Return') and a clear resource ('number of documents currently in the index'), making its purpose unambiguous and distinct from sibling tools like index_query or index_clear.

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 guidance is given about when to use this tool versus alternatives. The use case is implied by its name and description (e.g., when you need a document count), but it does not state exclusions or alternative tools.

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

similarityA

Cosine similarity matrix between two sets of texts.

Args: texts_a: First set of strings (rows of the result matrix). texts_b: Second set of strings (columns of the result matrix). dim: Matryoshka truncation dimension; one of 512, 256, 128, 64, 32.

Returns a dict with a 2D similarity matrix of shape (len(a), len(b)).

ParametersJSON Schema
NameRequiredDescriptionDefault
dimNo
texts_aYes
texts_bYes

TDQS

A4.1/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 transparency burden. It discloses the output shape and the Matryoshka truncation dimension, which hints at the internal embedding mechanism. However, it does not mention potential side effects, performance costs, or prerequisites, leaving an adequate but not complete behavioral picture.

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 concise intro followed by an argument list and a return note. Every sentence and line adds essential information with no repetition or extraneous content.

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 tool with modest complexity, no annotations, and no output schema, the description adequately covers purpose, parameters, and return format. It could additionally mention edge cases or explicitly note that raw texts are embedded internally, but the provided information is sufficient for an agent to invoke the tool correctly.

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

Parameters5/5

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

The schema provides only titles and types with 0% description coverage, but the description fully compensates by explaining that texts_a forms rows, texts_b forms columns, and dim is a truncation dimension with specific allowed values. This adds crucial semantic meaning far beyond the structured schema.

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 'Cosine similarity matrix between two sets of texts,' which uses a specific verb+resource combination. It distinguishes itself from siblings like embed_text and search by focusing on pairwise similarity comparison.

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 its usage for computing a similarity matrix but provides no explicit guidance on when to choose this over alternatives like search. There are no when-not conditions or alternative recommendations, so the applicability is only implied.

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. 7 tool updatesv1.0.0
    • First observedembed_text
    • First observedindex_add
    • First observedindex_clear
    • First observedindex_query
    • First observedindex_stats
    • First observedsearch
    • First observedsimilarity

TDQS

A3.8/5.0
Disambiguation5/5

Each tool serves a distinct function: embedding, similarity computation, stateless search, and index management. The index_* tools are clearly separated from stateless operations, and search vs index_query are differentiated by whether a persistent index is used.

Naming Consistency3/5

Naming mixes styles: embed_text uses verb_noun, index_add uses noun_verb, and similarity/index_stats are nouns. While the index_ prefix provides consistency for index operations, the overall pattern is inconsistent.

Tool Count5/5

7 tools is well-scoped for an embedding server, covering core operations without redundancy. Each tool earns its place, and the count is within the ideal range.

Completeness4/5

Core workflows are covered: text embedding, similarity scoring, stateless search, and a persistent index with add/query/clear. Missing per-document delete/update or retrieval by ID are minor gaps that don't break typical usage.

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

  • A
    license
    Not graded
    quality
    D
    maintenance
    A lightweight MCP server that enables intelligent tool management and semantic search for APIs using sentence-transformers. It supports both REST and MCP interfaces across dual transport modes, allowing users to upload, manage, and query API tools with natural language.
    1
    MIT
  • A
    license
    A
    quality
    D
    maintenance
    Local-first RAG indexing and semantic search MCP server. Enables document retrieval and context-aware queries using local embedding models.
    3
    16
    MIT
  • A
    license
    Not graded
    quality
    A
    maintenance
    MCP server for compressing AI embeddings by 5-7x using TurboQuant (PolarQuant + QJL), with tools to compress, decompress, estimate savings, and embed+compress vectors.
    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/Rikka-Botan/Fast-Embedding-MCP-SSE'

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