MCP server for advanced web search using Tavily
Qdrant is installed from its publisher's own source and answers where it runs, so this marketplace is not in the path of a single call. There is no address here to send one to, and a panel that pretended otherwise would be showing you an answer we made up. Install it and call it from your own client — the Installation tab has the entry for each one.
What it does
Exposes the full Qdrant vector database API to any MCP client: collection and point lifecycle, every search mode (hybrid RRF/DBSF, multi-stage prefetch, MMR, score formulas, grouped, recommend and discover), payload and vector editing, aliases, snapshots and server observability.
Heads-up: the 56 tools are split into 6 opt-in toolsets. The default install (the line on this page) enables only the core toolset, so your client will see 13 tools. To enable the rest, set QDRANT_MCP_TOOLSETS=core,search,payload,snapshots,admin,observability (or just the toolsets you need).
Read-only guard mode, strict input validation, compact tool schemas and a per-call result cap. MIT licensed.
Quickstart
# 1 — add it to Claude Code
claude mcp add --scope user qdrant-mcp '--' uvx mcp-qdrant
# 2 — ask your agent for something these tools do
# qdrant_health_check, qdrant_collection_create, qdrant_collection_list and 53 more
Qdrant costs nothing on mcprush: there is no plan to choose here, no cap to set and nothing mcprush can bill you for.
Where are you running it?
Every route below installs the same thing and ends at the same approval screen. This one runs on your machine: your client starts Qdrant as a process under your own user, with your files and your network, so the tool surface below is what it can do to your computer rather than to a server somewhere else. Its scan result is on the Security tab — read the surface before you approve it.
This is a public server: you run it yourself and this marketplace is not in the path. You need uv (docs.astral.sh/uv): uvx comes with it. Claude Code registers it in one command; --scope user makes it available in every project. The '--' is in quotes so that PowerShell passes it on.
claude mcp add --scope user qdrant-mcp '--' uvx mcp-qdrantReconnect, or start a new session, and the tools appear in the model’s tool list.
Nothing is required, but it can take QDRANT_URL (Qdrant server URL, e.g. http://localhost:6333 (mutually exclusive with QDRANT_LOCAL_PATH)), QDRANT_API_KEY (Qdrant API key, if your instance requires one), QDRANT_LOCAL_PATH (Path to an embedded Qdrant instance, instead of a URL), QDRANT_MCP_TOOLSETS (Comma-separated toolsets to enable: core, search, payload, admin, snapshots, observability), QDRANT_MCP_READ_ONLY (Remove every tool not marked read-only from the registry), QDRANT_MCP_MAX_LIMIT (Largest number of points one tool call may ask for (minimum 30); bigger requests are refused, not cut) if you want to set them.
One config entry your client uses to start the process locally. A local server runs with your file system and your network, which is why it is priced without metering.
56 tools, with what each one reads, writes and reaches shown before you agree — the same list on every route above. Read the tool surface.
Tool surface
What the model actually sees. Descriptions are diffed on every release — see version history.
Confirm the configured Qdrant instance is reachable and responding. Never raises to the caller: a health check that raises on the exact condition it exists to detect defeats its own purpose. Connection failures are logged and reported in the result's ok/error fields instead, so a client renders them without a tool-call error round-trip.
No parameter schema on file.
Create a collection: either a single unnamed vector (vector_size + distance), or one or more named vectors (vectors, each a full VectorParams — size, distance, and optionally its own multivector_config for ColBERT-style multi-vectors or quantization_config) — exactly one of the two. sparse_vectors defines sparse (keyword-style) vectors at creat
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| vector_size | no | — | |
| distance | string | no | — |
| vectors | no | — | |
| sparse_vectors | no | — | |
| quantization_config | no | — | |
| strict_mode_config | no | — | |
| metadata | no | — | |
| hnsw_config | no | — | |
| optimizers_config | no | — | |
| on_disk_payload | no | — |
List every collection name in the configured Qdrant instance. Example: {}
No parameter schema on file.
Return full config and status of one collection. Fails with a clear error if the collection doesn't exist. Example: {"collection_name": "docs"}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
Update optimizer/HNSW/collection/vector params on an existing collection. Only the fields you pass are changed; omitted ones keep their current value. quantization_config="disabled" turns quantization off. vectors_config/sparse_vectors_config only adjust named vectors that already exist (HNSW/quantization/index tuning) — they cannot add a
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| optimizers_config | no | — | |
| hnsw_config | no | — | |
| collection_params | no | — | |
| vectors_config | no | — | |
| quantization_config | no | — | |
| sparse_vectors_config | no | — | |
| strict_mode_config | no | — |
Delete a collection and all its points; a no-op if it doesn't exist. Example: {"collection_name": "docs"}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
Check whether a collection exists, without raising if it doesn't. Example: {"collection_name": "docs"}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
Insert or replace points (id + vector + payload) in a collection. vector matches the collection's vector config: a plain list for a single unnamed vector; a list of lists for an unnamed multivector; or a dict keyed by vector name for named vectors, where each value is a dense list, a multivector, or a sparse vector ({"indices": [...], "values": [...]}).
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| points | array | yes | — |
| wait | boolean | no | — |
| update_mode | no | — | |
| update_filter | no | — |
Retrieve points by id; unknown ids are simply omitted, not an error. Fails only if the collection itself doesn't exist. Example: {"collection_name": "docs", "ids": [1, 2]}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| ids | array | yes | — |
| with_payload | boolean | no | — |
| with_vectors | boolean | no | — |
Delete points by id list or by payload filter — exactly one of the two. Deleting an id that doesn't exist is not an error (Qdrant treats it as a no-op); this only fails if the collection itself is missing, or if you provide zero or both selectors. Example (by id): {"collection_name": "docs", "ids": [1, 2]} Example (by filter): {"collection_name": "docs", "
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| ids | no | — | |
| points_filter | no | — |
Page through all points in a collection, optionally filtered. Pass the returned next_page_offset as offset to fetch the next page; null means there are no more pages. limit is capped per call by the server's QDRANT_MCP_MAX_LIMIT (1000 by default). order_by sorts by a payload field instead of by id: a key, or `{"key": ..., "direction": "asc"|"desc
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| scroll_filter | no | — | |
| limit | integer | no | — |
| offset | no | — | |
| with_payload | boolean | no | — |
| with_vectors | boolean | no | — |
| order_by | no | — |
Count points in a collection, optionally matching a filter. Example: {"collection_name": "docs"}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| count_filter | no | — | |
| exact | boolean | no | — |
Search a collection with Qdrant's unified Query API: vector similarity, hybrid fusion, multi-stage reranking, MMR diversity, payload-based score formulas, ordering by a payload field, or random sampling. Exactly one query mode is required: - query_vector — nearest points to a dense vector, a multivector (list of vectors), a sparse vector (`{"ind
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| query_vector | no | — | |
| fusion | no | — | |
| prefetch | no | — | |
| mmr | no | — | |
| formula | no | — | |
| order_by | no | — | |
| sample | no | — | |
| using | no | — | |
| lookup_from | no | — | |
| query_filter | no | — | |
| search_params | no | — | |
| score_threshold | no | — | |
| limit | integer | no | — |
| offset | no | — | |
| with_payload | boolean | no | — |
| with_vectors | boolean | no | — |
| timeout_seconds | no | — | |
| consistency | no | — |
Run multiple independent queries against one collection in a single round trip — each item takes every query mode and tuning parameter of qdrant_query (plain vector, fusion over prefetch, MMR, formula, order_by, sample, search_params, score_threshold, offset); timeout_seconds and consistency apply to the whole batch. Example: {"collection_name": "docs
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| queries | array | yes | — |
| timeout_seconds | no | — | |
| consistency | no | — |
Vector query grouped by a payload field, up to group_size hits per group — e.g. the best-matching chunks per source document. Takes every query mode and tuning parameter of qdrant_query except offset (groups have no paging). Example: {"collection_name": "docs", "group_by": "document_id", "query_vector": [0.1, 0.2, 0.3, 0.4], "group_size": 2}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| group_by | string | yes | — |
| query_vector | no | — | |
| fusion | no | — | |
| prefetch | no | — | |
| mmr | no | — | |
| formula | no | — | |
| order_by | no | — | |
| sample | no | — | |
| using | no | — | |
| lookup_from | no | — | |
| query_filter | no | — | |
| search_params | no | — | |
| score_threshold | no | — | |
| limit | integer | no | — |
| group_size | integer | no | — |
| with_payload | boolean | no | — |
| with_vectors | boolean | no | — |
| with_lookup | no | — | |
| timeout_seconds | no | — |
Find points similar to a set of positive examples and dissimilar to a set of negative ones (vectors or point ids) — Qdrant's recommendation API. Requires at least one of positive/negative; the server rejects an empty request with a clear error. Examples may be dense, multi- or sparse vectors, matching using. Takes the same tuning parameters as `qdrant
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| positive | no | — | |
| negative | no | — | |
| strategy | no | — | |
| using | no | — | |
| lookup_from | no | — | |
| prefetch | no | — | |
| query_filter | no | — | |
| search_params | no | — | |
| score_threshold | no | — | |
| limit | integer | no | — |
| offset | no | — | |
| with_payload | boolean | no | — |
| with_vectors | boolean | no | — |
| timeout_seconds | no | — | |
| consistency | no | — |
Run multiple independent recommend queries against one collection in a single round trip. Each item takes the tuning parameters of qdrant_recommend; timeout_seconds and consistency apply to the whole batch. Example: {"collection_name": "docs", "requests": [ {"positive": [1], "negative": [7]}, {"positive": [2, 3]} ]}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| requests | array | yes | — |
| timeout_seconds | no | — | |
| consistency | no | — |
Recommend query grouped by a payload field, up to group_size hits per group. Takes the tuning parameters of qdrant_recommend except offset (groups have no paging). Example: {"collection_name": "docs", "group_by": "document_id", "positive": [1, 2], "group_size": 2}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| group_by | string | yes | — |
| positive | no | — | |
| negative | no | — | |
| strategy | no | — | |
| using | no | — | |
| lookup_from | no | — | |
| prefetch | no | — | |
| query_filter | no | — | |
| search_params | no | — | |
| score_threshold | no | — | |
| limit | integer | no | — |
| group_size | integer | no | — |
| with_payload | boolean | no | — |
| with_vectors | boolean | no | — |
| with_lookup | no | — | |
| timeout_seconds | no | — | |
| consistency | no | — |
Rank points by how well they fit a target within positive/negative context pairs (vectors or point ids) — Qdrant's discovery search, a finer-grained alternative to recommend. The target and context may be dense, multi- or sparse vectors, matching using. Takes the same tuning parameters as qdrant_query: search_params, score_threshold, offset, `time
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| target | yes | — | |
| context | array | yes | — |
| using | no | — | |
| lookup_from | no | — | |
| prefetch | no | — | |
| query_filter | no | — | |
| search_params | no | — | |
| score_threshold | no | — | |
| limit | integer | no | — |
| offset | no | — | |
| with_payload | boolean | no | — |
| with_vectors | boolean | no | — |
| timeout_seconds | no | — | |
| consistency | no | — |
Run multiple independent discover queries against one collection in a single round trip. Each item takes the tuning parameters of qdrant_discover; timeout_seconds and consistency apply to the whole batch. Example: {"collection_name": "docs", "requests": [ {"target": 1, "context": [{"positive": 2, "negative": 7}]} ]}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| requests | array | yes | — |
| timeout_seconds | no | — | |
| consistency | no | — |
Pairwise distance matrix between a random sample of points: for each of sample points, its limit closest neighbors among that same sample — returned as a flat list of (a, b, score) pairs. Example: {"collection_name": "docs", "sample": 20, "limit": 5}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| query_filter | no | — | |
| limit | integer | no | — |
| sample | integer | no | — |
| using | no | — |
Same distance matrix as qdrant_distance_matrix_pairs, in a column-oriented shape (offsets into a shared id list + a parallel score array) — more compact for large samples. Example: {"collection_name": "docs", "sample": 20, "limit": 5}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| query_filter | no | — | |
| limit | integer | no | — |
| sample | integer | no | — |
| using | no | — |
Merge fields into the payload of selected points — exactly one of ids/points_filter. Existing keys not in payload are kept. key sets a nested sub-field (e.g. "metadata.author") instead of merging at the payload root. Example: {"collection_name": "docs", "ids": [1], "payload": {"city": "ny"}}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| payload | object | yes | — |
| ids | no | — | |
| points_filter | no | — | |
| key | no | — |
Replace the entire payload of selected points with payload — exactly one of ids/points_filter. Unlike qdrant_payload_set, existing keys not in payload are dropped. Example: {"collection_name": "docs", "ids": [1], "payload": {"city": "ny"}}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| payload | object | yes | — |
| ids | no | — | |
| points_filter | no | — |
Delete specific payload keys from selected points — exactly one of ids/points_filter. Other keys are untouched. Example: {"collection_name": "docs", "ids": [1], "keys": ["city"]}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| keys | array | yes | — |
| ids | no | — | |
| points_filter | no | — |
Wipe the entire payload of selected points, keeping their vectors — exactly one of ids/points_filter. Example: {"collection_name": "docs", "ids": [1]}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| ids | no | — | |
| points_filter | no | — |
Count distinct values of a payload field across the collection (or a filtered subset) — e.g. how many points per city. exact trades speed for an exact count instead of an approximation. Example: {"collection_name": "docs", "key": "city", "limit": 20}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| key | string | yes | — |
| facet_filter | no | — | |
| limit | integer | no | — |
| exact | boolean | no | — |
Create a payload index on field_name, speeding up filters that use it. field_schema can be a simple type name ("keyword", "integer", "float", "geo", "text", "bool", "datetime", "uuid") or a detailed params object (e.g. a text index with a specific tokenizer, or a keyword index marked is_tenant). Example: {"collection_name": "docs", "field_name": "
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| field_name | string | yes | — |
| field_schema | yes | — |
Delete the payload index on field_name. Example: {"collection_name": "docs", "field_name": "city"}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| field_name | string | yes | — |
Add a new named vector (dense or sparse) to a collection that already has points, without touching them. Requires a recent Qdrant server: verified hands-on that this 404s on v1.13.6 and v1.15.1, and works on v1.19.0 (this project's CI floor from Fase 3 onward) — pin your server accordingly. For vector_kind="dense", give both size and distance (optiona
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| vector_name | string | yes | — |
| vector_kind | string | yes | — |
| size | no | — | |
| distance | no | — | |
| multivector_comparator | no | — | |
| datatype | no | — | |
| modifier | no | — |
Remove a named vector (dense or sparse) from a collection — points keep their other vectors and payload. Same server-version requirement as qdrant_collection_vector_create. Example: {"collection_name": "docs", "vector_name": "sparse"}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| vector_name | string | yes | — |
Run multiple point operations (upsert, delete, set/overwrite/delete/clear payload, update/delete vectors) against one collection, in the order given, in a single request. Each item is one of Qdrant's own tagged operation shapes, keyed by operation name. Not all-or-nothing (verified): if one operation fails, the ones before it stay applied, so check the coll
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| operations | array | yes | Point operations applied in order. Each item is an object with exactly one key: upsert ({"points": [{id, vector, payload}]} or {"batch": {ids, vectors, payloads}}), delete ({"points": [ids]} or {" |
Replace the vector(s) of existing points by id — leaves their payload untouched. For a named-vector collection, vector is a dict keyed by vector name; for a single unnamed vector, pass a plain vector. Example: {"collection_name": "docs", "points": [ {"id": 1, "vector": [0.1, 0.2, 0.3, 0.4]} ]}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| points | array | yes | — |
Remove specific named vectors from selected points, keeping their payload and other vectors — exactly one of ids/points_filter. Example: {"collection_name": "docs", "vector_names": ["sparse"], "ids": [1]}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| vector_names | array | yes | — |
| ids | no | — | |
| points_filter | no | — |
List every alias on the server with the collection it points to. An alias is an alternative name for a collection, accepted by Qdrant anywhere a collection_name is — see qdrant_alias_update. Aliases are not returned by qdrant_collection_list. Example: {}
No parameter schema on file.
List the aliases that point to one collection (an empty list if it has none). Fails with a clear error if the collection doesn't exist. Example: {"collection_name": "docs_v2"}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
Create, rename, re-point or delete aliases — the basis of a zero-downtime reindex: build the new collection, then switch the alias that clients use. Each operation is exactly one of create_alias (collection_name, alias_name), rename_alias (old_alias_name, new_alias_name) or delete_alias (alias_name). Operations run in order in one re
| Parameter | Type | Required | Notes |
|---|---|---|---|
| operations | array | yes | — |
Shard layout of a collection: how many shards it has and, for each local shard, its point count and replica state. Works on a single-node deployment too (one peer, remote_shards empty); shard transfers and resharding only ever appear on a distributed deployment. Fails with a clear error if the collection doesn't exist. Example: {"collection_name": "docs"}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
Progress of the background optimizer for a collection — answers "has it finished indexing?" and "why isn't the collection green?". Always returns a summary (queued optimizations/segments/points and idle segments) and the optimizations running right now. include adds detail lists: queued (waiting optimizations), completed (finished ones; bound them wit
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| include | no | — | |
| completed_limit | no | — |
Copy points (all vectors — dense, sparse and multivector — and payload) from one collection to another of the same Qdrant instance, entirely server-side: the vectors never pass through the model. The target must already exist with a compatible vector configuration (see qdrant_collection_info); this tool does not create it. Use it to re-create a collection
| Parameter | Type | Required | Notes |
|---|---|---|---|
| source_collection | string | yes | — |
| target_collection | string | yes | — |
| copy_filter | no | — | |
| batch_size | integer | no | — |
| max_points | integer | no | — |
| offset | no | — |
Profile the payload keys that actually occur in a collection, so filters can be written against real keys instead of guessed ones. Looks at a random sample of sample_size points (optionally limited by sample_filter) and reports, per key: the value types seen (string, integer, float, boolean, null), whether it was ever an array, how many sample
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| sample_size | integer | no | — |
| sample_filter | no | — | |
| top_values | integer | no | — |
| max_fields | integer | no | — |
Create a snapshot of one collection's current state. Example: {"collection_name": "docs"}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
List the snapshots stored for one collection. Example: {"collection_name": "docs"}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
Delete a collection snapshot, freeing its disk space on the server — does not touch the live collection. Example: {"collection_name": "docs", "snapshot_name": "docs-....snapshot"}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| snapshot_name | string | yes | — |
Overwrite collection_name with the state captured in a snapshot — everything written since that snapshot is lost. Creates the collection if it doesn't exist. location must be reachable by the Qdrant server itself, not necessarily by whoever calls this tool: an HTTP(S) URL (e.g. from qdrant_snapshot_download) or a file:// path on the server's own
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| location | string | yes | — |
| priority | no | — | |
| checksum | no | — | |
| api_key | no | — |
Confirm a collection snapshot exists and return where to fetch it from — this tool does not transfer the (potentially huge) snapshot file itself; download it yourself (e.g. curl) from the returned url. Example: {"collection_name": "docs", "snapshot_name": "docs-....snapshot"}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| collection_name | string | yes | — |
| snapshot_name | string | yes | — |
Create a snapshot of the whole storage (every collection and server config), not just one collection. Example: {}
No parameter schema on file.
List the full-storage snapshots stored on the server. Example: {}
No parameter schema on file.
Delete a full-storage snapshot, freeing its disk space. Example: {"snapshot_name": "full-....snapshot"}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| snapshot_name | string | yes | — |
Confirm a full-storage snapshot exists and return where to fetch it from — same caveat as qdrant_snapshot_download: this tool does not transfer the file itself. There is no qdrant_storage_snapshot_recover: restoring a full storage snapshot is done with the server stopped, pointed at the snapshot file at startup — not a live API call. Example: {
| Parameter | Type | Required | Notes |
|---|---|---|---|
| snapshot_name | string | yes | — |
Server-wide telemetry: build info, per-collection stats, request counters, memory and hardware usage. Not tied to any one collection. Example: {}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| details_level | no | — |
Return the URL where Qdrant serves Prometheus-format metrics — this tool does not fetch the metrics themselves (they're plain text, not JSON); point your Prometheus scraper at the returned url instead. Example: {}
No parameter schema on file.
Current server-wide resource quotas (memory/disk limits) and actual usage. Example: {}
No parameter schema on file.
Update server-wide resource quotas. Only the fields you pass are changed; omitted ones keep their current value. Example: {"enabled": true, "max_resident_memory_percent": 90}
| Parameter | Type | Required | Notes |
|---|---|---|---|
| enabled | no | — | |
| max_resident_memory_percent | no | — | |
| max_disk_usage_percent | no | — | |
| release_margin_percent | no | — |
List the issues Qdrant has detected about its own configuration (e.g. a heavily-filtered field with no payload index). API Beta in Qdrant itself — the exact shape can change without notice, so this is returned as-is rather than forced into a fixed schema. Example: {}
No parameter schema on file.
Clear all accumulated issues. Example: {}
No parameter schema on file.
- Every tool, no call limit
- No card, and mcprush charges nothing for it
- Source published under MIT
- Runs on your machine — nothing of it reaches our gateway
- Nothing to cap, because mcprush bills nothing
What counts against your monthly calls
| Tool | Unit | Calls used | Out of the allowance |
|---|
Nothing here is billable: mcprush charges nothing to install Qdrant or to call it, at any volume.
Two independent axes, because powerful and malicious are different questions. The grade is threat only. The capability level is blast radius, and it is never a penalty on the grade — it is priced as one subtract-only term in the score, where you can see it.
| Term | Level | What it prices | Points |
|---|---|---|---|
| capability-exposure | minimal | capability blast radius (minimal) — client exposure if the model is manipulated | −0 |
| verification-discount | repo | publisher verification (public source) — no provenance, but the source is public and inspectable | −1 |
| coverage-honesty | source | inspection depth (source) — how much of the target the scan could see | −0 |
What the scan could actually read
A grade is only as meaningful as its coverage, so the scanner publishes its own depth before it publishes its result.
No tools were enumerated, so prompt-injection, capability and toxic-flow analysis had no tool surface to inspect. To grade a package’s real runtime tools, scan the running server: --command "npx -y <package>".
The source has registrations with unknown names: the tools registered at src/mcp_qdrant/tools/registry.py:77 get their names only at run time (a loop over a list the code builds, a name it computes), so they are not in this surface and were not analysed. To see them, scan the running server: --command "npx -y <package>".
Capability — what it could do if the model were manipulated
Tags derived from each tool’s schema and the implementation, not from what the tool calls itself. minimal is the level these add up to.
| Tool | Capability tags | Why the tag was assigned |
|---|---|---|
| No per-tool rows for this release — see the note below. | ||
Toxic-flow graph
The lethal trifecta, checked as a graph rather than as a checklist: untrusted input, a sensitive source and an external sink have to meet before there is a path worth worrying about.
The public result for this release does not print the flow graph, so there is nothing to show here. That is not the same as "no paths were found": what the scan did read is above, under coverage.
Supply chain and provenance
This is the first scan of this surface here, so there is nothing yet to compare it against.
Every result on this tab comes from one deterministic pass over the published package — offline, rule by rule, and auditable line by line above. Same methodology version, same bytes, same score.
Release history
Always latest — the install command names no version, so it installs the newest release when it runs; the current release on file is 2.6.0. Pin a release below and the command asks for exactly that one.
No release note was published with this version.
No release note was published with this version.
- The version this listing was on when mcprush began following its releases. The registry was not asked when it shipped, so this row carries no date.
One review per account, from a signed-in account that does not publish this listing. Nothing else is asked — you can say what you think before you install it. Publishers can reply once per review, and a review can be edited or deleted by whoever wrote it.
Any signed-in account that does not publish Qdrant can review it, once — before installing it or after. A review from an account that has installed it is marked as one.
Nobody has reviewed this listing. The rating on the card is the mean of the reviews written here and nothing else, so there is no rating until somebody writes the first — which takes a signed-in account that does not publish it, and nothing else.