# io.github.memtomem/memtomem (pypi · memtomem)

Markdown-first long-term memory for AI agents. Hybrid BM25 + vector search, runs locally.

- Trust score: 53/100 (low)
- Registry status: active
- Liveness: live
- Owner verified: no
- Last scored: 2026-09-22

## Components

- pypi · `memtomem`: 53/100 (this document), [markdown](https://verifymcp.io/servers/memtomem-memtomem/memtomem.md), [page](https://verifymcp.io/servers/memtomem-memtomem/memtomem)

## Channel facts

- Registry: `pypi`
- Package: `memtomem`
- Version: `0.6.4`
- Transport: `stdio`

## Trust breakdown

How this component scores in each security and reliability category. Every signal is checked automatically from public evidence about the published package, including repeated runs of it in an isolated sandbox, and we only credit what we can confirm. Scores are 0–100 per category. Scoring method: https://verifymcp.io/docs/scoring (what has changed: https://verifymcp.io/docs/scoring/changelog)

Scored 2026-09-22.

- **Supply Chain Security**: 50/100
  - Malware scan not yet available for this package.
  - No known CVEs affecting this package version or its production dependencies.
  - Runs hatchling.build at install time, a recognised native-build step with no shell scripting around it.
  - 3 of 47 dependencies flagged as unhealthy.
- **Provenance & Transparency**: 48/100
  - Source repository is publicly reachable at the declared URL.
  - Provenance check failed: no build-provenance attestation is published.
  - Clear OSI-approved license (Apache-2.0).
  - Actively maintained (last published 2 days ago).
  - Publishes a security disclosure policy (SECURITY.md).
- **Schema Quality & AI Usability**: 78/100
  - 100% of prompts and resources have a non-trivial description (not blank, and not just the item's name).
  - AI-judged instruction clarity (excellent).
  - Context-footprint check failed: tool/resource definitions use about 2751 tokens (~211/item across 13 items; 9 tools + 4 resources), over budget; trim descriptions and params.
  - Usage-examples check failed: none of the tools include examples.
- **Stability & Change Management**: 0/100
  - Stability not yet verified: not enough scan history yet (needs a 30-day window).
- **Tool Coverage**: 71/100
  - 100% of tools have a non-trivial description (not blank, and not just the tool's name).
  - 0% of tool parameters carry a description.
  - Structured output schemas are declared (100% of tools); any adoption earns full credit.
- **Tool Safety**: 75/100
  - No prompt-injection markers were found in the server instructions, tool names or descriptions we captured.
  - 0 of 1 tool(s) whose name or description implies an irreversible operation declare an MCP destructiveHint annotation; "mem_do" implies "execute" and declares no destructiveHint at all, which the MCP spec reads as destructive by default.
  - An AI judge read all 11 captured unit(s) of tool text and found none that tries to manipulate the model reading it.
- **Capabilities**: 100/100
  - Implements a current MCP spec version (2026-07-28).

**Unverified: 1 category.** A category scored 0 because we could not verify it: a data source with nothing on this package, evidence we could not reach, or a check we could not run. We only credit what we can confirm.

## Install

### How do I install the io.github.memtomem/memtomem MCP server?

io.github.memtomem/memtomem runs locally as a PyPI package, launched with uvx memtomem. Ready-made configuration for Claude, Cursor, VS Code, Codex and 5 more is on this page, copied from each client's own documentation.

### Claude

```bash
claude mcp add memtomem-memtomem -- uvx memtomem
```

### Cursor

```json
{
  "mcpServers": {
    "memtomem-memtomem": {
      "command": "uvx",
      "args": [
        "memtomem"
      ]
    }
  }
}
```

### VS Code

```json
{
  "servers": {
    "memtomem-memtomem": {
      "command": "uvx",
      "args": [
        "memtomem"
      ]
    }
  }
}
```

### Codex

```bash
codex mcp add memtomem-memtomem -- uvx memtomem
```

### opencode

```json
{
  "$schema": "https://opencode.ai/config.json",
  "mcp": {
    "memtomem-memtomem": {
      "type": "local",
      "command": [
        "uvx",
        "memtomem"
      ],
      "enabled": true
    }
  }
}
```

### OpenClaw

```bash
openclaw mcp add memtomem-memtomem --command uvx --arg memtomem
```

### Hermes

```yaml
mcp_servers:
  memtomem-memtomem:
    command: "uvx"
    args: ["memtomem"]
```

### Netclaw

```json
{
  "McpServers": {
    "memtomem-memtomem": {
      "Transport": "stdio",
      "Command": "uvx",
      "Arguments": [
        "memtomem"
      ]
    }
  }
}
```

### Vellum

```bash
assistant mcp add memtomem-memtomem -t stdio -c uvx -a memtomem
```

### Other

```json
{
  "mcpServers": {
    "memtomem-memtomem": {
      "command": "uvx",
      "args": [
        "memtomem"
      ]
    }
  }
}
```

## Changelog

Every change recorded for this component, newest first. Days that predate change tracking, or that we cannot explain, say so: "we were watching and nothing happened" and "we were not watching" are different claims.

### 2026-09-20 (score 53)

First indexed and scored.

## MCP tools (9)

### `mem_index` (~123 tokens)

Index or re-index markdown files for hybrid search.

Args:
    path: File or directory path to index
    recursive: Whether to recurse into subdirectories (default True)
    force: If True, re-index all files even if unchanged (default False)
    namespace: Assign all indexed chunks to this namespace
    auto_tag: If True, run keyword-based auto-tagging on newly indexed chunks

Input parameters:

- `auto_tag` (boolean)
- `force` (boolean)
- `namespace`
- `path` (string)
- `recursive` (boolean)

Output parameters:

- `result` (string)

### `mem_add` (~557 tokens)

Add a new memory entry to a markdown file and immediately index it.

The entry is appended to the target file (or a new timestamped file is
created in the first configured memory directory), then re-indexed so it
is immediately searchable.

All content is scanned for secrets before any filesystem write; a match
rejects the write. See ``force_unsafe`` below for the one escape hatch
and ``mem_add_redaction_stats`` for the outcome counters.

Args:
    content: The memory content to store
    title: Optional heading title for the entry
    tags: Optional tags for categorisation
    file: Target .md filename (relative or absolute). If omitted, a
          timestamped file is created in the first memory_dir.
    namespace: Assign indexed chunks to this namespace (default: config default)
    template: Use a built-in template (adr, meeting, debug, decision,
              procedure). Content can be JSON with field values or plain text.
    force_unsafe: When True, bypass the redaction guard for this call
                  even when content matches a secret pattern. Use only
                  when matches are known false positives (e.g.,
                  documenting an example credential schema). The bypass
                  is recorded with a ``bypassed`` outcome and an audit
                  line, and it never applies to
                  ``scope="project_shared"`` — that combination is
                  hard-refused, because git history cannot be retracted
                  from clones.
    scope: Write tier: ``user`` (default), ``project_local``, or
           ``project_shared``.
    confirm_project_shared: Required explicit consent for a Git-tracked
                            ``project_shared`` write.
    idempotency_key: Optional key (max 256 chars) making this write
                     idempotent for 24h — a retry with the same key
                     returns the original result and writes nothing.
                     Only successful writes are recorded, so a f…

Input parameters:

- `allow_namespace_mix` (boolean)
- `confirm_project_shared` (boolean)
- `content` (string, required)
- `file`
- `force_unsafe` (boolean)
- `idempotency_key`
- `namespace`
- `scope` (string)
- `tags`
- `template`
- `title`

Output parameters:

- `result` (string)

### `mem_recall` (~340 tokens)

Recall memories created within a date range.

Returns chunks ordered by creation date (newest first).

Args:
    since: Inclusive start date (YYYY, YYYY-MM, YYYY-MM-DD, or ISO datetime)
    until: Exclusive end date — same formats as *since*
    source_filter: Filter by source file path (substring match, or glob pattern with *, ?, [])
    tag_filter: Comma-separated tags, matching ANY; applied before *limit*.
    namespace: Namespace scope — single, comma list, or glob ("project:*"), not both.
    limit: Maximum number of chunks to return (default 20)
    output_format: Output format — "compact" (default, human-readable) or "structured"
        (JSON for machine parsing, includes trust-UX hints as a "hints" field).
    scope: ADR-0011 scope-axis filter — single, comma list (``user,project_local``),
        or glob (``project_*``), not both. Omitted, the default merge applies:
        in-project recalls return ``user`` + that project's tiers, out-of-project
        ``user`` only.

Examples::

    mem_recall(since="2025-01", until="2025-03")
    mem_recall(since="2025-06-01", source_filter="notes")
    mem_recall(namespace="work", limit=10)

Input parameters:

- `limit` (integer)
- `namespace`
- `output_format` (string)
- `scope`
- `since`
- `source_filter`
- `tag_filter`
- `until`

Output parameters:

- `result` (string)

### `mem_search` (~759 tokens)

Search across indexed memory files using hybrid BM25 + semantic search.

Args:
    query: Natural language search query
    top_k: Number of results to return (default 10)
    source_filter: Source path filter — substring, or glob with *, ?, []
    tag_filter: Comma-separated tags; matches chunks carrying ANY of them
    namespace: Namespace scope — value, comma list (``work,personal``) or
        glob (``proj:*``), not both. Omitted, system namespaces are hidden;
        naming one includes it.
    as_of: Temporal bound for retroactive search — ``YYYY-MM-DD`` or
        ``YYYY-QN``, default now. Chunks whose ``valid_from`` /
        ``valid_to`` frontmatter excludes that point drop out; chunks
        without those keys are always valid. Time decay anchors here,
        not to the wall clock.
    bm25_weight: RRF weight for keyword matches (default 1.0; raise to favor)
    dense_weight: RRF weight for meaning matches (default 1.0). Both must be
        finite and >= 0, not both zero; 0 disables that leg
    context_window: Expand each result with ±N adjacent chunks (0 = off).
        Neighbours follow the namespace/scope/validity visibility rules,
        not the tag/type/date filters
    verbose: Deprecated — use output_format="verbose"
    output_format: "compact" (default), "verbose" (adds UUID / pipeline stats),
        or "structured" (JSON). A non-default value overrides ``verbose``.
    scope: ADR-0011 tier filter — value, comma list (``user,project_local``)
        or glob (``project_*``), not both. Omitted, the default merge
        applies: inside a project ``user`` + that project's tiers, outside
        one ``user`` only. Pass ``project_shared`` from outside a project to
        search across projects.
    rerank: ``false`` skips the cross-encoder stage and collapses the pool
        to ``top_k`` — the fast path for latency-bounded callers, so it
        narrows recall as well as changing the score scale. Omitted/``true``
        follows server config;…

Input parameters:

- `as_of`
- `bm25_weight`
- `context_window` (integer)
- `dense_weight`
- `namespace`
- `output_format` (string)
- `query` (string, required)
- `record` (boolean)
- `rerank`
- `scope`
- `source_filter`
- `tag_filter`
- `top_k` (integer)
- `verbose` (boolean)

Output parameters:

- `result` (string)

### `mem_stats` (~36 tokens)

Return current memory index statistics: total chunks, sources, and storage backend.

Use this to quickly assess how many memories are indexed before searching.

Output parameters:

- `result` (string)

### `mem_status` (~139 tokens)

Show indexing statistics and current configuration summary.

Reports storage backend, embedding info, chunk/source counts, and warns
about orphaned source files (indexed but gone from disk — run
mem_cleanup_orphans).

Configuration drift adds a ``Warnings`` block. Each entry has ``kind``
(an open enum — tolerate unrecognised values rather than erroring),
\``fix`` and an optional ``doc`` link. Some kinds add their own keys:
embedding mismatches carry ``stored``/``configured``;
\``concurrent_server_writers`` may carry ``same_parent``. These keys are
stable across versions, so probes can pattern-match on them.

Output parameters:

- `result` (string)

### `mem_list` (~130 tokens)

List all indexed source files with chunk counts and metadata.

Args:
    source_filter: Filter by source file path (substring match, or glob pattern with *, ?, [])
    namespace: Only list sources containing chunks in this namespace

Examples:
    mem_list()                               — all indexed files
    mem_list(source_filter="*.md")           — markdown files (glob)
    mem_list(source_filter="docs/")          — files with "docs/" in path (substring)
    mem_list(namespace="work")               — files in the "work" namespace

Input parameters:

- `namespace`
- `source_filter`

Output parameters:

- `result` (string)

### `mem_read` (~75 tokens)

Read a chunk's content and metadata by UUID.

Inspect a chunk before editing, or see the text behind a search
preview. Ids resolve in the current project's scope; another's
reads as not found.

Args:
    chunk_id: The chunk's UUID (from mem_search results)

Input parameters:

- `chunk_id` (string, required)

Output parameters:

- `result` (string)

### `mem_do` (~155 tokens)

Execute a memtomem action by name.

This is the gateway to all advanced memtomem features beyond the
core tools (search, add, index, recall, status, stats, list, read).

action="help" lists every action grouped by category;
params={"category": "<name>"} adds per-parameter detail and, for some
categories, usage notes.

Common aliases resolve automatically (e.g. "orphans" →
"cleanup_orphans", "health" → "eval").

Args:
    action: The action name (e.g. "session_start", "tag_list", "help")
    params: Optional dict of parameters for the action

Input parameters:

- `action` (string, required)
- `params`

Output parameters:

- `result` (string)

## Diagnostics

Captured diagnostic sections: Provenance, Install scripts, Dependencies. The full working is on the page: https://verifymcp.io/servers/memtomem-memtomem/memtomem#diagnostics

## Score history

- 2026-09-22: 53
- 2026-09-21: 53
- 2026-09-20: 53

## Common questions

### What is the io.github.memtomem/memtomem MCP server?

io.github.memtomem/memtomem is an MCP server listed in the public MCP registry as io.github.memtomem/memtomem. Markdown-first long-term memory for AI agents. Hybrid BM25 + vector search, runs locally. This page covers its PyPI package (memtomem).

### Is the io.github.memtomem/memtomem MCP server safe to use?

io.github.memtomem/memtomem scores 53 out of 100 on VerifyMCP. We found no known CVEs affecting it as of 22 September 2026. That is a record of what we were able to check automatically, not an endorsement. The category breakdown on this page shows every signal behind the number, including the ones we could not confirm.

### What tools does the io.github.memtomem/memtomem MCP server expose?

io.github.memtomem/memtomem exposes 9 tools: mem_index, mem_add, mem_recall, mem_search, mem_stats, and 4 more. Their descriptions and schemas cost roughly 2,314 tokens of context every time the server is loaded.

### Is the io.github.memtomem/memtomem MCP server still maintained?

io.github.memtomem/memtomem is still listed as active in the MCP registry. We last reached this channel on 22 September 2026. Those dates come from our own scans of the registry and the channel itself, not from anything the publisher announced.

### What licence is the io.github.memtomem/memtomem MCP server under?

io.github.memtomem/memtomem declares the Apache-2.0 licence, which is OSI-approved. That covers the source only, and says nothing about the cost of any service it calls.

## Links

- PyPI project: https://pypi.org/project/memtomem/
- Socket report: https://socket.dev/pypi/package/memtomem
- Repository: https://github.com/memtomem/memtomem
- Website: https://memtomem.com/
- Changelog RSS feed: https://verifymcp.io/servers/memtomem-memtomem/memtomem.xml
- Changelog JSON feed: https://verifymcp.io/servers/memtomem-memtomem/memtomem.json
- HTML version of this page: https://verifymcp.io/servers/memtomem-memtomem/memtomem
