vector-embedding-mcp-server
v1.4.1
Published
MCP Server for AI Embedding and RAG functionality
Maintainers
Readme
Vector Embedding MCP Server
A Model Context Protocol (MCP) server that provides AI embedding and RAG (Retrieval-Augmented Generation) functionality. This server converts your existing AI embedding application into an MCP-compatible service.
Features
- Document Ingestion: Ingest documents and create vector embeddings
- RAG Chat: Chat with AI using business rules context from ingested documents
- Vector Search: Search for similar documents using vector similarity
- Embedding Generation: Generate embeddings for text using HuggingFace models
- Project Management: Organize documents by project ID
- Multiple LLM Support: Works with Ollama (local) and HuggingFace models
Prerequisites
- Node.js 18+
- PostgreSQL with pgvector extension
- Ollama (for local LLM) or HuggingFace API key
- Python 3.8+ (for some dependencies)
Installation
Clone and install dependencies:
npm installSet up PostgreSQL with pgvector:
# Install pgvector extension sudo -u postgres psql -c "CREATE EXTENSION vector;" # Run the setup script psql -U your_username -d your_database -f setup.sqlConfigure environment:
cp env.example .env # Edit .env with your configurationInstall Ollama (optional, for local LLM):
# Install Ollama curl -fsSL https://ollama.ai/install.sh | sh # Pull a model ollama pull mistral ollama pull qwen2.5-coder:7b ollama pull nomic-embed-text
Configuration
Edit your .env file with the following variables:
# Database Configuration
DATABASE_URL=postgresql://username:password@localhost:5432/embedding_db
# HuggingFace API Configuration
HUGGINGFACE_API_KEY=your_huggingface_api_key_here
# OpenAI API Configuration (optional)
OPENAI_API_KEY=your_openai_api_key_here
# Ollama Configuration (for local LLM)
OLLAMA_BASE_URL=http://localhost:11434
# Server Configuration
PORT=3000
NODE_ENV=developmentUsage
Starting the MCP Server
npm startThe server will run on stdio and can be connected to MCP clients.
Available Tools
1. ingest_document
Ingest a document into the vector database.
Parameters:
filePath(string): Path to the document fileprojectId(string): Project ID to associate with
Example:
{
"name": "ingest_document",
"arguments": {
"filePath": "./docs/business-rules.mdc",
"projectId": "project1"
}
}2. chat_with_rules
Chat with AI using business rules context.
Parameters:
message(string): User's question or messageprojectId(string): Project ID to search for context
Example:
{
"name": "chat_with_rules",
"arguments": {
"message": "What are the business rules for the resource module?",
"projectId": "project1"
}
}3. generate_embedding
Generate embeddings for text.
Parameters:
text(string): Text to generate embeddings for
Example:
{
"name": "generate_embedding",
"arguments": {
"text": "This is sample text for embedding"
}
}4. vector_search
Search for similar documents using vector similarity.
Parameters:
query(string): Search query textprojectId(string): Project ID to search withintopK(number, optional): Number of results (default: 5)
Example:
{
"name": "vector_search",
"arguments": {
"query": "business rules",
"projectId": "project1",
"topK": 3
}
}5. list_projects
List all projects with their document counts.
Example:
{
"name": "list_projects",
"arguments": {}
}6. get_project_documents
Get all documents for a specific project.
Parameters:
projectId(string): Project ID to get documents for
Example:
{
"name": "get_project_documents",
"arguments": {
"projectId": "project1"
}
}Integration with MCP Clients
Claude Desktop
Add to your Claude Desktop configuration:
{
"mcpServers": {
"ai-embedding": {
"command": "node",
"args": ["/path/to/your/ai-embedding/server.js"],
"env": {
"DATABASE_URL": "postgresql://username:password@localhost:5432/embedding_db",
"HUGGINGFACE_API_KEY": "your_api_key"
}
}
}
}Other MCP Clients
The server follows the MCP protocol and can be integrated with any MCP-compatible client by running:
node server.jsArchitecture
The application follows a clean MVC (Model-View-Controller) architecture:
server.js: Express server entry pointmcp-server.js: MCP server entry pointsrc/: Main source code directorycontrollers/: Request handlers (ChatController, DocumentController, EmbeddingController)services/: Business logic (RAGService, IngestionService, EmbeddingService, DocumentService)models/: Data access layer (Document, DocumentMetadata, ProjectConfig)routes/: API route definitionsmiddleware/: Express middleware (error handling, validation)utils/: Utility functions (file reading, text splitting, vector formatting)mcp/: MCP server implementationconfig/: Configuration (database, environment, logging)
scripts/: Utility scripts (migrate, ingest-all)
For detailed architecture documentation, see ARCHITECTURE.md.
Supported File Types
- Text files (
.txt,.md,.mdc) - PDF files (
.pdf) - Word documents (
.docx)
Database Schema
The server uses a PostgreSQL database with the following schema:
CREATE TABLE documents (
id SERIAL PRIMARY KEY,
project_id VARCHAR(255) NOT NULL,
file_name VARCHAR(500) NOT NULL,
content TEXT NOT NULL,
embedding vector(384),
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);Troubleshooting
Common Issues
- Database Connection Error: Ensure PostgreSQL is running and the connection string is correct
- pgvector Extension Missing: Install the pgvector extension in your PostgreSQL database
- Ollama Connection Error: Ensure Ollama is running and the models are pulled
- HuggingFace API Error: Check your API key and rate limits
Debug Mode
Run with debug logging:
DEBUG=* npm startDevelopment
Adding New Tools
To add new tools to the MCP server:
- Add the tool definition to the
ListToolsRequestSchemahandler - Add the tool implementation to the
CallToolRequestSchemahandler - Update this README with the new tool documentation
Testing
Test individual components:
# Run all tests
npm test
# Test MCP functionality
npm run test:mcp
# Test Cursor integration
npm run test:cursor
# Test using services directly (Node.js REPL)
node
> const IngestionService = require('./src/services/IngestionService');
> const service = new IngestionService();
> await service.ingestDocument('./docs/business-rules.mdc', 'test');License
ISC License - see LICENSE file for details.
Contributing
- Fork the repository
- Create a feature branch
- Make your changes
- Test thoroughly
- Submit a pull request
Support
For issues and questions:
- Check the troubleshooting section
- Review the logs for error messages
- Ensure all dependencies are properly installed
- Verify your environment configuration
