Mcp-QadGraph
⚠️ Note: The rest of this repository (code, comments, scripts, docs, commits, issues) is written in French. Only this README is in English.
"See the vector memory, don't just query it." Local dashboard (3D similarity sphere) + MCP server for a Qdrant database. Python stdlib on the server side · 100% local · 0 paid API · 0 Docker.
The problem
A Qdrant collection is thousands of unreadable vectors. The native UI shows the neighborhood of one point, not the global shape of the memory: duplicates, clusters, hub nodes, type distribution.
QadGraph computes cosine similarity server-side, caches the result, and serves:
a dashboard (3D graph, metrics, search, logs, config);
an MCP server: any agent (Claude Desktop, Codex, kimi…) inspects the memory read-only.
Related MCP server: trident-mcp
Current state
v0.1.1 — working on local Qdrant, not yet generalized. Security fixes (CORS, proxy, SSRF).
Verified at runtime (2026-10-22, Windows, Python 3.14, Qdrant 1.19.2): all 9 main dashboard routes answer
200,/api/healthreturnsqdrant: up.Automated tests limited to dashboard security:
tests/test_security.py(stdlib, without Qdrant);python -m unittest discover -s tests -v.No performance benchmark: cosine computation is pure Python, O(n²·dimension), therefore capped (see Limitations).
Only tested on Windows. Linux/macOS support is unverified.
Coupled to Qdrant and to an agent memory's payload schema (
type,session,text/summaryfields). See Known limitations.
Quick start
Prerequisites: Qdrant running on http://127.0.0.1:6333, Python 3.8+ advertised (tested on 3.14).
git clone https://github.com/MlkBlk-IT/Mcp-QadGraph
cd Mcp-QadGraph
$env:QADGRAPH_COLLECTION = "my_collection"
python qadgraph\server.py # → http://127.0.0.1:8766/The dashboard has zero dependencies to install. The frontend loads D3 from a CDN: internet is required for the graph view.
MCP server
{
"mcpServers": {
"qadgraph": {
"command": "<PYTHON_WITH_MCP>",
"args": ["<REPO_PATH>/qadgraph/mcp/qadgraph_mcp.py"],
"env": {
"QADGRAPH_QDRANT": "http://127.0.0.1:6333",
"QADGRAPH_COLLECTION": "my_collection"
}
}
}
}The MCP server requires the mcp package (FastMCP): pip install -r requirements.txt in the Python used.
Architecture
MCP client / browser
│ │
▼ ▼
qadgraph/mcp/qadgraph_mcp.py qadgraph/web/ (3D UI, app.js)
│ imports │ HTTP
▼ ▼
qadgraph/server.py ← Store + cache + server-side cosine + HTTP API (:8766)
│ HTTP JSON
▼
Qdrant (:6333) — /collections, points/scrollThe browser receives a lightweight topology (nodes + edges), never the raw vectors.
File | Role |
| Engine (Store, cache, similarity, metrics) + stdlib HTTP server |
| FastMCP server, 9 tools, reuses the |
| Frontend: |
| Detailed reference: routes, variables, navigation gestures |
| Build journal |
Exposed MCP tools (9)
Tool | Role |
| Server, Qdrant and collection status |
| Full metrics (graph, distributions, schema) |
| All collections + metrics |
| Cosine search across the memory |
| Recent entries |
| Graph stats + most connected nodes |
| Full payload of a point + 8 nearest neighbors |
| Qdrant log queue |
| Dashboard URL and startup commands |
All tools are read-only.
Configuration (environment variables)
Variable | Default | Role |
|
| Qdrant URL |
|
| Collection analyzed (change this) |
|
| Listen interface |
|
| Dashboard port |
|
| Seconds between two refreshes |
|
| Max similarity matrix size |
|
| Max edges returned |
|
| URL announced by the MCP |
| (empty) | Extra hosts accepted in the |
Known limitations
Security
Fixed in v0.1.1 — CORS / CSRF / DNS rebinding. The server no longer sends
Access-Control-Allow-Origin: *, and rejects (403) any request whoseHostorOriginis not the dashboard's (127.0.0.1,localhost,[::1]+ port, plusQADGRAPH_ALLOWED_HOSTS).OPTIONSpreflights are refused (405).Fixed in v0.1.1 — read-only proxy.
POST /api/qdrant/proxyonly acceptssearch,scroll,count,query,recommend,discoverandfacet. Before the fix, aPOSTto/collections/<name>/points/deletewas relayed to Qdrant (reproduced by a test).Fixed in v0.1.1 — proxy paths. Paths must be relative (
/...): no more@host,//hostor...Still open: no authentication;
/api/configreturns Qdrant'sconfig.yamlif it exists (it may contain an API key) to any local process reaching the port. Do not run withQADGRAPH_HOSTother than127.0.0.1.
Functional
Qdrant only. The coupling lives in
Store.refresh,Store._scrollandqadgraph_logs, but no other backend is implemented.Expected payload schema:
type,session,text(orsummary). On another collection, these fields will beunknown/ empty.Similarity matrix capped at
QADGRAPH_MAX_MATRIXpoints (500); beyond that, only point metrics remain available. Pure-Python computation: CPU-bound.Logs (
/api/logs,qadgraph_logs) readlogs/qdrant.stdout.logandlogs/qdrant.stderr.logat the repo root. Absent by default: the Logs view will be empty.Some config examples (MCP docstring,
qadgraph-mcp.json,/api/config,docs/REFERENCE.md,PROGRESS.md) contain the author's Windows paths (C:\AI\EmbeddingDB\...): adapt them. The code itself resolves its paths via__file__.No CI, no authentication, no functional tests outside security.
Methodology
Read-only: the MCP never writes to Qdrant.
Server-side computation: the browser receives ~40 KB of topology, not 6 MB of vectors.
stdlib only for the dashboard: starts under any Python with no installation.
Portable by construction: no proprietary SDK, no paid API, 100% CPU.
Author
Malik — IT Support student (DEP), self-taught Focus: Sysadmin + Cyber + AI + Cloud
⚡ Built on CPU. Proven on disk. ⚡
This server cannot be deployed
Maintenance
Related MCP Connectors
Remote ChromaDB vector database MCP server with streamable HTTP transport
MCP server for progressive tool usage at any scale (see https://klavis.ai)
Unified 15-tool SEO, SERP, clean Markdown & GEO (LLM citation Share-of-Voice) MCP server.
Nifty's MCP server — exposes tasks, projects, messages, and files as tools for AI agents.
Related MCP Servers
- AlicenseAqualityCmaintenanceTurn any CSV into a stunning interactive dashboard with one command — works as CLI, MCP server, or AI skill114MIT
- AlicenseAqualityBmaintenanceAI 3D model generation and post-processing MCP server — text/image/multiview-to-3D via Tripo, retopology, format conversion (GLB/FBX/OBJ/STL/USDZ), and stylization. Single Go binary, 10 tools.285Apache 2.0
- AlicenseNot gradedqualityCmaintenanceMCP server for Qdrant vector database with local BERT embeddings. Enables semantic search and vector storage operations through natural language.MIT
- AlicenseAqualityCmaintenanceMCP server that lets an LLM agent drive StableProjectorz, a 3D modeling app, by inspecting the loaded model, app state, viewport screenshots, and triggering UI actions via a loopback socket bridge.11MIT