Skip to main content
Glama

Executive Overview

This service demonstrates how modern AI systems can securely interact with real data and internal tools using the Model Context Protocol (MCP).

It exposes a small set of AI-accessible capabilities — generating embeddings, indexing documents, and performing semantic search — backed by a vector database. An AI agent can use these tools to retrieve relevant information on demand, rather than relying on static training data.

In practical terms, this pattern enables use cases such as:

  • internal knowledge assistants

  • customer support copilots

  • AI-powered search over company documents

  • agent workflows that safely access enterprise data

This project mirrors how AI tooling is deployed in production environments where models must interact with real systems in a controlled, auditable way.

MCP Tooling Lab (Node.js)

This project implements a custom Model Context Protocol (MCP) server in Node.js that exposes tools for:

  • generating embeddings using OpenAI

  • indexing documents into a vector database (Chroma)

  • performing semantic vector search with optional metadata filters

The server is designed to be used by MCP-compatible hosts (e.g. Claude Desktop) and demonstrates real-world agent tooling patterns used in modern AI systems.


Related MCP server: ChromaDB MCP Server

Why this exists

This lab demonstrates hands-on experience with:

  • MCP server implementation

  • tool schemas and validation

  • embedding pipelines

  • vector database integration

  • agent-accessible retrieval infrastructure

This mirrors how AI tooling is deployed in customer-facing and forward-deployed engineering contexts.


Tools exposed

embed_text

Generates OpenAI embeddings for an array of input strings.

Input

{
  "texts": ["string", "..."]
}

index_documents

Embeds and indexes documents into a Chroma collection.

Input

{
  "docs": [
    {
      "id": "doc-id",
      "text": "document text",
      "metadata": { "optional": "metadata" }
    }
  ]
}

Performs semantic search over indexed documents using embeddings.

Input

{
  "query": "search query",
  "topK": 5,
  "where": { "optional": "metadata filter" }
}

Tech stack

  • Node.js + TypeScript

  • OpenAI Embeddings (text-embedding-3-small)

  • Chroma vector database

  • MCP SDK (@modelcontextprotocol/sdk)

  • Zod for schema validation

  • Docker (for local Chroma)


Running locally

1. Start Chroma

docker run --rm -p 8000:8000 chromadb/chroma

2. Install dependencies

pnpm install

3. Configure environment

Create a .env file:

OPENAI_API_KEY=your_openai_key
CHROMA_URL=http://localhost:8000
CHROMA_COLLECTION=mcp_tooling_lab
OPENAI_EMBED_MODEL=text-embedding-3-small

4. Run the MCP server

pnpm dev

Using with Claude Desktop (MCP host)

Claude Desktop launches MCP servers in an isolated environment. Required environment variables must be passed explicitly via the config file.

Example claude_desktop_config.json

{
  "mcpServers": {
    "mcp-tooling-lab": {
      "command": "node",
      "args": [
        "/ABSOLUTE/PATH/TO/dist/server.js"
      ],
      "env": {
        "OPENAI_API_KEY": "your_openai_key"
      }
    }
  }
}

Note: The server must be built before use with Claude Desktop:

pnpm build

Example workflow

  1. Index documents:

    • Refunds are allowed within 30 days.

    • Enterprise customers receive priority support.

  2. Query:

    • What is the refund policy?

The host agent will automatically call the appropriate MCP tools to retrieve context and generate a grounded response.


Next steps

Planned extensions in follow-up labs:

  • RAG pipeline with evaluation

  • Agentic workflows using function calling + retrieval

  • Metadata filtering and chain-style orchestration

  • PGVector-backed retrieval


Disclaimer

This is a learning and demonstration project intended to showcase MCP-based AI tooling patterns.

Available Tools

3 tools
embed_textC

Generate OpenAI embeddings for an array of texts.

ParametersJSON Schema
NameRequiredDescriptionDefault
textsYes

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 disclosure. It states the basic function but doesn't cover important traits such as rate limits, authentication needs, error handling, or what the embeddings represent (e.g., model used, dimensions). This leaves significant gaps for a tool that likely interacts with external APIs.

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, efficient sentence with no wasted words. It is front-loaded with the core action and resource, making it easy to parse quickly, which is ideal for conciseness.

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 complexity of generating embeddings (involving external API calls) and the lack of annotations and output schema, the description is incomplete. It doesn't address return values, error cases, or operational constraints, making it inadequate for safe and effective tool invocation by an agent.

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 description coverage is 0%, so the description must compensate. It mentions 'array of texts', which aligns with the 'texts' parameter in the schema, adding some meaning. However, it doesn't explain details like text length limits, encoding, or handling of empty strings, so it only partially compensates for the lack of schema 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 states the action ('Generate') and resource ('OpenAI embeddings for an array of texts'), making the purpose understandable. However, it doesn't differentiate from sibling tools like 'index_documents' or 'vector_search', which might also involve embeddings, so it doesn't reach the highest score.

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 like 'index_documents' or 'vector_search'. It lacks context on use cases, prerequisites, or exclusions, leaving the agent without clear usage instructions.

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

index_documentsC

Embed and index documents into Chroma.

ParametersJSON Schema
NameRequiredDescriptionDefault
docsYes

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 disclosure. It mentions embedding and indexing but doesn't clarify whether this is a write operation, what permissions are needed, if it's idempotent, or what happens on failure. For a tool that likely modifies data, this is a significant gap in transparency.

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

Conciseness5/5

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

The description is extremely concise—a single sentence with zero wasted words. It's front-loaded with the core purpose and efficiently communicates the essential action without unnecessary elaboration.

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 complexity of embedding and indexing operations, no annotations, no output schema, and 0% schema description coverage, the description is incomplete. It lacks crucial details about behavior, error handling, return values, and how it differs from sibling tools, making it inadequate for safe and effective use.

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

Parameters3/5

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

The schema description coverage is 0%, so the description must compensate, but it adds no information about the 'docs' parameter beyond what the schema structure implies. The description doesn't explain what 'docs' should contain, how documents are processed, or any constraints. With 1 parameter and no schema descriptions, baseline 3 is appropriate as the description doesn't add meaningful semantic context.

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

Purpose4/5

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

The description clearly states the action ('Embed and index') and the target resource ('documents into Chroma'), providing a specific verb+resource combination. However, it doesn't explicitly differentiate from sibling tools like 'embed_text' or 'vector_search', which likely handle different aspects of the Chroma workflow.

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 like 'embed_text' or 'vector_search'. There's no mention of prerequisites, use cases, or exclusions, leaving the agent to infer usage from the tool name alone.

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

TDQS

B3.4/5.0
Disambiguation5/5

Each tool has a clearly distinct purpose with no overlap: embed_text handles raw embedding generation, index_documents combines embedding with indexing, and vector_search performs semantic search. The descriptions clearly differentiate their roles in the embedding/indexing/search pipeline.

Naming Consistency5/5

All three tools follow a consistent verb_noun pattern with snake_case: embed_text, index_documents, and vector_search. The naming is predictable and follows the same convention throughout.

Tool Count3/5

With only 3 tools, the count feels thin for a 'Tooling Lab' server, which might imply broader capabilities. However, for a focused embedding/indexing/search domain, the minimal set is functional but could benefit from additional utilities like document management or configuration tools.

Completeness4/5

The tools cover the core embedding-to-search pipeline well: create embeddings, index them, and search. Minor gaps include lack of document deletion/update operations and no direct embedding storage management, but agents can work around these with the existing tools.

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
    B
    quality
    D
    maintenance
    A complete MCP server for Retrieval-Augmented Generation with file management and vector memory for agents. Supports multiple document formats (PDF, DOCX, TXT, MD, CSV, JSON) with semantic search using Hugging Face embeddings and ChromaDB for efficient vector storage.
    11
    12
    1
    MIT
  • A
    license
    Not graded
    quality
    D
    maintenance
    An MCP server that exposes ChromaDB vector database operations, enabling AI assistants to perform collection management and semantic document searches. It supports HTTP, persistent, and in-memory connection modes along with various embedding providers including OpenAI and HuggingFace.
    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
    14
    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/kaypon/mcp-tooling-lab'

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