npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

code-recall

v1.0.3

Published

Ultra-fast MCP server for semantic memory and code analysis

Readme

code-recall

Semantic memory for AI coding agents

Give your AI assistant persistent memory that learns from your project's history.

npm License: MIT Bun MCP

FeaturesInstallationQuick StartToolsBest PracticesArchitecture


The Problem

AI coding assistants are incredibly powerful, but they have a critical limitation: they forget everything between sessions. Every time you start a new conversation, your AI assistant has no memory of:

  • Past architectural decisions and why they were made
  • Patterns that work well in your codebase
  • Approaches that failed and should be avoided
  • Project-specific rules and guardrails

You end up repeating context, re-explaining decisions, and sometimes watching the AI make the same mistakes twice.

Why not just use CLAUDE.md?

The typical solution is adding context to .md files. It doesn't scale:

  • Context window has limits — your instructions compete with actual code
  • Loads everything even when you only need part of it
  • No semantic search ("state management" won't find "Zustand")
  • Can't learn from failures or evolve automatically

The Solution

code-recall is an MCP server that gives AI agents persistent, semantic memory. It stores observations, decisions, and learnings in a local SQLite database with vector search capabilities, allowing your AI to:

  • Remember past decisions and their outcomes
  • Learn from failures (failed approaches are boosted in future searches)
  • Follow rules with semantic matching guardrails
  • Understand your code structure through tree-sitter analysis

All data stays local on your machine. No cloud, no telemetry, fully private.


Features

Semantic Memory

Store and retrieve observations using hybrid search that combines:

  • Vector similarity (embeddings) - finds conceptually related memories
  • Full-text search (BM25) - matches exact keywords
  • Temporal decay - recent memories rank higher
  • Failure boost - past failures surface prominently to prevent repeating mistakes

Rules Engine

Create guardrails that are matched semantically against actions:

Trigger: "adding API endpoint"
→ Must do: ["Add rate limiting", "Write integration tests"]
→ Must not: ["Skip authentication"]
→ Ask first: ["Is this a breaking change?"]

Code Analysis

Parse TypeScript/JavaScript files with tree-sitter to extract:

  • Classes, methods, and functions
  • Interfaces and type aliases
  • Import statements
  • JSDoc documentation

Link memories to specific code entities for contextual recall.


Installation

Prerequisites

  • Bun v1.0 or higher
  • macOS: SQLite with extension support (via Homebrew: brew install sqlite)
  • Linux: Works out of the box

Install from npm

bun install -g code-recall

Quick Start

1. Add to Claude Code

claude mcp add code-recall -- bunx code-recall

2. Restart Claude Code

The server starts automatically when you open Claude Code.

3. Start Using Memory

Once connected, Claude can store observations, search memories, check rules, and more using the MCP tools below.

Configuration with Other MCP Clients

Add to your MCP client configuration:

{
  "mcpServers": {
    "code-recall": {
      "command": "bunx",
      "args": ["code-recall"]
    }
  }
}

MCP Tools

code-recall provides 8 tools that AI agents can use:

store_observation

Store a new observation in memory with automatic conflict detection.

| Parameter | Type | Description | |-----------|------|-------------| | category | decision | pattern | warning | learning | Type of observation | | content | string | The main content | | rationale | string? | Why this decision was made | | tags | string[]? | Tags for categorization | | file_path | string? | Associated file path |

{
  "category": "decision",
  "content": "Use JWT for authentication",
  "rationale": "Stateless auth enables horizontal scaling",
  "tags": ["auth", "architecture"]
}

search_memory

Search memories using semantic similarity.

| Parameter | Type | Description | |-----------|------|-------------| | query | string | Search query | | limit | number? | Max results (default: 10) | | category | string? | Filter by category | | file_path | string? | Filter by file path |

get_briefing

Get a session start briefing with stats, warnings, and failed approaches.

| Parameter | Type | Description | |-----------|------|-------------| | focus_areas | string[]? | Topics to pre-fetch context for |

set_rule

Create a new rule/guardrail with semantic trigger matching.

| Parameter | Type | Description | |-----------|------|-------------| | trigger | string | Action pattern that triggers this rule | | must_do | string[]? | Required actions | | must_not | string[]? | Forbidden actions | | ask_first | string[]? | Questions to consider |

check_rules

Check which rules apply to an action.

| Parameter | Type | Description | |-----------|------|-------------| | action | string | The action you're about to take |

record_outcome

Record whether a decision worked or failed.

| Parameter | Type | Description | |-----------|------|-------------| | memory_id | number | ID of the memory | | outcome | string | Description of what happened | | worked | boolean | Whether it was successful |

list_rules

List all active rules. No parameters.

analyze_structure

Analyze a source file and extract its code structure.

| Parameter | Type | Description | |-----------|------|-------------| | file_path | string | Path to the file | | include_types | string[]? | Filter entity types |


Recommended Workflow

┌─────────────────────────────────────────────────────────┐
│                    SESSION START                         │
│                         │                                │
│                         ▼                                │
│               get_briefing(focus_areas)                  │
│                         │                                │
└─────────────────────────┼───────────────────────────────┘
                          │
┌─────────────────────────┼───────────────────────────────┐
│                  BEFORE CHANGES                          │
│                         │                                │
│          ┌──────────────┴──────────────┐                │
│          ▼                              ▼                │
│   check_rules(action)          search_memory(query)     │
│                                                          │
└─────────────────────────────────────────────────────────┘
                          │
┌─────────────────────────┼───────────────────────────────┐
│                AFTER DECISIONS                           │
│                         │                                │
│                         ▼                                │
│        store_observation(category, content)              │
│                                                          │
└─────────────────────────────────────────────────────────┘
                          │
┌─────────────────────────┼───────────────────────────────┐
│              AFTER IMPLEMENTATION                        │
│                         │                                │
│                         ▼                                │
│         record_outcome(memory_id, worked)                │
│                                                          │
└─────────────────────────────────────────────────────────┘

Best Practices

Claude Code Skill

For optimal integration with Claude Code, add our Skill to your project. Skills teach Claude when and how to use code-recall automatically.

Install the Skill:

# From your project root
mkdir -p .claude/skills/code-recall
curl -o .claude/skills/code-recall/SKILL.md \
  https://raw.githubusercontent.com/AbianS/code-recall/main/.claude/skills/code-recall/SKILL.md

Or create .claude/skills/code-recall/SKILL.md manually with our skill template.

What the Skill Does

Once installed, Claude will automatically:

  • Session start: Call get_briefing to load context and warnings
  • Before changes: Check search_memory and check_rules for relevant past decisions
  • After decisions: Store important choices with store_observation
  • After implementation: Record outcomes with record_outcome

This creates a feedback loop where Claude learns from past successes and failures in your project.


Architecture

code-recall/
├── src/
│   ├── index.ts              # Entry point
│   ├── server.ts             # MCP server and tools
│   ├── database/
│   │   ├── index.ts          # DatabaseManager (SQLite + sqlite-vec)
│   │   └── schema.ts         # Database schema
│   ├── memory/
│   │   ├── index.ts          # MemoryManager
│   │   ├── embeddings.ts     # Local embeddings (@xenova/transformers)
│   │   └── search.ts         # Hybrid search implementation
│   ├── rules/
│   │   └── index.ts          # RulesEngine with semantic matching
│   └── code/
│       ├── index.ts          # Code analysis coordinator
│       ├── parser.ts         # tree-sitter WASM parser
│       └── extractors/       # Language-specific extractors
├── tests/                    # Comprehensive test suite
└── .code-recall/             # Data directory (auto-created)
    └── memory.db             # SQLite database

Technical Stack

| Component | Technology | |-----------|------------| | Runtime | Bun | | Database | SQLite + sqlite-vec | | Embeddings | @xenova/transformers (all-MiniLM-L6-v2, 384d) | | Full-text Search | SQLite FTS5 | | Code Parsing | web-tree-sitter | | Protocol | MCP (stdio transport) |

Search Algorithm

The hybrid search combines multiple signals:

| Signal | Weight | Description | |--------|--------|-------------| | Vector similarity | 50% | Cosine similarity of embeddings | | Full-text score | 30% | BM25 ranking | | Recency | 15% | Exponential time decay | | Failure boost | 5% | Failed decisions rank higher |


Development

# Run in development mode (with watch)
bun run dev

# Run tests
bun test

# Run specific test file
bun test tests/memory/search.test.ts

Test Coverage

The project includes 210+ tests covering:

  • Database operations and vector search
  • Embedding generation and similarity
  • Hybrid search algorithm
  • Rules engine semantic matching
  • Code analysis and extraction
  • MCP server tools

Contributing

Contributions are welcome! Please feel free to submit a Pull Request.

  1. Fork the repository
  2. Create your feature branch (git checkout -b feature/amazing-feature)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing-feature)
  5. Open a Pull Request

License

MIT License - see LICENSE for details.