In production 1.10.1

RAG MCP Server

My project memory, queryable by an agent.

Year
2026
Area
AI, Backend, Security
Stack
.NET 10 · Qdrant · SQLite · MCP · Ollama

The problem

An agent starting from zero every session forgets the decisions already made. What was needed was persistent project memory, with boundaries: one project must not read another's notes.

Constraints

  • Isolation between projects: per-collection ACLs, not a single global index.
  • Delegable keys: give an agent only what it needs, and be able to revoke it.
  • Exposed only on a trusted network or behind authentication, never an open endpoint.
  • Controllable embedding cost: local provider, not metered.

Architecture

  • ASP.NET Core with ModelContextProtocol, Qdrant for vectors, SQLite for identity and permissions.
  • Capability plus ACL model: a key can only do what it was granted.
  • Dense and hybrid search, with full-text indexes for keyword matching.
  • Secrets encrypted at rest; admin bootstrap to avoid lockout.

Decisions that matter

The key is not a secret to hide, it is a permission

The risk is not who reads the key, but what that key can do. The model is therefore capability plus ACL, with immediate revocation.

Memory is written as documents, not chats

Every entry is a card with a slug, a kind and a review date: decision, architecture, runbook, gotcha. A chat archive cannot be searched; an index of cards can.

Where it got to

Fifty-five active collections, used daily by agents, with documented penetration-test rounds.