Skip to content

Add OpenAI-compatible embedding provider support - #92

Open
chaserhkj wants to merge 1 commit into
qdrant:masterfrom
chaserhkj:oai-compat-embed
Open

chaserhkj wants to merge 1 commit into
qdrant:masterfrom
chaserhkj:oai-compat-embed

Conversation

@chaserhkj

Copy link
Copy Markdown

This PR adds support to use an OpenAI-compatible endpoint as embedding provider in the MCP server.

Since OpenAI API is the de facto standard for AI-related services, this should enable broad support for all different providers.

Notably almost all local LLM implementations support this style of API as well (vLLM, Ollama, llama.cpp, etc.) So this effectively supports using them as providers, too.

@huydhoang

huydhoang commented Nov 6, 2025 •

Copy link
Copy Markdown

I was about to do the same PR as this is clearly needed for local development with tools like LM Studio or Ollama. This can potentially boost adoption as qdrant integration becomes easier with commonly used tools in the ecosystem.
Please review @generall @kacperlukawski

@microtag

Copy link
Copy Markdown

Hope this gets merged soon! Please review @generall @kacperlukawski

mahmoudimus pushed a commit to mahmoudimus/mcp-server-qdrant that referenced this pull request Nov 17, 2025
This commit consolidates changes from PRs qdrant#92, qdrant#75, qdrant#77, qdrant#90, qdrant#20, qdrant#89, qdrant#78, qdrant#76, and qdrant#68:

Infrastructure & Configuration (PR qdrant#75, qdrant#77):
- Upgrade Dockerfile to Python 3.13-slim
- Use UV 0.8.3 from official image
- Add FASTMCP_HOST="0.0.0.0" for container networking
- Add SettingsConfigDict for proper None value parsing

New Embedding Providers (PR qdrant#76, qdrant#92):
- Add Model2Vec support for fast, lightweight embeddings
- Add OpenAI-compatible API support (oai_compat)
- New settings: OAI_COMPAT_ENDPOINT, OAI_COMPAT_API_KEY, OAI_COMPAT_VEC_SIZE

Unnamed Vectors & Multiple Collections (PR qdrant#78):
- Add support for Qdrant unnamed vectors
- Create UnnamedVectorProvider wrapper
- Add USE_UNNAMED_VECTORS and COLLECTION_NAMES settings
- Update qdrant.py to handle both named and unnamed vectors
- Add __main__.py for python -m execution

Hybrid Search (PR qdrant#90):
- Implement hybrid search combining dense and sparse vectors
- Add find_hybrid() method with RRF and DBSF fusion methods
- New tool: qdrant-hybrid-find
- Add SPARSE_EMBEDDING_MODEL setting
- Support configurable limits for dense, sparse, and final results

Optional Collection Names (PR qdrant#89):
- Make collection_name parameter optional in store() and find()
- Use default collection when not specified
- Simplify tool usage with fallback to COLLECTION_NAME env var

Additional Tools (PR qdrant#68):
- Add qdrant-get-point: Retrieve point by ID
- Add qdrant-delete-point: Delete point by ID
- Add qdrant-update-point-payload: Update point metadata
- Add qdrant-get-collections: List all collections
- Add qdrant-get-collection-details: Get collection info
- Implement corresponding methods in QdrantConnector

Documentation:
- Update README with all new features
- Document new embedding providers
- Add examples for unnamed vectors and multiple collections
- Update environment variables table
- Document hybrid search functionality
- Expand tools documentation

Dependencies:
- Add model2vec==0.6.0
- Add openai>=1.109.1
mahmoudimus added a commit to mahmoudimus/mcp-server-qdrant that referenced this pull request Nov 17, 2025
This commit consolidates changes from PRs qdrant#92, qdrant#75, qdrant#77, qdrant#90, qdrant#20, qdrant#89, qdrant#78, qdrant#76, and qdrant#68:

Infrastructure & Configuration (PR qdrant#75, qdrant#77):
- Upgrade Dockerfile to Python 3.13-slim
- Use UV 0.8.3 from official image
- Add FASTMCP_HOST="0.0.0.0" for container networking
- Add SettingsConfigDict for proper None value parsing

New Embedding Providers (PR qdrant#76, qdrant#92):
- Add Model2Vec support for fast, lightweight embeddings
- Add OpenAI-compatible API support (oai_compat)
- New settings: OAI_COMPAT_ENDPOINT, OAI_COMPAT_API_KEY, OAI_COMPAT_VEC_SIZE

Unnamed Vectors & Multiple Collections (PR qdrant#78):
- Add support for Qdrant unnamed vectors
- Create UnnamedVectorProvider wrapper
- Add USE_UNNAMED_VECTORS and COLLECTION_NAMES settings
- Update qdrant.py to handle both named and unnamed vectors
- Add __main__.py for python -m execution

Hybrid Search (PR qdrant#90):
- Implement hybrid search combining dense and sparse vectors
- Add find_hybrid() method with RRF and DBSF fusion methods
- New tool: qdrant-hybrid-find
- Add SPARSE_EMBEDDING_MODEL setting
- Support configurable limits for dense, sparse, and final results

Optional Collection Names (PR qdrant#89):
- Make collection_name parameter optional in store() and find()
- Use default collection when not specified
- Simplify tool usage with fallback to COLLECTION_NAME env var

Additional Tools (PR qdrant#68):
- Add qdrant-get-point: Retrieve point by ID
- Add qdrant-delete-point: Delete point by ID
- Add qdrant-update-point-payload: Update point metadata
- Add qdrant-get-collections: List all collections
- Add qdrant-get-collection-details: Get collection info
- Implement corresponding methods in QdrantConnector

Documentation:
- Update README with all new features
- Document new embedding providers
- Add examples for unnamed vectors and multiple collections
- Update environment variables table
- Document hybrid search functionality
- Expand tools documentation

Dependencies:
- Add model2vec==0.6.0
- Add openai>=1.109.1

Co-authored-by: Claude <noreply@anthropic.com>
@castlenthesky

castlenthesky commented Sep 5, 2026 •

Copy link
Copy Markdown

@chaserhkj, I've opened #187 as a draft covering the same ground. Wanted to say so here rather than quietly compete with a PR that's been sitting since September.

Yours has the most support of the three (#92, #111, #158) and two people have already asked for a review on it. For what it's worth I don't think it stalled because anything's wrong with it. It's a big read at +1074/-900 across 6 files, it's gone stale against master since, and back in #55 @kacperlukawski was pretty specific that he wanted "just OpenAI embeddings, but nothing else."

So I kept mine deliberately tiny: 26 added lines in existing files plus one new provider file, nothing refactored. That's basically a bet that review bandwidth is the real problem here, not the feature.

To be clear about where I stand, I'd rather any of these land than mine specifically. If you want to rebase #92 and trim it down to that shape, I'll close mine and review yours instead. If you'd rather not pick it back up, I'm happy to pull anything useful from your branch into mine and credit you. Your call, just let me know.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

4 participants