Skip to main content
Glama
dannwaneri

Vectorize MCP Server

by dannwaneri
README.md
# Vectorize MCP Server

A Model Context Protocol (MCP) server that provides semantic search capabilities by connecting Claude Desktop to a Cloudflare Workers backend with Vectorize.

## Architecture
```
Claude Desktop ──stdio──> MCP Server ──HTTP──> Vectorize Worker ──> Vectorize Index
```

This is a **hybrid architecture** - the MCP server runs locally and bridges Claude Desktop to a remote Cloudflare Workers backend.

## Features

- **Semantic Search Tool**: Natural language search using vector similarity
- **stdio Transport**: Works with Claude Desktop and other MCP clients
- **Remote Backend**: Heavy lifting (embeddings, vector search) happens on Cloudflare Workers
- **Type-safe**: Full TypeScript implementation

## Prerequisites

- Node.js 18+ installed
- Claude Desktop installed
- [vectorize-mcp-worker](https://github.com/dannwaneri/vectorize-mcp-worker) deployed

## Installation

**1. Clone and install:**
```bash
git clone https://github.com/dannwaneri/vectorize-mcp-server.git
cd vectorize-mcp-server
npm install
```

**2. Build:**
```bash
npm run build
```

**3. Configure Claude Desktop:**

Edit your Claude Desktop config file:
- **macOS**: `~/Library/Application Support/Claude/claude_desktop_config.json`
- **Windows**: `%APPDATA%\Claude\claude_desktop_config.json`

Add this server:
```json
{
  "mcpServers": {
    "vectorize-search": {
      "command": "node",
      "args": [
        "/absolute/path/to/vectorize-mcp-server/dist/index.js"
      ]
    }
  }
}
```

**4. Restart Claude Desktop**

## Usage

The server exposes one tool to Claude:

### `semantic_search`

Search the knowledge base using semantic similarity.

**Parameters:**
- `query` (string, required): Natural language search query
- `topK` (number, optional): Number of results to return (default: 5)

**Example in Claude Desktop:**
```
Search for information about AI embeddings
```

Claude will automatically use the `semantic_search` tool and return results with similarity scores.

## How It Works

1. **Claude sends query** to MCP server via stdio
2. **MCP server forwards** query to Vectorize Worker via HTTP
3. **Worker generates embedding** using Workers AI
4. **Vectorize searches** for similar vectors
5. **Results flow back** through MCP server to Claude
6. **Claude synthesizes** answer using the search results

## Configuration

### Change Backend URL

Edit `src/index.ts` and update the Worker URL:
```typescript
const WORKER_URL = "https://your-worker.workers.dev";
```

Then rebuild:
```bash
npm run build
```

### Adjust Result Count

The default `topK` is 5. Users can override this:
```
Search for "databases" and show me 10 results
```

## Development

**Run in development mode:**
```bash
npm run dev
```

**Build for production:**
```bash
npm run build
```

**Test locally:**
```bash
node dist/index.js
```

The server will output: `Vectorize MCP server running on stdio`

## Example Queries

Try these in Claude Desktop:
```
What do you know about vector databases?
```
```
Find information about RAG systems
```
```
Search for anything related to Cloudflare Workers
```
```
Tell me about machine learning at the edge
```

## Response Format

The tool returns JSON with:
- `query`: Original search query
- `resultsCount`: Number of results found
- `results`: Array of matches with:
  - `id`: Entry identifier
  - `score`: Similarity score (0-1, higher is better)
  - `content`: Actual content
  - `category`: Content category

Claude automatically parses this and presents it naturally.

## Troubleshooting

**Server not appearing in Claude Desktop:**
1. Check the config file path is correct
2. Verify the absolute path to `dist/index.js`
3. Make sure you restarted Claude Desktop completely (quit, not just close)
4. Check Developer Console (Ctrl+Shift+I in Claude Desktop)

**"Not connected" errors:**
1. Ensure Worker is deployed and accessible
2. Check `WORKER_URL` in `src/index.ts`
3. Verify Worker has data populated (`POST /populate`)

**No results returned:**
1. Populate the Vectorize index using the Worker's `/populate` endpoint
2. Try broader search terms
3. Check Worker logs with `wrangler tail`

## Technology Stack

- **TypeScript**: Type-safe development
- **@modelcontextprotocol/sdk**: Official MCP SDK
- **Node.js**: Runtime environment
- **stdio transport**: Standard MCP communication method

## Related Projects

- [vectorize-mcp-worker](https://github.com/dannwaneri/vectorize-mcp-worker) - Backend Worker (required)
- [mcp-server-worker](https://github.com/dannwaneri/mcp-server-worker) - Full HTTP-based MCP on Workers

## Why This Architecture?

**Advantages:**
- Works with Claude Desktop (requires stdio)
- Backend runs on edge (fast, scalable)
- Can share Worker backend across multiple clients
- Heavy processing (embeddings, search) happens remotely

**Tradeoffs:**
- Requires both local server and remote Worker
- Extra network hop adds latency (~50-100ms)
- Need to keep local server running

For a fully remote solution, see [mcp-server-worker](https://github.com/dannwaneri/mcp-server-worker).

## License

MIT

## Author

Daniel Nwaneri - [GitHub](https://github.com/dannwaneri) | [Upwork](https://www.upwork.com/freelancers/~01d5946abaa558d9aa)

TDQS

A3.7/5.0

Scored across 2 tools

Disambiguation5/5

The two tools have clearly distinct purposes: one returns a synthesized answer using AI, the other returns raw search results by semantic similarity. No overlap or confusion possible.

Naming Consistency5/5

Both tool names follow a consistent adjective_noun pattern using snake_case, making them predictable and coherent.

Tool Count3/5

With only 2 tools, the server feels minimal for a knowledge base. While it covers query and Q&A, it lacks the breadth expected (e.g., CRUD), but the count is not extreme.

Completeness2/5

The server provides only read/query operations, missing essential write capabilities like adding, updating, or deleting documents. This is a significant gap for a knowledge base server.

Maintenance

ActivityInactive
ResponsivenessNo issues