novara-context
# novara-context MCP Server
Persistent memory, identity, and context for Claude sessions — works with Claude Code, Claude.ai, and OpenClaw.
## Tools
| Tool | Description |
|---|---|
| `recall` | Search the memory graph by query |
| `remember` | Add or update an entity in the memory graph |
| `link` | Create a relation between two entities |
| `forget` | Remove a specific observation from an entity |
| `get_identity` | Returns SOUL.md + MEMORY.md context |
| `get_conventions` | Returns conventions by domain (notion, repo, linkedin, aws, etc.) |
| `store_decision` | Store a decision with title, content, and tags |
| `consolidate` | Full graph maintenance: dedupe, prune stale observations, promote new facts from daily logs |
## Setup
```bash
npm install
npm run build
```
## Usage in Claude Code (stdio)
Add to `~/.config/claude/claude_desktop_config.json`:
```json
{
"mcpServers": {
"novara-context": {
"command": "node",
"args": ["/path/to/novara-context/dist/index.js"]
}
}
}
```
## Usage as Remote Server (HTTP + Cloudflare Tunnel)
```bash
# Set required env vars
export MCP_MODE=http
export PORT=3099
export MCP_CLIENT_ID=novara-context-client
export MCP_CLIENT_SECRET=your-secret-here
# Start server
node dist/index.js &
# Expose via Cloudflare Tunnel
cloudflared tunnel --url http://localhost:3099
```
The server implements full OAuth 2.1 with PKCE and Dynamic Client Registration (RFC 7591) for Claude.ai connector compatibility.
## Environment Variables
| Variable | Default | Description |
|---|---|---|
| `MCP_MODE` | `stdio` | `stdio` or `http` |
| `PORT` | `3099` | HTTP port |
| `MCP_CLIENT_ID` | `novara-context-client` | OAuth client ID |
| `MCP_CLIENT_SECRET` | — | OAuth client secret (required for HTTP mode) |
| `MEMORY_FILE_PATH` | `~/clawd/data/memory-graph/memory.jsonl` | Memory graph data file |
## Memory Graph Format
The graph is stored as JSONL — one JSON object per line:
```json
{"type":"entity","name":"Stephen Ellington","entityType":"Person","observations":["Founder of Novara"]}
{"type":"relation","from":"Stephen Ellington","to":"Novara","relationType":"FOUNDED"}
```
TDQS
Scored across 8 tools
Each tool has a clearly distinct purpose: recall searches, remember upserts, link adds relations, forget removes observations, get_identity retrieves context, get_conventions fetches convention entities, store_decision stores decisions, and consolidate performs maintenance. No overlap.
Tool names mix single verbs (recall, remember, link, forget, consolidate) with verb_noun patterns (get_identity, get_conventions, store_decision). While readable, the lack of a uniform convention reduces predictability.
With 8 tools, the set covers core memory graph operations without being bloated. The count feels well-scoped for the server's purpose of managing an agent's memory.
The tool set covers basic CRUD (create/read/update via remember, recall, link) and maintenance (consolidate), but lacks a dedicated tool to delete entire entities or list all entities. Minor gaps like these could hinder agent workflows.