MCP Tooling Lab
Utilizes OpenAI's embedding models to generate vector representations of text, enabling semantic document indexing and retrieval for AI agents.
Click on "Install Server".
Wait a few minutes for the server to deploy. Once ready, it will show a "Started" state.
In the chat, type
@followed by the MCP server name and your instructions, e.g., "@MCP Tooling LabSearch the knowledge base for information on our refund policy"
That's it! The server will respond to your query, and you can continue using it as needed.
Here is a step-by-step guide with screenshots.
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" }
}
]
}vector_search
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/chroma2. Install dependencies
pnpm install3. 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-small4. Run the MCP server
pnpm devUsing 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 buildExample workflow
Index documents:
Refunds are allowed within 30 days.
Enterprise customers receive priority support.
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 toolsembed_textC
Generate OpenAI embeddings for an array of texts.
| Name | Required | Description | Default |
|---|---|---|---|
| texts | Yes |
TDQS
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.
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.
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.
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.
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.
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.
| Name | Required | Description | Default |
|---|---|---|---|
| docs | Yes |
TDQS
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.
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.
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.
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.
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.
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.
vector_searchB
Semantic search using embeddings + Chroma. Optional metadata filter via where.
| Name | Required | Description | Default |
|---|---|---|---|
| query | Yes | ||
| topK | No | ||
| where | No |
TDQS
Does the description disclose side effects, auth requirements, rate limits, or destructive behavior?
With no annotations provided, the description carries full burden for behavioral disclosure. It mentions the technology (embeddings + Chroma) and optional filtering, but doesn't describe important behavioral traits like: whether this is read-only or has side effects, performance characteristics, error conditions, authentication requirements, or what the output format looks like. For a search tool with no annotation coverage, this leaves significant gaps.
Agents need to know what a tool does to the world before calling it. Descriptions should go beyond structured annotations to explain consequences.
Is the description appropriately sized, front-loaded, and free of redundancy?
The description is extremely concise at just two short sentences with zero wasted words. The first sentence establishes core functionality, the second adds important parameter context. Every element earns its place, and the information is front-loaded with the primary purpose stated immediately.
Shorter descriptions cost fewer tokens and are easier for agents to parse. Every sentence should earn its place.
Given the tool's complexity, does the description cover enough for an agent to succeed on first attempt?
Given 3 parameters with 0% schema coverage, no annotations, no output schema, and a nested object parameter ('where'), the description is incomplete. It doesn't explain what the search returns, how results are ranked, what metadata can be filtered, or any limitations. For a semantic search tool with these contextual factors, the description should provide more operational context.
Complex tools with many parameters or behaviors need more documentation. Simple tools need less. This dimension scales expectations accordingly.
Does the description clarify parameter syntax, constraints, interactions, or defaults beyond what the schema provides?
With 0% schema description coverage, the description must compensate for all parameter documentation. It explicitly mentions the 'where' parameter's purpose ('metadata filter') and implies 'query' is for semantic search. While it doesn't mention 'topK', the description of 'Semantic search' combined with the parameter name strongly suggests it controls result count. This provides meaningful context beyond the bare schema.
Input schemas describe structure but not intent. Descriptions should explain non-obvious parameter relationships and valid value ranges.
Does the description clearly state what the tool does and how it differs from similar tools?
The description clearly states the tool performs 'Semantic search using embeddings + Chroma' which is a specific verb (search) with technology context. It distinguishes from sibling tools 'embed_text' (creating embeddings) and 'index_documents' (adding to index) by focusing on retrieval/search functionality. However, it doesn't explicitly contrast with these siblings in the description text itself.
Agents choose between tools based on descriptions. A clear purpose with a specific verb and resource helps agents select the right tool.
Does the description explain when to use this tool, when not to, or what alternatives exist?
The description implies usage context through 'Semantic search using embeddings' and mentions 'Optional metadata filter via `where`' which suggests when to use the where parameter. However, there's no explicit guidance on when to choose this tool versus alternatives like traditional keyword search tools that might exist elsewhere, nor does it mention prerequisites like needing indexed documents first.
Agents often have multiple tools that could apply. Explicit usage guidance like "use X instead of Y when Z" prevents misuse.
TDQS
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.
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.
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.
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
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
The Needle MCP server enables semantic search on documents stored in files like PDFs, DOCX, and XLSX by connecting AI applications to external data sources. It provides capabilities to create and manage document collections, perform natural language searches on stored content, and retrieve relevant information without requiring exact keyword matches.
MCP server unifying ERPs, CRMs, APIs and knowledge base for Claude, ChatGPT and Gemini.
Remote ChromaDB vector database MCP server with streamable HTTP transport
The CustomGPT.ai MCP server is a fully managed, RAG-powered endpoint that connects large language models with private knowledge bases and external data sources. It provides tools for retrieval-augmented generation queries (send_message), data ingestion (upload_file), and source listing, enabling AI agents to query private documents like PDFs with high accuracy and real-time citations.
Related MCP Servers
- AlicenseBqualityDmaintenanceA 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.11121MIT
- AlicenseNot gradedqualityDmaintenanceAn 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
- AlicenseAqualityDmaintenanceLocal-first RAG indexing and semantic search MCP server. Enables document retrieval and context-aware queries using local embedding models.314MIT
- AlicenseAqualityDmaintenanceMCP server for semantic code indexing using vector embeddings, enabling AI agents to maintain persistent memory of codebases through natural language queries and intelligent chunking.19764MIT
Latest Blog Posts
- Who's Calling? MCP Hosts Are an Identity Blind Spot (And the Spec Knows It)By Om-Shree-0709 on .mcpAgent IdentityOAuth 2.1
- Your AI Chatbot Just Exposed Your CEO's Salary to an InternBy Om-Shree-0709 on .Agent IdentityMCP SecurityOAuth Delegation
- Why MCP Servers Need Execution Sandboxing (And Why Your Current Stack Isn't Enough)By Om-Shree-0709 on .Agentic AiPrompt InjectionWebAssembly
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