Merge remote-tracking branch 'origin/master' into fix/qdrant-doc-id-keyword-index
# Conflicts: # nextcloud_mcp_server/vector/qdrant_client.py
This commit is contained in:
@@ -5,6 +5,18 @@ All notable changes to the Nextcloud MCP Server will be documented in this file.
|
|||||||
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
||||||
and this project adheres to [PEP 440](https://peps.python.org/pep-0440/).
|
and this project adheres to [PEP 440](https://peps.python.org/pep-0440/).
|
||||||
|
|
||||||
|
## v0.83.4 (2026-05-10)
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
- **qdrant**: use get_collection for startup probe (multi-tenant safe, take 2)
|
||||||
|
|
||||||
|
## v0.83.3 (2026-05-10)
|
||||||
|
|
||||||
|
### Fix
|
||||||
|
|
||||||
|
- **qdrant**: use collection_exists for startup probe (multi-tenant safe)
|
||||||
|
|
||||||
## v0.83.2 (2026-05-09)
|
## v0.83.2 (2026-05-09)
|
||||||
|
|
||||||
### Fix
|
### Fix
|
||||||
|
|||||||
@@ -559,17 +559,33 @@ async def get_qdrant_client() -> AsyncQdrantClient:
|
|||||||
|
|
||||||
expected_dimension = embedding_service.get_dimension()
|
expected_dimension = embedding_service.get_dimension()
|
||||||
|
|
||||||
# Explicitly check if collection exists
|
# Existence check folded into the get_collection() call.
|
||||||
logger.debug(f"Checking if collection '{collection_name}' exists...")
|
#
|
||||||
collections = await provisional.get_collections()
|
# In managed multi-tenant Qdrant Cloud setups, per-tenant JWTs are
|
||||||
collection_names = [c.name for c in collections.collections]
|
# scoped to a single collection (`access: [{"collection": "...",
|
||||||
|
# "access": "rw"}]`) and Qdrant denies the cluster-level meta
|
||||||
|
# endpoints `GET /collections` (used by `get_collections()`) and
|
||||||
|
# `GET /collections/{name}/exists` (used by `collection_exists()`)
|
||||||
|
# with 403 Forbidden — by design, since listing or probing
|
||||||
|
# collections cluster-wide is a tenant-isolation boundary.
|
||||||
|
# `GET /collections/{name}` (the underlying call for
|
||||||
|
# `get_collection()`) is the only existence-probe permitted on a
|
||||||
|
# collection-scoped JWT — it returns 200 with the collection
|
||||||
|
# detail on hit and 404 on miss.
|
||||||
|
logger.debug(f"Fetching collection '{collection_name}' details...")
|
||||||
|
collection_info = None
|
||||||
|
try:
|
||||||
|
collection_info = await provisional.get_collection(collection_name)
|
||||||
|
except UnexpectedResponse as exc:
|
||||||
|
if exc.status_code != 404:
|
||||||
|
raise
|
||||||
|
logger.debug(f"Collection '{collection_name}' not found (404).")
|
||||||
|
|
||||||
if collection_name in collection_names:
|
if collection_info is not None:
|
||||||
# Collection exists - validate dimensions
|
# Collection exists - validate dimensions
|
||||||
logger.debug(
|
logger.debug(
|
||||||
f"Collection '{collection_name}' found, validating dimensions..."
|
f"Collection '{collection_name}' found, validating dimensions..."
|
||||||
)
|
)
|
||||||
collection_info = await provisional.get_collection(collection_name)
|
|
||||||
# Handle both named vectors (dict) and legacy single vector
|
# Handle both named vectors (dict) and legacy single vector
|
||||||
vectors = collection_info.config.params.vectors
|
vectors = collection_info.config.params.vectors
|
||||||
if isinstance(vectors, dict):
|
if isinstance(vectors, dict):
|
||||||
|
|||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
[project]
|
[project]
|
||||||
name = "nextcloud-mcp-server"
|
name = "nextcloud-mcp-server"
|
||||||
version = "0.83.2"
|
version = "0.83.4"
|
||||||
description = "Model Context Protocol (MCP) server for Nextcloud integration - enables AI assistants to interact with Nextcloud data"
|
description = "Model Context Protocol (MCP) server for Nextcloud integration - enables AI assistants to interact with Nextcloud data"
|
||||||
authors = [
|
authors = [
|
||||||
{name = "Chris Coutinho", email = "chris@coutinho.io"}
|
{name = "Chris Coutinho", email = "chris@coutinho.io"}
|
||||||
|
|||||||
@@ -2123,7 +2123,7 @@ wheels = [
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "nextcloud-mcp-server"
|
name = "nextcloud-mcp-server"
|
||||||
version = "0.83.2"
|
version = "0.83.4"
|
||||||
source = { editable = "." }
|
source = { editable = "." }
|
||||||
dependencies = [
|
dependencies = [
|
||||||
{ name = "aiosqlite" },
|
{ name = "aiosqlite" },
|
||||||
|
|||||||
Reference in New Issue
Block a user