{"id":"e1a39ba0-c5ed-48fb-9e13-b298b450ebd1","slug":"nram","kind":"mcp","name":"nram","summary":"The continuity layer for everything you do with AI. A self-hosted, open source server any tool plugs into over MCP or REST: hybrid vector + lexical recall, an auto-built knowledge graph, sleep-style c","owner":"nram-ai","repoUrl":"https://github.com/nram-ai/nram","license":"MIT","licenseTier":"permissive","trust":"community","stars":9,"match":null,"fewStars":false,"format":"mcp","createdAt":"2026-03-21T10:33:12.000Z","addedAt":"2026-10-14T05:07:03.902Z","logoUrl":"https://avatars.githubusercontent.com/u/267040885?v=4","linkOnly":false,"collection":null,"skillPath":null,"categories":["memory-knowledge","databases","search"],"tags":["ai-agents","ai-memory","embeddings","knowledge-graph","llm-tools","multi-tenant","rag","semantic-search"],"runtime":"go","local":true,"cloudCapable":false,"cloudCapability":"unknown","cloudReadyOnPlatform":false,"needsApiKey":false,"reviewed":false,"syncedAt":"2026-10-17T08:22:46.561Z","sample":false,"url":"https://conduits.dev/tools/nram","language":"Go","transports":["stdio"],"install":{},"requirements":{"env":[],"upstreamMayCharge":false},"tools":null,"readme":"<p align=\"center\">\n  <a href=\"https://nram.ai\"><img src=\".github/og-header.png\" alt=\"Neural Ram: the continuity layer for everything you do with AI\" width=\"100%\" /></a>\n</p>\n\n<p align=\"center\">\n  <a href=\"https://github.com/nram-ai/nram/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/github/actions/workflow/status/nram-ai/nram/ci.yml?branch=master&style=flat-square&logo=githubactions&logoColor=white&label=CI\" alt=\"CI\" /></a>\n  <a href=\"https://github.com/nram-ai/nram/actions/workflows/ci.yml\"><img src=\"https://img.shields.io/badge/UI_coverage-100%25-7FCFFA?style=flat-square\" alt=\"UI coverage 100%\" /></a>\n  <a href=\"https://goreportcard.com/report/github.com/nram-ai/nram\"><img src=\"https://goreportcard.com/badge/github.com/nram-ai/nram?style=flat-square\" alt=\"Go Report Card\" /></a>\n  <a href=\"LICENSE\"><img src=\"https://img.shields.io/badge/license-MIT-7FCFFA?style=flat-square\" alt=\"License: MIT\" /></a>\n  <a href=\"https://github.com/nram-ai/nram/stargazers\"><img src=\"https://img.shields.io/github/stars/nram-ai/nram?style=flat-square&color=7FCFFA\" alt=\"GitHub stars\" /></a>\n</p>\n\n<p align=\"center\">\n  <img src=\"https://img.shields.io/badge/Go-1.26%2B-00ADD8?style=flat-square&logo=go&logoColor=white\" alt=\"Go 1.26+\" />\n  <img src=\"https://img.shields.io/badge/platforms-macOS%20%7C%20Linux%20%7C%20Windows-7FCFFA?style=flat-square\" alt=\"Platforms: macOS, Linux, Windows\" />\n  <img src=\"https://img.shields.io/badge/MCP-Streamable_HTTP-7FCFFA?style=flat-square\" alt=\"MCP over Streamable HTTP\" />\n  <img src=\"https://img.shields.io/badge/storage-SQLite_%7C_PostgreSQL-7FCFFA?style=flat-square\" alt=\"SQLite or PostgreSQL\" />\n  <img src=\"https://img.shields.io/github/last-commit/nram-ai/nram?style=flat-square&color=7FCFFA\" alt=\"Last commit\" />\n</p>\n\n<p align=\"center\">\n  <a href=\"#what-is-neural-ram\">What is it</a> &middot;\n  <a href=\"#get-running\">Get running</a> &middot;\n  <a href=\"docs/quickstart.md\">Quick Start</a> &middot;\n  <a href=\"#reference\">Docs</a> &middot;\n  <a href=\"https://nram.ai\">nram.ai</a>\n</p>\n\n> Work in progress: under active development. Expect rough edges, and feedback is welcome.\n\n## What is Neural Ram?\n\nRight now, **you** are the continuity layer between your AI tools. You copy context from Claude into ChatGPT, write handoff docs, re-explain the same decisions, and lose a little more each time you switch tools or machines.\n\nnram takes that job off you. It is one self-hosted server that keeps what mattered across every tool, every conversation, and every machine, on infrastructure that belongs to you. Your agent already reads the PDF, watches the video, runs the test, scrapes the page; nram's job is to keep what mattered. Context, not storage.\n\nIt is a real server, not a library or a localhost shim: a single MIT-licensed binary with OAuth, passkeys, multi-tenancy, and MCP over HTTP, so your laptop, desktop, and phone all see the same brain. And it is more than a database with vector search: it pulls facts and entities out of your free-text notes, builds a knowledge graph of how they connect, and runs a background *dreaming* cycle that consolidates, dedups, and prunes while the server is idle, like a notebook that quietly reorganizes itself overnight.\n\n### One substrate, many jobs\n\nnram is not another memory tool bolted onto one app. It is the layer underneath them, so a single server covers work that today is split across separate products:\n\n| Job | What nram provides | Comparable tools |\n|---|---|---|\n| Conversational continuity | Memory that survives across sessions, tools, and vendors, reachable over MCP. | Claude Memory, ChatGPT Memory |\n| Document-corpus recall | Semantic search, an entity-deduped knowledge graph, and consolidation over a stored corpus. A substrate, not a chat UI. | NotebookLM, AnythingLLM, Khoj |\n| Procedural rules | A first-class verbatim tier for standing rules, conventions, and protocols an assistant loads at session start. Returned byte-for-byte, never embedded or paraphrased. | (no direct equivalent) |\n| Persona / self-knowledge (`about_me`) | A reserved, fully-indexed tier for identity, preferences, and ongoing context that surfaces by association on every recall. | (no direct equivalent) |\n| Agent memory | Persistent memory for coding, research, and custom agents, with consolidation and a knowledge graph on top. | Mem0, Letta, Zep, Graphiti |\n\n## Features\n\n### Recall that actually finds things\n\n- Hybrid **vector + lexical** search (FTS5 on SQLite, `tsvector` on Postgres) fused with Reciprocal Rank Fusion and boosted by the knowledge graph.\n- **Relevance-first ranking**: query relevance is the base score; priors like recency, importance, and frequency refine the order but never let an off-topic memory outrank the on-topic answer.\n- **MMR de-dup** keeps results diverse, and **multi-vector facets** match a query against a memory's best sub-topic instead of a diluted average.\n- An optional **reranker** (cross-encoder `/v1/rerank` or LLM judge, auto-detected) re-scores the top candidates for relevance.\n\n### A knowledge graph that builds itself\n\n- **Two-pass extraction**: background workers pull facts and entities from your free text, then infer the relationships between them.\n- A **closed type vocabulary** keeps the graph canonical instead of sprouting near-synonym labels, and a cleanup pass folds duplicate nodes back together.\n- **Query augmentation** paraphrases each memory into short retrieval queries so recall matches the way people actually ask.\n- An optional **ingestion judge** decides add / update / delete / none against near-duplicates before extraction runs.\n\n### Dreaming, an offline consolidation cycle\n\n- A **fourteen-phase** cycle that dedups entities, backfills embeddings and facets, infers transitive relationships, detects contradictions, consolidates, prunes, and recomputes weights while the server is idle.\n- Consolidation **clusters related memories** by embedding similarity so syntheses stay coherent, and an LLM **novelty audit** demotes low-value ones.\n\n### Ask: one cited answer, not a list (optional)\n\n- Synthesizes a grounded, **footnote-cited** answer over your memories in a single model call, across every project or one scoped project.\n- **Decomposes** aggregation questions per class, gates out off-topic neighbors, and returns \"not in neighborhood\" rather than fabricating when the answer isn't there.\n- Off by default behind a feature flag and its own provider slot; prompt-injection-fenced before synthesis.\n\n### Tiers built in\n\n- **Procedural**: a verbatim per-user tier for rules and protocols, stored byte-for-byte and never embedded, enriched, or rewritten.\n- **Persona (`about_me`)** and **global** tiers are reserved, auto-provisioned, and always join the recall aperture.\n\n### A real server, not a localhost shim\n\n- **Auth**: OAuth 2.0 (Authorization Code + PKCE, dynamic client registration, resource indicators, discovery), JWT, WebAuthn passkeys, per-org OIDC SSO, and five RBAC roles across REST and MCP.\n- **Multi-tenancy**: organizations, hierarchical namespaces, and projects, plus scoped share tokens for access without an account.\n- **Storage**: SQLite (zero-config) or PostgreSQL, with pgvector, a pure-Go HNSW index, or Qdrant for vectors, and SQLite-to-Postgres migration tooling.\n- **Provider-agnostic**: OpenAI, Anthropic, Google Gemini, Ollama, OpenRouter, vLLM, SGLang, llama.cpp's llama-server, and any OpenAI-compatible endpoint, with per-call token accounting.\n- **Operability**: a React Web Console, real-time SSE, HMAC-signed webhooks, Prometheus metrics at `/metrics`, JSON / NDJSON import/export, and a persistent instance identity (UUID + ES256 keypair) surfaced in `nram --version`.\n\n### How clients connect\n\n- **MCP** is how Claude, ChatGPT, Cursor, or a custom agent connects. Streamable HTTP transport at `/mcp`, with OAuth discovery at the well-known paths.\n- **REST API** lets any code that can speak HTTP store and recall. See [docs/api.md](docs/api.md).\n- **Web Console** is the dashboard for organizations, projects, providers, the knowledge graph, and the dreaming cycle.\n\n## Get running\n\n**Fastest path** is a prebuilt binary (no Go or Node needed). Grab the right archive for your OS from the [nightly release](https://github.com/nram-ai/nram/releases/tag/nightly), extract it, and run:\n\n```bash\n./nram\n```\n\n**From source:**\n\n```bash\ngit clone <repo-url> nram && cd nram\nmake build      # builds the UI and compiles a single ./nram binary\n./nram\n```\n\nEither way, open `http://localhost:8674`, create the admin account, and **save the API key, it is shown only once.** A short guided setup then walks you through the required providers, the optional ones, and the high-level feature toggles, one step at a time (nram falls back to keyword-only recall until an embedding provider is configured). You can skip any step and revisit it later under **Settings → Providers**.\n\n- Per-OS download and checksum steps: **[docs/install.md](docs/install.md)**\n- Full setup walkthrough, providers, and connecting Claude / ChatGPT / Cursor: **[docs/quickstart.md](docs/quickstart.md)**\n\nConnect Claude Code in one line:\n\n```bash\nclaude mcp add --transport http nram http://localhost:8674/mcp\n```\n\nLocal CLI and IDE tools use the URL directly. Hosted web tools (ChatGPT, claude.ai, the Claude apps) reach your server from the vendor's cloud, so they need a public HTTPS URL via a reverse proxy or tunnel, see [docs/quickstart.md](docs/quickstart.md#7-connect-a-client).\n\n## Run as a service\n\nRun it at boot and restart on failure with the native OS service manager (Windows SCM, Linux systemd, macOS launchd):\n\n```bash\nsudo ./nram service install     # then: start | stop | restart | status | uninstall\n```\n\n`install` captures the current directory, `--config`, and your `DATABASE_URL` / `PORT` / `LOG_LEVEL` / `NRAM_CONFIG` so the service runs like your shell would. Add `--user` for a per-user service that needs no root. Full details: **[docs/operations.md](docs/operations.md#running-as-a-service)**.\n\n## Reference\n\nThe deep reference is split out to keep this page approachable:\n\n- **[docs/install.md](docs/install.md)**: prebuilt downloads for macOS, Linux, and Windows, and checksum verification.\n- **[docs/quickstart.md](docs/quickstart.md)**: build, run, the setup wizard, provider configuration, and connecting a client.\n- **[docs/api.md](docs/api.md)**: full REST API and MCP tool reference, including update/supersede and move semantics.\n- **[docs/models.md](docs/models.md)**: recommended models per slot, VRAM sizing for local models, the optional reranker, and Ollama `num_ctx` and keep-alive tuning.\n- **[docs/configuration.md](docs/configuration.md)**: bootstrap vs runtime config, environment variables, databases (SQLite, Postgres, Qdrant), migrations, and operator flags.\n- **[docs/operations.md](docs/operations.md)**: running as a managed OS service, troubleshooting, and the dreaming / backfill operations guide.\n- **[docs/openapi.yaml](docs/openapi.yaml)**: OpenAPI 3.1 specification, also served by the running server at `GET /openapi.yaml` and rendered at `GET /docs`. A conformance test keeps it in sync with the router.\n\n## Development\n\n```bash\nmake install-ui   # install UI dependencies\nmake dev          # React dev server with hot-reload on port 5173\nmake build        # build everything into ./nram\n./nram --config config.yaml\n```\n\nRepository layout:\n\n```\ncmd/server/        Server entrypoint\ninternal/\n  api/             HTTP handlers (REST + admin)\n  auth/            OAuth 2.0, JWT, WebAuthn, RBAC\n  config/          Bootstrap configuration loading\n  dreaming/        Offline consolidation cycle (fourteen phases) with rollback and retention sweeps\n  enrichment/      Background enrichment worker pool, ingestion decision, dedup, re-embed\n  events/          Event bus, SSE, webhooks\n  mcp/             MCP server and tool handlers\n  migration/       Database migration runner\n  model/           Data models\n  provider/        LLM / embedding provider adapters with token-usage middleware\n  server/          HTTP router setup\n  service/         Business logic (recall, store, fusion, settings, lifecycle, export jobs)\n  storage/         Database repositories (incl. HNSW, pgvector, Qdrant adapters)\n  ui/              Embedded Web Console assets\nmigrations/        SQLite and PostgreSQL migration SQL\nui/                React Web Console source (TypeScript, Tailwind)\ndocs/              Reference docs and the OpenAPI spec\n```\n\n## License\n\nMIT\n"}