RemembrallMCP
Memory serverOfficial RoboticForce, Inc. project
Created by RoboticForce, Inc.
Published in roboticforce/remembrallmcp. Publisher page
34 GitHub stars
What it is
Whole-codebase knowledge for AI coding agents. A field-aware code graph (functions, classes, methods, fields, and references across 8 languages) plus persistent memory. Rust core, Postgres + pgvector backend, MCP protocol.
AutoGineer overview, from the brain’s own files
RemembrallMCP provides AI coding agents with a persistent, structured understanding of a codebase that persists across sessions. By combining a field-aware dependency graph (built with tree-sitter) with persistent memory (using Postgres and pgvector), it allows agents to perform complex impact analysis and recall past decisions without re-exploring the codebase. It supports nine programming languages and integrates via the Model Context Protocol (MCP), significantly reducing token usage and latency for common coding tasks.
How it works
Memory model: Hybrid
AutoGineer overview, from the brain’s own files
The system uses a hybrid memory model. It parses source code into a dependency graph of functions, classes, methods, and fields, storing these in a PostgreSQL database with pgvector for semantic search. It provides an MCP server that exposes tools for agents to query this graph, perform impact analysis, and store or recall project-specific knowledge, decisions, and patterns.
| Folder | Role | Files |
|---|---|---|
| .github | agent-config | 2 |
| docs | docs | 5 |
| scripts | scripts | 6 |
| tests | tests | 2 |
| benchmarks | folder | 5 |
| crates | folder | 58 |
| test-fixtures | folder | 8 |
The agent writes
- .mcp.json evidence: README.md
Requirements
Apps: Docker
Runtimes: Node.js, Python >=3.10, Rust
Databases: MongoDB, PostgreSQL
Works with: Claude Code, Claude apps, OpenAI Codex, GitHub Copilot, Cursor, Gemini CLI, Google Antigravity, Kiro, OpenCode, Amp, Roo Code, Cline, JetBrains Junie, Devin (ex-Windsurf)
Set it up
This brain runs code automatically: 1 script. Review install.sh before opening the folder in Claude Code. No step below turns a hook on for you.
install.sh:sh install.sh
- Not scanned by AutoGineerThe author’s MCP configuration (.mcp.json) also starts it in a way AutoGineer does not offer. Read that file: AutoGineer did not scan that path; what it runs is listed under “This brain runs”. https://github.com/roboticforce/remembrallmcp/blob/77e6b2b99703ffaa18a900e12e829104561a144f/.mcp.json
- Not scanned by AutoGineerThe author’s MCP configuration (README.md) also starts it in a way AutoGineer does not offer. Read that file: AutoGineer did not scan that path; what it runs is listed under “This brain runs”. https://github.com/roboticforce/remembrallmcp/blob/77e6b2b99703ffaa18a900e12e829104561a144f/README.md
- Not scanned by AutoGineerThe author’s README also describes installing it with Docker Compose. Read its install section: AutoGineer did not scan that path. https://github.com/roboticforce/remembrallmcp/blob/77e6b2b99703ffaa18a900e12e829104561a144f/README.md#quick-start
- Not scanned by AutoGineerThe author’s README also describes installing it from a clone of its repository. Read its install section: AutoGineer did not scan that path. https://github.com/roboticforce/remembrallmcp/blob/77e6b2b99703ffaa18a900e12e829104561a144f/README.md#quick-start
- Not scanned by AutoGineerAutoGineer could not scan everything it runs. https://www.npmjs.com/package/remembrallmcp
Created by RoboticForce, Inc.. Published in roboticforce/remembrallmcp. Licence: MIT License.
Usage
AutoGineer overview, from the brain’s own files
- Connect to an MCP-compatible agent like Claude Code or Cursor
- Index a project directory to build the code graph
- Query the impact of code changes before implementation
- Store and recall architectural decisions or middleware patterns
- Ingest existing documentation or GitHub PR history into agent memory
- “remembrall_impact("AuthMiddleware", direction="upstream")”
- Returns a list of files that depend on the AuthMiddleware, allowing the agent to assess the impact of changes.
- “remembrall_recall("authentication middleware patterns")”
- Retrieves relevant memories from past sessions regarding authentication patterns.
Documentation by RoboticForce, Inc.
RemembrallMCP
Image: License: MIT Image: Crates.io Image: CI Image: Docker
Whole-codebase knowledge for AI coding agents. A field-aware code graph plus persistent memory, built on Rust, Postgres + pgvector, and exposed over MCP.
The problem: AI coding agents see a few pages out of the book each session. They grep, read, and re-derive how the codebase fits together from scratch - no map of what calls what, no way to know what breaks when something changes, and no memory of decisions made in past sessions.
The solution: RemembrallMCP gives the agent the whole codebase - a field-aware dependency graph (functions, classes, methods, fields, and the references between them) across 9 languages, plus persistent memory that survives between sessions.
1. Field-Aware Code Graph - A live map of your codebase built with tree-sitter. Functions, classes, methods, and data fields, plus call, import, defines, inherits, and field-reference relationships across 9 languages. Ask "what breaks if I change this?" - down to a single struct field - and get an answer in milliseconds, before the agent touches anything.
2. Persistent Memory - Decisions, patterns, and organizational knowledge that survive between sessions. Hybrid semantic + full-text search finds relevant context instantly.
remembrall_recall("authentication middleware patterns")
-> 3 relevant memories from past sessions
remembrall_index("/path/to/project", "myapp")
-> Builds dependency graph: 847 symbols, 1,203 relationships
remembrall_impact("AuthMiddleware", direction="upstream")
-> 12 files depend on AuthMiddleware (with confidence scores)
remembrall_impact("amount", direction="upstream")
-> methods that read self.amount, across the whole codebase
remembrall_store("Switched from JWT to session tokens because...")
-> Decision stored for future sessionsWhy the code graph matters
Without 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.
With RemembrallMCP, that same query is a single remembrall_impact call that returns in <1ms with zero exploration tokens. The dependency graph is already built and waiting.
| Without RemembrallMCP | With RemembrallMCP | |
|---|---|---|
| "What calls UserService?" | Agent greps, reads 8-15 files, spawns sub-agents | remembrall_impact - 1 call, <1ms |
| "Where is auth middleware defined?" | Agent globs, reads matches, filters | remembrall_lookup_symbol - 1 call, <1ms |
"Who references the amount field?" | Agent greps for self.amount, misses ORM and cross-module usages | remembrall_impact - 1 call, <1ms |
| "What did we decide about caching?" | Agent has no context, asks you | remembrall_recall - 1 call, ~25ms |
| Typical exploration cost | 5,000-20,000 tokens per question | ~200 tokens (tool call + response) |
The 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.
This is the difference between an agent that reads a few pages out of the book every time and one that already holds the whole codebase.
Benchmarks
RemembrallMCP is currently benchmarked on two surfaces:
Agent productivity on code tasks - Tested on pallets/click v8.1.7 (594 symbols, 1,589 relationships). Five identical coding tasks run with and without RemembrallMCP. Full report.
Memory recall quality - Local recall harness run against 31 ground-truth queries covering search quality, filtering, edge cases, ranking, and latency.
| Metric | Without RemembrallMCP | With RemembrallMCP | Delta |
|---|---|---|---|
| Total tool calls (5 tasks) | 112 | 5 | -95.5% |
| Estimated tokens | ~56,000 | ~1,000 | -98.2% |
| Avg tool calls per question | 22.4 | 1.0 | -95.5% |
The 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.
| Memory Recall Metric | Result |
|---|---|
| Queries passed | 31 / 31 |
| Recall@5 | 0.917 |
| Precision@5 | 0.619 |
| MRR | 0.908 |
| p95 latency | 14ms |
Run the benchmarks yourself: see benchmarks/ for the harness and task definitions.
For the broader benchmark strategy across memory retrieval, long-horizon memory, code graph correctness, and agent productivity, see docs/benchmark-roadmap.md.
Requirements
Docker (for the easiest setup) or PostgreSQL 16 with pgvector
For GitHub ingestion: GitHub CLI (
gh) installed and authenticated
Quick Start
Option 1: Docker Compose (easiest)
git clone https://github.com/roboticforce/remembrallmcp.git
cd remembrallmcp
# Start Postgres, initialize the schema, download the embedding model,
# and run the MCP server. The remembrall container stays up after setup.
docker compose up -d
# Verify it's running (database connected, schema ready)
docker compose exec remembrall remembrall statusThat's it. Postgres with pgvector, the schema, and the embedding model are all set up automatically. The database and model cache persist across restarts.
The remembrall container runs remembrall init (idempotent setup) followed by remembrall serve on startup, so it stays running and docker compose exec works for status, doctor, and other commands.
To connect an MCP client (Claude Code, Cursor, Codex) to the server, see Connect to your MCP client below.
Option 2: Download prebuilt binary
# macOS (Apple Silicon)
curl -fsSL https://github.com/roboticforce/remembrallmcp/releases/latest/download/remembrall-aarch64-apple-darwin.tar.gz | tar xz
sudo mv remembrall /usr/local/bin/
# Linux (x86_64)
curl -fsSL https://github.com/roboticforce/remembrallmcp/releases/latest/download/remembrall-x86_64-unknown-linux-gnu.tar.gz | tar xz
sudo mv remembrall /usr/local/bin/
# Initialize (sets up Postgres via Docker, creates schema, downloads model)
remembrall initOption 3: Build from source (requires Rust 1.94+)
cargo build -p remembrall-server --release
# Binary is at target/release/remembrall
remembrall initConnect to your MCP client
Codex
Codex 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.
If remembrall is installed in PATH:
{
"mcpServers": {
"remembrall": {
"command": "remembrall"
}
}
}If running from a local source checkout:
{
"mcpServers": {
"remembrall": {
"command": "/path/to/remembrallmcp/target/release/remembrall",
"env": {
"DATABASE_URL": "postgres://postgres:postgres@localhost:5450/remembrall"
}
}
}
}If using Docker Compose from Codex:
{
"mcpServers": {
"remembrall": {
"command": "docker",
"args": ["compose", "-f", "/path/to/remembrallmcp/docker-compose.yml", "run", "--rm", "-T", "remembrall"]
}
}
}Restart Codex after adding the server so it reconnects and loads the tools.
Claude Code, Cursor, and other MCP clients
Add to your project's .mcp.json (works with Claude Code, Cursor, and any MCP-compatible client).
If using a prebuilt binary or built from source:
{
"mcpServers": {
"remembrall": {
"command": "remembrall"
}
}
}If using Docker Compose:
{
"mcpServers": {
"remembrall": {
"command": "docker",
"args": ["compose", "-f", "/path/to/remembrallmcp/docker-compose.yml", "run", "--rm", "-T", "remembrall"]
}
}
}Each invocation starts a fresh container, runs remembrall init (idempotent; its output goes to stderr so it never corrupts the MCP stream), then remembrall serve over stdio. The -T flag is required - it disables TTY allocation so JSON-RPC passes through cleanly. The db service starts automatically via depends_on.
If running from source (not installed to PATH):
{
"mcpServers": {
"remembrall": {
"command": "/path/to/remembrallmcp/target/release/remembrall",
"env": {
"DATABASE_URL": "postgres://postgres:postgres@localhost:5450/remembrall"
}
}
}
}Restart your MCP client. All 9 tools will be available automatically.
Try it
> "Store a memory: We chose Postgres over MongoDB because our query patterns
are relational. Type: decision, tags: database, architecture"
> "Recall what we know about database decisions"
> "Index this project and show me the impact of changing UserService"MCP Tools
Memory
| Tool | Description |
|---|---|
remembrall_recall | Search memories - hybrid semantic + full-text with RRF fusion |
remembrall_store | Store decisions, patterns, knowledge with vector embeddings |
remembrall_update | Update an existing memory (content, summary, tags, or importance) |
remembrall_delete | Remove a memory by UUID |
remembrall_ingest_github | Bulk-import merged PR descriptions from a GitHub repo |
remembrall_ingest_docs | Scan a directory for markdown files and ingest them as memories |
Code Intelligence
| Tool | Description |
|---|---|
remembrall_index | Parse a project directory into a field-aware code graph (functions, classes, methods, and fields across 9 languages) |
remembrall_impact | Blast radius analysis - "what breaks if I change this?" Works on functions, classes, methods, and fields |
remembrall_lookup_symbol | Find where a function, class, method, or field is defined across the project |
Supported Languages
| Language | Extensions | Quality Score |
|---|---|---|
| Python | .py | A (94.1) |
| Java | .java | A (92.6) |
| JavaScript | .js, .jsx | A (92.0) |
| Rust | .rs | A (91.0) |
| Go | .go | A (90.7) |
| Ruby | .rb | B (87.9) |
| TypeScript | .ts, .tsx | B (84.3) |
| Kotlin | .kt, .kts | B (82.9) |
| C# | .cs | A (96.8) |
Scores measured against real open-source projects (Click, Gson, Axios, bat, Cobra, Sidekiq, Hono, Exposed, MediatR) using automated ground truth tests. The C# score is measured against MediatR 12.4.1 (69 symbols, 48 relationships, 9 impact queries, 10 edge cases): symbols, imports, and edge cases at 100%, with the gap coming from generic-interface inheritance (: IPipelineBehavior<TRequest, TResponse> resolves to a synthetic UUID instead of the class symbol) and a field-dispatch call misresolution. C# field-level references are validated separately by the field-capture fixture at 100%.
Cold Start
A new RemembrallMCP instance has no knowledge. Use the ingestion tools to bootstrap from existing project history.
From GitHub PR history:
> remembrall_ingest_github repo="myorg/myrepo" limit=100Fetches 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.
From markdown docs:
> remembrall_ingest_docs path="/path/to/project"Walks 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.
Run both once per project. After ingestion, remembrall_recall has immediate context.
Architecture
Source Code Organizational Knowledge
| |
v v
Tree-sitter Parsers Ingestion Pipeline
(9 languages) (GitHub PRs, Markdown docs)
| |
v v
+--------------------------------------------------+
| Postgres + pgvector |
| |
| memories (text + embeddings + metadata) |
| symbols (functions, classes, methods, fields) |
| relationships (calls, imports, defines, |
| inherits, references) |
+--------------------------------------------------+
|
MCP Server (stdio)
|
Any MCP-compatible AI agentParsing: tree-sitter (Rust bindings, no Python in the pipeline)
Embeddings: fastembed (all-MiniLM-L6-v2, 384-dim, in-process ONNX Runtime)
Search: Hybrid RRF (semantic cosine similarity + full-text tsvector)
Graph queries: Recursive CTEs with cycle detection and confidence decay
Transport: stdio via rmcp
CLI Commands
| Command | Description |
|---|---|
remembrall init | Set up database, schema, and embedding model |
remembrall serve | Run the MCP server (default when no subcommand given) |
remembrall start | Start the Docker database container |
remembrall stop | Stop the Docker database container |
remembrall status | Show memory count, symbol count, connection status |
remembrall doctor | Check for common problems (Docker, pgvector, schema, model) |
remembrall reset --force | Drop and recreate the schema (deletes all data) |
remembrall version | Print version and config path |
Configuration
Config file: ~/.remembrall/config.toml (created by remembrall init)
Environment variables override config file values:
| Variable | Description |
|---|---|
REMEMBRALL_DATABASE_URL or DATABASE_URL | PostgreSQL connection string |
REMEMBRALL_SCHEMA | Database schema name (default: remembrall) |
Project Structure
crates/
remembrall-core/ # Library - parsers, memory store, graph store, embedder
remembrall-server/ # MCP server + CLI binary
remembrall-test-harness/ # Parser quality testing against ground truth
remembrall-recall-test/ # Search quality testing
docs/ # Architecture and test plan docs
test-fixtures/ # Ground truth TOML files for 9 languages
tests/ # Recall test fixturesPerformance
| Operation | Time |
|---|---|
| Memory store | 7ms |
| Semantic search (HNSW) | <1ms |
| Full-text search | <1ms |
| Hybrid recall (end-to-end) | ~25ms |
| Impact analysis | 4-9ms |
| Symbol lookup | <1ms |
| Index 89 Python files | 2.3s |
License
MIT
docs/parser-architecture.md
Parser Architecture
Overview
RemembrallMCP's parser system converts source code from any supported language into a universal code graph. The graph has 5 symbol types and 5 relationship types - regardless of whether the source is Python, Rust, Go, or anything else.
The Pipeline
Source File (.py, .rs, .go, .rb, .java, .kt, .ts)
|
v
Tree-sitter Grammar (language-specific)
|
v
Abstract Syntax Tree (language-specific node types)
|
v
Language Parser (our code - one per language)
|
v
FileParseResult (universal: symbols + relationships + raw_imports)
|
v
Walker / Two-Phase Resolver (cross-file resolution)
|
v
GraphStore (Postgres: symbols + relationships tables)Why One Parser Per Language?
Tree-sitter is a parser generator - it produces a concrete syntax tree with node types specific to each language's grammar. The same concept has different AST representations:
A function definition
| Language | AST Node | Name Child |
|---|---|---|
| Python | function_definition | name: identifier |
| Rust | function_item | name: identifier |
| Go | function_declaration | name: identifier |
| Ruby | method | name: identifier |
| Java | method_declaration | name: identifier |
| Kotlin | function_declaration | simple_identifier |
| TypeScript | function_declaration | name: identifier |
An import statement
| Language | Syntax | AST Node |
|---|---|---|
| Python | from x.y import Z | import_from_statement |
| Rust | use crate::x::y::Z; | use_declaration |
| Go | import "x/y" | import_declaration |
| Ruby | require_relative '../y' | call (it's a method call) |
| Java | import com.x.y.Z; | import_declaration |
| Kotlin | import com.x.y.Z | import_header |
| TypeScript | import { Z } from './y' | import_statement |
Inheritance
| Language | Syntax | AST Pattern |
|---|---|---|
| Python | class Foo(Bar): | class_definition -> argument_list |
| Rust | impl Trait for Struct | impl_item -> trait child |
| Go | type Foo struct { Bar } | Embedded field in struct |
| Ruby | class Foo < Bar | superclass child |
| Java | class Foo extends Bar implements Baz | superclass + interfaces |
| Kotlin | class Foo : Bar(), Baz | delegation_specifier list |
| TypeScript | class Foo extends Bar | class_heritage |
Each language has unique patterns that don't map to a generic rule:
Python:
self.x.method()dotted attribute chains require special resolutionRust:
implblocks associate methods with structs without nestingGo: Interface satisfaction is implicit - no
implementskeywordRuby:
include ModuleNameis a method call that means inheritanceKotlin: Extension functions (
fun String.isEmail()) are top-level but act like methods
What Each Parser Produces
Every parser returns the same FileParseResult:
pub struct FileParseResult {
pub symbols: Vec<Symbol>, // Functions, classes, methods, fields, files
pub relationships: Vec<Relationship>, // Calls, imports, defines, inherits, references
pub raw_imports: Vec<RawImport>, // Unresolved import metadata for phase 2
}The universal types:
Symbols: File | Function | Class | Method | Field
Edges: Calls | Imports | Defines | Inherits | ReferencesThis is deliberately minimal. We don't model constants, variables, type aliases, or other fine-grained constructs. 5+5 covers the relationships that matter for impact analysis.
Two-Phase Resolution (walker.rs)
Cross-file relationships can't be resolved within a single file parse. The walker handles this:
Phase 1: Parse all files independently
Each file produces symbols with UUIDs and raw import metadata
Import targets get placeholder UUIDs (deterministic v5 UUIDs from the import string)
Call targets that don't match local symbols also get placeholder UUIDs
Phase 2: Resolve across files
Build a map of all File symbols:
path_stem -> UUIDBuild a map of all named symbols:
name -> UUID(includesFieldsymbols)Rewrite placeholder import UUIDs to real file symbol UUIDs
Rewrite placeholder call UUIDs to real function/method symbol UUIDs
Rewrite placeholder
ReferencesUUIDs to real field symbol UUIDs when the field name is unambiguous (single candidate); drop ambiguousReferencesedges (no fan-out)Unresolvable references (stdlib, third-party) keep their placeholders and are skipped at DB insert
This two-phase approach is what makes from ..storage.work_queue import WorkQueue resolve to the actual file, and what makes self.queue.get_next_work() match the real method.
Adding a New Language
To add language X:
Add
tree-sitter-xcrate toCargo.tomlCreate
parser/x.rsimplementingparse_x_file()returningFileParseResultExport from
parser/mod.rsAdd extension dispatch in
walker.rs
The parser needs to handle:
Symbol extraction (functions, classes/structs, methods, fields)
Call detection (function calls, method calls)
Field capture (class/struct data fields as
Fieldsymbols with aDefinesedge from the enclosing type)Self/receiver field reads (
self.x,this.x,&self.x, Gos.X) emitting aReferencesedge from the enclosing method to the field, resolved in-parser to the enclosing class's fieldImport detection (with raw import metadata for phase 2)
Inheritance detection (extends, implements, mixins, embedding)
Method-to-class association (Defines relationships)
Typical size: 200-400 lines per language. Most of the boilerplate is the same - the unique logic is in AST node type mapping and language-specific patterns like dotted calls or implicit interfaces.
Shared Code vs Per-Language Code
Shared (in walker.rs):
Directory walking and file filtering
Two-phase cross-file resolution
Import path resolution (relative + absolute)
Path variant matching (.py, .ts, /index.ts, etc.)
UUID generation and placeholder management
Per-language (in parser/x.rs):
AST node type names
Symbol extraction logic
Call expression parsing
Import statement parsing
Inheritance/trait detection
Field capture and self/receiver field-read resolution (language-specific receiver syntax:
self,this,&self, Go receiver var)Language-specific quirks (dotted calls, implicit interfaces, etc.)
Why Tree-sitter (and Not LSP)
Tree-sitter operates at the syntax level - it doesn't know types. When we see self.queue.get_next_work(), we don't know queue is type WorkQueue. We match by method name heuristically, which produces false positives.
The alternative is LSP servers (rust-analyzer, pyright, gopls) which have full type resolution. But LSP requires:
A running language server per language
Project compilation/build setup
Much slower analysis (seconds, not milliseconds)
Language-specific configuration
For a memory layer that needs to index any repo instantly without setup, tree-sitter is the right trade. Syntax-level analysis covers ~80% of impact analysis questions correctly.
When to add LSP: If fuzzy name matching produces too many false positives in practice and agents are making bad decisions based on noisy impact results.
Why 5 Symbol Types and 5 Relationship Types
Current model: File | Function | Class | Method | Field + Calls | Imports | Defines | Inherits | References
This is deliberately minimal. The Field symbol type and References edge were added so remembrall_impact and remembrall_lookup_symbol work at the field level - answering "who references the amount field?" across all 9 languages. A Field symbol is parented to its enclosing class/struct via parent_symbol_id; the parser emits a Defines edge from the type to the field and a References edge from a method to the field for self/receiver field reads (self.x, this.x, &self.x, Go s.X), resolved in-parser to the enclosing type's field (exact, confidence 1.0, no fan-out). Cross-file References for unambiguous field names are resolved by the walker; ambiguous field names (multiple candidates) are dropped rather than fanned out one-edge-per-candidate, which would create thousands of false edges for common names like name.
Known gaps (Phase 2/3, see docs/field-level-references.md):
Non-self field access -
obj.fieldwhereobjis notself/this/the receiver (needs receiver-type resolution)Constants/config - "What uses DATABASE_URL?" is not answerable
Read/write distinction -
self.x = ...writes are not yet distinguished from readsDSL string-literal references -
Sum("amount"),.filter(x=),#[serde(rename="x")](the differentiator no LSP server builds)
These can be added incrementally. The moniker column on symbols (SCIP-style stable identifiers) is already in the schema, populated in Phase 3.
Performance
Parsing is synchronous and CPU-bound (tree-sitter is compiled C code called via FFI). Typical performance on Apple Silicon:
| Project | Files | Symbols | Relationships | Time |
|---|---|---|---|---|
| Sugar (Python, 89 files) | 89 | 1,157 | 9,297 | 2.3s |
| Revsup (Django, 92 files) | 92 | 771 | 1,602 | 1.2s |
| NomadSignal (TypeScript, 8 files) | 8 | 40 | 327 | 72ms |
Tree-sitter parsing itself is fast (~1-5ms per file). Most time is spent on file I/O and UUID resolution.
105 files · 93 not served here
- .dockerignore (not served here)
- .github/workflows/ci.yml (not served here)
- .github/workflows/release.yml (not served here)
- .gitignore (not served here)
- .mcp.json
- AGENTS.md
- ATTRIBUTION.md
- AUTOGINEER-RUNS.md
- CLAUDE.md
- Cargo.lock (not served here)
- Cargo.toml (not served here)
- Dockerfile (not served here)
- README.md
- benchmarks/README.md (not served here)
- benchmarks/analyze.py (not served here)
- benchmarks/reports/benchmark-2026-04-02.md (not served here)
- benchmarks/runs.json (not served here)
- benchmarks/tasks.toml (not served here)
- crates/remembrall-core/Cargo.toml (not served here)
- crates/remembrall-core/README.md (not served here)
- crates/remembrall-core/src/bin/bench_index.rs (not served here)
- crates/remembrall-core/src/bin/kt_ast_debug.rs (not served here)
- crates/remembrall-core/src/bin/parser_smoke.rs (not served here)
- crates/remembrall-core/src/bin/spike.rs (not served here)
- crates/remembrall-core/src/bin/spike2.rs (not served here)
- crates/remembrall-core/src/bin/spike3.rs (not served here)
- crates/remembrall-core/src/config.rs (not served here)
- crates/remembrall-core/src/embed.rs (not served here)
- crates/remembrall-core/src/error.rs (not served here)
- crates/remembrall-core/src/graph.rs (not served here)
- crates/remembrall-core/src/graph/layers.rs (not served here)
- crates/remembrall-core/src/graph/store.rs (not served here)
- crates/remembrall-core/src/graph/types.rs (not served here)
- crates/remembrall-core/src/indexer.rs (not served here)
- crates/remembrall-core/src/ingest.rs (not served here)
- crates/remembrall-core/src/lib.rs (not served here)
- crates/remembrall-core/src/memory.rs (not served here)
- crates/remembrall-core/src/memory/store.rs (not served here)
- crates/remembrall-core/src/memory/types.rs (not served here)
- crates/remembrall-core/src/parser/csharp.rs (not served here)
- crates/remembrall-core/src/parser/go.rs (not served here)
- crates/remembrall-core/src/parser/java.rs (not served here)
- crates/remembrall-core/src/parser/kotlin.rs (not served here)
- crates/remembrall-core/src/parser/mod.rs (not served here)
- crates/remembrall-core/src/parser/python.rs (not served here)
- crates/remembrall-core/src/parser/ruby.rs (not served here)
- crates/remembrall-core/src/parser/rust.rs (not served here)
- crates/remembrall-core/src/parser/typescript.rs (not served here)
- crates/remembrall-core/src/parser/walker.rs (not served here)
- crates/remembrall-core/src/search.rs (not served here)
- crates/remembrall-integration-tests/Cargo.toml (not served here)
- crates/remembrall-integration-tests/src/main.rs (not served here)
- crates/remembrall-python/Cargo.toml (not served here)
- crates/remembrall-python/src/lib.rs (not served here)
- crates/remembrall-recall-test/Cargo.toml (not served here)
- crates/remembrall-recall-test/src/ground_truth.rs (not served here)
- crates/remembrall-recall-test/src/main.rs (not served here)
- crates/remembrall-recall-test/src/report.rs (not served here)
- crates/remembrall-recall-test/src/runner.rs (not served here)
- crates/remembrall-recall-test/src/scorer.rs (not served here)
- crates/remembrall-recall-test/src/seed.rs (not served here)
- crates/remembrall-server/Cargo.toml (not served here)
- crates/remembrall-server/README.md (not served here)
- crates/remembrall-server/src/config.rs (not served here)
- crates/remembrall-server/src/lib.rs (not served here)
- crates/remembrall-server/src/main.rs (not served here)
- crates/remembrall-server/src/tools/graph.rs (not served here)
- crates/remembrall-server/src/tools/ingest.rs (not served here)
- crates/remembrall-server/src/tools/memory.rs (not served here)
- crates/remembrall-server/src/tools/mod.rs (not served here)
- crates/remembrall-server/src/watcher.rs (not served here)
- crates/remembrall-test-harness/Cargo.toml (not served here)
- crates/remembrall-test-harness/src/comparator.rs (not served here)
- crates/remembrall-test-harness/src/ground_truth.rs (not served here)
- crates/remembrall-test-harness/src/main.rs (not served here)
- crates/remembrall-test-harness/src/scorer.rs (not served here)
- docker-compose.yml (not served here)
- docker-entrypoint.sh (not served here)
- docs/architecture.md
- docs/benchmark-roadmap.md
- docs/field-level-references.md
- docs/parser-architecture.md
- docs/test-plan.md
- glama.json (not served here)
- install.sh (not served here)
- package-lock.json (not served here)
- package.json (not served here)
- pyproject.toml (not served here)
- scripts/awesome-list-prs.md (not served here)
- scripts/community-posts.md (not served here)
- scripts/outreach-emails.md (not served here)
- scripts/show-hn-comment.txt (not served here)
- scripts/smoke-test-docker.sh (not served here)
- scripts/submit-directories.mjs (not served here)
- server.json
- test-fixtures/.gitignore (not served here)
- test-fixtures/SOURCES.md (not served here)
- test-fixtures/fetch.sh (not served here)
- test-fixtures/field-capture.toml (not served here)
- test-fixtures/field-capture/src/account.rs (not served here)
- test-fixtures/field-capture/src/invoice.py (not served here)
- test-fixtures/field-capture/src/order.cs (not served here)
- test-fixtures/field-capture/src/server.go (not served here)
- tests/recall/ground_truth.toml (not served here)
- tests/recall/seed_memories.toml (not served here)
Advantages
- Reduces token usage by up to 98% by eliminating redundant codebase exploration. evidence: README.md
- Provides sub-10ms impact analysis and symbol lookup regardless of project size. evidence: README.md
Limitations
- Requires an external PostgreSQL 16 instance with pgvector extension. evidence: README.md
- Initial indexing and ingestion are required to bootstrap knowledge for new projects. evidence: README.md
Security
Risk level: Medium risk
This brain runs
MCP servers (7)
.mcp.json(remembrall):/Users/steve/Dev/remembrallmcp/target/release/remembrallREADME.md(remembrall):remembrallREADME.md(remembrall):/path/to/remembrallmcp/target/release/remembrallREADME.md(remembrall):docker compose -f /path/to/remembrallmcp/docker-compose.yml run --rm -T remembrallREADME.md(remembrall):remembrallREADME.md(remembrall):docker compose -f /path/to/remembrallmcp/docker-compose.yml run --rm -T remembrallREADME.md(remembrall):/path/to/remembrallmcp/target/release/remembrall
Agent instructions that run or fetch something (17)
AGENTS.md:Start database: `docker start cocoindex-postgres`AGENTS.md:Run server over stdio: `DATABASE_URL="postgres://postgres:[redacted]@localhost:5450/remembrall" ./target/release/remembrall`AGENTS.md:Run validation spike: `DATABASE_URL="postgres://postgres:[redacted]@localhost:5450/remembrall" cargo run --bin spike3`CLAUDE.md:docker start cocoindex-postgresCLAUDE.md:# Run MCP server manually (stdio)CLAUDE.md:# Run ground truth tests (validates everything works)CLAUDE.md:DATABASE_URL="postgres://postgres:[redacted]@localhost:5450/remembrall" cargo run --bin spike3CLAUDE.md:remembrall serve # Run MCP server (explicit form; no-arg is same)CLAUDE.md:Model downloads on first run (~23 MB), or pre-downloaded by `remembrall init`.CLAUDE.md:install.sh # curl installer scriptCLAUDE.md:git checkout developCLAUDE.md:git checkout mainCLAUDE.md:git merge developCLAUDE.md:git push origin main· uses the networkCLAUDE.md:git tag v0.X.0CLAUDE.md:git push origin v0.X.0· uses the networkCLAUDE.md:git checkout develop
Install scripts (1)
install.sh:sh install.sh· uses the network
- Medium risk: runs-instruction-instruction-network (CLAUDE.md:138)
- Medium risk: runs-instruction-instruction-network (CLAUDE.md:142)
- Medium risk: runs-install-script-network-variable-host (install.sh)
- Medium risk: network-variable-host (install.sh:63)
- Low risk: scripts-present (install.sh)
Attribution and licence
- Created by
- RoboticForce, Inc.
- Declared authors
- RobotICForce (declared in package.json)
- RobotICForce (declared in pyproject.toml)
- Publisher
- RoboticForce, Inc. (Official RoboticForce, Inc. project)
- Source
- roboticforce/remembrallmcp · commit 77e6b2b
- Licence
- MIT License (files served here)
- ATTRIBUTION.md (written by AutoGineer)
- Synced
AutoGineer is not affiliated with or endorsed by RoboticForce, Inc..
Install from source
93 of its files are not served here, so there is no ZIP. roboticforce/remembrallmcp at 77e6b2b