Skip to main content
Glama
README.md
# agent-memory-hub

**Persistent, intelligent, searchable long-term memory for AI agents.**

Store facts, preferences, notes, and project context. Retrieve them with full-text BM25 search, importance scoring, and recency weighting. No API keys. No external servers. Works out of the box.

---

## Features

- **7 powerful tools** — store, search, retrieve context, update, list, forget, summarize
- **BM25 full-text search** — proper ranked search with IDF, not just string matching
- **Auto-tagging** — automatically infers categories (preference, project, technical, task, credential, etc.)
- **Auto importance scoring** — detects urgency signals in content
- **Recency + importance weighting** — more relevant memories surface first
- **Atomic writes** — corruption-safe file persistence
- **Zero dependencies** — only the MCP SDK; no native binaries, no Python, no Docker
- **Configurable storage** — override path with `AGENT_MEMORY_DIR` env var

---

## Installation

### 1. Clone and build

```bash
git clone https://github.com/yourname/agent-memory-hub
cd agent-memory-hub
npm install
npm run build
```

### 2. Add to Claude Desktop

Edit `%APPDATA%\Claude\claude_desktop_config.json`:

```json
{
  "mcpServers": {
    "agent-memory-hub": {
      "command": "node",
      "args": ["C:\\Users\\HP\\agent-memory-hub\\build\\index.js"]
    }
  }
}
```

### 3. Add to Claude Code (MCP CLI)

```bash
claude mcp add agent-memory-hub -- node "C:\Users\HP\agent-memory-hub\build\index.js"
```

### Custom storage directory

```json
{
  "mcpServers": {
    "agent-memory-hub": {
      "command": "node",
      "args": ["C:\\Users\\HP\\agent-memory-hub\\build\\index.js"],
      "env": {
        "AGENT_MEMORY_DIR": "C:\\Users\\HP\\my-agent-memories"
      }
    }
  }
}
```

Default storage: `~/.agent-memory/memories.json`

---

## Tools

### `store_memory`

Store any piece of information worth remembering.

```
key:        "user_preferred_language"
content:    "User always prefers TypeScript over JavaScript"
tags:       ["preference", "technical"]   ← auto-detected if omitted
importance: 7                             ← auto-scored if omitted
overwrite:  true                          ← upsert: update if key exists, create if not
```

By default, storing a key that already exists returns an error. Set `overwrite: true` to silently update the existing memory instead — useful when you want "set this value" semantics without checking first.

### `search_memory`

BM25 full-text search across all memories.

```
query: "typescript preferences"
limit: 5          ← optional, default 5
tags:  ["technical"]  ← optional filter
```

### `get_relevant_context`

Auto-retrieve the best memories for a given query. Use this at session start.

```
user_query: "Help me set up the project authentication"
→ Returns: identity memories, project memories, technical preferences
```

### `update_memory`

Modify existing memory content, tags, or importance.

```
key:         "user_preferred_language"
new_content: "User prefers TypeScript, but accepts Python for scripts"
importance:  8
```

### `list_memories`

Browse memories with sorting and filtering.

```
tags: ["project"]
sort: "importance"   ← "recent" | "importance" | "access"
limit: 10
```

### `forget_memory`

Permanently delete a memory.

```
key: "old_api_key"
```

### `memory_summary`

Get a full overview — counts, top tags, most important and most accessed memories.

---

## Storage Format

Memories are stored as plain JSON at `~/.agent-memory/memories.json`. Human-readable, easy to backup or inspect.

```json
{
  "version": "1.0.0",
  "created": "2025-01-01T00:00:00.000Z",
  "lastUpdated": "2025-06-01T12:00:00.000Z",
  "memories": [
    {
      "id": "uuid",
      "key": "user_preferred_language",
      "content": "User prefers TypeScript over JavaScript",
      "tags": ["preference", "technical"],
      "importance": 7,
      "createdAt": "...",
      "updatedAt": "...",
      "accessCount": 12,
      "lastAccessed": "..."
    }
  ]
}
```

---

## Auto-Tagging Categories

The system auto-detects these categories from content:

| Tag | Trigger signals |
|-----|----------------|
| `preference` | prefer, like, love, hate, favorite, avoid |
| `project` | project, working on, building, repository |
| `identity` | I am, my name, I work, my role |
| `technical` | code, api, database, framework, docker |
| `task` | todo, must, deadline, remind |
| `credential` | password, secret, token, api key |
| `note` | note, remember that, fyi, heads up |
| `person` | name is, email, phone, contact |
| `config` | config, setting, env var, port, url |

---

## Development

```bash
npm run dev    # watch mode
npm run build  # production build
```

---

## License

MIT

TDQS

A3.7/5.0

Scored across 7 tools

Disambiguation4/5

Most tools have distinct purposes, but get_relevant_context and search_memory both retrieve memories based on relevance, which could cause confusion. However, descriptions differentiate automatic context retrieval from explicit search.

Naming Consistency4/5

Majority follow verb_noun pattern (forget_memory, list_memories, search_memory, store_memory, update_memory). Two exceptions: get_relevant_context adds an adjective, and memory_summary inverts the order. Overall, mostly consistent with minor deviations.

Tool Count5/5

7 tools is well-scoped for a memory management system. Each tool addresses a essential operation: create, read, update, delete, search, browse, and summarize, without unnecessary bloat.

Completeness4/5

Core CRUD and retrieval operations are covered. However, there is no direct 'get memory by key' tool; agents must infer keys from list or search results. This is a minor gap that agents can work around using existing tools.

Maintenance

ActivityInactive
ResponsivenessNo issues