Create a collection with multi-tenancy enabled: set multiTenancyConfig.enabled=true in the class definition; each tenant gets an isolated shard
Add tenants by name via the tenants endpoint: client.collections.get('MyClass').tenants.create([Tenant(name='tenant_a')])
Deactivate idle tenants to free shard memory: update tenant status to INACTIVE — the shard data remains on disk but is evicted from memory
Offload cold tenants to object storage (Weaviate Cloud or self-managed with S3/GCS backend): set status to OFFLOADED — data moves off the node entirely
Reactivate a tenant before querying: update status back to ACTIVE; Weaviate reloads the shard (from disk for INACTIVE, from object storage for OFFLOADED)
Monitor tenant states by listing tenants on the collection and inspecting the activityStatus field to identify candidates for deactivation
Known gotchas
Querying an INACTIVE or OFFLOADED tenant returns an error; callers must check tenant status or handle the error and trigger reactivation before retrying
Reactivating an OFFLOADED tenant incurs a latency spike while data is retrieved from object storage — unsuitable for latency-sensitive first-query paths without a warm-up strategy
Multi-tenancy cannot be enabled or disabled on an existing collection; it must be set at class creation time
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp