Skip to main content
Glama
README.md
# claude-legal-persistent-memory-pl

MCP server providing persistent memory for AI legal assistants — remember facts between sessions, recall them with full-text search. Built for Polish law practice, works with any Claude deployment.

Part of the [KTZR AI ecosystem](https://github.com/apiotrowski-afk/commercial-legal-pl).

## ⚠️ Security — protect your endpoint

**Never expose this server without authentication.** The `/mcp` endpoint gives any caller full read/write access to your memory database (client data, negotiation positions, case facts).

Recommended guards — pick one or combine:

| Method | How |
|--------|-----|
| **Secret token in URL** | Deploy behind a reverse proxy that requires `/mcp/<secret>` and strips it before forwarding |
| **IP allowlist** | Cloud Run → `--ingress=internal-and-cloud-load-balancing` + Cloud Armor policy |
| **VPC + IAP** | Route through Identity-Aware Proxy; requires Google account auth |
| **Cloud Run auth** | Remove `--allow-unauthenticated`; use `Authorization: Bearer $(gcloud auth print-identity-token)` in the MCP connector |

This repo ships with **no auth** by default (URL obscurity only) — suitable for local/testing use. **Add a guard before any production deployment.**

---

## Tools

| Tool | Description |
|------|-------------|
| `remember(content, category, case_ref?, tags?)` | Store a note in long-term memory |
| `recall(query, category?, case_ref?, limit?)` | Full-text AND search across stored notes |
| `list_categories()` | Summary of stored notes by category |

**Categories:** `klient` · `negocjacje` · `klauzule` · `ryzyka` · `precedensy` · `misc`

## Quick start (local, SQLite)

```bash
pip install .
legal-memory          # starts stdio transport — no server, no auth needed
```

Add to Claude Code (`~/.claude/mcp.json`):
```json
{
  "legal-memory": {
    "type": "stdio",
    "command": "legal-memory"
  }
}
```

Local stdio mode never exposes a network port — no auth required.

## Cloud Run deployment

```bash
# Build and deploy
gcloud run deploy claude-legal-memory \
  --source . \
  --region europe-west4 \
  --set-env-vars DATABASE_URL="postgresql+asyncpg://user:pass@/db?host=/cloudsql/project:region:instance" \
  --allow-unauthenticated   # ← add a guard here in production

# Connect Claude Code
# .claude/mcp.json:
# {
#   "legal-memory": {
#     "type": "http",
#     "url": "https://<your-cloud-run-url>/mcp"
#   }
# }
```

## Configuration

| Env var | Default | Description |
|---------|---------|-------------|
| `DATABASE_URL` | `sqlite+aiosqlite:///legal_memory.db` | Database connection string |
| `PORT` | `8080` | HTTP port (Cloud Run sets this automatically) |

The server auto-detects the transport:
- `K_SERVICE` or `PORT` set → `streamable-http` (Cloud Run / remote)
- Neither set → `stdio` (local — recommended for single-user setups)

## Database

Works with **SQLite** (local, zero config) and **PostgreSQL** (production).

| Backend | URL format |
|---------|-----------|
| SQLite | `sqlite+aiosqlite:///legal_memory.db` |
| PostgreSQL | `postgresql+asyncpg://user:pass@host/dbname` |
| Cloud SQL | `postgresql+asyncpg://user:pass@/dbname?host=/cloudsql/project:region:instance` |

## Related

- [commercial-legal-pl](https://github.com/apiotrowski-afk/commercial-legal-pl) — Polish commercial law skill for Claude (uses this server for persistent memory)
- [legal-cite-pl](https://github.com/apiotrowski-afk/legal-cite-pl) — MCP server for verifying Polish & EU legal citations