Skip to main content
Glama
privetin

Chroma MCP Server

by privetin
README.md
# Chroma MCP Server

A Model Context Protocol (MCP) server implementation that provides vector database capabilities through Chroma. This server enables semantic document search, metadata filtering, and document management with persistent storage.

## Requirements

- Python 3.8+
- Chroma 0.4.0+
- MCP SDK 0.1.0+

## Components

### Resources
The server provides document storage and retrieval through Chroma's vector database:
- Stores documents with content and metadata
- Persists data in `src/chroma/data` directory
- Supports semantic similarity search

### Tools

The server implements CRUD operations and search functionality:

#### Document Management
- `create_document`: Create a new document
  - Required: `document_id`, `content`
  - Optional: `metadata` (key-value pairs)
  - Returns: Success confirmation
  - Error: Already exists, Invalid input

- `read_document`: Retrieve a document by ID
  - Required: `document_id`
  - Returns: Document content and metadata
  - Error: Not found

- `update_document`: Update an existing document
  - Required: `document_id`, `content`
  - Optional: `metadata`
  - Returns: Success confirmation
  - Error: Not found, Invalid input

- `delete_document`: Remove a document
  - Required: `document_id`
  - Returns: Success confirmation
  - Error: Not found

- `list_documents`: List all documents
  - Optional: `limit`, `offset`
  - Returns: List of documents with content and metadata

#### Search Operations
- `search_similar`: Find semantically similar documents
  - Required: `query`
  - Optional: `num_results`, `metadata_filter`, `content_filter`
  - Returns: Ranked list of similar documents with distance scores
  - Error: Invalid filter

## Features

- **Semantic Search**: Find documents based on meaning using Chroma's embeddings
- **Metadata Filtering**: Filter search results by metadata fields
- **Content Filtering**: Additional filtering based on document content
- **Persistent Storage**: Data persists in local directory between server restarts
- **Error Handling**: Comprehensive error handling with clear messages
- **Retry Logic**: Automatic retries for transient failures

## Installation

1. Install dependencies:
```bash
uv venv
uv sync --dev --all-extras
```

## Configuration

### Claude Desktop

Add the server configuration to your Claude Desktop config:

Windows: `C:\Users\<username>\AppData\Roaming\Claude\claude_desktop_config.json`

MacOS: `~/Library/Application Support/Claude/claude_desktop_config.json`

```json
{
  "mcpServers": {
    "chroma": {
      "command": "uv",
      "args": [
        "--directory",
        "C:/MCP/server/community/chroma",
        "run",
        "chroma"
      ]
    }
  }
}
```

### Data Storage

The server stores data in:
- Windows: `src/chroma/data`
- MacOS/Linux: `src/chroma/data`

## Usage

1. Start the server:
```bash
uv run chroma
```

2. Use MCP tools to interact with the server:

```python
# Create a document
create_document({
    "document_id": "ml_paper1",
    "content": "Convolutional neural networks improve image recognition accuracy.",
    "metadata": {
        "year": 2020,
        "field": "computer vision",
        "complexity": "advanced"
    }
})

# Search similar documents
search_similar({
    "query": "machine learning models",
    "num_results": 2,
    "metadata_filter": {
        "year": 2020,
        "field": "computer vision"
    }
})
```

## Error Handling

The server provides clear error messages for common scenarios:
- `Document already exists [id=X]`
- `Document not found [id=X]`
- `Invalid input: Missing document_id or content`
- `Invalid filter`
- `Operation failed: [details]`

## Development

### Testing

1. Run the MCP Inspector for interactive testing:
```bash
npx @modelcontextprotocol/inspector uv --directory C:/MCP/server/community/chroma run chroma
```

2. Use the inspector's web interface to:
   - Test CRUD operations
   - Verify search functionality
   - Check error handling
   - Monitor server logs

### Building

1. Update dependencies:
```bash
uv compile pyproject.toml
```

2. Build package:
```bash
uv build
```

## Contributing

Contributions are welcome! Please read our [Contributing Guidelines](CONTRIBUTING.md) for details on:
- Code style
- Testing requirements
- Pull request process

## License

This project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.

TDQS

A3.5/5.0

Scored across 6 tools

Disambiguation5/5

Each tool has a clearly distinct purpose with no overlap: create, delete, list, read, search, and update documents. The actions and targets are well-defined, making it easy for an agent to select the correct tool without confusion.

Naming Consistency5/5

All tools follow a consistent verb_noun pattern (e.g., create_document, delete_document) using snake_case throughout. The naming is predictable and readable, with no deviations in style or convention.

Tool Count5/5

With 6 tools, this server is well-scoped for managing documents in a vector database. Each tool earns its place by covering essential CRUD operations and semantic search, avoiding bloat or thinness for the domain.

Completeness5/5

The toolset provides complete CRUD/lifecycle coverage for documents (create, read, update, delete, list) and includes a semantic search function. There are no obvious gaps, enabling agents to handle all core workflows without dead ends.

Maintenance

ActivityInactive
ResponsivenessUnresponsive