Metadata-Version: 2.5
Name: localkeep
Version: 0.1.3
Summary: Local memory banks you keep — a localhost Hub UI + MCP connector for Claude. You curate titled, dated memory banks on your machine; Claude recalls them via MCP.
Project-URL: Homepage, https://github.com/zuneracodes/localkeep
Project-URL: Repository, https://github.com/zuneracodes/localkeep
Project-URL: Issues, https://github.com/zuneracodes/localkeep/issues
Project-URL: Documentation, https://github.com/zuneracodes/localkeep#readme
Project-URL: Changelog, https://github.com/zuneracodes/localkeep/releases
Author: Zunera Ashar
License-Expression: MIT
License-File: LICENSE
Keywords: claude,local-first,mcp,memory,personal-knowledge,sqlite,timeline
Classifier: Development Status :: 4 - Beta
Classifier: Environment :: Console
Classifier: Environment :: Web Environment
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: End Users/Desktop
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Utilities
Classifier: Typing :: Typed
Requires-Python: >=3.11
Requires-Dist: cryptography<49,>=43.0.0
Requires-Dist: fastapi>=0.115.0
Requires-Dist: jinja2>=3.1.0
Requires-Dist: mcp>=1.0.0
Requires-Dist: python-multipart>=0.0.9
Requires-Dist: uvicorn[standard]>=0.32.0
Description-Content-Type: text/markdown

# LocalKeep

<!-- mcp-name: io.github.zuneracodes/localkeep -->

LocalKeep is for anyone who wants a chronological memory layer for chatbots where *they* directly control *what* the model remembers about them. Instead of forcing you to rely on a black-box cloud memory that the model invents around you that you can't even edit, LocalKeep lets you curate titled, dated, editable memory banks directly on your own machine where you write the entries and manage them locally via a localhost Hub UI. When a conversation requires your prior context, Claude queries your local data through a secure, native Model Context Protocol (MCP) connector.


## Why use LocalKeep

AI Chat apps are great at *sounding* like they remember you, but struggle at recalling the **exact** thing you care about — *what* happened, on *which* date, about *whom*? Consumer memory features tend to lack the capacity for true temporal reasoning, flattening your history into a soft, generic vibe summary instead of understanding that Event A triggered Event B three months ago, causing its reasoning to fail when you need something specific: a life event, a research arc, a decision you logged months ago. Worse yet, consumer AI memory is a black box: you don't get to decide **what** the model chooses to remember about you, **how** it interprets your life, or **when** it invents context around you.

**LocalKeep** fixes both structural flaws at once by replacing fragile, model-invented timelines with a rigid, chronological source of **your** truth, all while giving *you* absolute editorial control. You decide exactly *what* the AI is allowed to know about you. You write the entries, you anchor the dates, and you keep them local on your own machine. Claude simply acts as the lookup engine via MCP when a conversation requires your prior context. 
LocalKeep bridges the gap between structured personal logging and intelligent AI retrieval, ensuring your context is curated by **you**—not hallucinated by an LLM.

**Who it’s for**

- Anyone frustrated that chat memory can’t reliably fetch dated facts or understand timelines
- People who already maintain meticulous personal diaries, work logs, or research archives. Instead of settling for a generic chat-app paraphrase, you get to inject your *exact* words and historical data into the prompt as an unyielding source of truth.
- Users who trust Claude for its reasoning capability, but demand that their foundational context database remains stored locally under their own roof. (Note: Querying memories via MCP still sends the *retrieved text fragments* to Anthropic during the session).

**What it is (and isn’t)**

- **Is:** A lightweight customizable local Hub UI to manage your dated memory banks, paired with an MCP server that Claude Desktop can call.
- **Isn’t:** A standalone chat application, a cloud-hosted memory API, or a background utility that silently scrapes your personal conversations.

## The Aesthetic Philosophy 

The Hub UI intentionally adopts a retro, Windows 95/MS Paint-inspired homage with customizable features to ensure LocalKeep feels like a deeply **personal tool** rather than an impersonal, rigid dashboard. By putting adjustable interface elements right at your fingertips, the UI signals that you are entering an intimate, offline workshop for your mind—a space you can shape and reconfigure to feel entirely like your own.

## Install

```bash
pip install localkeep
# or: uv tool install localkeep
```

Then:

```bash
localkeep-hub          # http://127.0.0.1:8000
```

In Claude Desktop, register the MCP server (`claude_desktop_config.json`):

```json
{
  "mcpServers": {
    "localkeep": {
      "command": "localkeep-mcp",
      "args": []
    }
  }
}
```

If the GUI can’t find `localkeep-mcp` on your `PATH`, use the absolute path from `which localkeep-mcp` (the Hub’s Connect panel copies this for you).

Memories default to `~/.localkeep/localkeep.db` when installed via pip. Override with `LOCALKEEP_DATA_DIR` or `LOCALKEEP_DB_PATH`.

### Auto-use LocalKeep (important)

Claude will not reliably call MCP tools unless you also set **Personal preferences**:

1. Claude Desktop → **Settings** → **Profile** → **Personal preferences**
2. Paste the LocalKeep instructions (Hub → Connect → **Copy instructions**, or see [`src/localkeep/assets/claude-personal-preferences.txt`](src/localkeep/assets/claude-personal-preferences.txt))
3. **Quit Claude completely** and reopen
4. When LocalKeep asks to run a tool, click **Always approve**

## Develop from source

```bash
git clone https://github.com/zuneracodes/localkeep
cd localkeep
uv sync --group dev
uv run localkeep-hub                     # http://127.0.0.1:8000
# optional live reload:
LOCALKEEP_HUB_RELOAD=1 uv run localkeep-hub
```

From a source checkout, the DB lives in `data/localkeep.db` (gitignored).

## Tests

These smoke-check the Hub, retrieval, and MCP tools so a fresh install still stores and recalls dated memories the way a real user would.

```bash
uv sync --group dev
uv run pytest
```

Tests start from an **empty DB** and create memories through Hub form POSTs (same path as a new user).

## Privacy

**Storage is local.** Banks and memories live in your chosen DB path (`~/.localkeep/` for pip installs, or `data/localkeep.db` in a checkout). There is no LocalKeep cloud and nothing is auto-scraped from chat. Theme colors stay in browser `localStorage`. Refreshing the Hub page or restarting `localkeep-hub` does **not** delete your banks — only removing the database file does.

**Recall goes through Claude.** The Hub and database stay on your machine, but when Claude calls a LocalKeep MCP tool, the matching memories are returned into that chat and Anthropic processes them like any other tool result. LocalKeep isn’t shipping your whole DB upstream — only what that lookup returns for the question at hand.

## Contributing

Bug reports and pull requests are welcome via [GitHub Issues](https://github.com/zuneracodes/localkeep/issues). Please run `uv run pytest` before opening a PR.

## License

MIT — see [LICENSE](LICENSE).
