npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@sharkdyt/omni-memory-mcp

v1.0.7

Published

Universal memory MCP server for multi-agent AI workflows. 100% local with SQLite + FTS5.

Readme

Omni Memory MCP

Universal memory MCP server for multi-agent workflows.
100% local with SQLite + FTS5.

npm Package

  • Package: @sharkdyt/omni-memory-mcp
  • npm: https://www.npmjs.com/package/@sharkdyt/omni-memory-mcp
  • Current latest: 1.0.7

Release Notes

v1.0.7

  • Ships memory_context_pack for read-only, token-budgeted prompt assembly.
  • Returns compact excerpts plus structured metadata without mutating access_count.
  • Keeps the current local SQLite + FTS5 architecture: no schema migration, vector retrieval, or ranking rewrite.

Project Memory

This project does not keep local memory-bank/ files. Operational context is stored through Omni Memory itself.

Why this exists

  • Keep AI memory local (no cloud dependency)
  • Reuse the same memory across tools/agents
  • Search fast with SQLite FTS5

Features

  • Local-first storage (SQLite)
  • Full-text search with FTS5
  • MCP-native tools
  • Progressive Disclosure: Searches return metadata and summaries instead of full text to prevent LLM context overflow.
  • Context Packs: memory_context_pack assembles compact, token-budgeted excerpts for prompt construction.
  • Active Forgetting Tracking: Read actions (memory_get) increment access_count and update accessed_at.
  • CRUD operations (memory_add, memory_upsert, memory_get, memory_update, memory_delete, memory_list, memory_search)
  • Context optimization tools (memory_prune)
  • Diagnostic tools (memory_stats)
  • Organization by area, project, and tags
  • Shared long-term memory across multiple projects and multiple coding agents/clients
  • Canonical MCP config + client adapters (OpenCode, Codex, Cursor)

Cross-Client MCP Standard

This project keeps one canonical MCP config and generates client-specific files.

Canonical source:

  • config/mcp/servers.json

Generate adapters:

npm run mcp:generate

Validate adapters:

npm run mcp:validate

Generated files:

  • config/mcp/generated/opencode.windows.json
  • config/mcp/generated/opencode.posix.json
  • config/mcp/generated/opencode.windows.array.npx.json
  • config/mcp/generated/opencode.windows.string-args.npx.json
  • config/mcp/generated/opencode.windows.array.fallback-dist.json
  • config/mcp/generated/opencode.posix.array.npx.json
  • config/mcp/generated/opencode.posix.string-args.npx.json
  • config/mcp/generated/opencode.posix.array.fallback-dist.json
  • config/mcp/generated/codex.windows.json
  • config/mcp/generated/codex.posix.json
  • config/mcp/generated/cursor.windows.json
  • config/mcp/generated/cursor.posix.json

Compatibility matrix:

  • docs/mcp-compatibility-matrix.md

Quick Start (Most Newbie Friendly)

If your MCP client supports command + args + env, use:

{
  "mcpServers": {
    "omni-memory": {
      "command": "npx",
      "args": ["-y", "@sharkdyt/omni-memory-mcp"],
      "env": {
        "OMNI_MEMORY_DIR": "~/.omni-memory"
      }
    }
  }
}

This is the easiest setup because:

  • No manual clone path
  • No manual build path
  • Works after npm registry publish

OpenCode compatibility profiles

OpenCode support can vary by client version and environment.
This repository now generates three OpenCode profiles for each platform:

  • array.npx: command as array (["npx","-y","@sharkdyt/omni-memory-mcp"])
  • string-args.npx: command as string + args
  • array.fallback-dist: shell command that tries npx and falls back to local dist/index.js

Recommended default for OpenCode:

  • config/mcp/generated/opencode.<platform>.json (this points to array.fallback-dist)

If you prefer explicit profile selection, copy one of:

  • config/mcp/generated/opencode.<platform>.array.npx.json
  • config/mcp/generated/opencode.<platform>.string-args.npx.json
  • config/mcp/generated/opencode.<platform>.array.fallback-dist.json

Path Guide (Relative vs Absolute)

If you prefer running from local source (dist/index.js), use an absolute path.

  • Relative path example (can break): ./dist/index.js
  • Absolute path example (recommended): full path to file on disk

Why relative paths break:

  • Many MCP clients resolve paths from their own process working directory, not from your config file directory.

Absolute path examples

Linux:

{
  "command": "node",
  "args": ["/home/your-user/.local/mcp/omni-memory-mcp/dist/index.js"]
}

macOS:

{
  "command": "node",
  "args": ["/Users/your-user/.local/mcp/omni-memory-mcp/dist/index.js"]
}

Windows:

{
  "command": "node",
  "args": ["C:\\Users\\your-user\\.local\\mcp\\omni-memory-mcp\\dist\\index.js"]
}

Note:

  • ~ is convenient, but not every client expands it consistently on Windows. Absolute paths are safer.

Install from Source (Local Dev)

git clone https://github.com/allanschramm/omni-memory-mcp.git
cd omni-memory-mcp
npm install
npm run build

Then configure your MCP client with node + absolute path to dist/index.js.

OpenCode / Codex / Cursor

Instead of writing each config by hand, generate client-specific adapters:

npm run mcp:generate

Then copy the generated file for your client/platform from config/mcp/generated/.

OpenCode troubleshooting priority

  1. Use opencode.<platform>.json first (default fallback profile).
  2. If your OpenCode build prefers native npx only, try opencode.<platform>.array.npx.json.
  3. If your OpenCode build requires command string + args, use opencode.<platform>.string-args.npx.json.

Tools

memory_add

{
  "name": "User typescript preferences",
  "content": "User prefers TypeScript with strict mode",
  "area": "preferences",
  "project": "my-project",
  "tags": ["typescript", "coding-style"],
  "metadata": {
    "source": "conversation setup"
  }
}

Use memory_add for clearly new, one-off memories.

memory_upsert

{
  "name": "User typescript preferences",
  "content": "User prefers TypeScript with strict mode",
  "project": "my-project",
  "tags": ["typescript", "coding-style"],
  "allow_create": true
}

Note: memory_upsert is intentionally conservative. It uses normalized name + project matching, updates only when there is one clear candidate, and refuses to write when the match is ambiguous. Use memory_upsert before memory_add for durable facts, preferences, and evolving project memory.

memory_get

Note: Fetching a memory via memory_get registers an access (increments access_count and updates accessed_at), indicating the memory is actively used.

{
  "id": "abc123"
}

memory_update

{
  "id": "abc123",
  "name": "Updated typescript preferences",
  "content": "Updated content",
  "project": null,
  "metadata": null,
  "tags": ["new-tag"]
}

Use null for project or metadata to clear those values.

memory_delete

{
  "id": "abc123"
}

memory_list

Note: Enforces Progressive Disclosure. It returns only IDs, Names, and metadata. You must call memory_get with the specific ID to read the full content.

{
  "area": "snippets",
  "project": "my-project",
  "tag": "important",
  "limit": 20
}

memory_search

Note: Enforces Progressive Disclosure. It returns only IDs, Names, and metadata. You must call memory_get with the specific ID to read the full content.

{
  "query": "typescript configuration",
  "project": "my-project",
  "limit": 10,
  "enableAdvancedSyntax": false,
  "search_mode": "balanced"
}

Note: enableAdvancedSyntax allows FTS5 boolean logic (e.g. "typescript" AND "react" NOT "vue") but requires a strictly valid FTS5 query or it will throw an error. Note: search_mode tunes ranking only. balanced is the default, exact boosts exact title matches harder, and broad is more permissive for content-heavy results. Search results include a compact Match: explanation showing which indexed fields contributed to the result.

memory_context_pack

Note: Builds a compact prompt-ready bundle from matching memories without incrementing access_count. It keeps progressive disclosure intact by returning short excerpts instead of full documents.

{
  "query": "typescript configuration",
  "project": "my-project",
  "tag": "important",
  "max_tokens": 1200,
  "max_memories": 5,
  "search_mode": "balanced"
}

Returns:

  • compact text for immediate agent use
  • structured metadata with count, estimated_tokens, truncated, and per-memory excerpts
  • excerpts ordered by the existing memory_search ranking

memory_stats

{}

Returns total memories, size on disk, breakdown by project and area, plus local upsert metrics such as memory_upsert_created and memory_upsert_updated.

memory_prune

Note: Cleans up memories that have decayed below a specific score dynamically calculated based on created_at, accessed_at, and access_count.

{
  "threshold_score": 0,
  "dry_run": true
}

Always use dry_run: true first to see how many and which memories would be pruned before running the destructible cleanup.

Memory Areas

| Area | Description | | --- | --- | | general | General notes | | snippets | Code snippets and patterns | | solutions | Problem-solution pairs | | preferences | User/team preferences |

Data Storage

Default directory:

~/.omni-memory/
|- omni-memory.db
|- omni-memory.db-wal
`- omni-memory.db-shm

Environment variables:

| Variable | Default | Description | | --- | --- | --- | | OMNI_MEMORY_DIR | ~/.omni-memory | Data storage directory | | OMNI_MEMORY_DB | {OMNI_MEMORY_DIR}/omni-memory.db | SQLite DB file path |

Development

npm install
npm run check
npm run build
npm test

Extra commands:

npm run dev    # watch mode
npm run start  # run server from dist/

Documentation and Memory Hygiene

For every meaningful project change, keep both sources of truth updated:

  1. Repository docs (README.md, docs/*, compatibility/config docs) must reflect current behavior.
  2. Omni Memory must receive a concise project memory entry with:
    • what changed,
    • why it changed,
    • constraints/assumptions,
    • next steps (if any).

Minimum release/update gate:

  1. npm run mcp:generate
  2. npm run mcp:validate
  3. npm run check
  4. Update docs for any behavior/config change
  5. Add/update important project memory in Omni Memory

Post-change runtime verification for this repository:

  1. npm run build
  2. Sync repo dist/ into C:\Users\allan\.local\mcp\omni-memory-mcp\dist
  3. Smoke test the deployed omni-memory-mcp

Operational checklist:

  • docs/release-checklist.md

License

Apache 2.0. See LICENSE.