• v3.10.0 390cafaa11

    v3.10.0 Stable

    ric_harvey released this 2026-03-27 21:36:24 +00:00 | 139 commits to main since this release

    What's changed

    Added

    • Streamable HTTP transport support: MCP server now supports Streamable HTTP via MCP_TRANSPORT=http env var, using FastMCP's canonical "http" transport string. Endpoint moves from /sse to /mcp when enabled. Community contribution from @timstoop (PR #4)
    • MCP_TRANSPORT env var: Controls which transport the MCP server uses. Accepts sse (default) or http. Existing deployments continue to work without changes

    Deprecated

    • SSE transport: SSE remains the default in 3.10 but will be removed in a future release. A deprecation warning is logged on startup when using SSE. All connection guides updated with migration instructions

    Fixed

    • Bandit B310 security finding (v3.9.5): Validate URL scheme is http or https before calling urllib.request.urlopen in the RSS worker page fetcher
    • Version string out of sync (v3.9.4): __version__ now correctly tracks the release version
    • Trailing code fence in reverse-proxy docs

    Changed

    • All connection guides updated to show SSE as default with GFM deprecation warnings and Streamable HTTP migration instructions
    • Kiro guide type field corrected from "streamable-http" to "http" for consistency with FastMCP docs

    Migration

    No action required for existing deployments — SSE remains the default. To opt in to Streamable HTTP early:

    1. Set MCP_TRANSPORT=http in your .env
    2. Update your client config: "type": "http" with URL .../mcp instead of "type": "sse" with .../sse

    See the connection guides for per-agent instructions.

    Downloads
  • v3.9.5 321b222b1f

    v3.9.5 Stable

    ric_harvey released this 2026-03-27 20:59:07 +00:00 | 142 commits to main since this release

    What's changed

    • Fix Bandit B310 security finding: Validate URL scheme (http/https only) before calling urllib.request.urlopen in the RSS worker page fetcher. Added # nosec B310 annotation for the scheme-validated call.
    • Version bump: __version__ now correctly reads 3.9.5 (was stuck on 3.9.3 in v3.9.4).
    Downloads
  • v3.8.2 f3a41bb6be

    ric_harvey released this 2026-03-25 19:54:03 +00:00 | 150 commits to main since this release

    What's new

    Multi-arch Docker images

    All three images (omnimem-mcp, omnimem-web, omnimem-rss) now build for both linux/amd64 and linux/arm64 via docker buildx on a self-hosted runner. Docker Hub serves the correct architecture automatically — OmniMem now runs natively on Raspberry Pi, AWS Graviton, Apple Silicon, and x86.

    Test coverage to 76%

    92 new tests across 5 new test files, up from 50.27%:

    • test_project.py — 29 tests for project context tools
    • test_briefing.py — 19 tests for briefing tool and helpers
    • test_audit.py — 20 tests for audit tools
    • test_backup.py — 17 tests for backup and restore
    • test_contradiction_tool.py — 7 tests for contradiction detection

    CI/CD improvements

    • Docker workflow migrated from buildah to docker buildx
    • Manual workflow_dispatch trigger for on-demand builds
    • Fixed pip-audit false positive on CVE-2026-4539 (pygments ReDoS, no upstream fix)
    • Fixed coverage badge publish failing on branch checkout
    • Security scans no longer trigger on version tag pushes

    Docker images

    docker pull richarvey/omnimem-mcp:v3.8.2
    docker pull richarvey/omnimem-web:v3.8.2
    docker pull richarvey/omnimem-rss:v3.8.2
    
    Downloads
  • v3.8.0 cee8015ccc

    ric_harvey released this 2026-03-24 15:04:53 +00:00 | 175 commits to main since this release

    What's new

    Optional bearer token authentication

    OmniMem now supports built-in authentication on both the MCP server and web UI, enabled via environment variables:

    • MCP_AUTH_TOKEN — protects the MCP SSE endpoint (port 8765) using a custom FastMCP TokenVerifier subclass
    • WEB_UI_AUTH_TOKEN — protects the web dashboard (port 8080) using Starlette middleware

    Both are fully optional. When unset or blank, behaviour is unchanged from previous versions. No new dependencies required.

    The /metrics endpoint and /static/ assets are exempt from web UI auth so Prometheus scraping continues to work without credentials.

    Connection guides

    New guides/ directory with setup instructions for six coding agents:

    Agent Transport
    Claude Code Native SSE
    GitHub Copilot Native SSE
    Cursor SSE (known quirks)
    AWS Kiro Native SSE
    OpenCode Native SSE
    OpenAI Codex CLI Needs supergateway bridge

    Configuration

    Add to your .env:

    MCP_AUTH_TOKEN=your-secret-token      # Protects MCP endpoint
    WEB_UI_AUTH_TOKEN=your-secret-token   # Protects web dashboard
    

    Generate a secure token:

    python3 -c "import secrets; print(secrets.token_urlsafe(32))"
    

    Add the token to your Claude Code config:

    {
      "mcpServers": {
        "omnimem": {
          "type": "sse",
          "url": "http://localhost:8765/sse",
          "headers": {
            "Authorization": "Bearer your-secret-token"
          }
        }
      }
    }
    

    See docs/reverse-proxy.md for full documentation including reverse proxy examples.

    Full changelog: v3.7.1...v3.8.0

    Downloads
  • v3.7.1 09b137b9d5

    v3.7.1 Stable

    ric_harvey released this 2026-03-24 13:42:56 +00:00 | 178 commits to main since this release

    Fixed

    • Duplicate detection in web UI showing empty clusters: The duplicates page reported the correct number of clusters but displayed "0 memories, similarity ?" for each one. Root cause was a mismatch between the find_all_duplicates() return structure (flat list of dicts) and the Jinja2 template which expected named attributes (cluster.keys, cluster.max_similarity). Clusters are now returned as {"memories": [...], "max_similarity": float} and the template iterates correctly. Max pairwise similarity is now computed and displayed per cluster.
    Downloads
  • v3.7.0 f5cb1ec88b

    v3.7.0 Stable

    ric_harvey released this 2026-03-19 19:52:41 +00:00 | 179 commits to main since this release

    Title: v3: Web UI dashboard, telemetry, auto-maintenance, and MCP instructions

    Description:

    Summary

    This is the full v3 branch, covering versions 3.0.0 through 3.7.0. The headline feature is a web UI dashboard for browsing and managing memories outside of Claude Code,
    but there's a lot more in here.

    • Web UI dashboard (Starlette + Jinja2 + htmx) — browse memories with filters and pagination, semantic search, memory detail views, lifecycle management, create new
      memories with inline duplicate detection, project management (list/detail/edit/create/delete), RSS feeds CRUD with download/upload, experience tracking and graveyard
      views, duplicate scanning, contradiction detection, suppression management, and backup management with create/download/upload/delete
    • Telemetry and Prometheus metrics — per-memory recall_count and last_recalled counters updated on every recall, telemetry dashboard page in the web UI, and a
      Prometheus-compatible /metrics endpoint for Grafana integration
    • Auto-maintenance — automatic deduplication and contradiction scanning triggered every N briefing() calls per project (configurable via AUTO_MAINTENANCE_INTERVAL, default
    • MCP instructions injection — OmniMem now injects its own usage instructions automatically when Claude Code connects, so users no longer need to manually copy CLAUDE.md
      into every project
    • compile_project_context tool — auto-generates project context from stored episodic memories, useful for bootstrapping context on projects that already have memories but
      no explicit set_project_context() call
    • version() tool — returns the current OmniMem version
    • RSS worker file watcher — mtime polling with configurable interval and misfire_grace_time for robustness on sleeping machines
    • Reverse proxy docs — Traefik and Caddy examples covering both web UI and MCP server endpoints
    • Startup index migration — compares field counts against definitions and drops stale indexes so they get recreated with new fields

    Stats

    • 45 new files, 73 files changed, ~5,800 lines added
    • 43 commits
    • New Docker service: web_ui on port 8080
    • New test suites for recall counters, maintenance, and briefing maintenance

    Test plan

    • cd mcp_server && pytest tests/ — all existing and new tests pass
    • docker compose up -d — all four containers start and stay healthy
    • Web UI accessible at http://localhost:8080 — dashboard loads, navigation works
    • Browse memories, search, create, view detail, lifecycle actions all functional
    • RSS feeds page: list, create, edit, delete, download, upload
    • Projects page: list, detail, edit, create, delete
    • Telemetry page shows recall counts; /metrics returns Prometheus format
    • briefing() triggers auto-maintenance after configured interval
    • MCP instructions appear in Claude Code without manual CLAUDE.md setup
    • Reverse proxy docs: Traefik and Caddy configs work for both endpoints

    Downloads