{"id":48489378,"url":"https://github.com/cdnsteve/remembrallmcp","last_synced_at":"2026-04-08T12:01:11.163Z","repository":{"id":348698537,"uuid":"1199414339","full_name":"cdnsteve/remembrallmcp","owner":"cdnsteve","description":"Persistent memory and code dependency graph for AI agents. MCP server with hybrid search, blast radius analysis, and 8-language support. Rust + Postgres + pgvector.","archived":false,"fork":false,"pushed_at":"2026-04-07T10:06:27.000Z","size":383,"stargazers_count":3,"open_issues_count":0,"forks_count":1,"subscribers_count":0,"default_branch":"develop","last_synced_at":"2026-04-07T11:33:40.090Z","etag":null,"topics":["ai-agents","blast-radius","claude-code","code-analysis","cursor","dependency-graph","knowledge-graph","mcp","mcp-server","memory","pgvector","postgres","rust","tree-sitter"],"latest_commit_sha":null,"homepage":null,"language":"Rust","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cdnsteve.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-04-02T10:24:20.000Z","updated_at":"2026-04-07T10:06:26.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/cdnsteve/remembrallmcp","commit_stats":null,"previous_names":["cdnsteve/remembrallmcp"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/cdnsteve/remembrallmcp","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cdnsteve%2Fremembrallmcp","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cdnsteve%2Fremembrallmcp/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cdnsteve%2Fremembrallmcp/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cdnsteve%2Fremembrallmcp/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cdnsteve","download_url":"https://codeload.github.com/cdnsteve/remembrallmcp/tar.gz/refs/heads/develop","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cdnsteve%2Fremembrallmcp/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31554109,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-08T10:21:54.569Z","status":"ssl_error","status_checked_at":"2026-04-08T10:21:38.171Z","response_time":54,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai-agents","blast-radius","claude-code","code-analysis","cursor","dependency-graph","knowledge-graph","mcp","mcp-server","memory","pgvector","postgres","rust","tree-sitter"],"created_at":"2026-04-07T11:03:42.824Z","updated_at":"2026-04-08T12:01:10.898Z","avatar_url":"https://github.com/cdnsteve.png","language":"Rust","funding_links":[],"categories":[],"sub_categories":[],"readme":"# RemembrallMCP\n\nPersistent knowledge memory and code intelligence for AI agents. Rust core, Postgres + pgvector, MCP protocol.\n\n**The problem:** AI coding agents are stateless. Every session starts from zero - no memory of past decisions, no understanding of how the codebase fits together, no way to know what breaks when you change something.\n\n**The solution:** RemembrallMCP gives agents two things most memory tools don't:\n\n**1. Persistent Memory** - Decisions, patterns, and organizational knowledge that survive between sessions. Hybrid semantic + full-text search finds relevant context instantly.\n\n**2. Code Dependency Graph** - A live map of your codebase built with tree-sitter. Functions, classes, imports, and call relationships across 8 languages. Ask \"what breaks if I change this?\" and get an answer in milliseconds - before the agent touches anything.\n\n```\nremembrall_recall(\"authentication middleware patterns\")\n-\u003e 3 relevant memories from past sessions\n\nremembrall_index(\"/path/to/project\", \"myapp\")\n-\u003e Builds dependency graph: 847 symbols, 1,203 relationships\n\nremembrall_impact(\"AuthMiddleware\", direction=\"upstream\")\n-\u003e 12 files depend on AuthMiddleware (with confidence scores)\n\nremembrall_store(\"Switched from JWT to session tokens because...\")\n-\u003e Decision stored for future sessions\n```\n\n### Why the code graph matters\n\nWithout RemembrallMCP, agents explore your codebase from scratch every session. Claude Code spawns `Explore` agents, Codex reads dozens of files, Cursor greps through directories - all burning tokens and time just to understand what calls what. A single \"find all callers of this function\" task can cost thousands of tokens across multiple tool calls.\n\nWith RemembrallMCP, that same query is a single `remembrall_impact` call that returns in \u003c1ms with zero exploration tokens. The dependency graph is already built and waiting.\n\n| | Without RemembrallMCP | With RemembrallMCP |\n|---|---|---|\n| \"What calls UserService?\" | Agent greps, reads 8-15 files, spawns sub-agents | `remembrall_impact` - 1 call, \u003c1ms |\n| \"Where is auth middleware defined?\" | Agent globs, reads matches, filters | `remembrall_lookup_symbol` - 1 call, \u003c1ms |\n| \"What did we decide about caching?\" | Agent has no context, asks you | `remembrall_recall` - 1 call, ~25ms |\n| Typical exploration cost | 5,000-20,000 tokens per question | ~200 tokens (tool call + response) |\n\nThe savings scale with codebase size. On a small project, an agent can grep and read its way through. On a 500-file monorepo, that exploration becomes the bottleneck - agents hit context limits, spawn multiple sub-agents, or miss cross-module dependencies entirely. RemembrallMCP's graph queries stay under 10ms regardless of project size because the structure is pre-indexed in Postgres, not discovered at runtime.\n\nThis is the difference between an agent that explores your codebase every time and one that already understands it.\n\n### Benchmarks\n\nTested on [pallets/click](https://github.com/pallets/click) v8.1.7 (594 symbols, 1,589 relationships). Five identical coding tasks run with and without RemembrallMCP. [Full report](benchmarks/reports/benchmark-2026-04-02.md).\n\n| Metric | Without RemembrallMCP | With RemembrallMCP | Delta |\n|--------|----------------------|---------------------|-------|\n| Total tool calls (5 tasks) | 112 | 5 | **-95.5%** |\n| Estimated tokens | ~56,000 | ~1,000 | **-98.2%** |\n| Avg tool calls per question | 22.4 | 1.0 | **-95.5%** |\n\nThe savings compound on larger codebases. Click is ~90 files - on a 500+ file monorepo, agents without RemembrallMCP need proportionally more exploration calls, while graph queries stay under 10ms regardless of size.\n\nRun the benchmarks yourself: see [`benchmarks/`](benchmarks/) for the harness and task definitions.\n\n## Requirements\n\n- Docker (for the easiest setup) or PostgreSQL 16 with [pgvector](https://github.com/pgvector/pgvector)\n- For GitHub ingestion: [GitHub CLI](https://cli.github.com/) (`gh`) installed and authenticated\n\n## Quick Start\n\n### Option 1: Docker Compose (easiest)\n\n```bash\ngit clone https://github.com/cdnsteve/remembrallmcp.git\ncd remembrallmcp\n\n# Start Postgres + initialize schema + download embedding model\ndocker compose up -d\n\n# Verify it's running\ndocker compose exec remembrall remembrall status\n```\n\nThat's it. Postgres with pgvector, the schema, and the embedding model are all set up automatically. The database and model cache persist across restarts.\n\nTo run the MCP server:\n\n```bash\ndocker compose run --rm remembrall\n```\n\n### Option 2: Download prebuilt binary\n\n```bash\n# macOS (Apple Silicon)\ncurl -fsSL https://github.com/cdnsteve/remembrallmcp/releases/latest/download/remembrall-aarch64-apple-darwin.tar.gz | tar xz\nsudo mv remembrall /usr/local/bin/\n\n# Linux (x86_64)\ncurl -fsSL https://github.com/cdnsteve/remembrallmcp/releases/latest/download/remembrall-x86_64-unknown-linux-gnu.tar.gz | tar xz\nsudo mv remembrall /usr/local/bin/\n\n# Initialize (sets up Postgres via Docker, creates schema, downloads model)\nremembrall init\n```\n\n### Option 3: Build from source (requires Rust 1.94+)\n\n```bash\ncargo build -p remembrall-server --release\n# Binary is at target/release/remembrall\n\nremembrall init\n```\n\n### Connect to your MCP client\n\n#### Codex\n\nCodex uses the same MCP server definition format. Register the server as `remembrall` and point it at either the installed binary or your local release build.\n\n**If `remembrall` is installed in `PATH`:**\n\n```json\n{\n  \"mcpServers\": {\n    \"remembrall\": {\n      \"command\": \"remembrall\"\n    }\n  }\n}\n```\n\n**If running from a local source checkout:**\n\n```json\n{\n  \"mcpServers\": {\n    \"remembrall\": {\n      \"command\": \"/path/to/remembrallmcp/target/release/remembrall\",\n      \"env\": {\n        \"DATABASE_URL\": \"postgres://postgres:postgres@localhost:5450/remembrall\"\n      }\n    }\n  }\n}\n```\n\n**If using Docker Compose from Codex:**\n\n```json\n{\n  \"mcpServers\": {\n    \"remembrall\": {\n      \"command\": \"docker\",\n      \"args\": [\"compose\", \"-f\", \"/path/to/remembrallmcp/docker-compose.yml\", \"run\", \"--rm\", \"-T\", \"remembrall\"]\n    }\n  }\n}\n```\n\nRestart Codex after adding the server so it reconnects and loads the tools.\n\n#### Claude Code, Cursor, and other MCP clients\n\nAdd to your project's `.mcp.json` (works with Claude Code, Cursor, and any MCP-compatible client).\n\n**If using a prebuilt binary or built from source:**\n\n```json\n{\n  \"mcpServers\": {\n    \"remembrall\": {\n      \"command\": \"remembrall\"\n    }\n  }\n}\n```\n\n**If using Docker Compose:**\n\n```json\n{\n  \"mcpServers\": {\n    \"remembrall\": {\n      \"command\": \"docker\",\n      \"args\": [\"compose\", \"-f\", \"/path/to/remembrallmcp/docker-compose.yml\", \"run\", \"--rm\", \"-T\", \"remembrall\"]\n    }\n  }\n}\n```\n\n**If running from source (not installed to PATH):**\n\n```json\n{\n  \"mcpServers\": {\n    \"remembrall\": {\n      \"command\": \"/path/to/remembrallmcp/target/release/remembrall\",\n      \"env\": {\n        \"DATABASE_URL\": \"postgres://postgres:postgres@localhost:5450/remembrall\"\n      }\n    }\n  }\n}\n```\n\nRestart your MCP client. All 9 tools will be available automatically.\n\n### Try it\n\n```\n\u003e \"Store a memory: We chose Postgres over MongoDB because our query patterns\n   are relational. Type: decision, tags: database, architecture\"\n\n\u003e \"Recall what we know about database decisions\"\n\n\u003e \"Index this project and show me the impact of changing UserService\"\n```\n\n## MCP Tools\n\n### Memory\n\n| Tool | Description |\n|------|-------------|\n| `remembrall_recall` | Search memories - hybrid semantic + full-text with RRF fusion |\n| `remembrall_store` | Store decisions, patterns, knowledge with vector embeddings |\n| `remembrall_update` | Update an existing memory (content, summary, tags, or importance) |\n| `remembrall_delete` | Remove a memory by UUID |\n| `remembrall_ingest_github` | Bulk-import merged PR descriptions from a GitHub repo |\n| `remembrall_ingest_docs` | Scan a directory for markdown files and ingest them as memories |\n\n### Code Intelligence\n\n| Tool | Description |\n|------|-------------|\n| `remembrall_index` | Parse a project directory into a dependency graph (8 languages) |\n| `remembrall_impact` | Blast radius analysis - \"what breaks if I change this?\" |\n| `remembrall_lookup_symbol` | Find where a function or class is defined across the project |\n\n## Supported Languages\n\n| Language | Extensions | Quality Score |\n|----------|-----------|---------------|\n| Python | .py | A (94.1) |\n| Java | .java | A (92.6) |\n| JavaScript | .js, .jsx | A (92.0) |\n| Rust | .rs | A (91.0) |\n| Go | .go | A (90.7) |\n| Ruby | .rb | B (87.9) |\n| TypeScript | .ts, .tsx | B (84.3) |\n| Kotlin | .kt, .kts | B (82.9) |\n\nScores measured against real open-source projects (Click, Gson, Axios, bat, Cobra, Sidekiq, Hono, Exposed) using automated ground truth tests.\n\n## Cold Start\n\nA new RemembrallMCP instance has no knowledge. Use the ingestion tools to bootstrap from existing project history.\n\n**From GitHub PR history:**\n\n```\n\u003e remembrall_ingest_github repo=\"myorg/myrepo\" limit=100\n```\n\nFetches merged PRs via `gh`, digests titles and bodies into memories, and tags them by project. PRs with less than 50 characters of body are skipped. Deduplication by content fingerprint prevents re-ingestion on repeat runs.\n\n**From markdown docs:**\n\n```\n\u003e remembrall_ingest_docs path=\"/path/to/project\"\n```\n\nWalks the directory tree, finds all `.md` files, splits them by H2 section headers, and stores each section as a searchable memory. Skips `node_modules`, `.git`, `target`, and similar directories. Good for README, ARCHITECTURE, ADRs, and any written docs.\n\nRun both once per project. After ingestion, `remembrall_recall` has immediate context.\n\n## Architecture\n\n```\nSource Code                   Organizational Knowledge\n    |                                 |\n    v                                 v\nTree-sitter Parsers           Ingestion Pipeline\n(8 languages)                 (GitHub PRs, Markdown docs)\n    |                                 |\n    v                                 v\n+--------------------------------------------------+\n|              Postgres + pgvector                  |\n|                                                   |\n|  memories (text + embeddings + metadata)          |\n|  symbols (functions, classes, methods)            |\n|  relationships (calls, imports, inherits)         |\n+--------------------------------------------------+\n                          |\n                    MCP Server (stdio)\n                          |\n              Any MCP-compatible AI agent\n```\n\n- **Parsing:** tree-sitter (Rust bindings, no Python in the pipeline)\n- **Embeddings:** fastembed (all-MiniLM-L6-v2, 384-dim, in-process ONNX Runtime)\n- **Search:** Hybrid RRF (semantic cosine similarity + full-text tsvector)\n- **Graph queries:** Recursive CTEs with cycle detection and confidence decay\n- **Transport:** stdio via rmcp\n\n## CLI Commands\n\n| Command | Description |\n|---------|-------------|\n| `remembrall init` | Set up database, schema, and embedding model |\n| `remembrall serve` | Run the MCP server (default when no subcommand given) |\n| `remembrall start` | Start the Docker database container |\n| `remembrall stop` | Stop the Docker database container |\n| `remembrall status` | Show memory count, symbol count, connection status |\n| `remembrall doctor` | Check for common problems (Docker, pgvector, schema, model) |\n| `remembrall reset --force` | Drop and recreate the schema (deletes all data) |\n| `remembrall version` | Print version and config path |\n\n## Configuration\n\nConfig file: `~/.remembrall/config.toml` (created by `remembrall init`)\n\nEnvironment variables override config file values:\n\n| Variable | Description |\n|----------|-------------|\n| `REMEMBRALL_DATABASE_URL` or `DATABASE_URL` | PostgreSQL connection string |\n| `REMEMBRALL_SCHEMA` | Database schema name (default: `remembrall`) |\n\n## Project Structure\n\n```\ncrates/\n  remembrall-core/          # Library - parsers, memory store, graph store, embedder\n  remembrall-server/        # MCP server + CLI binary\n  remembrall-test-harness/  # Parser quality testing against ground truth\n  remembrall-recall-test/   # Search quality testing\ndocs/                       # Architecture and test plan docs\ntest-fixtures/              # Ground truth TOML files for 8 languages\ntests/                      # Recall test fixtures\n```\n\n## Performance\n\n| Operation | Time |\n|-----------|------|\n| Memory store | 7ms |\n| Semantic search (HNSW) | \u003c1ms |\n| Full-text search | \u003c1ms |\n| Hybrid recall (end-to-end) | ~25ms |\n| Impact analysis | 4-9ms |\n| Symbol lookup | \u003c1ms |\n| Index 89 Python files | 2.3s |\n\n## License\n\nMIT\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcdnsteve%2Fremembrallmcp","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcdnsteve%2Fremembrallmcp","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcdnsteve%2Fremembrallmcp/lists"}