How guttedgarden/orna works
Orna Memory is a self-hosted MCP backend for durable, project-scoped agent memory. An AI client authenticates to the stateless HTTP MCP endpoint and supplies project context, then searches, retrieves a revision, or adds validated experience. Search prepares dense and lexical queries, retrieves candidates in parallel, fuses rankings, and returns a sanitized result; writes scan for secrets, enforce the embedding token limit, prepare content, embed it, and persist an immutable revision. The graph follows documented capabilities and sampled service/repository calls; unsampled write-service wiring is shown only where the README establishes it.
Main entry points: mcp_server.py MCP server · write.py Memory write · search.py Search service · repository.py Memory repository
Components 13
MCP interface
- MCP server
orna-memory-mcp/app/mcp_server.py - Bearer auth
orna-memory-mcp/app/auth.py - Project context
orna-memory-mcp/app/project_context.py
Memory operations
- Memory write
orna-memory-mcp/app/write.py - Write safety
orna-memory-mcp/app/write_safety.py - Content normalizer
orna-memory-mcp/app/normalizer.py - Revision lookup
orna-memory-mcp/app/repository.py
Hybrid retrieval
- Search service
orna-memory-mcp/app/search.py - Embedding service
orna-memory-mcp/app/embeddings.py - Embedding profile
orna-memory-mcp/app/embedding_profile.py
Persistence
- Memory repository
orna-memory-mcp/app/repository.py - PostgreSQL + pgvector
Other components
- AI client
Connections 15
- AI client → MCP server: calls MCP tools
- MCP server → Bearer auth: verifies bearer
- MCP server → Project context: resolves project
- MCP server → Memory write: dispatches add
- MCP server → Search service: dispatches search
- MCP server → Memory repository: reads revision
- Memory write → Write safety: validates input
- Memory write → Content normalizer: prepares content
- Memory write → Embedding service: embeds memory
- Memory write → Memory repository: inserts revision
- Search service → Content normalizer: normalizes query
- Search service → Embedding service: embeds query
- Search service → Memory repository: retrieves candidates
- Memory repository → PostgreSQL + pgvector: reads and writes
- Embedding service → Embedding profile: uses profile